To jest trochę skomplikowane. Przede wszystkim szczegóły zależą od rodzaju uruchomionej powłoki. Żeby mnie samemu plagiatować :
Po otwarciu emulatora terminala ( gnome-terminal
na przykład) uruchamia się tak zwaną interaktywną powłokę bez możliwości logowania .
Po zalogowaniu się do komputera z wiersza polecenia lub uruchomieniu polecenia, takiego jak su - username
uruchomiona jest interaktywna powłoka logowania .
Logując się graficznie, uruchamiasz coś zupełnie innego. Szczegóły będą zależeć od twojego systemu i środowiska graficznego, ale ogólnie to graficzna powłoka zajmuje się twoim loginem. Podczas gdy wiele powłok graficznych (w tym domyślna wersja Ubuntu) będzie czytać /etc/profile
i ~/.profile
nie wszystkie z nich robią.
Wreszcie, po uruchomieniu skryptu powłoki, jest on uruchamiany w nieinteraktywnej powłoce niezalogowanej .
Pliki, które bash odczyta po uruchomieniu, zależą od typu powłoki, w jakiej działa. Poniżej znajduje się fragment sekcji ZAPROSZENIE man bash
(moje wyróżnienie ):
Kiedy bash jest wywoływany jako interaktywna powłoka logowania lub jako nieinteraktywna powłoka z opcją --login, najpierw czyta i wykonuje polecenia z pliku / etc / profile , jeśli plik ten istnieje. Po odczytaniu tego pliku szuka ~ / .bash_profile, ~ / .bash_login i ~ / .profile, w tej kolejności , i odczytuje i wykonuje polecenia z pierwszego, który istnieje i jest czytelny. Opcji --noprofile można użyć, gdy powłoka zostanie uruchomiona w celu zahamowania tego zachowania.
Po uruchomieniu interaktywnej powłoki, 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 temu zapobiec, używając opcji --norc. Opcja pliku --rcfile zmusi bash do odczytu i wykonywania poleceń z pliku zamiast /etc/bash.bashrc i ~ / .bashrc.
To są pliki inicjujące. Masz również miejsce, w /etc/environment
którym możesz ustawić globalne zmienne środowiskowe, ale to jest czytane, a nie pozyskiwane (komendy w nim nie są wykonywane, ale definiowane są definicje zmiennych).
Teraz powitanie, które widzisz, jest czymś innym. To jest ustawione /etc/motd
i wyświetlane przez pam_motd
. Jak wyjaśniono w man motd
:
Zawartość / etc / motd jest wyświetlana przez pam_motd (8) po udanym logowaniu, ale tuż przed uruchomieniem powłoki logowania.
Skrót „motd” oznacza „wiadomość dnia”, a ten plik jest tradycyjnie używany do tego dokładnie (wymaga dużo mniej miejsca na dysku niż poczta dla wszystkich użytkowników).
W systemie Debian GNU / Linux wyświetlana jest również zawartość pliku /run/motd.dynamic. Ten plik jest generowany przez /etc/init.d/motd podczas rozruchu.
Aby usunąć wiadomość, po prostu opróżnij /etc/motd
plik i upewnij się, że nic nie jest generowane, /etc/init.d/motd
jeśli jest obecne.
W każdym razie, na podstawie wyświetlanych danych wyjściowych, wydaje się, ssh
że logujesz się, co oznacza, że korzystasz z interaktywnej powłoki logowania , zobacz powyżej, co to oznacza. Podsumowując, rzeczy, na których Ci zależy, są pozyskiwane podczas logowania: (i w tej kolejności):
- Demon SSH, poprzez
pam_motd
moduł biblioteki PAM, wyświetla zawartość /etc/motd
. Poprzez pam_env
moduł ustawia zmienne środowiskowe z /etc/environment
i ~/.pam_environment
.
- Uruchomiona jest powłoka logowania i kolejno odczytywane są następujące pliki:
/etc/profile
/etc/bash.bashrc
(domyślne /etc/profile
źródła Ubuntu /etc/bash.bashrc
).
~/.bash_profile
. Inne pliki, które mogły zostać odczytane tutaj ( ~/.profile
i ~/.bash_login
) są ignorowane, ponieważ ~/.bash_profile
istnieją.
export SET_IN_ETC_PROFILE=yes
się/etc/profile
,export SET_IN_HOME_ZSHRC=yes
w~/.zhshrc
(jestem użytkownikowi zsh), etc ... Następnie restart i ładnyenv|grep SET_IN
powie całą historię. Aby zobaczyć, które zmienne są widziane przez aplikacje komputerowe (te uruchamiane z deski rozdzielczej lub WM, bez użycia terminala), zobacz askubuntu.com/a/356973/16395env
nie ma związku z kolejnością wykonania.SET_IN
pokaże Ci, które pliki zostały odczytane, a nie w kolejności, w jakiej zostały odczytane. Kolejność jest standardowa, to jest pokazane we fragmentach strony podręcznika, które mam w swojej odpowiedzi.Informacje, które widzisz, kiedy logujesz się przez ssh, są tworzone, zanim jeszcze / etc / profile jest w ogóle oglądany. Spójrz na sekwencję plików w /etc/update-motd.d. To pokaże, gdzie generowane wiadomości są generowane przez różne skrypty.
źródło