10 Użi tal-għaġeb u misterjużi ta' (!) Simbolu jew Operatur fil-Kmandi tal-Linux


Is-simbolu jew l-operatur ! fil-Linux jista’ jintuża bħala operatur ta’ Negazzjoni Loġika kif ukoll biex iġib kmandi mill-istorja bi tweaks jew biex imexxi kmand immexxi minn qabel b’modifika. Il-kmandi kollha hawn taħt ġew iċċekkjati b'mod espliċitu f'bash Shell. Għalkemm ma ċċekkjejtx iżda maġġuri minn dawn mhux se jaħdmu f'qoxra oħra. Hawnhekk nidħlu fl-użi aqwa u misterjużi tas-simbolu jew operatur ! fil-kmandi tal-Linux.

Jista' jkun li ma tkunx konxju tal-fatt li tista' tmexxi kmand mill-kmand tal-istorja tiegħek (kmandi diġà esegwiti/qabel). Biex tibda l-ewwel sib in-numru tal-kmand billi tħaddem il-kmand tal-'istorja'.

$ history

Issa mexxi kmand mill-istorja biss bin-numru li fih jidher, fl-output tal-istorja. Ngħidu mexxi kmand li jidher fin-numru 1551 fl-output tal-kmand storja.

$ !1551

U, imexxi l-kmand (kmand ta 'fuq fil-każ ta' hawn fuq), li kien elenkat fin-numru 1551. Dan il-mod biex jiġi rkuprat kmand diġà esegwit huwa utli ħafna speċjalment fil-każ ta 'dawk il-kmandi li huma twal. Għandek bżonn biss li ssejħilha bl-użu ![Numru li fih jidher fl-output tal-kmand tal-istorja].

Tista' tmexxi dawk il-kmandi li ħadt qabel billi s-sekwenza ta' tħaddim tagħhom tkun l-aħħar kmand tal-ġirja se jkun rappreżentat bħala -1, it-tieni l-aħħar bħala -2, is-seba' l-aħħar bħala -7,....

L-ewwel mexxi kmand tal-istorja biex tikseb lista tal-aħħar kmand esegwit. Huwa meħtieġ li tmexxi kmand tal-istorja, sabiex tkun tista 'tkun ċert li m'hemm l-ebda kmand bħal rm command > file u oħrajn biss biex tiżgura li ma tmexxi l-ebda kmand perikoluż aċċidentalment. U mbagħad iċċekkja s-Sitt l-aħħar kmand, Tmien l-aħħar kmand u l-Għaxar l-aħħar kmand.

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

Għandi bżonn inniżżel il-kontenut tad-direttorju '/home/$USER/Binary/firefox' u għalhekk sparejt.

$ ls /home/$USER/Binary/firefox

Imbagħad indunajt li kelli nispara 'ls -l' biex nara liema fajl huwa eżekutibbli hemmhekk? Allura għandi ttajpja l-kmand kollu mill-ġdid! Le m'għandix bżonn. Għandi bżonn biss inġorr l-aħħar argument għal dan il-kmand il-ġdid bħala:

$ ls -l !$

Hawnhekk !$ se jġorr argumenti mgħoddija fl-aħħar kmand lil dan il-kmand il-ġdid.

Ejja ngħidu li ħloqt fajl test 1.txt fuq id-Desktop.

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

u mbagħad ikkopjaha għal '/home/avi/Downloads' billi tuża mogħdija sħiħa fuq kull naħa bil-kmand cp.

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

Issa għadna żewġ argumenti bil-kmand cp. L-ewwel huwa '/home/avi/Desktop/1.txt' u t-tieni huwa '/home/avi/Downloads', ejja nittrattawhom b'mod differenti, biss tesegwixxi echo [argumenti] biex tipprintja ż-żewġ argumenti b'mod differenti.

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

Innota l-ewwel argument jista' jiġi stampat bħala \!^” u l-bqija tal-argumenti jistgħu jiġu stampati billi tesegwixxi \![Name_of_Command]:[Number_of_argument]”.

Fl-eżempju ta 'hawn fuq l-ewwel kmand kien 'cp' u t-tieni argument kien meħtieġ għall-istampar. Għalhekk \!cp:2”, jekk xi kmand jgħid li xyz jitħaddem b'5 argumenti u għandek bżonn tikseb ir-4 argument, tista' tuża \!xyz:4”, u użaha kif tixtieq. L-argumenti kollha jistgħu jiġu aċċessati minn \!*”.

Nistgħu nwettqu l-aħħar kmand esegwit fuq il-bażi tal-kliem kjavi. Nistgħu nifhmuh kif ġej:

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

Hawnhekk użajna l-istess kmand (ls) iżda bi swiċċijiet differenti u għal folders differenti. Barra minn hekk bgħatna lill-output ta 'kull kmand lil '/dev/null' peress li mhux se nittrattaw l-output tal-kmand ukoll il-console tibqa nadifa.

