
La shell bash è l'ambiente terminale standard incluso con la maggior parte delle distribuzioni Linux, incluso con macOS e disponibile per l'installazione su Windows 10. Ricorda i comandi digitati e li memorizza in un file di cronologia. Probabilmente conosci alcune basi della storia di Bash, ma è molto più potente di quanto potresti immaginare.
Tasti rapidi
RELAZIONATO: Le migliori scorciatoie da tastiera per Bash (alias il terminale Linux e macOS)
Per scorrere la cronologia di Bash, puoi utilizzare alcune delle molte scorciatoie da tastiera utili di Bash. Premi queste scorciatoie e i comandi che hai usato in precedenza appariranno al prompt.
- Freccia in alto o Ctrl + P: Vai al comando precedente nella tua cronologia. Premi il tasto più volte per tornare indietro attraverso i comandi che hai utilizzato.
- Freccia in giù o Ctrl + N: Vai al comando successivo nella tua cronologia. Premi il tasto più volte per spostarti in avanti attraverso i comandi che hai utilizzato.
- Alt + R: Annulla qualsiasi modifica apportata a un comando estratto dalla cronologia se l'hai modificato nella riga corrente.
Bash ha anche una speciale modalità di “richiamo” che puoi usare per cercare i comandi che hai eseguito in precedenza, piuttosto che scorrerli uno per uno.
- Ctrl + R: Richiama l'ultimo comando corrispondente ai caratteri forniti. Premi questo collegamento e inizia a digitare per cercare un comando nella cronologia di bash.
- Ctrl + O: Esegui il comando che hai trovato con Ctrl + R.
- Ctrl + G: Abbandona la modalità di ricerca della cronologia senza eseguire un comando.

Visualizza la cronologia di Bash
Puoi stampare l'intera cronologia bash sullo schermo eseguendo un singolo comando:
history
Vedrai un elenco di tutti i comandi nella cronologia di bash, insieme a un numero a sinistra di ciascuno. Il comando con un “1” accanto è il comando più vecchio nella cronologia di bash, mentre il comando con il numero più alto è il più recente.

RELAZIONATO: Diventa un utente Linux Power Terminal con questi 8 trucchi
Puoi fare tutto ciò che ti piace con l'output. Ad esempio, è possibile reindirizzarlo al file grepcomando per cercare nella cronologia dei comandi.
history | grep your_search

Potresti anche inviarlo al tail per visualizzare solo un piccolo numero dei comandi recenti che hai eseguito. Ad esempio, il comando seguente mostra le ultime 5 voci nella cronologia.
history | tail -5

Esegui comandi dalla tua cronologia
Bash può “espandere” rapidamente i comandi precedenti oppure espanderli e modificarli. Questa funzione è nota come “espansione della cronologia” e utilizza un punto esclamativo, noto come “botto”. Digitali al prompt e premi Invio per eseguirli come se avessi eseguito qualsiasi altro comando.
Per eseguire un comando specifico dalla cronologia in base al suo numero, utilizzare il comando seguente:
!#
Ad esempio, supponiamo che tu voglia eseguire il dodicesimo comando dalla tua cronologia di bash. Questo è il comando con un “12” a sinistra di esso quando si esegue il history comando. Digiteresti il seguente comando.
!12

Per rieseguire l'ultimo comando eseguito, digitare quanto segue. Ciò ha lo stesso effetto della pressione della freccia Su una volta per visualizzare il comando precedente e quindi premere Invio.
!!
Puoi anche fare riferimento a un comando per un certo numero di righe indietro. Per esempio, !-2 eseguirà il penultimo comando che hai eseguito. !! significa la stessa cosa di !-1 .

Questa espansione funziona ovunque sulla linea. Puoi aggiungere qualsiasi cosa ti piaccia prima o dopo !! o una qualsiasi delle altre espressioni in questa sezione. Ad esempio, è possibile digitare il comando seguente per rieseguire l'ultimo comando eseguito sudo, dandogli i privilegi di root. Ciò è particolarmente utile se si dimentica di aggiungere sudo prima di eseguire un comando.
sudo !!
Oppure, ad esempio, potresti rieseguire il comando precedente e reindirizzare il suo output su grep per cercare del testo.
!! | grep text

Per cercare un comando nella cronologia ed eseguirlo, digitare quanto segue. Questo eseguirà l'ultimo comando che corrisponde al testo specificato:
!text
Quindi, se di recente hai eseguito un comando che è iniziato con ping, è possibile eseguire il comando seguente per cercarlo. Ciò eseguirà una ricerca all'indietro nella cronologia, individua il comando più recente che inizia con “pi“, Ed eseguilo immediatamente:
!pi

È possibile aggiungere a :p su una qualsiasi delle espansioni sopra e bash stamperà il comando sul terminale senza eseguirlo. Questo è utile se vuoi confermare che stai selezionando il comando corretto prima di eseguirlo.
!12:p
!!:p
!text:p

