Das ist ziemlich komplex. Zuallererst hängen die Details davon ab, welche Art von Shell Sie ausführen. Um mich selbst zu plagiieren :
Wenn Sie beispielsweise einen Terminalemulator öffnen gnome-terminal
, führen Sie eine sogenannte interaktive Shell ohne Anmeldung aus .
Wenn Sie sich über die Befehlszeile bei Ihrem Computer anmelden oder einen Befehl ausführen, wie z. B. su - username
, führen Sie eine interaktive Anmeldeshell aus .
Wenn Sie sich grafisch anmelden, wird etwas völlig anderes ausgeführt. Die Details hängen von Ihrem System und Ihrer grafischen Umgebung ab, aber im Allgemeinen ist es die grafische Shell , die sich um Ihre Anmeldung kümmert. Während viele grafischen Schalen (einschließlich der Standard - Ubuntu) werden gelesen /etc/profile
und ~/.profile
nicht alle von ihnen tun.
Wenn Sie ein Shell-Skript ausführen, wird es in einer nicht interaktiven Shell ohne Anmeldung ausgeführt .
Die Dateien, die beim Start von bash gelesen werden, hängen vom Typ der Shell ab, unter der es ausgeführt wird. Das Folgende ist ein Auszug aus dem Abschnitt INVOCATION von man bash
(Schwerpunkt Mine):
Wenn bash als interaktive Anmeldeshell oder als nicht interaktive Shell mit der Option --login aufgerufen wird, werden zuerst Befehle aus der Datei / etc / profile gelesen und ausgeführt , sofern diese Datei vorhanden ist. Nach dem Lesen dieser Datei sucht sie in dieser Reihenfolge nach ~ / .bash_profile, ~ / .bash_login und ~ / .profile und liest und führt Befehle von der ersten Datei aus, die vorhanden und lesbar ist. Die Option --noprofile kann verwendet werden, wenn die Shell gestartet wird, um dieses Verhalten zu unterbinden.
Wenn eine interaktive Shell , das ist kein Login - Shell gestartet wird, bash liest und führt Befehle aus /etc/bash.bashrc und ~ / .bashrc , wenn diese Dateien vorhanden sind . Dies kann mit der Option --norc verhindert werden. Die Option --rcfile file erzwingt, dass Bash anstelle von /etc/bash.bashrc und ~ / .bashrc Befehle aus der Datei liest und ausführt.
Das sind die Initialisierungsdateien. Sie haben auch die /etc/environment
Möglichkeit, globale Umgebungsvariablen festzulegen, die jedoch eher gelesen als bezogen werden (darin enthaltene Befehle werden nicht ausgeführt, aber Variablendefinitionen werden festgelegt).
Jetzt ist die Begrüßung, die Sie sehen, wieder etwas anderes. Das ist eingestellt /etc/motd
und wird durch angezeigt pam_motd
. Wie erklärt in man motd
:
Der Inhalt von / etc / motd wird von pam_motd (8) nach einer erfolgreichen Anmeldung angezeigt, jedoch kurz bevor die Anmeldeshell ausgeführt wird.
Die Abkürzung "motd" steht für "Nachricht des Tages", und diese Datei wird traditionell genau dafür verwendet (sie benötigt viel weniger Speicherplatz als Mail an alle Benutzer).
Unter Debian GNU / Linux wird auch der Inhalt von /run/motd.dynamic angezeigt. Diese Datei wird beim Booten von /etc/init.d/motd generiert.
Um die Nachricht zu entfernen, leeren Sie einfach die /etc/motd
Datei und stellen Sie sicher, dass von nichts generiert wird, /etc/init.d/motd
falls vorhanden.
Wie auch immer, basierend auf der Ausgabe, die Sie anzeigen, scheinen Sie sich über anzumelden, ssh
was bedeutet, dass Sie eine interaktive Anmeldeshell ausführen (siehe oben). Zusammenfassend gesagt, werden die Dinge, die Sie interessieren, beim Anmelden bezogen (und in dieser Reihenfolge):
- Der SSH-Dämon zeigt über das
pam_motd
Modul der PAM-Bibliothek den Inhalt von an /etc/motd
. Über das pam_env
Modul setzt es die Umgebungsvariablen von /etc/environment
und ~/.pam_environment
.
- Eine Anmeldeshell wird gestartet und die folgenden Dateien werden der Reihe nach gelesen:
/etc/profile
/etc/bash.bashrc
(die Standard Ubuntu /etc/profile
Quellen /etc/bash.bashrc
).
~/.bash_profile
. Die anderen Dateien, die hier ( ~/.profile
und ~/.bash_login
) hätte gelesen werden können, werden ignoriert, da sie ~/.bash_profile
vorhanden sind.
export SET_IN_ETC_PROFILE=yes
ein/etc/profile
,export SET_IN_HOME_ZSHRC=yes
in~/.zhshrc
(ich bin ein zsh-Benutzer), etc ... Dann starte neu und ein netterenv|grep SET_IN
wird dir die ganze Geschichte erzählen. Informationen dazu, welche Variablen von den Desktop-Anwendungen angezeigt werden (die Sie vom Dash oder der WM aus starten, ohne ein Terminal zu verwenden), finden Sie unter askubuntu.com/a/356973/16395env
keiner Beziehung zur Ausführungsreihenfolge steht.SET_IN
Sie zeigen, welche Dateien gelesen wurden, nicht in welcher Reihenfolge sie gelesen wurden. Die Reihenfolge ist Standard, es ist das, was in den Auszügen der Manpage gezeigt wird, die ich in meiner Antwort habe.Die Informationen, die Sie sehen, wenn Sie sich über ssh anmelden, werden erstellt, bevor / etc / profile überhaupt angezeigt wird. Schauen Sie sich die Reihenfolge der Dateien in /etc/update-motd.d an. Das zeigt Ihnen, wo die Nachrichten, die Sie sehen, von verschiedenen Skripten generiert werden.
quelle