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

Verlaufsbefehl in Linux ausführlich erklärt

Wenn Sie häufig die Linux-Befehlszeile verwenden, kann die effektive Verwendung des History-Befehls eine große Produktivitätssteigerung sein.

Unter Linux gibt es einen sehr nützlichen Befehl, der Ihnen alle zuletzt verwendeten Befehle anzeigt. Der Befehl heißt einfach history .

Zeitstempel anzeigen

Normalerweise, wenn Sie history eingeben In der Befehlszeile sehen Sie standardmäßig eine Zahl, gefolgt von den Befehlen, die Sie kürzlich verwendet haben. Zu Prüfzwecken kann es vorteilhaft sein, den Zeitstempel zusammen mit dem Befehl anzuzeigen, wie unten gezeigt.

Zeitstempel im history aktivieren Befehlsausgabe müssen Sie das HISTTIMEFORMAT konfigurieren Bash-Variable.

export HISTTIMEFORMAT="%F %T "
history | more
1  2020-06-25 19:02:39 systemctl restart network
2  2020-06-25 19:02:43 exit
3  2020-06-25 19:02:47 id
4  2020-06-25 19:02:56 cat /etc/hosts

Durchsuchen des Befehlsverlaufs

Dies ist möglicherweise Ihre am häufigsten verwendete Funktion des history Befehl . Wenn Sie bereits einen sehr langen Befehl ausgeführt haben, können Sie den Verlauf einfach mit einem Schlüsselwort durchsuchen und denselben Befehl erneut ausführen, ohne ihn vollständig eingeben zu müssen.

  1. Drücken Sie Control+R und geben Sie das Schlüsselwort ein.
  2. Drücken Sie die Eingabetaste, wenn Sie Ihren Befehl sehen, der den Befehl aus dem Verlauf ausführt.

Im folgenden Beispiel habe ich nach host gesucht , der den vorherigen Befehl cat /etc/hosts anzeigte im Verlauf, der das Wort host enthielt .

(reverse-i-search)`host': cat /etc/hosts
cat /etc/hosts
#<ip-address>	<hostname.domain.org>	<hostname>
127.0.0.1	localhost.localdomain	localhost	server1
::1		localhost.localdomain	localhost	server1

Manchmal möchten Sie einen Befehl aus dem Verlauf bearbeiten, bevor Sie ihn ausführen. Sie können beispielsweise nach systemctl suchen , was systemctl restart network anzeigt Wählen Sie aus der Befehlshistorie diesen Befehl aus (drücken Sie ESC Taste) und ändern Sie den restart bis stop .

Führen Sie es dann erneut aus, indem Sie einfach Enter drücken .

(reverse-i-search)`systemctl': systemctl stop network
systemctl stop network

Wiederhole den zuletzt ausgeführten Befehl

Aus verschiedenen Gründen kann es vorkommen, dass Sie die vorherigen Befehle wiederholen. Im Folgenden finden Sie die 4 verschiedenen Möglichkeiten, den zuletzt ausgeführten Befehl zu wiederholen.

  1. Verwenden Sie den up arrow um den vorherigen Befehl anzuzeigen und drücken Sie die Eingabetaste, um ihn auszuführen.
  2. Geben Sie !! ein und drücken Sie die Eingabetaste auf der Befehlszeile
  3. Geben Sie !-1 ein und drücken Sie die Eingabetaste in der Befehlszeile.
  4. Drücken Sie Control+P zeigt den vorherigen Befehl an, drücken Sie die Eingabetaste, um ihn auszuführen.

Führen Sie einen bestimmten Befehl aus

Wenn Sie im folgenden Beispiel den Befehl Nr. 4 wiederholen möchten, können Sie !4 ausführen wie unten gezeigt.

history | more
systemctl restart network
exit
id
cat /etc/hosts
!4
cat /etc/hosts
#<ip-address>	<hostname.domain.org>	<hostname>
127.0.0.1	localhost.localdomain	localhost	server1
::1		localhost.localdomain	localhost	server1

Vorherigen Befehl ausführen, der mit einem bestimmten Wort beginnt

Geben Sie ! ein gefolgt von den Anfangsbuchstaben des Befehls, den Sie erneut ausführen möchten. Geben Sie im folgenden Beispiel !ps ein und Enter, führte den vorherigen Befehl aus, beginnend mit ps , was ps aux | grep yp .

!ps
ps aux | grep yp
root     16947  0.0  0.1  36516  1264 ?        Sl   13:10   0:00 ypbind
root     17503  0.0  0.0   4124   740 pts/0    S+   19:19   0:00 grep yp

Begrenzen Sie die Anzahl der Verlaufselemente

Dies wird durch HISTSIZE gesteuert und HISTFILESIZE eingebaute Bash-Shell-Variablen. Hängen Sie die folgenden zwei Zeilen an Ihre ~/.bashrc an Datei und melden Sie sich ab und dann wieder an.

HISTSIZE=1500
HISTFILESIZE=1500

Als Ergebnis jetzt history ist so eingestellt, dass 1500 Befehle gespeichert werden.

Ändern Sie den Namen der Verlaufsdatei

Standardmäßig history wird in ~/.bash_history gespeichert Datei.

Fügen Sie die folgende Zeile zu .bash_profile hinzu -Datei und melden Sie sich erneut bei der Bash-Shell an, um den Verlaufsbefehl in .my_commandline zu speichern Datei anstelle von .bash_history Datei.

HISTFILE=/root/.my_commandline

Dies wird verwendet, wenn Sie Befehle verfolgen möchten, die von verschiedenen Terminals mit unterschiedlichen Verlaufsdateinamen ausgeführt werden.

Beseitigen Sie den kontinuierlich wiederholten Eintrag aus dem Verlauf

