Matumizi 10 ya Ajabu na ya Ajabu ya (!) Alama au Opereta katika Amri za Linux


Alama ya ! au opereta katika Linux inaweza kutumika kama opereta ya Kukanusha Kimantiki na vile vile kuleta amri kutoka kwa historia na viboreshaji au kutekeleza amri ya awali kwa urekebishaji. Amri zote hapa chini zimeangaliwa wazi katika bash Shell. Ingawa sijaangalia lakini kubwa kati ya hizi hazitaenda kwenye ganda lingine. Hapa tunaingia katika matumizi ya ajabu na ya ajabu ya alama ya ! au opereta katika amri za Linux.

Huenda usijue ukweli kwamba unaweza kuendesha amri kutoka kwa amri yako ya historia (amri zilizotekelezwa tayari/zilizotekelezwa hapo awali). Ili kuanza kwanza pata nambari ya amri kwa kutekeleza amri ya 'historia'.

$ history

Sasa endesha amri kutoka kwa historia kwa nambari ambayo inaonekana, katika matokeo ya historia. Sema endesha amri inayoonekana kwa nambari 1551 katika matokeo ya amri ya 'historia'.

$ !1551

Na, inaendesha amri (amri ya juu katika kesi iliyo hapo juu), ambayo iliorodheshwa kwa nambari 1551. Njia hii ya kurejesha amri iliyotekelezwa tayari inasaidia sana hasa katika kesi ya amri hizo ambazo ni ndefu. Unahitaji tu kuiita ukitumia ![Nambari ambayo inaonekana kwenye matokeo ya amri ya historia].

Unaweza kuendesha amri hizo ambazo umeendesha hapo awali kwa mlolongo wao wa kukimbia kuwa amri ya mwisho ya kukimbia itawakilishwa kama -1, ya pili ya mwisho kama -2, ya saba ya mwisho kama -7,….

Kwanza endesha amri ya historia kupata orodha ya amri iliyotekelezwa mwisho. Ni muhimu kutekeleza amri ya historia, ili uweze kuwa na uhakika kwamba hakuna amri kama rm command > file na zingine ili kuhakikisha kuwa hauendeshi amri yoyote hatari kwa bahati mbaya. Na kisha angalia amri ya sita ya mwisho, amri ya nane ya mwisho na amri ya kumi ya mwisho.

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

Ninahitaji kuorodhesha yaliyomo kwenye saraka '/home/$USER/Binary/firefox' kwa hivyo nilifuta kazi.

$ ls /home/$USER/Binary/firefox

Kisha nikagundua kuwa nilipaswa kumfukuza kazi 'ls -l' ili kuona ni faili gani inayoweza kutekelezwa hapo? Kwa hivyo napaswa kuandika amri nzima tena! Hapana sihitaji. Nahitaji tu kubeba hoja ya mwisho kwa amri hii mpya kama:

$ ls -l !$

Hapa !$ itabeba hoja zilizopitishwa kwa amri ya mwisho kwa amri hii mpya.

Hebu tuseme nimeunda faili ya maandishi 1.txt kwenye Desktop.

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

na kisha unakili kwa '/home/avi/Downloads' kwa kutumia njia kamili kwa kila upande na cp amri.

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

Sasa tumepitisha hoja mbili na cp amri. Ya kwanza ni ‘/home/avi/Desktop/1.txt‘ na ya pili ni ‘/home/avi/Downloads‘, hebu tuyashughulikie kwa njia tofauti, tekeleza tu echo [arguments] ili kuchapisha hoja zote mbili tofauti.

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

Kumbuka hoja ya 1 inaweza kuchapishwa kama \!^” na hoja zingine zinaweza kuchapishwa kwa kutekeleza \![Name_of_Command]:[Namba_ya_hoja]”.

Katika mfano hapo juu amri ya kwanza ilikuwa 'cp' na hoja ya 2 ilihitajika kuchapishwa. Kwa hivyo \!cp:2”, ikiwa amri yoyote inasema xyz inaendeshwa kwa hoja 5 na unahitaji kupata hoja ya 4, unaweza kutumia \!xyz:4”, na uitumie upendavyo. Hoja zote zinaweza kufikiwa kwa \!*”.

Tunaweza kutekeleza amri ya mwisho iliyotekelezwa kwa misingi ya maneno muhimu. Tunaweza kuelewa kama ifuatavyo:

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

