亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 43735 | 回復(fù): 57
打印 上一主題 下一主題

[轉(zhuǎn)載]常用文件重定向命令  關(guān)閉 [復(fù)制鏈接]

論壇徽章:
1
榮譽版主
日期:2011-11-23 16:44:17
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2003-10-30 13:02 |只看該作者 |倒序瀏覽
常用文件重定向命令
command > filename 把把標準輸出重定向到一個新文件中
command >> filename 把把標準輸出重定向到一個文件中(追加)
command 1 > fielname 把把標準輸出重定向到一個文件中
command > filename 2>&1 把把標準輸出和標準錯誤一起重定向到一個文件中
command 2 > filename 把把標準錯誤重定向到一個文件中
command 2 >> filename 把把標準輸出重定向到一個文件中(追加)
command >> filename 2>&1 把把標準輸出和標準錯誤一起重定向到一個文件中(追加)
command < filename >filename2 把command命令以filename文件作為標準輸入,以filename2文件作為標準輸出
command < filename 把command命令以filename文件作為標準輸入
command << delimiter 把從標準輸入中讀入,直至遇到delimiter分界符
command <&m 把把文件描述符m作為標準輸入
command >&m 把把標準輸出重定向到文件描述符m中
command <&- 把關(guān)閉標準輸入

論壇徽章:
0
2 [報告]
發(fā)表于 2003-11-03 12:56 |只看該作者

[轉(zhuǎn)載]常用文件重定向命令

看了,不是很懂
還是在工作中慢慢的研究吧

論壇徽章:
1
榮譽版主
日期:2011-11-23 16:44:17
3 [報告]
發(fā)表于 2003-11-03 16:16 |只看該作者

[轉(zhuǎn)載]常用文件重定向命令

嗯... 一些要注意的地方:

1 > 或 2 >> 這些 redirection ,
請要確定 1 與 > 之間沒有空白鍵哦,2 與 >> 之間亦同。

或許,等有空再跟大家介紹一下 file descriptor 與 I/O steam 的關(guān)係...

論壇徽章:
1
榮譽版主
日期:2011-11-23 16:44:17
4 [報告]
發(fā)表于 2003-11-04 03:33 |只看該作者

[轉(zhuǎn)載]常用文件重定向命令

談到 I/O redirection ,不妨先讓我們認識一下 File Descriptor (FD) 。

程式的運算,在大部份情況下都是進行數(shù)據(jù)(data)的處理,
這些數(shù)據(jù)從哪讀進?又,送出到哪裡呢?
這就是 file descriptor (FD) 的功用了。

在 shell 程式中,最常使用的 FD 大概有三個,分別為:
0: Standard Input (STDIN)
1: Standard Output (STDOUT)
2: Standard Error Output (STDERR)

在標準情況下,這些 FD 分別跟如下設(shè)備(device)關(guān)聯(lián):
stdin(0): keyboard
stdout(1): monitor
stderr(2): monitor

我們可以用如下下命令測試一下:
$ mail -s test root
this is a test mail.
please skip.
^d (同時按 crtl 跟 d 鍵)
很明顯,mail 程式所讀進的數(shù)據(jù),就是從 stdin 也就是 keyboard 讀進的。
不過,不見得每個程式的 stdin 都跟 mail 一樣從 keyboard 讀進,
因為程式作者可以從檔案參數(shù)讀進 stdin ,如:
$ cat /etc/passwd

但,要是 cat 之後沒有檔案參數(shù)則又如何呢?
哦,請您自己玩玩看囉....  ^_^
$ cat

(請留意數(shù)據(jù)輸出到哪裡去了,最後別忘了按 ^d 離開...)

至於 stdout 與 stderr ,嗯...  等我有空再續(xù)吧...  ^_^
還是,有哪位前輩要來玩接龍呢?  

論壇徽章:
1
榮譽版主
日期:2011-11-23 16:44:17
5 [報告]
發(fā)表于 2003-11-04 14:13 |只看該作者

[轉(zhuǎn)載]常用文件重定向命令

