文件描述符簡介:文件描述符在形式上是一個非負整數,每一個文件描述符會與一個打開文件相對應,內核利用文件描述符來訪問文件,最廣為人知的文件描述符有stdin(標準輸入),stdout(標準輸出),stderr(標準錯誤),系統分別事先為它們保留了三個文件描述符0,1,2,我們也可以通過特殊命令給我們的 ...
文件描述符簡介:文件描述符在形式上是一個非負整數,每一個文件描述符會與一個打開文件相對應,內核利用文件描述符來訪問文件,最廣為人知的文件描述符有stdin(標準輸入),stdout(標準輸出),stderr(標準錯誤),系統分別事先為它們保留了三個文件描述符0,1,2,我們也可以通過特殊命令給我們的的文件指定文件描述符。
重定向的意思:Linux中,IO重定向是將某一個文件描述符的內容轉移到另一個指定的文件描述符中,通常與文件描述符有關。
最常用的我們可以將標準輸出的內容重定向到指定文件中。通過重定向操作符(>和>>)可以將輸出發送到文件中,而不是終端。>和>>略有差異,儘管兩者都可以將文本重定向到文件,但是前者會清空文件,再寫入內容,後者會將內容追加到現有的文件的尾部,預設情況下,重定向操作符針對的是標準輸出,所以>等同於1>,類似的>>等同與1>>。
1:標準輸出和標準錯誤重定向
2:利用<操作符將文件讀入stdin
3:自定義文件描述符
4:tee命令
1:例如echo命令就是將指定的字元串送到標準輸出,那麼我們就可以結合echo命令將指定字元串發送到指定的文件:
在這裡就是將文件描述符stdout(1)的內容通過重定向操作符重定向到了test.txt文件里。
在處理錯誤時,來自stderr的輸出被傾倒入了文件/dev/null中,/dev/null是一個特殊的設備文件,他會丟棄接收到的任何數據。也常被稱為黑洞,因為但是進入其中的數據都將一去不復返。同樣的我們可以將標準錯誤輸出也重定向到文件中,以供保存。
接下來這個命令會將stderr文本列印到屏幕上,而不是重定向到文本中,因為預設情況下重定向操作符針對的是標準輸出,而這裡stdout並沒有輸出,而是stderr輸出
在重定向操作符前指定stderr文件描述符,就可以重定向stderr了
2: 從stdin讀取輸入的命令能以多種方式接收數據:
藉助小於符號,我們可以像使用stdin那樣讀取文件中數據: cmd<file; (cmd命令需要文件數據)
還有使用管道時,經常將前一個命令的標準輸出重定向成下一個命令的標準輸入,cmd1 | cmd2。
3:使用exec命令創建一個用於讀取的文件描述符(符號&表明後邊的數字是一個文件描述符):
創建一個用於寫入的文件描述符:
4:標準輸出既可以被重定向到文件,也可以通過管道傳入其他程式,但不能同時進行,命令tee可以實現這個操作,tee命令從stdin讀取,將數據重定向到文件中,然後還將數據重定向到標準輸出(stdout)中:cmd | tee file1 file2 | othercmd
例如ls命令列出和cat命令查看文件內容的結果均為標準輸出:
-a 指定以追加的方式保存到文件
本知識點需瞭解exec命令,以及對文件的打開模式,標準輸入輸出的初步瞭解。