Verständnis der Bash -Shell -Konfiguration beim Start

Verständnis der Bash -Shell -Konfiguration beim Start

Seit Jahren ist die Bash Shell [1] ein wesentlicher Bestandteil vieler Linux -Verteilungen. Am Anfang wurde Bash als offizielle GNU-Shell ausgewählt, weil sie bekannt war, ziemlich stabil und bot eine anständige Reihe von Funktionen an.

Heute ist die Situation etwas anders - Bash ist immer noch überall als Softwarepaket vorhanden, wurde jedoch durch Alternativen in der Standardinstallation ersetzt. Dazu gehören beispielsweise Debian Almquist Shell (Dash) [2] (für Debian GNU/Linux) oder ZSH [3] (für GRML [5]). In den bekannten Verteilungen Ubuntu, Fedora, Arch Linux und Linux Mint ist Bash bisher die Standardschale geblieben.

Es ist sehr hilfreich, das Bash -Startup zu verstehen und zu wissen, wie man dies richtig konfiguriert. Dies beinhaltet die Anpassung Ihrer Shell -Umgebung, z. B. das Festlegen der $ Path -Variablen, das Anpassen des Aussehens der Shell -Eingabeaufforderung und das Erstellen von Aliase. Außerdem werden wir uns die beiden Dateien ansehen .bashrc und .Bash_profile, die beim Start gelesen werden. Das entsprechende Wissen wird in Prüfung 1 der Zertifizierung des Linux Professional Institute [4] getestet [4].

Vergleich einer interaktiven Login- und nicht interaktiven Chargenschale

Im Allgemeinen hat eine Shell zwei Betriebsweisen. Es kann als interaktive Anmeldeschale und als nicht interaktive Chargenschale ausgeführt werden. Die Betriebsart definiert das Bash -Start und welche Konfigurationsdateien gelesen werden [7]. Die Betriebsart kann wie folgt differenziert werden [6]-interaktive Anmeldeschale, interaktive Nicht-Login-Shell, nicht-interaktive Anmeldeschale und nicht-interaktiver (Batch-) Nicht-Login-Shell.

Einfach ausgedrückt, liest und schreibt eine interaktive Shell an das Terminal eines Benutzers. Im Gegensatz dazu ist eine nicht interaktive Hülle nicht mit einem Terminal verbunden, wie bei der Ausführung eines Stapel-Shell-Skripts. Eine interaktive Hülle kann entweder Anmeldung oder eine Nicht-Loginschale sein.

Interaktive Anmeldeschale

Dieser Modus bezieht sich auf die Anmeldung in Ihrem Computer auf einem lokalen Computer, das ein Terminal von TTY1 bis TTY4 reicht (abhängig von Ihrer Installation - es gibt möglicherweise mehr oder weniger Klemmen). Außerdem deckt dieser Modus eine remote Anmeldung in einem Computer ab, beispielsweise über eine sichere Shell (SSH) wie folgt:

$ ssh user@remote-system
$ SSH-Benutzer@Remote-System Remote-Command

Der erste Befehl stellt eine Verbindung zum Remote -System her und öffnet nur eine interaktive Shell. Im Gegensatz dazu stellt der zweite Befehl eine Verbindung zum Remote-System her, führt den angegebenen Befehl in einer nicht interaktiven Anmeldebereich aus und beendet die SSH-Verbindung. Das folgende Beispiel zeigt dies ausführlicher:

$ ssh localhost optimal
Benutzer@localhost Passwort:
11:58:49 Uhr 23 Tage, 11:41, 6 Benutzer, Lastdurchschnitt: 0,10, 0,14, 0,20
$

Um herauszufinden, ob Sie mit einer Anmeldeschale in Ihrem Computer angemeldet sind, geben Sie den folgenden Echo -Befehl in Ihr Terminal ein:

$ echo $ 0
-verprügeln
$

Für eine Anmeldeschale beginnt die Ausgabe mit einem „-“, gefolgt vom Namen der Shell, was in unserem Fall zu „-Bash“ führt. Für eine Nicht-Login-Hülle ist der Ausgang nur der Name der Schale. Das folgende Beispiel zeigt dies für die beiden Befehle, die $ 0 entsprechen, und die Verfügbarkeit wird SSH als String -Parameter vergeben:

