La shell di Linux conserva una cronologia dei comandi che esegue, e puoi cercarlo per ripetere i comandi che hai eseguito in passato. Una volta compreso il comando della cronologia di Linux e come usarlo, può aumentare significativamente la tua produttività.
Manipolare la storia
Che cosa George Santayana ha detto il famoso, “Chi non ricorda il passato è condannato a ripeterlo”. Sfortunatamente, en Linux, se non ricordi il passato, non posso ripeterlo, anche se vuoi.
Fu allora che Linux history
Il comando è utile. Ti consente di rivedere e ripetere i tuoi comandi precedenti. Questo non ha lo scopo di promuovere la pigrizia o risparmiare tempo.; c'è anche un fattore di efficienza (e precisione) in gioco. Più un comando è lungo e complicato, più sarà difficile ricordarlo e scriverlo senza sbagliare. Ci sono due tipi di errori: uno che impedisce al comando di funzionare e uno che consente al comando di funzionare, ma mi fa fare qualcosa di inaspettato.
il history
comando elimina quei problemi. Come la maggior parte dei comandi di Linux, c'è più di quanto pensi. Nonostante questo, se impari a usare il history
comando, può migliorare l'uso della riga di comando di Linux, ogni giorno. È un buon investimento del tuo tempo. Ci sono modi molto migliori di usare history
comando piuttosto che premere ripetutamente la freccia su.
Il comando della storia
Nella sua forma più semplice, puoi usare il history
comando semplicemente digitandone il nome:
storia
L'elenco dei comandi utilizzati in precedenza è scritto nella finestra del terminale.
I comandi sono numerati, con l'ultimo usato (quelli con i numeri più alti) alla fine della lista.
Per vedere un certo numero di comandi, puoi passare un numero a history
sulla riga di comando. Come esempio, per vedere le ultime 10 comandi che hai usato, scrivi quanto segue:
storia 10
Puoi ottenere lo stesso risultato se canalizzi history
attraverso tail
comando. Per farlo, scrivi quanto segue:
storia | coda -n 10
IMPARENTATO: Come usare Pipes su Linux
Comandi ripetuti
Se vuoi riutilizzare un comando dall'elenco della cronologia, scrivi un punto esclamativo (!) E il numero del comando senza spazi in mezzo.
Come esempio, per ripetere il numero di comando 37, devi digitare questo comando:
!37
Per ripetere l'ultimo comando, scrivi due punti esclamativi, ancora, no spazi:
!!
Questo può essere utile quando emetti un comando e dimentichi di usarlo sudo
. scrive sudo
, Uno spazio, doppi punti esclamativi e poi premi Invio.
Per il seguente esempio, scriviamo un comando che necessita sudo
. Invece di riscrivere l'intera riga, possiamo salvare un sacco di sequenze di tasti e digitare semplicemente sudo !!
, Come mostrato di seguito:
mv ./my_script.sh /usr/local/bin/
sudo !!
Perché, puoi digitare il rispettivo numero dall'elenco per ripetere un comando o usare i doppi punti esclamativi per ripetere l'ultimo comando che hai usato. Nonostante questo, E se volessi ripetere il quinto o l'ottavo comando??
Puoi usare un punto esclamativo, un trattino (-) e il numero di qualsiasi comando precedente (ancora, no spazi) per ripeterlo.
Per ripetere il tredicesimo comando sopra, devi scrivere quanto segue:
!-13
Cerca comandi per stringa
Per ripetere l'ultimo comando che inizia con una stringa particolare, puoi digitare un punto esclamativo e quindi la stringa senza spazi e quindi premere Invio.
Come esempio, per ripetere l'ultimo comando iniziato con sudo
, scriveresti questo comando?:
!sudo
Nonostante questo, c'è un elemento di pericolo in questo. Se l'ultimo comando iniziato con sudo
non è chi pensi che sia, eseguirai il comando sbagliato.
Nonostante questo, fornire una rete di sicurezza, puoi usare il :p
(stampare) modificatore, come mostrato di seguito:
!sudo:P
Questo istruisce history
per stampare il comando nella finestra del terminale, invece di eseguirlo. Ciò consente di visualizzare il comando prima di utilizzarlo.. Se è il comando che vuoi, premi la freccia su e poi premi Invio per usarlo.
Se vuoi trovare un comando che contiene una particolare stringa, puoi usare un punto esclamativo e un punto interrogativo.
Come esempio, per trovare ed eseguire il primo comando corrispondente contenente la parola “alias”, devi digitare questo comando:
!?alias
Questo troverà qualsiasi comando che contiene 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 che desideri.
Basta premere Ctrl + r per iniziare la ricerca.
Mentre digiti la traccia di ricerca, apparirà il primo comando corrispondente. Le lettere digitate vengono visualizzate tra il segno di spunta inverso (`) e l'apostrofo ('). I comandi corrispondenti si aggiornano mentre digiti ogni lettera.
Ogni volta che premi Ctrl + R, guarda indietro per il prossimo comando corrispondente, che appare nella finestra del terminale.
Quando premo Invio, il comando mostrato verrà eseguito.
Per modificare un comando prima di eseguirlo, premere il tasto freccia sinistra o destra.
Il comando appare sulla riga di comando e puoi modificarlo.
Puoi usare altri strumenti Linux per cercare nell'elenco della cronologia. Come esempio, per incanalare l'uscita di history
entro grep
e cerca i comandi che contengono la stringa “Alias” puoi usare questo comando:
storia | alias di grep
Modifica l'ultimo comando
Se devi correggere un errore di battitura e poi ripetere il comando, puoi usare il cursore (^) per modificarlo. Questo è un ottimo trucco da tenere 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, scriba (no spazi) a caret, il testo che vuoi sostituire, un altro accento circonflesso, il testo con cui vuoi sostituirlo, un altro accento circonflesso e poi premi Invio.
Come esempio, supponiamo di digitare il seguente comando, scrivendo accidentalmente “shhd” invece di “sshd”:
sudo systemctl start shhd
Puoi facilmente correggere questo digitando quanto segue:
^shhd^sshd^
Il comando viene eseguito con “shhd” corretto a “sshd”.
Rimozione di comandi dall'elenco della cronologia
Inoltre, puoi rimuovere i comandi dall'elenco della cronologia con il -d
(rimuovere) opzione. Non c'è motivo di mantenere il comando sbagliato nell'elenco della cronologia.
Puoi usare grep
per trovarlo, passa il tuo numero a history
con il -d
opzione per rimuoverlo, e poi cerca di nuovo per assicurarti che sia scomparso:
storia | grep shhd
storia -d 83
storia | grep shhd
Puoi anche passare una serie di comandi al -d
opzione. Per rimuovere tutte le voci dall'elenco di 22 un 32 (inclusivo), scrivi questo comando:
storia -d 22 32
Per rimuovere solo gli ultimi cinque comandi, puoi scrivere un numero negativo, Così:
storia -d -5
Aggiornamento manuale del file di registro
Quando accedi o apri una sessione di terminale, l'elenco della cronologia viene letto dal file della cronologia. in bash, il file di archivio predefinito è .bash_history
.
Qualsiasi modifica apportata alla sessione corrente della finestra del terminale viene scritta nel file di registro solo quando chiudi la finestra del terminale o ti disconnetti.
Supponiamo di voler aprire un'altra finestra del terminale per accedere all'elenco completo della cronologia, inclusi i comandi che hai digitato nella prima finestra del terminale. il -a
L'opzione (Tutto quanto) ti consente di farlo nella prima finestra del terminale prima di aprire la seconda.
Per usarlo, scrivi quanto segue:
storia -a
I comandi vengono scritti silenziosamente nel file di archivio.
Se vuoi scrivere tutte le modifiche dall'elenco della cronologia al file della cronologia (se hai rimosso alcuni vecchi comandi, come esempio), puoi usare il -w
(scrivere) opzione, Così:
storia -w
Elimina l'elenco della cronologia
Per rimuovere tutti i comandi dall'elenco della cronologia, puoi usare il -c
(rimuovere) opzione, nel prossimo modo:
storia -c
Se allo stesso tempo vuoi forzare queste modifiche al file di registro, usa el -w
opzione, Così:
storia -w
Sicurezza e cronologia dei file
Se utilizzi un'applicazione che richiede l'inserimento di informazioni riservate (come password) sulla riga di comando, ricorda che anche questo verrà salvato nel file della cronologia. Se non desideri che determinate informazioni vengano salvate, puoi usare la struttura di comando successiva per rimuoverla immediatamente dall'elenco della cronologia:
app speciale la mia-password-segreta;storia -d $(storia 1)
storia 5
Questa struttura include due comandi separati da punto e virgola (;). Analizziamo questo:
- applicazione speciale: Il nome del programma che stiamo usando.
- 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: Al comando due, invochiamo il
-d
(rimuovere) opzione dihistory
. Ciò che rimuoveremo è nella parte successiva del comando. - $ (disco 1): Questo usa una sostituzione di comando. La parte del comando contenuta nel
$()
gira su un sottolivello. Il risultato di tale esecuzione è pubblicato come testo nel comando originale. ilhistory 1
comando restituisce il comando precedente. Perché, 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.
Nonostante questo, c'è un modo ancora più semplice per farlo. Perché Bash ignora le righe che iniziano con uno spazio per impostazione predefinita, includi semplicemente uno spazio all'inizio della riga, nel prossimo modo:
app speciale, un'altra password
storia 5
Il comando con password non viene aggiunto all'elenco della cronologia. Il motivo per cui questo trucco funziona è contenuto nel file .bashrc
procedimento.
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 history
comando. Modifichiamo questo file con gedit
.
Scrivi quanto segue:
gedit .bashrc
Nella parte superiore del file, vedrai 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 archivio può contenere.
Questi due valori interagiscono nei seguenti modi:
- Quando accedi o avvii una sessione della finestra del terminale, l'elenco della cronologia è completato da
.bash_history
procedimento. - Quando chiudi una finestra di terminale, il numero massimo di comandi impostati in
HISTSIZE
sono memorizzati nel.bash_history
procedimento. - Se lui
histappend
L'opzione shell è abilitata, i comandi sono aggiunti a.bash_history
. ehistappend
non è configurato,.bash_history
è sovrascritto. - Dopo aver salvato i comandi dall'elenco della cronologia in
.bash_history
, il file di registro viene troncato per contenere non più diHISTFILESIZE
Linee.
Anche nella parte superiore del file, vedrai una voce per il HISTCONTROL
valore.
È possibile determinare 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 i precedenti.
Inoltre puoi elencare comandi specifici che non vuoi aggiungere alla tua lista della cronologia. Separali con i due punti (:) e mettili tra virgolette (“…”).
Seguirei questa struttura per aggiungere una riga al tuo .bashrc
file e sostituisci i comandi che vuoi ignorare:
esporta HISTIGNORE="ls:storia"
Usa timestamp
Se vuoi aggiungere timestamp all'elenco della cronologia, puoi usare il HISTIMEFORMAT
collocamento. Per farlo, basta aggiungere una riga come la successiva alla tua .bashrc
procedimento:
esporta HISTTIMEFORMAT="%C "
Nota che c'è uno spazio prima delle virgolette di chiusura. Ciò impedisce che il timestamp corrisponda ai comandi nell'elenco dei comandi.
Ora, quando esegui il comando cronologia, vedere la data e l'ora. Nota che tutti i comandi che erano nell'elenco della cronologia prima di aggiungere i timestamp saranno contrassegnati con la data e l'ora del primo comando che riceve un timestamp. In questo esempio mostrato di seguito, questo era il comando 118.
È un timestamp molto lungo. Nonostante questo, puoi usare token diversi da %c
per perfezionarlo. Gli altri token che puoi usare sono:
%d
: Giorno%m
: Mio%y
: Anno%H
: Ora%M
: Minuti%S
: Secondi%F
: Data completa (formato anno-mese-data)%T
: Ora (formato orario: minuti: secondi)%c
: Data e ora complete (formati giorno-data-mese-anno e ora: minuti: secondi)
Sperimentiamo e usiamo alcuni token diversi:
esporta HISTTIMEFORMAT="%d n%m %T "
L'output utilizza il giorno, il mese e l'ora.
Nonostante questo, se eliminiamo il giorno e il mese, mostrerà solo l'ora.
Eventuali modifiche apportate a HISTIMEFORMAT
si applica all'intero elenco della cronologia. Questo è fattibile perché l'ora di ogni comando è memorizzata come numero di secondi dai giorni Unix. il HISTTIMEFORMAT
La direttiva specifica semplicemente il formato utilizzato per convertire quel numero di secondi in uno stile leggibile dall'uomo, Che cosa:
esporta HISTTIMEFORMAT="%T "
La nostra produzione ora è più gestibile.
Puoi anche usare il history
comando per controllare. Qualche volta, rivedere i comandi che hai usato in passato può aiutarti a identificare cosa potrebbe aver causato un ostacolo.
Come può nella vita, en Linux, puoi usare il history
Comando per rivivere i bei tempi e imparare dai cattivi.
IMPARENTATO: 37 Comandi importanti di Linux che dovresti conoscere