Czy mogę mieć pewne ustawienia, które są uniwersalne dla wszystkich moich użytkowników?
Czy mogę mieć pewne ustawienia, które są uniwersalne dla wszystkich moich użytkowników?
Odpowiedzi:
Jak /etc/profile
wspominali inni, niektóre systemy Linux używają teraz katalogu /etc/profile.d/
; wszelkie .sh
pliki tam będą pochodzić z /etc/profile
. Nieco lepiej jest zachować swoje własne środowisko w tych plikach niż tylko edytować /etc/profile
.
Jeśli twój LinuxOS ma ten plik:
/etc/environment
Możesz go użyć do trwałego ustawienia zmiennych środowiskowych dla wszystkich użytkowników.
Pobrano z: http://www.sysadmit.com/2016/04/linux-variables-de-entorno-permanentes.html
Jeśli wszystkie usługi logowania używają PAM , a wszystkie usługi logowania mają session required pam_env.so
w swoich /etc/pam.d/*
plikach konfiguracyjnych, wówczas wszystkie sesje logowania będą miały pewne zmienne środowiskowe ustawione zgodnie z opisem w pam_env
pliku konfiguracyjnym.
W większości nowoczesnych dystrybucji Linuksa to wszystko jest dostępne domyślnie - wystarczy dodać żądane globalne zmienne środowiskowe do /etc/security/pam_env.conf
.
Działa to niezależnie od powłoki użytkownika i działa także w przypadku logowania graficznego (jeśli xdm / kdm / gdm / entrance /… jest tak skonfigurowane).
echo foo>/home/me/bar
i uruchomię ponownie (i ponownie się zaloguję), plik ten nie zostanie utworzony. (Prawdopodobnie istnieje bardziej elegancki sposób, aby to przetestować, ale chciałem się upewnić przed komentarzem tutaj.)
O dziwo, Unix i Linux tak naprawdę nie mają miejsca na ustawianie globalnych zmiennych środowiskowych. Najlepsze, co możesz zrobić, to zaaranżować, aby określona powłoka miała inicjalizację specyficzną dla witryny.
Jeśli to umieścisz, to załatwi sprawę /etc/profile
dla większości użytkowników powłoki zgodnych z Posix. Jest to prawdopodobnie „wystarczająco dobre” do celów niekrytycznych.
Ale każdy, kto ma powłokę csh
lub tcsh
, nie zobaczy tego i nie sądzę, aby csh
miał globalny plik inicjujący.
/etc/environment
wydaje się, że ustawia dla mnie zmienne środowiskowe, nawet jako użytkownik root. Wiem, że /etc/environment
jest to na Amazon Linux i Ubuntu. Nie udało mi się sprawdzić, czy działa dla csh, tcsh lub zsh.
Kilka interesujących fragmentów strony podręcznika bash:
Gdy bash jest wywoływany jako interaktywna powłoka logowania lub jako powłoka nieinteraktywna z
--login
opcją, najpierw odczytuje i wykonuje polecenia z pliku/etc/profile
, jeśli ten plik istnieje. Po przeczytaniu tego pliku, szuka~/.bash_profile
,~/.bash_login
i~/.profile
, w tej kolejności, a odczytuje i wykonuje polecenia z pierwszego, który istnieje i jest czytelny.--noprofile
Opcja może być stosowany, gdy powłoka jest uruchamiany w celu zahamowania tego zachowania.
...
Kiedy uruchamiana jest powłoka interaktywna, która nie jest powłoką logowania, bash czyta i wykonuje polecenia z/etc/bash.bashrc
i~/.bashrc
, jeśli te pliki istnieją. Można to powstrzymać za pomocą--norc
opcji. Plik--rcfile
Plik opcja zmusi bash do czytania i wykonywania poleceń z pliku zamiast/etc/bash.bashrc
i~/.bashrc
.
Więc spójrz na /etc/profile
lub /etc/bash.bashrc
, te pliki są odpowiednimi miejscami dla ustawień globalnych. Umieść w nich coś takiego, aby ustawić zmienną środowiskową:
export MY_VAR=xxx
Korzystanie z PAM jest doskonałe.
# 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
Każdy proces działający w jądrze Linuksa otrzymuje własne, unikalne środowisko, które dziedziczy po swoim rodzicu. W tym przypadku rodzic będzie albo samą powłoką (tworzącą podpowłokę), albo programem „login” (w typowym systemie).
Ponieważ środowisko każdego procesu jest chronione, nie ma możliwości `` wstrzyknięcia '' zmiennej środowiskowej do każdego działającego procesu, więc nawet jeśli zmodyfikujesz domyślną powłokę .rc / profile, nie wejdzie ona w życie, dopóki każdy proces nie zakończy się i nie załaduje ponownie ustawienia uruchamiania.
Zajrzyj do / etc /, aby zmodyfikować domyślne zmienne startowe dla konkretnej powłoki. Po prostu uświadom sobie, że użytkownicy mogą (i często to robią) zmieniać je w swoich indywidualnych ustawieniach.
Unix jest zaprojektowany tak, aby był posłuszny użytkownikowi w pewnych granicach.
NB : Bash nie jest jedyną powłoką w twoim systemie. Zwróć szczególną uwagę na to, na co faktycznie wskazuje dowiązanie symboliczne / bin / sh. W wielu systemach może to być myślnik, który (domyślnie, bez specjalnego wywołania) jest POSIXLY poprawny. Dlatego powinieneś uważać, aby zmodyfikować oba ustawienia domyślne, w przeciwnym razie skrypty rozpoczynające się od / bin / sh nie odziedziczą twoich globalnych ustawień domyślnych. Podobnie, uważaj, aby unikać składni zrozumiałej tylko dla bash podczas edycji obu avoiding bashisms
.