104 votes

Ajouter un répertoire à $PATH sous CentOS ?

Nous venons de mettre en place notre (nos) nouveau(x) serveur(s) et nous utilisons CentOS sur tous les serveurs. Après avoir installé avec succès Ruby Enterprise Edition, je voudrais maintenant ajouter le programme REE /bin (situé à /usr/lib/ruby-enterprise/bin ) pour en faire l'interpréteur Ruby par défaut sur le serveur.

J'ai essayé ce qui suit, qui ne l'ajoute qu'à la session Shell en cours :

export PATH=/usr/lib/ruby-enterprise/bin:$PATH

Quelle serait l'approche correcte pour en permanence en ajoutant ce répertoire à $PATH para tous les utilisateurs ? Je suis actuellement connecté en tant que root .

140voto

Mike Conigliaro Points 3035

Ce n'est pas une bonne idée d'éditer /etc/profile pour ce genre de choses, car vous perdrez toutes vos modifications lorsque CentOS publiera une mise à jour pour ce fichier. C'est exactement ce que /etc/profile.d est pour :

echo 'pathmunge /usr/lib/ruby-enterprise/bin' > /etc/profile.d/ree.sh
chmod +x /etc/profile.d/ree.sh

Connectez-vous à nouveau et profitez de votre mise à jour (en toute sécurité). $PATH :

echo $PATH
/usr/lib/ruby-enterprise/bin:/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

which ruby
/usr/lib/ruby-enterprise/bin/ruby

Au lieu de vous reconnecter, vous pouvez recharger le profil :

. /etc/profile

Cela permettra de mettre à jour le $PATH variable.

2 votes

~/.profile est aussi une autre option valable

8 votes

Oui, pour un seul utilisateur. Mais la question portait sur la modification de PATH pour todo utilisateurs.

4 votes

@Mike Qu'est-ce que cette commande pathmunge ?

12voto

vonconrad Points 1251

Après avoir suivi le conseil de fmonk, j'ai vérifié /etc/bashrc où j'ai remarqué qu'il était dit que "les trucs d'environnement vont dans /etc/profile". J'ai commencé à regarder dans /etc/profile j'ai vu ça :

pathmunge () {
    if ! echo $PATH | /bin/egrep -q "(^|:)$1($|:)" ; then
       if [ "$2" = "after" ] ; then
          PATH=$PATH:$1
       else
          PATH=$1:$PATH
       fi
    fi
}

[...]

# Path manipulation
if [ "$EUID" = "0" ]; then
    pathmunge /sbin
    pathmunge /usr/sbin
    pathmunge /usr/local/sbin
fi

Pour résoudre mon problème, j'ai simplement ajouté pathmunge /usr/lib/ruby-enterprise/bin sous l'instruction if. Cela a résolu mon problème.

0 votes

Quelqu'un pourrait-il expliquer ce que le "$EUID" = "0" signifie dans ce contexte ?

0 votes

EUID 0 signifie que l'utilisateur est root.

7 votes

Vous auriez dû utiliser /etc/profile.d. Voir ma réponse ci-dessous.

6voto

GiorgosK Points 211

Désolé, j'ai mal interprété la question l'asnwer suivant est pour un profil d'UTILISATEUR je le laisse au cas où cela aiderait quelqu'un

modifier le fichier .bash_profile

nano ~/.bash_profile

puis quelque part dans le fichier, ajoutez/modifiez vos chemins séparés par des :

 PATH=$PATH:$HOME/bin:/your/path
 export PATH

puis rechargez votre profil

source ~/.bash_profile

ou se déconnecter et se reconnecter

si vous vérifiez PATH, il devrait inclure vos nouveaux chemins ajoutés.

echo $PATH

4voto

"Un login interactif Shell est lancé après une connexion réussie, en utilisant /bin/login, en lisant le fichier /etc/passwd en lisant le fichier /etc/passwd. Cette invocation de Shell lit normalement le fichier /etc/profile. lit /etc/profile et son équivalent privé privé ~/.bash_profile au démarrage. démarrage.

Un Shell interactif sans login est normalement lancé en ligne de commande en utilisant un programme Shell (par ex, [prompt]$/bin/bash) ou par la commande /bin/su ou par la commande /bin/su. Un programme interactif sans login Shell interactif non connecté est également lancé avec un terminal programme de terminal tel que xterm ou konsole à partir de dans un environnement graphique. Ce type d'invocation de Shell normalement copie l'environnement parent et ensuite lit le fichier ~/.bashrc de l'utilisateur pour la une configuration de démarrage supplémentaire instructions de démarrage". http://www.linuxfromscratch.org/blfs/view/6.3/postlfs/profile.html

C'est pourquoi je ne mettrais pas de variables d'environnement dans bashrc, car non seulement cela va à l'encontre de la convention commune, mais vous manquerez également vos variables bashrc lorsque vous invoquerez un terminal à partir d'un environnement de bureau graphique.

Sur Redhat, dans le /etc/profile J'ai trouvé ce commentaire :

"Les alias et les fonctions du système doivent être placés dans /etc/bashrc. Le site personnel d'environnement et les programmes de démarrage doivent être placés dans ~/.bash_profile. Les alias et fonctions personnels doivent être placés dans ~/.bashrc".

Donc, si vous voulez définir des variables d'environnement pour un utilisateur, faites-le dans le fichier .bash_profile de l'utilisateur.

En se dirigeant vers le .bash_profile Je lis :

"Variables d'environnement personnelles et programmes de démarrage.

Les alias et fonctions personnels doivent être placés dans ~/.bashrc. Les variables d'environnement variables d'environnement et les programmes de démarrage se trouvent dans /etc/profile. Les alias et les fonctions à l'échelle du système se trouvent dans /etc/bashrc."

Conclusion
Si vous voulez que seul l'utilisateur root puisse voir les programmes résidant, par exemple, dans / sbin J'ajouterais ce chemin au dossier de root .bash_profile fichier. Mais si vous voulez que chaque utilisateur puisse voir quels programmes spécifiques à la racine sont installés sur votre boîte, je mettrais /sbin en /etc/.profile . Maintenant, chaque utilisateur peut utiliser la complétion de tabulation pour rechercher des programmes spécifiques à la racine et élever les droits si nécessaire.

Cas particulier : SSH
Lorsque ssh est lancé avec une ligne de commande, un login interactif Shell est lancé. Mais dans ce cas /etc/profile n'est pas lu. Lorsque j'ai défini des variables d'environnement dans le .bash_profile de chaque utilisateur qu'il a travaillé avec ssh.

1voto

Vous pouvez définir des variables d'environnement dans un fichier .rc ; pour les interpréteurs de commandes bash (je crois que c'est le plus courant, et par défaut dans CentOS) chaque utilisateur a un fichier appelé .bashrc dans son répertoire personnel.

Ajoutez la commande PATH=/usr/lib/ruby-enterprise/bin:$PATH à ce fichier pour le définir pour un utilisateur particulier.

Pour le définir pour tous les utilisateurs (comme vous le mentionnez), modifiez-le dans /etc/bashrc (le .bashrc par défaut dans le répertoire personnel de chaque utilisateur devrait être la source de ce fichier, mais vous devriez le vérifier).

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X