Comment définir PATH pour tous les utilisateurs de Debian?

25

J'ai un serveur Debian Lenny, et j'aimerais que l' www-datautilisateur ait /usr/local/zend/bindans son PATH, afin qu'il puisse exécuter un script dans cron as www-data.

Comment puis-je ajouter /usr/local/zend/binà PATH, donc www-datapeut exécuter des fichiers dans /usr/local/zend/bin?

Sandra
la source

Réponses:

40

Le premier endroit où PATH est défini est /etc/login.defs. Il y a un paramètre pour root et un paramètre pour tout le monde.

Un autre endroit où vous pouvez définir des variables d'environnement est /etc/environment. Ces paramètres s'appliqueront à tout le monde (vous ne pouvez pas y écrire de code shell arbitraire).

Un troisième endroit où vous pouvez définir des variables d'environnement est /etc/profile. Là, vous pouvez écrire du code shell arbitraire. Si vous souhaitez un paramètre spécifique à l'utilisateur, il existe le fichier correspondant par utilisateur ~www-data/.profile. Mais cela ne s'appliquera qu'aux connexions interactives sur console; en particulier, il ne s'appliquera pas aux tâches cron à moins qu'elles ne soient explicitement source /etc/profile.

Si vous n'avez besoin que de ce PATHparamètre dans une crontab utilisateur, vous pouvez l'écrire au début de la crontab. Notez que vous avez besoin de la liste complète ( PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/zend/bin), vous ne pouvez pas utiliser une substitution de variable ( PATH=$PATH:/usr/local/zend/binne fonctionnera pas là-bas).

Gilles 'SO- arrête d'être méchant'
la source
---- comment rechargez-vous par exemple /etc/login.defs?
MrCalvin
@MrCalvin En vous connectant.
Gilles 'SO- arrêtez d'être méchant'
1
Y a-t-il des raisons /etc/login.defsqui seraient ignorées? J'ai mis à jour ENV_PATHet je fais écho à $ PATH lorsque .bashrc est chargé. Quelque part au milieu, il est en train d'être modifié ou il n'est pas mis à jour car il affiche l'ancienne valeur. J'ai redémarré l'ordinateur - ce n'est donc pas ça.
Annan
@Annan Il y a de fortes chances que cela soit changé quelque part. Notez que ma réponse a été écrite en 2010, avant systemd; si votre système utilise systemd, il peut avoir sa propre façon de définir PATHen plus ou en remplacement d'autres façons.
Gilles 'SO- arrête d'être méchant'
8

Pour définir un chemin d'accès pour tous les utilisateurs sauf root, modifiez /etc/profileou /etc/enviroment. Pour root ou un utilisateur individuel, modifiez leur .bashrcou .bash_profileleurs répertoires personnels, respectivement. Ajoutez le PATH=$PATH:/new/location/.

David Rickman
la source
1

Pour définir simplement var pour tous les utilisateurs sans surcharger votre profile, vous pouvez ajouter votre propre petit script dans un /etc/profile.drépertoire comme celui-ci:

echo 'PATH="/usr/local/zend/bin:$PATH"' > /etc/profile.d/zend_path.sh

Ensuite, reconnectez-vous.

user3132194
la source
1

nano / etc / profile

Ajoutez ces lignes à la fin du fichier:

export JAVA_HOME = / opt / jdk-12.0.1

export MAVEN_HOME = / opt / apache-maven-3.6.1

export M2_HOME = / opt / apache-maven-3.6.1

exporter M2 = / opt / apache-maven-3.6.1 / bin

export PATH = $ JAVA_HOME / bin: $ M2: $ PATH

Enregistrez le fichier. Redémarrez ou utilisez la commande ci-dessous:

source / etc / profile

Testez vos paramètres:

echo $ JAVA_HOME

javac --version

Ryan Augustine
la source