国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發(fā)設計 > 正文

Linux 數(shù)據(jù)流重定向

2019-11-06 06:23:40
字體:
來源:轉載
供稿:網(wǎng)友
一、什么是數(shù)據(jù)流重定向在說數(shù)據(jù)流重定向之前,先來說說數(shù)據(jù)流的概念吧。數(shù)據(jù)流分為三種:標準輸入(stdin),標準輸出(stdout)和標準錯誤輸出(stderr)。簡單來說,標準輸出指的是命令執(zhí)行所回傳的正確信息,而標準錯誤輸出指的是命令執(zhí)行失敗后,所回傳的錯誤信息。這些信息默認是打印在屏幕上的。那么什么時數(shù)據(jù)流重定向呢?從字面上理解就是改變數(shù)據(jù)流的流向,使之流向指定的文件或設備。例如,把執(zhí)行命令所回傳的正確信息(標準輸出信息)流向一個文件,而將所回傳的錯誤信息(標準錯誤輸出)流向別一個文件,并把這兩個文件的信息保存下來,而在屏幕上不出現(xiàn)任何該命令執(zhí)行所回傳的信息。二、數(shù)據(jù)流重定向的實現(xiàn)1、數(shù)據(jù)流重寫向的分類在linux中利用shell實現(xiàn)數(shù)據(jù)流重定向是非常簡單的,下面來介紹3種數(shù)據(jù)流的重定向。1)標準輸入(stdin):代碼為0,使用<或者<<2)標準輸出(stdout):代碼為1,使用>或者>>3)標準錯誤輸出(stderr):代碼為2,使用2>或者2>>看到這里,你可能還是很疑惑,那個代碼有什么作用,<和<<有什么不同,>和>>又有什么不同?2、代碼的作用那個代碼是為了區(qū)分命令中所使用的不同的數(shù)據(jù)流而設定的,例如,0代碼的就是標準輸入。注意在默認情況下,>和>>分別表示1>和1>>,而<和<<分別表示0<和0<<。3、標準輸出數(shù)據(jù)流重定向詳解在說輸入之前,我先跟大家說說輸出吧,一般使用例子都能讓人更容易明白一樣東西是怎么樣使用的。所以請看下面的例子,在當前目錄下,已存在一個名為StreamTest.txt的文本件,我使用cat命令來進行測試,我們知道,cat命令會把文本文件中的內(nèi)容輸出到屏幕上來。請看下面的例子:我們可以看到直接使用cat命令,StreamTest.txt文件的內(nèi)容直接打印在屏幕上。而第二條語句cat StreamTest.txt > outfile1使用了數(shù)據(jù)流重定向,那么這條語句是什么意思呢?它的意思就是把由cat命令所產(chǎn)生的直接輸出到屏幕上的信息輸出到文件outfile1中,并保存。而且你可以看到,原本應在屏幕上輸出的信息并沒有輸出到屏幕上,因為它輸出到了文件outfile1中。這樣你就應該能理解為什么叫數(shù)據(jù)流重定向了吧。值得注意的是,如果outfile1文件不存在于當前目錄下,系統(tǒng)則會自動創(chuàng)建這個文件;如果這個文件已經(jīng)存在于當前目錄下,那么系統(tǒng)就會先把這個文件中的內(nèi)容清空,然后再將數(shù)據(jù)寫入到該文件,也就是說若以>輸出到一個已存在的文件,則這個文件的內(nèi)容將會被覆蓋。那有沒有什么方法能不讓文件內(nèi)容被覆蓋呢?當然就,那就是>>,這也就是>與>>的區(qū)別。其用法與>大同小異,如下圖:同樣的,使用這個命令,如果outfile2不存在于當前目錄中,則系統(tǒng)會自動創(chuàng)建這個文件,而如果這個文件已經(jīng)存在于當前目標下,則會把數(shù)據(jù)追加到該文件的末尾。所以在圖中看到了兩份重復的內(nèi)容。注:因為在默認情況下,>和>>分別表示1>和1>>,所以在命令中沒有用到1>和1>>,因為它們是等價的。4、標準錯誤輸出數(shù)據(jù)流重定向詳解標準錯誤輸出的使用和標準輸出的使用大同小異,在這里不再贅述,其使用如下:由于當前目標下不存在文件TestStream.txt,所以直接使用cat,則會在屏幕上輸出錯誤提示,當然我們也可以用數(shù)據(jù)流重定向2>來把它輸出到文件errfile中,而不是輸出到屏幕上。因為>默認是代碼1,所以這里需要寫成2>,系統(tǒng)才知道這個是標準錯誤輸入重定向,那現(xiàn)在你應該更深刻地理解到代碼的作用了吧。而2>>也是追加的作用。通過上面的例子可以看到,我們可以利用數(shù)據(jù)流重定向把錯誤信息和正確信息分開。5、標準輸入數(shù)據(jù)流重寫向詳解詳解在標準輸入中,<代表將原來需要由鍵盤輸入的數(shù)據(jù)改由文件內(nèi)容來替代,<<則代表結束輸入。例如:利用cat來創(chuàng)建一個簡單的文件catfile1,如下圖所示:如果當前目錄下不存在catfile1,則系統(tǒng)自動創(chuàng)建這個文件,并由鍵盤向這個文件寫入內(nèi)容;若文件已存在,則用輸入的內(nèi)容覆蓋該文件中的內(nèi)容。而標準輸入重定向可以用文件的內(nèi)容來替代鍵盤輸入,其操作如下圖所示:可以看到,它把catfile1的內(nèi)容輸入到catfile2中,代替先前的鍵盤輸入。值得注意的是,在標準輸入重定向中<<并不表示追加,而是表示結束輸入的意思,即作為一個結束符。請看如下的例子:之前的例子,都是使用ctrl+D來結束的,而這個例子,當你輸入“eof”時,自動退出了,當然這個結束符,你可以自己定義。這對寫程序是有一定的好處的。三、把正確信息與錯誤信息寫入同一個文件中的方法上面的例子,都是把正確和錯誤的信息分別存儲在不同的文件上的,那有沒有辦法把正確和錯誤的信息都儲存在同一個文件中呢?當然有!請看下面的例子:注意:上面第三行的命令是錯誤的,雖然它看看起來非常直觀。它的錯誤并不是因為語法之類的錯誤,也不是因為它不能執(zhí)行,而是因為,有兩條數(shù)據(jù)流同時寫入一個文件,又沒有特殊的語法,此時會導致兩條數(shù)據(jù)流交叉地寫入文件,造成次序的錯亂,而不是屏幕上原來輸出的排序,使文件的信息不可讀。四、屏蔽所有信息的方法如果我有一定的目的,想把所有的錯誤信息或正確信息都屏蔽掉,可以怎么辦呢?這時可以利用數(shù)據(jù)流重定向,使它流向一個設備——/dev/null,它就像一個黑洞一樣,可以吃掉任何導向這個設備的信息。請看下面的例子:無論是正確的信息還是錯誤的信息,它都能吃掉。五、何時使用數(shù)據(jù)流重定向既然我們知道了數(shù)據(jù)流的重定向,那么什么時候要使用數(shù)據(jù)流重定向呢?數(shù)據(jù)流重定向一般應用于:1、屏幕輸出的信息很重要,而且我們需要將它保存下來;2、后臺執(zhí)行中的程序,不希望它干擾屏幕正常的輸出結果;3、一些系統(tǒng)的例行命令的執(zhí)行結果,希望它能夠保存下來;4、一些執(zhí)行命令的可能已知出錯信息時,想以“2>/dev/null”將它屏蔽掉;5、錯誤信息和正確信息需要分別輸出;
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 凌海市| 门头沟区| 利津县| 清远市| 汉源县| 雷州市| 科技| 汤原县| 名山县| 张家界市| 容城县| 亳州市| 沾益县| 营口市| 阿鲁科尔沁旗| 青铜峡市| 满城县| 佛教| 宁国市| 阿荣旗| 兴业县| 永泰县| 南木林县| 曲周县| 尖扎县| 襄垣县| 任丘市| 淮安市| 收藏| 怀远县| 桐乡市| 绥滨县| 靖安县| 花莲县| 穆棱市| 锡林郭勒盟| 托克逊县| 平远县| 洪湖市| 铜鼓县| 祥云县|