良許 | 命令的輸出不會保存?居然連 tee 命令都不會用!

来源:https://www.cnblogs.com/yychuyu/archive/2019/08/29/11430764.html
-Advertisement-
Play Games

很多情況下,我們需要保存程式/命令的輸出到本地,常用的一種方法是重定向,這也是一種很好的方法。但有個問題,如果你想要做後續操作,比如要統計輸出的行數等,重定向就有困難了。 這時候, 命令就派上用場啦~ tee 語法格式: 這個命令有 4 個主要選項,配合這些選項可以將結果存儲在一個或者多個文件中。4 ...


很多情況下,我們需要保存程式/命令的輸出到本地,常用的一種方法是重定向,這也是一種很好的方法。但有個問題,如果你想要做後續操作,比如要統計輸出的行數等,重定向就有困難了。

這時候,tee 命令就派上用場啦~

tee 語法格式:

$ tee [OPTIONS] [FILE] 

這個命令有 4 個主要選項,配合這些選項可以將結果存儲在一個或者多個文件中。4 個選項介紹如下:

Options:

Name Description
-a or –append 用於在現有文件的末尾追加寫入數據
-i or –ignore-interrupts 用於忽略中斷信號
–help 用於顯示此命令的所有可用選項
–version 用於顯示命令的當前版本

Files:

即目標文件,可以是一個或者多個文件,用於存儲 tee 命令的輸出。

1. tee 命令基礎用法

在 Linux 中,我們可以使用 ls -la 用來查看當前目錄里文件的詳細信息,想必大家都用過。現在,我們想要保存 ls -la 命令的輸出到文件 output.txt 中,我們可以這樣操作:

$ ls -la | tee output.txt 
$ cat output.txt 

Output:
在這裡,第一個命令將 ls -la 的輸出顯示到終端,並將輸出寫入到文件 output.txt 。第二個命令顯示了 output.txt 文件的具體內容,如下圖所示:

2. 將輸出追加到現有文件中

如果我們使用帶有 -a 選項的 tee 命令的話,那麼它會將命令的輸出追加寫入到現有文件,不會覆蓋該文件原有的內容。

例如,我們想將 pwd 命令的輸出追加到已有文件 output.txt 的末尾,可以這樣運行以下命令:

$ pwd | tee -a output.txt 
$ cat output.txt

在這裡,第一個命令將 pwd 的輸出顯示到終端,併在 output.txt 文件的末尾追加 pwd 的輸出。第二個命令則用於查看輸出文件的內容。如下圖所示, output.txt 文件包含前一個示例和當前示例的輸出

[圖]

3. 輸出寫入多個文件

tee 命令也可以將各種命令的輸出存儲到多個文件中。這種情況下,我們需要使用空格隔開這些文件名。比如,我們想將 date 命令的輸出存儲到兩個文件 output1.txt 和 output2.txt 中,我們可以這樣執行命令:

$ date | tee output1.txt output2.txt
$ cat output1.txt output2.txt

Output:
在這裡,第一個命令顯示當前系統日期,並將值存儲到兩個文件 output1.txt 和 output2.txt 中。第二個命令顯示這兩個文件的內容,具體結果如下:

4. 忽略中斷信號

大家知道,命令/程式在收到中斷信號時,將被信號所中斷。如果 tee 命令在執行過程中不想被中斷,我們可以使用帶 -i 選項來忽略命令執行時的中斷信號。這種情況下,即使我們按下 CTRL + C ,命令仍會正確執行。例如:

$ wc -l output.txt | tee -i output3.txt 
$ cat output.txt 
$ cat output3.txt

Output:
在這裡,第一個命令是計算 output.txt 文件的總行數,並將輸出存儲到文件 output3.txt 中。第二個命令顯示了 output.txt 文件的具體內容,而第三個命令顯示 output3.txt 的內容,它與 wc -l output.txt 的輸出相同。

5. 將 tee 命令輸出通過管道傳遞給另一個命令

我們可以使用管道將 tee 命令的輸出傳遞給另一個命令。在本例子中,ls 命令將輸出傳遞給 tee 命令,tee 命令的輸出傳遞給 wc 命令,如下所示:

$ ls | tee output4.txt | wc -lcw 
$ ls 
$ cat output4.txt 

Output:
在這裡,第一個命令用於將 ls 命令的輸出寫入文件 output4.txt ,並計算 output4.txt 的行數、字數和字元數。第二個命令用於顯示 ls 命令的輸出,第三個命令用於查看 output4.txt 文件的內容。

6. 使用 bash 腳本執行 tee 命令

