Snaga Linux "History Command" u Bash Shell-u
Često koristimo naredbu history u našim svakodnevnim rutinskim poslovima da provjerimo historiju komandi ili da dobijemo informacije o komandi koju je izvršio korisnik. U ovom postu ćemo vidjeti kako možemo efikasno koristiti naredbu historije da izdvojimo komandu koju su izvršili korisnici u Bash shell-u. Ovo može biti korisno u svrhu revizije ili da saznate koja se naredba izvršava u koji datum i vrijeme.
Prema zadanim postavkama datum i vremenska oznaka se neće vidjeti dok se izvršava naredba history. Međutim, bash shell pruža CLI alate za uređivanje istorije komandi korisnika. Pogledajmo nekoliko korisnih savjeta i trikova i moć naredbe historija.
1. Navedite posljednje/sve izvršene naredbe u Linuxu
Izvršavanje jednostavne naredbe history sa terminala će vam pokazati kompletnu listu posljednjih izvršenih naredbi s brojevima linija.
[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. Navedite sve naredbe s datumom i vremenskom oznakom
Kako pronaći datum i vremensku oznaku prema komandi? Sa ‘export’ komanda sa varijablom će prikazati naredbu historije sa odgovarajućom vremenskom oznakom kada je naredba izvršena.
[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
Značenje varijabli HISTTIMEFORMAT
%F Equivalent to %Y - %m - %d
%T Replaced by the time ( %H : %M : %S )
3. Filtriraj komande u istoriji
Kao što vidimo, ista komanda se ponavlja više puta u gornjem izlazu. Kako filtrirati jednostavne ili nedestruktivne komande u istoriji?. Koristite sljedeću naredbu „izvoz“ tako što ćete navesti komandu u HISTIGNORE=’ls -l:pwd:date:’ neće biti sačuvan od strane sistema i neće biti prikazan u naredbi historije.
[narad@tecmint ~]$ export HISTIGNORE='ls -l:pwd:date:'
4. Zanemari duple komande u istoriji
Naredba u nastavku će nam pomoći da zanemarimo duple komande koje je napravio korisnik. Samo jedan unos će biti prikazan u istoriji, ako korisnik izvrši istu komandu više puta u Bash promptu.
[narad@tecmint ~]$ export HISTCONTROL=ignoredups
5. Poništi naredbu za izvoz
Poništite naredbu za izvoz u hodu. Izvršite naredbu unset export s promjenljivom jednu po jednu sve naredbe koje su izvezene naredbom export.
[narad@tecmint ~]$ unset export HISTCONTROL
6. Trajno sačuvajte naredbu za izvoz
Napravite unos na sljedeći način u .bash_profile da biste trajno sačuvali naredbu izvoz.
[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. Navedite naredbe koje izvršava određeni korisnik
Kako vidjeti historiju komandi koju je izvršio određeni korisnik. Bash čuva zapise istorije u datoteci ‘~/.bash_history’. Možemo pogledati ili otvoriti fajl da vidimo istoriju komandi.
[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. Onemogućite pohranjivanje povijesti naredbi
Neke organizacije ne čuvaju istoriju komandi zbog bezbednosne politike organizacije. U ovom slučaju, možemo urediti datoteku .bash_profile (To je skrivena datoteka) korisnika i unijeti kao ispod.
[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)
Sačuvajte datoteku i učitajte promjene pomoću donje naredbe.
[narad@tecmint ~]$ source .bash_profile
Napomena: Ako ne želite da sistem zapamti komande koje ste upisali, jednostavno izvršite naredbu ispod koja će onemogućiti ili zaustaviti snimanje historije u hodu.
[narad@tecmint ~]$ export HISTSIZE=0
Savjeti: Pretražite „HISTSIZE“ i uredite u datoteci „/etc/profile“ sa superkorisnikom. Promjena u datoteci će uticati globalno.
9. Izbrišite ili obrišite istoriju naredbi
Sa strelicama gore i dolje, možemo vidjeti prethodno korištenu komandu koja može biti od pomoći ili vas može razljutiti. Brisanje ili brisanje svih unosa sa liste bash istorije sa opcijama „-c“.
[narad@tecmint ~]$ history -c
10. Pretražite komande u istoriji koristeći naredbu Grep
Pretražite komandu kroz '.bash_history' tako što ćete svoj historijski fajl prenijeti u 'grep' kao ispod. Na primjer, naredba ispod će pretražiti i pronaći naredbu „pwd“ na listi historije.
[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. Search Last Executed Command
Prethodno izvršenu komandu pretražite komandom ‘Ctrl+r’. Kada pronađete naredbu koju tražite, pritisnite 'Enter' da izvršite istu, a zatim pritisnite 'esc' da je otkažete.
(reverse-i-search)`source ': source .bash_profile
12. Pozovite posljednju izvršenu naredbu
Prisjetite se prethodno korištene određene naredbe. Kombinacija naredbe Bang i 8 (!8) će pozvati naredbu broj 8 koju ste izvršili.
[narad@tecmint ~]$ !8
13. Pozovite posljednje izvršenu određenu naredbu
Prisjetite se prethodno korištene komande (netstat -np | grep 22) sa '!' i nakon koje slijede neka slova te određene naredbe.
[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 -
Pokušali smo da istaknemo moć komande istorije. Međutim, ovo nije kraj. Molimo vas da podijelite svoje iskustvo sa komandom historije s nama putem našeg okvira za komentare ispod.