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
nebocmd1 < 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.