GNU/Linux >> Linux Esercitazione >  >> Linux

15 Esempi di espansione della cronologia di Linux Bash che dovresti conoscere

La cronologia di Bash è molto potente. Capire come utilizzare efficacemente le espansioni della cronologia di bash ti renderà estremamente produttivo sulla riga di comando di Linux.

Questo articolo spiega 15 esempi che utilizzano le seguenti funzionalità di espansione della cronologia di bash:

  • Designatori di eventi:si riferisce a un comando particolare nella cronologia. Inizia con un !
  • Designatori di parole:si riferiscono a una parola particolare di una voce della cronologia. In genere questo viene combinato con un designatore pari. Anche i designatori e i designatori di parole sono separati da due punti
  • Modificatori:modifica il risultato della sostituzione effettuata dall'evento o dai designatori di parole

Questo articolo fa parte della nostra serie di tutorial Bash in corso.

Come già sai, per visualizzare tutte le voci della cronologia, utilizzare il comando cronologia. Questo mostrerà tutti i comandi che sono stati eseguiti in precedenza insieme al numero per quel comando nella tabella della cronologia.

$ history
1 tar cvf etc.tar /etc/
2 cp /etc/passwd /backup
3 ps -ef | grep http
4 service sshd restart
5 /usr/local/apache2/bin/apachectl restart

Designatori di eventi della cronologia di Bash

1. Esegui un comando specifico dalla cronologia usando !n

Se hai eseguito un comando in precedenza, invece di riscriverlo di nuovo, puoi eseguirlo rapidamente utilizzando il numero corrispondente del comando nella cronologia.

Ad esempio, per eseguire il comando n. 4, procedere come segue. Questo visualizzerà il comando n. 4 dalla cronologia e lo eseguirà immediatamente.

$ !4
service sshd restart

Per eseguire un comando che è stato digitato 2 comandi indietro, procedi come segue.

$ !-2

Per eseguire il comando precedente, esegui una delle seguenti operazioni:

$ !!

$ !-1

Puoi anche premere -P (se sei nella modalità emacs predefinita) per tornare al comando precedente.

Se hai abilitato la modifica dello stile vi per la riga di comando usando 'set -o vi', usa -k per arrivare al comando precedente.

2. Esegui un comando con parole chiave usando !string e !?string

Puoi anche utilizzare le parole chiave per eseguire un comando dalla cronologia.

L'esempio seguente cercherà il comando precedente che INIZIA con la parola chiave "ps" ed eseguilo. In questo esempio, riprende il comando precedente “ps -ef | grep http” e lo esegue.

$ !ps
ps -ef | grep http

L'esempio seguente cercherà il comando precedente che CONTENIS la parola chiave "Apache" ed eseguilo. In questo esempio, preleva il comando precedente "/usr/local/apache2/bin/apachectl restart" e lo esegue.

$ !?apache
/usr/local/apache2/bin/apachectl restart

3. Sostituisci una stringa dal comando precedente usando ^str1^str2^

Nell'esempio seguente, per prima cosa abbiamo eseguito il comando ls per verificare un file. Successivamente ci siamo resi conto che vogliamo visualizzare il contenuto del file. Invece di digitare nuovamente l'intero nome del file, possiamo semplicemente sostituire "ls" nel comando precedente con "cat" come mostrato di seguito.

$ ls /etc/cron.daily/logrotate

$ ^ls^cat^
cat /etc/cron.daily/logrotate

Nota:per ulteriori suggerimenti sulla cronologia di bash, fare riferimento a 15 esempi per padroneggiare la cronologia della riga di comando di Linux. Questo spiega come visualizzare il timestamp nella cronologia e come utilizzare varie variabili di ambiente relative alla cronologia, tra cui HISTTIMEFORMAT, HISTSIZE, HISTFILE, HISTCONTROL e HISTIGNORE

Designatori di parole della cronologia di Bash

I designatori di Word sono molto utili quando si desidera digitare un nuovo comando, ma utilizzare l'argomento di uno dei comandi eseguiti in precedenza. Alcuni degli esempi sono mostrati di seguito.

