Website-Suche

Die Leistungsfähigkeit von Linux „History Command“ in Bash Shell


Wir verwenden den Befehl history häufig in unseren täglichen Routineaufgaben, um den Befehlsverlauf zu überprüfen oder Informationen über vom Benutzer ausgeführte Befehle zu erhalten. In diesem Beitrag werden wir sehen, wie wir den Befehl „history“ effektiv nutzen können, um den Befehl zu extrahieren, der von Benutzern in der Bash-Shell ausgeführt wurde. Dies kann für Prüfzwecke nützlich sein oder um herauszufinden, welcher Befehl zu welchem Datum und Uhrzeit ausgeführt wird.

Standardmäßig werden Datum und Zeitstempel beim Ausführen des history-Befehls nicht angezeigt. Die Bash-Shell bietet jedoch CLI-Tools zum Bearbeiten des Befehlsverlaufs des Benutzers. Sehen wir uns einige praktische Tipps und Tricks sowie die Leistungsfähigkeit des Befehls history an.

1. Listen Sie die letzten/alle ausgeführten Befehle unter Linux auf

Wenn Sie einen einfachen history-Befehl vom Terminal aus ausführen, wird Ihnen eine vollständige Liste der zuletzt ausgeführten Befehle mit Zeilennummern angezeigt.

[narad@tecmint ~]$ history

    1  PS1='\e[1;35m[\u@\h \w]$ \e[m '
    2  PS1="\e[0;32m[\u@\h \W]$ \e[m "
    3  PS1="\u@\h:\w [\j]$ "
    4  ping google.com
    5  echo $PS1
    6   tail -f /var/log/messages
    7  tail -f /var/log/messages
    8  exit
    9  clear
   10  history
   11  clear
   12  history

2. Listen Sie alle Befehle mit Datum und Zeitstempel auf

Wie finde ich Datumund Zeitstempel für den Befehl? Mit dem Befehl ‘export’ mit Variable wird der Befehlsverlauf mit dem entsprechenden Zeitstempel angezeigt, wann der Befehl ausgeführt wurde.

[narad@tecmint ~]$ export HISTTIMEFORMAT='%F %T  '

      1  2013-06-09 10:40:12   cat /etc/issue
      2  2013-06-09 10:40:12   clear
      3  2013-06-09 10:40:12   find /etc -name *.conf
      4  2013-06-09 10:40:12   clear
      5  2013-06-09 10:40:12   history
      6  2013-06-09 10:40:12   PS1='\e[1;35m[\u@\h \w]$ \e[m '
      7  2013-06-09 10:40:12   PS1="\e[0;32m[\u@\h \W]$ \e[m "
      8  2013-06-09 10:40:12   PS1="\u@\h:\w [\j]$ "
      9  2013-06-09 10:40:12   ping google.com
     10  2013-06-09 10:40:12   echo $PS1
Bedeutung der HISTTIMEFORMAT-Variablen
%F Equivalent to %Y - %m - %d
%T Replaced by the time ( %H : %M : %S )

3. Filtern Sie Befehle im Verlauf

Wie wir sehen können, wird derselbe Befehl in der obigen Ausgabe mehrmals wiederholt. Wie filtere ich einfache oder nicht destruktive Befehle im Verlauf? Verwenden Sie den folgenden Befehl „export“, indem Sie den Befehl in HISTIGNORE=’ls -l:pwd:date:’ angeben. Dieser wird vom System nicht gespeichert und nicht im Befehlsverlauf angezeigt.

[narad@tecmint ~]$ export HISTIGNORE='ls -l:pwd:date:'

4. Ignorieren Sie doppelte Befehle im Verlauf

Mit dem folgenden Befehl können wir doppelte Befehlseinträge des Benutzers ignorieren. Wenn ein Benutzer denselben Befehl mehrmals in einer Bash-Eingabeaufforderung ausführt, wird nur ein einzelner Eintrag im Verlauf angezeigt.

[narad@tecmint ~]$ export HISTCONTROL=ignoredups

5. Deaktivieren Sie den Exportbefehl

Deaktivieren Sie den Exportbefehl im laufenden Betrieb. Führen Sie den Befehl unset export mit der Variablen nacheinander aus, unabhängig davon, welche Befehle mit dem Befehl export exportiert wurden.

[narad@tecmint ~]$ unset export HISTCONTROL

6. Exportbefehl dauerhaft speichern

Machen Sie einen Eintrag wie folgt in .bash_profile, um den export-Befehl dauerhaft zu speichern.

[narad@tecmint ~]$ vi .bash_profile

.bash_profile

Get the aliases and functions
if [ -f ~/.bashrc ]; then
        . ~/.bashrc
fi

User specific environment and startup programs

export HISTCONTROL=ignoredups

PATH=$PATH:$HOME/bin
export PATH

7. Listen Sie die von bestimmten Benutzern ausgeführten Befehle auf

So sehen Sie den Befehlsverlauf, der von einem bestimmten Benutzer ausgeführt wurde. Bash speichert den Verlauf in einer Datei „~/.bash_history“. Wir können die Datei anzeigen oder öffnen, um den Befehlsverlauf anzuzeigen.

[narad@tecmint ~]$ vi .bash_history

