GNU/Linux >> Znalost Linux >  >> Linux

Praktické Linux &Unix Tee příkazy pro správce Linuxu

Jako správce Linuxu existuje mnoho příležitostí, kdy musíte uložit výstup příkazu do souboru, kromě pouhého tisku výstupu na terminálu. Nevíte jak? Nechte unixový příkaz tee udělat trik.

V tomto tutoriálu se naučíte mnoho způsobů, jak používat tee příkaz k uložení a připojení výstupu k souboru.

Připraveni? Čtěte dál a posuňte skriptování shellu na další úroveň!

Předpoklady

Tento tutoriál bude praktickou ukázkou. Pokud chcete pokračovat, ujistěte se, že máte systém Linux. Tento tutoriál používá Ubuntu 20.04, ale můžete použít jakoukoli variantu Linuxu.

Přesměrování výstupů příkazů (STDOUT/STDERR)

Před spuštěním tee je důležité pochopit, jak přesměrování funguje. V Linuxu je vše považováno za soubor, včetně zařízení, adresářů a dokonce i výstupu příkazů. Výsledkem je, že můžete vzít výstup jednoho příkazu a použít tento výstup jako vstup pro jiný příkaz (přesměrování souborů).

Existují různé typy přesměrování a každé slouží svému účelu. Ale při spuštění tee příkaz, primárně používáte dva různé typy přesměrování:

  • Standardní přesměrování výstupu (STDOUT) (>) – výchozí výstup příkazu.
  • Standard Error Redirect (STDERR)(2>) – Chybová zpráva generovaná příkazem a zobrazená na obrazovce.

Obě přesměrování berou a ukládají výstupy příkazů do souboru, ale níže uvidíte, jak přesměrování fungují.

Spusťte ls příkaz bez argumentů vypíše veškerý obsah (soubory a složky) vašeho pracovního adresáře.

ls

Níže je uveden STDOUT příkazu ls.

Dále spusťte níže uvedený příkaz a záměrně vypište obsah adresáře (fake_directory ), který neexistuje.

ls fake_directory

Zobrazí se chybová zpráva, že adresář neexistuje. Tento výstup je STDERR příkazu ls.

Ukládání výstupů příkazů do souboru

Předpokládejme, že chcete uložit STDOUT z ls příkaz do souboru místo pouhého tisku výstupu na terminál. V tomto případě operátor přesměrování (> ) přijde vhod.

1. Spusťte následující příkaz pro uložení/přesměrování (>) STDOUT příkazu ls do souboru s názvem ls_stdout.txt. Protože tento příkaz uloží výstup do souboru, nedostanete výstup na svůj terminál.

ls > ls_stdout.txt

2. Nyní spusťte níže uvedený příkaz cat pro zobrazení obsahu vašeho souboru ls_stdout.txt.

cat ls_stdout.txt

3. Podobně spusťte následující příkaz pro uložení STDERR (2>) příkazu ls do souboru s názvem ls_stderr.txt. Opět nezískáte výstup na vašem terminálu, protože výstup je uložen do souboru.

ls fake_directory 2> ls_stderr.txt

4. Nyní spusťte níže uvedený příkaz cat, abyste viděli obsah souboru ls_stderr.txt.

cat ls_stderr.txt

Níže můžete potvrdit, že STDERR příkazu ls byl uložen do ls_stderr.txt soubor.

5. Spusťte níže uvedený příkaz a uložte (&>) STDOUT i STDERR příkazu ls do souboru s názvem ls_alloutput.txt.

Proč se spokojit s jedním, když můžete mít oba, že? Obvykle budete chtít uložit oba výstupy do stejného souboru pro účely odstraňování problémů nebo protokolování.

ls &> ls_alloutput.txt

6. Nakonec spusťte následující příkaz cat a zobrazte obsah souboru ls_alloutput.txt

cat ls_alloutput.txt

Připojování programů pomocí potrubí

Kromě pouhého ukládání výstupů do souboru můžete mnohem více dosáhnout pomocí potrubí, jako je propojování programů. Ve scénářích reálného světa budete s největší pravděpodobností používat kanály ve spojení s přesměrováním souborů a tee příkaz.

Trubka (| ) je mechanismus pro meziprocesovou komunikaci, který vám umožňuje propojit výstup jednoho příkazu se vstupem jiného příkazu. Jinými slovy, roura přebírá STDOUT jednoho procesu a propojuje tento STDOUT se STDIN jiného procesu.

Spusťte následující příkaz grep a vyhledejte všechny řádky obsahující slovo tcp v souboru /etc/services.

grep tcp /etc/services

Nyní spusťte stejný grep příkaz níže. Tentokrát však použijte výstup výše uvedeného grep příkaz na less příkaz pro zobrazení výsledků hledání po jedné obrazovce.

grep tcp /etc/services | less