沿文再續(xù),書接上一回...  ^_^

相信,經(jīng)過上一個練習(xí)後,你對 stdin 與 stdout 應(yīng)該不難理解吧?
然後,讓我們繼續(xù)看 stderr 好了。
事實上,stderr 沒甚麼難理解的:說穿了就是"錯誤信息"要往哪邊送而已...
比方說,若讀進的檔案參數(shù)是不存在的,那我們在 monitor 上就看到了:
$ ls no.such.file
ls: no.such.file: No such file or directory

若,一個命令同時產(chǎn)生 stdout 與 stderr 呢?
那還不簡單,都送到 monitor 來就好了:
$ touch my.file
$ ls my.file no.such.file
ls: no.such.file: No such file or directory
my.file

okay,至此,關(guān)於 FD 及其名稱、還有相關(guān)聯(lián)的設(shè)備,相信你已經(jīng)沒問題了吧?
那好,接下來讓我們看看如何改變這些 FD 的預(yù)設(shè)數(shù)據(jù)通道,
我們可用 < 來改變讀進的數(shù)據(jù)通道(stdin),使之從指定的檔案讀進。
我們可用 > 來改變送出的數(shù)據(jù)通道(stdout, stderr),使之輸出到指定的檔案。

比方說:
$ cat < my.file
就是從 my.file 讀進數(shù)據(jù)
$ mail -s test root < /etc/passwd
則是從 /etc/passwd 讀進...
這樣一來,stdin 將不再是從 keyboard 讀進,而是從檔案讀進了...
嚴格來說,< 符號之前需要指定一個 FD 的(之間不能有空白),
但因為 0 是 < 的預(yù)設(shè)值,因此 < 與 0< 是一樣的﹗

okay,這個好理解吧?
那,要是用兩個 << 又是啥呢?
這是所謂的 HERE Document ,它可以讓我們輸入一段文本,直到讀到 << 後指定的字串。
比方說:
$ cat <<FINISH
first line here
second line there
third line nowhere
FINISH
這樣的話,cat 會讀進 3 行句子,而無需從 keyboard 讀進數(shù)據(jù)且要等 ^d 結(jié)束輸入。

至於 > 又如何呢?
且聽下回分解....

論壇徽章:
1
榮譽版主
日期:2011-11-23 16:44:17
6 [報告]
發(fā)表于 2003-11-05 14:15 |只看該作者

[轉(zhuǎn)載]常用文件重定向命令

okay,又到講古時間~~~

當你搞懂了 0< 原來就是改變 stdin 的數(shù)據(jù)輸入通道之後,相信要理解如下兩個 redirection 就不難了:
* 1>
* 2>
前者是改變 stdout 的數(shù)據(jù)輸出通道,後者是改變 stderr 的數(shù)據(jù)輸出通道。
兩者都是將原本要送出到 monitor 的數(shù)據(jù)轉(zhuǎn)向輸出到指定檔案去。
由於 1 是 > 的預(yù)設(shè)值,因此,1> 與 > 是相同的,都是改 stdout 。

用上次的 ls 例子來說明一下好了:

$ ls my.file no.such.file 1>file.out
ls: no.such.file: No such file or directory
這樣 monitor 就只剩下 stderr 而已。因為 stdout 給寫進 file.out 去了。

$ ls my.file no.such.file 2>file.err
my.file
這樣 monitor 就只剩下 stdout ,因為 stderr 寫進了 file.err 。

$ ls my.file no.such.file 1>file.out 2>file.err
這樣 monitor 就啥也沒有,因為 stdout 與 stderr 都給轉(zhuǎn)到檔案去了...

呵~~~ 看來要理解 > 一點也不難啦﹗是不?沒騙你吧? ^_^
不過,有些地方還是要注意一下的。
首先,是 file locking 的問題。比方如下這個例子:

