Comandi ed espansioni della storia di Bash

Comandi Ed Espansioni Della Storia Di Bash



In questa guida, dimostreremo come lavorare con i comandi della cronologia di Bash.

Prerequisiti:

Per eseguire i passaggi illustrati in questo tutorial, sono necessari i seguenti componenti:

  • Un sistema Linux correttamente configurato. Guardare come configurare una macchina virtuale Ubuntu in VirtualBox .
  • Familiarità di base con l'interfaccia della riga di comando.

Storia di Bash

Bash è la shell predefinita nella maggior parte dei moderni sistemi Linux. Come successore di 'sh', la shell UNIX originale, viene fornito con numerose funzionalità e miglioramenti come la manipolazione delle directory, il controllo dei processi, gli alias, la cronologia dei comandi e altro ancora.







Bash tiene traccia di tutti i comandi precedentemente eseguiti dal terminale. Questo può essere incredibilmente utile in numerose situazioni come il debug. Può anche ridurre la necessità di digitare ripetutamente gli stessi/simili comandi.



Per la gestione della cronologia, Bash viene fornito con due comandi integrati:



$ tipo storia





$ tipo fc

Per archiviare la cronologia, Bash utilizza due diverse tecniche:



  • Ogni volta che si lavora con una sessione di shell, la sua cronologia viene archiviata nella memoria.
  • Quando è chiuso, la cronologia archiviata nella memoria viene scaricata in un file di cronologia.

Il file di cronologia predefinito utilizzato da Bash si trova in:

$ gatto ~ / .bash_history

Ci sono anche una manciata di variabili d'ambiente e scorciatoie da tastiera che cambiano il modo in cui Bash gestisce la cronologia.

Lavorare con la cronologia di Bash

Utilizzo di base

Per ottenere l'elenco dei comandi eseguiti di recente, utilizzare il seguente comando:

$ storia

Qui vengono elencati tutti i comandi memorizzati nel buffer. Ad ogni comando è assegnato un valore numerico. Il comando più vecchio è assegnato con 1.

Possiamo limitare il numero di comandi da stampare utilizzando il seguente comando:

$ storia N

Qui, N è un numero intero dove N >= 0. L'output contiene gli ultimi N comandi della cronologia.

Possiamo anche usare l'output in tandem con grep per filtrare:

$ storia | presa < corda >

Per sfogliare una lunga cronologia, possiamo usare il comando “meno”:

$ storia | meno

Eliminazione di comandi dalla cronologia

Se è necessario rimuovere un comando specifico dalla cronologia, utilizzare i seguenti comandi:

$ storia

$ storia -D < numero_comando >

$ storia

Allo stesso modo, per rimuovere dalla cronologia i comandi da M a N, possiamo utilizzare i seguenti comandi:

$ storia

$ storia -D MN

$ storia

Per cancellare la cronologia dal buffer RAM per la sessione del terminale corrente, utilizzare invece i seguenti comandi:

$ storia -C

$ storia

Per cancellare la cronologia dal file della cronologia memorizzato sul disco, possiamo sovrascriverlo completamente con NULL:

$ gatto / dev / nullo > $HISTFILE

Impostazioni della cronologia di Bash

Esistono diversi modi per modificare il modo in cui Bash gestisce la cronologia. Molte di queste opzioni sono gestite da variabili di ambiente.

Per cambiare il loro valore, modifichiamo il file “bashrc”:

$ nano ~ / .bashrc

Dopo la modifica, salva il file e ricaricalo in Bash.

$ fonte ~ / .bashrc

Per apportare modifiche a livello di sistema, modificare il 'bashrc' che si trova nelle seguenti posizioni:

$ nano / eccetera / bash.bashrc

$ nano / eccetera / bashrc

Dimensione buffer

Come accennato in precedenza, Bash utilizza due buffer per memorizzare la cronologia dei comandi nella RAM (per la sessione corrente) e in un file su disco (per tutte le sessioni precedenti).

Le dimensioni di questi buffer sono controllate da due variabili di ambiente:

  • HISTSIZE : Definisce il numero di voci da memorizzare nel buffer RAM.
  • HISTFILESIZE : Definisce il numero di voci da memorizzare nel file su disco.

Possiamo cambiare il loro valore nel 'bashrc' per soddisfare le nostre esigenze:

$ nano ~ / .bashrc

Ad esempio, per memorizzare 5000 voci in entrambi i buffer, aggiornare 'bashrc' con il seguente codice:

$ HISTSIZE = 5000

$ HISTFILESIZE = 5000

Esclusione di comandi

Per impostazione predefinita, Bash memorizza ogni singolo comando eseguito nei buffer della cronologia. Tuttavia, possiamo configurarlo in modo che Bash ignori determinati comandi. Può essere utile in situazioni in cui devi eseguire gli stessi comandi più volte, riempiendo il buffer di spam.

  • HISTCONTROL

Iniziamo con il seguente esempio di comando:

$ eco 'monaco' && storia 5

$ eco 'sbagliato' && storia 5

Come dimostra l'output del comando history, viene registrato solo il primo comando echo ma non il secondo.

Questo è il funzionamento della variabile d'ambiente HISTIGNORE. Dice a Bash di non registrare i comandi nel buffer della cronologia in base a determinati schemi. Sono disponibili i seguenti valori:

  • ignoreups : non viene registrato se un comando corrisponde alla voce della cronologia precedente.
  • ignorespace : Non verrà registrato se un comando inizia con uno spazio all'inizio.
  • ignora entrambi : Applica la regola sia di ignoreups che di ignorespace.
  • cancellazioni : Tutte le righe precedenti che corrispondono al comando corrente verranno cancellate dalla cronologia.

