GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Was ist die Login-Shell in Linux?

Die Login-Shell ist der erste Prozess, der mit Ihrer Benutzer-ID ausgeführt wird, wenn Sie sich bei einer interaktiven Sitzung anmelden.

Dies mag an der Oberfläche einfach erscheinen, aber wenn Sie tief graben, könnte es ein wenig verwirrend werden. Um dies zu verstehen, sehen wir uns den Anmeldevorgang in Linux-Systemen noch einmal an.

Linux ist ein Mehrbenutzersystem, bei dem sich mehrere Benutzer gleichzeitig anmelden und das System verwenden können.

Der erste Prozess in einem Linux-System, sei es init oder systemd, startet ein getty-Programm. Dieses getty, kurz für 'get tty' (tty steht für physische oder virtuelle Terminals), ist dafür verantwortlich, das System vor unbefugtem Zugriff zu schützen.

Wenn Sie versuchen, sich entweder direkt (wenn Sie einen Server lokal auf einem System installiert haben) oder über SSH (wenn Sie den Server an einem entfernten Standort haben) mit einem Linux-System zu verbinden, fordert getty Sie (über das Anmeldeprogramm) auf, Ihren Benutzernamen einzugeben und wenn der Benutzername eingegeben wird, wird nach dem Passwort gefragt.

Ihre Eingaben werden anhand der in der Datei /etc/passwd gespeicherten Informationen überprüft. Die Einträge in der Datei /etc/passwd enthalten einige Informationen wie Benutzername, Benutzer-ID, Home-Verzeichnis und das erste Programm, das nach erfolgreicher Anmeldung gestartet werden soll.

Wie Sie im obigen Bild sehen können, wird das erste Programm gestartet, wenn sich der Benutzer abhishek anmeldet. Für Standardbenutzer unter Linux ist dies die Login-Shell.

Es können auch andere Werte im Feld stehen. Beispielsweise ist sshd ein Systembenutzer, kein echter Benutzer, und er kann sich nicht wie ein normaler Benutzer wie abhishek interaktiv beim System anmelden.

sshd:x:110:65534::/run/sshd:/usr/sbin/nologin

Wenn in der Spalte der ersten Programm-/Login-Shell kein Eintrag vorhanden ist, wird standardmäßig /bin/sh verwendet, also die Standard-Shell.

Ich hoffe es waren nicht zu viele Informationen.

Login-Shell vs. Nicht-Login-Shell

In Ordnung, Sie haben sich also in ein System eingeloggt und wissen, dass es sich um eine Login-Shell handelt. Aber was bedeutet es? Gibt es auch andere Schalen? Wo sind sie?

Wenn Sie unter Linux ein Shell-Skript ausführen, wird es in seiner eigenen Shell (einer nicht interaktiven Shell) ausgeführt. Sie können eine neue Shell von Ihrer aktuellen Shell (einer interaktiven Shell) aus starten.

Technisch gesehen sind dies Subshells, aber dazu später mehr. Konzentrieren wir uns zunächst auf die Login-Shell.

Profil- und RC-Dateien für die Shell

Die Login-Shell liest Umgebungsvariablen und andere Konfigurationen aus /etc/profile und einer Profildatei im Home-Verzeichnis. Dies ermöglicht Ihnen Tab-Vervollständigung, farbige Ausgabe und andere Dinge wie umask usw. zu setzen.

Sie wissen wahrscheinlich, dass es mehr als eine Shell für Linux-Systeme gibt. Die meisten Linux-Distributionen verwenden standardmäßig die Bash-Shell, aber Sie können eine andere Shell wie zsh oder Fish Shell installieren.

Wenn Ihre Login-Shell bash ist, liest sie aus der Datei /etc/profile und ~/.bash_profile. Wenn Ihre Login-Shell zsh ist, liest sie aus /etc/zprofile und ~/.zprofile.

Die Dateien im Verzeichnis /etc legen die jeweilige Shell-Konfiguration für alle Benutzer des Systems fest. Dies wird normalerweise vom Systemadministrator eingerichtet.

Die Dateien im Home-Verzeichnis des Benutzers sind natürlich benutzerspezifisch. Dadurch können Benutzer einen Alias ​​für häufig verwendete Befehle erstellen oder eine benutzerdefinierte PATH-Variable für ein Programm verwenden.

Die Nicht-Login-Shell stammt von der Login-Shell und erhält daher die gesamte Umgebung, die von der Login-Shell über die Profildateien festgelegt wird. Darüber hinaus kann die interaktive Shell ohne Anmeldung ihre eigenen Umgebungsvariablen durch rc-Dateien (Ressourcenkonfiguration) in /etc oder im Home-Verzeichnis definieren.

Für die Bash-Shell sind es normalerweise /etc/bash.bashrc- und ~/.bash_rc-Dateien, während es für die zsh-Shell /etc/zshrc und ~/.zshrc ist.

Lassen Sie mich den Unterschied an einem praktischen Beispiel zeigen.

Beachten Sie, wie sich die Shell-Eingabeaufforderung in eine grünliche Farbe ändert? Dies liegt daran, dass die Datei /etc/bash.bashrc gelesen wird und Ubuntu zusätzliche Parameter in diese Datei eingefügt hat. Farbige Eingabeaufforderung ist einer von ihnen.

Zusammenfassend:

  • Die Profildateien sind für interaktive Login-Shells. Die rc-Dateien sind für interaktive Nicht-Login-Shells.
  • Dateien im Verzeichnis /etc werden zuerst ausgeführt und dann die Dateien im Home-Verzeichnis.
  • Die interaktiven Shells ohne Anmeldung profitieren sowohl von Profil- als auch von RC-Dateien.

Woher wissen Sie, ob Sie sich in einer Login-Shell befinden?

Das ist eigentlich sehr einfach, zumindest für die Bash-Shell. Für die Login-Shell beginnt der Name der ausführbaren Shell-Datei mit - . Für Nicht-Login-Shells ist es nur der Name der Shell.

Du weißt, wie man die Hülle überprüft, oder? Sie überprüfen den Wert von Argument 0.

Unter Desktop-Linux verwenden Sie keine Login-Shell. Ihr Login wird von einem Display-Manager verwaltet. Aus diesem Grund werden Sie beim Öffnen eines Terminals im Linux-Desktop sehen, dass selbst die erste Shell, die im Terminal ausgeführt wird, keine Login-Shell ist.

Ich habe versucht, die Login-Shell hier klarzustellen. Wenn Sie sich jedoch nie über diese Dinge gewundert haben, können einige Fragen unbeantwortet bleiben. Fühlen Sie sich frei, sie im Kommentarbereich zu stellen, und ich werde versuchen, sie zu beantworten.

Wenn Sie ein erfahrener Benutzer sind, der dies liest, und feststellen, dass etwas technisch falsch ist oder ein wichtiger Punkt fehlt, teilen Sie es mir bitte in den Kommentaren mit.


Linux
  1. Was ist ein Linux-Benutzer?

  2. So ändern Sie die Shell unter Linux

  3. Was sind die verschiedenen Arten von Shells in Linux?

  4. UNIX / Linux:Was ist eine Shell? Was sind verschiedene Muscheln?

  5. Was macht % in Linux-Shell-Strings?

Was ist Subshell in Linux?

Was ist Shebang in Linux Shell Scripting?

Was ist Load Average in Linux?

Was ist eine .bashrc-Datei unter Linux?

8 Arten von Linux-Shells

Was ist eine .sh-Datei?