首先來依次解釋2>&1的所有含義:linux
2和1都是FD(File Descriptor文件標識符)。linux系統中,系統爲每個打開的文件指定一個文件標識符進行跟蹤,文件標示符是一個大於0的整數,不一樣數字表明不一樣含義。shell的標識符一般爲10個,即0~9.系統默認佔用了三個也是咱們經常使用的:shell
0 標準輸入 1 標準輸出 (stdout) 2 標準錯誤輸出 (stderr)
&是後臺執行的意思。code
>覆蓋,>>追加。
繼承
因此整體上這個命令的含義是:將標準錯誤輸出到重定向,經過後臺&,放到標準輸出所在的地方。ip
假設咱們ls一個不存在的文件a.txtclass
ls a.txt > file.log 2>&1
其實這個命令若是用清晰的命令表達的,應該是這樣的:後臺
ls a.txt > file.log 2>file.log
這是由於若是用第二種寫法,stdout和stderr都直接送到file中, file會被打開兩次,這樣stdout和stderr會互相覆蓋,這樣寫至關使用了FD1和FD2兩個同時去搶佔file 的管道,而第一種這條命令就將stdout直接送向file, stderr 繼承了FD1管道後,再被送往file,此時,file 只被打開了一次,也只使用了一個管道FD1,它包括了stdout和stderr的內容.file