Di mana set variabel $ PATH seluruh sistem?

10

Saya menggunakan Ubuntu Desktop 14.04, dan karena itu, saya menggunakan shell non-login. Ketika saya membuka terminal GUI, pertama sesi shell non-login membaca file startup berikut:

/etc/bash.bashrc
~/.bashrc

Shell non-login mewarisi lingkungan dari proses induk, yang merupakan shell login, sehingga sesi ini juga membaca file startup berikut:

/etc/profile
~/.bash_profile

Namun, saya tidak dapat menemukan $PATHuntuk seluruh sistem jalan seperti /bin, /sbin, /usr/bin, /usr/sbin, diatur dalam file-file ini. Di mana $PATHset untuk direktori ini?

Donato
sumber

Jawaban:

16

Lebar sistem (default) PATHdiatur dalam /etc/environmentfile.

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

Ini pada dasarnya adalah tempat untuk menyelamatkan variabel lingkungan global.

heemayl
sumber
+1, namun apakah Anda tahu apakah $PATHitu diwarisi oleh shell login orang tua atau jika itu dimuat ulang oleh setiap bashinstance?
kos
@kos Semua proses anak mewarisi lingkungan dari shell induk kecuali tentu saja dijalankan dalam lingkungan yang dimodifikasi ..
heemayl
Saya perhatikan bahwa shell tampaknya tidak memperluas $HOMEvariabel. Misalnya, menambahkan $HOME/.composer/vendor/binke PATHdalam /etc/environmenttidak memungkinkan binari dalam direktori ini dieksekusi tanpa awalan jalur. Menggunakan ~/.composer/vendor/binjuga tidak berhasil. Saya menemukan perlu untuk menambahkan path absolut, misalnya: /home/vagrant/.composer/vendor/bin. Ini tampaknya terkait (meskipun tidak menjelaskan perilaku ini): askubuntu.com/questions/402353/…
Ben Johnson
2
@ BenJohnson Itu hanya karena /etc/environment(dan ~/.pam/environment) dibaca oleh pam_envmodul PAM, bukan shell atau apa pun yang memahami variabel shell / lingkungan; hal yang sama berlaku untuk ~ekspansi. Jadi, Anda perlu menggunakan jalur absolut di sana.
heemayl