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!
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.
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.
"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.
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