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

Analysieren des Bash-Verlaufs unter Linux

In Bash der history command ist der Schlüssel, um nicht nur zu verstehen, was Sie während Ihrer Shell-Sitzung getan haben, sondern auch um Rohmaterial für neue Befehle zu erhalten, die Sie in Zukunft ausführen möchten. history ist besonders nützlich, wenn Sie einen Headless-Server betreiben. Wenn Sie keine Maus haben, können Sie die letzte Hälfte eines komplexen Befehls nicht einfach kopieren und einfügen, um eine leicht modifizierte Version davon auszuführen, also müssen Sie das Ganze noch einmal eingeben - es sei denn, Sie verwenden history Modifikatoren.

Halten Sie den Verlauf aus Ihrem Verlauf heraus

Bevor wir den Verlauf besprechen, hier ein Tipp, wie Sie den history wörtlich führen können Einträge aus Ihrem Verlauf.

Das Problem bei der Verwendung des history Befehl, um Ihren history zu überprüfen ist, dass es einen Eintrag zu Ihrem history hinzufügt Datei. Diese Einträge überladen nicht nur Ihren history , aber sie bewirken auch, dass sich jede Linie "weiter" von Ihrer aktuellen Position entfernt.

$ cd example-project
$ ls
bin doc src
$ touch doc/LICENSE
$ history
102 cd example-project
103 ls
104 touch doc/LICENSE
105 history
$

Ein sich bewegendes Ziel ist schwer zu verfolgen und schwer zu treffen, wenn Sie also vorhaben, ernsthaft Ihre history zu verwenden Um Ihre Bash-Interaktionen zu beschleunigen, fügen Sie diese Konfiguration zu Ihrer .bashrc hinzu Datei:

export HISTCONTROL=$HISTCONTROL:ignorespace

Diese Konfiguration verhindert, dass Befehle, denen ein Leerzeichen vorangestellt ist, zu Ihrem history von Bash hinzugefügt werden .

$ cd example-project
$ ls
bin doc src
$ touch doc/LICENSE
$   history
102 cd example-project
103 ls
104 touch doc/LICENSE
$

[ Kostenloser Online-Kurs:Technischer Überblick über Red Hat Enterprise Linux. ]

Verlaufsereignisse

Die Grundstruktur der history der Shell beginnt mit einer Liste von events . Ein event ist alles, was Sie in die Shell eingegeben haben, gefolgt von Return oder Enter Schlüssel. Jedes event wird eine Indexnummer (eine Zeilennummer) zugewiesen, und Sie können Ereignisse anzeigen und abrufen, indem Sie event designators verwenden .

Zum Beispiel, um ein bestimmtes Zeilenelement in Ihrem Shell-history abzurufen , verwenden Sie ein Ausrufezeichen (! ) unmittelbar gefolgt von der Nummer des history Zeile:

$   history
102 cd example-project
103 ls
104 touch README
$ !103
ls
bin doc README src

Sie können auch auf vergangene Befehle relativ zu ihrer Position im history verweisen Auflistung. Zum Beispiel, um den Befehl two auszuführen Zeilen in der Vergangenheit, stellen Sie sich Ihre aktuelle Eingabeaufforderung als eine Zeile größer als die letzte Zeile im history vor , und subtrahieren Sie dann die Nummer der Zeile, die Sie ausführen möchten, von Ihrer aktuellen Zeilennummer. In diesem Beispiel Zeile 103 ist die Ziellinie und 105 ist die aktuelle Eingabeaufforderung (für ein Delta von 105-103=2 ):

$   history
102 cd example-project
103 ls
104 touch README
$ !103
ls
bin doc README src

Sie können ein ganzes Zeichen speichern, wenn Sie nur die letzte Zeile wiederholen möchten. Der Ausdruck !! und !-1 sind synonym:

$   history
102 cd example-project
103 ls
104 touch README
$ !103
ls
bin doc README src

Beachten Sie, dass der Befehl selbst in der Ausgabe wiederholt wird, wenn history wird wiederholt. Aus Gründen der Kürze und Klarheit wird eine solche Ausgabe von den verbleibenden Beispielen in diesem Artikel ausgeschlossen.

