10 mögnuð og dularfull notkun (!) tákns eða stjórnanda í Linux skipunum


! táknið eða stjórnandann í Linux er hægt að nota sem rökræna neitun stjórnanda sem og til að sækja skipanir úr sögunni með klipum eða til að keyra áður keyrða skipun með breytingum. Allar skipanir hér að neðan hafa verið athugaðar sérstaklega í bash Shell. Þó ég hafi ekki athugað en meirihluti þessara mun ekki keyra í annarri skel. Hér er farið í ótrúlega og dularfulla notkun ! tákns eða stjórnanda í Linux skipunum.

Þú gætir ekki verið meðvitaður um þá staðreynd að þú getur keyrt skipun frá söguskipuninni þinni (þegar/fyrr framkvæmdar skipanir). Til að byrja skaltu fyrst finna skipunarnúmerið með því að keyra 'sögu' skipunina.

$ history

Keyrðu nú skipun úr sögu bara með því númeri sem hún birtist á, í úttak sögunnar. Segðu keyra skipun sem birtist í númerinu 1551 í úttakinu „sögu“ skipunarinnar.

$ !1551

Og það keyrir skipunina (efri skipun í ofangreindu tilviki), sem var skráð á númer 1551. Þessi leið til að sækja þegar framkvæmda skipun er mjög gagnleg, sérstaklega ef um er að ræða þessar skipanir sem eru langar. Þú þarft bara að kalla það með því að nota ![Númer sem það birtist í úttak söguskipunar].

Þú getur keyrt þessar skipanir sem þú hefur keyrt áður með því að keyra röð þeirra er síðasta keyrsluskipunin verður táknuð sem -1, næstsíðast sem -2, sjöunda síðasta sem -7,….

Keyrðu fyrst söguskipunina til að fá lista yfir síðast framkvæmda skipunina. Það er nauðsynlegt að keyra söguskipunina, svo að þú getir verið viss um að það sé engin skipun eins og rm command > file og aðrar bara til að tryggja að þú keyrir ekki hættulega skipun fyrir slysni. Og hakaðu svo við sjötta síðasta skipun, Átta síðasta skipun og tíunda síðasta skipun.

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

Ég þarf að skrá innihald möppunnar „/home/$USER/Binary/firefox“ svo ég rak.

$ ls /home/$USER/Binary/firefox

Þá áttaði ég mig á því að ég hefði átt að skjóta 'ls -l' til að sjá hvaða skrá er keyranleg þar? Svo ætti ég að slá inn alla skipunina aftur! Nei ég þarf ekki. Ég þarf bara að flytja síðustu rökin við þessa nýju skipun sem:

$ ls -l !$

Hér mun !$ bera rök sem send voru í síðustu skipun í þessa nýju skipun.

Segjum að ég hafi búið til textaskrá 1.txt á skjáborðinu.

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

og afritaðu það síðan í '/home/avi/Downloads' með því að nota heila slóð á hvorri hlið með cp skipuninni.

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

Nú höfum við samþykkt tvö rök með cp skipuninni. Í fyrsta lagi er ‘/home/avi/Desktop/1.txt‘ og í öðru lagi er ‘/home/avi/Downloads‘, við skulum meðhöndla þau á annan hátt, bara keyra echo [rök] til að prenta báðar röksemdir á annan hátt.

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

Athugið að 1. frumbreyta er hægt að prenta sem \!^” og restina af röksemdum er hægt að prenta með því að keyra \![Name_of_Command]:[Number_of_argument]”.

Í dæminu hér að ofan var fyrsta skipunin 'cp' og 2. rök var þörf til að prenta. Þess vegna \!cp:2”, ef einhver skipun segir að xyz sé keyrð með 5 rökum og þú þarft að fá 4. frumbreytu, geturðu notað \!xyz:4, og notaðu það eins og þú vilt. Hægt er að nálgast allar röksemdir með \!*.

Við getum framkvæmt síðustu framkvæmda skipunina á grundvelli leitarorða. Við getum skilið það sem hér segir:

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