Jak funguje potrubí? Jak můžete vidět níže, když použijete svislý znak (|), výstup grep příkaz je uložen na dočasném místě. Výstup je pak předán jako vstup do less příkaz.

Kombinace Unixového trička (tee ) Příkazy, kanály a přesměrování

Zatím jste se naučili, jak tee fungují příkazy, roury a přesměrování. Proč ale nepoužít všechny tři dohromady pro lepší ovládání výstupů příkazů?

Dříve jste používali potrubí s přesměrováním, a to je obrovský krok. Tentokrát použijete potrubí a tee příkaz k odeslání výstupu jednoho příkazu druhému k dalšímu zpracování.

Spuštěním níže uvedeného příkazu odešlete výstup ls příkaz na obrazovku a result.txt soubor. Výstup ls je dále přesměrován do grep k filtrování pouze řádků, které obsahují slovo ip .

ls | grep 'ip' | tee result.txt

Nyní spusťte cat příkaz k ověření obsahu výsledku .txt.

cat result.txt

Připojování výstupu k existujícím souborům

Dříve jste uložili výstup příkazů do souboru, ale můžete aktualizovat existující soubor namísto vytvoření nového? Ano! Nechte tee příkaz udělej kouzla.

Ve výchozím nastavení tee příkaz přepíše obsah existujícího souboru. Ale v mnoha případech můžete chtít připojit výstup příkazu k existujícímu souboru. Například protokolování všech událostí serveru v reálném čase do souboru protokolu.

Díky této funkci se k souboru protokolu připojí nové záznamy, kdykoli na serveru dojde k události.

Spuštěním níže uvedeného příkazu převezmete výstup příkazu ls -lR a připojte výstup (tee -a) k souboru result.txt obsah souboru. Tento příkaz neposkytuje výstup, protože výstup příkazu posíláte do souboru.

ls -lR | tee -a result.txt

Nyní spusťte cat příkaz k ověření obsahu result.txt soubor.

cat result.txt

Jak můžete vidět níže, výstup ls -lR příkaz je připojen na konec souboru result.txt soubor.

Pomocí tee Příkaz ve spojení s sudo

Mnoho příkazů vyžaduje zvýšená oprávnění nebo sudo přístup, jako je provádění úprav v /etc adresář. Otázkou je, zda tee příkaz pracovat ruku v ruce s sudo ? Ano!

Přidání sudo před příkaz tee umožňuje uživateli bez oprávnění root zapisovat data do souboru, který může upravovat pouze uživatel root. Chcete například povolit uživatele ata k zápisu dat do /etc/ata.conf soubor. Zároveň však nechcete uživateli poskytnout ata oprávnění root.

1. Přihlaste se ke svému počítači jako uživatel bez oprávnění root.

2. Dále spusťte následující příkaz bez sudo, abyste zapsali textová data do souboru /etc/ata.conf.

echo "data" > tee /etc/ata.conf

Jak můžete vidět níže, od ata se vám zobrazí chyba Povolení odepřeno uživatel nemá přístup pro zápis do /etc/ata.conf soubor.

3. Spusťte stejný příkaz jako v kroku 2 a zapište textová data do souboru /etc/ata.conf. Tentokrát však před příkaz tee přidejte příkaz sudo. Uživatel tak bude moci ata k dokončení příkazu (elevated) jako uživatel bez oprávnění root.

echo "data" | sudo tee /etc/ata.conf

Nakonec spusťte níže uvedený příkaz cat a ověřte, že ata uživatel mohl napsat text „data“ do /etc/ata.conf.

cat /etc/ata.conf

Závěr

V tomto tutoriálu jste se naučili, jak používat unixový příkaz tee k zápisu dat do souborů a jak funguje ve spojení s jinými příkazy. V tuto chvíli byste měli mít výkonnou kombinaci příkazů, které můžete použít ke správě vstupu a výstupu v prostředí příkazového řádku Linuxu.

Jste jako sushi šéfkuchař, který zcela kontroluje ingredience a proporce, které jsou součástí každého jídla. Každou objednávku můžete za chodu přizpůsobit tak, aby vyhovovala vkusu vašeho zákazníka. Jediným limitem je vaše představivost (a možná i velikost okna vašeho terminálu).

Nyní pokračujte a vytvořte úžasné směsice příkazového řádku!


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

  2. Příkazy Bash bang:Nezbytný trik pro příkazový řádek Linuxu

  3. 5 Praktické příklady Head Command v Linuxu

  1. Základní příklady příkazu File v Linuxu

  2. 5 Praktické příklady příkazu dd v Linuxu

  3. Co je ekvivalentní příkazu Linux File pro Windows?

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

  2. 16 Praktické příklady příkazu Linux LS pro začátečníky

  3. Příkaz ls v Linuxu pro výpis souborů