GNU/Linux >> Znalost Linux >  >> Linux

10 úžasných a záhadných použití (!) symbolu nebo operátoru v příkazech Linuxu

'!' symbol nebo operátor v Linuxu lze použít jako logickou negaci operátora a také načíst příkazy z historie pomocí vylepšení nebo spustit dříve spuštěný příkaz s úpravou. Všechny níže uvedené příkazy byly explicitně zkontrolovány v bash Shell. I když jsem to nezkontroloval, většina z nich nepoběží v jiném prostředí. Zde se podíváme na úžasné a tajemné použití '!' symbol nebo operátor v příkazech systému Linux.

1. Spusťte příkaz z historie podle čísla příkazu.

Možná si nejste vědomi skutečnosti, že můžete spustit příkaz ze své historie příkaz (již/dříve provedené příkazy). Chcete-li začít, nejprve vyhledejte číslo příkazu spuštěním „historie ‘ příkaz.

$ history

Nyní spusťte příkaz z historie pouze podle čísla, u kterého se objeví ve výstupu historie . Řekněme spustit příkaz, který se zobrazí na čísle 1551 ve výstupu ‘historie ‘ příkaz.

$ !1551

A spustí příkaz (ve výše uvedeném případě nejvyšší příkaz), který byl uveden pod číslem 1551 . Tento způsob načtení již provedeného příkazu je velmi užitečný zejména v případě těch příkazů, které jsou dlouhé. Stačí jej zavolat pomocí ![Číslo, pod kterým se objeví ve výstupu příkazu historie] .

2. Spustit dříve provedený příkaz jako 2. poslední příkaz, 7. poslední příkaz atd.

Můžete spouštět ty příkazy, které jste spustili dříve, jejich sekvence běhu bude poslední spuštěný příkaz reprezentován jako -1 , předposlední jako -2 , sedmé předposlední jako -7 ,….

Historie prvního spuštění příkaz k získání seznamu naposledy provedených příkazů. Je nutné spustit historii příkaz, takže si můžete být jisti, že neexistuje žádný příkaz jako rm command > file a další jen proto, abyste se ujistili, že náhodně nespustíte žádný nebezpečný příkaz. A pak zaškrtněte Šestý poslední příkaz, Osmý poslední příkaz a Desátý poslední příkaz.

$ history
$ !-6
$ !-8
$ !-10
3. Předejte argumenty posledního příkazu, který jsme spustili, novému příkazu bez přepisování

Potřebuji vypsat obsah adresáře ‘/home/$USER/Binary/firefox ‘ tak jsem vystřelil.

$ ls /home/$USER/Binary/firefox

Pak jsem si uvědomil, že jsem měl vystřelit ‘ls -l ‘ abyste viděli, který soubor je tam spustitelný? Měl bych tedy napsat celý příkaz znovu! Ne, nepotřebuji. Jen potřebuji přenést poslední argument do tohoto nového příkazu jako:

$ ls -l !$

Zde !$ bude nést argumenty předané v posledním příkazu tomuto novému příkazu.

4. Jak zacházet se dvěma nebo více argumenty pomocí (!)

Řekněme, že jsem vytvořil textový soubor 1.txt na ploše.

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

a poté jej zkopírujte do složky „/home/avi/Downloads ‘ pomocí úplné cesty na obě strany s cp příkaz.

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

Nyní jsme předali dva argumenty s cp příkaz. První je „/home/avi/Desktop/1.txt “ a druhá je „/home/avi/Downloads ‘, pojďme s nimi zacházet jinak, stačí provést echo [arguments] vytisknout oba argumenty odlišně.

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

Poznámka 1. argument lze vytisknout jako “!^” a zbytek argumentů lze vytisknout spuštěním “![Name_of_Command]:[Number_of_argument]” .

Ve výše uvedeném příkladu byl první příkaz „cp “ a k vytištění bylo potřeba 2. argumentu. Proto “!cp:2” , pokud nějaký příkaz řekněte xyz běží s 5 argumenty a potřebujete získat 4. argument, můžete použít “!xyz:4” a používejte jej, jak chcete. Všechny argumenty jsou přístupné pomocí “!*” .

5. Proveďte poslední příkaz na základě klíčových slov

Poslední provedený příkaz můžeme provést na základě klíčových slov. Můžeme to chápat následovně:

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

Zde jsme použili stejný příkaz (ls) ale s různými přepínači a pro různé složky. Navíc jsme na výstup každého příkazu odeslali „/dev/null ‘ protože se nebudeme zabývat výstupem příkazu, konzole zůstává čistá.

Nyní Proveďte příkaz posledního spuštění na základě klíčových slov.

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

Zkontrolujte výstup a budete překvapeni, že právě pomocí ls spouštíte již provedené příkazy klíčová slova.

6. Síla !! Operátor

