Linux sistemimdeki herkes için ortam değişkeni nasıl ayarlanır?


133

Tüm kullanıcılarım için evrensel olan belirli ayarlara sahip olabilir miyim?


2
İHRACAT mı? ekleyelim ve küresel mi?
TIMEX

Sanırım sadece mevcut oturuma eklendi, terminalde yeni oturum açtığınızda kaybolacak
Haryono Sariputra

Yanıtlar:


104

Sıra itibariyle /etc/profilehangi diğerleri de söylediğim, bazı Linux sistemleri artık bir dizin kullanmak /etc/profile.d/; .shoradaki herhangi bir dosyanın kaynağı olacaktır /etc/profile. Özel ortam öğelerinizi bu dosyalarda tutmak, düzenlemekten biraz daha derli topludur /etc/profile.


4
Ya bazı kullanıcılar zsh gibi başka bir kabuk kullanırsa?
Matthieu Napoli

70
bu küresel değil ... kabukla sınırlı .. çok kötü bu en çok kabul gören cevap
mmm

1
zsh, .sh dosyalarını /etc/profile.d/ içinde kaynaklayacaktır, bunu / etc / zshrc'den görebilirsiniz @Matthieu Napoli
Bily

4
Komut dosyaları ROOT kullanıcısı için kullanılmaz.
Val


38

erkek 8 pam_env

adam 5 pam_env.conf