Riutilizza gli argomenti della tua storia
Bash ti consente anche di eseguire un nuovo comando, ma usa gli argomenti dei comandi precedenti nella tua cronologia. Questo può aiutarti a riutilizzare rapidamente argomenti lunghi o complicati senza doverli digitare nuovamente.
command !$
Ad esempio, supponiamo che tu abbia eseguito il comando touch /home/chris/some_long_file_name_you_dont_want_to_type_again . Ora vuoi eseguire il comando nano /home/chris/some_long_file_name_you_dont_want_to_type_again. Invece di digitare l'intero da zero, è possibile eseguire:
nano !$
Il !$ farebbe bash riempire automaticamente l'ultimo argomento dal tuo comando precedente.

Questo riempie solo l'ultimo argomento. Quindi, se corri ping google.com -c 4 e poi corri ping !$ , questo si espanderebbe solo a “ping 4“.
Per risolvere questa situazione, puoi usare il trucco seguente per espandere il primo argomento sulla riga, anziché l'ultimo:
command !^
Quindi, se hai corso ping google.com -c 4 e poi corse ping !^ , bash lo espanderebbe in “ping google.com".

Per compilare tutti gli argomenti utilizzati nel comando precedente anziché solo un singolo argomento, devi utilizzare quanto segue:
command !*
Quindi, se hai corso ping !* invece, bash riempirebbe automaticamente tutti gli argomenti che hai usato nel comando precedente.

Puoi usare lo stesso trucco che usi per eseguire comandi dalla cronologia per ottenere argomenti da essi. Usa il seguente modulo.
command !abc:#
Ad esempio, abbiamo eseguito il comando sudo hostname ubuntu in precedenza. Se eseguiamo il seguente comando, bash cercherà all'indietro nella cronologia per trovare l'ultimo comando che inizia con le lettere che digitiamo e riempire l'argomento specificato. Quindi, se corriamo echo !su:2 , bash cercherà indietro per trovare l'ultimo comando che inizia con “su“E compila il suo secondo argomento, che è”ubuntu“.
Altri trucchi funzionano come ci si potrebbe aspettare. Ad esempio, la sostituzione del numero con un asterisco, noto come jolly, fa sì che bash compili tutti gli argomenti dal comando:
command !abc:*

Eseguire nuovamente il comando precedente e modificarlo
Bash ti consente anche di eseguire nuovamente il comando precedente e di specificare qualcosa che dovrebbe essere modificato. Questo può essere utile per correggere un refuso in un comando. Ad esempio, il comando seguente eseguirà nuovamente il comando precedente, sostituendo il testo “abc“In esso con il testo”xyz“.
^abc^xyz
Ad esempio, se hai eseguito accidentalmente ping gogle.com, potresti quindi correre ^gog^goog e bash eseguirà il comando ping google.com anziché.

Dove viene archiviata la cronologia e come cancellarla
La shell bash memorizza la cronologia dei comandi che hai eseguito nel file della cronologia del tuo account utente in ~ / .bash_history per impostazione predefinita. Ad esempio, se il tuo nome utente è bob, troverai questo file in /home/bob/.bash_history.
Poiché la cronologia è memorizzata in un file, persiste tra le sessioni. È possibile eseguire alcuni comandi, disconnettersi, tornare il giorno successivo e tali comandi saranno ancora nel file della cronologia pronti per essere visualizzati e utilizzati. Ogni account utente ha il proprio file di cronologia con una cronologia dei comandi separata.
Per cancellare la cronologia di bash, è possibile eseguire il comando seguente. Ciò cancella il contenuto del file .bash_history del tuo account utente:
history -c

Bash ricorda solo un numero limitato di comandi per impostazione predefinita, impedendo che il file della cronologia diventi troppo grande. Il numero di voci della cronologia che Bash ricorda è controllato dal HISTSIZEvariabile. L'impostazione predefinita è in genere 500 o 1000 voci. È possibile eseguire il comando seguente per visualizzare la dimensione della cronologia bash sul proprio sistema.
echo $HISTSIZE
Per impostare la cronologia su zero, eseguire il comando seguente.
HISTSIZE=0
Per la sessione corrente, bash non memorizzerà alcuna voce della cronologia a meno che non esegui un comando simile HISTSIZE=1000 per riportarlo a un certo numero di voci.

Come ignorare spazi e duplicati
Bash consente di ignorare le voci della cronologia che iniziano con uno spazio se si imposta il HISTCONTROLvariabile a ignorespace.
HISTCONTROL=ignorespace
Digita uno spazio prima di un comando prima di eseguirlo nella shell bash e il comando verrà eseguito normalmente, ma non verrà visualizzato nella cronologia se hai questa variabile abilitata. Ciò ti consente di mantenere la cronologia un po 'più pulita, scegliendo di eseguire comandi senza che compaiano nella cronologia.

Bash ti consente anche di ignorare i comandi duplicati che possono ingombrare la tua cronologia. Per fare ciò, impostare HISTCONTROL per ignoredups.
HISTCONTROL=ignoredups

Per usare sia il ignorespace e ignoredups funzione, impostare il HISTCONTROL variabile a ignoreboth.
HISTCONTROL=ignoreboth
Si noti che le variabili bash impostate persistono solo per la sessione corrente. Dovrai aggiungerli al file .bashrc del tuo account utente per impostare automaticamente questi valori in ogni sessione bash che avvii, se lo preferisci.

La shell bash è uno strumento complesso con molte più opzioni di queste. Consulta le sezioni di Bash History Builtins e History Expansion nel manuale bash ufficiale informazioni più dettagliate e altri trucchi avanzati che puoi usare.
