Se trascorri molto tempo sulla riga di comando, visualizzare la cronologia dei comandi che hai eseguito in precedenza potrebbe essere una funzione utile che può semplificare il tuo lavoro quotidiano e migliorare la tua produttività.
In questo articolo parleremo della history
comando, che consente di visualizzare un elenco di comandi eseguiti in precedenza, cercare nell'elenco e manipolare il file della cronologia.
Utilizzo della history
Espansioni dei comandi e della cronologia #
history
è una shell incorporata e il suo comportamento può differire leggermente da shell a shell. Tratteremo la versione incorporata di Bash di history
.
Nella sua forma più semplice, quando viene invocata senza alcuna opzione o argomento, la history
il comando visualizza l'intero elenco della cronologia con i numeri di riga.
history
...
467 git push
468 tail -f var/logs/error
469 nano +22,5 functions.sh
470 source project-env/bin/activate
471 history
Digitando !n
esegue l'n-esimo comando dall'elenco della cronologia e !-n
il comando n righe indietro. Nell'esempio seguente stiamo eseguendo il comando sulla riga 467
:
!467
Un altro modo per eseguire un comando è usare !word
espansione. word
si riferisce al comando più recente che inizia con "parola".
In genere, history
visualizza molte righe di output che non si adattano allo schermo. Per visualizzare l'output una pagina alla volta, invialo tramite pipe a un programma cercapersone come more
o less
comando:
history | less
Per visualizzare l'ultimo n
righe, passare il numero come argomento al comando. Ad esempio, per visualizzare solo le ultime cinque righe dell'elenco della cronologia, digitare:
history -5
Usa il up
e down
tasti freccia per navigare tra le voci nell'elenco. Quando viene visualizzato il comando che hai cercato, premi Enter
per eseguirlo.
Digita !!
per eseguire il comando precedente:
!!
Ciò è particolarmente utile quando ti dimentichi di eseguire un comando con sudo
e invece di riscrivere il comando puoi digitare:
sudo !!
!-1
è lo stesso di !!
ed esegue l'ultimo comando dall'elenco della cronologia, !-2
penultimo e così via.
^word1^word2^
L'espansione permette di rieseguire l'ultimo comando sostituendo “word1” con “word2”. Se hai digitato accidentalmente sduo command
invece di sudo command
puoi ripetere il comando usando la parola corretta con:
^sduo^sudo^
Usa grep
comando per filtrare l'output. Ad esempio, per visualizzare tutti i comandi, incluso "nano", eseguire:
history | grep nano
302 sudo nano /etc/resolv.conf
356 nano setup.py
413 sudo nano /etc/hosts
469 nano +22,5 functions.sh
Ora, se vuoi rieseguire nano setup.py
comando digita semplicemente:
!356
Un altro modo per cercare nella cronologia dei comandi è premere Ctrl-R
. Il prompt cambierà nel seguente e potrai iniziare a cercare un comando eseguito in precedenza.
(reverse-i-search)`':
La shell visualizzerà una linea corrispondente. Per passare al suggerimento successivo corrispondente, premi Ctrl-R
di nuovo.
Consulta il manuale di Bash per ulteriori informazioni sull'espansione della cronologia, sui modificatori e sui designatori.
Salvataggio dell'elenco cronologia #
Per impostazione predefinita, quando si avvia una nuova sessione, Bash legge l'elenco della cronologia da .bash_history
file . L'elenco dei comandi che vengono eseguiti nella sessione corrente vengono mantenuti in memoria e salvati nel file alla chiusura della sessione.
Se hai aperto più sessioni di shell, viene salvata solo la cronologia dell'ultima sessione chiusa.
Il -a
l'opzione ti consente di salvare l'elenco della cronologia della sessione corrente in .bash_history
file:
history -a
Il -w
l'opzione scrive l'elenco completo della cronologia nel file della cronologia.
history -w
Cronologia di cancellazione #
La history
Il comando consente di cancellare l'elenco completo della cronologia o di rimuovere alcune parti.
Per cancellare l'elenco della cronologia, usa -c
opzione:
history -c
Per eliminare una o più righe specifiche tra una posizione iniziale e finale dall'elenco della cronologia, utilizzare il -d
opzione.
Ad esempio, per rimuovere le righe comprese tra 365 e 375 (comprese quelle righe), devi digitare:
history -d 365 375
Se fornisci un solo numero a -d
opzione, il comando rimuove la riga data.
Quando viene utilizzato un numero intero negativo, le righe vengono conteggiate a ritroso dalla fine dell'elenco della cronologia.
I comandi sopra cancellano l'elenco della cronologia, che è tenuto in memoria, ma non rimuove le voci da .bash_history
file sul disco. Per cancellare il file, devi scrivere l'elenco della cronologia nel file:
history -c
history -w
Modifica del comportamento della cronologia #
Il comportamento della cronologia di Bash può essere definito utilizzando diverse variabili di ambiente. Quando modifichi il comportamento della cronologia, imposta le variabili in ~/.bashrc
o qualsiasi altro file di configurazione che viene caricato quando l'utente effettua l'accesso.
Per impostazione predefinita Bash mantiene 500 righe nell'elenco della cronologia dei comandi. Il HISTSIZE
variabile consente di modificare questo valore. Per impostarlo su 10000 aggiungi la seguente riga al tuo .bashrc
file:
HISTSIZE=10000
Il HISTCONTROL
La variabile accetta un elenco di valori separato da due punti che definisce come i comandi vengono salvati nell'elenco della cronologia:
ignorespace
- i comandi che iniziano con uno spazio non vengono salvati nell'elenco della cronologia.ignoredups
- i comandi duplicati non vengono salvati.ignoreboth
- è una scorciatoia, che include entrambiignorespace
eignoredups
.
HISTCONTROL=ignoreboth
Quando il HISTTIMEFORMAT
è impostata, Bash antepone un timestamp di esecuzione per il comando su ogni riga.
Ad esempio, se imposti:
HISTTIMEFORMAT="%F %T: "
La cronologia verrà visualizzata nel seguente formato:
413 2019-10-27 21:13:07: sudo nano /etc/hosts
Conclusione #
La history
comando visualizza un elenco di comandi eseguiti in precedenza. Ad esempio, puoi utilizzare la cronologia per visualizzare un lungo comando che hai utilizzato in precedenza e che non ricordi.
Se hai domande o feedback, sentiti libero di lasciare un commento.