Vuoi recuperare gli ultimi comandi immessi nel terminale? Grazie al comando history puoi vedere la cronologia degli ultimi comandi digitati e puoi anche fare ricerche al suo interno, modificare i comandi o rieseguirli.
In questa guida vedremo come sfruttare il comando history e le sue opzioni, oltre a vedere come modificare la configurazione della cronologia e decidere cosa conservare.
Indice
Sintassi del comando history
Il comando history ci permette di accedere alla lista degli ultimi comandi eseguiti. È molto comodo per ripetere un determinato comando senza doverlo digitare nuovamente, ma come vedremo può anche essere utilizzato non solo per sapere se un comando è stato eseguito, ma anche quando.
La sintassi di base del comando è questa:
history [opzioni]
Se usiamo il comando senza nessuna opzione avremo la lista completa degli ultimi comandi.
Andiamo a vedere con degli esempi pratici cosa è possibile fare con questo comando.
Tieni presente che il comando history funziona con diverse shell come bash o zsh, ma ci sono delle differenze per quanto riguarda i relativi file di configurazione. Ai fini di questa guida ci riferiremo a bash.
Quindi come file di riferimento avremo:
- bash_history: il file in cui viene memorizzata la cronologia. Si trova nella home dell’utente.
- .bashrc: il file di configurazione da cui possiamo scegliere ad esempio di modificare la dimensione della cronologia.
Come usare il comando history
Prima di vedere come si usa il comando history, è anche importante sapere che c’è un modo ancora più veloce per accedere agli ultimi comandi eseguiti.
Utilizzando le frecce direzionali si può accedere alla cronologia senza la necessità di impartire nessun comando. In particolare per visualizzare l’ultimo comando eseguito, ci basta premere la freccia verso l’alto.
Continuando a spostarci usando la freccia verso l’alto possiamo scorrere a ritroso i comandi, dal più al meno recente, mentre usando la freccia verso il basso andiamo nella direzione contraria spostandoci verso il comando più recente.
In questo modo possiamo facilmente rieseguire un comando oppure modificarlo prima di eseguirlo.
Vediamo ora come usare il comando history.
Mostrare l’elenco completo della cronologia
Possiamo usare il comando history per visualizzare l’elenco completo dei comandi eseguiti. Per farlo ci basta dare il comando in questo modo:
history
L’output sarà una lista di comandi ordinata dal meno recente (il primo elemento della lista) al più recente (l’ultimo elemento della lista).
Accanto a ogni comando vedremo un numero, questo può essere utilizzato per ripetere un comando specifico, come vedremo più avanti in questa guida.
Mostrare gli ultimi comandi inseriti
Possiamo limitare la lista della cronologia agli ultimi comandi inseriti, questo ci aiuta ad avere una lista più ristretta e ordinata in modo da fare una ricerca specifica.
Il comando si usa così:
history n
Ci basta indicare al posto di “n” il numero di comandi che vogliamo visualizzare.
Per esempio per mostrare gli ultimi 10 comandi eseguiti, ci basta usare il comando seguente:
history 10
Nell’esempio qui sotto viene mostrato un esempio di output in cui appunto ci vengono elencati solo gli ultimi 10 comandi.
Eseguire un comando specifico dalla cronologia
Possiamo ripetere in modo rapido uno dei comandi della cronologia, per farlo però dobbiamo prima usare il comando history e vedere qual è il numero corrispondente al comando che vogliamo riutilizzare. Una volta conosciuto il numero associato al comando ci basta usare questo comando:
!n
Dove “n” è il numero che corrisponde alla voce in elenco che vogliamo ripetere.
Vediamo un esempio pratico.
In questo caso per ripetere il comando “cd prova”, abbiamo dato il comando:
!172
Eseguire l’ultimo comando
Oltre a poter eseguire nuovamente un comando specifico della cronologia, possiamo anche eseguire di nuovo l’ultimo comando. In questo caso ci basta dare il comando:
!!
Questo eseguirà di nuovo il comando più recente.
In questo esempio puoi vedere il comando ls che viene eseguito nuovamente grazie all’uso dei due punti esclamativi.
Modificare ed eseguire il comando più recente
Se abbiamo fatto un errore di battitura nel comando più recente e vogliamo eseguirlo nuovamente, ma questa volta corretto, possiamo farlo sfruttando una scorciatoia.
In pratica possiamo correggere un errore andando a indicare la stringa precedente seguita dalla nuova stringa (quella corretta), così:
^[stringa-precedente]^[stringa-nuova]
Facciamo un esempio pratico per capire meglio.
Eseguo questo comando:
history | grep "flatpack"
Voglio rieseguire il comando indicando correttamente la stringa da cercare “flatpak” e non “flatpack”, per farlo do questo comando:
^flatpack^flatpak
Il termine viene sostituito e viene quindi eseguito il comando:
history | grep "flatpak"
Questo metodo ci permette di modificare i comandi quando la modifica da fare è una sostituzione, tipicamente quando c’è un errore di battitura. Se invece vogliamo cambiare completamente il comando conviene copiarlo dalla cronologia, incollarlo e poi modificarlo prima di eseguirlo.
Fare una ricerca nella cronologia
Combinando il comando history con il comando grep possiamo mostrare solo le righe che contengono una determinata stringa. Questo ci permette ad esempio di cercare un determinato comando.
history | grep "stringa"
Per esempio:
history | grep "flatpak"
Il comando qui sopra ci permette di limitare la cronologia solo alle voci che includono il comando “flatpak”.
Interrompere la memorizzazione della cronologia
Possiamo disattivare temporaneamente la cronologia in modo da far sì che i successivi comandi eseguiti da quel terminale non vengano memorizzati.
Per farlo usiamo il comando:
set +o history
Questo andrà a disattivare la cronologia, se infatti dopo aver eseguito il comando, usiamo:
set -o
Vedremo che accanto a “history” è indicato off e questo ci dice che la cronologia è disattivata.

