Linux'ta sistem genelinde çevre değişkenlerini ayarlamak için en iyi yer neresidir?


26

Sadece kök kullanıcı dahil tüm kullanıcılarJAVA_HOME için sistem çapında bir ortam değişkeni kurmak istiyorum .

Gereksinimler:

  • normal kullanıcılar tarafından erişilebilir
  • kök için erişilebilir
  • her zaman yüklü, sadece bash için değil (gnome-terminal varsayılan olarak bash başlatmaz)
  • Ubuntu, Debian ve isteğe bağlı olarak Red Hat üzerinde çalışmak
  • Ekleme kolayca komut dosyası olabilir, harika

Etkileşimli mermiler için bu soruyu kontrol edin .
QuickTiftin

Yanıtlar:


26

Burada kimse tam bir cevap eklemediği için şu anda en iyisini düşündüğüm şey, en azından ubuntu için ama cevabı diğer * nix platformlarına uyarlamaya açıkım.

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

Zaten düşünülen ancak ekarte edilen diğer seçenekler:

  • /etc/environment çalışır, ancak diğer araçların veya insanların düzenleyebildiği gibi bakımı zordur.
  • /etc/profile - yukarıdaki gibi

11

Debian / Ubuntu'da / etc / environment olur.

Red Hat eşdeğeri bilmiyorum.


1
İnanıyorum / etc / ortamın kaldırıldığına
Pat James

@PatJames bu konuda daha fazla bilgiye sahip misiniz? Makineyi yeniden başlattıktan sonra bile / etc / ortam kök için yüklenmedi.
sorin

@SorinSbarnea'da bazı bilgiler burada: wiki.debian.org/Locale / etc / ortamını belirten yeni sürümlerde artık kullanılmıyor
Pat James

1
Bu sayfa sadece yerel değişkenlerle ilgili değil, yerel olarak yapmanız gerektiğini söylüyor /etc/environment. Ayrıca bakınız serverfault.com/a/584072/26218
Akış

11

Neden / etc / profile seçtiğini anlamıyorum. Doğru yer burası.


9

Birkaçı /etc/environmentartık Debian'da kullanılmadığını ve / veya artık kullanılmadığını söylüyor ve bu (7. versiyondaki gibi) yanlıştır.

Dosya aslında PAM tarafından okunur - özellikle, pam_env(8)varsayılan olarak envfilebayrağa. Manpage, FILES bölümünde bu varsayılanı da gösterir.

Alıntılanan wikiler (özellikle yerel olanı), yalnızca yerel tabanlı ortam değişkenlerinin içinde bulunduğunu belirtir /etc/profile. "(Debian'ın eski sürümlerinde, ayrıca / etc / environment)" ifadesi de belirsiz ve yerel bağlamda.

Hızlı bir gezinme /etc/pam.dşovları:

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

Bu yapılandırma satırları katkı maddesidir ve birincisi eksik olduğundan envfile, varsayılan olarak varsayılan değerdir /etc/environment.

Tüm bunlar elbette, PAM'a crondkarşı kullandığınız ikili dosyalara ( giriş kabukları vb.) Dayanmaktadır.

Son olarak, bu PAM (örneğin RedHat) kullanan diğer sistemlerin, ilgili sayfasında görüldüğü gibi aynı şekilde davrandığını gösterir.


2

Bir yandan not: Modül Ortamına bir göz atın . Bunu her seferinde düzinelerce veya yüzlerce kullanıcıya karmaşık, sürümlü, kendiliğinden genişletilebilir, özlü bir UNIX ortamı sunmak zorunda kalıyorum. Genelde büyük ölçekli çok kullanıcılı HPC ortamlarında kullanılır. Sadece belirli bir değişken için kullanmak onu kesinlikle fazla mühendislikle uğraşır, ancak birkaç yazılım paketinden ve çevresinden daha fazlasına ihtiyacınız olduğunda harika bir iş çıkarır.


1

/etc/profileçalışmalı. Ben emin olmak için sadece şimdi test koymak export SOMETEST=1234için /etc/profileve yeniden günlüğü sonra echo $SOMETESTbana verdi 1234beklendiği gibi. Ayrıcagnome-terminal



0

Bu durumda herhangi bir ~ belirli dosyayı kullanamazsınız. yani....

/etc/profileBu durumda bunun için uygun bir yer olurdu. Şu an giriş yapmış olan kullanıcılar yeni bir giriş oturumu almak zorundalar, ancak bu bir sorun olmamalı.

@ wk01: /etc/profilevarsayılan olarak bir nonlogin kabuğu tarafından yüklenmez. senin .bashrc muhtemelen yükleniyor ...

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.