成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

深入了解Linux I/O重定向

系統(tǒng) Linux
一個文件描述符說白了就是文件系統(tǒng)為了跟蹤這個打開的文件而分配給它的一個數(shù)字,也可以的將其理解為文件指針的一個簡單版本,與C語言中文件句柄的概念很相似。

一個文件描述符說白了就是文件系統(tǒng)為了跟蹤這個打開的文件而分配給它的一個數(shù)字,也可以的將其理解為文件指針的一個簡單版本,與C語言中文件句柄的概念很相似。

[[182241]]

Linux 中默認(rèn)情況下始終有 3 個“文件”處于打開狀態(tài),stdin(鍵盤)、 stdout(屏幕)和 stderr(錯誤消息輸出到屏幕上)。這 3 個文件和其他打開的文件都可以被重定向。重定向,簡單的說就是捕捉一個文件、命令、程序、腳本,或者是腳本中的代碼塊的輸出,然后將這些輸出作為輸入發(fā)送到另一個文件、命令、程序或腳本中。

每個打開的文件都會被分配一個文件描述符。stdin、stdout 和 stderr 的文件描述符分別是 0、1 和 2。除了這 3 個文件,對于其它那些需要打開的文件,保留了文件描述符 3 到 9。在某些情況下,將這些額外的文件描述符分配給 stdin、stdout 或 stderr 作為臨時的副本鏈接是非常有用的。在經(jīng)過復(fù)雜的重定向和刷新之后需要把它們恢復(fù)成正常狀態(tài)。

重定向

> file

將 stdout 重定向到一個文件。如果這個文件不存在,那就創(chuàng)建,否則就覆蓋。

創(chuàng)建一個包含目錄樹列表的文件:

  1. ls -lR >dir-tree.list 

清空文件:

  1. : > file 

這是一個 > 操作,將會把文件 file 變?yōu)橐粋€空文件(就是 size 為 0)。如果文件不存在,那么就創(chuàng)建一個 0 長度的文件(與touch 的效果相同)。: 是一個占位符,不產(chǎn)生任何輸出。

也可以省略 : 占位符:

  1. > file 

與上邊的 : > 效果相同, 但是某些 shell (比如 bash)可能不支持這種形式。

>> file

將 stdout 重定向到一個文件。如果文件不存在,那么就創(chuàng)建它,如果存在,那么就追加到文件后邊。

 

  1. script.sh 1 > filename  
  2. # 重定向 stdout 到文件"filename" 
  3. script.sh 1 >> filename  
  4. # 重定向并追加 stdout 到文件"filename" 
  5. script.sh 2 > filename  
  6. # 重定向 stderr 到文件"filename" 
  7. script.sh 2 >> filename  
  8. # 重定向并追加 stderr 到文件"filename"

&> file

將 stdout 和 stderr 都重定向到文件:

  1. script.sh &> /dev/null 

m> file

m 是一個文件描述符,如果沒有明確指定的話默認(rèn)為 1。

file 是一個文件名。文件描述符 m 被重定向到文件 file。

  1. script.sh 2> error.log 

m>&n

m 是一個文件描述符,如果沒有明確指定的話默認(rèn)為 1。

n 是另一個文件描述符。

  1. script.sh 2>&1 

重定向 stderr 到 stdout。將錯誤消息的輸出,發(fā)送到與標(biāo)準(zhǔn)輸出所指向的地方。

  1. exec 6<>File
  2. script.sh >&6 

默認(rèn)的,重定向文件描述符 1(stdout)到 6。所有傳遞到 stdout 的輸出都送到 6 中去。

< file

從文件中接受輸入。與 > 是成對命令,并且通常都是結(jié)合使用。0 < file 或 < file,前面的標(biāo)準(zhǔn)輸入 stdin 0 可以省略。

  1. grep search-word < filename 

j<>file

為了讀寫 file,把文件 file 打開,并且將文件描述符 j 分配給它。

如果文件 file 不存在,那么就創(chuàng)建它。如果文件描述符 j 沒指定,那默認(rèn)是標(biāo)準(zhǔn)輸入 stdin 0 。

 

  1. echo 1234567890 > File ### 寫字符串到 File .  
  2. exec 3<>File ### 打開 File 并且將 fd 3 分配給它.  
  3. read -n 4 <&3 ### 只讀取4個字符.  
  4. echo -n . >&3 ### 寫一個小數(shù)點.  
  5. exec 3>&- ### 關(guān)閉fd 3.  
  6. cat File ### ==> 1234.67890 

(注:上述命令的輸出結(jié)果和原文不同,原因未知。)

管道

管道與 > 很相似,但是實際上更通用。對于想將命令、腳本、文件和程序串連起來的時候很有用。

  1. cat *.txt | sort | uniq > result-file 

上述命令對所有 .txt 文件的輸出進(jìn)行排序,并且刪除重復(fù)行。***將結(jié)果保存到 result-file 中。

可以將輸入輸出重定向和/或管道的多個實例結(jié)合到一起寫在同一行上:

  1. command < input-file > output-file 

