Linuxin "Historiakomennon" teho Bash Shellissä


Käytämme history-komentoa usein päivittäisissä rutiinitöissämme tarkistaaksemme komentohistorian tai saadaksemme tietoa käyttäjän suorittamista komennoista. Tässä viestissä näemme, kuinka voimme käyttää historiakomentoa tehokkaasti purkaa komennon, jonka käyttäjät suorittivat Bash-kuoressa. Tästä voi olla hyötyä auditointitarkoituksessa tai sen selvittämiseksi, mikä komento suoritetaan mihinkin päivämäärään ja aikaan.

Oletuksena päivämäärä ja aikaleima eivät näy history-komentoa suoritettaessa. Bash shell tarjoaa kuitenkin CLI-työkalut käyttäjän komentohistorian muokkaamiseen. Katsotaanpa joitain käteviä vinkkejä ja temppuja sekä history-komennon tehoa.

1. Listaa viimeiset/kaikki suoritetut komennot Linuxissa

Yksinkertaisen history-komennon suorittaminen päätteestä näyttää täydellisen luettelon viimeksi suoritetuista komennoista rivinumeroineen.

[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. Listaa kaikki komennot päivämäärän ja aikaleiman kanssa

Kuinka löytää päivämäärä ja aikaleima komennosta? 'Export'-komento ja muuttuja näyttää historiakomennon vastaavalla aikaleimalla, kun komento suoritettiin.

[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-muuttujien merkitys
%F Equivalent to %Y - %m - %d
%T Replaced by the time ( %H : %M : %S )

3. Suodata komennot historiassa

Kuten näemme, sama komento toistetaan useita kertoja yllä olevassa lähdössä. Kuinka suodattaa yksinkertaisia tai tuhoamattomia komentoja historiassa?. Käytä seuraavaa 'export'-komentoa määrittämällä komento kohdassa HISTIGNORE='ls -l:pwd:date:'. Järjestelmä ei tallenna, eikä sitä näytetä historiakomennossa.

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

4. Ohita historian päällekkäiset komennot

Alla oleva komento auttaa meitä ohittamaan käyttäjän tekemät päällekkäiset komentomerkinnät. Vain yksi merkintä näytetään historiassa, jos käyttäjä suorittaa saman komennon useita kertoja Bash-kehotteessa.

[narad@tecmint ~]$ export HISTCONTROL=ignoredups

5. Poista vientikomento

Poista vientikomento lennossa. Suorita unset export -komento muuttujalla yksitellen riippumatta siitä, mitä komennot on viety export-komennolla.

[narad@tecmint ~]$ unset export HISTCONTROL

6. Tallenna vientikomento pysyvästi

Tallenna export pysyvästi tekemällä merkintä kohtaan .bash_profile.

[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. Listaa tietyn käyttäjän suorittamat komennot

Kuinka nähdä tietyn käyttäjän suorittama komentohistoria. Bash pitää kirjaa historiasta '~/.bash_history'-tiedostossa. Voimme tarkastella tai avata tiedoston nähdäksemme komentohistorian.

[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. Poista komentohistorian tallentaminen käytöstä

Jotkut organisaatiot eivät säilytä komentohistoriaa organisaation turvallisuuspolitiikan vuoksi. Tässä tapauksessa voimme muokata käyttäjän .bash_profile-tiedostoa (se on piilotettu tiedosto) ja tehdä merkinnän alla kuvatulla tavalla.

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

Tallenna tiedosto ja lataa muutokset alla olevalla komennolla.

[narad@tecmint ~]$ source .bash_profile

Huomaa: Jos et halua järjestelmän muistavan kirjoittamiasi komentoja, suorita alla oleva komento, joka poistaa käytöstä tai lopettaa historian tallentamisen lennossa.

[narad@tecmint ~]$ export HISTSIZE=0

Vinkkejä: Hae HISTSIZE ja muokkaa tiedostoa /etc/profile superkäyttäjän avulla. Tiedoston muutos tulee voimaan maailmanlaajuisesti.

9. Poista tai tyhjennä komentohistoria

ylös- ja alas-nuolinäppäimillä voimme nähdä aiemmin käytetyt komennot, jotka voivat olla hyödyllisiä tai ärsyttää sinua. Kaikkien merkintöjen poistaminen tai tyhjentäminen bash-historialuettelosta -c-vaihtoehdoilla.

[narad@tecmint ~]$ history -c

10. Hae komentoja historiasta Grep-komennolla

Hae komentoa ".bash_history" kautta liittämällä historiatiedostosi "grep" -kenttään alla kuvatulla tavalla. Esimerkiksi alla oleva komento etsii ja löytää komennon pwd historialuettelosta.

[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. Hae Lastly Executed Command

Hae aiemmin suoritettua komentoa Ctrl+r-komennolla. Kun olet löytänyt etsimäsi komennon, suorita sama painamalla Enter-näppäintä. Peruuta se painamalla esc-näppäintä.

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

12. Hae viimeksi suoritettu komento

Hae aiemmin käytetty tietty komento. Komennon Bang ja 8 (!8) yhdistelmä palauttaa suorittamasi komennon numeron 8.

[narad@tecmint ~]$ !8

13. Hae viimeksi suoritettu erityinen komento

Hae aiemmin käytetty komento (netstat -np | grep 22) komennolla ! ja sen jälkeen joitakin kyseisen komennon kirjaimia.

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

Olemme yrittäneet korostaa historian komennon voimaa. Tämä ei kuitenkaan ole loppu. Jaa kokemuksesi historiakomennosta kanssamme alla olevan kommenttikentän kautta.