Tüm oturum açma hizmetleri PAM kullanıyorsa ve tüm oturum açma hizmetlerinin session required pam_env.sokendi /etc/pam.d/*yapılandırma dosyalarında varsa, tüm oturum açma oturumlarının pam_envyapılandırma dosyasında belirtildiği gibi ayarlanan bazı ortam değişkenleri olacaktır .

Çoğu modern Linux dağıtımında, hepsi varsayılan olarak oradadır - sadece istediğiniz global ortam değişkenlerini ekleyin /etc/security/pam_env.conf.

Bu, kullanıcının kabuğundan bağımsız olarak çalışır ve grafiksel oturum açma işlemleri için de çalışır (xdm / kdm / gdm / entry /… bu şekilde ayarlanmışsa).


1
+1 ayrıca pam_env.conf'a bir değişken ekledikten sonra yeniden başlatmanız gerekir çünkü anında $ echo $ variablename görünmüyor

9
Yeniden başlatmanıza gerek yok, yeniden oturum açmanız gerekiyor. (Benim için kritik sunucuları yeniden başlatmak yok)
Lyndon White

Bu, dağıtımım Mint 17.2 için geçerli görünmüyor. Önceden yüklenmiş dosya tamamen yorumlanır ve buna benzer bir şey eklersem echo foo>/home/me/barve yeniden başlatırsam (ve tekrar oturum açarsam) bu dosya oluşturulmaz. (Bunu test etmenin muhtemelen daha zarif bir yolu vardır, ancak burada yorum yapmadan önce emin olmak istedim.)
Michael Scheper

16

Şaşırtıcı bir şekilde, Unix ve Linux'un aslında küresel ortam değişkenlerini belirleyecek bir yeri yoktur. Yapabileceğiniz en iyi şey, herhangi bir belirli kabuğun siteye özgü bir başlatmaya sahip olmasını sağlamaktır.

Eğer yerleştirirseniz /etc/profile, çoğu posix uyumlu kabuk kullanıcısı için işleri halledecektir. Bu, kritik olmayan amaçlar için muhtemelen "yeterince iyidir".

Ama cshveya tcshkabuğuna sahip olan hiç kimse onu görmeyecek ve cshküresel bir başlatma dosyası olduğuna da inanmıyorum .


8
/etc/environmentAslında, kök kullanıcı olarak bile benim için ortam değişkenlerini ayarlıyor gibi görünüyor. Bunun /etc/environmentamazon linux ve ubuntu'da olduğunu biliyorum . Csh, tcsh veya zsh için çalışıp çalışmadığını kontrol edemedim.
Jordan Stewart

kullandığınız kabuğa özgü değil, gerçekten küresel
Xerus

9

Bash man sayfasından bazı ilginç alıntılar:

Bash, etkileşimli bir oturum açma kabuğu olarak veya --loginseçenekle etkileşimli olmayan bir kabuk olarak çağrıldığında , önce /etc/profileo dosya varsa dosyadan komutları okur ve çalıştırır . Bu dosyayı okuduktan sonra, arar ~/.bash_profile, ~/.bash_loginve ~/.profile, bu sırayla ve okur ve var ve okunabilir olanlarını gelen yürütür komutları. --noprofileKabuk bu davranışı engellemek için başlatıldığında seçenek kullanılan olabilir.
...
Oturum açma kabuğu olmayan bir etkileşimli kabuk başlatıldığında, bash, /etc/bash.bashrcve ~/.bashrcbu dosyalar mevcutsa komutlarını okur ve yürütür . Bu --norcseçenek kullanılarak engellenebilir . --rcfileDosya seçeneği okuyup yerine dosyadan komutları yürütmek için bash zorlar /etc/bash.bashrcve ~/.bashrc.

Öyleyse bir göz atın /etc/profileveya /etc/bash.bashrcbu dosyalar genel ayarlar için doğru yerlerdir. Bir çevre değişkeni oluşturmak için bunlara şöyle bir şey koyun:

export MY_VAR=xxx

Klasik Unix sistemlerinde, hem Bourne kabuğunun hem de Korn kabuğunun da / etc / profile okuduğuna dikkat edin - muhtemelen sistem ortamı ayarı için en çok kullanılan konumdur. C kabuğunun bazı sürümleri /etc/csh.cshrc ve /etc/csh.login'e ve ayrıca kullanıcı başına konumlara bakar; diğerleri herhangi bir sistem ortamı ayar dosyası kullanmaz.
Jonathan Leffler

Müthiş, tam da giriş yapmayan kabuk kullanıcıları için env ayarını yapma konusunda aradığım şey.
David Mann

Maalesef, bir süre oklar görünmediğinde yanlışlıkla buna olumsuz oy verdim ... Bunu (örneğin, ikinci ve son satırdaki "çevre" yazım hatası) düzenlemenin bir sakıncası var mı, böylelikle olumsuz oyu kaldırabilir miyim?
Benjamin W.

4

PAM kullanmak mükemmeldir.

# modify the display PAM
$ cat /etc/security/pam_env.conf 
# BEFORE: $ export DISPLAY=:0.0 && python /var/tmp/myproject/click.py &
# AFTER : $ python $abc/click.py &
DISPLAY  DEFAULT=${REMOTEHOST}:0.0 OVERRIDE=${DISPLAY}
abc   DEFAULT=/var/tmp/myproject

2

Linux çekirdeği altında çalışan her işlem, üstünden devraldığı kendi benzersiz ortamını alır. Bu durumda, üst öğe ya bir kabuğun kendisi (bir alt kabuk üreten) ya da 'oturum açma' programı (tipik bir sistemde) olacaktır.

Her işlemin ortamı korunduğundan, çalışan her işleme bir çevresel değişken 'enjekte etmenin' bir yolu yoktur, bu nedenle varsayılan kabuk .rc / profilini değiştirseniz bile, her işlem çıkıp yeniden yüklenene kadar bu etki etkin olmayacaktır. başlangıç ​​ayarları.

Herhangi bir belirli kabuğun varsayılan başlangıç ​​değişkenlerini değiştirmek için / etc / içine bakın. Kullanıcıların onları kendi kişisel ayarlarında değiştirebileceğini (ve sıklıkla değiştirebileceğini) unutmayın.

Unix, sınırlar dahilinde kullanıcıya itaat edecek şekilde tasarlanmıştır.

Not : Bash, sisteminizdeki tek kabuk değil . / Bin / sh sembolik bağlantısının gerçekte neye işaret ettiğine dikkat edin. Çoğu sistemde, bu aslında (varsayılan olarak, özel bir çağrı olmaksızın) POSIXLY doğru olan tire olabilir . Bu nedenle, her iki varsayılanı da değiştirmeye dikkat etmelisiniz , aksi takdirde / bin / sh ile başlayan komut dosyaları genel varsayılanlarınızı devralmayacaktır. Benzer şekilde, yalnızca bash'ın her ikisini de düzenlerken anlayacağı sözdiziminden kaçının , yani avoiding bashisms.

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.