等價于:

  1. < input-file command > output-file 

但是這種寫法不標(biāo)準(zhǔn),有的 shell 可能不支持。

可以將多個輸出流重定向到一個文件上:

  1. ls -yz >> command.log 2>&1 

將錯誤選項 yz 的結(jié)果放到文件 command.log 中。因為 stderr 被重定向到這個文件中,所以所有的錯誤消息也就都指向那里了。

注意,下邊這個例子就不會給出相同的結(jié)果:

  1. ls -yz 2>&1 >> command.log 

輸出一個錯誤消息,但是并不寫到文件中。命令的輸出(如果有的話)寫入到文件 command.log。

如果同時將 stdout 和 stderr 都重定向,命令的順序不同會帶來不同的結(jié)果。

關(guān)閉文件描述符

  • n<&- 關(guān)閉輸入文件描述符 n。
  • 0<&- 或 <&- 關(guān)閉 stdin。
  • n>&- 關(guān)閉輸出文件描述符 n。
  • 1>&- 或 >&- 關(guān)閉 stdout。

子進(jìn)程繼承了打開的文件描述符。這就是為什么管道可以工作的原因。如果想阻止文件描述符被繼承,那么可以關(guān)掉它。

只將 stderr 重定到一個管道。

 

  1. exec 3>&1 ### 保存當(dāng)前 stdout 的"值"(將 fd3 指向 fd0 相同目標(biāo))  
  2. ls -l 2>&1 >&3 3>&- | grep bad 3>&-### 對'grep'關(guān)閉 fd 3  
  3. ### ^^^^ ^^^^ ###(但不關(guān)閉'ls',正常輸出內(nèi)容不受grep影響)  
  4. ls -l 2>&1 >&3 | grep bad ### 這樣輸出內(nèi)容被轉(zhuǎn)到了 fd3,也不會受 grep 影響  
  5. ls badabc -l 2>&1 >&3 |grep bad ### stderr 通過 fd1 輸出,會受 grep 影響  
  6. exec 3>&- ### 對于剩余的腳本來說,關(guān)閉它 

使用文件描述符 5 可能會引起問題。當(dāng) Bash 使用 exec 創(chuàng)建一個子進(jìn)程的時候,子進(jìn)程會繼承文件描述符 5 (參考 Chet Ramey 的歸檔 e-mail: RE: File descriptor 5 is held open)。 ***還是不要去招惹這個特定的文件描述符 5 。

責(zé)任編輯:未麗燕 來源: tldp.org
相關(guān)推薦

2017-01-19 19:14:20

Linux重定向命令

2021-02-10 08:09:48

Netty網(wǎng)絡(luò)多路復(fù)用

2009-12-23 17:50:07

Linux網(wǎng)絡(luò)命令

2012-06-14 09:32:17

虛擬化

2010-06-23 20:31:54

2010-07-13 09:36:25

2010-11-19 16:22:14

Oracle事務(wù)

2020-09-21 09:53:04

FlexCSS開發(fā)

2009-08-25 16:27:10

Mscomm控件

2022-08-26 13:48:40

EPUBLinux

2020-07-20 06:35:55

BashLinux

2016-08-23 17:21:51

UnixLinux重定向

2010-01-06 17:18:54

Linux常用軟件

2019-05-07 10:03:47

Linux系統(tǒng)發(fā)行版

2011-07-18 15:08:34

2022-06-03 10:09:32

威脅檢測軟件

2010-11-15 11:40:44

Oracle表空間

2018-06-22 13:05:02

前端JavaScript引擎

2021-01-19 12:00:39

前端監(jiān)控代碼

2010-09-27 09:31:42

JVM內(nèi)存結(jié)構(gòu)
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 欧美中文字幕在线观看 | 极情综合网| 国产在线精品一区 | 国产精品视屏 | 91精品久久久久久久久久小网站 | 天天干精品| 成人九色 | 视频一区二区三区四区五区 | 天天操夜夜操 | 国产高清在线精品 | 久久亚洲精品国产精品紫薇 | 久久电影一区 | 成人欧美一区二区三区白人 | 黄色片在线免费看 | 久久一区视频 | 成人午夜电影网 | 爱爱免费视频 | 日本久久一区 | 亚洲电影免费 | 国产午夜精品一区二区三区在线观看 | 免费一二区| 久久亚洲91 | 久久高清免费视频 | 久久国产精品视频 | 欧美日韩在线观看一区二区三区 | 成人国产精品久久 | h视频免费在线观看 | 91九色视频 | 亚洲电影免费 | 亚洲国产成人精品久久久国产成人一区 | 夜夜久久 | 久久成人av电影 | 国产一区二区三区视频 | 91最新入口 | 中午字幕在线观看 | 夜夜操天天艹 | 国产成人精品免高潮在线观看 | 婷婷色婷婷 | 黄色免费在线观看 | 国产精品久久久久永久免费观看 | 久久久久久国产精品免费免费狐狸 |