cd /tmp/
cd logstalgia-1.0.3/
./configure
sudo passwd root
apt-get install libsdl1.2-dev libsdl-image1.2-dev libpcre3-dev libftgl-dev libpng12-dev libjpeg62-dev make gcc
./configure
make
apt-get install libsdl1.2-dev libsdl-image1.2-dev libpcre3-dev libftgl-dev libpng12-dev libjpeg62-dev make gcc++
apt-get install libsdl1.2-dev libsdl-image1.2-dev libpcre3-dev libftgl-dev libpng12-dev libjpeg62-dev make gcc
apt-get install make
mysql -u root -p
apt-get install grsync
apt-get install unison
unison

8. Deaktivieren Sie das Speichern des Befehlsverlaufs

Einige Organisationen führen aufgrund der Sicherheitsrichtlinien der Organisation keinen Befehlsverlauf. In diesem Fall können wir die Datei .bash_profile (eine versteckte Datei) des Benutzers bearbeiten und einen Eintrag wie unten erstellen.

[narad@tecmint ~]$ vi .bash_profile

.bash_profile

Get the aliases and functions
if [ -f ~/.bashrc ]; then
        . ~/.bashrc
fi

User specific environment and startup programs

PATH=$PATH:$HOME/bin
HISTSIZE=0
export PATH
.bash_profile (END)

Speichern Sie die Datei und laden Sie die Änderungen mit dem folgenden Befehl.

[narad@tecmint ~]$ source .bash_profile

Hinweis: Wenn Sie nicht möchten, dass sich das System die von Ihnen eingegebenen Befehle merkt, führen Sie einfach den folgenden Befehl aus, wodurch die Aufzeichnung des Verlaufs im Handumdrehen deaktiviert oder gestoppt wird.

[narad@tecmint ~]$ export HISTSIZE=0

Tipps: Suchen Sie nach „HISTSIZE“ und bearbeiten Sie die Datei „/etc/profile“ mit dem Superuser. Die Änderung in der Datei wirkt sich global aus.

9. Löschen oder löschen Sie den Befehlsverlauf

Mit den Pfeiltasten nach oben und nach unten können wir zuvor verwendete Befehle sehen, die hilfreich sein oder Sie verärgern könnten. Löschen oder Löschen aller Einträge aus der Bash-Verlaufsliste mit den Optionen „-c“.

[narad@tecmint ~]$ history -c

10. Suchen Sie mit dem Grep-Befehl nach Befehlen im Verlauf

Suchen Sie nach dem Befehl „.bash_history“, indem Sie Ihre Verlaufsdatei wie unten beschrieben an „grep“ weiterleiten. Mit dem folgenden Befehl wird beispielsweise der Befehl „pwd“ in der Verlaufsliste gesucht und gefunden.

[narad@tecmint ~]$ history | grep pwd

  113  2013-06-09 10:40:12     pwd
  141  2013-06-09 10:40:12     pwd
  198  2013-06-09 15:46:23     history | grep pwd
  202  2013-06-09 15:47:39     history | grep pwd

11. Suchen Sie nach dem zuletzt ausgeführten Befehl

Suchen Sie den zuvor ausgeführten Befehl mit dem Befehl ‘Strg+r’. Sobald Sie den gesuchten Befehl gefunden haben, drücken Sie „Enter“, um ihn auszuführen, andernfalls drücken Sie „esc“, um ihn abzubrechen.

(reverse-i-search)`source ': source .bash_profile

12. Zuletzt ausgeführten Befehl abrufen

Erinnern Sie sich an einen zuvor verwendeten spezifischen Befehl. Durch die Kombination des Befehls Bang und 8 (!8) wird der Befehl Nummer 8 aufgerufen, den Sie ausgeführt haben.

[narad@tecmint ~]$ !8

13. Rufen Sie den zuletzt ausgeführten spezifischen Befehl ab

Erinnern Sie sich an den zuvor verwendeten Befehl (netstat -np | grep 22) mit „!“ und gefolgt von einigen Buchstaben dieses bestimmten Befehls.

[narad@tecmint ~]$ !net
netstat -np | grep 22
(No info could be read for "-p": geteuid()=501 but you should be root.)
tcp        0     68 192.168.50.2:22             192.168.50.1:1857           ESTABLISHED -
tcp        0      0 192.168.50.2:22             192.168.50.1:2516           ESTABLISHED -
unix  2      [ ]         DGRAM                    12284  -                   @/org/freedesktop/hal/udev_event
unix  3      [ ]         STREAM     CONNECTED     14522  -
unix  2      [ ]         DGRAM                    13622  -
unix  3      [ ]         STREAM     CONNECTED     12250  -                   @/var/run/hald/dbus-ujAjOMNa0g
unix  3      [ ]         STREAM     CONNECTED     12249  -
unix  3      [ ]         STREAM     CONNECTED     12228  -                   /var/run/dbus/system_bus_socket
unix  3      [ ]         STREAM     CONNECTED     12227  -

Wir haben versucht, die Macht des historischen Kommandos hervorzuheben. Dies ist jedoch noch nicht das Ende. Bitte teilen Sie uns Ihre Erfahrungen mit History Command über unser Kommentarfeld unten mit.