next up previous contents
Next: 連續命令 Up: 資料導向與管線處理 Previous: 前言   Contents

資料流重導向

  1. 輸入輸出代碼
    1. 標準輸入(stdin) :代碼為 0 ,使用 <<<
    2. 標準輸出(stdout):代碼為 1 ,使用 >>>
    3. 標準錯誤輸出(stderr):代碼為 2 ,使用 2>2>>
      >, 1>   標準輸出至檔案,該檔案被覆蓋或建立。
      >>, 1>>   標準輸出至檔案,該檔案被建立或累加。
    command 2> 裝置或檔案 錯誤輸出至檔案,該檔案被覆蓋或建立。
      2>>   錯誤輸出至檔案,該檔案被建立或累加。
      <   輸入
      <<   結束的輸入字元
  2. ls 列出 /etc/crontab,/etc/crontab 檔案存在,STDOUT 輸出 /etc/crontab 到螢幕。
    [dywang@dywmac ~]$ ls /etc/crontab
    /etc/crontab
    
  3. ls 列出 /etc/dywang,檔案 /etc/dywang 不存在,STDERR 輸出 /etc/dywang 不存在的錯誤訊息也會輸出到螢幕。
    [dywang@dywmac ~]$ ls /etc/dywang
    ls: cannot access /etc/dywang: No such file or directory
    
  4. ls 同時列出 /etc/crontab /etc/dywang,STDOUT 及 STDERR 輸出都在螢幕上。
    [dywang@dywmac ~]$ ls /etc/crontab /etc/dywang
    ls: cannot access /etc/dywang: No such file or directory
    /etc/crontab
    
  5. STDOUT 導向到 /dev/null,則螢幕只剩 STDERR 輸出;STDERR 導向到 /dev/null,則螢幕只剩 STDOUT 輸出。
    [dywang@dywmac ~]$ ls /etc/crontab /etc/dywang > /dev/null
    ls: cannot access /etc/dywang: No such file or directory
    [dywang@dywmac ~]$ ls /etc/crontab /etc/dywang 2> /dev/null
    /etc/crontab
    
  6. 使用 > 將 STDOUT 導向到檔案 lsout,再導向時檔案內的資料會被覆蓋;使用 >> 導向時則 STDOUT 會累加到檔案。
    [dywang@dywmac ~]$ ls /etc/crontab > lsout
    [dywang@dywmac ~]$ cat lsout 
    /etc/crontab
    [dywang@dywmac ~]$ ls /etc/dywang-release > lsout
    [dywang@dywmac ~]$ cat lsout 
    /etc/dywang-release
    [dywang@dywmac ~]$ ls /etc/crontab >> lsout
    [dywang@dywmac ~]$ cat lsout 
    /etc/dywang-release
    /etc/crontab
    
  7. 使用 2> 將 STDERR 導向到檔案 lserr,再導向時檔案內的資料會被覆蓋;使用 2>> 導向時則 STDERR 會累加到檔案。
    [dywang@dywmac ~]$ ls /etc/dywang 2> lserr
    [dywang@dywmac ~]$ cat lserr
    ls: cannot access /etc/dywang: No such file or directory
    [dywang@dywmac ~]$ ls /etc/err 2> lserr
    [dywang@dywmac ~]$ cat lserr
    ls: cannot access /etc/err: No such file or directory
    [dywang@dywmac ~]$ ls /etc/dywang 2>> lserr
    [dywang@dywmac ~]$ cat lserr
    ls: cannot access /etc/err: No such file or directory
    ls: cannot access /etc/dywang: No such file or directory
    
  8. 要將 STDOUT 及 STDERR 同時導向到檔案 lsfile,以下做法不正確。
    [dywang@dywmac ~]$ ls /etc/crontab /etc/dywang > lsfile 2> lsfile
    [dywang@dywmac ~]$ cat lsfile
    /etc/crontab
    cess /etc/dywang: No such file or directory
    
  9. 要將 STDOUT 及 STDERR 同時導向到檔案 lsfile,正確做法為 2>&1
    [dywang@dywmac ~]$ ls /etc/crontab /etc/dywang > lsfile 2>&1
    [dywang@dywmac ~]$ cat lsfile
    ls: cannot access /etc/dywang: No such file or directory
    /etc/crontab
    
  10. 將螢幕輸入結果存入檔案,<< 後接的字串 EOF 為結束輸入符號。
    [dywang@dywmac ~]$ cat > catfile << EOF
    > 123
    > 456
    > 789
    > EOF
    [dywang@dywmac ~]$ cat catfile
    123
    456
    789
    
  11. < 可以將檔案內容導向前面指令,cat 可再將收到的內容導向到 catfile。
    [dywang@dywmac ~]$ cat < /etc/dywang-release 
    De-Yu Wang Linux 6.4 release (Taiwan)
    [dywang@dywmac ~]$ cat > catfile < /etc/dywang-release
    [dywang@dywmac ~]$ cat catfile
    De-Yu Wang Linux 6.4 release (Taiwan)
    



De-Yu Wang 2019-08-12