$ ssh localhost "echo $ 0; preiszeit"
Benutzer@localhost Passwort:
verprügeln
11:58:49 Uhr 23 Tage, 11:41, 6 Benutzer, Lastdurchschnitt: 0,10, 0,14, 0,20
$

Verwenden Sie als Alternative den integrierten Shopt-Befehl [8] wie folgt:

$ Shopt login_shell
login_shell aus
$

Für eine Nicht-Login-Shell gibt der Befehl "Aus" und für eine Anmeldeschale "On" zurück.

In Bezug auf die Konfiguration für diese Art von Shell werden drei Dateien berücksichtigt. Diese sind/etc/profil, ~/.Profil und ~//.bash_profile. Eine detaillierte Beschreibung dieser Dateien finden Sie unten.

Interaktive Nicht-Loginschale

Dieser Modus beschreibt das Öffnen eines neuen Terminals, zum Beispiel Xterm oder Gnom -Terminal und die Ausführung einer Shell darin. In diesem Modus die beiden Dateien/etc/bashrc und ~///.Bashrc werden gelesen. Eine detaillierte Beschreibung dieser Dateien finden Sie unten.

Nicht interaktive Nicht-Login-Schale

Dieser Modus wird bei der Ausführung eines Shell -Skripts verwendet. Das Shell -Skript läuft in seiner eigenen Unterschale. Es wird als nicht interaktiv eingestuft, es sei denn, es bittet nach Benutzereingaben. Die Shell öffnet sich nur für die Ausführung des Skripts und schließt es sofort ab, sobald das Skript beendet wurde.

./Lokal-Skript.Sch

Nicht interaktive Anmeldeschale

Dieser Modus umfasst die Anmeldung in einem Computer von einer Fernbedienung beispielsweise über Secure Shell (SSH). Das Shell Skript Lokal-Skript.SH wird zuerst lokal ausgeführt und seine Ausgabe wird als Eingang von SSH verwendet.

./Lokal-Skript.Sh | SSH-Benutzer@Remote-System

SSH ohne weiteren Befehl startet eine Anmeldeschale auf dem Remote -System. Wenn das Eingabegerät (STDIN) des SSH nicht terminal ist, startet SSH eine nicht interaktive Shell und interpretiert die Ausgabe des Skripts als Befehle, die auf dem Remote-System ausgeführt werden sollen. Auf dem folgenden Beispiel wird der Verfügungsbefehl im Remote -System ausgeführt:

