Ricerca nel sito web

La potenza del "Comando Storia" di Linux in Bash Shell


Usiamo frequentemente il comando history nelle nostre attività quotidiane per controllare la cronologia dei comandi o per ottenere informazioni sui comandi eseguiti dall'utente. In questo post vedremo come utilizzare efficacemente il comando History per estrarre il comando eseguito dagli utenti nella shell Bash. Ciò può essere utile a scopo di controllo o per scoprire quale comando viene eseguito in quale data e ora.

Per impostazione predefinita, la data e il timestamp non verranno visualizzati durante l'esecuzione del comando history. Tuttavia, la shell bash fornisce strumenti CLI per modificare la cronologia dei comandi dell'utente. Vediamo alcuni suggerimenti e trucchi utili e la potenza del comando storia.

1. Elenca gli ultimi/tutti i comandi eseguiti in Linux

L'esecuzione del semplice comando cronologia dal terminale ti mostrerà un elenco completo degli ultimi comandi eseguiti con i numeri di riga.

[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. Elenca tutti i comandi con data e timestamp

Come trovare la data e il timestamp rispetto al comando? Con il comando 'esporta' con variabile verrà visualizzata la cronologia del comando con il timestamp corrispondente quando il comando è stato eseguito.

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

3. Filtra i comandi nella cronologia

Come possiamo vedere lo stesso comando viene ripetuto più volte nell'output sopra. Come filtrare i comandi semplici o non distruttivi nella cronologia?. Utilizza il seguente comando "esporta" specificando il comando in HISTIGNORE='ls -l:pwd:date:' non verrà salvato dal sistema e non verrà mostrato nel comando della cronologia.

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

4. Ignora i comandi duplicati nella cronologia

Con il comando seguente ci aiuterà a ignorare i comandi duplicati inseriti dall'utente. Nella cronologia verrà visualizzata solo una singola voce, se un utente esegue lo stesso comando più volte in un prompt di Bash.

[narad@tecmint ~]$ export HISTCONTROL=ignoredups

5. Annulla l'impostazione del comando di esportazione

Disattiva il comando di esportazione al volo. Esegui il comando unset export con la variabile uno per uno qualunque comando sia stato esportato dal comando export.

[narad@tecmint ~]$ unset export HISTCONTROL

6. Salva il comando di esportazione in modo permanente

Inserisci una voce come segue in .bash_profile per salvare il comando export in modo permanente.

[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. Elenca i comandi eseguiti dall'utente specifico

Come vedere la cronologia dei comandi eseguiti da un utente specifico. Bash conserva i record della cronologia in un file '~/.bash_history'. Possiamo visualizzare o aprire il file per vedere la cronologia dei comandi.

[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. Disabilita la memorizzazione della cronologia dei comandi

Alcune organizzazioni non conservano la cronologia dei comandi a causa della politica di sicurezza dell'organizzazione. In questo caso, possiamo modificare il file .bash_profile (è un file nascosto) dell'utente e inserire una voce come di seguito.

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

Salva il file e carica le modifiche con il comando seguente.

[narad@tecmint ~]$ source .bash_profile

Nota: se non vuoi che il sistema ricordi i comandi che hai digitato, esegui semplicemente il comando seguente che disabiliterà o interromperà al volo la registrazione della cronologia.

[narad@tecmint ~]$ export HISTSIZE=0

Suggerimenti: cerca "HISTSIZE" e modifica il file "/etc/profile" con il superutente. La modifica nel file avrà effetto a livello globale.

9. Elimina o cancella la cronologia dei comandi

Con le frecce su e giù, possiamo vedere i comandi utilizzati in precedenza che potrebbero essere utili o potrebbero farti arrabbiare. Eliminazione o cancellazione di tutte le voci dall'elenco della cronologia di bash con le opzioni "-c".

[narad@tecmint ~]$ history -c

10. Cerca comandi nella cronologia utilizzando il comando Grep

Cerca il comando tramite ".bash_history" inserendo il file della cronologia in "grep" come di seguito. Ad esempio, il comando seguente cercherà e troverà il comando "pwd" dall'elenco della cronologia.

[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. Cerca l'ultimo comando eseguito

Cerca il comando eseguito in precedenza con il comando 'Ctrl+r'. Una volta trovato il comando che stai cercando, premi "Invio" per eseguire lo stesso, altrimenti premi "esc" per annullarlo.

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

12. Richiama l'ultimo comando eseguito

Richiama un comando specifico utilizzato in precedenza. La combinazione dei comandi Bang e 8 (!8) richiamerà il comando numero 8 che hai eseguito.

[narad@tecmint ~]$ !8

13. Richiama il comando specifico eseguito per ultimo

Richiama il comando utilizzato in precedenza (netstat -np | grep 22) con "!" seguito da alcune lettere di quel particolare comando.

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

Abbiamo cercato di evidenziare il potere del comando della storia. Tuttavia, questa non è la fine. Condividi con noi la tua esperienza con il comando della storia attraverso la nostra casella di commento qui sotto.