麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 服務器 > Linux服務器 > 正文

如何在Linux I/O 重定向的一些小技巧

2024-09-05 23:05:49
字體:
來源:轉載
供稿:網友

Linux I/O 重定向雖然很簡單,但在腳本編寫、系統管理時卻要常常打交道,搞清其中使用技巧非常有用。

  首先說一下什么是 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,你可以把 "&" 理解為 "取地址"

  請看以下例子:

  #e xec 5>&1

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

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

  # grep search-word

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

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

  #e cho 123456789 >filename 把字符串寫到文件 filename 中 #e xec 3<>filename 把文件 filename 打開,并指定文件標識符為3 #read -n 4 <&3 從文件中讀4個字符,句柄已經指到第四個字符末尾 #e cho -n . >&3 在第5個字符處寫一個點,覆蓋第5個字符,-n表示不換行 #e xec 3>&- 關閉文件標識符

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

  命令 j<>filename 表示把文件打開,并指明文件標識符為 j

  "&-" 表示關閉文件標識符

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

  n<&- 關閉輸入文件標識符 n 0<&-或<&- 關閉標準輸入 stdin n>&- 關閉輸出文件標識符 n 1>&-或>&-關閉標準輸出 stdout

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

  > filename 或者 > filename

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 欧美精品久久天天躁 | 免费毛片在线视频 | 欧美 videos粗暴 | 国产黄色一区二区 | 欧美久久一区二区 | 国产高潮失禁喷水爽到抽搐视频 | 中文欧美日韩 | gril hd| 亚州成人在线观看 | 欧美日韩中文字幕在线 | 中文字幕在线观看成人 | 久久久99精品视频 | 亚洲第一成人av | 在线播放亚洲精品 | 国产欧美一区二区三区免费看 | 一本色道久久99精品综合蜜臀 | 91精品国产一区二区三区四区在线 | 水卜樱一区二区av | 国产精品久久久久久久久久了 | 日韩一级免费 | 国产免费成人 | 龙的两根好大拔不出去h | 国产精品毛片va一区二区三区 | 成人午夜免费看 | 男人午夜小视频 | 一级黄色欧美 | www.精品久久 | 噜噜色av| 精品国产一区二区三区在线观看 | 蜜桃网在线观看 | 中文字幕涩涩久久乱小说 | 免费男女视频 | 成人羞羞在线观看网站 | 久久久久国产成人精品亚洲午夜 | 国产一级二级在线播放 | 密室逃脱第一季免费观看完整在线 | 国产一国产一级毛片视频在线 | 久久久久亚洲美女啪啪 | 免费毛片免费看 | 久久午夜免费视频 | 一级黄片毛片免费看 |