Apakah itu ekspor? menambahkan itu dan itu bersifat global?
TIMEX
saya pikir itu hanya ditambahkan pada sesi saat ini, ketika Anda membuka sesi baru di terminal itu akan hilang
Haryono Sariputra
Jawaban:
104
Seperti /etc/profileyang disebutkan orang lain, beberapa sistem Linux sekarang menggunakan direktori /etc/profile.d/; setiap .shfile di sana akan bersumber oleh /etc/profile. Ini sedikit lebih rapi untuk menyimpan hal-hal lingkungan kustom Anda dalam file ini daripada hanya mengedit /etc/profile.
Jika semua layanan login menggunakan PAM , dan semua layanan login memiliki file konfigurasi session required pam_env.somasing-masing /etc/pam.d/*, maka semua sesi login akan memiliki beberapa variabel lingkungan yang ditetapkan sebagaimana ditentukan dalampam_env file konfigurasi.
Pada sebagian besar distribusi Linux modern, ini semua ada di sana secara default - cukup tambahkan variabel lingkungan global yang Anda inginkan /etc/security/pam_env.conf.
Ini berfungsi terlepas dari shell pengguna, dan juga berfungsi untuk login grafis (jika xdm / kdm / gdm / entrance / ... diatur seperti ini).
+1 Anda juga perlu melakukan reboot setelah menambahkan variabel di pam_env.conf langsung menyebabkan on the fly $ echo $ variablename tidak ditampilkan
9
Anda tidak perlu memulai ulang, Anda harus masuk kembali. (Tidak me-reboot server kritis untuk saya)
Lyndon White
Ini sepertinya tidak berlaku untuk distro saya, Mint 17.2. File yang sudah diinstal sepenuhnya dikomentari, dan jika saya menambahkan sesuatu seperti echo foo>/home/me/bardan reboot (dan login lagi), file itu tidak dapat dibuat. (Mungkin ada cara yang lebih elegan untuk menguji ini, tetapi saya ingin memastikan sebelum berkomentar di sini.)
Michael Scheper
16
Hebatnya, Unix dan Linux sebenarnya tidak memiliki tempat untuk mengatur variabel lingkungan global. Yang terbaik yang dapat Anda lakukan adalah mengatur agar shell tertentu memiliki inisialisasi khusus situs.
Jika Anda memasukkannya /etc/profile, itu akan menangani hal-hal untuk sebagian besar pengguna shell yang kompatibel dengan posix. Ini mungkin "cukup baik" untuk tujuan yang tidak kritis.
Tetapi siapa pun yang memiliki cshatau tcshshell tidak akan melihatnya, dan saya tidak percaya cshmemiliki file inisialisasi global.
/etc/environmentsebenarnya tampaknya mengatur variabel lingkungan untuk saya, bahkan sebagai pengguna root. Saya tahu itu /etc/environmentada di amazon linux dan ubuntu. Saya tidak dapat memeriksa apakah berfungsi untuk csh, tcsh, atau zsh.
Jordan Stewart
itu tidak spesifik untuk shell yang Anda gunakan, itu benar-benar global
Xerus
9
Beberapa kutipan menarik dari bash manpage:
Ketika bash dipanggil sebagai shell login interaktif, atau sebagai shell non-interaktif dengan --loginopsi, bash pertama kali membaca dan mengeksekusi perintah dari file /etc/profile, jika file itu ada. Setelah membaca file itu, ia mencari ~/.bash_profile,
~/.bash_login dan ~/.profile, agar, dan membaca dan mengeksekusi perintah dari yang pertama yang ada dan dapat dibaca. The --noprofilepilihan mungkin digunakan ketika shell dimulai untuk menghambat perilaku ini.
...
Ketika shell interaktif yang bukan shell login dimulai, bash membaca dan mengeksekusi perintah dari
/etc/bash.bashrcdan ~/.bashrc, jika file-file ini ada. Ini mungkin terhambat dengan menggunakan--norc opsi. Itu--rcfileopsi file akan memaksa bash untuk membaca dan menjalankan perintah dari file alih-alih /etc/bash.bashrcdan
~/.bashrc.
Jadi lihat /etc/profileatau /etc/bash.bashrc, file-file ini adalah tempat yang tepat untuk pengaturan global. Letakkan sesuatu seperti ini di dalamnya untuk mengatur variabel lingkungan:
Perhatikan bahwa pada sistem Unix klasik, baik Bourne shell dan Korn shell juga membaca / etc / profile - ini mungkin merupakan lokasi yang paling banyak digunakan untuk pengaturan lingkungan sistem. Beberapa versi C shell terlihat di /etc/csh.cshrc dan /etc/csh.login serta lokasi per-pengguna; yang lain tidak menggunakan file pengaturan lingkungan sistem.
Jonathan Leffler
Luar biasa, hanya apa yang saya cari sejauh pengaturan env untuk pengguna shell non-login.
David Mann
Maaf, sepertinya saya tidak sengaja menurunkan ini ketika beberapa saat panahnya tidak terlihat ... maukah Anda mengedit ini (salah ketik "environmentEment" di baris kedua hingga terakhir, misalnya) agar saya dapat menghapus downvote?
Setiap proses yang berjalan di bawah kernel Linux menerima lingkungannya sendiri dan unik yang diwarisi dari induknya. Dalam hal ini, induknya bisa berupa shell itu sendiri (menelurkan sub shell), atau program 'login' (pada sistem tipikal).
Karena setiap lingkungan proses dilindungi, tidak ada cara untuk 'menyuntikkan' variabel lingkungan ke setiap proses yang berjalan, jadi bahkan jika Anda memodifikasi shell .rc / profil default, itu tidak akan berlaku sampai setiap proses keluar dan memuat ulang pengaturan memulai.
Lihat di / etc / untuk memodifikasi variabel start up default untuk shell tertentu. Sadarilah bahwa pengguna dapat (dan sering melakukan) mengubahnya dalam pengaturan masing-masing.
Unix dirancang untuk mematuhi pengguna, dalam batas-batas tertentu.
NB : Bash bukan satu - satunya shell di sistem Anda. Perhatikan baik-baik apa yang sebenarnya ditunjukkan oleh tautan simbol / bin / sh. Pada banyak sistem, ini sebenarnya bisa berupa tanda hubung yang (secara default, tanpa permintaan khusus) secara POSIXLY benar. Oleh karena itu, Anda harus berhati-hati untuk memodifikasi kedua default, atau skrip yang dimulai dengan / bin / sh tidak akan mewarisi default global Anda. Demikian pula, berhati-hatilah untuk menghindari sintaks yang hanya dimengerti bash saat mengedit keduanya, alias avoiding bashisms.
Jawaban:
Seperti
/etc/profile
yang disebutkan orang lain, beberapa sistem Linux sekarang menggunakan direktori/etc/profile.d/
; setiap.sh
file di sana akan bersumber oleh/etc/profile
. Ini sedikit lebih rapi untuk menyimpan hal-hal lingkungan kustom Anda dalam file ini daripada hanya mengedit/etc/profile
.sumber
Jika LinuxOS Anda memiliki file ini:
Anda dapat menggunakannya untuk menetapkan variabel lingkungan secara permanen untuk semua pengguna.
Diambil dari: http://www.sysadmit.com/2016/04/linux-variables-de-entorno-permanentes.html
sumber
man 8 pam_env
man 5 pam_env.conf
Jika semua layanan login menggunakan PAM , dan semua layanan login memiliki file konfigurasi
session required pam_env.so
masing-masing/etc/pam.d/*
, maka semua sesi login akan memiliki beberapa variabel lingkungan yang ditetapkan sebagaimana ditentukan dalampam_env
file konfigurasi.Pada sebagian besar distribusi Linux modern, ini semua ada di sana secara default - cukup tambahkan variabel lingkungan global yang Anda inginkan
/etc/security/pam_env.conf
.Ini berfungsi terlepas dari shell pengguna, dan juga berfungsi untuk login grafis (jika xdm / kdm / gdm / entrance / ... diatur seperti ini).
sumber
echo foo>/home/me/bar
dan reboot (dan login lagi), file itu tidak dapat dibuat. (Mungkin ada cara yang lebih elegan untuk menguji ini, tetapi saya ingin memastikan sebelum berkomentar di sini.)Hebatnya, Unix dan Linux sebenarnya tidak memiliki tempat untuk mengatur variabel lingkungan global. Yang terbaik yang dapat Anda lakukan adalah mengatur agar shell tertentu memiliki inisialisasi khusus situs.
Jika Anda memasukkannya
/etc/profile
, itu akan menangani hal-hal untuk sebagian besar pengguna shell yang kompatibel dengan posix. Ini mungkin "cukup baik" untuk tujuan yang tidak kritis.Tetapi siapa pun yang memiliki
csh
atautcsh
shell tidak akan melihatnya, dan saya tidak percayacsh
memiliki file inisialisasi global.sumber
/etc/environment
sebenarnya tampaknya mengatur variabel lingkungan untuk saya, bahkan sebagai pengguna root. Saya tahu itu/etc/environment
ada di amazon linux dan ubuntu. Saya tidak dapat memeriksa apakah berfungsi untuk csh, tcsh, atau zsh.Beberapa kutipan menarik dari bash manpage:
Jadi lihat
/etc/profile
atau/etc/bash.bashrc
, file-file ini adalah tempat yang tepat untuk pengaturan global. Letakkan sesuatu seperti ini di dalamnya untuk mengatur variabel lingkungan:sumber
Menggunakan PAM sangat baik.
sumber
Setiap proses yang berjalan di bawah kernel Linux menerima lingkungannya sendiri dan unik yang diwarisi dari induknya. Dalam hal ini, induknya bisa berupa shell itu sendiri (menelurkan sub shell), atau program 'login' (pada sistem tipikal).
Karena setiap lingkungan proses dilindungi, tidak ada cara untuk 'menyuntikkan' variabel lingkungan ke setiap proses yang berjalan, jadi bahkan jika Anda memodifikasi shell .rc / profil default, itu tidak akan berlaku sampai setiap proses keluar dan memuat ulang pengaturan memulai.
Lihat di / etc / untuk memodifikasi variabel start up default untuk shell tertentu. Sadarilah bahwa pengguna dapat (dan sering melakukan) mengubahnya dalam pengaturan masing-masing.
Unix dirancang untuk mematuhi pengguna, dalam batas-batas tertentu.
NB : Bash bukan satu - satunya shell di sistem Anda. Perhatikan baik-baik apa yang sebenarnya ditunjukkan oleh tautan simbol / bin / sh. Pada banyak sistem, ini sebenarnya bisa berupa tanda hubung yang (secara default, tanpa permintaan khusus) secara POSIXLY benar. Oleh karena itu, Anda harus berhati-hati untuk memodifikasi kedua default, atau skrip yang dimulai dengan / bin / sh tidak akan mewarisi default global Anda. Demikian pula, berhati-hatilah untuk menghindari sintaks yang hanya dimengerti bash saat mengedit keduanya, alias
avoiding bashisms
.sumber