![Deschideți fișierele mai repede cu indicatorul de marcaje pentru Ubuntu](/f/593a23fbddef9dcf49d98174590e2ce9.gif?width=100&height=100)
The '!'
simbol sau operator în Linux poate fi folosit ca a Negație logică operator cât şi să prelua comenzi din istorie cu ajustări sau la rulați comenzile executate anterior cu modificare.
Cele mai multe dintre următoarele comenzi Linux utilizare cu '!'
simbolul poate varia între diferitele cochilii. În timp ce exemplele pe care le-am oferit sunt utilizate în mod obișnuit în shell-ul bash, alte câteva shell-uri Linux poate avea implementări diferite sau poate să nu suporte deloc anumite utilizări ale simbolului „!”.
Să ne scufundăm în utilizările uimitoare și misterioase ale '!'
simbol sau operator în comenzile Linux.
Cuprins
Este posibil să nu fiți conștient de faptul că puteți rula o comandă de la dvs comanda istoric (comenzi executate deja/anterior). Pentru a începe mai întâi, găsiți numărul comenzii rulând „istorie‘comandă.
$ istorie.
Pentru a rula o comandă din istoric după numărul său de comandă, puteți utiliza '!'
simbol urmat de numărul comenzii, așa cum se arată.
$ !1551.
Când executați comanda de mai sus, va rula comanda de sus la numărul rândului 1551 din istoria ta.
Vă rugăm să rețineți că numărul real al comenzii poate varia în funcție de istoricul comenzilor dvs. Puteți utiliza comanda history pentru a vizualiza lista de comenzi împreună cu numerele de rând ale acestora.
Puteți rula acele comenzi pe care le-ați rulat anterior prin secvența lor de rulare, ultima comandă de rulare va fi reprezentată -1, ultimul ca -2, al șaptelea ultimul ca -7, și așa mai departe.
De exemplu, dacă doriți să rulați din nou comanda care a fost executată în urmă cu șase, opt sau a zecea comenzi, puteți utiliza !-n
, Unde n
este numărul de comenzi la care doriți să faceți referire.
$ istorie. $ !-6. $ !-8. $ !-10.
Trebuie să listez conținutul directorului „/home/$USER/Binary/firefox‘Așa că am tras.
$ ls /home/$USER/Binary/firefox.
Apoi mi-am dat seama că ar fi trebuit să trag”ls -l‘ pentru a vedea ce fișier este executabil acolo. Deci ar trebui să tastau din nou întreaga comandă? Nu, nu am nevoie. Trebuie doar să port ultimul argument la această nouă comandă ca:
$ ls -l !$
Aici !$
va transporta argumentele transmise în ultima comandă la această nouă comandă.
Să presupunem că am creat un fișier text 1.txt pe desktop.
$ atingeți /home/avi/Desktop/1.txt.
și apoi copiați-l în „/home/avi/Downloads‘ folosind calea completă de ambele părți cu comanda cp.
$ cp /home/avi/Desktop/1.txt /home/avi/downloads.
Acum am trecut două argumente cu cp comanda. Prima este ‘/home/avi/Desktop/1.txt"și al doilea este"/home/avi/Downloads‘, hai să le gestionăm diferit, doar executăm ecou [argumente]
pentru a imprima ambele argumente diferit.
$ echo „Primul argument este: !^” $ echo „Al doilea argument este: !cp: 2”
Notă: primul argument poate fi tipărit ca “!^”
iar restul argumentelor pot fi imprimate prin executare „![Name_of_Command]:[Number_of_argument]”
.
În exemplul de mai sus, prima comandă a fost „cp‘, iar al doilea argument a fost necesar pentru tipărire. Prin urmare „!cp: 2”
, dacă vreo comandă spune xyz este rulat cu 5 argumente și trebuie să obțineți al 4-lea argument, puteți utiliza „!xyz: 4”
, și folosiți-l după cum doriți. Toate argumentele pot fi accesate de “!*”
.
Putem executa ultimele comenzi executate pe baza cuvintelor cheie. O putem înțelege astfel:
$ ls /home > /dev/null [Comandă 1] $ ls -l /home/avi/Desktop > /dev/null [Comandă 2] $ ls -la /home/avi/Descărcări > /dev/null [Comandă 3] $ ls -lA /usr/bin > /dev/null [Comandă 4]
Aici am folosit comanda ls dar cu comutatoare diferite și pentru foldere diferite. Mai mult, am trimis către ieșirea fiecărei comenzi la '/dev/nullpentru a menține consola curată.
Acum executați ultimele comenzi de rulare pe baza cuvintelor cheie.
$! ls [Comandă 1] $! ls -l [Comandă 2] $! ls -la [Comandă 3] $! ls -lA [Comandă 4]
Verificați ieșirea și veți fi uimit că executați comenzi deja executate doar de ls
Cuvinte cheie.
Puteți rula/modifica ultima comandă executată folosind (!!)
operator, care este o notație scurtă care vă permite să vă referiți la comanda anterioară executată în linia de comandă.
De exemplu, ziua trecută am rulat un script cu o singură linie aflați adresa IP a Linux-ului mașinărie.
$ adresă ip arată | grep inet | grep -v 'inet6'| grep -v '127.0.0.1' | awk „{printează $2}” | cut -f1 -d/
Apoi, brusc, mi-am dat seama că trebuie să redirecționez rezultatul scriptului de mai sus către un fișier ip.txt, si ce ar trebui sa fac? Ar trebui să tastez din nou întreaga comandă și redirecționează rezultatul către un fișier? Ei bine, o soluție ușoară este de utilizat SUS
tasta de navigare și adăugați „> ip.txt”
pentru a redirecționa ieșirea către un fișier.
$ adresă ip arată | grep inet | grep -v 'inet6'| grep -v '127.0.0.1' | awk „{printează $2}” | cut -f1 -d/ > ip.txt.
Mulțumiri Mântuitorului Vieții SUS
tasta de navigare aici. Acum luați în considerare condiția de mai jos, data viitoare când rulez scriptul de mai jos.
$ ifconfig | grep „adresă inet:” | awk „{printează $2}” | grep -v '127.0.0.1' | tăiați -f2 -d:
De îndată ce rulez scriptul, promptul bash a returnat o eroare cu mesajul „bash: ifconfig: comanda nu a fost găsită”, nu mi-a fost greu să ghicesc că rulez această comandă ca utilizator unde ar trebui să fie rulată ca root.
Deci care este soluția? este dificil să te autentifici la root și apoi să tastați din nou întreaga comandă! De asemenea (Tasta de navigare SUS) în ultimul exemplu nu a venit în ajutor aici. Asa de? trebuie să sunăm “!!”
fără ghilimele, care va apela ultima comandă pentru acel utilizator.
$ su -c „!!” rădăcină.
Aici su este utilizatorul comutator care este rădăcină, -c
este să rulați comanda specificată ca utilizator și cea mai importantă parte !!
va fi înlocuită cu comandă și ultima comandă de rulare va fi înlocuită aici. Da! Trebuie să furnizați o parolă de root.
În Linux, !
operator (cunoscut sub numele de „bang” operator) este folosit pentru extinderea istoricului care vă permite să vă referiți la comenzile anterioare din istoricul comenzilor și să efectuați diverse operații cu acestea.
Pentru a elimina toate fișierele dintr-un director, cu excepția unui anumit fișier (important_file.txt), puteți folosi comanda rm cu !
operator așa cum se arată.
$ rm !(fișier_important.txt)
Pentru a elimina toate tipurile de fișiere din folder, cu excepția celui a cărui extensie este „.pdf
‘.
$ $ rm !(*.pdf)
Aici vom folosi '! -d'
pentru a valida dacă directorul există sau nu este urmat de Operatorul Logic AND (&&)
pentru a imprima acel director nu există și Operator logic SAU (||)
pentru a imprima directorul este prezent.
Logica este, când ieșirea de [! -d /home/avi/Tecmint ]
este 0, va executa ceea ce se află dincolo de logic ȘI altfel va merge la SAU logic (||)
și executați ceea ce se află dincolo de logic SAU.
$ [! -d /home/avi/Tecmint ] && printf '\nnu există un astfel de director /home/avi/Tecmint\n' || printf „\n/home/avi/Directorul Tecmint există\n”
Similar cu condiția de mai sus, dar aici dacă directorul dorit nu există, va ieși din comandă.
$ [! -d /home/avi/Tecmint ] && exit.
O implementare generală în limbajul de scripting în care dacă directorul dorit nu există, va crea unul.
[! -d /home/avi/Tecmint ] && mkdir /home/avi/Tecmint.
Asta este tot pentru acum. Dacă cunoașteți sau întâlniți orice altă utilizare a '!'
ceea ce merită știut, poate doriți să ne oferiți sugestia dvs. în feedback. Rămâneți conectat!