欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

技巧:Linux I/O重定向的一些小技巧

系統 3357 0

http://www.ibm.com/developerworks/cn/linux/l-iotips/

首先說一下什么是I/O重定向,所謂I/O重定向簡單來說就是一個過程,這個過程捕捉一個文件,或者命令,程序,腳本,甚至腳本中的代碼塊(code block)的輸出,然后把捕捉到的輸出,作為輸入發送給另外一個文件,命令,程序,或者腳本。

如果談到I/O重定向,就涉及到文件標識符(File Descriptor)的概念, 在Linux系統中,系統為每一個打開的文件指定一個文件標識符以便系統對文件進行跟蹤,這里有些和C語言編程里的文件句柄相似,文件標識符是一個數字,不同數字代表不同的含義,默認情況下,系統占用了3個,分別是0標準輸入(stdin),1標準輸出(stdout), 2標準錯誤(stderr), 另外3-9是保留的標識符,可以把這些標識符指定成標準輸入,輸出或者錯誤作為臨時連接。通常這樣可以解決很多復雜的重定向請求。

標準輸入通常指鍵盤的輸入?
標準輸出通常指顯示器的輸出?
標準錯誤通常也是定向到顯示器

請看以下例子,來描述一下他們的關系

            #ls /dev


          

?

這個命令列出/dev目錄下的所有文件,在屏幕上輸出結果。

這里 /dev 就是作為命令ls的標準輸入(從鍵盤輸入),而打印在屏幕的結果就是標準輸出(/dev目錄中的內容)

還是回到標題,重定向就是把標準的輸入或者輸出更改成其他的方式,請參看如下例子?
或者等同于

            #ls /dev 1>filename                                  #注意:"1"和">"中間沒有空格


          

?

以上命令會把命令的標準輸出重新定向到一個文件filename,而不是顯示到屏幕上,如果不指明文件標識符,系統默認的就是1, 因此1可以省略

如果把上面例子重的">"改成">>"則表示把輸出追加到filename文件的末尾,如果文件不存在則創建它。如下

            #ls /dev >>filename


          

?

也可以把標準錯誤重新定向到文件

            #ls -qw  /dev  2>filename


          

?

顯然 -qw是一個錯誤參數,通常會在顯示器上報告一個錯誤信息,但由于把2標準錯誤(stderr)重新定向到了文件filename,因此顯示器沒有錯誤信息,而信息寫到了文件里面

以下命令是把標準輸出和錯誤都定向到文件

            #ls /dev &>filename


          

?

"&"在這里代表標準輸出和標準錯誤,這里無論是正常輸出還是錯誤信息都寫到filename中了。

重新定義標準輸入,輸出,和錯誤的文件標識符

重新定義文件標識符可以用i>&j命令,表示把文件標識符i重新定向到j,你可以把"&"理解為"取地址"

請看以下例子

            #exec 5>&1


          

?

表示把文件標識符5定向到標準輸出,這個命令通常用來臨時保存標準輸入。

同樣標準輸入也是可以重新定向的,請參考下面例子

            # grep search-word <filename或者grep search-word 0<filename


          

?

一般來說grep命令在給定文件中搜索字符串,以上命令把文件filename作為grep命令的標準輸入,而不是從鍵盤輸入。

前面曾經提到,系統為每一個打開的文件指定一個文件標識符以便系統對文件進行跟蹤,那么默認的文件標識符是什么呢?答案是0,也就是標準輸入,或者可以說從鍵盤輸入。當然這個文件標識符也可以自己指定,請參考下面例子

            #echo 123456789 >filename   把字符串寫到文件filename中

#exec 3<>filename           把文件filename打開,并指定文件標識符為3

#read -n 4 <&3              從文件中讀4個字符,句柄已經指到第四個字符末尾

#echo -n . >&3              在第5個字符處寫一個點,覆蓋第5個字符,-n表示不換行

#exec 3>&-	          關閉文件標識符3


          

?

現在cat filename文件的結果就成了1234.6789

命令j<>filename表示把文件打開,并指明文件標識符為j?
"&-"表示關閉文件標識符

有關關閉文件標識符的操作請參考下面

            n<&- 關閉輸入文件標識符n

0<&-或<&- 關閉標準輸入stdin

n>&- 關閉輸出文件標識符n

1>&-或>&-關閉標準輸出stdout


          

?

另外還有一些其他命令,如下參考

            2.	:> filename 或者 > filename


          

?

表示把文件filename設置成空,也就是清空文件內容,如果文件不存在,則創建一個空文件,(等同于touch命令) :表示一個空輸出,兩個命令的唯一區別就是>filename不是在所有shell都可以正常工作的。

?

參考資料

  • Jeffrey Friedl, Mastering Regular Expressions, O'Reilly

  • Mendel Cooper, Advanced Bash-Scripting Guide

  • Michael Jang, Mastering Redhat 9

關于作者

樊奇,IBM TSS China Beijing ,Xseries eServer 工程師,對Linux 很有興趣。通過? fanqi@cn.ibm.com 可以和聯系。電話:010 84981188-6856

技巧:Linux I/O重定向的一些小技巧


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦?。。?/p>

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 日日碰狠狠添天天爽五月婷 | 午夜精品一区 | 一区二区中文 | 欧美一级黄色免费看 | 久久久久一区二区三区 | 美女视频黄a视频免费全过程 | 久久久久成人精品免费播放 | 性少妇videosexfreexx | 欧美精品在线免费观看 | 99中文字幕 | 亚洲国产aⅴ成人精品无吗 最新国产网址 | 日美女网站 | 亚洲欧美精品一区二区 | 国产人成午夜免视频网站 | 国产精品无码永久免费888 | 亚洲欧美日韩在线不卡 | 一区二区三区亚洲 | 欧美极品在线观看 | 特黄做愛又硬又大A片视频 小视频在线看 | 亚洲美女黄色 | 精品国产免费久久久久久 | 欧美在线精品一区二区在线观看 | 午夜视频网 | 久久久久久亚洲 | 色综合婷婷| 一道本不卡一区 | 精品成人久久久 | 欧美一区二区三区久久久 | 秋霞91| 两性网站 | 久草福利在线视频 | 久久久91 | 小明永久成人一区二区 | 偷拍免费视频 | 色婷婷香蕉 | 久久久久久久国产精品电影 | 播放一级毛片 | 黄色在线观看 | 一级片网址 | 国产一区二区不卡 | 久久人人爽人人爽人人 |