Data se do počítače zadávají pomocí stdin (obvykle klávesnice) a výsledný výstup jde do stdout (obvykle skořápka). Tyto cesty se nazývají proudy . Je však možné změnit tato vstupní a výstupní umístění, což způsobí, že počítač získá informace odjinud než ze stdin nebo pošlete výsledky jinam než stdout . Tato funkce se nazývá přesměrování .
V tomto článku se dozvíte pět operátorů přesměrování, včetně jednoho pro stderr . Poskytl jsem příklady každého z nich a představil materiál způsobem, který můžete duplikovat na svůj vlastní systém Linux.
Běžný výstup> operátor
Přesměrovač výstupu je pravděpodobně nejuznávanější z operátorů. Standardní výstup (stdout ) je obvykle do okna terminálu. Například když zadáte date
na obrazovce se zobrazí výsledný čas a datum.
[damon@localhost ~]$ date
Tue Dec 29 04:07:37 PM MST 2020
[damon@localhost ~]$
Je však možné přesměrovat tento výstup z stdout někam jinam. V tomto případě přesměruji výsledky do souboru s názvem specifications.txt
. Potvrdím, že to fungovalo pomocí cat
příkaz pro zobrazení obsahu souboru.
[damon@localhost ~]$ date > specifications.txt
[damon@localhost ~]$ cat specifications.txt
Tue Dec 29 04:08:44 PM MST 2020
[damon@localhost ~]$
Problém s >
přesměrovač spočívá v tom, že přepíše všechna existující data v souboru. V této fázi máte nyní date
informace v specifications.txt
soubor, že? Pokud zadáte hostname > specifications.txt
, výstup bude odeslán do textového souboru, ale přepíše stávající informace o čase a datu z předchozích kroků.
[damon@localhost ~]$ hostname > specifications.txt
[damon@localhost ~]$ cat specifications.txt
localhost.localdomain
[damon@localhost ~]$
S >
se snadno dostanete do problémů přesměrovač náhodným přepsáním existujících informací.
[ Čtenáři si také užili: 10 základních příkazů Linuxu, které potřebujete znát ]
Připojení k běžnému výstupu>> operátor
Příloha >>
operátor přidá výstup k existujícímu obsahu místo jeho přepsání. To umožňuje přesměrovat výstup z více příkazů do jednoho souboru. Mohl bych například přesměrovat výstup date
pomocí >
a poté přesměrujte hostname
a uname -r
do specifications.txt
soubor pomocí >>
operátor.
[damon@localhost ~]$ date > specifications.txt
[damon@localhost ~]$ hostname >> specifications.txt
[damon@localhost ~]$ uname -r >> specifications.txt
[damon@localhost ~]$ cat specifications.txt
Tue Dec 29 04:11:51 PM MST 2020
localhost.localdomain
5.9.16-200.fc33.x86_64
[damon@localhost ~]$
Poznámka :>>
přesměrovač funguje i na prázdný soubor. To znamená, že byste mohl
ignorujte běžný >
přesměrovač pro zmírnění možnosti přepsání dat a vždy se spoléhejte na >>
místo toho přesměrovač. Dostat se do toho není špatný zvyk.
Běžný vstup
Vstupní přesměrovač získává data v proudu z daného zdroje. Programy obvykle přijímají vstup z klávesnice. Data však lze stáhnout z jiného zdroje, například ze souboru.
Je čas vytvořit příklad pomocí sort
příkaz. Nejprve vytvořte textový soubor s názvem mylist.txt
který obsahuje následující řádky:
cat
dog
horse
cow
Všimněte si, že zvířata nejsou jsou uvedeny v abecedním pořadí.
Co když je potřebujete uvést v pořadí? Obsah souboru můžete stáhnout do sort
pomocí <
operátor.
[damon@localhost ~]$ sort < mylist.txt
cat
cow
dog
horse
[damon@localhost ~]$
Můžete se dokonce trochu zbláznit a přesměrovat setříděné výsledky do nového souboru:
[damon@localhost ~]$ sort < mylist.txt > alphabetical-file.txt
[damon@localhost ~]$ cat alphabetical-file.txt
cat
cow
dog
horse
[damon@localhost ~]$
Běžná chyba 2> operátor
Stdout zobrazí očekávané výsledky. Pokud se objeví chyby, jsou spravovány jinak. Chyby jsou označeny jako deskriptor souboru 2 (standardní výstup je deskriptor souboru 1). Když program nebo skript negeneruje očekávané výsledky, vyvolá chybu. Chyba je obvykle odeslána na stdout , ale může být přesměrován jinam. stderr operátor je 2>
(pro deskriptor souboru 2).
Zde je jednoduchý příklad s chybně napsaným ping
příkaz:
[damon@localhost ~]$ png
bash: png: command not found...
[damon@localhost ~]$
Zde je stejný chybně napsaný příkaz s chybovým výstupem přesměrovaným na /dev/null
:
[damon@localhost ~]$ png 2> /dev/null
[damon@localhost ~]$
Výsledná chybová zpráva je přesměrována na /dev/null
místo stdout , takže se na obrazovce nezobrazí žádný výsledek ani chybová zpráva.
Poznámka :/dev/null
nebo bit bucket , se používá jako odpadkový koš pro příkazový řádek. Nechtěný výstup lze přesměrovat do tohoto umístění, aby jednoduše zmizel. Například možná píšete skript a chcete otestovat některé z jeho funkčnosti, ale víte, že způsobí chyby, které vás v této fázi vývoje nezajímají. Můžete spustit skript a říct mu, aby přesměroval chyby na /dev/null
pro pohodlí.
Potrubí | operátor
Ken Hess už má solidní článek o používání dýmky |
operátora, takže zde ukážu pouze velmi rychlou ukázku.
Roura převezme výstup prvního příkazu a udělá z něj vstup druhého příkazu. Možná budete chtít vidět seznam všech adresářů a souborů v /etc
adresář. Víte, že to bude dlouhý seznam a že většina výstupu se posune mimo horní část obrazovky. less
příkaz rozdělí výstup na stránky a vy se pak můžete po stránkách posouvat nahoru nebo dolů a zobrazit výsledky. Syntaxe je vydat ls
příkaz k výpisu obsahu /etc
a poté pomocí potrubí odešlete tento seznam do less
aby se dal rozdělit na stránky.
[damon@localhost ~]$ ls /etc | less
Kenův článek má mnohem více skvělých příkladů. Osobně jsem zjistil, že používám command | less
a command | grep string
nejčastěji.
[ Stáhnout nyní:Průvodce systémového administrátora skriptováním v Bash. ]
Sbalit
Operátory přesměrování jsou velmi užitečné a doufám, že vám toto krátké shrnutí poskytlo nějaké triky pro manipulaci se vstupem a výstupem. Klíčem je zapamatovat si, že >
operátor přepíše existující data.
Jak nastavit dynamické přesměrování portů SSH v systému Linux
7 zábavných funkcí pro přenos kontejnerů/obrázků v Linuxu
Linux
Vstupní přesměrovač získává data v proudu z daného zdroje. Programy obvykle přijímají vstup z klávesnice. Data však lze stáhnout z jiného zdroje, například ze souboru.
Je čas vytvořit příklad pomocí sort
příkaz. Nejprve vytvořte textový soubor s názvem mylist.txt
který obsahuje následující řádky:
cat
dog
horse
cow
Všimněte si, že zvířata nejsou jsou uvedeny v abecedním pořadí.
Co když je potřebujete uvést v pořadí? Obsah souboru můžete stáhnout do sort
pomocí <
operátor.
[damon@localhost ~]$ sort < mylist.txt
cat
cow
dog
horse
[damon@localhost ~]$
Můžete se dokonce trochu zbláznit a přesměrovat setříděné výsledky do nového souboru:
[damon@localhost ~]$ sort < mylist.txt > alphabetical-file.txt
[damon@localhost ~]$ cat alphabetical-file.txt
cat
cow
dog
horse
[damon@localhost ~]$
Běžná chyba 2> operátor
Stdout zobrazí očekávané výsledky. Pokud se objeví chyby, jsou spravovány jinak. Chyby jsou označeny jako deskriptor souboru 2 (standardní výstup je deskriptor souboru 1). Když program nebo skript negeneruje očekávané výsledky, vyvolá chybu. Chyba je obvykle odeslána na stdout , ale může být přesměrován jinam. stderr operátor je 2>
(pro deskriptor souboru 2).
Zde je jednoduchý příklad s chybně napsaným ping
příkaz:
[damon@localhost ~]$ png
bash: png: command not found...
[damon@localhost ~]$
Zde je stejný chybně napsaný příkaz s chybovým výstupem přesměrovaným na /dev/null
:
[damon@localhost ~]$ png 2> /dev/null
[damon@localhost ~]$
Výsledná chybová zpráva je přesměrována na /dev/null
místo stdout , takže se na obrazovce nezobrazí žádný výsledek ani chybová zpráva.
Poznámka :/dev/null
nebo bit bucket , se používá jako odpadkový koš pro příkazový řádek. Nechtěný výstup lze přesměrovat do tohoto umístění, aby jednoduše zmizel. Například možná píšete skript a chcete otestovat některé z jeho funkčnosti, ale víte, že způsobí chyby, které vás v této fázi vývoje nezajímají. Můžete spustit skript a říct mu, aby přesměroval chyby na /dev/null
pro pohodlí.
Potrubí | operátor
Ken Hess už má solidní článek o používání dýmky |
operátora, takže zde ukážu pouze velmi rychlou ukázku.
Roura převezme výstup prvního příkazu a udělá z něj vstup druhého příkazu. Možná budete chtít vidět seznam všech adresářů a souborů v /etc
adresář. Víte, že to bude dlouhý seznam a že většina výstupu se posune mimo horní část obrazovky. less
příkaz rozdělí výstup na stránky a vy se pak můžete po stránkách posouvat nahoru nebo dolů a zobrazit výsledky. Syntaxe je vydat ls
příkaz k výpisu obsahu /etc
a poté pomocí potrubí odešlete tento seznam do less
aby se dal rozdělit na stránky.
[damon@localhost ~]$ ls /etc | less
Kenův článek má mnohem více skvělých příkladů. Osobně jsem zjistil, že používám command | less
a command | grep string
nejčastěji.
[ Stáhnout nyní:Průvodce systémového administrátora skriptováním v Bash. ]
Sbalit
Operátory přesměrování jsou velmi užitečné a doufám, že vám toto krátké shrnutí poskytlo nějaké triky pro manipulaci se vstupem a výstupem. Klíčem je zapamatovat si, že >
operátor přepíše existující data.