GNU/Linux >> Znalost Linux >  >> Linux

Práce s rourami na příkazovém řádku Linuxu

Je mi líto, že vám to musím oznámit, ale příkazový řádek nevymřel s dinosaury, nezmizel ani s dodo nebo poštovním holubem. Příkazový řádek Linuxu je naživu a dobře a stále funguje. Je to efektivní způsob rychlého shromažďování a zpracování informací, vytváření nových skriptů a konfigurace systémů.

Jedním z nejvýkonnějších shellových operátorů je roura (| ). Roura přebírá výstup z jednoho příkazu a používá jej jako vstup pro jiný. A nejste omezeni na jeden zřetězený příkaz – můžete je skládat tolikrát, kolikrát chcete, nebo dokud vám nedojdou výstupní nebo souborové deskriptory.

Jedním z hlavních účelů potrubí je filtrace. Piping se používá k filtrování obsahu velkého souboru – například k nalezení určitého řetězce nebo slova. To je důvod, proč nejoblíbenější použití pro potrubí zahrnuje příkazy grep a sort . Ale nejste omezeni na tyto případy. Výstup můžete propojit s libovolným příkazem, který přijímá proudový vstup. Podívejme se na teoretický příklad jako ilustraci toho, jak tento proces funguje:

$ cmd1 | cmd2

Oba cmd1 a cmd2 jsou nástroje příkazového řádku, které vypisují své výsledky na obrazovku (stdout ). Když však převedete výstup jednoho příkazu do druhého, informace z cmd1 neprodukuje výstup na obrazovku. Roura přesměruje tento výstup jako vstup do cmd2 .

Poznámka: Nezaměňujte rouru (| ) přesměrování s přesměrováním souboru (> ) a (< ). (Příklad přesměrování souboru: cmd1 > file nebo cmd1 < file .) Přesměrování souboru buď posílá výstup do souboru místo na obrazovku, nebo získává vstup ze souboru.

Podívejme se na několik příkladů ze skutečného světa, jak potrubí funguje.

Kontrola síťových karet

Řekněme, že potřebujete vědět, zda jedna z vašich síťových karet (NIC) má IP adresu začínající 192:

$ ifconfig | grep 192

inet 192.168.1.96  netmask 255.255.255.0  broadcast 192.168.1.255

Můžete také zjistit, které živé síťové karty máte v systému, pomocí jednoduchého kanálu na grep :

$ ifconfig | grep UP

enp0s3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536

Můžete také grep pro "RUNNING" nebo "RUN" pro zobrazení stejné informace.

Zkoumání oprávnění

Možná budete chtít zjistit, kolik je adresářů pod /etc jsou zapisovatelné pomocí root:

$ sudo ls -lR | grep drwx

Výsledky jsou příliš dlouhé na to, aby je zde bylo možné uvést, ale jak můžete vidět ze zobrazeného seznamu, je jich mnoho. Stále musíte zjistit, kolik jich je, a vizuální sčítání by trvalo dlouho. Snadnou možností je zpracovat výsledky vašeho ls do wc (počet slov) příkaz: 

$ sudo ls -lR | grep drwx | wc -l

285

-l přepínač zobrazí počet řádků. Váš počet může být jiný. Tento výpis pochází z nové instalace "RHEL 8 server bez GUI".

[Chcete vyzkoušet Red Hat Enterprise Linux? Stáhněte si ji nyní zdarma.]

Počítání souborů

Nemusíte používat grep po celou dobu. Můžete například uvést počet souborů v /etc adresář s tímto:

$ ls | wc -l

229

Vaše výsledky mohou opět vypadat jinak, ale víte, že něco není v pořádku, pokud příkaz vrátí malý počet souborů.

Identifikace procesů

Pomocí potrubí můžete také provádět složité úkoly. Chcete-li vypsat ID procesů (PID) pro všechny systemd -související procesy:

$ ps -ef | grep systemd | awk '{ print $2 }'

1
471
500
608
631
7449
7494
17242

