Sie wissen wahrscheinlich, wie Sie mit den Aufwärts- und Abwärtspfeiltasten durch Ihren Bash-Verlauf blättern können, aber wussten Sie, dass der Bash-Verlauf viel mehr umfasst als nur das Wiederholen von Befehlen? Die Geschichte hat noch viel mehr zu bieten. Oder sollte es viel mehr um die Geschichte gehen ? In beiden Fällen ist der Verlaufsbefehl einer dieser obskuren Befehle, der leistungsfähig und praktisch ist, zumindest auf einer grundlegenden Ebene zu kennen. Dieser Artikel wird das Mysterium aus der Geschichte von Bash lüften, um es zu einem freundlicheren Sysadmin-Tool zu machen.
Der Hintergrund
In Bash wird Ihr Befehlsverlauf in einer Datei gespeichert (.bash_history
) in Ihrem Home-Verzeichnis. Der führende (.) macht die Datei aus der normalen Ansicht ausgeblendet. Um es zu sehen, geben Sie ls -a
ein Befehl.
$ ls -a
. .. .bash_history .bash_logout .bash_profile .bashrc
Sie können mit der .bash_history-Datei wie mit jeder anderen reinen ASCII-Textdatei arbeiten.
Die drei verwandten Umgebungsvariablen, die Sie beachten müssen, sind HISTFILE, HISTFILESIZE und HISTSIZE.
- HISTFILE – /home/
/.bash_history - HISTFILESIZE – 1000
- HISTGRÖSSE – 1000
Die Variable HISTFILE enthält den Namen und den Speicherort Ihrer Bash-Verlaufsdatei. HISTFILESIZE gibt an, wie viele Befehle in .bash_history
gespeichert werden können Datei. HISTSIZE ist die Anzahl der zwischengespeicherten Befehle. Sobald Sie 1000 Befehle erreicht haben, werden die ältesten Befehle verworfen, während neue gespeichert werden.
$ echo $HISTSIZE
1000
$ echo $HISTFILESIZE
1000
$ echo $HISTFILE
/home/khess/.bash_history
Jedem Nutzer, einschließlich Root, sind diese Variablen und Größen standardmäßig zugewiesen. Wenn Sie diese Variablen ändern möchten, bearbeiten Sie die .bashrc-Datei in Ihrem Home-Verzeichnis. Wenn Sie beispielsweise die Größenvariablen auf 500 Befehle ändern möchten, bearbeiten Sie die Datei .bashrc
Datei und verwenden Sie die folgenden Einträge:
export HISTSIZE=500
export HISTFILESIZE=500
Um die neuen Werte zu verwenden, ohne sich ab- und wieder anzumelden, können Sie die .bashrc
ausführen Datei.
$ . ~/.bashrc
Ihre Werte sind jetzt für Ihre aktuelle Shell und alle Subshells aktiv.
$ echo $HISTSIZE
500
$ echo $HISTFILESIZE
500
Wenn Sie nicht möchten, dass Ihr Verlauf doppelte Befehle enthält, können Sie Ihren Verlauf anweisen, doppelte Einträge zu ignorieren, indem Sie Folgendes zu Ihrer .bashrc-Datei hinzufügen:
export HISTCONTROL=ignoredups
Das Problem
Das Problem mit dem Bash-Verlauf ist, dass er nicht in .bash_history
geschrieben wird Datei, bis Sie sich abmelden. Dies macht es unmöglich, den Verlaufsbefehl für das Skripting zu verwenden. Angenommen, Sie unterrichten einen Linux-Kurs und möchten überprüfen, ob die Schüler einen bestimmten Befehl ausgeführt haben, um ihre Dateien auf ein bereitgestelltes externes Laufwerk zu kopieren. Wenn der Schüler im System angemeldet bleibt, können Sie nicht feststellen, ob die Kopie durchgeführt wurde, da Ihr Skript seine Verlaufsdatei (/home/student/.bash_history) verwendet, um zu prüfen, ob der Befehl ausgeführt wurde.
Die Lösung
Um diese Funktion zu umgehen, verwenden Sie write Option für den history
Befehl. Als Teil der Unterrichtsanweisung würden Sie die Schüler diesen Befehl ausführen lassen, um ihren Verlauf zu speichern, selbst wenn sie sich nicht abmelden.
$ history -w
Dies schreibt den gesamten Befehlsverlauf der aktuellen Sitzung in die HISTFILE. Und jetzt kann Ihr Prüfskript leicht feststellen, ob der Befehl ausgeführt wurde. Sie müssen auch darauf vertrauen, dass der Schüler den Verlaufsbefehl ausführt.
[Sehen Sie sich die Geschichtslektion von Seth Kenlon an: Machen Sie die Bash-Geschichte mit diesen Tipps nützlicher]
Ein weiteres Problem
Da HISTSIZE und HISTFILESIZE relativ groß sind (1000 Befehle), ist es möglich, dass der Schüler den Befehl zuvor ausgeführt hat. Sie können den Eintrag export HISTCONTROL=ignoredups in ihre .bashrc-Datei einfügen, aber das hilft nicht, wenn der Schüler vor zwei Tagen einen ähnlichen Befehl ausgeführt hat, weil die Datei nur einen einzigen Befehl anzeigt.
Die Lösung für dieses Problem
Um dieses Problem zu umgehen, sollten Sie den Verlauf des Schülers beim Anmelden löschen. Bearbeiten Sie die .bashrc-Datei erneut und fügen Sie den folgenden Befehl hinzu.
history -c
Dieser Befehl löscht ihren Verlauf bei jeder Anmeldung und beseitigt das Problem, einen zuvor ausgeführten Befehl abzurufen. Sie müssen sich keine Gedanken darüber machen, einen Befehl aus früheren Sitzungen zu übernehmen, da das System inaktive Benutzer nach einer bestimmten Zeit abmeldet, wenn Sie die Leerlaufzeitbegrenzung in /etc/profile
festlegen . Bearbeiten Sie /etc/profile
Datei und fügen Sie den folgenden Eintrag hinzu.
TMOUT=300
Die TMOUT-Variable verwendet eine Anzahl von Sekunden Leerlaufzeit. In diesem Fall sind 300 Sekunden fünf Minuten. Sie können diesen Wert auf eine beliebige Anzahl von Sekunden festlegen. Dieser Wert wird bei der nächsten Anmeldung für alle wirksam Benutzer. Um individuelle Timeout-Werte festzulegen, verwenden Sie .bashrc
Beachten Sie jedoch, dass Benutzer diese Datei nach Belieben ändern können.
[ Jetzt herunterladen:Eine Anleitung für Systemadministratoren zum Bash-Skripting. ]
Abschluss
Der Bash-Verlauf ist ein praktisches Werkzeug, aber es kann frustrierend sein, wenn Sie mit seinen Optionen und Macken nicht vertraut sind. Es gibt viele weitere Optionen im Verlauf. Weitere Informationen finden Sie in den Manpages. Und denken Sie daran, dass jeder eingegebene Befehl Geschichte ist.