De kracht van Linux "History Command" in Bash Shell
We gebruiken de geschiedenis-opdracht regelmatig in onze dagelijkse routinetaken om de geschiedenis van de opdrachten te controleren of om informatie te krijgen over de opdrachten die door de gebruiker zijn uitgevoerd. In dit bericht zullen we zien hoe we de geschiedenisopdracht effectief kunnen gebruiken om de opdracht te extraheren die door gebruikers in de Bash-shell is uitgevoerd. Dit kan handig zijn voor auditdoeleinden of om erachter te komen welke opdracht op welke datum en tijd wordt uitgevoerd.
Standaard zijn datum en tijdstempel niet zichtbaar tijdens het uitvoeren van de opdracht geschiedenis. Bash shell biedt echter CLI tools voor het bewerken van de opdrachtgeschiedenis van de gebruiker. Laten we eens kijken naar enkele handige tips en trucs en de kracht van geschiedenis commando's.
1. Maak een lijst van de laatste/alle uitgevoerde opdrachten in Linux
Als u een eenvoudig geschiedenis-commando uitvoert vanaf de terminal, krijgt u een volledige lijst te zien van de laatst uitgevoerde commando's met regelnummers.
[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. Maak een lijst van alle opdrachten met datum en tijdstempel
Hoe vind je datum en tijdstempel bij een opdracht? Met 'export' zal het commando met variabele de geschiedenisopdracht weergeven met de bijbehorende tijdstempel toen de opdracht werd uitgevoerd.
[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
Betekenis van HISTTIMEFORMAT-variabelen
%F Equivalent to %Y - %m - %d
%T Replaced by the time ( %H : %M : %S )
3. Filteropdrachten in de geschiedenis
Zoals we kunnen zien, wordt hetzelfde commando een aantal keren herhaald in bovenstaande uitvoer. Hoe eenvoudige of niet-destructieve commando's in de geschiedenis te filteren? Gebruik het volgende ‘export’ commando door het commando op te geven in HISTIGNORE=’ls -l:pwd:date:’ wordt niet opgeslagen door het systeem en wordt niet getoond in het geschiedeniscommando.
[narad@tecmint ~]$ export HISTIGNORE='ls -l:pwd:date:'
4. Negeer dubbele opdrachten in de geschiedenis
Met het onderstaande commando kunnen we dubbele commando's die door de gebruiker zijn ingevoerd, negeren. Er wordt slechts één item in de geschiedenis weergegeven als een gebruiker dezelfde opdracht meerdere keren uitvoert in een Bash Prompt.
[narad@tecmint ~]$ export HISTCONTROL=ignoredups
5. Schakel de exportopdracht uit
Schakel de exportopdracht direct uit. Voer de opdracht unset export één voor één uit met de variabele, ongeacht welke opdrachten zijn geëxporteerd met de opdracht export.
[narad@tecmint ~]$ unset export HISTCONTROL
6. Bewaar de exportopdracht permanent
Voer als volgt iets in .bash_profile in om de opdracht export permanent op te slaan.
[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. Maak een lijst van door de gebruiker uitgevoerde opdrachten
Hoe u de opdrachtgeschiedenis kunt zien die door een specifieke gebruiker is uitgevoerd. Bash houdt de geschiedenis bij in een '~/.bash_history' bestand. We kunnen het bestand bekijken of openen om de opdrachtgeschiedenis te bekijken.
[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. Schakel het opslaan van de geschiedenis van opdrachten uit
Sommige organisaties houden de geschiedenis van opdrachten niet bij vanwege het beveiligingsbeleid van de organisatie. In dit geval kunnen we het .bash_profile-bestand (het is een verborgen bestand) van de gebruiker bewerken en een invoer maken zoals hieronder.
[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)
Sla het bestand op en laad de wijzigingen met het onderstaande commando.
[narad@tecmint ~]$ source .bash_profile
Opmerking: als u niet wilt dat het systeem de opdrachten onthoudt die u hebt getypt, voert u eenvoudigweg onderstaande opdracht uit, waardoor het opnemen van de geschiedenis direct wordt uitgeschakeld of gestopt.
[narad@tecmint ~]$ export HISTSIZE=0
Tips: Zoek ‘HISTSIZE’ en bewerk het bestand ‘/etc/profile’ met superuser. De wijziging in het bestand zal wereldwijd van kracht zijn.
9. Geschiedenis van opdrachten verwijderen of wissen
Met de pijlen omhoog en omlaag kunnen we eerder gebruikte opdrachten zien die nuttig kunnen zijn of u kunnen irriteren. Alle vermeldingen uit de bash-geschiedenislijst verwijderen of wissen met ‘-c’ opties.
[narad@tecmint ~]$ history -c
10. Zoekopdrachten in de geschiedenis met behulp van de Grep-opdracht
Zoek de opdracht via ‘.bash_history’ door uw geschiedenisbestand in ‘grep’ te plaatsen, zoals hieronder. Met het onderstaande commando wordt bijvoorbeeld het commando ‘pwd’ gezocht en gevonden in de geschiedenislijst.
[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. Zoek naar het laatst uitgevoerde commando
Zoek eerder uitgevoerde opdrachten met de opdracht ‘Ctrl+r’. Zodra je de opdracht hebt gevonden die je zoekt, druk je op ‘Enter’ om hetzelfde uit te voeren. Druk anders op ‘esc’ om het te annuleren.
(reverse-i-search)`source ': source .bash_profile
12. Roep het laatst uitgevoerde commando op
Roep een eerder gebruikt specifiek commando op. De combinatie van Bang en 8 (!8) commando zal het nummer 8 commando oproepen dat je hebt uitgevoerd.
[narad@tecmint ~]$ !8
13. Roep het laatst uitgevoerde specifieke commando op
Roep het eerder gebruikte commando op (netstat -np | grep 22) met ‘!‘ en gevolgd door enkele letters van dat specifieke commando.
[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 -
We hebben geprobeerd de macht van het geschiedeniscommando te benadrukken. Dit is echter nog niet het einde. Deel uw ervaring met het geschiedeniscommando met ons via ons opmerkingenveld hieronder.