在了解重定向之前,我們先來看看linux 的文件描述符。
linux文件描述符:可以理解為linux跟蹤打開文件,而分配的一個數字,這個數字有點類似c語言操作文件時候的句柄,通過句柄就可以實現文件的讀寫操作。 用戶可以自定義文件描述符范圍是:3-num,這個最大數字,跟用戶的:ulimit –n 定義數字有關系,不能超過最大值。
linux啟動后,會默認打開3個文件描述符,分別是:標準輸入standard input 0,正確輸出standard output 1,錯誤輸出:error output 2
標準輸入、輸出、錯誤輸出
標準輸入:從鍵盤輸入數據,即從鍵盤讀入數據。 0
標準輸出:把數據輸出到終端上。1
標準錯誤輸出:把標準錯誤輸出到終端上。2
默認的標準輸入指的是鍵盤,默認的標準輸出與標準錯誤輸出指的是屏幕或者是終端。
在Linux系統下,一切皆是文件,對文件的操作,一般要用到文件標識符。它們的文件標識符,分別為0,1,2.
重定向
- 輸出重定向
輸出重定向比較好理解,標準輸出是輸出到屏幕上,我們可以把輸出寫入到一個指定的文件中。
下面的命令就是把輸出重定向到file文件中,這里需要注意 > 和>>的區別,如果file中有內容,使用>會把file中的內容覆蓋,>>會在file的后面追加
ls -l > file
ls -a >> file
- 輸入重定向
下面的命令是一個輸入重定向的例子,把file文件的內容作為wc -l命令的輸入。
wc -l < file
這里我有一個疑問就是,如果不使用重定向的話和使用重定向有啥區別呢
重定向
看上面的圖片
不使重定向的 輸出 5 file,重定向的輸出 5
這是因為,不使用重定向,命令可以獲取到輸入的文件,使用重定向之后,它僅僅知道從標準輸入讀取內容。
- Here document用法
這表示一種寫法,也算是重定向的一種,還是使用wc命令來演示
here document
cat
這里的test叫做delimitor,這個意思就是把兩個delimitor之間的內容通過重定向傳給命令。當然這個delimitor可以使任意字符,只要是首尾相同就可以。
- Linux下輸出重定向的典型分析
# &1 &2 分別表示標準輸出和 標準錯誤輸出
ls -l > out 2>&1
意思是把命令 ls -l的標準輸出重定向到out文件中,另外標準錯誤輸出重定向到標準輸出中,因為標準輸出已經重定向到out文件了,所以錯誤輸出也輸出到out文件中。