Nel primo esempio, abbiamo dimostrato l'uso di ignorespace. Tuttavia, non tutte le distribuzioni possono spedire Bash con questa configurazione. Come sempre, possiamo aggiungerli a “bashrc”:

$ HISTCONTROL = ignora entrambi

È anche possibile abilitare più opzioni utilizzando il seguente comando:

$ HISTCONTROL =ignoredups:ignoraspazio

Qui, ignoreups:ignorespace è l'equivalente di ignoreboth.

  • ISTIGNORE

Questa variabile di ambiente può contenere uno o più modelli. Qualsiasi comando che corrisponda a qualsiasi modello descritto da HISTIGNORE non verrà registrato in nessuno dei due buffer cronologici. I modelli sono definiti utilizzando le espressioni regolari.

La struttura è la seguente:

$ ISTIGNORE = '' : '' : ''

Ad esempio, per escludere i comandi history ed echo dalla cronologia di Bash, aggiornare HISTIGNORE come segue:

$ ISTIGNORE = 'storia' : 'eco *'

Possiamo usare la seguente catena di comandi per testarlo:

$ ls -l / era / pallonetto &> / dev / nullo

$ storia

$ eco Ciao mondo

$ storia

Timestamp

Bash può anche essere configurato per registrare l'ora in cui è stato eseguito un comando. Può essere utile in varie situazioni come il debug.

Per abilitare i timestamp nella cronologia di Bash, aggiorna il valore di HISTTIMEFORMAT:

$ FORMATO ORARIO HIST = ''

Tutti i caratteri di controllo del formato dell'ora disponibili sono disponibili nella pagina man del comando date.

$ Uomo data

Il seguente elenco include alcuni semplici:

  • %T: tempo
  • %d: giorno
  • %m: mese
  • %y:Anno
$ FORMATO ORARIO HIST = '%T %d: '

Storia Persistenza

Quando lavori con la CLI, in molti casi ti ritroverai a lavorare con più terminali. È qui che la gestione della storia di Bash può diventare una fonte di dolore.

Per impostazione predefinita, il file della cronologia viene aggiornato una volta chiusa la sessione. Sebbene vada bene per una singola sessione, non è adeguato per più sessioni simultanee. Possiamo risolvere questo problema forzando Bash ad aggiornare il file della cronologia ogni volta che viene eseguito un comando.

Per fare ciò, aggiorna il valore di PROMPT_COMMAND:

$ PROMPT_COMANDO = 'storia -a'

Qui, la variabile PROMPT_COMMAND può contenere comandi validi. Il contenuto di PROMPT_COMMAND viene eseguito prima che Bash inizi a prendere l'input dell'utente. Il comando 'history -a' forza la cronologia ad aggiungere i contenuti al file della cronologia.

Espansione della storia e designatori

Bash viene fornito con un paio di scorciatoie integrate per sfruttare la sua funzione di cronologia. Ecco l'elenco dei designatori:

  • !! : Esegue l'ultimo comando dalla cronologia.
  • !N : Esegue l'ennesimo comando dalla cronologia.
  • !-N : Esegue l'ennesimo comando prima del comando più recente dalla cronologia.
  • ! : Esegue il comando più recente.

La seguente catena di comandi ne dimostra l'utilizzo:

$ eco 1

$ eco 2

$ eco 3

$ storia

$ ! eco

$ ! - 3

$ ! 1

$ !!

Alcuni designatori funzionano anche con gli argomenti di comando della cronologia:

  • !:* : Usa tutti gli argomenti del comando più recente.
  • !:^ : Usa il primo argomento del comando più recente.
  • !:N : Usa l'ennesimo argomento del comando più recente.
  • !:M-N : Usa gli argomenti da M a N del comando più recente.
  • !:$ : Usa l'ultimo argomento del comando più recente.

La seguente catena di comandi ne dimostra l'utilizzo:

$ eco 1 2 3 4 5 6 7

$ eco ! : *

$ eco 1 2 3 4 5 6 7

$ eco ! :^

$ eco 1 2 3 4 5 6 7

$ eco ! : 5

$ eco 1 2 3 4 5 6 7

$ eco ! : 1 - 5

$ eco 1 2 3 4 5 6 7

$ eco ! :$

Se devi lavorare con i parametri di un comando diverso, i designatori hanno questo aspetto:

  • !^ : Usa il primo argomento del comando .
  • !$ : Usa l'ultimo argomento del comando .

La seguente catena di comandi ne dimostra l'utilizzo:

$ ls -lh / era / tronco d'albero &> / dev / nullo

$ tocco 1 .TXT 2 .TXT 3 .TXT 4 .TXT 5 .TXT

$ eco ! tocco ^

$ eco ! tocco $

Scorciatoie da tastiera della cronologia

Oltre a tutti i comandi e le variabili d'ambiente, Bash supporta anche una manciata di scorciatoie da tastiera per una più facile navigazione nella cronologia:

  • Su tasto freccia: scorrere indietro
  • Giù tasto freccia: scorrere in avanti

Sono inoltre disponibili scorciatoie da tastiera per una ricerca cronologica interattiva:

  • Ctrl+R : Cerca i comandi nella cronologia.
  • Ctrl+O : esegue il comando selezionato.
  • CTRL+G : Esci dalla ricerca interattiva.

Conclusione

Abbiamo discusso in dettaglio della storia di Bash. Abbiamo imparato come Bash memorizza la cronologia dei comandi e come trarne vantaggio in diversi modi. Abbiamo dimostrato come lavorare con la cronologia di Bash usando vari esempi.

Interessato a saperne di più su Bash? IL Sottocategoria di programmazione Bash contiene centinaia di guide su diverse funzionalità di Bash.

Buona informatica!