10 (!) Simbola vai operatora apbrīnojami un noslēpumaini lietojumi Linux komandās


Simbolu ! operētājsistēmā Linux var izmantot kā loģiskās negācijas operatoru, kā arī ar nolaižamām darbībām ielādēt komandas no vēstures vai palaist iepriekš izpildītu komandu ar modifikāciju. Visas zemāk norādītās komandas ir skaidri pārbaudītas bash Shell. Lai gan es neesmu pārbaudījis, bet lielākā daļa no tām nedarbosies citā čaulā. Šeit mēs iedziļināmies apbrīnojamajos un noslēpumainajos ! simbola vai operatora izmantojumos Linux komandās.

Jūs, iespējams, nezināt, ka komandu varat palaist no savas vēstures komandas (jau/agrāk izpildītas komandas). Lai sāktu, vispirms atrodiet komandas numuru, palaižot komandu “vēsture”.

$ history

Tagad vēstures izlaidumā palaidiet komandu no vēstures tikai pēc skaitļa, ar kādu tā parādās. Pieņemsim, ka palaižat komandu, kas parādās ar numuru 1551 komandas ‘vēsture’ izvadē.

$ !1551

Un tas palaiž komandu (augšējā komanda iepriekš minētajā gadījumā), kas bija norādīta ar numuru 1551. Šis veids, kā atgūt jau izpildītu komandu, ir ļoti noderīgs, īpaši garo komandu gadījumā. Jums to vienkārši vajag izsaukt, izmantojot! [Skaitlis, ar kuru tas tiek parādīts komandas vēstures izvadē].

Jūs varat palaist tās komandas, kuras esat izpildījis iepriekš, to darbības secībā, jo pēdējā palaišanas komanda tiks attēlota kā -1, otrā pēdējā kā -2, septītā pēdējā kā -7,….

Vispirms palaidiet komandu Vēsture, lai iegūtu pēdējo izpildīto komandu sarakstu. Ir nepieciešams palaist komandu vēsture, lai pārliecinātos, ka nav tādas komandas kā rm komanda> fails un citas, lai pārliecinātos, ka nejauši neizpildāt nevienu bīstamu komandu. Un pēc tam pārbaudiet sesto pēdējo komandu, astoto pēdējo komandu un desmito pēdējo komandu.

$ history
$ !-6
$ !-8
$ !-10

Man jāuzskaita direktorija ‘/ home/$USER/Binary/firefox’ saturs, tāpēc es to izšāvu.

$ ls /home/$USER/Binary/firefox

Tad es sapratu, ka man vajadzēja atlaist ‘ls -l’, lai redzētu, kurš fails tur ir izpildāms? Tāpēc man vajadzētu vēlreiz ierakstīt visu komandu! Nē man nevajag. Man vienkārši jānes pēdējais arguments šai jaunajai komandai kā:

$ ls -l !$

Šeit ! $ tiks ievietoti argumenti, kas pēdējā komandā tika nodoti šai jaunajai komandai.

Pieņemsim, ka es uz darbvirsmas izveidoju teksta failu 1.txt.

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

un pēc tam nokopējiet to uz “/ home/avi/Downloads”, izmantojot pilnu ceļu abās pusēs ar komandu cp.

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

Tagad mēs esam nodevuši divus argumentus ar komandu cp. Pirmais ir ‘/home/avi/Desktop/1.txt’ un otrais ir ‘/ home/avi/Downloads’, ļauj tos apstrādāt atšķirīgi, vienkārši izpildiet echo [argumenti] , lai abus argumentus drukātu atšķirīgi.

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

1. piezīmi. Argumentu var izdrukāt kā “! ^” , bet pārējos argumentus var izdrukāt, izpildot “! [Name_of_Command]: [Number_of_argument]” .

Iepriekš minētajā piemērā pirmā komanda bija ‘cp’, un drukāšanai bija nepieciešams otrais arguments. Tādējādi “! Cp: 2” , ja kāda komanda saka, ka xyz tiek palaists ar 5 argumentiem un jums ir jāiegūst ceturtais arguments, varat izmantot “! Xyz: 4” , un izmantojiet to kā vēlaties. Visiem argumentiem var piekļūt, izmantojot “! *” .

Mēs varam izpildīt pēdējo izpildīto komandu, pamatojoties uz atslēgvārdiem. Mēs to varam saprast šādi:

$ 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]

Šeit mēs izmantojām to pašu komandu (ls), bet ar dažādiem slēdžiem un dažādām mapēm. Turklāt mēs esam nosūtījuši katras komandas izvadi uz “/ dev/null”, jo mēs netiksim galā ar komandas izvadi, arī konsole paliek tīra.

