Wo ist die systemweite Variable $ PATH gesetzt?

10

Ich verwende Ubuntu Desktop 14.04 und verwende daher die Nicht-Login-Shell. Wenn ich das GUI-Terminal öffne, lesen zuerst die Shell-Sitzungen ohne Anmeldung die folgenden Startdateien:

/etc/bash.bashrc
~/.bashrc

Die Nicht-Login-Shells erben die Umgebung vom übergeordneten Prozess, bei dem es sich um eine Login-Shell handelt. Daher liest die Sitzung auch die folgenden Startdateien:

/etc/profile
~/.bash_profile

Allerdings kann ich nicht finden , die $PATHfür die systemweite Wege mögen /bin, /sbin, /usr/bin, /usr/sbin, stellen Sie in eine dieser Dateien. Wo ist der $PATHSatz für diese Verzeichnisse?

Donato
quelle

Antworten:

15

Das (Standard-) Systemweite PATHwird in der /etc/environmentDatei festgelegt.

$ cat /etc/environment 
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games"

Es ist im Grunde der Ort, um die globalen Umgebungsvariablen zu speichern.

heemayl
quelle
+1, wissen Sie jedoch zufällig, ob $PATHes von der übergeordneten Anmeldeshell geerbt oder von jeder bashInstanz neu geladen wird ?
Kos
@kos Alle untergeordneten Prozesse erben die Umgebung von der übergeordneten Shell, es sei denn, sie werden natürlich in einer geänderten Umgebung ausgeführt.
heemayl
Ich stelle fest, dass die Shell die $HOMEVariable nicht zu erweitern scheint . Zum Beispiel das Hinzufügen $HOME/.composer/vendor/binzu dem PATHin /etc/environmentnicht ermöglicht Binärdateien in diesem Verzeichnis ohne Pfadpräfix ausgeführt werden. Die Verwendung ~/.composer/vendor/binfunktioniert auch nicht. Ich finde es notwendig, den absoluten Pfad hinzuzufügen, zB : /home/vagrant/.composer/vendor/bin. Dies scheint verwandt zu sein (erklärt dieses Verhalten jedoch nicht): askubuntu.com/questions/402353/…
Ben Johnson
2
@BenJohnson Das liegt einfach daran, dass /etc/environment(und ~/.pam/environment) vom pam_envPAM-Modul gelesen werden , nicht von der Shell oder irgendetwas anderem, das Shell- / Umgebungsvariablen versteht. Gleiches gilt für die ~Erweiterung. Sie müssen dort also den absoluten Pfad verwenden.
Heemayl