檔案描述符簡介:檔案描述符在形式上是一個非負整數,每一個檔案描述符會與一個打開檔案相對應,內核利用檔案描述符來訪問檔案,最廣為人知的檔案描述符有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命令,以及對檔案的打開模式,標準輸入輸出的初步了解,
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/160053.html
標籤:Linux
