next up previous contents
Next: 實機練習題 Up: 資料導向與管線處理 Previous: 管線命令 pipe   Contents

tee 雙向重導向

  1. 重複上節管線命令例子,換行找 nologin 的用戶,grep -m5 只列找到的前 5 筆,sort 排序 -nk3 是以數字排序第 3 欄位,最後以 cut 取出第 1 及 3 欄位,結果輸出在螢幕上。
    [dywang@dywmac ~]$ cat /etc/passwd | grep -m5 nologin | sort -t: -nk3 | cut -d: -f 1,3
    bin:1
    daemon:2
    adm:3
    lp:4
    mail:8
    
  2. 要將螢幕上的資料存檔,可以用 >, >>, 2>, 2>> 將 STDOUT 或 STDERR 導向到檔案,但螢幕就看不到訊息。若要維持螢幕輸出並存檔,要使用 tee 命令做「雙向重導向」。
    [dywang@dywmac ~]$ cat /etc/passwd | grep -m5 nologin | sort -t: -nk3 \
    | cut -d: -f 1,3 | tee user.log
    bin:1
    daemon:2
    adm:3
    lp:4
    mail:8
    [dywang@dywmac ~]$ cat user.log
    bin:1
    daemon:2
    adm:3
    lp:4
    mail:8
    
  3. 改找註解有 "Daemon" 字串的用戶,再雙向重導向到 user.log,user.log 內容被覆蓋成新的資料。
    [dywang@dywmac ~]$ cat /etc/passwd | grep Daemon | sort -t: -nk3 \
    | cut -d: -f 1,3 | tee user.log
    nscd:28
    rpc:32
    pulse:497
    [dywang@dywmac ~]$ cat user.log
    nscd:28
    rpc:32
    pulse:497
    
  4. tee 加上 -a 選項雙向重導向的檔案就不會被覆蓋,而是累加上去。
    [dywang@dywmac ~]$ cat /etc/passwd | grep -m5 nologin | sort -t: -nk3 \
    | cut -d: -f 1,3 | tee user.log
    bin:1
    daemon:2
    adm:3
    lp:4
    mail:8
    [dywang@dywmac ~]$ cat /etc/passwd | grep Daemon | sort -t: -nk3 \
    | cut -d: -f 1,3 | tee -a user.log
    nscd:28
    rpc:32
    pulse:497
    [dywang@dywmac ~]$ cat /etc/pauser.log 
    bin:1
    daemon:2
    adm:3
    lp:4
    mail:8
    nscd:28
    rpc:32
    pulse:497
    



De-Yu Wang 2019-08-12