24Aug
Die Bash-Shell ist die Standard-Terminalumgebung, die in den meisten Linux-Distributionen enthalten ist, in macOS enthalten ist und für die Installation unter Windows 10 verfügbar ist. Sie merkt sich die eingegebenen Befehle und speichert sie in einer Verlaufsdatei. Sie kennen wahrscheinlich ein paar Grundlagen der Bash-Geschichte, aber es ist viel mächtiger, als Sie vielleicht erkennen.
Tastaturkürzel
Um durch Ihren Bash-Verlauf zu blättern, können Sie einige der vielen nützlichen Tastenkombinationen von bash verwenden. Drücken Sie diese Tastenkürzel und die Befehle, die Sie zuvor verwendet haben, erscheinen an der Eingabeaufforderung.
- Pfeil nach oben oder Strg + P : Gehen Sie zum vorherigen Befehl in Ihrem Verlauf. Drücken Sie die Taste mehrmals, um die Befehle, die Sie verwendet haben, rückwärts zu durchlaufen.
- Abwärtspfeil oder Strg + N : Gehen Sie zum nächsten Befehl in Ihrem Verlauf. Drücken Sie die Taste mehrmals, um durch die von Ihnen verwendeten Befehle zu navigieren.
- Alt + R : Stellt alle Änderungen an einem Befehl, den Sie aus Ihrem Verlauf gezogen haben, wieder her, wenn Sie ihn in der aktuellen Zeile bearbeitet haben.
Bash verfügt auch über einen speziellen "Rückruf" -Modus, mit dem Sie nach Befehlen suchen können, die Sie zuvor ausgeführt haben, anstatt sie nacheinander durchzuscrollen.
- Strg + R : Rufen Sie den letzten Befehl ab, der den von Ihnen angegebenen Zeichen entspricht. Drücken Sie diese Verknüpfung und beginnen Sie mit der Eingabe, um Ihre Bash-Historie nach einem Befehl zu durchsuchen.
- Strg + O : Führen Sie den gefundenen Befehl mit Strg + R aus.
- Strg + G : Verlassen Sie den Verlaufssuchmodus, ohne einen Befehl auszuführen.
Anzeigen Ihres Bash-Verlaufs
Sie können Ihren gesamten Bash-Verlauf auf den Bildschirm drucken, indem Sie einen einzigen Befehl ausführen:
-VerlaufSie sehen eine Liste aller Befehle in Ihrem Bash-Verlauf sowie eine Zahl links von jedem. Der Befehl mit einer "1" daneben ist der älteste Befehl in Ihrer Bash-History, während der Befehl mit der höchsten Nummer der letzte ist.
Sie können mit der Ausgabe alles tun, was Sie möchten. Zum Beispiel könnten Sie es an den grep-Befehl pipen, um Ihren Befehlsverlauf zu durchsuchen.
Geschichte |grep your_searchSie könnten es auch an den Befehl tail übergeben, um nur eine kleine Anzahl der zuletzt ausgeführten Befehle anzuzeigen. Der folgende Befehl würde beispielsweise die letzten 5 Einträge in Ihrem Verlauf anzeigen.
Geschichte |tail -5Ausführen von Befehlen aus Ihrer Historie
Bash kann frühere Befehle schnell "erweitern" oder sie erweitern und modifizieren. Diese Funktion wird als "Verlaufserweiterung" bezeichnet und verwendet ein Ausrufezeichen, das als "Knall" bezeichnet wird. Geben Sie sie an der Eingabeaufforderung ein und drücken Sie die Eingabetaste, um sie auszuführen, als würden Sie einen anderen Befehl ausführen.
Verwenden Sie den folgenden Befehl, um einen bestimmten Befehl aus Ihrem Verlauf anhand seiner Nummer auszuführen:
! #Nehmen wir beispielsweise an, Sie wollten den 12. Befehl aus Ihrem Bash-Verlauf ausführen. Das ist der Befehl mit einer "12" links davon, wenn Sie den Befehl history ausführen. Sie würden den folgenden Befehl eingeben.
! 12Um den zuletzt ausgeführten Befehl erneut auszuführen, geben Sie Folgendes ein. Dies hat den gleichen Effekt, als ob Sie einmal den Pfeil nach oben drücken, um den vorherigen Befehl anzuzeigen, und dann die Eingabetaste drücken.
! !Sie können auch auf einen Befehl eine bestimmte Anzahl von Zeilen zurückverweisen. Zum Beispiel würde! -2 den vorletzten Befehl ausführen, den Sie ausgeführt haben.!!bedeutet dasselbe wie! -1.
Diese Erweiterung funktioniert überall auf der Linie. Sie können alles, was Sie möchten, vor oder nach! !oder einen der anderen Ausdrücke in diesem Abschnitt. Sie können zum Beispiel den folgenden Befehl eingeben, um den letzten Befehl, den Sie durch sudo ausgeführt haben, erneut auszuführen und ihm Root-Rechte zu geben. Dies ist besonders nützlich, wenn Sie vergessen, sudo vor dem Ausführen eines Befehls hinzuzufügen.
Sudo! !Oder Sie können zum Beispiel den vorherigen Befehl erneut ausführen und die Ausgabe an grep übergeben, um nach Text zu suchen.
! !|grep textUm nach einem Befehl in Ihrem Verlauf zu suchen und ihn auszuführen, geben Sie Folgendes ein. Dadurch wird der letzte Befehl ausgeführt, der dem von Ihnen angegebenen Text entspricht:
! TextWenn Sie also kürzlich einen Befehl ausgeführt haben, der mit ping begonnen hat, können Sie den folgenden Befehl ausführen, um danach zu suchen. Dies wird rückwärts durch Ihren Verlauf suchen, suchen Sie den letzten Befehl, der mit "Pi" beginnt, und führen Sie ihn sofort aus:
! PiSie können a: p an eine der obigen Erweiterungen anhängen und bash wird den Befehl an das Terminal ausgeben, ohne es auszuführen. Dies ist nützlich, wenn Sie bestätigen möchten, dass Sie den richtigen Befehl auswählen, bevor Sie ihn ausführen.
! 12: p! !: p! Text: pWiederverwenden von Argumenten aus Ihrer Historie
Bash erlaubt Ihnen auch, einen neuen Befehl auszuführen, aber verwenden Sie Argumente von vorherigen Befehlen in Ihrem Verlauf. Dadurch können Sie lange oder komplizierte Argumente schnell wiederverwenden, ohne sie erneut eingeben zu müssen.
-Befehl! $Angenommen, Sie haben den Befehl "/home/chris/ some_long_file_name_you_dont_want_to_type_ again" ausgeführt. Sie möchten nun den Befehl nano /home/chris/ some_long_file_name_you_dont_want_to_type_ again ausführen. Anstatt das Ganze von Grund auf neu zu tippen, könnten Sie Folgendes ausführen:
nano! $Mit!! $ Würde bash automatisch das letzte Argument Ihres vorherigen Befehls ausfüllen.
Dies füllt nur das letzte Argument. Also, wenn Sie ping google.com -c 4 ausführen und dann ping! $ Ausführen, würde dies einfach zu "ping 4" erweitern.
Um diese Situation zu beheben, können Sie den folgenden Trick verwenden, um das erste Argument in der Zeile statt dem letzten zu erweitern:
command! ^Also, wenn Sie ping google.com -c 4 ausführen und dann ping! Bash würde dies auf "ping google.com" erweitern.
Um alle Argumente, die im vorherigen Befehl verwendet wurden, anstatt nur eines einzigen Arguments auszufüllen, würden Sie Folgendes verwenden:
Befehl! *Also, wenn Sie ping!* stattdessen würde bash automatisch alle Argumente ausfüllen, die Sie im vorherigen Befehl verwendet haben
Sie können den gleichen Trick verwenden, mit dem Sie Befehle aus Ihrem Verlauf ausführen, um Argumente von ihnen zu erhalten. Verwenden Sie einfach das folgende Formular:
command! abc:#Zum Beispiel haben wir früher den Befehl sudo hostname ubuntu ausgeführt. Wenn wir den folgenden Befehl ausführen, sucht bash rückwärts durch den Verlauf, um den letzten Befehl zu finden, der mit den von uns eingegebenen Buchstaben beginnt und das von uns spezifizierte Argument ausfülltwir laufen echo! su: 2, bash sucht zurück, um den letzten Befehl zu finden, der mit "su" beginnt, und füllt sein zweites Argument aus, das "ubuntu" ist.
Andere Tricks funktionieren wie Sie vielleicht erwarten. Wenn Sie beispielsweise die Zahl durch ein Sternchen ersetzen, wird die bash alle Argumente des Befehls ausfüllen:
command! Abc: *Den vorherigen Befehl erneut ausführen und ändern.
Bash ermöglicht Ihnen auch, den vorherigen Befehl erneut auszuführenund spezifizieren Sie etwas, das geändert werden sollte. Dies kann nützlich sein, um einen Tippfehler in einem Befehl zu korrigieren. Mit dem folgenden Befehl wird beispielsweise der vorherige Befehl erneut ausgeführt, wobei der Text "abc" durch den Text "xyz" ersetzt wird.
^ abc ^ xyzWenn Sie zum Beispiel ping gogle.com versehentlich ausgeführt haben, könnten Sie dann ^ gog ^ goog ausführen und bash würde stattdessen den Befehl ping google.com ausführen.
Wo Ihr Protokoll gespeichert ist und wie es gelöscht wird
Die Bash-Shell speichert standardmäßig den Verlauf der Befehle, die Sie in der Verlaufsdatei Ihres Benutzerkontos in ~ /. bash_history ausgeführt haben. Wenn Ihr Benutzername beispielsweise bob lautet, finden Sie diese Datei unter /home/bob/. bash_history.
Da Ihr Verlauf in einer Datei gespeichert ist, bleibt er zwischen den Sitzungen bestehen. Sie können einige Befehle ausführen, sich abmelden und am nächsten Tag wiederkommen. Diese Befehle befinden sich immer noch in Ihrer Verlaufsdatei und können angezeigt und verwendet werden. Jedes Benutzerkonto verfügt über eine eigene Verlaufsdatei mit einem separaten Befehlsverlauf.
Um den Bash-Verlauf zu löschen, können Sie den folgenden Befehl ausführen. Dadurch wird der Inhalt der. bash_history-Datei Ihres Benutzerkontos gelöscht:
-history -cBash merkt sich standardmäßig nur eine begrenzte Anzahl von Befehlen und verhindert so, dass die Verlaufsdatei zu groß wird. Die Anzahl der History-Einträge, die bash erinnert, wird durch die HISTSIZE-Variable gesteuert. Der Standardwert ist normalerweise 500 oder 1000 Einträge. Sie können den folgenden Befehl ausführen, um die Größe des Bash-Verlaufs auf Ihrem System anzuzeigen.
echo $ HISTSIZEUm den Verlauf auf Null zu setzen, führen Sie den folgenden Befehl aus.
HISTSIZE = 0Für die aktuelle Sitzung speichert bash keine Verlaufseinträge, es sei denn, Sie führen einen Befehl wie HISTSIZE = 1000 aus, um ihn auf eine bestimmte Anzahl von Einträgen zurückzusetzen.
Ignorieren von Leerzeichen und Duplikaten
Bash ermöglicht es Ihnen, Verlaufseinträge zu ignorieren, die mit einem Leerzeichen beginnen, wenn Sie die HISTCONTROL-Variable auf Ignorieren setzen.
HISTCONTROL = ignorespaceGeben Sie ein Leerzeichen vor einem Befehl ein, bevor Sie es in der Bash-Shell ausführen, und der Befehl wird normal ausgeführt, wird jedoch nicht im Verlauf angezeigt, wenn Sie diese Variable aktiviert haben. Auf diese Weise können Sie Ihren Verlauf ein wenig sauberer halten und Befehle ausführen, ohne dass diese in Ihrem Verlauf erscheinen.
Bash erlaubt es Ihnen auch, doppelte Befehle zu ignorieren, die Ihren Verlauf überladen können. Setzen Sie dazu HISTCONTROL auf ignoredups.
HISTCONTROL = ignoredupsUm die Funktion ignorespace und ignoredups zu verwenden, müssen Sie die Variable HISTCONTROL auf beide ignorieren.
HISTCONTROL = ignorebothBeachten Sie, dass von Ihnen festgelegte Bash-Variablen nur für die aktuelle Sitzung bestehen bleiben. Sie müssen diese zur Bashc-Datei Ihres Benutzerkontos hinzufügen, damit diese Werte automatisch in jeder gestarteten Bash-Sitzung festgelegt werden, wenn Sie dies bevorzugen.
Die Bash Shell ist ein komplexes Tool mit vielen weiteren Optionen. Sehen Sie sich die Bashs History Builtins und History Expansion Sections im offiziellen bash Manual an, die detailliertere Informationen und andere fortgeschrittene Tricks enthalten, die Sie verwenden können.