Issa Esegwixxi l-aħħar kmand tal-ġirja fuq il-bażi tal-kliem kjavi.

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

Iċċekkja l-output u tkun mistagħġeb li qed tmexxi kmandi diġà esegwiti biss bil-kliem kjavi ls.

Tista' tmexxi/tbiddel il-kmand tal-aħħar ġirja tiegħek billi tuża (!!). Se jsejjaħ il-kmand tal-aħħar run b'alter/tweak fil-kmand attwali. Ejja nuruk ix-xenarju

L-aħħar ġurnata nmexxi script one-liner biex nikseb l-IP privat tiegħi u għalhekk niġri,

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

Imbagħad f'daqqa waħda sibt li għandi bżonn nidderieġi mill-ġdid l-output ta 'l-iskrittura ta' hawn fuq għal fajl ip.txt, allura x'għandi nagħmel? Għandi erġa' nikteb il-kmand kollu u nerġa' nidderieġi l-output għal fajl? Ukoll soluzzjoni faċli hija li tuża UP ċavetta tan-navigazzjoni u żid > ip.txt biex terġa 'tidderieġi l-output għal fajl bħala.

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

Grazzi għall-ħajja Saviour UP ċavetta tan-navigazzjoni hawn. Issa ikkunsidra l-kundizzjoni hawn taħt, il-ħin li jmiss I run taħt skript ta 'linja waħda.

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

Malli nmexxi l-iskript, il-pront tal-bash irritorna żball bil-messaġġ \bash: ifconfig: kmand not found”, Ma kienx diffiċli għalija li naħseb li nmexxi dan il-kmand bħala utent fejn huwa għandu jitmexxa bħala għerq.

Allura x'inhi s-soluzzjoni? Huwa diffiċli li tidħol għall-għeruq u mbagħad ittajpja l-kmand kollu mill-ġdid! Ukoll (UP Navigation Key) fl-aħħar eżempju ma waslitx biex isalva hawn. Allura? Għandna bżonn insejħu \!!” mingħajr kwotazzjonijiet, li se jsejjaħ l-aħħar kmand għal dak l-utent.

$ su -c “!!” root

Hawnhekk su huwa swiċċ utent li huwa root, -c huwa li tmexxi l-kmand speċifiku bħala l-utent u l-aktar parti importanti !! se tiġi sostitwita bil-kmand u l-aħħar ġirja kmand se jiġi sostitwit hawn. Iva! Għandek bżonn tipprovdi l-password tal-għeruq.

Jien nagħmel użu minn !! l-aktar fix-xenarji li ġejjin,

1. Meta nmexxi apt-get kmand bħala utent normali, normalment niġi żball li ngħid li m'għandekx permess biex tesegwixxi.

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

Żball Opps... tinkwetax tesegwixxi taħt il-kmand biex tirnexxi..

$ su -c !!

L-istess mod nagħmel għal,

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

Utent OOPS mhux awtorizzat li jwettaq tali kompitu, għalhekk niġri ..

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

Il-! (Loġiku MHUX) jista' jintuża biex imexxi l-kmand fuq il-fajls/estensjonijiet kollha ħlief dak wara !.

A. Neħħi l-fajls kollha minn direttorju ħlief dak li l-isem tiegħu huwa 2.txt.

$ rm !(2.txt)

B. Neħħi t-tip ta 'fajl kollu mill-folder ħlief dak li l-estensjoni tiegħu hija 'pdf'.

$ $ rm !(*.pdf)

Hawnhekk se nużaw ! -d biex tivvalida jekk id-direttorju jeżistix jew le segwit minn Logical AND Operator (&&) biex tipprintja dak id-direttorju ma jeżistix u Logical OR Operator (||) > biex jistampaw id-direttorju huwa preżenti.

Il-loġika hija, meta l-output ta '[ ! -d /home/avi/Tecmint ] huwa 0, se jesegwixxi dak li jinsab lil hinn mill-Loġiku U inkella se jmur għal Loġiku JEW (||) u jesegwixxi dak li jinsab lil hinn mill-Loġiku JEW.

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

Simili għall-kundizzjoni ta 'hawn fuq, iżda hawnhekk jekk id-direttorju mixtieq ma jeżistix se joħroġ mill-kmand.

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

Implimentazzjoni ġenerali fl-Scripting Language fejn jekk id-direttorju mixtieq ma jeżistix, joħloq wieħed.

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

Dak kollu għalissa. Jekk taf jew tiltaqa' ma' xi użu ieħor ta' ! li ta' min ikun jaf, tista' tixtieq tagħtina s-suġġeriment tiegħek fir-rispons. Żomm konnessi!