4. Ottieni il primo argomento di un comando usando :^

Nell'esempio seguente, "!cp:^" è stato fornito come argomento del comando "ls -l". “!cp:^” individua il comando precedente nella cronologia che inizia con “cp” e ottiene il primo argomento di quel comando.

$ cp /etc/passwd /backup

$ ls -l !cp:^
ls -l /etc/passwd

L'esempio seguente ottiene il primo argomento dal comando precedente.

$ ls -l !!:^

5. Ottieni l'ultimo argomento di un comando usando :$

Nell'esempio seguente, "!cp:$" è stato fornito come argomento del comando "ls -l". “!cp:$” individua il comando precedente nella cronologia che inizia con “cp” e ottiene l'ultimo argomento di quel comando.

$ cp /etc/passwd /backup

$ ls -l !cp:$
ls -l /backup

L'esempio seguente ottiene l'ultimo argomento dal comando precedente.

$ls -l !!:$

6. Ottieni l'ennesimo argomento di un comando usando :n

Nell'esempio seguente, "!tar:2" è stato fornito come argomento del comando "ls -l". “!tar:2” individua il comando precedente nella cronologia che inizia con “tar” e ottiene il 2° argomento di quel comando.

$ tar cvfz /backup/home-dir-backup.tar.gz /home

$ ls -l !tar:2
ls -l /backup/home-dir-backup.tar.gz

7. Ottieni tutti gli argomenti da un comando usando :*

Nell'esempio seguente, "!cp:*" è stato fornito come argomento del comando "ls -l". "!cp:*" individua il comando precedente nella cronologia che inizia con "cp" e ottiene tutti i suoi argomenti.

$ cp /etc/passwd /backup

$ ls -l !cp:*
ls -l /etc/passwd /backup

8. Fare riferimento alla parola cercata di recente utilizzando !%

Come spiegato sopra, “!?apache” cercherà il comando della cronologia precedente che CONTIENE la parola chiave “apache” e lo eseguirà.

$ /usr/local/apache2/bin/apachectl restart

$ !?apache
/usr/local/apache2/bin/apachectl restart

!% si riferirà all'intera parola a cui corrispondeva il precedente "?" cerca.

Ad esempio, se hai cercato in precedenza "?apache", "!%" corrisponderà all'intera parola "/usr/local/apache2/bin/apachectl". Nota che "/" viene considerato come parte di una parola in questo contesto.

Quindi, in questo caso, eseguendo quanto segue, puoi interrompere l'apache.

$ !% stop
/usr/local/apache2/bin/apachectl stop

9. Ottieni un intervallo di argomenti da un comando usando x-y

Nell'esempio seguente, "!tar:3-5" è stato fornito come argomento del comando "ls -l". “!tar:3-5” individua il comando precedente nella cronologia che inizia con “tar” e ottiene gli argomenti da 3 a 5.

$ tar cvf home-dir.tar john jason ramesh rita

$ ls -l !tar:3-5
ls -l john jason ramesh

Quanto segue ottiene tutti gli argomenti da 2.

$ ls -l !tar:2-$

Si prega di notare quanto segue:

  • !!:* Ottiene tutti gli argomenti dal comando precedente
  • !!:2* Ottiene tutti gli argomenti a partire dal 2° argomento.
  • !!:2-$ Come sopra. Ottiene tutti gli argomenti a partire dal 2° argomento.
  • !!:2- Ottiene tutti gli argomenti a partire dal 2° argomento (tranne l'ultimo argomento).

Modificatori della cronologia di Bash

I modificatori sono dati dopo la parola designatori, come spiegato negli esempi seguenti.

10. Rimuovi il nome del percorso finale da una parola usando :h

Nell'esempio seguente, "!!:$:h" prende l'ultimo argomento del comando precedente e rimuove il nome del percorso finale. In questo caso, rimuove il nome del file e ottiene solo il percorso completo.

$ ls -l /very/long/path/name/file-name.txt

$ ls -l !!:$:h
ls -l /very/long/path/name

11. Rimuovi tutti i percorsi iniziali da una parola usando :t

Questo è esattamente l'opposto dell'esempio precedente.

Nell'esempio seguente, "!!:$:t" prende l'ultimo argomento del comando precedente e rimuove tutti i nomi di percorso iniziali. In questo caso, ottiene solo il nome del file.

$ ls -l /very/long/path/name/file-name.txt

$ ls -l !!:$:t
ls -l file-name.txt

12. Rimuovere l'estensione del nome file da una parola utilizzando :r

Nell'esempio seguente, "!!:$:r" prende l'ultimo argomento del comando precedente e rimuove solo il ".suffix" (che qui è l'estensione del nome del file). In questo caso, ha rimosso .txt

$ ls -l /very/long/path/name/file-name.txt

$ ls -l !!:$:r
ls -l /very/long/path/name/file-name

13. Sed come Sostituzione nella cronologia di bash usando :s/str1/str2/

Invece di usare "^original^replacement^" come abbiamo discusso in precedenza, possiamo anche usare una sostituzione sed like nella cronologia di bash, come mostrato nell'esempio seguente. Questo potrebbe essere facile da ricordare. !! è chiamare il comando precedente, ":s/stringa-originale/stringa-replacement/" è la sintassi simile a sed per sostituire una stringa.

$ !!:s/ls -l/cat/

Puoi anche usare il flag g (insieme al flag s) per eseguire la sostituzione globale come mostrato di seguito. Questo è utile quando hai digitato in modo errato più parole e desideri cambiarle tutte insieme ed eseguire nuovamente il comando.

Nell'esempio seguente, per errore ho fornito "password" due volte (invece di passwd).

$ cp /etc/password /backup/password.bak

Per risolvere questo problema, esegui la seguente cronologia globale come sostituzione.

$ !!:gs/password/passwd/
cp /etc/passwd /backup/passwd.bak

14. Ripeti rapidamente la sostituzione usando :&

Se hai già eseguito con successo una sostituzione della cronologia bash come mostrato sopra, puoi ripetere la stessa sostituzione rapidamente usando :&.

Per errore ho digitato di nuovo "password" invece di "passwd" in un altro comando.

$ tar cvf password.tar /etc/password

Ora, invece di ridigitare il comando, o fare "gs/password/passwd", posso semplicemente usare ":&", che riutilizzerà l'ultima sostituzione. Usa ":g&" per riutilizzare l'ultima sostituzione a livello globale.

$ !!:g&
tar cvf passwd.tar /etc/passwd

15. Stampa il comando senza eseguirlo usando :p

Questo è molto utile quando si eseguono complesse sostituzioni della cronologia e si desidera visualizzare il comando finale prima di eseguirlo.

Nell'esempio seguente, "!tar:3-:p", in realtà non esegue il comando.

Dal momento che abbiamo dato ":p" qui, esegue solo la sostituzione e visualizza il nuovo comando. Dopo aver verificato l'espansione della cronologia di bash e se ritieni che questo sia il comando che intendevi eseguire, rimuovi ":p" ed eseguilo di nuovo.

$ tar cvf home-dir.tar john jason ramesh rita

$ tar cvfz new-file.tar !tar:3-:p
tar cvfz new-file.tar john jason ramesh

Linux
  1. 10 comandi che ogni utente Linux dovrebbe conoscere

  2. Come cancellare la cronologia di Bash su Linux

  3. Comando della cronologia di Linux

  4. 7 Esempi di comandi Linux df

  5. UNIX / Linux:esempi di comando bash history per ripetere gli ultimi comandi

Tutorial sui comandi della cronologia di Linux per principianti (8 esempi)

Comando della cronologia in Linux con esempi

Come abilitare il timestamp nella cronologia di Bash in Linux

Comando Bash Echo spiegato con esempi in Linux

5 semplici trucchi per la cronologia di Bash che ogni utente Linux dovrebbe conoscere

Esempi di comandi id in Linux