La shell di Linux salva una cronologia dei comandi che esegui e puoi cercarla per ripetere i comandi che hai eseguito in passato. Una volta compreso il comando della cronologia di Linux e come utilizzarlo, può aumentare significativamente la tua produttività.
A cosa serve la cronologia dei comandi Linux?
Il Linux history Il comando ti consente di rivedere e ripetere i comandi precedenti. Questo non ha lo scopo di incoraggiare solo la pigrizia o risparmiare tempo: c’è anche un fattore di efficienza (e precisione) in gioco. Più un comando è lungo e complicato, più difficile sarà ricordarlo e digitarlo senza commettere errori. Esistono due tipi di errori: uno che impedisce al comando di funzionare e uno che consente al comando di funzionare, ma gli fa fare qualcosa di inaspettato.
IL history il comando elimina questi problemi. Come la maggior parte dei comandi Linux, c’è di più di quanto potresti pensare. Tuttavia, se impari a usare il file history comando, può migliorare l’utilizzo della riga di comando di Linux, ogni singolo giorno. È un buon investimento del tuo tempo. Esistono modi molto migliori per utilizzare il file history comandare piuttosto che semplicemente premendo ripetutamente la freccia su.
Il comando della storia
Nella sua forma più semplice, puoi usare il file history comando semplicemente digitandone il nome:
history L’elenco dei comandi utilizzati in precedenza viene quindi scritto nella finestra del terminale.
I comandi sono numerati, con quelli utilizzati più recentemente (quelli con i numeri più alti) alla fine dell’elenco.
Per vedere un certo numero di comandi, puoi passare un numero a history sulla riga di comando. Ad esempio, per visualizzare gli ultimi 10 comandi che hai utilizzato, digita quanto segue:
history 10 Puoi ottenere lo stesso risultato se tu tubo history tramite la tail comando. Per fare ciò, digitare quanto segue:
history | tail -n 10
Comandi ripetuti
Se desideri riutilizzare un comando dall’elenco della cronologia, digita un punto esclamativo (!) e il numero del comando senza spazi intermedi.
Ad esempio, per ripetere il comando numero 37, digitare questo comando:
!37 Per ripetere l’ultimo comando, digita ancora due punti esclamativi, senza spazi:
!! Questo può essere utile quando esegui un comando e dimentichi di usarlo sudo . Tipo sudouno spazio, i doppi punti esclamativi, quindi premi Invio.
Per l’esempio seguente, abbiamo digitato un comando che richiede sudo. Invece di riscrivere l’intera riga, possiamo salvare una serie di sequenze di tasti e semplicemente digitare sudo !!come mostrato di seguito:
mv ./my_script.sh /usr/local/bin/ sudo !! Quindi, puoi digitare il numero corrispondente dall’elenco per ripetere un comando o utilizzare i doppi punti esclamativi per ripetere l’ultimo comando che hai usato. Tuttavia, cosa succede se vuoi ripetere il quinto o l’ottavo comando?
Puoi usare un punto esclamativo, un trattino (-) e il numero di qualsiasi comando precedente (di nuovo, senza spazi) per ripeterlo.
Per ripetere il tredicesimo comando precedente, digitare quanto segue:
!-13
Ricerca di comandi per stringa
Per ripetere l’ultimo comando che inizia con una stringa particolare, puoi digitare un punto esclamativo, quindi la stringa senza spazi, quindi premere Invio.
Ad esempio, per ripetere l’ultimo comando iniziato con sudodovresti digitare questo comando:
!sudo C’è un elemento di pericolo in questo, però. Se l’ultimo comando iniziato con sudo non è quello che pensi che sia, lancerai il comando sbagliato.
Per fornire una rete di sicurezza, tuttavia, è possibile utilizzare il file :p modificatore (print), come mostrato di seguito:
!sudo:p Questo istruisce history per stampare il comando nella finestra del terminale, anziché eseguirlo. Ciò ti consente di vedere il comando prima di usarlo. Se è il comando che desideri, premi la freccia su, quindi premi Invio per usarlo.
Se desideri trovare un comando che contiene una stringa particolare, puoi utilizzare un punto esclamativo e un punto interrogativo.
Ad esempio, per trovare ed eseguire il primo comando corrispondente che contiene la parola “alias”, digitare questo comando:
!?aliases Verrà trovato qualsiasi comando che contenga la stringa “alias”, indipendentemente da dove appare nella stringa.
Ricerca interattiva
Una ricerca interattiva ti consente di scorrere un elenco di comandi corrispondenti e ripetere quello desiderato.
Basta premere Ctrl+r per avviare la ricerca.
Mentre digiti l’indizio di ricerca, verrà visualizzato il primo comando corrispondente. Le lettere digitate vengono visualizzate tra l’apice inverso (`) e l’apostrofo (‘). I comandi corrispondenti si aggiornano man mano che digiti ciascuna lettera.
Ogni volta che premi Ctrl+r, stai cercando all’indietro il comando corrispondente successivo, che appare nella finestra del terminale.
Quando si preme Invio, verrà eseguito il comando visualizzato.
Per modificare un comando prima di eseguirlo, premere il tasto freccia sinistra o destra.
Il comando viene visualizzato sulla riga di comando ed è possibile modificarlo.
Puoi utilizzare altri strumenti Linux per eseguire ricerche nell’elenco della cronologia. Ad esempio, per convogliare l’output da history in grep E cercare i comandi che contengono la stringa “alias” potresti usare questo comando:
history | grep aliases
Modifica dell’ultimo comando
Se è necessario correggere un errore di battitura e quindi ripetere il comando, è possibile utilizzare l’accento circonflesso (^) per modificarlo. Questo è un ottimo trucco da avere nella manica ogni volta che scrivi male un comando o vuoi rieseguirne uno con un’opzione o un parametro della riga di comando diverso.
Per usarlo, digita (senza spazi) un accento circonflesso, il testo che vuoi sostituire, un altro accento circonflesso, il testo con cui vuoi sostituirlo, un altro accento circonflesso, quindi premi Invio.
Ad esempio, supponiamo di digitare il seguente comando, digitando accidentalmente “shhd” invece di “sshd”:
sudo systemctl start shhd Puoi correggerlo facilmente digitando quanto segue:
^shhd^sshd^ Il comando viene eseguito con “shhd” corretto in “sshd”.
Eliminazione dei comandi dall’elenco della cronologia
Puoi anche eliminare i comandi dall’elenco della cronologia con il comando -d (elimina) opzione. Non c’è motivo di mantenere il comando con errori di ortografia nell’elenco della cronologia.
Puoi usare grep per trovarlo, passa il suo numero a history con il -d opzione per eliminarlo, quindi cerca di nuovo per assicurarti che sia sparito:
history | grep shhd history -d 83 history | grep shhd Puoi anche passare una serie di comandi al file -d opzione. Per eliminare tutte le voci dell’elenco da 22 a 32 (incluso), digitare questo comando:
history -d 22 32 Per eliminare solo gli ultimi cinque comandi, puoi digitare un numero negativo, in questo modo:
history -d -5
Aggiornamento manuale del file di cronologia
Quando si accede o si apre una sessione terminale, l’elenco della cronologia viene letto dal file della cronologia. In Bash, il file di cronologia predefinito è .bash_history.
Qualsiasi modifica apportata nella sessione corrente della finestra del terminale viene scritta nel file della cronologia solo quando chiudi la finestra del terminale o ti disconnetti.
Supponiamo che tu voglia aprire un’altra finestra di terminale per accedere all’elenco completo della cronologia, inclusi i comandi digitati nella prima finestra di terminale. IL -a (tutto) l’opzione ti consente di farlo nella prima finestra del terminale prima di aprire la seconda.
Per usarlo, digitare quanto segue:
history -a I comandi vengono scritti silenziosamente nel file della cronologia.
Se vuoi scrivere tutte le modifiche all’elenco della cronologia nel file della cronologia (se hai eliminato alcuni vecchi comandi, ad esempio), puoi utilizzare il comando -w (scrivi) opzione, in questo modo:
history -w
Cancellazione dell’elenco della cronologia
Per cancellare tutti i comandi dall’elenco della cronologia, è possibile utilizzare il comando -c opzione (cancella), come segue:
history -c Se desideri inoltre forzare queste modifiche al file della cronologia, utilizza il file -w opzione, in questo modo:
history -w
Sicurezza e file storico
Se utilizzi applicazioni che richiedono di digitare informazioni sensibili (come le password) sulla riga di comando, ricorda che anche queste verranno salvate nel file della cronologia. Se non desideri che determinate informazioni vengano salvate, puoi utilizzare la seguente struttura di comando per eliminarle immediatamente dall’elenco della cronologia:
special-app my-secret-password;history -d $(history 1) history 5 Questa struttura include due comandi separati da un punto e virgola (;). Analizziamolo:
- app-speciale: il nome del programma che stiamo utilizzando.
- la mia password segreta: la password segreta che dobbiamo fornire per l’applicazione sulla riga di comando. Questa è la fine del comando uno.
- storia -d: Nel comando due, invochiamo il -d (elimina) opzione di history. Ciò che elimineremo si trova nella parte successiva del comando.
- $(cronologia 1): Utilizza una sostituzione di comando. La parte del comando contenuta nel file $() viene eseguito in una subshell. Il risultato di tale esecuzione viene inserito come testo nel comando originale. IL history 1 comando restituisce il comando precedente. Quindi, puoi pensare al secondo comando come History -d “ultimo comando qui”.
Puoi usare il history 5 comando per assicurarsi che il comando contenente la password sia stato rimosso dall’elenco della cronologia.
C’è un modo ancora più semplice per farlo, però. Poiché Bash ignora le righe che iniziano con uno spazio per impostazione predefinita, includi semplicemente uno spazio all’inizio della riga, come segue:
special-app another-password history 5 Il comando con la password non viene aggiunto all’elenco della cronologia. Il motivo per cui questo trucco funziona è contenuto nel file .bashrc file.
Il file .bashrc
IL .bashrc il file viene eseguito ogni volta che accedi o apri una finestra di terminale. Contiene anche alcuni valori che controllano il comportamento del file history comando. Andiamo modifica questo file con gedit.
Digitare quanto segue:
gedit .bashrc Nella parte superiore del file vengono visualizzate due voci:
- HISTSIZE: Il numero massimo di voci che l’elenco della cronologia può contenere.
- HISTFILESIZE: Il limite per il numero di righe che un file di cronologia può contenere.
Questi due valori interagiscono nei seguenti modi:
- Quando accedi o avvii una sessione della finestra del terminale, l’elenco della cronologia viene popolato dal file .bash_history file.
- Quando chiudi una finestra di terminale, il numero massimo di comandi impostati in HISTSIZE vengono salvati in .bash_history file.
- Se la histappend L’opzione shell è abilitata, i comandi vengono aggiunti .bash_history. Se histappend non è impostato, .bash_history viene sovrascritto.
- Dopo aver salvato i comandi dall’elenco della cronologia in .bash_history il file della cronologia viene troncato in modo da non contenere più di HISTFILESIZE linee.
Inoltre, nella parte superiore del file, viene visualizzata una voce per il file HISTCONTROL valore.
È possibile impostare questo valore per eseguire una delle seguenti operazioni:
- ignorespaces:Le righe che iniziano con uno spazio non vengono aggiunte all’elenco della cronologia.
- ignoredups:I comandi duplicati non vengono aggiunti al file della cronologia.
- ignoreboth:Abilita entrambi quanto sopra.
Puoi anche elencare comandi specifici che non desideri vengano aggiunti all’elenco della cronologia. Separateli con i due punti (:) e metteteli tra virgolette (“…”).
Seguiresti questa struttura per aggiungere una linea al tuo .bashrc file e sostituisci i comandi che desideri vengano ignorati:
export HISTIGNORE=”ls:history”
Utilizzo dei timestamp
Se desideri aggiungere timestamp all’elenco della cronologia, puoi utilizzare il file HISTIMEFORMAT collocamento. Per fare ciò, aggiungi semplicemente una riga come la seguente al tuo file .bashrc file:
export HISTTIMEFORMAT=”%c ” Tieni presente che c’è uno spazio prima delle virgolette di chiusura. Ciò impedisce che il timestamp si sovrapponga ai comandi nell’elenco dei comandi.
Ora, quando esegui il comando History, vedi la data e l’ora. Tieni presente che tutti i comandi presenti nell’elenco della cronologia prima dell’aggiunta dei timestamp verranno contrassegnati con la data e l’ora del primo comando che riceve un timestamp. Nell’esempio mostrato di seguito, si trattava del comando 118.
È un timestamp molto prolisso. Tuttavia, puoi utilizzare token diversi da %c per perfezionarlo. Gli altri token che puoi utilizzare sono:
- %d: Giorno
- %m: Mese
- %y: Anno
- %H: Ora
- %M: Minuti
- %S: Secondi
- %F: Data completa (formato anno-mese-data)
- %T: Ora (formato ora:minuti:secondi)
- %c: Data e ora complete (formati giorno-data-mese-anno e ora:minuti:secondi)
Sperimentiamo e utilizziamo alcuni token diversi:
export HISTTIMEFORMAT=”%d n%m %T ” L’output utilizza il giorno, il mese e l’ora.
Se rimuoviamo il giorno e il mese, però, verrà mostrata solo l’ora.
Eventuali modifiche apportate HISTIMEFORMAT si applicano all’intero elenco cronologico. Ciò è possibile perché l’ora di ciascun comando viene memorizzata come file numero di secondi dall’epoca Unix. IL HISTTIMEFORMAT La direttiva specifica semplicemente il formato utilizzato per rendere quel numero di secondi in uno stile leggibile dall’uomo, come ad esempio:
export HISTTIMEFORMAT=”%T “