„Linux“ „Istorijos komandos“ galia „Bash Shell“.


Kasdieniuose darbuose dažnai naudojame komandą history, kad patikrintume komandų istoriją arba gautume informaciją apie vartotojo vykdomas komandas. Šiame įraše pamatysime, kaip galime efektyviai naudoti istorijos komandą, norėdami išgauti komandą, kurią naudotojai įvykdė „Bash“ apvalkale. Tai gali būti naudinga atliekant auditą arba norint sužinoti, kokia komanda data ir laiku vykdoma.

Pagal numatytuosius nustatymus data ir laiko žyma nebus matomi vykdant komandą istorija. Tačiau „bash shell“ suteikia CLI įrankius, skirtus redaguoti vartotojo komandų istoriją. Pažiūrėkime keletą naudingų patarimų ir gudrybių bei istorijos komandos galios.

1. Pateikite paskutines/visas vykdytas komandas Linux sistemoje

Vykdydami paprastą komandą history iš terminalo, pamatysite visą paskutinių vykdytų komandų sąrašą su eilučių numeriais.

[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. Išvardykite visas komandas su data ir laiko žyma

Kaip pagal komandą rasti datą ir laiko žymą? Naudojant komandą „Export“ su kintamuoju, bus rodoma istorijos komanda su atitinkama laiko žyma, kai komanda buvo vykdoma.

[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
HISTTIMEFORMAT kintamųjų reikšmė
%F Equivalent to %Y - %m - %d
%T Replaced by the time ( %H : %M : %S )

3. Filtruokite komandas istorijoje

Kaip matome, aukščiau esančiame išvestyje ta pati komanda kartojama kelis kartus. Kaip filtruoti paprastas ar nedestrukcines komandas istorijoje? Naudokite šią komandą eksportuoti, nurodydami komandą HISTIGNORE='ls -l:pwd:date:', sistema neišsaugos ir nebus rodoma istorijos komandoje.

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

4. Ignoruoti pasikartojančias komandas istorijoje

Žemiau pateikta komanda padės mums nepaisyti pasikartojančių vartotojo įvestų komandų. Istorijoje bus rodomas tik vienas įrašas, jei vartotojas kelis kartus įvykdys tą pačią komandą „Bash“ eilutėje.

[narad@tecmint ~]$ export HISTCONTROL=ignoredups

5. Atšaukti eksportavimo komandą

Atšaukti eksportavimo komandą. Vykdykite komandą nustatyti eksportą su kintamuoju po vieną, nesvarbu, kokios komandos buvo eksportuotos naudojant komandą eksportuoti.

[narad@tecmint ~]$ unset export HISTCONTROL

6. Išsaugokite eksportavimo komandą visam laikui

Norėdami visam laikui išsaugoti komandą eksportuoti, .bash_profile įveskite taip.

[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. Išvardykite konkrečias vartotojo vykdomas komandas

Kaip pamatyti konkretaus vartotojo vykdomą komandų istoriją. „Bash“ saugo istorijos įrašus „~/.bash_history“ faile. Galime peržiūrėti arba atidaryti failą, kad pamatytume komandų istoriją.

[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. Išjunkite komandų istorijos saugojimą

Kai kurios organizacijos nesaugo komandų istorijos dėl organizacijos saugumo politikos. Tokiu atveju galime redaguoti naudotojo .bash_profile failą (tai yra paslėptas failas) ir padaryti įrašą, kaip nurodyta toliau.

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

Išsaugokite failą ir įkelkite pakeitimus naudodami toliau pateiktą komandą.

[narad@tecmint ~]$ source .bash_profile

Pastaba: jei nenorite, kad sistema prisimintų jūsų įvestas komandas, tiesiog vykdykite toliau pateiktą komandą, kuri išjungs arba sustabdys istorijos įrašymą.

[narad@tecmint ~]$ export HISTSIZE=0

Patarimai: ieškokite „HISTSIZE“ ir redaguokite faile „/etc/profile“ naudodami supervartotoją. Failo pakeitimas galios visame pasaulyje.

9. Ištrinkite arba išvalykite komandų istoriją

Su rodyklėmis aukštyn ir žemyn matome anksčiau naudotą komandą, kuri gali būti naudinga arba jus erzinti. Visų „bash“ istorijos sąrašo įrašų ištrynimas arba išvalymas naudojant „-c“ parinktis.

[narad@tecmint ~]$ history -c

10. Ieškokite komandų istorijoje naudodami komandą Grep

Ieškokite komandos per „.bash_history“, įvesdami istorijos failą į „grep“, kaip nurodyta toliau. Pavyzdžiui, toliau pateikta komanda ieškos ir ras komandą „pwd“ iš istorijos sąrašo.

[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. Ieškokite paskutinės vykdytos komandos

Ieškokite anksčiau vykdytos komandos naudodami komandą „Ctrl+r“. Suradę ieškomą komandą, paspauskite „Enter“, kad vykdytumėte tą patį, dar paspauskite „esc“, kad ją atšauktumėte.

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

12. Atšaukti paskutinę vykdytą komandą

Prisiminkite anksčiau naudotą konkrečią komandą. Komandų Bang ir 8 (!8) derinys atšauks 8 komandą, kurią įvykdėte.

[narad@tecmint ~]$ !8

13. Atšaukti paskutinį kartą įvykdytą specifinę komandą

Prisiminkite anksčiau naudotą komandą (netstat -np | grep 22) naudodami „!“, o po jos – kai kurias tos komandos raides.

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

Mes bandėme pabrėžti istorijos komandos galią. Tačiau tai dar ne pabaiga. Pasidalykite savo patirtimi, susijusia su istorijos komanda, naudodami toliau pateiktą komentarų laukelį.