Quando si utilizza frequentemente la riga di comando di Linux, l'uso efficace della cronologia può essere un notevole aumento della produttività. In effetti, una volta che avrai imparato i 15 esempi che ho fornito qui, troverai l'utilizzo della riga di comando più divertente e divertente.
1. Visualizza il timestamp utilizzando HISTTIMEFORMAT
In genere, quando si digita la cronologia dalla riga di comando, viene visualizzato il comando # e il comando. A scopo di controllo, può essere utile visualizzare il timestamp insieme al comando come mostrato di seguito.
# export HISTTIMEFORMAT='%F %T ' # history | more 1 2008-08-05 19:02:39 service network restart 2 2008-08-05 19:02:39 exit 3 2008-08-05 19:02:39 id 4 2008-08-05 19:02:39 cat /etc/redhat-release
2. Cerca nella cronologia usando Control+R
Credo fermamente che questa potrebbe essere la caratteristica della storia più utilizzata di frequente. Quando hai già eseguito un comando molto lungo, puoi semplicemente cercare nella cronologia utilizzando una parola chiave ed eseguire nuovamente lo stesso comando senza doverlo digitare completamente. Premi CTRL+R e digita la parola chiave . Nell'esempio seguente, ho cercato rosso , che mostrava il comando precedente “cat /etc/redhat-release ” nella storia che conteneva la parola rosso.
# [Press Ctrl+R from the command prompt, which will display the reverse-i-search prompt] (reverse-i-search)`red': cat /etc/redhat-release [Note: Press enter when you see your command, which will execute the command from the history] # cat /etc/redhat-release Fedora release 9 (Sulphur)
A volte vuoi modificare un comando dalla cronologia prima di eseguirlo. Per es. puoi cercare httpd , che visualizzerà servizio httpd stop dalla cronologia dei comandi, seleziona questo comando e modifica l'arresto in inizio ed eseguilo di nuovo come mostrato di seguito.
# [Press Ctrl+R from the command prompt, which will display the reverse-i-search prompt] (reverse-i-search)`httpd': service httpd stop [Note: Press either left arrow or right arrow key when you see your command, which will display the command for you to edit, before executing it] # service httpd start
3. Ripeti rapidamente il comando precedente utilizzando 4 metodi diversi
A volte potresti finire per ripetere i comandi precedenti per vari motivi. Di seguito sono riportati i 4 diversi modi per ripetere l'ultimo comando eseguito.
- Utilizza la freccia su per visualizzare il comando precedente e premere invio per eseguirlo.
- Digita !! e premi invio dalla riga di comando
- Digita !-1 e premi invio dalla riga di comando.
- Premi Ctrl+P visualizzerà il comando precedente, premi invio per eseguirlo
4. Esegui un comando specifico dalla cronologia
Nell'esempio seguente, se vuoi ripetere il comando #4, puoi fare !4 come mostrato di seguito.
# history | more 1 service network restart 2 exit 3 id 4 cat /etc/redhat-release # !4 cat /etc/redhat-release Fedora release 9 (Sulphur)
5. Esegui il comando precedente che inizia con una parola specifica
Tipo ! seguite dalle lettere iniziali del comando che si desidera rieseguire. Nell'esempio seguente, digitando !ps e invio, è stato eseguito il comando precedente che inizia con ps, ovvero 'ps aux | grep yp'.
# !ps ps aux | grep yp root 16947 0.0 0.1 36516 1264 ? Sl 13:10 0:00 ypbind root 17503 0.0 0.0 4124 740 pts/0 S+ 19:19 0:00 grep yp
6. Controlla il numero totale di righe nella cronologia usando HISTSIZE
Aggiungi le due righe seguenti a .bash_profile e accedi nuovamente alla shell bash per vedere la modifica. In questo esempio, nella cronologia di bash verranno memorizzati solo 450 comandi.
# vi ~/.bash_profile HISTSIZE=450 HISTFILESIZE=450
7. Modifica il nome del file della cronologia utilizzando HISTFILE
Per impostazione predefinita, la cronologia è archiviata in ~/.bash_history file. Aggiungi la seguente riga a .bash_profile e accedi nuovamente alla shell bash, per memorizzare il comando history nel file .commandline_warrior invece del file .bash_history. Devo ancora capire un uso pratico per questo. Vedo che questo viene utilizzato quando si desidera tenere traccia dei comandi eseguiti da terminali diversi utilizzando nomi di file di cronologia diversi.
# vi ~/.bash_profile HISTFILE=/root/.commandline_warrior
Se hai un buon motivo per cambiare il nome del file della cronologia, condividilo con me, poiché sono interessato a scoprire come stai utilizzando questa funzione.
8. Elimina la voce ripetuta continua dalla cronologia utilizzando HISTCONTROL
Nell'esempio seguente pwd è stato digitato tre volte, quando fai la cronologia, puoi vederne tutte e 3 le occorrenze continue. Per eliminare i duplicati, imposta HISTCONTROL su ignorati come mostrato di seguito.
# pwd # pwd # pwd # history | tail -4 44 pwd 45 pwd 46 pwd [Note that there are three pwd commands in history, after executing pwd 3 times as shown above] 47 history | tail -4 # export HISTCONTROL=ignoredups # pwd # pwd # pwd # history | tail -3 56 export HISTCONTROL=ignoredups 57 pwd [Note that there is only one pwd command in the history, even after executing pwd 3 times as shown above] 58 history | tail -4
9. Cancella i duplicati nell'intera cronologia utilizzando HISTCONTROL
Ignorati mostrati sopra rimuovono i duplicati solo se sono comandi consecutivi. Per eliminare i duplicati nell'intera cronologia, imposta HISTCONTROL su cancellazioni come mostrato di seguito.
# export HISTCONTROL=erasedups # pwd # service httpd stop # history | tail -3 38 pwd 39 service httpd stop 40 history | tail -3 # ls -ltr # service httpd stop # history | tail -6 35 export HISTCONTROL=erasedups 36 pwd 37 history | tail -3 38 ls -ltr 39 service httpd stop [Note that the previous service httpd stop after pwd got erased] 40 history | tail -6
10. Forza la cronologia a non ricordare un comando particolare usando HISTCONTROL
Quando esegui un comando, puoi indicare alla cronologia di ignorare il comando impostando HISTCONTROL su ignorespace E digitando uno spazio davanti al comando come mostrato di seguito. Vedo molti amministratori di sistema junior entusiasti di questo, poiché possono nascondere un comando dalla cronologia. È bene capire come funziona ignorespace. Ma, come best practice, non nascondere di proposito nulla dalla cronologia.
# export HISTCONTROL=ignorespace # ls -ltr # pwd # service httpd stop [Note that there is a space at the beginning of service, to ignore this command from history] # history | tail -3 67 ls -ltr 68 pwd 69 history | tail -3
11. Cancella tutta la cronologia precedente usando l'opzione -c
A volte potresti voler cancellare tutta la cronologia precedente, ma continuare a far avanzare la cronologia.
# history -c
12. Sostituisci le parole dai comandi della cronologia
Durante la ricerca nella cronologia, potresti voler eseguire un comando diverso ma utilizzare lo stesso parametro del comando che hai appena cercato.
Nell'esempio seguente, !!:$ accanto al comando vi ottiene l'argomento dal comando precedente al comando corrente.
# ls anaconda-ks.cfg anaconda-ks.cfg # vi !!:$ vi anaconda-ks.cfg
Nell'esempio seguente, !^ accanto al comando vi ottiene il primo argomento dal comando precedente (es. comando cp) al comando corrente (es. comando vi).
# cp anaconda-ks.cfg anaconda-ks.cfg.bak anaconda-ks.cfg # vi !^ vi anaconda-ks.cfg
13. Sostituisci un argomento specifico con un comando specifico.
Nell'esempio seguente, !cp:2 cerca il comando precedente nella cronologia che inizia con cp e prende il secondo argomento di cp e lo sostituisce con il comando ls -l come mostrato di seguito.
# cp ~/longname.txt /really/a/very/long/path/long-filename.txt # ls -l !cp:2 ls -l /really/a/very/long/path/long-filename.txt
Nell'esempio seguente, !cp:$ cerca il comando precedente nella cronologia che inizia con cp e prende l'ultimo argomento (in questo caso, che è anche il secondo argomento come mostrato sopra) di cp e lo sostituisce con il comando ls -l come mostrato di seguito.
# ls -l !cp:$ ls -l /really/a/very/long/path/long-filename.txt
14. Disabilita l'utilizzo della cronologia utilizzando HISTSIZE
Se vuoi disabilitare tutta la cronologia e non vuoi che la shell bash ricordi i comandi che hai digitato, imposta HISTSIZE su 0 come mostrato di seguito.
# export HISTSIZE=0 # history # [Note that history did not display anything]
15. Ignora comandi specifici dalla cronologia usando HISTIGNORE
A volte potresti non voler ingombrare la tua cronologia con comandi di base come pwd e ls. Usa HISTIGNORE per specificare tutti i comandi che vuoi ignorare dalla cronologia. Si noti che l'aggiunta di ls a HISTIGNORE ignora solo ls e non ls -l. Quindi, devi fornire il comando esatto che vorresti ignorare dalla cronologia.
# export HISTIGNORE="pwd:ls:ls -ltr:" # pwd # ls # ls -ltr # service httpd stop # history | tail -3 79 export HISTIGNORE="pwd:ls:ls -ltr:" 80 service httpd stop 81 history [Note that history did not record pwd, ls and ls -ltr]
Lettura consigliata
Bash 101 Hacks, di Ramesh Natarajan . Passo la maggior parte del mio tempo in ambiente Linux. Quindi, naturalmente sono un grande fan della riga di comando di Bash e degli script di shell. 15 anni fa, quando stavo lavorando su diverse versioni di *nix, scrivevo molto codice sulla shell C e sulla shell Korn. Negli anni successivi, quando ho iniziato a lavorare su Linux come amministratore di sistema, ho praticamente automatizzato ogni possibile attività utilizzando lo scripting della shell Bash. Sulla base della mia esperienza con Bash, ho scritto l'eBook Bash 101 Hacks che contiene 101 esempi pratici sia sulla riga di comando di Bash che sugli script di shell. Se stavi pensando di padroneggiare Bash, fatti un favore e leggi questo libro, che ti aiuterà a prendere il controllo della tua riga di comando di Bash e degli script della shell.
Fantastici articoli su Linux
Di seguito sono riportati alcuni fantastici 15 esempi articoli che potresti trovare utili.
- Comando Unix LS:15 esempi pratici
- Fai una presa sul Grep! – 15 Esempi pratici di comandi Grep
- Linux Crontab:15 fantastici esempi di Cron Job
- Mamma, l'ho trovato! — 15 Esempi pratici di comandi Trova Linux