8 Linux Tee 命令與示例

Linux tee 命令用於任務的鏈接和重定向,您可以將輸出和/或錯誤重定向到文件,並且不會在終端上顯示。 類似地,使用鏈接,一個命令的輸出可以作為第二個命令的輸入,並進一步傳遞給第三個命令,依此類推,但是一旦將輸出重定向到一個文件,就不能將它與其他命令鏈接起來。

Linux tee 可用於同時實現這兩種結果,即將結果存儲到文件中,同時將相同的輸出鏈接到另一個命令。

在本教程中,我們將通過一些示例討論如何使用 Linux tee。

Tee 命令語法

tee 命令基本上從標準輸入讀取並寫入標準輸出和文件。 以下是命令的語法:

$ command | tee [OPTION]... [FILE]...

以下示例應該讓我們更好地了解命令的工作原理。

1) 如何寫入標準輸出和文件

要寫入標準輸出和文件,請在管道後使用 tee 並指定文件。

$ sudo ls /home/smart | tee folders_of_smart.txt

現在我們可以去 folders_of_smart.txt 並通過鍵入以下命令查看文件的內容。

$ sudo nano folders_of_smart.txt

Output:
folders_of_smart.txt
foo.txt
output.txt
rootlisting.txt

2)如何寫入文件並附加輸出

要將輸出附加到現有文件,我們將使用 -a 選項。

$ sudo echo 'Movies' | tee -a folders_of_smart.txt

現在我們可以去 folders_of_smart.txt 並通過鍵入以下命令查看文件的內容。

$ sudo nano folders_of_smart.txt

Output:
folders_of_smart.txt
foo.txt
output.txt
rootlisting.txt
Movies

3)如何寫入多個文件

要寫入多個文件,我們只需要在命令行中提及它們的名稱。

$ sudo ping facebook.com | tee output1.txt output2.txt output3.txt

現在我們可以去 output1.txt, output2.txt 並通過鍵入以下命令查看文件的內容。

$ 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) 如何將一個命令的輸出重定向到另一個

我們還可以將輸出作為輸入傳遞給其他命令。 為了 example,以下命令不會列出所有文件夾名稱 folders_of_smart.txt 但列出 grep ^o 命令文件夾以字母開頭 .

$ sudo ls /home/smart | tee folders_of_smart.txt | grep ^o

output:
output1.txt
output2.txt
output3.txt
output.txt

其他 example,我們將列出 /etc 目錄,然後輸出存儲在名為 stage1.txt, 此輸出通過 grep 命令過濾以字母開頭的行 一世, 這個過濾後的輸出存儲在文件中 stage2.txt.

最後,過濾後的輸出使用 sort 進行反向排序 -r 命令。 此最終輸出顯示在終端上。

$ 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) 如何查看日誌文件並寫入文件

我們可以分析 HTTP2 交通經過 apache2 服務器使用 tee 命令,實時日誌可以流式傳輸到標準輸出,也可以寫入文件以供以後進一步分析。

$ sudo tail -f /var/log/apache2/access.log | grep --line-buffered "HTTP/2.0" | tee -a http2.log

6) 如何使用 tee 寫入特權文件

當我們想要寫入擁有的文件時 root 喜歡 folder_of_root.txt,我們將使用 sudotee 命令像 example 以下。

$ sudo echo 'Documents' | sudo tee -a folder_of_root.txt

我們將被要求輸入 root 密碼,輸入 root 密碼,更改將保存在 folder_of_root.txt.

7) 如何在 Python 腳本中使用 tee 命令

我們可以用 tee 使用python腳本命令將輸出存儲在文件中並將輸出顯示在屏幕上,首先,我們將編寫python腳本來計算如下圓的面積並將其保存在 area.py 文件。

# -*- 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))

我們將更改半徑的值並將輸出附加到 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) 如何在 Bash 腳本中使用 tee 命令

我們可以用 tee 命令與 bash 將輸出存儲在文件中並將輸出顯示在屏幕上的腳本,首先,我們將編寫 bash 顯示此命令輸出的腳本 pwd, ls$HOME 如下所示並將其保存在 bash.txt 文件。

#!/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

tee 命令是一個非常驚人的工具,我們可以讀取標準輸入並將其寫入標準輸出和一個或多個文件。

另請閱讀:

  • 如何通過示例使用 Linux Tr 命令