文件描述符與重定向

文件描述符簡介文件描述符在形式上是一個非負整數,每個文件描述符會與一個打開文件相對應,內核利用文件描述符來訪問文件,最廣爲人知的文件描述符有stdin(標準輸入),stdout(標準輸出),stderr(標準錯誤),系統分別事先爲它們保留了三個文件描述符0,1,2,咱們也能夠經過特殊命令給咱們的的文件指定文件描述符。

重定向的意思:Linux中,IO重定向是將某一個文件描述符的內容轉移到另外一個指定的文件描述符中,一般與文件描述符有關。

最經常使用的咱們能夠將標準輸出的內容重定向到指定文件中。經過重定向操做符(>和>>)能夠將輸出發送到文件中,而不是終端。>和>>略有差別,儘管二者均可以將文本重定向到文件,可是前者會清空文件,再寫入內容,後者會將內容追加到現有的文件的尾部,默認狀況下,重定向操做符針對的是標準輸出,因此>等同於1>,相似的>>等同與1>>。

 

1:標準輸出和標準錯誤重定向spa

2:利用<操做符將文件讀入stdin3d

3:自定義文件描述符blog

4:tee命令字符串

 

1:例如echo命令就是將指定的字符串送到標準輸出,那麼咱們就能夠結合echo命令將指定字符串發送到指定的文件:cmd

 在這裏就是將文件描述符stdout(1)的內容經過重定向操做符重定向到了test.txt文件裏。it

 

在處理錯誤時,來自stderr的輸出被傾倒入了文件/dev/null中,/dev/null是一個特殊的設備文件,他會丟棄接收到的任何數據。也常被稱爲黑洞,由於可是進入其中的數據都將一去不復返。一樣的咱們能夠將標準錯誤輸出也重定向到文件中,以供保存。io

接下來這個命令會將stderr文本打印到屏幕上,而不是重定向到文本中,由於默認狀況下重定向操做符針對的是標準輸出,而這裏stdout並無輸出,而是stderr輸出class

在重定向操做符前指定stderr文件描述符,就能夠重定向stderr了test

 

2: 從stdin讀取輸入的命令能以多種方式接收數據:file

藉助小於符號,咱們能夠像使用stdin那樣讀取文件中數據: cmd<file; (cmd命令須要文件數據)

還有使用管道時,常常將前一個命令的標準輸出重定向成下一個命令的標準輸入,cmd1 | cmd2。

 

3:使用exec命令建立一個用於讀取的文件描述符(符號&代表後邊的數字是一個文件描述符):

 

 

建立一個用於寫入的文件描述符:

 

4:標準輸出既能夠被重定向到文件,也能夠經過管道傳入其餘程序,但不能同時進行,命令tee能夠實現這個操做,tee命令從stdin讀取,將數據重定向到文件中,而後還將數據重定向到標準輸出(stdout)中:cmd | tee file1 file2 | othercmd

例如ls命令列出和cat命令查看文件內容的結果均爲標準輸出:

-a 指定以追加的方式保存到文件

 

本知識點需瞭解exec命令,以及對文件的打開模式,標準輸入輸出的初步瞭解。

相關文章
相關標籤/搜索