除了 Linux 命令,tee 命令也可將 bash 腳本輸出寫入到文件中。比如,我們使用以下代碼創建名為 add.sh 的 bash 腳本,該腳本將從命令行參數中獲取兩個輸入數字,並列印這兩個數字的和。

add.sh

#!/bin/bash
a = $1 
b = $2 
((result= $a + $b))
echo "The addition of $a+$b=$result" 

如果我們想使用 tee 命令將 add.sh 腳本的輸出寫入到文件 result.txt 中,我們可以這樣操作:

$ bash add.sh 50 90 | tee result.txt  
$ cat result.txt 

Output:
在這個例子里,數字 50 和 90 作為命令行參數傳遞給腳本 add.sh,然後它的輸出通過 tee 命令寫入到文件 result.txt 中。之後我們再用 cat 命令來查看 result.txt 文件的內容:

7. 隱藏 tee 輸出

如果我們想要將目標命令的輸出直接寫入文件而不在終端中顯示,那我們可以將 tee 命令結果重定向到 /dev/null 中,比如:

$ df | tee output5.txt > /dev/null 
$ cat output5.txt 

Output:

在這裡,第一個命令用於將 df 命令的輸出寫入文件 output5.txt 中,同時命令的結果不回顯在終端中。第二個命令用於查看 output5.txt 文件內容 。

大家都學會了嗎?
-----------------

我是良許,世界500強外企 Linux 開發工程師,專業生產 Linux 乾貨。歡迎關註我的公眾號「良許Linux」,回覆「1024」獲取最新最全的技術資料,回覆「入群」進入高手如雲技術交流群。

img


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 當我們用很多服務時,各個服務間的調用關係是怎麼樣的?各個服務單調用的順序\時間性能怎麼樣?服務出錯了,到底是哪個服務引起的?這些問題我們用什麼方案解決呢,以前的方式是各個系統自己單獨做日誌,出了問題從暴出問題的服務開始一個一個服務的排查,耗時耗力,有些日誌不全的,還不一定查得出來。好在現在有Skyw ...
  • 1. 程式和進程 什麼是程式?什麼是進程? 程式是電腦存儲系統中的數據文件,如源代碼程式和可執行程式 進程是程式關於某個數據集合的一次運行活動,是程式執行後得到的一個實體 在當代操作系統中,進程是資源分配的基本單位 程式和進程有什麼聯繫? 沒有程式就沒有進程;但有了程式,未必就會有進程,如程式不運 ...
  • 先來先服務(FCFS)調度演算法是一種最簡單的調度演算法,該演算法既可用於作業調度,也可用於進程調度。 當在作業調度中採用該演算法時,每次調度都是從後備作業隊列中選擇一個或多個最先進入該隊列的作業,將它們調入記憶體,為它們分配資源、創建進程,然後放入就緒隊列 ...
  • 因為公司項目需要相容SEO,同時我們也一直希望能夠真正的實現前後端分離,於是毫不猶豫的選擇了nuxt。 話說要重構前後端分離真是一個大工程,我們團隊花了近兩年時間都沒有完成,最近才又重啟把這個事情做起來,先搞了一個獨立的小模塊,我覺得主要以下兩個點特別重要: 1:團隊穩定且對於系統業務已經熟悉。特別 ...
  • 之前做過兩年的運維,用過很多命令,深切體會到某些linux命令熟練掌握後對效率提升有多大。舉個簡單的例子,在做了研發後經常會有跑一些數據,對於結果數據的處理,我們的產品同學一般都習慣於用excel做統計,把數據複製到excel里,然後數據分列,排序………… 最後得出某些簡單的結論,我只需要cat, ...
  • 子網掩碼計算方法有兩種: 方法一:利用子網數來計算: 1.首先,將子網數目從十進位數轉化為二進位數; 2.接著,統計得到的二進位數的位數,設為N; 3.最後,先求出此IP地址對應的地址類別的子網掩碼。再將求出的子網掩碼的主機地址部分(也就是“主機號”)的前N位全部置1,這樣即可得出該IP地址劃分子網 ...
  • 1、磁碟的工作原理: 磁軌、磁頭、扇區、柱面 2、磁碟分類: 機械盤: 串列:SCSI、iSCSI、SATA 並行:ATA 固態盤:HDD 3、文件系統: Windows :fat32 ntfs exfat(蘋果可也以用) Linux : ext2 ext3 ext4 BtrFS xfs 4、文件空 ...
  • * 安裝(會自動依賴安裝zookeeper)```shellbrew install kafka ```* 啟動zookeeper```shellcd /usr/local/Cellar/kafka/2.1.1/bin/./zookeeper-server-start /usr/local/etc/... ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...