Hér höfum við notað sömu skipunina (ls) en með mismunandi rofum og fyrir mismunandi möppur. Þar að auki höfum við sent til úttaks af hverri skipun á „/dev/null“ þar sem við ætlum ekki að takast á við úttak skipunarinnar heldur er stjórnborðið hreint.

Framkvæmdu nú síðustu keyrsluskipunina á grundvelli leitarorða.

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

Athugaðu úttakið og þú verður undrandi yfir því að þú sért að keyra skipanir sem þegar hafa verið framkvæmdar bara með ls lykilorðum.

Þú getur keyrt/breytt síðustu keyrsluskipuninni þinni með (!!). Það kallar á síðustu keyrsluskipunina með alter/tweak í núverandi skipun. Við skulum sýna þér atburðarásina

Síðasta daginn keyri ég einlínu skriftu til að fá einka IP minn svo ég keyri,

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

Svo skyndilega komst ég að því að ég þarf að beina úttakinu af ofangreindu handriti yfir í skrána ip.txt, svo hvað ætti ég að gera? Ætti ég að slá inn alla skipunina aftur og beina úttakinu í skrá? Jæja, auðveld lausn er að nota UP stýrihnappinn og bæta við > ip.txt til að beina úttakinu í skrá sem.

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

Þökk sé lífsfrelsaranum UP stýrihnappi hér. Íhugaðu nú ástandið hér að neðan, næst þegar ég keyri fyrir neðan einlínuhandrit.

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

Um leið og ég keyri skriftu, skilaði bash vísunin villu með skilaboðunum \bash: ifconfig: skipun fannst ekki, Það var ekki erfitt fyrir mig að giska á að ég keyri þessa skipun sem notandi þar sem hún ætti að keyra sem rót.

Svo hver er lausnin? Það er erfitt að skrá sig inn á rót og slá svo inn alla skipunina aftur! Einnig (UP Navigation Key) í síðasta dæmi kom ekki til bjargar hér. Svo? Við þurfum að kalla \!!” án gæsalappa, sem kallar á síðustu skipunina fyrir þann notanda.

$ su -c “!!” root

Hér er su switch user sem er rót, -c er að keyra sérstaka skipunina sem notandann og mikilvægasti hlutinn !! verður skipt út fyrir skipun og síðasta keyrslu skipun komi hér í stað. Já! Þú þarft að gefa upp lykilorð fyrir rót.

Ég nota !! aðallega í eftirfarandi atburðarásum,

1. Þegar ég keyri apt-get skipunina sem venjulegur notandi fæ ég venjulega villu um að þú hafir ekki leyfi til að keyra.

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

Upps villa ... ekki hafa áhyggjur keyrðu fyrir neðan skipunina til að ná árangri ..

$ su -c !!

Sama hátt og ég geri fyrir,

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

OOPS Notandi hefur ekki heimild til að sinna slíku verkefni, svo ég keyri ..

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

! (Rökrétt NOT) er hægt að nota til að keyra skipunina á öllum skrám/viðbót nema það sem er fyrir aftan !.

A. Fjarlægðu allar skrárnar úr möppu nema sú sem heitir 2.txt.

$ rm !(2.txt)

B. Fjarlægðu allar skráartegundir úr möppunni nema sú sem endingin á er 'pdf'.

$ $ rm !(*.pdf)

Hér munum við nota ! -d til að sannreyna hvort skráin sé til eða ekki fylgt eftir af Logical AND Operator (&&) til að prenta út að skráin sé ekki til og Logical OR Operator (||) til að prenta möppuna er til staðar.

Rökfræði er þegar úttakið á [ ! -d /home/avi/Tecmint ] er 0, það mun keyra það sem liggur handan Logical OG annars mun það fara í Logical OR (||) og keyra það sem liggur handan Logical OR.

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

Svipað og ofangreint ástand, en hér ef möppan sem óskað er eftir er ekki til mun hún hætta skipuninni.

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

Almenn útfærsla í Scripting Language þar sem ef æskileg möppu er ekki til mun hún búa til eina.

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

Það er allt í bili. Ef þú þekkir eða rekst á einhverja aðra notkun á ! sem vert er að vita, gætirðu viljað koma með tillögu þína í álitinu. Haltu sambandi!