
Linuxový příkaz tee se používá pro řetězení a přesměrování úloh, výstup a/nebo chyby můžete přesměrovat do souboru a na terminálu se nezobrazí. Podobně při použití řetězení lze výstup jednoho příkazu zadat jako vstup pro druhý příkaz a dále pro třetí příkaz atd., ale jakmile výstup přesměrujete do souboru, nemůžete jej zřetězit s jinými příkazy.
Linux tee lze použít k dosažení obou těchto výsledků společně, tj. uložit výsledek do souboru a zřetězení stejného výstupu do jiného příkazu.
V tomto tutoriálu probereme, jak používat Linux tee s několika příklady.
Syntaxe příkazu Tee
Příkaz tee v podstatě čte ze standardního vstupu a zapisuje na standardní výstup a soubory. Následuje syntaxe příkazu:
$ command | tee [OPTION]... [FILE]...
Následující příklady by nám měly poskytnout lepší představu o tom, jak příkaz funguje.
1) Jak zapisovat na standardní výstup a soubor
Chcete-li zapisovat na standardní výstup a soubor, použijte tee za svislou čarou a zadejte soubor.
$ sudo ls /home/smart | tee folders_of_smart.txt
Nyní můžeme přejít na folders_of_smart.txt
a zobrazit obsah souboru zadáním příkazu níže.
$ sudo nano folders_of_smart.txt
Output:
folders_of_smart.txt
foo.txt
output.txt
rootlisting.txt
2) Jak zapisovat do souboru a připojovat výstup
Pro připojení výstupu k existujícímu souboru použijeme -a
možnost.
$ sudo echo 'Movies' | tee -a folders_of_smart.txt
Nyní můžeme přejít na folders_of_smart.txt
a zobrazit obsah souboru zadáním příkazu níže.
$ sudo nano folders_of_smart.txt
Output:
folders_of_smart.txt
foo.txt
output.txt
rootlisting.txt
Movies
3) Jak zapisovat do více souborů
Chcete-li zapisovat do více souborů, stačí uvést jejich názvy v příkazovém řádku.
$ sudo ping facebook.com | tee output1.txt output2.txt output3.txt
Nyní můžeme přejít na output1.txt
, output2.txt
a zobrazit obsah souboru zadáním příkazu níže.
$ sudo nano output1.txt
$ sudo nano output2.txt
Output:
PING facebook.com(edge-star-mini6-shv-02-dfw5.facebook.com (2a03:2880:f134:183:face:b00c:0:25de)) 5$
64 bytes from edge-star-mini6-shv-02-dfw5.facebook.com (2a03:2880:f134:183:face:b00c:0:25de): icmp_$
64 bytes from edge-star-mini6-shv-02-dfw5.facebook.com (2a03:2880:f134:183:face:b00c:0:25de): icmp_$
4) Jak přesměrovat výstup jednoho příkazu na jiný
Výstup můžeme také předat jako vstup dalším příkazům. Například následující příkaz neuvede všechny názvy složek v folders_of_smart.txt
ale seznam přes grep ^o
příkaz složku začínající písmenem o.
$ sudo ls /home/smart | tee folders_of_smart.txt | grep ^o
output:
output1.txt
output2.txt
output3.txt
output.txt
Dalším příkladem je seznam /etc
adresářů a poté je výstup uložen do souboru s názvem stage1.txt
, Tento výstup je filtrován příkazem grep pro řádky začínající písmenem i. Tento filtrovaný výstup je uložen v souboru stage2.txt
.
Nakonec je filtrovaný výstup zpětně tříděn pomocí sort -r
příkaz. Tento konečný výstup se zobrazí na terminálu.
$ ls /etc | tee stage1.txt | grep ^i | tee stage2.txt | sort -r
output:
issue.net
issue
iscsi
iproute2
inputrc
initramfs-tools
init.d
init
5) Jak sledovat soubory protokolu a zapisovat do souboru
Můžeme analyzovat HTTP2
provoz procházející přes apache2
server pomocí tee
příkaz, Živé protokoly lze streamovat na standardní výstup a také zapisovat do souboru pro pozdější analýzu.
$ sudo tail -f /var/log/apache2/access.log | grep --line-buffered "HTTP/2.0" | tee -a http2.log
6) Jak zapisovat do privilegovaného souboru pomocí tee
Když chceme zapisovat do souboru vlastněného root
jako folder_of_root.txt
, použijeme sudo
před tee
příkaz jako v příkladu níže.
$ sudo echo 'Documents' | sudo tee -a folder_of_root.txt
Budeme požádáni o heslo uživatele root, zadejte heslo uživatele root a změny se uloží do folder_of_root.txt
.
7) Jak používat příkaz tee se skriptem Python
Můžeme použít tee
příkaz se skriptem python pro uložení výstupu do souboru a zobrazení výstupu na obrazovce, Nejprve napíšeme skript python pro výpočet plochy kruhu, jak je uvedeno níže, a uložíme jej do area.py
soubor.
# -*- coding: utf-8 -*-
"""This script calculate the area of circle"""
from math import pi as pi
from math import ceil as ceil
radius = 2.5
area = pi * radius**2
print('The area of circle is', ceil(area))
Změníme hodnotu poloměru a výstup připojíme do area.txt
.
$ python area.py | tee -a area.txt
Output
('The area of circle is for radius 2', 13.0)
('The area of circle is for radius 2.5', 20.0)
('The area of circle is for radius 3', 29.0)
('The area of circle is for radius 3.5', 39.0)
8) Jak používat příkaz tee se skriptem Bash
Můžeme použít tee
příkaz se skriptem bash pro uložení výstupu do souboru a zobrazení výstupu na obrazovce, Nejprve napíšeme skript bash pro zobrazení výstupu těchto příkazů pwd
, ls
a $HOME
jak je uvedeno níže a uložte jej do bash.txt
soubor.
#!/bin/bash
echo "`pwd`";
echo "`ls`";
echo "$HOME";
$ ./bash.txt | tee smart.txt
Output
/media/disk
bash.txt
flask.pdf
smart.py
smart.txt
VirtualBox-5.2-5.2.14_123301_el6-1.x86_64.rpm
/home/smart
Příkaz tee je velmi úžasný nástroj, můžeme číst standardní vstup a zapisovat jej jak do standardního výstupu, tak do jednoho nebo více souborů.
Přečtěte si také:
- Jak používat Linux Tr Command s příklady