輸出重定向 :
網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)公司!專(zhuān)注于網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開(kāi)發(fā)、微信平臺(tái)小程序開(kāi)發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶(hù)創(chuàng)新互聯(lián)還提供了新羅免費(fèi)建站歡迎大家使用!
我們使用 或者 對(duì)輸出進(jìn)行重定向。 符號(hào)的左邊表示文件描述符,如果沒(méi)有的話(huà)表示1,也就是標(biāo)準(zhǔn)輸出, 符號(hào)的右邊可以是一個(gè)文件,也可以是一個(gè)輸出設(shè)備(Linux中萬(wàn)物皆文件,即設(shè)備也是文件)。當(dāng)使用時(shí),會(huì)判斷右邊的文件存不存在,如果存在的話(huà)就先刪除,然后創(chuàng)建一個(gè)新的文件,不存在的話(huà)則直接創(chuàng)建。但是當(dāng)使用進(jìn)行追加時(shí),則不會(huì)刪除原來(lái)已經(jīng)存在的文件。
格式 :
command-line [n] 文件
這條命令意思是:將一條命令執(zhí)行結(jié)果(標(biāo)準(zhǔn)輸出,或者錯(cuò)誤輸出,本來(lái)都要打印到屏幕上面的) 重定向其它輸出設(shè)備(文件)1,2分別是標(biāo)準(zhǔn)輸出,錯(cuò)誤輸出。
實(shí)例 :
輸入重定向
在理解了輸出重定向之后,理解輸入重定向就會(huì)容易得多。對(duì)輸入重定向的基本命令如下:
我們使用 對(duì)輸入做重定向, 如果符號(hào)左邊沒(méi)有寫(xiě)值,那么默認(rèn)就是0。
格式:
command-line [n] 文件
命令默認(rèn)從鍵盤(pán)獲得的輸入,使用輸入重定向改成從文件,或者其它打開(kāi)文件以及設(shè)備輸入。執(zhí)行這個(gè)命令,將標(biāo)準(zhǔn)輸入0,與文件或設(shè)備綁定,將由它進(jìn)行輸入。
實(shí)例:
文件描述符的復(fù)制表示復(fù)制文件描述符到另一個(gè)文件描述符中,也就是將該文件描述符重定向到另一個(gè)文件描述符所綁定的文件,使用””進(jìn)行復(fù)制。
想必很多人都知道 file 21 的作用,它等價(jià)于 file ,表示標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯(cuò)誤都重定向到file中。那它和 21 file 有什么區(qū)別呢?
首先解釋 file 21 。這里分兩個(gè)過(guò)程:先打開(kāi)file,再將fd=1重定向到file文件上,這樣file文件就成了標(biāo)準(zhǔn)輸出的輸出目標(biāo);之后再將fd=2復(fù)制于fd=1,而fd=1此時(shí)已經(jīng)重定向到file文件上,因此fd=2也重定向到file上。所以,最終的結(jié)果是標(biāo)準(zhǔn)輸出重定向到file上,標(biāo)準(zhǔn)錯(cuò)誤也重定向到file上。
再解釋 21 file 。這里也分兩個(gè)過(guò)程:先將fd=2復(fù)制于fd=1,而此時(shí)fd=1重定向的文件是默認(rèn)的/dev/stdout,所以fd=2也重定向到/dev/stdout;之后再將fd=1重定向到file文件上。也就是說(shuō),這里的標(biāo)準(zhǔn)錯(cuò)誤和標(biāo)準(zhǔn)輸出仍然是分開(kāi)輸出的,只不過(guò)是使用/dev/stdout替代了/dev/stderr,使用file替代了/dev/stdout。所以,最終的結(jié)果是標(biāo)準(zhǔn)錯(cuò)誤輸出到/dev/stdout,即屏幕上,而標(biāo)準(zhǔn)輸出將輸出到file文件中。
可以使用下面的命令來(lái)測(cè)試 21 file 。第一個(gè)ls命令是正確的,結(jié)果輸出到/tmp/fff.log中,第二個(gè)ls命令是錯(cuò)誤的,結(jié)果將直接輸出到屏幕上。
最后需要說(shuō)明的是一種特殊情況,如果是 [word] ,且word不是一個(gè)數(shù)值,比如 echo haha /tmp/fff.log ,那么 word 和 word 是等價(jià)的,都表示 word 21 ,即標(biāo)準(zhǔn)錯(cuò)誤和標(biāo)準(zhǔn)輸出都重定向同一個(gè)目標(biāo)。參考man bash的”Redirecting Standard Output and Standard Error”段落。
如果在命令中直接改變重定向的位置,那么命令執(zhí)行結(jié)束的時(shí)候描述符會(huì)自動(dòng)還原。正如上面的ls /boot 21 /tmp/fff.log命令,在ls執(zhí)行結(jié)束后,fd=2還原回默認(rèn)的/dev/stderr,fd=1還原回默認(rèn)的/dev/stdout。
但是我們可以通過(guò)exec程序直接在當(dāng)前的shell環(huán)境下改變重定向目標(biāo),只有在當(dāng)前shell退出的時(shí)候才會(huì)釋放描述符的綁定。
Tips :shell的內(nèi)建命令exec將并不啟動(dòng)新的shell,而是用要被執(zhí)行命令替換當(dāng)前的shell進(jìn)程,并且將老進(jìn)程的環(huán)境清理掉,而且exec命令后的其它命令將不再執(zhí)行。
不過(guò),要注意一個(gè)例外,當(dāng)exec命令來(lái)對(duì)文件描述符操作的時(shí)候,就不會(huì)替換shell,而且操作完成后,還會(huì)繼續(xù)執(zhí)行接下來(lái)的命令。
例如:下面的命令將標(biāo)準(zhǔn)錯(cuò)誤fd=2指向fd=3對(duì)應(yīng)的文件上。
因此,我們可能在一段程序執(zhí)行結(jié)束后,需要將描述符還原到原來(lái)的位置,并關(guān)閉不再需要的描述符。畢竟描述符也是資源,是有限的(ulimit -n)。
[n] filename :打開(kāi)filename,并指定其文件描述符為n,該描述符是可讀、可寫(xiě)的描述符。若不指定n則默認(rèn)為0,若filename文件不存在,則先創(chuàng)建filename文件。
文件描述符的移動(dòng)表示將文件描述符1移動(dòng)到描述符2上,同時(shí)關(guān)閉文件描述符1。
[n]digit- :將文件描述符digit代表的輸出文件移動(dòng)到n上,并關(guān)閉digit值的描述符。
[n]digit- :將文件描述符digit代表的輸入文件移動(dòng)到n上,并關(guān)閉digit值的描述符。
linux中的、、、、2、2、21、、,總歸要面對(duì)的
為了更好的理解這個(gè)問(wèn)題,我們需要追本溯源。
執(zhí)行一個(gè)shell命令行時(shí)通常會(huì)自動(dòng)打開(kāi)三個(gè)標(biāo)準(zhǔn)文件
(1) 、標(biāo)準(zhǔn)輸入文件(stdin)
通常對(duì)應(yīng)終端的鍵盤(pán)。
(2)、標(biāo)準(zhǔn)輸出文件(stdout)。
(3)、標(biāo)準(zhǔn)錯(cuò)誤輸出文件(stderr)。
(2)和(3)這兩個(gè)文件都對(duì)應(yīng)終端的屏幕。
進(jìn)程將從標(biāo)準(zhǔn)輸入文件中得到輸入數(shù)據(jù)。
將正常輸出數(shù)據(jù)輸出到標(biāo)準(zhǔn)輸出文件[顯示器]。
將錯(cuò)誤信息送到標(biāo)準(zhǔn)錯(cuò)誤文件中[顯示器]。
下圖所示:
0、1、2表示一個(gè)文件描述符
但是,有時(shí)候我們不想把一些進(jìn)程處理后信息輸出到顯示器。
這時(shí)我們就引出了重定向。
改變標(biāo)準(zhǔn)輸入/輸出的方向
三種重定向:
1、重定向標(biāo)準(zhǔn)輸出,包括兩種。
(1)、(覆蓋),等價(jià)1
將命令執(zhí)行的結(jié)果輸出到指定文件,非顯示器。
(2) 、(追加),等價(jià)1
將命令執(zhí)行的結(jié)果追加到指定文件,非顯示器。
2、 重定向標(biāo)準(zhǔn)輸入,包括兩種。
(1) 、
將命令中接收的輸入途徑,由鍵盤(pán)改為指定文件。
(2) 、[Here Document]
命令序列傳遞到一個(gè)交互程序或者命令中。
3、 重定向標(biāo)準(zhǔn)錯(cuò)誤,包括兩種。
(1) 、2(覆蓋)
將命令執(zhí)行的結(jié)果輸出到指定文件。
(2) 、2(追加)
將命令執(zhí)行的結(jié)果追加到指定文件。
1、重定向標(biāo)準(zhǔn)輸出和重定向標(biāo)準(zhǔn)錯(cuò)誤到同一個(gè)文件中
有以下的幾種方式
(1) 、21
(2) 、
(3) 、
2、 兩個(gè)特殊文件
(1) 、/dev/nul
過(guò)濾標(biāo)準(zhǔn)錯(cuò)誤信息
意思就是不想顯示結(jié)果就輸出到這里面。
(2) 、/dev/zero
創(chuàng)建指定長(zhǎng)度的文件
案例1:
測(cè)試 and
案例2:
測(cè)試 and
測(cè)試
測(cè)試
案例3:
測(cè)試2 and 2
案例4:
測(cè)試重定向標(biāo)準(zhǔn)輸出和重定向標(biāo)準(zhǔn)錯(cuò)誤到同一個(gè)文件中
(1)、
(2)、
與上面的案例類(lèi)似,不做解釋
(3) 、21
案例5:
使用/dev/nul文件
有時(shí)候我們使用命令,不想將輸出的信息顯示到界面
這時(shí)我們可以使用 /dev/nul[常用]
簡(jiǎn)單測(cè)試修改demo 用戶(hù)密碼
1、輸入重定向:標(biāo)準(zhǔn)的輸入設(shè)備是鍵盤(pán),常規(guī)的輸入途徑通過(guò)鍵盤(pán)進(jìn)行信息的輸入。輸入重定向就是不使用系統(tǒng)提供的標(biāo)準(zhǔn)輸入端口,重設(shè)讀取數(shù)據(jù)的方式。例如,輸入重定向?yàn)橐粋€(gè)文件,系統(tǒng)就會(huì)從文件中讀取數(shù)據(jù)進(jìn)行運(yùn)作,而不是通過(guò)鍵盤(pán)錄入數(shù)據(jù)讓系統(tǒng)進(jìn)行讀取。
2、標(biāo)準(zhǔn)輸入文件(stdin):stdin 的文件描述符為0,默認(rèn)輸入硬件 ---- 鍵盤(pán)。
3、輸入重定向的符號(hào)是: (小于號(hào))
4、輸入重定向的格式與說(shuō)明:
5、實(shí)操練習(xí):
IO 重定向是為了改變默認(rèn)輸入、輸出的位置,如默認(rèn)情況下標(biāo)準(zhǔn)輸出(STDOUT),標(biāo)準(zhǔn)錯(cuò)誤輸出(STDERR)都是輸出到顯示終端,如對(duì)標(biāo)準(zhǔn)輸出、標(biāo)準(zhǔn)錯(cuò)誤輸出改變其默認(rèn)輸出位置,可重定向輸出到指定的文件中(實(shí)際工作中經(jīng)常這么使用),要重定向就要配合一些語(yǔ)法符號(hào)。
文件或目錄的訪問(wèn)權(quán)限分為只讀、只寫(xiě)、可執(zhí)行三種。
修改文件權(quán)限命令:chmod、chgrp、chown。
搞懂「文件所屬者更改及權(quán)限的賦予」,涉及關(guān)于 chown、chmod、chgrp 命令,結(jié)合用例零基礎(chǔ)理解和掌握使用。
文章名稱(chēng):linux定向輸入命令 linux定向輸入到文件
轉(zhuǎn)載來(lái)源:http://jinyejixie.com/article34/ddojose.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供營(yíng)銷(xiāo)型網(wǎng)站建設(shè)、微信小程序、網(wǎng)站改版、移動(dòng)網(wǎng)站建設(shè)、品牌網(wǎng)站建設(shè)、外貿(mào)網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)