Apa tempat terbaik untuk mengatur variabel lingkungan sistem lebar di Linux?

26

Saya hanya ingin mengatur variabel lingkungan sistem lebar, JAVA_HOMEuntuk semua pengguna, termasuk pengguna root .

Persyaratan:

  • dapat diakses oleh pengguna normal
  • dapat diakses oleh root
  • selalu dimuat, tidak hanya untuk bash (gnome-terminal tidak memulai bash secara default)
  • untuk bekerja di Ubuntu, Debian dan Red Hat opsional
  • hebat jika penambahan bisa dengan mudah dituliskan
Sorin
sumber
Untuk cangkang interaktif, periksa ini, minta ubuntu keluar.
quickshiftin

Jawaban:

26

Karena tidak ada yang menambahkan jawaban lengkap di sini adalah apa yang saya anggap terbaik saat ini, setidaknya untuk ubuntu tetapi saya terbuka untuk menyesuaikan jawaban untuk platform * nix lainnya.

# **create**: /etc/profile.d/java.sh
export JAVA_HOME=/usr/lib/jvm/default-java

Opsi lain yang sudah dipertimbangkan tetapi dikesampingkan:

  • /etc/environment berfungsi tetapi lebih sulit untuk dipertahankan karena alat atau orang lain dapat mengeditnya.
  • /etc/profile - sama seperti di atas
Sorin
sumber
11

Di Debian / Ubuntu itu akan menjadi / etc / environment

Saya tidak tahu yang setara dengan Red Hat.

diobjekkan
sumber
1
Saya percaya / etc / environment sudah usang
Pat James
@PatJames Anda punya info lebih lanjut tentang ini? Saya mencoba / etc / environment tidak dimuat untuk root bahkan setelah saya reboot mesin.
sorin
@SorinSbarnea beberapa info ada di sini: wiki.debian.org/Locale menunjukkan / etc / environment tidak lagi digunakan dalam rilis yang lebih baru
Pat James
1
Halaman itu hanya mengatakan bahwa Anda tidak boleh tetapi lokal variabel terkait di /etc/environment. Lihat juga serverfault.com/a/584072/26218
Aliran
11

Saya tidak mengerti mengapa Anda mengesampingkan / etc / profile. Itu adalah lokasi yang benar.

dmourati
sumber
9

Beberapa telah menjawab mengatakan bahwa /etc/environmentdepricated dan / atau tidak digunakan dalam Debian lagi, dan ini (seperti pada versi 7) salah.

File ini sebenarnya dibaca oleh PAM - khususnya pam_env(8),, melalui default ke envfileflag. Halaman manual juga menyatakan default ini di bawah bagian FILES.

Para wiki yang dikutip (terutama yang lokal) hanya menyatakan bahwa variabel lingkungan berbasis lokal sekarang dimaksudkan /etc/profile. Pernyataan mereka "(dalam versi Debian yang lebih lama, juga / etc / environment)" tidak jelas, dan berada dalam konteks lokal.

Grep cepat /etc/pam.dmenunjukkan melalui :

root@box:/etc/pam.d# grep pam_env.so *
atd:auth        required        pam_env.so
cron:session       required   pam_env.so
cron:session       required   pam_env.so envfile=/etc/default/locale
login:session       required   pam_env.so readenv=1
login:session       required   pam_env.so readenv=1 envfile=/etc/default/locale
sshd:auth       required     pam_env.so # [1]
sshd:auth       required     pam_env.so envfile=/etc/default/locale
su:session       required   pam_env.so readenv=1
su:session       required   pam_env.so readenv=1 envfile=/etc/default/locale

Baris konfigurasi tersebut adalah aditif, dan karena yang pertama hilang envfile, maka defaultnya adalah /etc/environment.

Semua ini, tentu saja, bergantung pada biner apa pun yang Anda gunakan ( crond, shell login, dll) dikompilasi melawan PAM.

Akhirnya, ini menyiratkan bahwa sistem lain yang menggunakan PAM (misalnya RedHat), berperilaku sama, seperti yang dapat dilihat di halaman manual masing-masing.

ikan lingfish
sumber
2

Satu catatan samping: Lihatlah Modul Lingkungan . Saya menggunakan ini setiap kali saya harus menawarkan lingkungan UNIX yang kompleks, versi, dapat diperluas sendiri, ringkas untuk puluhan atau ratusan pengguna. Ini terutama digunakan pada lingkungan HPC multi-pengguna skala besar. Hanya menggunakannya untuk satu variabel tertentu tentu saja rekayasa berlebihan, tetapi melakukan pekerjaan yang luar biasa setelah Anda membutuhkan lebih dari beberapa paket perangkat lunak dan lingkungannya.

pfo
sumber
1

/etc/profileharus bekerja. Saya baru saja diuji untuk memastikan, dimasukkan export SOMETEST=1234ke /etc/profiledan setelah login kembali echo $SOMETESTmemberi saya 1234seperti yang diharapkan. Juga darignome-terminal

wk.
sumber
1

/etc/enviromenttidak digunakan dalam rilis stabil debian terakhir. Rekomendasi ini adalah membuat *.shfile Anda sendiri /etc/profile.d/untuk porpuose ini seperti yang dikatakan Sorin S. Lihat https://wiki.debian.org/EnvironmentVariables

tanjung
sumber
0

Anda tidak dapat menggunakan ~ file spesifik apa pun dalam kasus ini. begitu....

/etc/profileakan menjadi tempat yang tepat untuk itu dalam hal ini. Pengguna yang masuk saat ini harus mendapatkan sesi login baru, tetapi ini seharusnya tidak menjadi masalah besar.

@ wk01: /etc/profiletidak dimuat oleh shell nonlogin secara default. Anda .bashrc mungkin memuatnya ...

mober
sumber