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


Wir haben gerade unsere neuen Server und wir betreiben CentOS auf allen. Nach der erfolgreichen Installation von Ruby Enterprise Edition möchte ich nun das REE / bin (unter /usr/lib/ruby-enterprise/bin) Verzeichnis, um es zum Standard-Ruby-Interpreter auf dem Server zu machen.

Ich habe folgendes versucht, das es nur der aktuellen Shell-Sitzung hinzufügt:

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

Was wäre die richtige Herangehensweise? permanent Hinzufügen dieses Verzeichnisses zu $ ​​PATH für Alle Nutzer. Ich bin momentan als root angemeldet.

Danke im Voraus!


68
2018-01-15 03:15


Ursprung




Antworten:


Es ist keine gute Idee zu bearbeiten /etc/profile für solche Dinge, weil Sie all Ihre Änderungen verlieren, wenn CentOS ein Update für diese Datei veröffentlicht. Das ist genau was /etc/profile.d ist für:

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

Logge dich ein und genieße deinen (sicher) aktualisierten 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

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

# . /etc/profile

Dies wird die aktualisieren $PATH Variable.


101
2017-08-22 16:29



~/.profile ist auch eine andere gültige Option - Zypher
Ja, für einen einzelnen Benutzer. Aber die Frage war, PATH zu ändern alles Benutzer. - Mike
@Mike Was ist das Pathmunge-Kommando? - Nickolai Leschov
@NickolaiLeschov Ich bin mir ziemlich sicher, dass es nur einen Pfad zu $ ​​PATH anhängt. - Mike
@NickolaiLeschov es eine Funktion, die in / etc / profile definiert ist - CrazyPheel


Nachdem ich fmonks Rat befolgt hatte, checkte ich aus /etc/bashrc, wo ich bemerkt habe, dass "Environment stuff geht in / etc / profile". Ich ging hinein /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, fügte ich einfach hinzu pathmunge /usr/lib/ruby-enterprise/bin unter der if-Anweisung. Das hat mein Problem gelöst.


9
2018-01-15 04:10



Könnte jemand erklären was das ist "$EUID" = "0" bedeutet in diesem Zusammenhang? - Eli
EUID 0 bedeutet, dass Benutzer root ist. - bbaja42
Du hättest /etc/profile.d verwenden sollen. Siehe meine Antwort unten. - Mike
Bitte beachte, dass @MikeConigliaro als richtig akzeptiert wird. Sein Weg ist der Richtige. Es wurde entwickelt, um so zu arbeiten. Sehen Sie sich die Dateien in. An /etc/profile.d/ Ordner und du wirst es bemerken. Wie bereits erwähnt, könnte ein Systemupdate Ihre Lösung rückgängig machen. - Caio Cunha


"Eine interaktive Login-Shell wird gestartet   nach erfolgreicher Anmeldung mit   / bin / login, indem Sie / etc / passwd lesen   Datei. Dieser Shellaufruf normalerweise   liest / etc / profile und seine private   äquivalent ~ / .bash_profile nach   Anlaufen.

Eine interaktive Nicht-Login-Shell ist   normalerweise an der Befehlszeile gestartet   Verwenden eines Shell-Programms (z.B.   [Eingabeaufforderung] $ / bin / bash) oder durch / bin / su   Befehl. Ein interaktiver Nicht-Login   Shell wird auch mit einem Terminal gestartet   Programm wie xterm oder konsole von   in einer grafischen Umgebung. Diese   Art der Shell-Aufruf normalerweise   kopiert die übergeordnete Umgebung und dann   liest die ~ / .bashrc-Datei des Benutzers für   zusätzliche Startkonfiguration   Anleitung."    http://www.linuxfromscratch.org/blfs/view/6.3/postlfs/profile.html

Daher würde ich keine Umgebungsvariablen in bashrc setzen, da dies nicht nur gegen gängige Konventionen ist, sondern Sie auch Ihre bashrc-Variablen vermissen, wenn Sie ein Terminal aus einer grafischen Desktop-Umgebung aufrufen.

Auf Redhat in der /etc/profile Ich habe diesen Kommentar gefunden:

"Systemweite Aliase und Funktionen sollten in / etc / bashrc gehen. Persönlich   Umgebungsvariablen und Startup-Programme sollten einbezogen werden   ~ / .bash_profile. Persönliche Aliase und Funktionen sollten berücksichtigt werden   ~ / .bashrc. "

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 Startup-Programme.

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

Fazit 
Wenn Sie möchten, dass nur root Programme sehen kann, diesbinIch würde diesen Pfad zu root hinzufügen .bash_profile Datei. Aber wenn Sie wollen, dass jeder Benutzer sieht, welche Root-spezifischen Programme auf Ihrer Box installiert sind, würde ich setzen /sbin in /etc/.profile. Jetzt kann jeder Benutzer die Tabulatorvervollständigung verwenden, um nach rootspezifischen Programmen zu suchen und die Rechte zu erhöhen, falls dies erforderlich ist.

Sonderfall: SSH
Wenn ssh mit einer Kommandozeile gestartet wird, wird eine interaktive Login-Shell gestartet. Aber in diesem Fall /etc/profile wird nicht gelesen. Wenn ich Umgebungsvariablen in der .bash_profile Datei von jedem Benutzer hat es mit ssh gearbeitet.


3
2017-11-08 21:34





SORRY hat die Frage falsch interpretiert Die folgende Antwort gilt für ein Benutzerprofil lass es für den Fall, dass es jemandem hilft

Ändern Sie .bash_profile

nano ~/.bash_profile

dann irgendwo in der Datei hinzufügen / ändern Sie Ihre Pfade getrennt durch:

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

dann lade dein Profil neu

source ~/.bash_profile

oder loggen Sie sich aus und loggen Sie sich erneut ein

Wenn Sie PATH überprüfen, sollte es Ihre neu hinzugefügten Pfade enthalten

echo $PATH

1
2017-10-31 08:53





Sie können Umgebungsvariablen in einer RC-Datei festlegen. für Bash-Shells (ich glaube, die häufigste und standardmäßig in CentOS) hat jeder Benutzer eine Datei namens. Bashrc in seinem Home-Verzeichnis.

Fügen Sie dieser Datei den Befehl PATH = / usr / lib / ruby-enterprise / bin: $ PATH hinzu, um sie für einen bestimmten Benutzer festzulegen.

Um es für alle Benutzer festzulegen (wie Sie es erwähnen), ändern Sie es in / etc / bashrc (die Standard-Bashrc im Home-Verzeichnis jedes Benutzers sollte diese Datei beziehen, aber Sie sollten das überprüfen).


0
2018-01-15 03:49