南昌莫非網絡:Linux中的幾種標準文件描述符詳細介紹.
Linux系統將每個對象當作文件處理,這包括輸入和輸出進程。Linux用文件描述符(file descriptor)來標識每個文件對象。文件描述符是一個非負整數,可以**標識會話中打開的文件。每個進程一次多可以有九個文件描述符。出于特殊目的,bash shell保留了前三個文件描述符(0、1和2),詳情見下表。
這三個特殊文件描述符會處理腳本的輸入和輸出。shell用它們將shell默認的輸入和輸出導向到相應的位置。下面南昌網站建設公司-南昌莫非網絡科技就來為大家介紹一下這些標準文件描述符,供大家參考!
一、STDIN
STDIN文件描述符代表shell的標準輸入。對終端界面來說,標準輸入是鍵盤。shell從STDIN 文件描述符對應的鍵盤獲得輸入,在用戶輸入時處理每個字符。
在使用輸入重定向符號(<)時,Linux會用重定向指定的文件來替換標準輸入文件描述符。 它會讀取文件并提取數據,就如同它是鍵盤上鍵入的。
許多bash命令能接受STDIN的輸入,尤其是沒有在命令行上指定文件的話。下面是個用cat 命令處理STDIN輸入的數據的例子。
$ cat
this is a test
this is a test
this is a second test.
this is a second test.
當在命令行上只輸入cat命令時,它會從STDIN接受輸入。輸入一行,cat命令就會顯示出 一行。
但你也可以通過STDIN重定向符號強制cat命令接受來自另一個非STDIN文件的輸入。
$ cat < testfile
This is the first line.
This is the second line.
This is the third line.
$
現在cat命令會用testfile文件中的行作為輸入。你可以使用這種技術將數據輸入到任何能從 STDIN接受數據的shell命令中。
二、STDOUT
STDOUT文件描述符代表shell的標準輸出。在終端界面上,標準輸出就是終端顯示器。shell 的所有輸出(包括shell中運行的程序和腳本)會被定向到標準輸出中,也就是顯示器。
默認情況下,大多數bash命令會將輸出導向STDOUT文件描述符。同時,你也可以用輸出重定向來改變。
$ ls -l > test2
$ cat test2
total 20
-rw-rw-r-- 1 rich rich 53 2014-10-16 11:30 test
-rw-rw-r-- 1 rich rich 0 2014-10-16 11:32 test2
-rw-rw-r-- 1 rich rich 73 2014-10-16 11:23 testfile
$
通過輸出重定向符號,通常會顯示到顯示器的所有輸出會被shell重定向到指定的重定向文件。你也可以將數據追加到某個文件。這可以用>>符號來完成。
$ who >> test2
$ cat test2
total 20
-rw-rw-r-- 1 rich rich 53 2014-10-16 11:30 test
-rw-rw-r-- 1 rich rich 0 2014-10-16 11:32 test2
-rw-rw-r-- 1 rich rich 73 2014-10-16 11:23 testfile
rich pts/0 2014-10-17 15:34 (192.168.1.2)
$
who命令生成的輸出會被追加到test2文件中已有數據的后面。 但是,如果你對腳本使用了標準輸出重定向,你會遇到一個問題。下面的例子說明了可能會出現什么情況。
$ ls -al badfile > test3
ls: cannot access badfile: No such file or directory
$ cat test3
$
當命令生成錯誤消息時,shell并未將錯誤消息重定向到輸出重定向文件。shell創建了輸出重 定向文件,但錯誤消息卻顯示在了顯示器屏幕上。注意,在顯示test3文件的內容時并沒有任何錯誤。test3文件創建成功了,只是里面是空的。
shell對于錯誤消息的處理是跟普通輸出分開的。如果你創建了在后臺模式下運行的shell腳本,通常你必須依賴發送到日志文件的輸出消息。用這種方法的話,如果出現了錯誤信息,這些信息是不會出現在日志文件中的。你需要換種方法來處理。
三、STDERR
shell通過特殊的STDERR文件描述符來處理錯誤消息。STDERR文件描述符代表shell的標準錯誤輸出。shell或shell中運行的程序和腳本出錯時生成的錯誤消息都會發送到這個位置。
默認情況下,STDERR文件描述符會和STDOUT文件描述符指向同樣的地方(盡管分配給它們的文件描述符值不同)。也就是說,默認情況下,錯誤消息也會輸出到顯示器輸出中。
但從上面的例子可以看出,STDERR并不會隨著STDOUT的重定向而發生改變。使用腳本時,你常常會想改變這種行為,尤其是當你希望將錯誤消息保存到日志文件中的時候。
以上就是南昌網絡公司莫非傳媒為大家介紹的關于Linux中的三種標準文件描述符,大家可以了解一下,希望對大家今后的學習有所幫助。