Tagad izpildiet pēdējo palaišanas komandu, pamatojoties uz atslēgvārdiem.

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

Pārbaudiet izvadi, un jūs būsiet pārsteigts, ka jūs izpildāt jau izpildītas komandas, izmantojot tikai ls atslēgvārdus.

Pēdējo palaišanas komandu varat palaist/mainīt, izmantojot (!!) . Tas izsauks pēdējo palaišanas komandu ar alter/tweak pašreizējā komandā. Ļauj parādīt scenāriju

Pagājušajā dienā es palaidu vienas līnijas skriptu, lai iegūtu savu privāto IP, tāpēc es skrienu

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

Tad pēkšņi es sapratu, ka man ir jānovirza iepriekš minētā skripta izeja uz failu ip.txt, un kas man jādara? Vai man vajadzētu vēlreiz pārrakstīt visu komandu un novirzīt izvadi uz failu? Vienkāršs risinājums ir izmantot navigācijas taustiņu UP un pievienot > ip.txt , lai novirzītu izvadi uz failu kā.

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

Pateicoties šeit esošajam navigācijas taustiņam Life Glābējs UP . Tagad apsveriet šo nosacījumu, nākamreiz, kad es palaidīšu zem viena līnijas skripta.

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

Tiklīdz es palaidu skriptu, bash uzvedne atgrieza kļūdu ar ziņojumu “bash: ifconfig: komanda nav atrasta” . Man nebija grūti uzminēt, ka es izpildu šo komandu kā lietotāju tur, kur vajadzētu palaist kā root.

Tātad, kāds ir risinājums? Ir grūti pieteikties, lai iesakņotos un pēc tam vēlreiz ierakstītu visu komandu! Arī pēdējā piemērā (UP navigācijas atslēga) šeit nenāca glābt. Tātad? Mums ir jāizsauc “!!” bez pēdiņām, kas izsauks pēdējo šī lietotāja komandu.

$ su -c “!!” root

Šeit su ir switch user, kurš ir root, -c ir jāizpilda konkrētā komanda kā lietotājam, un vissvarīgākā daļa !! tiks aizstāta ar komandu un last run komandu šeit tiks aizstāts. Jā! Jums jānorāda root parole.

!! galvenokārt izmantoju šādos gadījumos:

1. Kad es izpildu komandu apt-get kā parasts lietotājs, parasti tiek parādīta kļūda, sakot, ka jums nav atļaujas izpildīt.

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

Opps kļūda ... neuztraucieties izpildiet zemāk esošo komandu, lai tā būtu veiksmīga.

$ su -c !!

Tāpat kā es daru,

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

OOPS lietotājs nav pilnvarots veikt šādu uzdevumu, tāpēc es skrienu.

$ su -c 'service apache2 start'
or
$ su -c '/etc/init.d/apache2 start'
or
$ su -c 'systemctl start apache2'

! (Logical NOT) var izmantot, lai palaistu komandu visiem failiem/paplašinājumiem, izņemot to, kas atrodas aiz ! .

A. Noņemiet visus failus no direktorija, izņemot to, kura nosaukums ir 2.txt.

$ rm !(2.txt)

B. No mapes noņemiet visu faila tipu, izņemot to, kura paplašinājums ir ‘pdf’.

$ $ rm !(*.pdf)

Šeit mēs izmantosim ! -d lai pārbaudītu, vai direktorija pastāv vai pēc tās nav Logical AND Operator (&&) , lai drukātu šo direktoriju, nav un Logical OR Operator (||) , lai drukātu direktoriju, ir klāt.

Loģika ir tad, kad [! -d/home/avi/Tecmint] ir 0, tas izpildīs to, kas atrodas ārpus loģiskā, UN citādi tas nonāks pie loģiskā VAI (||) un izpildīs to, kas atrodas ārpus loģiskā OR.

$ [ ! -d /home/avi/Tecmint ] && printf '\nno such /home/avi/Tecmint directory exist\n' || printf '\n/home/avi/Tecmint directory exist\n'

Līdzīgi iepriekš minētajam nosacījumam, taču šeit, ja vēlamais direktorijs nepastāv, tas tiks iziets no komandas.

$ [ ! -d /home/avi/Tecmint ] && exit

Skriptu valodas vispārēja ieviešana, ja, ja vēlamais direktorijs nepastāv, tas to izveidos.

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

Tas pagaidām ir viss. Ja zināt vai saskaraties ar kādu citu ! izmantošanas veidu, par kuru ir vērts zināt, varat sniegt mums savu ieteikumu atsauksmēs. Saglabājiet savienojumu!