數據流重定向

  1. 數據流重定向就是將某個命令執行後應該在出現在屏幕上的數據傳輸到其他地方
  2. 標準輸出指的是命令執行所回傳的正確信息,而標準錯誤輸出可以理解爲命令執行失敗後回傳的錯誤信息
  3. 數據流重定向可以將standard output 與 standard error output 分別傳送到其他的文件或者設備去。
    • 標準輸入:代碼爲0,使用<或者<<
    • 標準輸出:代碼爲1,使用>或者>>
    • 標準錯誤輸出:代碼爲2,使用2>或者2>>
    • 若以>輸出到一個已存在的文件中,那麼這個文件會被覆蓋
  4. /dev/null 垃圾桶黑洞設備與特殊寫法
    [rain@www~]$ find /home -name .bashrc 2>/dev/null      <===顯示的結果就是屏幕上只有正確信息,錯誤信息被/dev/null吞掉了
    /home/rain/.bashrc      <====只有stdout會顯示在屏幕上,stderr被丟棄了
    
  5. 如何把正確與錯誤數據通通寫入同一個文件中。
    [rain@www~]$ find /home -name .bashrc > list 2> list        <==錯誤
    [rain@www~]$ find /home -name .bashrc > list 2>&1        <==正確
    [rain@www~]$ find /home -name .bashrc &> list               <==正確
    
    第一個是錯的原因是由於兩條數據同時寫入同一個文件,又沒有使用特殊的語法,此時兩條數據可能會交叉寫入該文件內,造成次序的錯亂,所以第一條語句是有list文件,但是文件內內容錯亂。
  6. standard input <
    <這個符號的用法就是將原本需要由鍵盤輸入的數據改爲由文件內容代替。
  7. 命令執行的判斷依據:; && ll
    想要一次性執行幾個命令,可以使用 ;。命令與命令之間利用分號進行間隔,執行完分號前的命令之後會馬上執行分號之後的命令,
    [root@www~]# sync;sync;shutdown -h now         <==在關機的時候先執行兩次sync同步寫入磁盤後才shutdown計算機
    
    兩個命令之間有相依性,這個相依性的主要判斷依據就是前一個命令執行是否正確。
    命令執行情況 說明
    cmd1&&cmd2 若cmd1執行完畢且正確執行($?=0),則開始執行cmd2,否則不開始執行cmd2
    cmd1||cmd2 若cmd1執行完畢且爲正確執行($=0),則不開始執行cmd2,否則開始執行cmd2
    [root@www~]#ls /temp/abc && touch /tmp/abc/hehe   <==使用ls查看目錄/tmp/abc是否存在,若存在就用touch創建/tmp/abc/hehe
    ls:/tmp/abc :No such file or directory
    # ls 很乾脆地說明找不到該目錄,但沒有touch的錯誤,說明touch沒有執行
    
    [root@www~]#rm -r /tmp/abc
    [root@www~]#ls /tmp/abc || mkdir /tmp/abc     <==測試/tmp/abc是否存在,不存在就創建
    ls:/tmp/abc:No such file or directory   <==不存在/tmp/abc文件夾
    [root@www~]#ll /tmp/abc
    total 0
    
    如果有三個命令,那麼命令的順序爲 command1 && command2 || command3
    ls /tmp/vbirding && echo "exit" || echo "not exit"     <==如果存在就顯示錯在,不錯在就顯示不存在,正確
    ls /tmp/vbirding || echo "no exit" && echo "exit"     <==錯誤,如果不存在,顯示no exit 同時也顯示 exit
    
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章