awk $2 příkazu výstup izoluje druhý (PID) sloupec od ps příkaz. Všimněte si, že poslední položka, PID 17242 , je ve skutečnosti PID pro grep příkaz zobrazující tyto informace, jak můžete vidět z úplných výsledků výpisu zde:

khess    17242  7505  0 09:40 pts/0    00:00:00 grep --color=auto systemd

Chcete-li tento záznam ze svých výsledků odstranit, použijte znovu operátor potrubí:

$ ps -ef | grep systemd | awk '{ print $2 }' | grep -v grep

-v přepínač říká grep příkaz k invertování nebo ignorování řádků, které obsahují řetězec, který následuje – v tomto případě jakýkoli řádek obsahující slovo „grep.“

Řazení výsledků

Dalším oblíbeným použitím operátoru potrubí je řazení výsledků pomocí potrubí do sort příkaz. Řekněme, že chcete seřadit seznam jmen v contacts.txt . Nejprve se podívejme na obsah tak, jak je v souboru před řazením:

$ cat contacts.txt

Bob Jones
Leslie Smith
Dana David
Susan Gee
Leonard Schmidt
Linda Gray
Terry Jones
Colin Doe
Jenny Case

Nyní seznam seřaďte:

$ cat contacts.txt | sort

Bob Jones
Colin Doe
Dana David
Jenny Case
Leonard Schmidt
Leslie Smith
Linda Gray
Susan Gee
Terry Jones

Pořadí řazení můžete obrátit pomocí -r přepínač:

$ cat contacts.txt | sort -r

Terry Jones
Susan Gee
Linda Gray
Leslie Smith
Leonard Schmidt
Jenny Case
Dana David
Colin Doe
Bob Jones

Byl výstup pro jeden z nich takový, jaký jste očekávali? Ve výchozím nastavení sort příkaz provede slovníkové řazení na prvním slově nebo sloupci, proto Bob Jones a Terry Jones nejsou uvedeny jeden po druhém.

Podle druhého sloupce můžete třídit pomocí -k přepínač určující sloupec, podle kterého chcete třídit, což je v našem seznamu sloupec dva:

$ cat contacts.txt | sort -k2

Jenny Case
Dana David
Colin Doe
Susan Gee
Linda Gray
Bob Jones
Terry Jones
Leonard Schmidt
Leslie Smith

Pokud máte dlouhý seznam kontaktů a myslíte si, že tento seznam obsahuje duplicitní položky, můžete svůj seznam pomocí kanálu sort a poté uniq k odstranění těchto duplikátů:

$ cat contacts.txt | sort | uniq

Tento příkaz zobrazí pouze jedinečné položky, ale neuloží výsledky. Chcete-li soubor seřadit, filtrovat jedinečné položky a poté uložit nový soubor, použijte toto:

$ cat contacts.txt | sort -k2 | uniq > contact_list.txt

Pamatujte, že operátor kanálu a operátor přesměrování souboru dělají různé věci.

Koneckonců

Nyní, když jste okusili sílu příkazového řádku, myslíte si, že zvládnete zodpovědnost? Nástroje příkazového řádku mají větší flexibilitu než jejich grafické protějšky. A pro některé úlohy neexistují žádné grafické ekvivalenty.

Nejlepší způsob, jak se naučit chování příkazového řádku, je experimentovat. Například sort příkaz neudělal to, co jste si mysleli, že by měl, dokud jste to neprozkoumali dále. Nezapomeňte využít sílu svého manuálu (man ) stránky, kde najdete ty "skryté" tajné přepínače a možnosti, které proměňují frustraci příkazového řádku v úspěch příkazového řádku.


Linux
  1. Mít krávu na příkazovém řádku Linuxu

  2. Přihlaste se do příkazového řádku Linuxu

  3. Práce s datovými toky na příkazovém řádku Linuxu

  1. Jak používat Linuxový příkaz grep

  2. 8 tipů pro příkazový řádek Linuxu

  3. Zkopírujte a vložte na příkazový řádek Linuxu pomocí xclip

  1. Řešte Wordle pomocí příkazového řádku Linuxu

  2. Vyřešte hádanku na příkazovém řádku Linuxu pomocí nudoku

  3. Použijte příkaz Linux grep