Snaga Linux "History Command" u Bash Shellu


Često koristimo naredbu history u našim svakodnevnim rutinskim poslovima da provjerimo povijest naredbi ili da dobijemo informacije o naredbama koje je korisnik izvršio. U ovom ćemo postu vidjeti kako možemo učinkovito koristiti naredbu history za izdvajanje naredbe koju su izvršili korisnici u Bash ljusci. 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 neće se vidjeti tijekom izvršavanja naredbe povijest. Međutim, bash shell pruža CLI alate za uređivanje korisničke povijesti naredbi. Pogledajmo neke korisne savjete i trikove i snagu naredbe povijest.

1. Popis zadnjih/svih izvršenih naredbi u Linuxu

Izvršavanje jednostavne naredbe history s terminala pokazat će vam potpuni popis zadnjih izvršenih naredbi s brojevima redaka.

[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. Popis svih naredbi s datumom i vremenskom oznakom

Kako pronaći datum i vremensku oznaku u odnosu na naredbu? S 'export' naredbom s varijablom prikazat će se naredba povijesti s 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. Filtrirajte naredbe u povijesti

Kao što vidimo, ista naredba se ponavlja nekoliko puta u gornjem izlazu. Kako filtrirati jednostavne ili nedestruktivne naredbe u povijesti?. Upotrijebite sljedeću naredbu ‘izvoz’ navođenjem naredbe u HISTIGNORE=’ls -l:pwd:date:’ sustav neće spremiti niti će biti prikazana u naredbi povijesti.

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

4. Ignorirajte duple naredbe u povijesti

Naredba u nastavku pomoći će nam da zanemarimo duple naredbe koje unose korisnici. U povijesti će se prikazati samo jedan unos ako korisnik izvrši istu naredbu više puta u Bash odzivniku.

[narad@tecmint ~]$ export HISTCONTROL=ignoredups

5. Poništite naredbu izvoza

U hodu poništi naredbu izvoza. Izvršite naredbu unset export s varijablom jednu po jednu bez obzira na naredbe koje su izvezene naredbom export.

[narad@tecmint ~]$ unset export HISTCONTROL

6. Trajno spremite izvoznu naredbu

Unesite sljedeći unos u .bash_profile kako biste trajno spremili naredbu export.

[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 određene korisnikove izvršene naredbe

Kako vidjeti povijest naredbi koje je izvršio određeni korisnik. Bash čuva zapise povijesti u datoteci ‘~/.bash_history’. Možemo pogledati ili otvoriti datoteku da bismo vidjeli povijest naredbi.

[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 povijest naredbi zbog sigurnosne politike organizacije. U ovom slučaju, možemo urediti datoteku .bash_profile (to je skrivena datoteka) korisnika i izvršiti unos kao što je dolje.

[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)

Spremite datoteku i učitajte promjene naredbom u nastavku.

[narad@tecmint ~]$ source .bash_profile

Napomena: Ako ne želite da sustav pamti naredbe koje ste upisali, jednostavno izvršite donju naredbu koja će onemogućiti ili zaustaviti snimanje povijesti u hodu.

[narad@tecmint ~]$ export HISTSIZE=0

Savjeti: Pretražite 'HISTSIZE' i uredite u '/etc/profile' datoteci sa superkorisnikom. Promjena datoteke djelovat će globalno.

9. Brisanje ili brisanje povijesti naredbi

Pomoću strelica gore i dolje možemo vidjeti prethodno korištenu naredbu koja može biti od pomoći ili vas može razbjesniti. Brisanje ili brisanje svih unosa s bash popisa povijesti s '-c' opcijama.

[narad@tecmint ~]$ history -c

10. Pretraživanje naredbi u povijesti pomoću naredbe Grep

Naredba za pretraživanje kroz ‘.bash_history’ slanjem vaše datoteke povijesti u ‘grep’ kao u nastavku. Na primjer, donja naredba pretražit će i pronaći 'pwd' naredbu s popisa povijesti.

[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. Traženje zadnje izvršene naredbe

Pretražujte prethodno izvršenu naredbu pomoću naredbe ‘Ctrl+r’. Nakon što pronađete naredbu koju tražite, pritisnite ‘Enter’ da izvršite istu ili pritisnite ‘esc’ da je poništite.

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

12. Opoziv zadnje izvršene naredbe

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. Prisjetite se posljednje izvršene određene naredbe

Prisjetite se prethodno korištene naredbe (netstat -np | grep 22) s '!' i nakon nekoliko 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 istaknuti moć zapovijedanja poviješću. Međutim, ovo nije kraj. Podijelite svoje iskustvo s naredbom povijesti s nama putem našeg okvira za komentare ispod.