Linux-文件描述符及重定向

文件描述符是與文件輸入、輸出相關聯的整數。它們用來跟蹤已打開的文件。最常見的文件
描述符是 stdinstdoutstderr 。我們甚至可以將某個文件描述符的內容重定向到另一個文
件描述符中。

在編寫腳本的時候會頻繁使用標準輸入stdin、標準輸出stdout和標準錯誤
stderr。通過內容過濾將輸出重定向到文件是我們平日裏的基本任務之一。當命令輸出文本
時,這些輸出文本有可能是錯誤信息,也可能是正常的(非錯誤的)輸出信息。單靠查看輸出的
文本本身,我們沒法區分哪些是正常,哪些是錯誤。不過可以通過文件描述符來解決這個問題,
將那些與特定描述符關聯的文本提取出來。
文件描述符是與某個打開的文件或數據流相關聯的整數。文件描述符 01 以及 2 是系統預留的。

0 —— stdin (標準輸入)

1 —— stdout (標準輸出)

2 —— stderr (標準錯誤)

實戰

  1. 通過截斷文件的方式,將輸出文本存儲到文件temp.txt中,寫入文件之前,temp.txt中的內容首先會被清空。

    echo "This is a sample text 1" > temp.txt
    
  2. 將文本追加到目標文件中

    echo "This is sample text 2" >> temp.txt
    
  3. stdout輸入文件中,stderr 打印到屏幕上

    cmd > out.txt
    
  4. stderr 輸入文件中,stdout 打印到屏幕上

    cmd 2> out.txt
    
  5. stderr單獨重定向到一個文件,將stdout重定向到另一個文件

    cmd 2>stderr.txt 1>stdout.txt
    
  6. stderr轉換成stdout,使得stderrstdout都被重定向到同一個文件中

    cmd 2>&1 output.txt
    
    cmd &> output.txt
    
  7. 既可以將數據重定向到文件,還可以提供一份重定向數據的副本作爲後續命令的 stdin

    # tee 只能從`stdin`中讀取
    cat a* | tee out.txt | cat -n
    
    1. tee命令
      在輸出信息的同時把信息記錄到文件中
      1. ls | tee ls.txt將會在終端上顯示ls命令的執行結果,並把執行結果輸出到ls.txt文件中,將會覆蓋原文件的內容,若無ls.txt文件,將會自動創建該文件
      2. ls | tee -a ls.txt 保留ls.txt文件中原來的內容,並把ls命令的執行結果追加到ls.txt文件的最後,不覆蓋原來的內容
      3. ls | tee file1.txt file2.txt

補充

  1. 將文件重定向到命令

    # cmd <file
     bash <(curl -s https://gitee.com/yw007/codes/6v34iz57ruhtdx1scq9fa100/raw?blob_name=hello_world.sh)
    
  2. 將腳本內部的文本塊進行重定向

    有時候,我們需要對文本塊(多行文本)進行重定向,就像對標準輸入做的那樣。考慮一個
    特殊情況:源文本就位於shell腳本中。一個實用的例子是向log文件中寫入頭部數據,可以按照下
    面的方法完成:

    #!/bin/bash
    cat<<EOF>log.txt
    LOG FILE HEADER
    This is a test log file
    Function: System statistics
    EOF
    
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章