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

15 Beispiele für Linux Bash History-Erweiterungen, die Sie kennen sollten

Der Bash-Verlauf ist sehr mächtig. Wenn Sie verstehen, wie Sie die Bash-Verlaufserweiterungen effektiv nutzen, werden Sie auf der Linux-Befehlszeile äußerst produktiv.

In diesem Artikel werden 15 Beispiele erläutert, die die folgenden Funktionen zur Erweiterung des Bash-Verlaufs verwenden:

  • Ereignisbezeichner – Bezieht sich auf einen bestimmten Befehl im Verlauf. Es beginnt mit einem !
  • Wortbezeichner – Bezieht sich auf ein bestimmtes Wort eines Verlaufseintrags. Typischerweise wird dies mit einem geraden Bezeichner kombiniert. Auch Bezeichner und Wortbezeichner werden durch einen Doppelpunkt getrennt
  • Modifizierer – Modifiziert das Ergebnis der Ersetzung durch die Ereignis- oder Wortbezeichner

Dieser Artikel ist Teil unserer fortlaufenden Bash-Tutorial-Reihe.

Wie Sie bereits wissen, verwenden Sie zum Anzeigen aller Verlaufseinträge den Verlaufsbefehl. Dadurch werden alle zuvor ausgeführten Befehle zusammen mit der Nummer für diesen Befehl in der Verlaufstabelle angezeigt.

$ history
1 tar cvf etc.tar /etc/
2 cp /etc/passwd /backup
3 ps -ef | grep http
4 service sshd restart
5 /usr/local/apache2/bin/apachectl restart

Bash History Event Designators

1. Führen Sie einen bestimmten Befehl aus dem Verlauf mit !n

aus

Wenn Sie einen Befehl früher ausgeführt haben, können Sie ihn schnell ausführen, anstatt ihn erneut einzugeben, indem Sie die entsprechende Nummer des Befehls im Verlauf verwenden.

Um beispielsweise Befehl Nr. 4 auszuführen, gehen Sie wie folgt vor. Dadurch wird Befehl Nr. 4 aus dem Verlauf angezeigt und sofort ausgeführt.

$ !4
service sshd restart

Gehen Sie wie folgt vor, um einen Befehl auszuführen, der vor zwei Befehlen eingegeben wurde.

$ !-2

Führen Sie einen der folgenden Schritte aus, um den vorherigen Befehl auszuführen:

$ !!

$ !-1

Sie können auch -P drücken (wenn Sie sich im standardmäßigen Emacs-Modus befinden), um zum vorherigen Befehl zu gelangen.

Wenn Sie die Bearbeitung des vi-Stils für die Befehlszeile mit „set -o vi“ aktiviert haben, verwenden Sie -k, um zum vorherigen Befehl zu gelangen.

2. Führen Sie einen Befehl mit Schlüsselwörtern mit !string und !?string

aus

Sie können auch Schlüsselwörter verwenden, um einen Befehl aus dem Verlauf auszuführen.

Das folgende Beispiel sucht nach dem vorherigen Befehl, der mit dem Schlüsselwort BEGINNT „ps“ und führen Sie es aus. In diesem Beispiel übernimmt es den vorherigen Befehl „ps -ef | grep http“ und führt es aus.

$ !ps
ps -ef | grep http

Im folgenden Beispiel wird nach dem vorherigen Befehl gesucht, der das Schlüsselwort ENTHÄLT „Apache“ und führen Sie es aus. In diesem Beispiel übernimmt es den vorherigen Befehl „/usr/local/apache2/bin/apachectl restart“ und führt ihn aus.

$ !?apache
/usr/local/apache2/bin/apachectl restart

3. Ersetzen Sie eine Zeichenfolge aus dem vorherigen Befehl mit ^str1^str2^

Im folgenden Beispiel haben wir zuerst den Befehl ls ausgeführt, um eine Datei zu überprüfen. Später wurde uns klar, dass wir uns den Inhalt der Datei ansehen möchten. Anstatt den gesamten Dateinamen erneut einzugeben, können wir einfach das „ls“ im vorherigen Befehl durch „cat“ ersetzen, wie unten gezeigt.

$ ls /etc/cron.daily/logrotate

$ ^ls^cat^
cat /etc/cron.daily/logrotate

Hinweis:Weitere Tipps zum Bash-Verlauf finden Sie unter 15 Beispiele zum Beherrschen des Linux-Befehlszeilenverlaufs. Dies erklärt, wie Zeitstempel im Verlauf angezeigt werden und wie verschiedene verlaufsbezogene Umgebungsvariablen verwendet werden, einschließlich HISTTIMEFORMAT, HISTSIZE, HISTFILE, HISTCONTROL und HISTIGNORE