Příkaz posledního spuštění můžete spustit/změnit pomocí (!!) . Zavolá příkaz posledního spuštění s alter/tweak v aktuálním příkazu. Ukážeme vám scénář

Minulý den jsem spustil jednořádkový skript, abych získal svou soukromou IP, takže spustím,

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

Pak jsem najednou zjistil, že musím přesměrovat výstup výše uvedeného skriptu do souboru ip.txt , tak co bych měl dělat? Mám celý příkaz přepsat znovu a přesměrovat výstup do souboru? Snadným řešením je použít UP navigační klávesu a přidejte '> ip.txt' přesměrovat výstup do souboru jako.

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

Díky Spasiteli života UP navigační klávesa zde. Nyní zvažte níže uvedenou podmínku, až příště spustím pod jednořádkovým skriptem.

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

Jakmile spustím skript, výzva bash vrátila chybu se zprávou “bash: ifconfig: command not found” , Nebylo pro mě těžké uhodnout, že jsem tento příkaz spustil jako uživatel, kde by měl být spuštěn jako root.

Jaké je tedy řešení? Je těžké se přihlásit do rootu a pak celý příkaz napsat znovu! Také (Navigační klávesa NAHORU ) v posledním příkladu sem nepřišel zachránit. Tak? Musíme zavolat “!!” bez uvozovek, což zavolá poslední příkaz pro daného uživatele.

$ su -c “!!” root

Zde su je přepnout uživatele, což je root, -c je spustit konkrétní příkaz jako uživatel a nejdůležitější část !! bude nahrazen příkazem a zde bude nahrazen příkaz posledního spuštění. To jo! Musíte zadat heslo uživatele root.

Používám !! většinou v následujících scénářích,

1. Když spustím apt-get jako normální uživatel se mi obvykle zobrazí chyba, že nemáte oprávnění ke spuštění.

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

Chyba Opps… nebojte se spusťte níže uvedený příkaz, aby byl úspěšný..

$ su -c !!

Stejným způsobem jako pro,

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

OOPS Uživatel nemá oprávnění provádět takový úkol, takže spustím..

$ su -c 'service apache2 start'
or
$ su -c '/etc/init.d/apache2 start'
or
$ su -c 'systemctl start apache2'
7. Spusťte příkaz, který ovlivní celý soubor kromě ![FILE_NAME]

! (Logické NE ) lze použít ke spuštění příkazu na všech souborech/příponách kromě těch, které jsou za '!' .

A. Odeberte všechny soubory z adresáře kromě toho, jehož název je 2.txt .

$ rm !(2.txt)

B. Odeberte ze složky všechny typy souborů kromě toho, jehož přípona je „pdf ‘.

$ $ rm !(*.pdf)
8. Zkontrolujte, zda adresář (řekněme /home/avi/Tecmint) existuje nebo ne? Printf, zda zmíněný adresář existuje nebo ne.

Zde použijeme '! -d' pro ověření, zda adresář existuje nebo není následován logickým operátorem AND (&&) pro tisk tohoto adresáře neexistuje a logický operátor OR (||) pro tisk je přítomen adresář.

Logika je, když výstup [ ! -d /home/avi/Tecmint ] je 0 , provede to, co leží za logickými A jinak to půjde do Logical OR (||) a provádět to, co leží za logickým NEBO .

$ [ ! -d /home/avi/Tecmint ] && printf '\nno such /home/avi/Tecmint directory exist\n' || printf '\n/home/avi/Tecmint directory exist\n'
9. Zkontrolujte, zda adresář existuje nebo ne? Pokud ne, ukončete příkaz.

Podobné jako výše uvedená podmínka, ale zde, pokud požadovaný adresář neexistuje, příkaz ukončí.

$ [ ! -d /home/avi/Tecmint ] && exit
10. Vytvořte adresář (řekněme test) ve svém domovském adresáři, pokud neexistuje.

Obecná implementace ve skriptovacím jazyce, kde pokud požadovaný adresář neexistuje, vytvoří jej.

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

To je prozatím vše. Pokud znáte nebo narazíte na jiné použití '!' což stojí za to vědět, můžete nám ve zpětné vazbě poskytnout svůj návrh. Zůstaňte ve spojení!


Linux
  1. Jak uložit příkazy Linuxu a používat je na vyžádání

  2. Linuxové příkazy:jobs, bg a fg

  3. 5 Linuxových příkazů, které nikdy nepoužívám

  1. Spouštění příkazů Linuxu na pozadí a v popředí

  2. Linuxové příkazy od A do Z

  3. Příkaz Linux pro seznam všech dostupných příkazů a aliasů

  1. Sledujte příkazy a úkoly pomocí příkazu watch v systému Linux

  2. 5 použití příkazu mv v linuxovém terminálu

  3. Linuxový příkaz echo