Per riattivarla ci basta usare il comando:
set -o history

In alternativa possiamo attivare l’opzione ignorespace, come ti mostrerò alla fine dell’articolo nella sezione su come modificare la configurazione. In questo modo tutti i comandi preceduti da uno spazio non verranno memorizzati nella cronologia.
Eliminare la cronologia
Se vogliamo fare pulizia, possiamo decidere se eliminare un singolo elemento dalla cronologia dei comandi su Linux oppure se cancellare l’intera cronologia.
Per eliminare una singola voce possiamo usare il numero di riferimento che compare accanto al comando.
Per prima cosa, quindi, usiamo il comando history e vediamo qual è il numero accanto al comando che vogliamo far dimenticare alla cronologia. Dopodiché possiamo usare il comando seguente:
history -d n
Andando a sostituire il numero del comando al posto di n.
Ecco un esempio pratico.
Uso il comando per cancellare un comando specifico:
history -d 184
Dopodiché controllo se il comando è stato effettivamente rimosso, per esempio richiamando gli ultimi 10 comandi della cronologia, visto che quello rimosso si trovava appunto negli ultimi 10.

Se, invece, vogliamo eliminare tutta la cronologia, possiamo farlo con il comando:
history -c
Questo cancellerà tutte le voci che sono state memorizzate nella cronologia fino ad ora.
Forzare l’aggiornamento della cronologia
Mentre il terminale corrente è ancora aperto, la cronologia viene salvata solo in memoria. Quando la sessione del terminale viene chiusa, la cronologia viene salvata a tutti gli effetti nel file .bashrc_history.
Se, però, vogliamo aggiornare il file memorizzando la cronologia corrente senza dover chiudere la sessione, possiamo farlo in questo modo:
history -a
Questo comando andrà ad aggiungere la cronologia della sessione corrente a quella già memorizzata, senza quindi eliminare i dati precedenti.
In alternativa, se vogliamo sovrascrivere la cronologia in modo da mantenere solo la lista di comandi più recenti (quelli della sessione corrente), ed eliminare i precedenti, possiamo usare il comando:
history -w
Modificare la configurazione della cronologia
Nei paragrafi precedenti abbiamo visto come utilizzare la cronologia di Linux basandoci sulle opzioni predefinite. Se non abbiamo cambiato la configurazione, la cronologia di Linux avrà queste impostazioni:
- HISTSIZE: 500 – rappresenta il limite di comandi memorizzati nella cache della cronologia.
- HISTFILESIZE: 500 – è il limite di comandi memorizzati nel file .bash_history.
Inoltre le opzioni seguenti sono disattivate:
- ignorespace – se attiva, non memorizza nella cronologia i comandi che iniziano con uno spazio;
- ignoredups – se attiva, non memorizza i comandi duplicati.
Possiamo però decidere di modificare queste impostazioni in modo da personalizzare la nostra cronologia e renderla quindi più pratica da utilizzare.
Impostare un numero massimo di elementi memorizzati
Di default vengono memorizzati gli ultimi 500 comandi eseguiti, ma possiamo modificare questi valori andando a cambiare il file di configurazione per la cronologia.
Nel caso di bash, il file è bashrc e si trova nella home dell’utente.
Possiamo aprire il file e aggiungere queste righe:
export HISTSIZE=1000
export HISTFILESIZE=1000
In questo modo stiamo impostando 1.000 come numero massimo di comandi da memorizzare nella cronologia.
Naturalmente se vogliamo cambiare questo valore ci basta impostare il numero che vogliamo.
Decidere cosa deve essere salvato nella cronologia
La variabile d’ambiente HISTCONTROL ci permette di scegliere cosa verrà memorizzato nella cronologia. Come dicevamo all’inizio di questa sezione, possiamo avere una cronologia più snella se utilizziamo queste due impostazioni:
- ignorespace
- ignoredups
La prima ci permette di non memorizzare nella cronologia i comandi che iniziano con uno spazio. In questo modo ogni volta che vogliamo escludere un comando dalla cronologia ci basta inserire uno spazio prima del comando stesso.
La seconda opzione evita di memorizzare nella cronologia i comandi duplicati. In pratica se ad esempio uso due o più volte il comando cp, viene memorizzato una sola volta nella cronologia.
Per attivare queste due opzioni possiamo aggiungere al file bashrc questa riga:
export HISTCONTROL=ignoreboth
Se, invece, vogliamo attivare solo una delle due opzioni ci basta aggiungere la riga corrispondete a quella che vogliamo attivare:
export HISTCONTROL=ignorespace
export HISTCONTROL=ignoredups
Per controllare in maniera ancora più dettagliata cosa deve essere escluso dalla cronologia possiamo usare la variabile HISTIGNORE.
Ci basta indicare i comandi Linux da escludere, per esempio:
export HISTIGNORE="ls:history:clear:pwd"
Aggiungere questa riga al file di configurazione ci permetterà di non memorizzare nella cronologia i comandi indicati (ls, history, clear e pwd).
Come aggiungere data e ora alla cronologia
Se vogliamo che l’output del comando history ci mostri anche data e ora dell’esecuzione dei singoli comandi, possiamo modificare il file di configurazione in modo da aggiungere la variabile HISTTIMEFORMAT.
Dovremo anche specificare il formato da usare. Ad esempio usando questo formato, “%y-%m-%d %T “, la data verrò mostrata con anno (a due cifre), mese e giorno, seguita dall’orario.
export HISTTIMEFORMAT="%y-%m-%d %T "
Quest’altra notazione qui sotto, invece, mostra la data nel formato ISO: AAAA-MM-GG
export HISTTIMEFORMAT="%F %T "

Conclusioni
Con il comando history possiamo sfogliare la cronologia di tutti i comandi inseriti in precedenza sul terminale. Il comando è comodo perché ci permette di ritrovare comandi che abbiamo dimenticato e di rieseguirli in maniera rapida (ci basta conoscere il numero accanto al comando).
Non dimenticare che hai anche la possibilità di decidere cosa viene salvato nella cronologia, per esempio scegliendo di escludere dalla cronologia determinati comandi.
Avevi già usato il comando history? Facci sapere con un commento.
Pronto a costruire il tuo sito WordPress?
Prova il nostro servizio gratuitamente per 14 giorni. Nessun impegno, nessuna carta di credito richiesta.