it-swarm.com.de

Hinzufügen eines Verzeichnisses zu $ ​​PATH in CentOS?

Wir haben gerade unsere neuen Server eingerichtet und führen CentOS auf allen aus. Nach erfolgreicher Installation von Ruby Enterprise Edition) möchte ich nun die REE/bin hinzufügen (befindet sich unter /usr/lib/Ruby-enterprise/bin), um es zum Standardverzeichnis zu machen Ruby Interpreter auf dem Server.

Ich habe Folgendes versucht, wodurch es nur zur aktuellen Shell-Sitzung hinzugefügt wird:

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

Was wäre der richtige Ansatz, um permanent dieses Verzeichnis zu $ ​​PATH für alle Benutzer hinzuzufügen? Ich bin derzeit als root angemeldet.

Danke im Voraus!

90
vonconrad

Es ist keine gute Idee, /etc/profile Für solche Dinge zu bearbeiten, da Sie alle Änderungen verlieren, wenn CentOS ein Update für diese Datei veröffentlicht. Genau dafür ist /etc/profile.d Bestimmt:

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

Melden Sie sich wieder an und genießen Sie Ihren (sicher) aktualisierten PFAD:

# 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

Anstatt sich erneut anzumelden, können Sie das Profil neu laden:

# . /etc/profile

Dadurch wird die Variable $PATH Aktualisiert.

119
Mike Conigliaro

Nachdem ich den Ratschlägen von fmonk gefolgt war, habe ich /etc/bashrc, wo ich bemerkte, dass "Umgebungsmaterial in/etc/profile geht". Ich fuhr fort, in /etc/profile, Ich habe es gesehen:

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

Um mein Problem zu lösen, habe ich einfach pathmunge /usr/lib/Ruby-enterprise/bin unter der if-Anweisung. Dies löste mein Problem.

11
vonconrad

"Eine interaktive Anmelde-Shell wird nach einer erfolgreichen Anmeldung mit/bin/login durch Lesen der Datei/etc/passwd gestartet. Dieser Shell-Aufruf liest normalerweise/etc/profile und sein privates Äquivalent ~/.bash_profile beim Start.

Eine interaktive Shell ohne Anmeldung wird normalerweise in der Befehlszeile mit einem Shell-Programm (z. B. [Eingabeaufforderung] $/bin/bash) oder mit dem Befehl/bin/su gestartet. Eine interaktive Shell ohne Anmeldung wird auch mit einem Terminalprogramm wie xterm oder konsole in einer grafischen Umgebung gestartet. Diese Art des Shell-Aufrufs kopiert normalerweise die übergeordnete Umgebung und liest dann die ~/.bashrc-Datei des Benutzers, um zusätzliche Anweisungen zur Startkonfiguration zu erhalten. " http://www.linuxfromscratch.org/blfs/view/6.3/postlfs/profile .html

Daher würde ich Umgebungsvariablen nicht in bashrc einfügen, da dies nicht nur gegen die gängige Konvention verstößt, sondern Sie auch Ihre bashrc-Variablen vermissen, wenn Sie ein Terminal aus einer grafischen Desktop-Umgebung aufrufen.

Auf Redhat im /etc/profile Ich habe diesen Kommentar gefunden:

"Systemweite Aliase und Funktionen sollten in/etc/bashrc gespeichert werden. Persönliche Umgebungsvariablen und Startprogramme sollten in ~/.bash_profile gespeichert werden. Persönliche Aliase und Funktionen sollten in ~/.bashrc gespeichert werden."

Wenn Sie also Umgebungsvariablen auf Benutzerbasis festlegen möchten, tun Sie dies in der Datei .bash_profile des Benutzers.

Auf dem Weg zum .bash_profile Ich lese:

"Persönliche Umgebungsvariablen und Startprogramme.

Persönliche Aliase und Funktionen sollten in ~/.bashrc stehen. Systemweite Umgebungsvariablen und Startprogramme befinden sich in/etc/profile. Systemweite Aliase und Funktionen befinden sich in/etc/bashrc. "

Schlussfolgerung
Wenn nur root Programme sehen soll, die sich befinden, zum Beispiel in/sbin, würde ich diesen Pfad zu root's .bash_profile Datei. Aber wenn Sie möchten, dass jeder Benutzer sieht, welche root-spezifischen Programme auf Ihrer Box installiert sind, würde ich /sbin in /etc/.profile. Jetzt kann jeder Benutzer die Tab-Vervollständigung verwenden, um nach root-spezifischen Programmen zu suchen und die Rechte bei Bedarf zu erhöhen.

Sonderfall: SSH
Wenn ssh mit einer Befehlszeile gestartet wird, wird eine interaktive Anmeldeshell gestartet. Aber in diesem Fall /etc/profile wird nicht gelesen. Als ich Umgebungsvariablen im .bash_profile Datei jedes Benutzers, mit dem es gearbeitet hat ssh.

4
user54883

SORRY hat die Frage falsch interpretiert. Die folgende Antwort bezieht sich auf das Profil eines BENUTZERS und lässt es für den Fall, dass es jemandem hilft

ändern Sie .bash_profile

nano ~/.bash_profile

fügen Sie dann irgendwo in der Datei Ihre Pfade hinzu/ändern Sie sie durch:

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

laden Sie dann Ihr Profil neu

source ~/.bash_profile

oder abmelden und erneut anmelden

wenn Sie PATH aktivieren, sollten Ihre neu hinzugefügten Pfade enthalten sein

echo $PATH
3
GiorgosK