web-dev-qa-db-fra.com

Ajout d'un répertoire à $ PATH dans CentOS?

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

J'ai essayé ce qui suit, qui l'ajoute uniquement à la session Shell actuelle:

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

Quelle serait la bonne approche pour en permanence ajouter ce répertoire à $ PATH pour tous les utilisateurs. Je suis actuellement connecté en tant que root.

Merci d'avance!

90
vonconrad

Ce n'est pas une bonne idée de modifier /etc/profile pour des choses comme celle-ci, car vous perdrez toutes vos modifications chaque fois que 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

Reconnectez-vous et profitez de votre CHEMIN mis à jour (en toute sécurité):

# 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 mettra à jour le $PATH variable.

119
Mike Conigliaro

Après avoir suivi les conseils de fmonk, j'ai vérifié /etc/bashrc, où j'ai remarqué qu'il était dit que "Les éléments d'environnement vont dans/etc/profile". J'ai procédé à la recherche 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.

11
vonconrad

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

Un Shell interactif sans connexion est normalement démarré sur la ligne de commande à l'aide d'un programme Shell (par exemple, [Invite] $/bin/bash) ou par la commande/bin/su. Un shell interactif sans connexion est également démarré avec un programme terminal tel que xterm ou konsole à partir d'un environnement graphique. Ce type d'appel Shell copie normalement l'environnement parent, puis lit le fichier ~/.bashrc de l'utilisateur pour obtenir des instructions de configuration de démarrage supplémentaires. " http://www.linuxfromscratch.org/blfs/view/6.3/postlfs/profile .html

Par conséquent, je ne mettrais pas de variables d'environnement dans bashrc, car ce n'est pas seulement contre les conventions courantes, mais vous manquerez également vos variables bashrc lors de l'appel d'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 à l'échelle du système doivent aller dans/etc/bashrc. Les variables d'environnement personnel et les programmes de démarrage doivent aller dans ~/.bash_profile. Les alias et fonctions personnels doivent aller dans ~/.bashrc."

Donc, si vous souhaitez définir des variables d'environnement sur une base utilisateur, faites-le dans le fichier .bash_profile de l'utilisateur.

En route vers le .bash_profile Je lis:

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

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

Conclusion
Si vous voulez que root ne voit que les programmes résidant, par exemple dans/sbin j'ajouterais ce chemin au root de .bash_profile fichier. Mais si vous voulez que chaque utilisateur voit quels programmes spécifiques à la racine sont installés sur votre box, je mettrais /sbin en /etc/.profile. Désormais, 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 spécial: SSH
Lorsque ssh est démarré avec une ligne de commande, un shell de connexion interactif est démarré. Mais dans ce cas /etc/profile n'est pas lu. Lorsque j'ai défini des variables d'environnement dans le .bash_profile fichier de chaque utilisateur avec lequel il a travaillé ssh.

4
user54883

DÉSOLÉ a mal interprété la question la réponse suivante est pour le profil d'un UTILISATEUR le laissant au cas où cela aiderait quelqu'un

modifier .bash_profile

nano ~/.bash_profile

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

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

puis rechargez votre profil

source ~/.bash_profile

ou déconnectez-vous et reconnectez-vous

si vous cochez la case PATH, elle devrait inclure vos chemins nouvellement ajoutés

echo $PATH
3
GiorgosK