IL '!'
simbolo o operatore in Linux può essere utilizzato come a Negazione Logica operatore così come a recuperare i comandi dalla cronologia con modifiche o a eseguire comandi eseguiti in precedenza con modifica.
La maggior parte dei seguenti Comandi Linux utilizzo con '!'
simbolo può variare tra diversi gusci. Mentre gli esempi che ho fornito sono comunemente usati nella shell bash, alcune altre shell Linux potrebbe avere implementazioni diverse o potrebbe non supportare affatto determinati usi del simbolo "!".
Immergiamoci negli usi sorprendenti e misteriosi di '!'
simbolo o operatore nei comandi di Linux.
Sommario
Potresti non essere consapevole del fatto che puoi eseguire un comando dal tuo comando storia (comandi già/precedentemente eseguiti). Per iniziare, trova il numero del comando eseguendo il comando "storia' comando.
$ storia.
Per eseguire un comando dalla cronologia tramite il suo numero di comando, puoi usare il file '!'
simbolo seguito dal numero del comando come mostrato.
$ !1551.
Quando si esegue il comando precedente, verrà eseguito il file comando superiore al numero di riga 1551 dalla tua storia
Tieni presente che il numero di comando effettivo può variare a seconda della cronologia dei comandi. È possibile utilizzare il comando history per visualizzare l'elenco dei comandi insieme ai relativi numeri di riga.
Puoi eseguire quei comandi che hai eseguito in precedenza dalla loro sequenza di esecuzione come verrà rappresentato l'ultimo comando di esecuzione -1, il penultimo come -2, il settimo come -7, e così via.
Ad esempio, se si desidera eseguire nuovamente il comando che è stato eseguito sei, otto o dieci comandi fa, è possibile utilizzare il file !-N
, Dove N
è il numero di comandi a cui vuoi fare riferimento.
$ storia. $ !-6. $ !-8. $ !-10.
Devo elencare il contenuto della directory '/home/$USER/Binary/firefox' così ho licenziato.
$ ls /home/$USER/Binary/firefox.
Poi ho capito che avrei dovuto licenziare 'ls -l' per vedere quale file è eseguibile lì. Quindi dovrei digitare di nuovo l'intero comando? No, non ne 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.
Diciamo che ho creato un file di testo 1.txt sul desktop.
$ toccare /home/avi/Desktop/1.txt.
e poi copialo in '/home/avi/Downloads‘ utilizzando il percorso completo su entrambi i lati con il file comando cp.
$ cp /home/avi/Desktop/1.txt /home/avi/download.
Ora abbiamo passato due argomenti con il cp comando. Il primo è '/home/avi/Desktop/1.txt' e il secondo è '/home/avi/Downloads', gestiamoli in modo diverso, basta eseguire eco [argomenti]
per stampare entrambi gli argomenti in modo diverso.
$ echo "Il primo argomento è: !^" $ echo “Il secondo argomento è: !cp: 2”
Nota Il primo argomento può essere stampato come “!^”
e il resto degli argomenti può essere stampato eseguendo "![Nome_di_comando]:[Numero_di_argomento]"
.
Nell'esempio sopra, il primo comando era 'cp' e il secondo argomento era necessario per stampare. Quindi “!cp: 2”
, se qualsiasi comando dice xyz viene eseguito con 5 argomenti ed è necessario ottenere il 4° argomento, è possibile utilizzare “!xyz: 4”
e usalo come preferisci. È possibile accedere a tutti gli argomenti tramite “!*”
.
Possiamo eseguire gli ultimi comandi eseguiti sulla base di parole chiave. Possiamo capirlo così:
$ ls /home > /dev/null [Comando 1] $ ls -l /home/avi/Desktop > /dev/null [Comando 2] $ ls -la /home/avi/Download > /dev/null [Comando 3] $ ls -lA /usr/bin > /dev/null [Comando 4]
Qui abbiamo usato il comando ls ma con interruttori diversi e per cartelle diverse. Inoltre, abbiamo inviato al output di ogni comando A '/dev/null‘ per mantenere pulita la console.
Ora esegui gli ultimi comandi di esecuzione sulla base di parole chiave.
$! ls [Comando 1] $! ls -l [Comando 2] $! ls -la [Comando 3] $! ls -lA [Comando 4]
Controlla l'output e rimarrai stupito dal fatto che stai eseguendo comandi già eseguiti ls
parole chiave.
Puoi eseguire/modificare il tuo ultimo comando eseguito usando (!!)
operatore, che è una notazione abbreviata che consente di fare riferimento al comando precedente eseguito nella riga di comando.
Ad esempio, l'ultimo giorno ho eseguito uno script di una riga a scoprire l'indirizzo IP di Linux macchina.
$ indirizzo ip mostra | grep inet | grep -v 'inet6'| grep -v '127.0.0.1' | awk '{print $2}' | taglia -f1 -d/
Poi improvvisamente ho capito che dovevo reindirizzare l'output dello script sopra a un file ip.txt, quindi cosa dovrei fare? Dovrei ridigitare di nuovo l'intero comando e reindirizzare l'output su un file? Bene, una soluzione facile è usare SU
tasto di navigazione e aggiungi '>ip.txt'
per reindirizzare l'output su un file.
$ indirizzo ip mostra | grep inet | grep -v 'inet6'| grep -v '127.0.0.1' | awk '{print $2}' | cut -f1 -d/> > ip.txt.
Grazie al Salvatore della vita SU
chiave di navigazione qui. Ora considera la condizione seguente, la prossima volta che eseguo lo script di una riga di seguito.
$ ifconfig | grep "indirizzo inet:" | awk '{print $2}' | grep -v '127.0.0.1' | taglia -f2 -d:
Non appena eseguo lo script, il prompt di bash ha restituito un errore con il messaggio "bash: ifconfig: comando non trovato”, non è stato difficile per me indovinare di eseguire questo comando come utente dove dovrebbe essere eseguito come root.
Quindi qual è la soluzione? è difficile accedere a root e quindi digitare nuovamente l'intero comando! Anche (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 “!!” radice.
Qui su è lo switch user che è il root, -C
è eseguire il comando specificato come utente e la parte più importante !!
verrà sostituito da comando e l'ultimo comando di esecuzione verrà sostituito qui. Sì! Devi fornire una password di root.
In Linux, il !
operatore (noto come "scoppio” operatore) viene utilizzato per l'espansione della cronologia che consente di fare riferimento a comandi precedenti nella cronologia dei comandi ed eseguire varie operazioni con essi.
Per rimuovere tutti i file da una directory ad eccezione di un file specifico (file_importante.txt), è possibile utilizzare il comando rm con !
operatore come mostrato.
$ rm !(file_importante.txt)
Per rimuovere tutti i tipi di file dalla cartella tranne quello la cui estensione è '.PDF
‘.
$ $ rm !(*.pdf)
Qui useremo '! -D'
per convalidare se la directory esiste o non è seguita dall'operatore AND logico (&&)
per stampare quella directory non esiste e Operatore OR logico (||)
per stampare la directory è presente.
La logica è, quando l'uscita di [! -d /home/avi/Tecmint ]
È 0, eseguirà ciò che si trova oltre Logical E altrimenti andrà a Logical OR (||)
ed esegui ciò che sta oltre la Logica O.
$ [! -d /home/avi/Tecmint ] && printf '\nnon esiste tale directory /home/avi/Tecmint\n' || printf '\n/home/avi/La directory Tecmint esiste\n'
Simile alla condizione precedente, ma qui se la directory desiderata non esiste uscirà dal comando.
$ [! -d /home/avi/Tecmint ] && esci.
Un'implementazione generale nel linguaggio di scripting 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!