Bash History Word Designators

Wortbezeichner sind sehr hilfreich, wenn Sie einen neuen Befehl eingeben möchten, aber das Argument eines der zuvor ausgeführten Befehle verwenden möchten. Einige der Beispiele sind unten aufgeführt.

4. Holen Sie sich das erste Argument eines Befehls mit :^

Im folgenden Beispiel wurde „!cp:^“ als Argument für den Befehl „ls -l“ angegeben. „!cp:^“ findet den vorherigen Befehl im Verlauf, der mit „cp“ beginnt, und erhält das erste Argument dieses Befehls.

$ cp /etc/passwd /backup

$ ls -l !cp:^
ls -l /etc/passwd

Das folgende Beispiel erhält das 1. Argument aus dem vorherigen Befehl.

$ ls -l !!:^

5. Holen Sie sich das letzte Argument eines Befehls mit :$

Im folgenden Beispiel wurde „!cp:$“ als Argument für den Befehl „ls -l“ angegeben. „!cp:$“ findet den vorherigen Befehl im Verlauf, der mit „cp“ beginnt, und ruft das letzte Argument dieses Befehls ab.

$ cp /etc/passwd /backup

$ ls -l !cp:$
ls -l /backup

Das folgende Beispiel erhält das letzte Argument aus dem vorherigen Befehl.

$ls -l !!:$

6. Holen Sie sich das n-te Argument eines Befehls mit :n

Im folgenden Beispiel wurde „!tar:2“ als Argument für den Befehl „ls -l“ angegeben. „!tar:2“ findet den vorherigen Befehl im Verlauf, der mit „tar“ beginnt, und erhält das zweite Argument dieses Befehls.

$ tar cvfz /backup/home-dir-backup.tar.gz /home

$ ls -l !tar:2
ls -l /backup/home-dir-backup.tar.gz

7. Holen Sie sich alle Argumente eines Befehls mit :*

Im folgenden Beispiel wurde „!cp:*“ als Argument für den Befehl „ls -l“ angegeben. „!cp:*“ findet den vorherigen Befehl im Verlauf, der mit „cp“ beginnt, und ruft alle seine Argumente ab.

$ cp /etc/passwd /backup

$ ls -l !cp:*
ls -l /etc/passwd /backup

8. Verweisen Sie auf das zuletzt gesuchte Wort mit !%

Wie wir oben erklärt haben, sucht „!?apache“ nach dem vorherigen Verlaufsbefehl, der das Schlüsselwort „apache“ ENTHÄLT, und führt ihn aus.

$ /usr/local/apache2/bin/apachectl restart

$ !?apache
/usr/local/apache2/bin/apachectl restart

!% bezieht sich auf das ganze Wort, das mit dem vorherigen „?“ übereinstimmte. suchen.

Wenn Sie beispielsweise zuvor nach „?apache“ gesucht haben, entspricht „!%“ dem ganzen Wort „/usr/local/apache2/bin/apachectl“. Beachten Sie, dass „/“ in diesem Zusammenhang als Teil eines Wortes behandelt wird.

In diesem Fall können Sie also den Apache stoppen, indem Sie Folgendes ausführen.

$ !% stop
/usr/local/apache2/bin/apachectl stop

9. Holen Sie sich den Bereich der Argumente von einem Befehl mit x-y

Im folgenden Beispiel wurde „!tar:3-5“ als Argument für den Befehl „ls -l“ angegeben. „!tar:3-5“ findet den vorherigen Befehl im Verlauf, der mit „tar“ beginnt, und ruft die Argumente von 3 bis 5 ab.

$ tar cvf home-dir.tar john jason ramesh rita

$ ls -l !tar:3-5
ls -l john jason ramesh

Im Folgenden werden alle Argumente aus 2.

abgerufen
$ ls -l !tar:2-$

Bitte beachten Sie Folgendes:

  • !!:* Holt alle Argumente aus dem vorherigen Befehl
  • !!:2* Ruft alle Argumente ab dem 2. Argument ab.
  • !!:2-$ Dasselbe wie oben. Ruft alle Argumente ab dem 2. Argument ab.
  • !!:2- Ruft alle Argumente ab dem 2. Argument ab (außer dem letzten Argument).

Bash-Verlaufsmodifikatoren

Modifikatoren werden nach den Wortbezeichnern angegeben, wie in den Beispielen unten erklärt.

10. Entfernen Sie den nachgestellten Pfadnamen aus einem Wort mit :h

Im folgenden Beispiel übernimmt „!!:$:h“ das letzte Argument des vorherigen Befehls und entfernt den nachgestellten Pfadnamen. In diesem Fall entfernt es den Dateinamen und erhält nur den vollständigen Pfad.

