El poder de Linux History Command a Bash Shell


Utilitzem l'ordre history amb freqüència a les nostres tasques rutinàries diàries per comprovar l'historial d'ordres o per obtenir informació sobre l'ordre executada per l'usuari. En aquesta publicació, veurem com podem utilitzar l'ordre de l'historial de manera eficaç per extreure l'ordre que van executar els usuaris a l'intèrpret d'ordres Bash. Això pot ser útil amb finalitats d'auditoria o per esbrinar quina ordre s'executa en quina data i hora.

Per defecte, la data i la marca de temps no es veuran mentre s'executa l'ordre de l'historial. Tanmateix, bash shell proporciona eines CLI per editar l'historial d'ordres de l'usuari. Vegem alguns consells i trucs útils i el poder de l'ordre history.

1. Llista les darreres/totes les ordres executades a Linux

Si executeu una ordre senzilla historial des del terminal us mostrarà una llista completa de les darreres ordres executades amb números de línia.

[[email  ~]$ history

    1  PS1='\e[1;35m[\[email \h \w]$ \e[m '
    2  PS1="\e[0;32m[\[email \h \W]$ \e[m "
    3  PS1="\[email \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. Llista totes les ordres amb data i marca de temps

Com trobar data i marca de temps contra l'ordre? Amb l'ordre 'exportar' amb variable, es mostrarà l'ordre de l'historial amb la marca de temps corresponent quan s'ha executat l'ordre.

[[email  ~]$ 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[\[email \h \w]$ \e[m '
      7  2013-06-09 10:40:12   PS1="\e[0;32m[\[email \h \W]$ \e[m "
      8  2013-06-09 10:40:12   PS1="\[email \h:\w [\j]$ "
      9  2013-06-09 10:40:12   ping google.com
     10  2013-06-09 10:40:12   echo $PS1
%F Equivalent to %Y - %m - %d
%T Replaced by the time ( %H : %M : %S )

3. Filtre les ordres a l'historial

Com podem veure, la mateixa ordre es repeteix un nombre de vegades a la sortida anterior. Com filtrar ordres simples o no destructives de la història?. Utilitzeu l'ordre exportar següent especificant l'ordre a HISTIGNORE='ls -l:pwd:date:' no es desarà pel sistema i no es mostrarà a l'ordre de l'historial.

[[email  ~]$ export HISTIGNORE='ls -l:pwd:date:'

4. Ignora les ordres duplicades a l'historial

Amb l'ordre següent ens ajudarà a ignorar l'entrada d'ordres duplicades feta per l'usuari. Només es mostrarà una entrada única a l'historial, si un usuari executa la mateixa ordre diverses vegades en una sol·licitud de Bash.

[[email  ~]$ export HISTCONTROL=ignoredups

5. Desactiva l'ordre d'exportació

Desactiva l'ordre d'exportació sobre la marxa. Executeu l'ordre desactiva l'exportació amb la variable una per una qualsevol ordre que s'hagi exportat mitjançant l'ordre exportar.

[[email  ~]$ unset export HISTCONTROL

6. Desa l'ordre d'exportació permanentment

Feu una entrada a .bash_profile de la manera següent per desar l'ordre d'exportació permanentment.

[[email  ~]$ 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. Llista les ordres executades per un usuari específic

Com veure l'historial de comandes executades per un usuari específic. Bash guarda registres de l'historial en un fitxer ‘~/.bash_history’. Podem veure o obrir un fitxer per veure l'historial d'ordres.

[[email  ~]$ 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. Desactiva l'emmagatzematge de l'historial d'ordres

Algunes organitzacions no conserven l'historial d'ordres a causa de la política de seguretat de l'organització. En aquest cas, podem editar el fitxer .bash_profile (és un fitxer ocult) de l'usuari i fer una entrada com a continuació.

[[email  ~]$ 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)

Deseu el fitxer i carregueu els canvis amb l'ordre següent.

[[email  ~]$ source .bash_profile

Nota: si no voleu que el sistema recordi les ordres que heu escrit, només heu d'executar l'ordre següent que desactivarà o aturarà l'enregistrament de l'historial sobre la marxa.

[[email  ~]$ export HISTSIZE=0

Consells: cerqueu HISTSIZE i editeu-lo al fitxer /etc/profile amb el superusuari. El canvi de fitxer s'afectarà globalment.

9. Suprimeix o esborra l'historial d'ordres

Amb les fletxes amunt i avall, podem veure l'ordre utilitzat anteriorment que pot ser útil o que us pot enfadar. Esborrar o esborrar totes les entrades de la llista d'historial de bash amb les opcions -c.

[[email  ~]$ history -c

10. Cerca ordres a l'historial mitjançant l'ordre Grep

Cerqueu l'ordre a través de .bash_history introduint el vostre fitxer d'historial a grep com es mostra a continuació. Per exemple, l'ordre següent cercarà i trobarà l'ordre pwd a la llista de l'historial.

[[email  ~]$ 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. Cerca la darrera ordre executada

Cerca l'ordre executada anteriorment amb l'ordre ‘Ctrl+r’. Un cop hàgiu trobat l'ordre que esteu buscant, premeu Enter per executar el mateix, sinó premeu esc per cancel·lar-lo.

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

12. Recordeu l'última ordre executada

Recordeu una ordre específica utilitzada anteriorment. La combinació de l'ordre Bang i 8 (!8) recordarà l'ordre número 8 que heu executat.

[[email  ~]$ !8

13. Recordeu l'ordre específic executat per últim

Recordeu l'ordre utilitzat anteriorment (netstat -np | grep 22) amb '!' i seguit d'algunes lletres d'aquesta ordre en particular.

[[email  ~]$ !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  -

Hem intentat destacar el poder del comandament de la història. Tanmateix, això no és el final. Si us plau, compartiu la vostra experiència de comandament de l'historial amb nosaltres a través del nostre quadre de comentaris a continuació.