Sekwencja skryptów pochodzących z logowania


41

Chciałbym skoncentrować całą konfigurację logowania w moim ~/.bash_profile. ~/.bashrcDomyślnie był tam, ale zastąpiłem go ~/.bash_profile.

Jednak kiedy się loguję, coś przed moim ~/.bash_profileźródłem i wyświetla następujące informacje:

Linux ubnt10-dev1 2.6.32-38-server #83-Ubuntu SMP Wed Jan 4 11:26:59 UTC 2012 x86_64 GNU/Linux
Ubuntu 10.04.4 LTS

Welcome to the Ubuntu Server!
 * Documentation:  http://www.ubuntu.com/server/doc

  System information as of Fri May  9 12:17:39 EDT 2014

  System load:  0.01              Processes:           74
  Usage of /:   5.5% of 18.58GB   Users logged in:     0
  Memory usage: 4%                IP address for eth0: 123.x.x.x
  Swap usage:   0%

  Graph this data and manage this system at https://landscape.canonical.com/

New release 'precise' available.
Run 'do-release-upgrade' to upgrade to it.

Last login: Fri May  9 12:11:52 2014 from 123.x.x.x

Chciałbym to usunąć, aby wyświetlało się tylko moje powitanie powitalne zdefiniowane w moich ~/.bash_profileekranach, ale nie jestem pewien logiki / sekwencji skryptów pozyskiwanych / wykonywanych po zalogowaniu się użytkownika. Czy możesz mnie oświecić?

Jako bonus chciałbym również znać sekwencję automatycznego pozyskiwania / wykonywania podczas uruchamiania systemu, a nie tylko wtedy, gdy użytkownik rozpoczyna sesję od zalogowania się, choć jest to dla mnie obecnie mniej ważne.

Odpowiedzi:


53

To jest trochę skomplikowane. Przede wszystkim szczegóły zależą od rodzaju uruchomionej powłoki. Żeby mnie samemu plagiatować :

  • Po otwarciu emulatora terminala ( gnome-terminalna 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 - usernameuruchomiona 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/profilei ~/.profilenie 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/environmentktó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/motdi 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/motdplik i upewnij się, że nic nie jest generowane, /etc/init.d/motdjeś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):

  1. Demon SSH, poprzez pam_motdmoduł biblioteki PAM, wyświetla zawartość /etc/motd. Poprzez pam_envmoduł ustawia zmienne środowiskowe z /etc/environmenti ~/.pam_environment.
  2. Uruchomiona jest powłoka logowania i kolejno odczytywane są następujące pliki:
    1. /etc/profile
    2. /etc/bash.bashrc(domyślne /etc/profileźródła Ubuntu /etc/bash.bashrc).
    3. ~/.bash_profile. Inne pliki, które mogły zostać odczytane tutaj ( ~/.profilei ~/.bash_login) są ignorowane, ponieważ ~/.bash_profileistnieją.

5
Dobrą sztuczką do samodzielnego odkrycia tych rzeczy jest umieszczenie zmiennych wartowników. Mam na myśli, kładę export SET_IN_ETC_PROFILE=yessię /etc/profile, export SET_IN_HOME_ZSHRC=yesw ~/.zhshrc(jestem użytkownikowi zsh), etc ... Następnie restart i ładny env|grep SET_INpowie 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/16395
Rmano

1
więc kiedy ssh, to byłaby interaktywna powłoka, prawda?
amfibia

@amphibient interaktywną powłokę logowania, tak. Gdy otworzysz terminal na lokalnej maszynie, jest to interaktywna powłoka bez logowania.
terdon

@Rmano Głosowałem za waszymi komentarzami. Ale chwilę później okazało się, że kolejność envnie ma związku z kolejnością wykonania.
Penghe Geng

2
@xiaobai oczywiście nie, chodzi o to, że SET_INpokaż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.
terdon

1

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.


1
Jest to już ujęte w górnej odpowiedzi, ale doceniam twoją zwięzłość. +1 :)
wjandrea
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.