Linux / Comando / history / Comando per visualizzare un elenco di comandi eseguiti in precedenza
In Linux, il comando history in Bash visualizza la cronologia dei comandi gestita dalla shell corrente insieme ai numeri. È possibile controllare la cronologia per trovare comandi precedenti o rieseguirli, e l'intervallo e il salvataggio della cronologia dipendono dalle impostazioni della shell.
Verifica della cronologia dei comandi
Inserisci il seguente comando in un terminale Bash interattivo. history è un comando integrato di Bash che restituisce l'elenco della cronologia della shell corrente.
history
L'output mostra il numero e il comando di ciascun elemento. Ad esempio, una riga che mostra 42 pwd significa che l'elemento numero 42 nella cronologia della shell è pwd. I numeri e i contenuti variano a seconda dell'account, della sessione e delle impostazioni della cronologia, quindi non utilizzare direttamente i numeri degli esempi. Il comando che inserisci viene registrato, non il risultato dell'esecuzione.
Per visualizzare solo gli elementi recenti, specifica un numero. Il seguente comando mostra le ultime 10 voci nella cronologia.
history 10
Questo comando history 10 può essere incluso nella lista. Se il comando desiderato non appare, controlla la funzione di cronologia, la dimensione di archiviazione e le impostazioni di esclusione.
Cercare e rieseguire i comandi
Nell'input interattivo predefinito di Bash, premere il tasto freccia su consente di richiamare e modificare le voci precedenti. Premi Ctrl+R e inserisci un termine di ricerca per cercare la cronologia a ritroso. Puoi controllare il contenuto del comando trovato e poi eseguirlo o modificarlo.
In Bash interattivo con l'espansione della cronologia abilitata, !! si espande all'ultimo elemento della cronologia. !n si riferisce all'elemento con numero n nella lista. Ad esempio, il seguente comando esegue l'elemento se il numero 42 è nella lista corrente.
!42
Assicurati prima che il numero corrisponda effettivamente alla cronologia. L'espansione della cronologia di solito viene eseguita immediatamente dopo l'immissione, quindi fai particolare attenzione con comandi come la cancellazione di file o modifiche alla configurazione. Nelle shell non interattive, l'espansione della cronologia di solito è disabilitata per impostazione predefinita e il comportamento può differire in altri shell.
Per vedere solo il risultato dell'espansione dell'ultimo elemento senza eseguirlo, racchiudilo tra apici singoli e inseriscilo come segue. Il comando visualizzato sullo schermo non verrà eseguito.
history -p '!!'
Se imposti shopt -s histverify, il comando espanso verrà visualizzato sulla riga di modifica in un Bash interattivo usando Readline, permettendoti di controllarlo prima dell'esecuzione. Per ripristinare le impostazioni nella shell corrente, usa shopt -u histverify. Per maggiori dettagli, consulta la documentazione di Bash sull’espansione della cronologia.
Dove e quando viene salvata la cronologia
Bash gestisce la cronologia come una lista in memoria e legge la cronologia dal file specificato da HISTFILE all'avvio. Il file predefinito tipico è ~/.bash_history, ma questo può variare a seconda dell'ambiente o della modalità POSIX. Puoi controllare le impostazioni correnti con il seguente comando.
printf '%s\n' "$HISTFILE"
Quando una shell con cronologia attiva termina, questa viene salvata in un file, ma se il file non è scrivibile, HISTFILE non viene impostato, o è vuoto, non verrà salvata. Più terminali hanno ognuno cronologie separate, quindi i comandi eseguiti in uno potrebbero non comparire immediatamente in un altro. Secondo l'opzione histappend, la cronologia verrà aggiunta al file oppure lo sovrascriverà al momento dell'uscita, e il risultato varia a seconda delle impostazioni e delle sessioni simultanee.
history -a aggiunge nuove voci che non sono ancora state aggiunte nella sessione corrente al file della cronologia. D'altra parte, history -w sovrascrive il file della cronologia con l'elenco corrente, il che potrebbe comportare la perdita della cronologia di altre sessioni. Se si utilizzano più terminali, verificare questa differenza prima di utilizzarlo. Il comportamento di salvataggio può essere trovato in Documentazione della funzione cronologia di Bash.
Controllare la dimensione della cronologia e le impostazioni di esclusione
HISTSIZE controlla il numero di voci della cronologia in memoria, mentre HISTFILESIZE controlla il numero massimo di righe nel file della cronologia. Le voci multi-linea sono eccezioni al conteggio delle righe nel file. I valori correnti possono essere controllati come segue.
printf 'HISTSIZE=%s\nHISTFILESIZE=%s\nHISTCONTROL=%s\nHISTIGNORE=%s\n' "$HISTSIZE" "$HISTFILESIZE" "$HISTCONTROL" "$HISTIGNORE"
HISTCONTROL e HISTIGNORE possono determinare quali input escludere dalla cronologia. Ad esempio, se HISTCONTROL include ignorespace, gli input che iniziano con uno spazio possono essere esclusi dalla lista della cronologia. Questa è solo un'impostazione relativa alla cronologia della shell e non cancella la cronologia presente in altri log o programmi.
Cancellare la cronologia e le informazioni sensibili
history -d n elimina l'elemento numero n dalla lista della cronologia della shell corrente. Prima, controllare il numero effettivo con history. history -c cancella l'intera lista corrente, quindi dovrebbe essere usato con cautela. Questi due comandi non cancellano automaticamente il file di cronologia già salvato o le liste di cronologia delle altre shell.
Evita di inserire password o token direttamente nella riga di comando, poiché potrebbero rimanere nella cronologia o altrove. Se le informazioni segrete sono già state esposte, non assumere che semplicemente cancellare la cronologia risolva il problema; invece, sostituisci le credenziali e verifica l'ambito della relativa esposizione.