Wortbezeichner

Bash hat Funktionen, die Ihnen helfen, Ihren history zu parsen mit word designators , und Tools, mit denen Sie die Befehle in Ihrem history ändern können . Es könnte hilfreich sein, an Ihre Shell-history zu denken als indiziertes Array oder sogar als großes Verlaufsobjekt, das aus vielen kleineren Elementen besteht. Jedes Wort in jeder Zeile Ihres history ist indiziert und beginnt bei 0 (was normalerweise der Befehl ist, aber mehrteilige Befehle und Präfixe von Umgebungsvariablen sind bemerkenswerte Ausnahmen). Sie können auf jeden Index zugreifen, indem Sie einen Doppelpunkt hinzufügen (: ) zu Ihrer Zeilenreferenz, unmittelbar gefolgt von der word designator .

Hier ist ein Beispiel für den Zugriff auf das erste Wort:

$   history
102 cd example-project
103 ls
104 touch README
$ !103
ls
bin doc README src

Da das Ergreifen des ersten Arguments üblich ist, wird der Zirkumflex (oder der „Hut“):^ ) ist ein Alias ​​für :1 .

$ echo foo
$ !!^
foo

Am anderen Ende des Spektrums steht der Dollar ($ ) Zeichen stellt das letzte Argument dar:

$ echo foo bar baz
$ echo !!$
baz

Wortbereiche

Sie müssen sich nicht mit nur einem Argument zufriedengeben. Sie können auch Bereiche eines Indexes extrahieren. Alle Argumente außer dem nullten sind mit einem Sternchen verfügbar (* ).

$ echo foo bar baz
$ touch !!*
$ ls
foo bar baz

Dies ist eigentlich ein Synonym für 1-$ (d. h. das erste Argument zum letzten Argument). Wie zu erwarten, können Sie Ihren Bereich mit dieser ungekürzten Schreibweise beliebig definieren. Dieses Beispiel verweist auf das zweite bis fünfte Argument und ignoriert das erste und die letzten beiden Argumente:

$ cp foo a.sh spacer.sh rev.bin sync.py baz ~/dest
$ cd ~/dest
$ chmod ug+x !-2:2-5
$ ls -l --classify
a.sh*  baz  foo  rev.bin*  spacer.sh*  sync.py*

Wenn Sie nur das letzte einzelne Wort in einem Index ausschließen müssen, können Sie einen Bereich ohne Terminierung angeben:

$ cp foo a.sh spacer.sh ~/dest
$ cd ~/dest
$ chmod ug+x !-2:2-
$ ls -l --classify
a.sh*  foo  spacer.sh*

Verwendung des Verlaufs für Geschwindigkeit und Präzision

Der history Bei einem Befehl geht es nicht immer darum, Tastendrücke zu reduzieren. Sie können Ihren Bash-history verwenden um zu vermeiden, versehentlich eine Datei oder einen Ordner von einem wichtigen Vorgang auszuschließen oder einen Dateinamen falsch zu schreiben. Machen Sie sich mit dem history vertraut Befehl für robustere Bash-Interaktionen.

[ Möchten Sie Red Hat Enterprise Linux ausprobieren? Laden Sie es jetzt kostenlos herunter. ]


Linux
  1. So verwenden Sie Bash-Verlaufsbefehle

  2. Machen Sie Ihre Bash-Eingabeaufforderung unter Linux winterfest

  3. So löschen Sie den BASH-Befehlszeilenverlauf in Linux

  4. So löschen Sie einen bestimmten Befehl aus dem Bash-Verlauf in Linux

  5. Wie kürze ich die Bash-Eingabeaufforderung unter Linux?

Verlaufsbefehl in Linux (Bash-Verlauf)

Verlaufsbefehl in Linux mit Beispielen

So vermeiden Sie doppelte Einträge im Bash-Verlauf unter Linux

So aktivieren Sie den Zeitstempel im Bash-Verlauf unter Linux

So installieren Sie Mcfly unter Linux.

So löschen Sie den Bash-Verlauf in Linux und Mac