Im folgenden Beispiel pwd wurde dreimal eingegeben, wenn Sie den Verlauf machen, können Sie alle 3 fortlaufenden Vorkommen davon sehen. Um Duplikate zu eliminieren, setzen Sie HISTCONTROL zu ignoredups wie unten gezeigt.

history | tail -4
44  pwd
45  pwd
46  pwd
47  history | tail -4
export HISTCONTROL=ignoredups
history | tail -3
56  export HISTCONTROL=ignoredups
57  pwd
58  history | tail -4

Duplikate im gesamten Verlauf löschen

Die ignoredups oben gezeigt entfernt Duplikate nur, wenn es sich um aufeinanderfolgende Befehle handelt. Um Duplikate im gesamten Verlauf zu eliminieren, setzen Sie den HISTCONTROL zu erasedups wie unten gezeigt.

export HISTCONTROL=erasedups
pwd
systemctl restart network
history | tail -3
38  pwd
39  systemctl restart network
40  history | tail -3
ls -l
systemctl restart network
history | tail -6
35  export HISTCONTROL=erasedups
36  pwd
37  history | tail -3
38  ls -l
39  systemctl restart network
40  history | tail -6

Zwingt den Verlauf, sich an einen bestimmten Befehl nicht zu erinnern

Wenn Sie einen Befehl ausführen, können Sie history anweisen um den Befehl zu ignorieren, indem Sie HISTCONTROL setzen zu ignorespace und geben Sie ein Leerzeichen vor dem Befehl ein, wie unten gezeigt.

Ich sehe viele Junior-Systemadministratoren, die sich darüber aufregen, da sie einen Befehl aus der Historie verstecken können. Es ist gut zu verstehen, wie ignorespace funktioniert. Als Best Practice sollten Sie jedoch nichts absichtlich vor dem Verlauf verbergen.

export HISTCONTROL=ignorespace
ls -ltr
pwd
 systemctl restart network #Note that there is a space at the beginning of service, to ignore this command from history
history | tail -3
67  ls -l
68  pwd
69  history | tail -3

Löschen Sie den gesamten vorherigen Verlauf

Manchmal möchten Sie vielleicht den gesamten vorherigen history löschen , aber den Verlauf vorantreiben möchten.

history -c

Wörter aus Verlaufsbefehlen ersetzen

Wenn Sie den history durchsuchen , möchten Sie vielleicht einen anderen Befehl ausführen, aber denselben Parameter aus dem gerade gesuchten Befehl verwenden.

Im Beispiel unten der !!:$ neben dem vi Befehl erhält das Argument vom vorherigen Befehl zum aktuellen Befehl.

ls nginx.conf
nginx.conf
vi !!:$
vi nginx.conf

Im Beispiel unten ist das !^ neben dem vi-Befehl erhält das erste Argument vom vorherigen Befehl (d. h. cp Befehl) zum aktuellen Befehl (also vi Befehl).

cp nginx.conf nginx.conf.bak
vi  !^
vi nginx.conf

Einen bestimmten Befehl durch ein bestimmtes Argument ersetzen

Im Beispiel unten !cp:2 sucht nach dem vorherigen Befehl im Verlauf, der mit cp beginnt, nimmt das zweite Argument von cp und ersetzt es wie unten gezeigt durch den Befehl ls -l.

cp ~/longname.txt /really/a/very/long/path/long-filename.txt
ls -l !cp:2
ls -l /really/a/very/long/path/long-filename.txt

Im Beispiel unten !cp:$ sucht nach dem vorherigen Befehl im Verlauf, der mit cp beginnt, und nimmt das letzte Argument (in diesem Fall auch das zweite Argument, wie oben gezeigt) von cp und ersetzt es durch den Befehl ls -l, wie unten gezeigt.

ls -l !cp:$
ls -l /really/a/very/long/path/long-filename.txt

Verwendung des Verlaufs deaktivieren

Wenn Sie den history deaktivieren möchten alles zusammen und möchten nicht, dass sich die Bash-Shell die von Ihnen eingegebenen Befehle merkt, setzen Sie die HISTSIZE auf 0 wie unten gezeigt.

export HISTSIZE=0

Ignoriere bestimmte Befehle aus dem Verlauf

Manchmal möchten Sie Ihren Verlauf vielleicht nicht mit einfachen Befehlen wie pwd überladen und ls . Verwenden Sie HISTIGNORE um alle Befehle aus dem Verlauf anzugeben, die Sie ignorieren möchten.

Bitte beachten Sie, dass das Hinzufügen von ls zur HISTIGNORE ignoriert nur ls und nicht ls -l . Sie müssen also genau den Befehl angeben, den Sie aus dem Verlauf ignorieren möchten.

export HISTIGNORE="pwd:ls:ls -ltr:"
pwd
ls
ls -l
systemctl restart network
history | tail -3
79  export HISTIGNORE="pwd:ls:ls -l:"
80  systemctl restart network
81  history
[Note that history did not record pwd, ls and ls -l]

Weitere Informationen zum history Befehl unter Linux finden Sie auf der Handbuchseite.


Linux
  1. So verwenden Sie den Verlaufsbefehl unter Linux

  2. ls-Befehl unter Linux:17 nützliche Beispiele erklärt

  3. Linux-mv-Befehl

  4. Linux-Du-Befehl

  5. Linux-IP-Befehl

Tr-Befehl in Linux mit Beispielen erklärt

procinfo-Befehl in Linux erklärt

Quellbefehl unter Linux erklärt

Bildschirmbefehl unter Linux erklärt

Arping-Befehl unter Linux erklärt

Verlaufsbefehl in Linux – Zeigen Sie den Verlauf des Linux-Terminals an