Úvod
Když uživatel provede příkaz v interaktivním prostředí Linuxu, výstup se zobrazí v textovém terminálu. Existují však způsoby, jak toto chování změnit pomocí dalších příkazů shellu zapojených do potrubí.
V tomto tutoriálu se naučíte, jak používat příkaz tee v Linuxu ke správě výstupu příkazu.
Předpoklady
- Systém se systémem Linux
- Přístup k příkazovému řádku nebo terminálu
- Oprávnění sudo
Co dělá tee Command v Linuxu?
tee
příkaz čte standardní vstup (stdin) a zapisuje jej jak na standardní výstup (stdout), tak na jeden nebo více souborů. tee
je obvykle součástí kanálu a může mu předcházet nebo následovat libovolný počet příkazů.
Příkazy tee v Linuxu s příklady
tee
příkaz se používá samostatně nebo s dalšími možnostmi. V následujících částech jsou uvedeny dostupné možnosti a příklady použití příkazů.
Základní použití
Základní syntaxe pro tee
příkaz je:
[command] | tee [options] [filename]
Níže uvedený příklad ukazuje použití tee
k vytvoření souboru, který ukládá informace o síťovém rozhraní a zároveň poskytuje stejný výstup v terminálu:
Příkaz cat potvrzuje, že tee
úspěšně zapsal výstup ifconfig
do souboru example.txt
:
Pokud soubor použitý pro příkaz již existuje, tee
přepíše předchozí obsah souboru.
Přidat k danému souboru
Přepsání obsahu souboru je výchozí chování tee
příkaz. Použijte argument -a
(nebo --append
), chcete-li přidat výstup příkazu na konec souboru.
[command] | tee -a [filename]
Použijte například echo
příkaz k připojení řádku textu k souboru:
Úspěšné přidání potvrďte pomocí cat
příkaz:
Zápis do více souborů
Použijte tee
následovaný libovolným počtem souborů pro zápis stejného výstupu do každého z nich:
[command] | tee [options] [filename1] [filename2]...
Níže uvedený příklad ukazuje zápis výstupu echo
příkaz do dvou souborů:
ls
příkaz ukazuje, že tee
úspěšně vytvořené soubory example1.txt
a example2.txt
.
Skrýt výstup
Chcete-li říct tee
pro uložení výstupu příkazu do souboru a přeskočení výstupu z terminálu použijte následující syntaxi:
[command] | tee [options] [filename] >/dev/null
V níže uvedeném příkladu tee
vytvoří soubor obsahující data síťového rozhraní, přičemž přeskočí standardní výstup:
Přesměrovat výstup jednoho příkazu na druhý
tee
nemusí být posledním příkazem v potrubí. Použijte jej k předání výstupu jinému příkazu:
[command] | tee [options] [filename] | [command]
V následujícím příkladu tee
ukládá výstup ls
do example.txt
a předá obsah tohoto souboru příkazu grep, který najde a zobrazí všechny výskyty slova „example“:
Ignorovat přerušení
Chcete-li povolit tee
pro správné ukončení i po přerušení předchozího příkazu přidejte argument -i
(nebo --ignore-interrupts
):
[command] | tee -i [filename]
Další příklad ukazuje tee
zápis výstupu z příkazu ping a úspěšné dokončení akce i po ping
je přerušeno pomocí Ctrl+C
:
Používání tee se sudem
Chcete-li povolit tee
chcete-li zapisovat do souboru vlastněného rootem nebo do souboru, který patří jinému uživateli, umístěte příkaz sudo přímo před tee
.
[command] | sudo tee [options] [filename]
Níže uvedený příklad ukazuje neúspěšný pokus o zápis do sudoex.txt
vlastněného rootem . Když sudo
je přidán příkaz, operace se dokončí:
Použití tee v editoru Vim
Pokud otevřete a upravíte soubor vlastněný root ve Vimu bez použití sudo
při pokusu o uložení změn dojde k chybě:
Chcete-li tuto chybu přepsat, zadejte do Vim následující:
:w !sudo tee %
Po zadání sudo
heslo, Vim zobrazí varování, ale zapíše změny do souboru.
Diagnostika chyb při zápisu do jiných kanálů
Chcete-li poučit tee
k vytištění chybové zprávy, když proces selže, použijte -p
argument:
[command] | tee -p [filename]
Výchozí akce tee -p
je ukončit a vytisknout chybovou zprávu ihned po zjištění chyby zápisu do roury. Chcete-li změnit chování příkazu při chybě zápisu, použijte --output-error
argument, za nímž následuje režim určující chování:
[command] | tee --output-error=[mode] [filename]
Existují čtyři možné režimy:
warn
– diagnostikuje chyby zápisu do libovolného výstupu.warn-nopipe
– diagnostikuje chyby zápisu na jakýkoli výstup mimo potrubí.exit
– ukončí se při chybovém zápisu na jakýkoli výstup.exit-nopipe
– ukončí se při chybovém zápisu na jakýkoli výstup bez potrubí.
Použijte příkaz tee se skriptem Bash
tee
příkaz se často nachází v bash skriptech. Zvažte následující příklad:
Výše uvedený skript vytiskne zprávu „Hello World“ a uloží výstup do souboru protokolu. Spuštěním skriptu se vytvoří soubor protokolu v tmp
složka. Protokol obsahuje výstup skriptu:
Sledování souborů protokolu
Zápis výstupu skriptu do souboru protokolu se obvykle provádí pomocí >
operátor:
./testbash.sh > testbash.log
Výše uvedený příkaz vytvoří soubor protokolu, ale nezapíše nic na standardní výstup.
Použijte tee
vytvořit soubor protokolu a zobrazit výstup v terminálu:
./testbash.sh | tee testbash.log
Viz Nápověda a informace o verzi
Podívejte se na aktuální verzi tee
příkaz zadáním:
tee --version
Pokyny týkající se tee
syntaxi příkazu a dostupné argumenty, použijte argument nápovědy příkazu:
tee --help