$ echo "Verfügungszeit" | ssh localhost
Pseudo-terminal wird nicht zugewiesen, da Stdin kein Terminal ist.
Frank@localhosts Passwort:
Die im Debian GNU/Linux -System enthaltenen Programme sind kostenlose Software
Die genauen Verteilungsbegriffe für jedes Programm werden in der beschrieben
Einzelne Dateien in/usr/Share/doc/*/Copyright.
Debian GNU/Linux hat absolut keine Garantie, soweit
nach geltendem Recht zulässig.
Sie haben neue Mail.
11:58:49 Uhr 23 Tage, 11:41, 6 Benutzer, Lastdurchschnitt: 0,10, 0,14, 0,20
$

Interessanterweise beschwert sich SSH darüber, dass Stdin kein Terminal ist, und zeigt die Nachricht des Tages (MOTD), die in der globalen Konfigurationsdatei /etc /motd gespeichert ist. Fügen Sie die Option „SH“ als Parameter des SSH -Befehls, wie unten gezeigt. Das Ergebnis ist, dass zuerst eine Shell geöffnet wird und die beiden Befehle ohne die MOTD angezeigt werden, zuerst.

$ echo "Verfügungszeit" | ssh localhost sh
Frank@localhosts Passwort:
12:03:39 Uhr 23 Tage, 11:46, 6 Benutzer, Lastdurchschnitt: 0,07, 0,09, 0,16
$$

Als nächstes werden wir uns die verschiedenen Konfigurationsdateien für Bash ansehen.

Startdateien verprügeln

Die verschiedenen Bash -Modi definieren, welche Konfigurationsdateien beim Start gelesen werden:

  • Interaktive Anmeldeschale
    • /etc/Profil: Wenn es vorhanden ist, wird die in der Datei aufgeführten Befehle ausgeführt.
    • ~/.bash_profile, ~/.Bash_login und ~//.Profil (in dieser Reihenfolge). Es führt die Befehle aus der ersten lesbaren Datei aus der Liste aus. Jeder einzelne Benutzer kann seinen eigenen Satz dieser Dateien haben.
  • Interaktive Nicht-Loginschale
    • /etc/bash.BASHRC: Globale Bash -Konfiguration. Es wird die Befehle ausgeführt, wenn diese Datei existiert, und sie ist lesbar. Nur in Debian GNU/Linux, Ubuntu und Arch Linux erhältlich.
    • ~/.BASHRC: Lokale Bash -Konfiguration. Es wird die Befehle ausgeführt, wenn diese Datei existiert, und sie ist lesbar.

Es kann hilfreich sein, dies als Diagramm zu sehen. Während der Forschung fanden wir das Bild unten, das wir sehr mögen [9].


Bild: config-pad.png
Text: Bewertungsprozess für die Bash -Konfiguration

Die verschiedenen Konfigurationsdateien erläutert

Für die unten erläuterten Dateien gibt es keinen allgemeinen Regeln für die Option, in der die Datei gespeichert werden soll (mit Ausnahme globaler Optionen vs. Lokale Optionen). Darüber hinaus ist die Reihenfolge, in der die Konfigurationsdateien gelesen werden. Deshalb werden mehrere Dateien verwendet, die dasselbe konfiguriert.

/etc/Profil

Diese Datei wird sowohl von der Bourne Shell (SH) als auch von Bourne kompatiblen Shells wie Bash, Asche und KSH verwendet. Es enthält die Standardeinträge für die Umgebungsvariablen für alle Benutzer, die sich interaktiv anmelden. Dies beeinflusst beispielsweise den $ Path und das promptale Design für reguläre Benutzer sowie den Benutzer mit dem Namen "Root". Das folgende Beispiel zeigt einen Teil von/etc/Profil von Debian GNU/Linux.

setUserPath ()
# Gemeinsame Verzeichnisse für ausführbare Benutzer für alle Benutzer
Path = "/usr/local/bin:/usr/bin:/bin"
# Testen Sie, damit Root -Benutzer für Systemverwaltungsprogramme hinzufügen können
if ["'id -u'" -Eq 0]; Dann
Path = "/usr/local/sbin:/usr/sbin:/sbin: $ path"
anders
Path = "/usr/local/games:/usr/games: $ path"
fi
Exportweg

setUserPath ()
# PS1 ist die primäre Eingabeaufforderungzeichenfolge
wenn ["$ ps1"]; Dann
Wenn ["$ bash"] && ["$ bash" != "/bin/sh"]; Dann
# Die Datei -Bash.Bashrc legt bereits die Standard -PS1 fest.
# PS1 = "\ H: \ W \ $"
if [-f /etc /bash.bashrc]; Dann
. /etc/bash.bashrc
fi
anders
if ["'id -u'" -Eq 0]; Dann
PS1 = '#'
anders
PS1 = '$' '
fi
fi
fi

Weitere Konfigurationsdateien können im Verzeichnis /etc /Profil gespeichert werden.D. Sie werden in die Bash -Konfiguration bezogen, sobald /etc /Profil gelesen wird.

~/.bash_profile

Diese lokale Konfigurationsdatei wird gelesen und ausgeführt, wenn Bash als interaktive Anmeldeschale aufgerufen wird. Es enthält Befehle, die nur einmal ausgeführt werden sollten, z. B. das Anpassen der $ Path -Umgebungsvariablen.

Es ist ziemlich üblich, ~///.bash_profile nur mit Zeilen wie unter dieser Quelle die .BASHRC -Datei. Dies bedeutet, dass jedes Mal, wenn Sie sich am Terminal anmelden.

if [-f ~/.bashrc]; Dann
. ~/.bashrc
fi

Wenn die Datei ~/.Bash_profile existiert, dann wird Bash das Lesen von ~/ überspringen.Bash_login (oder ~//.Profil).

~/.Bash_login

Die beiden Dateien ~/.bash_profile und ~//.Bash_login sind analog.

~/.Profil

Die meisten Linux -Verteilungen verwenden diese Datei anstelle von ~/.bash_profile. Es wird verwendet, um die lokale Datei zu lokalisieren .bashrc und um die $ path -Variable zu erweitern.

# Wenn laufe Bash
if [-n "$ bash_version"]; Dann
# enthalten .bashrc, wenn es existiert
wenn [-f "$ home/.bashrc "]; dann
. "$ Home/.bashrc "
fi
fi
# Setzen Sie den Pfad, damit er den privaten Behälter des Benutzers enthält, wenn er existiert
wenn [-d "$ home/bin"]; Dann
Path = "$ home/bin: $ path"
fi

Im Allgemeinen ~//.Profil wird von allen Shells gelesen. Wenn entweder ~/.bash_profile oder ~//.Bash_login existiert, Bash wird diese Datei nicht lesen.

/etc/bash.bashrc und ~//.bashrc

Diese Datei enthält die Bash -Konfiguration und übernimmt lokale Aliase, die in den Geschichte gespeicherten Verlaufsgrenzen .Bash_history (siehe unten) und Bash -Fertigstellung.

# Setzen Sie keine doppelten Linien oder Linien ein, beginnend mit Platz in der Geschichte.
# Bash (1) finden Sie für weitere Optionen
HistControl = Ignoreboth
# Überschreiben Sie sie nicht an die Verlaufsdatei
Shopt -S HistAppend
# Zum Festlegen der Verlaufslänge siehe HistSize und HistFileze in Bash (1)
HistSize = 1000
HistFileSize = 2000

Was konfigurieren Sie in welcher Datei

Wie Sie bisher gelernt haben, gibt es keine einzige Datei, sondern eine Gruppe von Dateien zum Konfigurieren von Bash. Diese Dateien existieren nur aus historischen Gründen - insbesondere so, wie sich die verschiedenen Shells entwickelten und nützliche Merkmale voneinander ausgeliehen haben. Außerdem gibt es keine strengen Regeln, die bekannt sind

Definieren Sie, welche Datei ein bestimmtes Stück des Setups behalten soll. Dies sind die Empfehlungen, die wir für Sie haben (basierend auf TLDP [10]):

  • Alle Einstellungen, die Sie auf alle Umgebungen Ihrer Benutzer anwenden möchten, sollten in /etc /Profil sein.
  • Alle globalen Aliase und Funktionen sollten in /etc /bashrc gespeichert werden.
  • Die Datei ~/.BASH_PROFILE ist die bevorzugte Konfigurationsdatei zum individuellen Konfigurieren von Benutzerumgebungen. In dieser Datei können Benutzer zusätzliche Konfigurationsoptionen hinzufügen oder die Standardeinstellungen ändern.
  • Alle lokalen Aliase und Funktionen sollten in ~/ gespeichert werden.bashrc.

Beachten Sie auch, dass Linux sehr flexibel ist: Wenn eines der oben genannten Startdateien nicht in Ihrem System vorhanden ist, können Sie es erstellen.

Links und Referenzen

  • [1] Gnu Bash, https: // www.Gnu.org/software/bash/
  • [2] Debian Almquist Shell (Dash), http: // Gondor.Apana.Org.au/~ Herbert/Dash/
  • [3] ZSH, https: // www.ZSH.org/
  • [4] Zertifizierung des Linux Professional Institute (LPIC), Level 1, https: // www.Lpice.EU/EN/Our-Zertifikationen/LPIC-1
  • [5] GRML, https: // grml.org/
  • [6] Interaktive Login und nicht-interaktive Nicht-Login-Shell, achubuntu, https: // achubuntu differenzieren.com/Fragen/879364/Differenzinteraktives Login-und-nicht-interaktives Non-Login-Shell
  • [7] Bash -Startdateien, https: // www.Gnu.org/software/bash/manual/html_node/bash-startup-files.HTML#Bash-Startup-Files
  • [8] The Shoptin, https: // www.Gnu.org/software/bash/manual/html_node/the-shopt-builtin.html
  • [9] UNIX EINLEITUNG - BASH -Startdateien Ladeauftrag, https: // medium.com/@Youngstone89/Unix-Einführung-Bash-Startup-Datei-Ladungsordnung-562543AC12E9
  • [10] Das Linux -Dokumentationsprojekt (TLDP), https: // TLDP.org/ldp/bash-egberers-guide/html/sect_03_01.html

Danke

Der Autor bedankt sich bei Gerold Rupprecht für seinen Rat beim Schreiben dieses Artikels.