$ ls my.file no.such.file 1>file.both 2>file.both
從 file system 的角度來說,單一檔案在單一時間內(nèi),只能被單一的 FD 作寫入。
假如 stdout(1) 與 stderr(2) 都同時在寫入 file.both 的話,
則要看它們在寫入時否碰到同時競爭的情形了,基本上是"先搶先贏"的原則。
讓我們用周星馳式的"慢鏡頭"來看一下 stdout 與 stderr 同時寫入 file.out 的情形好了:
* 第 1, 2, 3 秒為 stdout 寫入
* 第 3, 4, 5 秒為 stderr 寫入
那麼,這時候 stderr 的第 3 秒所寫的數(shù)據(jù)就丟失掉了﹗
要是我們能控制 stderr 必須等 stdout 寫完再寫,或倒過來,stdout 等 stderr 寫完再寫,那問題就能解決。
但從技術(shù)上,較難掌控的,尤其是 FD 在作"長期性"的寫入時...

那,如何解決呢?所謂山不轉(zhuǎn)路轉(zhuǎn)、路不轉(zhuǎn)人轉(zhuǎn)嘛,
我們可以換一個思維:將 stderr 導(dǎo)進 stdout 或?qū)?stdout 導(dǎo)進 sterr ,而不是大家在搶同一份檔案,不就行了﹗
bingo﹗就是這樣啦:
* 2>&1 就是將 stderr 併進 stdout 作輸出
* 1>&2 或 >&2 就是將 stdout 併進 stderr 作輸出
於是,前面的錯誤操作可以改為:
$ ls my.file no.such.file 1>file.both 2>&1

$ ls my.file no.such.file 2>file.both >&2

這樣,不就皆大歡喜了嗎? 呵~~~ ^_^

不過,光解決了 locking 的問題還不夠,我們還有其他技巧需要了解的。
故事還沒結(jié)束,別走開﹗廣告後,我們再回來...﹗

論壇徽章:
1
榮譽版主
日期:2011-11-23 16:44:17
7 [報告]
發(fā)表于 2003-11-08 01:41 |只看該作者

[轉(zhuǎn)載]常用文件重定向命令

歡迎各位觀眾回到 I/O Redirection 現(xiàn)場...  ^_^

(先幹一下﹗剛才辛辛苦苦打了一個多小時的字,按下"發(fā)送"後給我一個 Invalid_session 全都不見了﹗ >_<
時間不早,加上感冒在身,等收拾新情後再補回吧...)

論壇徽章:
1
榮譽版主
日期:2011-11-23 16:44:17
8 [報告]
發(fā)表于 2003-11-08 11:42 |只看該作者

[轉(zhuǎn)載]常用文件重定向命令

原帖由 "網(wǎng)中人" 發(fā)表:
歡迎各位觀眾回到 I/O Redirection 現(xiàn)場...  ^_^