$ ls -l /very/long/path/name/file-name.txt

$ ls -l !!:$:h
ls -l /very/long/path/name

11. Entfernen Sie alle führenden Pfadnamen aus einem Wort mit :t

Dies ist das genaue Gegenteil des vorherigen Beispiels.

Im folgenden Beispiel nimmt „!!:$:t“ das letzte Argument des vorherigen Befehls und entfernt alle führenden Pfadnamen. In diesem Fall erhält es nur den Dateinamen.

$ ls -l /very/long/path/name/file-name.txt

$ ls -l !!:$:t
ls -l file-name.txt

12. Entfernen Sie die Dateinamenerweiterung von einem Wort mit :r

Im folgenden Beispiel nimmt „!!:$:r“ das letzte Argument des vorherigen Befehls und entfernt nur das „.suffix“ (das hier die Dateinamenerweiterung ist). In diesem Fall wurde .txt

entfernt
$ ls -l /very/long/path/name/file-name.txt

$ ls -l !!:$:r
ls -l /very/long/path/name/file-name

13. Sed wie Substitution im Bash-Verlauf mit :s/str1/str2/

Anstatt das „^original^replacement^“ zu verwenden, wie wir zuvor besprochen haben, können wir auch eine sed-ähnliche Substitution in der Bash-Historie verwenden, wie im folgenden Beispiel gezeigt. Dies könnte leicht zu merken sein. !! soll den vorherigen Befehl aufrufen, „:s/original-string/replacement-string/“ ist die sed-ähnliche Syntax, um einen String zu ersetzen.

$ !!:s/ls -l/cat/

Sie können auch das g-Flag (zusammen mit dem s-Flag) verwenden, um eine globale Substitution durchzuführen, wie unten gezeigt. Dies ist hilfreich, wenn Sie sich bei mehreren Wörtern vertippt haben und alle zusammen ändern und den Befehl erneut ausführen möchten.

Im folgenden Beispiel habe ich versehentlich zweimal „password“ (anstelle von passwd) angegeben.

$ cp /etc/password /backup/password.bak

Um dies zu beheben, führen Sie einfach die folgende globale Verlaufs-Sed-wie-Ersetzung durch.

$ !!:gs/password/passwd/
cp /etc/passwd /backup/passwd.bak

14. Wiederholen Sie die Ersetzung schnell mit :&

Wenn Sie wie oben gezeigt bereits eine Bash-Verlaufsersetzung erfolgreich durchgeführt haben, können Sie dieselbe Ersetzung mit :&.

schnell noch einmal wiederholen

Ich habe in einem anderen Befehl versehentlich „password“ anstelle von „passwd“ eingegeben.

$ tar cvf password.tar /etc/password

Anstatt den Befehl erneut einzugeben oder „gs/password/passwd“ auszuführen, kann ich jetzt einfach „:&“ verwenden, wodurch die letzte Substitution wiederverwendet wird. Verwenden Sie „:g&“, um die letzte Ersetzung durch global wiederzuverwenden.

$ !!:g&
tar cvf passwd.tar /etc/passwd

15. Geben Sie den Befehl aus, ohne ihn mit :p

auszuführen

Dies ist sehr hilfreich, wenn Sie eine komplexe Verlaufsersetzung durchführen und den endgültigen Befehl anzeigen möchten, bevor Sie ihn ausführen.

Im folgenden Beispiel führt „!tar:3-:p“ den Befehl nicht wirklich aus.

Da wir hier „:p“ angegeben haben, führt es nur die Ersetzung durch und zeigt den neuen Befehl an. Sobald Sie die Erweiterung des Bash-Verlaufs überprüft haben und glauben, dass dies der Befehl ist, den Sie ausführen wollten, entfernen Sie das „:p“ und führen Sie ihn erneut aus.

$ tar cvf home-dir.tar john jason ramesh rita

$ tar cvfz new-file.tar !tar:3-:p
tar cvfz new-file.tar john jason ramesh

Linux
  1. 15 Beispiele zur Beherrschung der Linux-Befehlszeilengeschichte

  2. 7 Beispiele für Linux-df-Befehle

  3. 8 Linux TR-Befehlsbeispiele

  4. rm-Befehlsbeispiele unter Linux

  5. ps-Befehlsbeispiele in Linux

Linux History Command Tutorial für Anfänger (8 Beispiele)

Verlaufsbefehl in Linux mit Beispielen

So aktivieren Sie den Zeitstempel im Bash-Verlauf unter Linux

Bash Echo-Befehl mit Beispielen in Linux erklärt

5 einfache Bash-Verlaufstricks, die jeder Linux-Benutzer kennen sollte

id-Befehlsbeispiele in Linux