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.