(先幹一下﹗剛才辛辛苦苦打了一個多小時的字,按下"發(fā)送"後給我一個 Invalid_session 全都不見了﹗ >_<
時間不早,加上感冒在身,等收拾新情後再補回吧............

哦!
辛苦辛苦!
記住這個教訓(xùn),今后在發(fā)送前先來個Ctrl+A,Ctrl+C,以防萬一!如果不幸出現(xiàn)上述情況時還可以Ctrl+V撿回來!   我也是受害不淺耶!

論壇徽章:
0
9 [報告]
發(fā)表于 2003-11-10 01:53 |只看該作者

[轉(zhuǎn)載]常用文件重定向命令

呵呵,自己以前一直以為寫成2>&1,是為了省卻輸入兩次文件名的麻煩,而不明白是為了避免文件寫沖突,汗~~~
看網(wǎng)中人的帖子就清楚多了
多謝喲 ^_^

論壇徽章:
1
榮譽版主
日期:2011-11-23 16:44:17
10 [報告]
發(fā)表于 2003-11-14 01:50 |只看該作者

[轉(zhuǎn)載]常用文件重定向命令

okay,這次不講  I/O Redirction ,講佛吧...
(有沒搞錯?﹗網(wǎng)中人是否頭殼燒壞了?...)  嘻~~~  ^_^

學(xué)佛的最高境界,就是"四大皆空"。至於是空哪四大塊?我也不知,因為我還沒到那境界...
但這個"空"字,卻非常值得我們返複把玩的:
--- 色即是空、空即是色﹗
好了,施主要是能夠領(lǐng)會"空"的禪意,那離修成正果不遠矣~~~  

在 Linux 檔案系統(tǒng)裡,有個設(shè)備檔位於 /dev/null 。
許多人都問過我那是甚麼玩意兒?我跟你說好了:那就是"空"啦﹗
沒錯﹗空空如也的空就是 null 了.... 請問施主是否忽然有所頓誤了呢?然則恭喜了~~~ ^_^

這個 null 在 I/O Redirection 中可有用得很呢:
* 若將 FD1 跟 FD2 轉(zhuǎn)到 /dev/null 去,就可將 stdout 與 stderr 弄不見掉。
* 若將 FD0 接到 /dev/null 來,那就是讀進 nothing 。
比方說,當我們在執(zhí)行一個程式時,畫面會同時送出 stdout 跟 stderr ,
假如你不想看到 stderr (也不想存到檔案去),那可以:
$ ls my.file no.such.file 2>/dev/null
my.file

若要相反:只想看到 stderr 呢?還不簡單﹗將 stdout 弄到 null 就行:
$ ls my.file no.such.file >/dev/null
ls: no.such.file: No such file or directory

那接下來,假如單純只跑程式,不想看到任何輸出結(jié)果呢?
哦,這裡留了一手上次節(jié)目沒講的法子,專門贈予有緣人﹗... ^_^
除了用 >/dev/null 2>&1 之外,你還可以如此:
$ ls my.file no.such.file &>/dev/null
(提示:將 &> 換成 >& 也行啦~~! )

okay?講完佛,接下來,再讓我們看看如下情況:
$ echo "1" > file.out
$ cat file.out
1
$ echo "2" > file.out
$ cat file.out
2
看來,我們在重導(dǎo) stdout 或 stderr 進一份檔案時,似乎永遠只獲得最後一次導(dǎo)入的結(jié)果。
那,之前的內(nèi)容呢?
呵~~~ 要解決這個問提很簡單啦,將 > 換成 >> 就好:
$ echo "3" >> file.out
$ cat file.out
2
3
如此一來,被重導(dǎo)的目標檔案之內(nèi)容並不會失去,而新的內(nèi)容則一直增加在最後面去。
easy ? 呵 ...  ^_^

但,只要你再一次用回單一的 > 來重導(dǎo)的話,那麼,舊的內(nèi)容還是會被"洗"掉的﹗
這時,你要如何避免呢?
----備份﹗ yes ,我聽到了﹗不過.... 還有更好的嗎?
既然與施主這麼有緣份,老納就送你一個錦囊妙法吧:
$ set -o noclobber
$ echo "4" > file.out
-bash: file: cannot overwrite existing file

那,要如何取消這個"限制"呢?
哦,將 set -o 換成 set +o 就行:
$ set +o noclobber
$ echo "5" > file.out
$ cat file.out
5

再問:那... 有辦法不取消而又"臨時"蓋寫目標檔案嗎?
哦,佛曰:不可告也﹗
啊~~~ 開玩笑的、開玩笑的啦~~~  ^_^  唉,早就料到人心是不足的了﹗
$ set -o noclobber
$ echo "6" >| file.out
$ cat file.out
6
留意到?jīng)]有:在 > 後面再加個" | "就好(注意: > 與 | 之間不能有空白哦)....

呼.... (深呼吸吐納一下吧)~~~  ^_^
再來還有一個難題要你去參透的呢:
$ echo "some text here" > file
$ cat < file
some text here
$ cat < file > file.bak
$ cat < file.bak
some text here
$ cat < file > file
$ cat < file

嗯?﹗注意到?jīng)]有?﹗﹗
---- 怎麼最後那個 cat 命令看到的 file 竟是空的?﹗
why? why? why?

同學(xué)們:下節(jié)課不要遲到囉~~~!
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP