GNU/Linux >> Linux Esercitazione >  >> Linux

10 usi sorprendenti e misteriosi di (!) Simbolo o operatore nei comandi Linux

Il '!' il simbolo o l'operatore in Linux possono essere usati come Negazione logica operatore nonché per recuperare comandi dalla cronologia con modifiche o per eseguire comandi eseguiti in precedenza con modifiche. Tutti i comandi seguenti sono stati controllati esplicitamente in bash Shell. Anche se non ho controllato, ma uno di questi non funzionerà in un'altra shell. Qui entriamo negli usi sorprendenti e misteriosi di '!' simbolo o operatore nei comandi Linux.

1. Esegui un comando dalla cronologia per numero di comando.

Potresti non essere consapevole del fatto che puoi eseguire un comando dalla tua cronologia comando (comandi già/precedentemente eseguiti). Per iniziare, trova prima il numero del comando eseguendo "cronologia ' comando.

$ history

Ora esegui un comando da cronologia solo dal numero in cui appare, nell'output di cronologia . Supponiamo di eseguire un comando che appare al numero 1551 nell'output di "storia ' comando.

$ !1551

Ed esegue il comando (comando principale nel caso precedente), che era elencato al numero 1551 . Questo modo per recuperare i comandi già eseguiti è molto utile specialmente in caso di comandi lunghi. Devi solo chiamarlo usando ![Numero in corrispondenza del quale appare nell'output del comando cronologia] .

2. Esegui il comando eseguito in precedenza come 2° ultimo comando, 7° ultimo comando, ecc.

Puoi eseguire quei comandi che hai eseguito in precedenza in base alla loro sequenza di esecuzione, poiché l'ultimo comando di esecuzione sarà rappresentato come -1 , penultimo come -2 , settima come -7 ,….

Prima esecuzione della cronologia comando per ottenere un elenco degli ultimi comandi eseguiti. È necessario eseguire la cronologia comando, in modo da essere sicuro che non ci siano comandi come rm command > file e altri solo per assicurarsi di non eseguire accidentalmente alcun comando pericoloso. E poi seleziona Sesto ultimo comando, Otto ultimo comando e Decimo ultimo comando.

$ history
$ !-6
$ !-8
$ !-10
3. Passa gli argomenti dell'ultimo comando che eseguiamo al nuovo comando senza ridigitare

Devo elencare il contenuto della directory "/home/$USER/Binary/firefox ' così ho sparato.

$ ls /home/$USER/Binary/firefox

Poi ho capito che avrei dovuto sparare "ls -l ' per vedere quale file è eseguibile lì? Quindi dovrei digitare di nuovo l'intero comando! No non ho bisogno. Ho solo bisogno di portare l'ultimo argomento a questo nuovo comando come:

$ ls -l !$

Qui !$ trasporterà gli argomenti passati nell'ultimo comando a questo nuovo comando.

4. Come gestire due o più argomenti usando (!)

Diciamo che ho creato un file di testo 1.txt sul desktop.

$ touch /home/avi/Desktop/1.txt

e quindi copialo in '/home/avi/Downloads ' utilizzando il percorso completo su entrambi i lati con cp comando.

$ cp /home/avi/Desktop/1.txt /home/avi/downloads

Ora abbiamo passato due argomenti con cp comando. Il primo è "/home/avi/Desktop/1.txt ' e il secondo è '/home/avi/Downloads ', gestiamoli in modo diverso, esegui semplicemente echo [arguments] per stampare entrambi gli argomenti in modo diverso.

$ echo “1st Argument is : !^”
$ echo “2nd Argument is : !cp:2”

Nota Il 1° argomento può essere stampato come “!^” e il resto degli argomenti può essere stampato eseguendo “![Name_of_Command]:[Number_of_argument]” .

Nell'esempio sopra il primo comando era "cp ' ed era necessario il 2° argomento per la stampa. Quindi “!cp:2” , se c'è un comando pronuncia xyz viene eseguito con 5 argomenti e devi ottenere il 4° argomento, puoi usare “!xyz:4” , e usalo come preferisci. Tutti gli argomenti sono accessibili da “!*” .

5. Esegui l'ultimo comando sulla base delle parole chiave

Possiamo eseguire l'ultimo comando eseguito sulla base di parole chiave. Possiamo capirlo come segue:

$ ls /home > /dev/null						[Command 1]
$ ls -l /home/avi/Desktop > /dev/null		                [Command 2]	
$ ls -la /home/avi/Downloads > /dev/null	                [Command 3]
$ ls -lA /usr/bin > /dev/null				        [Command 4]

Qui abbiamo usato lo stesso comando (ls) ma con interruttori diversi e per cartelle diverse. Inoltre abbiamo inviato l'output di ogni comando a "/dev/null ' poiché non ci occuperemo dell'output del comando, anche la console rimane pulita.

Ora esegui l'ultimo comando eseguito sulla base delle parole chiave.

$ ! ls					[Command 1]
$ ! ls -l				[Command 2]	
$ ! ls -la				[Command 3]
$ ! ls -lA				[Command 4]

Controlla l'output e rimarrai stupito dal fatto che stai eseguendo comandi già eseguiti solo da ls parole chiave.

6. Il potere di !! Operatore

Puoi eseguire/modificare il tuo ultimo comando di esecuzione usando (!!) . Chiamerà l'ultimo comando eseguito con alter/tweak nel comando corrente. Ti mostriamo lo scenario

L'ultimo giorno eseguo uno script one-liner per ottenere il mio IP privato, quindi eseguo,

$ ip addr show | grep inet | grep -v 'inet6'| grep -v '127.0.0.1' | awk '{print $2}' | cut -f1 -d/

Poi improvvisamente ho capito che dovevo reindirizzare l'output dello script sopra in un file ip.txt , quindi cosa dovrei fare? Devo ridigitare nuovamente l'intero comando e reindirizzare l'output su un file? Bene, una soluzione semplice è usare UP tasto di navigazione e aggiungi '> ip.txt' per reindirizzare l'output a un file come.

$ ip addr show | grep inet | grep -v 'inet6'| grep -v '127.0.0.1' | awk '{print $2}' | cut -f1 -d/ > ip.txt

Grazie al Salvatore della vita UP tasto di navigazione qui. Ora considera la condizione seguente, la prossima volta che eseguo sotto lo script one-liner.

$ ifconfig | grep "inet addr:" | awk '{print $2}' | grep -v '127.0.0.1' | cut -f2 -d:

Non appena eseguo lo script, il prompt di bash ha restituito un errore con il messaggio “bash: ifconfig: command not found” , Non è stato difficile per me indovinare di aver eseguito questo comando come utente dove dovrebbe essere eseguito come root.

Allora qual è la soluzione? È difficile accedere a root e quindi digitare di nuovo l'intero comando! Inoltre (Tasto di navigazione SU ) nell'ultimo esempio non è venuto in soccorso qui. Così? Dobbiamo chiamare “!!” senza virgolette, che chiamerà l'ultimo comando per quell'utente.

$ su -c “!!” root

Qui su è switch user che è root, -c è eseguire il comando specifico come utente e la parte più importante !! verrà sostituito da comando e l'ultimo comando eseguito verrà sostituito qui. Sì! Devi fornire la password di root.

Uso !! principalmente nei seguenti scenari,

1. Quando eseguo apt-get comando come utente normale, di solito ricevo un errore che dice che non hai l'autorizzazione per l'esecuzione.

$ apt-get upgrade && apt-get dist-upgrade

Errore Opps... non preoccuparti, esegui il comando seguente per farlo funzionare correttamente...

$ su -c !!

Come faccio per,

$ service apache2 start
or
$ /etc/init.d/apache2 start
or
$ systemctl start apache2

OOPS Utente non autorizzato a svolgere tale compito, quindi corro..

$ su -c 'service apache2 start'
or
$ su -c '/etc/init.d/apache2 start'
or
$ su -c 'systemctl start apache2'
7. Esegui un comando che interessa tutti i file tranne ![FILE_NAME]

Il ! (NON logico ) può essere usato per eseguire il comando su tutti i file/estensioni tranne che dietro '!' .

R. Rimuovi tutti i file da una directory tranne quella il cui nome è 2.txt .

$ rm !(2.txt)

B. Rimuovere tutti i tipi di file dalla cartella tranne quello la cui estensione è "pdf '.

$ $ rm !(*.pdf)
8. Verificare se una directory (diciamo /home/avi/Tecmint) esiste o no? Printf se la suddetta directory esiste o meno.

Qui useremo '! -d' per convalidare se la directory esiste o meno seguita dall'operatore AND logico (&&) per stampare quella directory non esiste e Operatore OR logico (||) per stampare la directory è presente.

La logica è, quando l'output di [ ! -d /home/avi/Tecmint ] è 0 , eseguirà ciò che si trova oltre il AND logico altrimenti andrà su Logical OR (||) ed esegui ciò che si trova oltre il OR logico .

$ [ ! -d /home/avi/Tecmint ] && printf '\nno such /home/avi/Tecmint directory exist\n' || printf '\n/home/avi/Tecmint directory exist\n'
9. Verificare se esiste una directory o no? In caso contrario uscire dal comando.

Simile alla condizione sopra, ma qui se la directory desiderata non esiste, uscirà dal comando.

$ [ ! -d /home/avi/Tecmint ] && exit
10. Crea una directory (diciamo test) nella tua home directory se non esiste.

Un'implementazione generale in Scripting Language in cui se la directory desiderata non esiste, ne creerà una.

[ ! -d /home/avi/Tecmint ] && mkdir /home/avi/Tecmint

È tutto per ora. Se conosci o ti imbatti in qualsiasi altro uso di '!' che vale la pena sapere, potresti fornirci il tuo suggerimento nel feedback. Resta connesso!


Linux
  1. Controlla i comandi e le attività con il comando watch di Linux

  2. Comandi Linux - Panoramica ed esempi

  3. Come salvare i comandi Linux e usarli su richiesta

  4. Comandi Linux dalla A alla Z

  5. Comando Linux per elencare tutti i comandi e gli alias disponibili

Comandi Linux - Guida completa

Come eseguire automaticamente script e comandi di avvio di Linux

Come correggere errori e refusi nei precedenti comandi della console in Linux

Come eseguire più comandi Linux in un unico comando

Come leggere l'output e gli usi dei comandi principali di Linux

Come eseguire più comandi Linux contemporaneamente nel terminale Linux