LINUX « E-Pillole
Cronologia comandi bash
Ieri sera, mentre giocherellavo con Ubuntu sul portatile, mi serviva di recuperare alcuni parametri passati ad un ./configure diverso tempo fà. Senza fortuna, ho cercato subito nella cronologia comandi di bash, ma evidentemente il comando che andavo cercando era stato digitato troppo tempo fà ed era già uscito dalla cronologia :(
Se utilizzate la shell abbastanza di frequente, sarete d'accordo con me nell'affermare che la cronologia dei comandi bash è una delle "features" più utili della nostra shell preferita, e vale la pena quindi spendere qualche parola per capirne il funzionamento e per riuscire ad utilizzarla in modo profiquo.
Essendo la bash, la shell di default di quasi la totalità delle distribuzioni GNU/Linux e non solo (anche Mac utilizza la bash), in generale, le indicazioni che verranno date si adattano tranquillamente alla maggior parte dei sistemi UNIX...
Senza volere scendere troppo nei particolari e nelle definizioni teoriche, per le quali rimando alla documentazione ufficiale e alle man pages, vediamo in sintesi il "funzionamento" della cronologia dei comandi di bash e come utilizzarla.
Fondamentalmente, di default, tutto quello che viene digitato nella shell viene loggato dapprima nella propria sessione di bash, e successivamente, all'uscita, tutto quello che è stato loggato durante la sessione viene scritto nel file ~/.bash_history situato nella /home dell'utente che ha utilizzato la shell. In questo modo, ogni utente, durante la propria sessione può tener traccia anche degli ultimi comandi digitati, per poi ritrovarli alla sessione di bash successiva.
Come sempre accade nei sitemi UNIX, anche per la cronologia dei comandi bash, tutte le impostazioni di default possono essere modificate a proprio piacimento intervenendo su alcune variabili d'ambiente ed esportandole nel file ~/.bashrc, situato sempre nella /home di ogni utente che ha accesso alla shell.
Alcune delle variabili più utili sono:
- HISTFILE: il nome del file in cui si vuole loggare la cronologia dei comandi. Come detto, di default è il file ~/.bash_history
- HISTCONTROL: molto utile e già presente di default con il valore ignoredups che consente di evitare di loggare due comandi identici e digitatati in successione;
- HISTFILESIZE: numero massimo di comandi (uno per riga), salvati nel file della cronologia di bash all'uscita dalla propria sessione. Il valore di default è 500;
- HISTSIZE: numero massimo di comandi loggati durante la propria sessione bash. Anche per questa variabile, il valore di default è 500;
Detto ciò, facciamo qualche esempio pratico:
- Per modificare la posizione o il nome del file in cui salvare la propria cronologia bash sarà sufficiente esportare la variabile HISTFILE in ~/.bashrc:
export HISTFILE=/path/to/cronologia_bash
- Per impostare un valore diverso da 500 (ad esempio 1000) alla cronologia dei comandi bash della propria sessione:
export HISTSIZE=1000
- Nello stesso modo, per impostare un valore diverso da 500 (ad esempio 10000) alla cronologia dei comandi bash da loggare in $HISTFILE:
export HISTFILESIZE=10000
- Per disabilitare completamente il logging su file:
export HISTFILESIZE=0
oppure
export HISTFILE=/dev/null
Se invece non volete perdervi nemmeno un comando, potete utilizzare questo script fornito da Yaroslav Halchenko, che ho riesumato per l'occasione dalla cartella useful_scripts :)
Nella speranza che il concetto generale e il funzionamento della cronologia dei comandi bash siano un pò più chiari, veniamo ora alla parte più utile di tutto il discorso. Ossia, come utilizzare la cronologia per recuperare comandi digitati diverso tempo fà.
Ovviamente, credo sia noto che la cronologia di sessione e non, è consultabile direttamente nella shell, "premendo il tasto freccia in alto". In questo modo, è possibile scorrere in ordine cronologico partendo dall'ultimo, tutti gli $HISTSIZE comandi digitati. Decisamente utile, ma solo per comandi recenti :)
Per visualizzare invece l'intera cronologia, il comando da utilizzare è:
history
che fornisce un elenco numerato e con la relativa data degli ultimi $HISTSIZE comandi:
--- ------- --- ------- 485 2007-06-17 14:51:26 history | grep configure 486 2007-06-17 14:52:35 man bash 487 2007-06-17 14:52:47 locate bashrc 488 2007-06-17 14:57:49 ssh admin[@]192.168.10.1:222 489 2007-06-17 14:58:01 exit 490 2007-06-17 14:58:51 cat ~/.bash_history | grep configure 491 2007-06-17 14:59:20 gedit /root/.bashrc 492 2007-06-17 15:00:22 env --- ------- --- -------
Sfruttando il comando history, potrebbe quindi essere decisamente utile "filtrare" tramite il comando grep la ricerca nella cronologia, digitando ad esempio:
history | grep configure
così da visualizzare solo l'elenco di comandi che contengono la parola configure.
Giusto per curiosità, e per dare un'idea delle infinite possibilità della bash, i comandi loggati possono essere eseguiti anche utilizzando il "numero assegnato dalla cronologia". Ad esempio, digitando:
!486
verrà eseguito il comando:
486 2007-06-17 14:52:35 man bash
Utilizzare il comando history, non è però l'unico modo per spulciare nella cronologia della propria shell, anzi, esiste un metodo ancora più veloce e di cui non potrei più fare a meno :)
Si tratta della combinazione di tasti Ctrl+R (reverse-i-search) che consente, filtrando lettere e parole, di utilizzare molto più rapidamente la cronologia e di lanciare direttamente il comando premendo INVIO.
(reverse-i-search)`hi': history | grep configure
In conclusione, nella speranza di aver fornito qualche indicazione utile, credo siate d'accordo con me nel considerare la cronologia dei comandi bash, uno strumento utilissimo in diverse situazioni, semplice da utilizzare e che sveltisce molto il lavoro nella shell. Fortuna che esiste :)
- Applications Software (2)
- Debian (1)
- Devel (1)
- Distribuzioni Varie (2)
- Easy Tricks (5)
- Gnome Desktop (2)
- Guide Debian (8)
- Guide Debian Ubuntu (12)
- Guide Ubuntu (9)
- Linux Printer Drivers (1)
- Man Pages Linux (2)
- My Feeds (3)
- Off Topic (2)
- Ping at Home (1)
- Problem Solving (4)
- Server Side (2)
- Tricks Debian Ubuntu (5)
- Ubuntu (8)
- Upgrades (5)
- NFS - Condivisione file Debian Ubuntu
- Ubuntu Case Studies: storie di successo in azienda e nelle scuole
- La tentazione del lato oscuro (Google AdSense) [Ping@Home]
- Linux Man Pages On-Line
- Gestione Moduli e Virtual Hosts di Apache2 su Debian e Ubuntu
- Visualizzare struttura ad albero di una directory
- Cron + Rhythmbox + Scriptino = Sveglia
- Soluzione piccolo problema con mp32ogg
- Velocizzare la ricompilazione con ccache
- Trasformare Gedit in un editor avanzato
- People DebianClan e TuxFeed: pinguini italiani alla riscossa
- Abilitare supporto AGP driver NVIDIA
- Finalmente rilasciata la GPLv3
- Compiz Fusion + Debian Sid
- Estensione NoScript per Firefox
- Compiz Fusion + Ubuntu Feisty
- Disabilitare o modificare splash screen Gnome
- Personalizzare gnome con GNOME Color Chooser
- VOGLIO usare Ubuntu
- Cronologia comandi bash
- febbraio 2008 (1)
- gennaio 2008 (2)
- dicembre 2007 (1)
- novembre 2007 (2)
- ottobre 2007 (1)
- agosto 2007 (3)
- luglio 2007 (2)
- giugno 2007 (20)
- maggio 2007 (13)
- aprile 2007 (10)
- marzo 2007 (20)