Hapa tumetumia amri sawa (ls) lakini kwa swichi tofauti na kwa folda tofauti. Zaidi ya hayo tumetuma matokeo ya kila amri kwa '/dev/null' kwani hatutashughulika na matokeo ya amri pia koni inabaki safi.

Sasa Tekeleza amri ya mwisho ya kukimbia kwa msingi wa maneno.

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

Angalia matokeo na utashangaa kuwa unaendesha amri zilizotekelezwa tayari kwa ls maneno muhimu.

Unaweza kuendesha/kubadilisha amri yako ya mwisho ya kukimbia kwa kutumia (!!). Itaita amri ya mwisho ya kukimbia na alter/tweak katika amri ya sasa. Hebu tuonyeshe mazingira

Siku ya mwisho ninaendesha hati ya mjengo mmoja kupata IP yangu ya kibinafsi kwa hivyo ninaendesha,

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

Kisha ghafla nikagundua kuwa ninahitaji kuelekeza matokeo ya hati hapo juu kwa ip.txt ya faili, kwa hivyo nifanye nini? Ninapaswa kuandika tena amri nzima na kuelekeza pato kwa faili? Suluhisho rahisi ni kutumia UP ufunguo wa kusogeza na kuongeza > ip.txt kuelekeza towe kwa faili kama.

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

Shukrani kwa ufunguo wa kusogeza wa life Savior UP hapa. Sasa fikiria hali ya chini, wakati mwingine nitakapoendesha chini ya hati ya mjengo mmoja.

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

Mara tu ninapoendesha hati, haraka ya bash ilirudisha kosa na ujumbe \bash: ifconfig: amri haipatikani, Haikuwa ngumu kwangu kudhani ninaendesha amri hii kama mtumiaji ambapo inapaswa kuendeshwa kama mzizi.

Kwa hivyo ni suluhisho gani? Ni vigumu kuingia kwenye mizizi na kisha kuandika amri nzima tena! Pia (Ufunguo wa Urambazaji wa UP) katika mfano wa mwisho haukuja kuokoa hapa. Kwa hiyo? Tunahitaji kupiga simu \!!” bila nukuu, ambayo itaita amri ya mwisho kwa mtumiaji huyo.

$ su -c “!!” root

Hapa su ni kubadili mtumiaji ambayo ni mzizi, -c ni kutekeleza amri maalum kama mtumiaji na sehemu muhimu zaidi !! itabadilishwa na amri na amri ya mwisho ya kukimbia itabadilishwa hapa. Ndiyo! Unahitaji kutoa nenosiri la mizizi.

Natumia !! zaidi katika hali zifuatazo,

1. Ninapoendesha apt-get command kama mtumiaji wa kawaida, mimi hupata hitilafu nikisema huna ruhusa ya kutekeleza.

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

Hitilafu ya Opps...usijali tekeleza amri hapa chini ili ifanikiwe..

$ su -c !!

Vile vile mimi hufanya kwa,

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

Mtumiaji wa OOPS hajaidhinishwa kubeba kazi kama hiyo, kwa hivyo ninaendesha ..

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

! (Logical NOT) inaweza kutumika kutekeleza amri kwenye faili/kiendelezi vyote isipokuwa kilicho nyuma ya !.

A. Ondoa faili zote kutoka kwa saraka isipokuwa moja ambayo jina lake ni 2.txt.

$ rm !(2.txt)

B. Ondoa aina zote za faili kwenye kabrasha isipokuwa lile la upanuzi ambalo ni ‘pdf’.

$ $ rm !(*.pdf)

Hapa tutatumia ! -d ili kuthibitisha ikiwa saraka ipo au haifuatiwi na Mantiki NA Opereta (&&) ili kuchapisha saraka hiyo haipo na Mantiki AU Opereta (||) kuchapisha saraka ipo.

Mantiki ni, wakati matokeo ya [ ! -d /home/avi/Tecmint ] ni 0, itatekeleza yale ambayo sio ya Kimantiki NA sivyo itaenda kwa Mantiki AU (||) na kutekeleza kile kilicho zaidi ya Mantiki AU.

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

Sawa na hali ya hapo juu, lakini hapa ikiwa saraka inayotaka haipo itatoka kwa amri.

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

Utekelezaji wa jumla katika Lugha ya Kuandika ambapo ikiwa saraka inayotaka haipo, itaunda moja.

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

Hayo ni yote kwa sasa. Ikiwa unajua au kukutana na matumizi mengine yoyote ya ! ambayo yanafaa kujua, unaweza kupenda kutupa pendekezo lako katika maoni. Endelea kushikamana!