最近在寫crontab的時候,看到一條0 10 sh /abc/f.sh > /abc/log 2>&1大體長成這樣的一條定時任務。不知道最後面的2>&1是起什麼做用的,而後就去學習了一下。segmentfault
1.首先咱們看前面的0 10 sh /abc/f.sh > /abc/log,這個比較好理解,意思是天天的10點整去執行f.sh腳本,而且將標準輸出重定向到log文件中
2.咱們再來看後面的2>&1, 而後咱們還得知道一個概念,文件描述符,能夠參考下,wiki對文件描述符的簡紹和文件描述符的原理連接。簡單的來講就是有一個整數,它的枚舉值是0(標準輸入),1(標準輸出),2(標準錯誤),而後0是從鍵盤輸入,1和2都是輸出到屏幕上。
3.咱們瞭解了整數的含義以後再來看就比較好理解了,對於重定向符號">",咱們能夠這麼理解: 文件描述符 > 文件.好比 ls > a.txt,就是說把ls的輸出存入a.txt, >等於 1 >, 因此寫成ls 1> a.txt也是同樣的效果.若是>後面是&1就是用來表示這是文件描述符.
4.0 10 sh /abc/f.sh > /abc/log 2>&1因此這個命令就是說把執行結果的標準輸出放入到log文件,又由於2>&1(標準錯誤也重定向到標準輸入,以前標準輸入已經重定向到了log),所以這個命令的正確執行和報錯都會放入到log文件中。學習
咱們能夠看下面的兩個例子:
1.首先由f,log兩個文件,ll f1 > log 2 >&1,意思是標準輸出和錯誤都輸出到log中,因此cat log中有錯誤信息。
2.再看第二個,首先由f,log兩個文件,ll f2 > log >&2,意思是標準輸出重定向到log中,標準輸出又重定向到標準錯誤中,由於標準錯誤是輸出到屏幕的,因此無論ll f2是存在仍是不存在都會在屏幕上顯示出來。spa