linux重定向日志命令 linux定位日志命令

Linux重定向

輸出重定向 :

目前創(chuàng)新互聯(lián)已為近千家的企業(yè)提供了網(wǎng)站建設(shè)、域名、網(wǎng)站空間、成都網(wǎng)站托管、企業(yè)網(wǎng)站設(shè)計、上栗網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。

我們使用 或者 對輸出進(jìn)行重定向。 符號的左邊表示文件描述符,如果沒有的話表示1,也就是標(biāo)準(zhǔn)輸出, 符號的右邊可以是一個文件,也可以是一個輸出設(shè)備(Linux中萬物皆文件,即設(shè)備也是文件)。當(dāng)使用時,會判斷右邊的文件存不存在,如果存在的話就先刪除,然后創(chuàng)建一個新的文件,不存在的話則直接創(chuàng)建。但是當(dāng)使用進(jìn)行追加時,則不會刪除原來已經(jīng)存在的文件。

格式 :

command-line [n] 文件

這條命令意思是:將一條命令執(zhí)行結(jié)果(標(biāo)準(zhǔn)輸出,或者錯誤輸出,本來都要打印到屏幕上面的) 重定向其它輸出設(shè)備(文件)1,2分別是標(biāo)準(zhǔn)輸出,錯誤輸出。

實(shí)例 :

輸入重定向

在理解了輸出重定向之后,理解輸入重定向就會容易得多。對輸入重定向的基本命令如下:

我們使用 對輸入做重定向, 如果符號左邊沒有寫值,那么默認(rèn)就是0。

格式:

command-line [n] 文件

命令默認(rèn)從鍵盤獲得的輸入,使用輸入重定向改成從文件,或者其它打開文件以及設(shè)備輸入。執(zhí)行這個命令,將標(biāo)準(zhǔn)輸入0,與文件或設(shè)備綁定,將由它進(jìn)行輸入。

實(shí)例:

文件描述符的復(fù)制表示復(fù)制文件描述符到另一個文件描述符中,也就是將該文件描述符重定向到另一個文件描述符所綁定的文件,使用””進(jìn)行復(fù)制。

想必很多人都知道 file 21 的作用,它等價于 file ,表示標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯誤都重定向到file中。那它和 21 file 有什么區(qū)別呢?

首先解釋 file 21 。這里分兩個過程:先打開file,再將fd=1重定向到file文件上,這樣file文件就成了標(biāo)準(zhǔn)輸出的輸出目標(biāo);之后再將fd=2復(fù)制于fd=1,而fd=1此時已經(jīng)重定向到file文件上,因此fd=2也重定向到file上。所以,最終的結(jié)果是標(biāo)準(zhǔn)輸出重定向到file上,標(biāo)準(zhǔn)錯誤也重定向到file上。

再解釋 21 file 。這里也分兩個過程:先將fd=2復(fù)制于fd=1,而此時fd=1重定向的文件是默認(rèn)的/dev/stdout,所以fd=2也重定向到/dev/stdout;之后再將fd=1重定向到file文件上。也就是說,這里的標(biāo)準(zhǔn)錯誤和標(biāo)準(zhǔn)輸出仍然是分開輸出的,只不過是使用/dev/stdout替代了/dev/stderr,使用file替代了/dev/stdout。所以,最終的結(jié)果是標(biāo)準(zhǔn)錯誤輸出到/dev/stdout,即屏幕上,而標(biāo)準(zhǔn)輸出將輸出到file文件中。

可以使用下面的命令來測試 21 file 。第一個ls命令是正確的,結(jié)果輸出到/tmp/fff.log中,第二個ls命令是錯誤的,結(jié)果將直接輸出到屏幕上。

最后需要說明的是一種特殊情況,如果是 [word] ,且word不是一個數(shù)值,比如 echo haha /tmp/fff.log ,那么 word 和 word 是等價的,都表示 word 21 ,即標(biāo)準(zhǔn)錯誤和標(biāo)準(zhǔn)輸出都重定向同一個目標(biāo)。參考man bash的”Redirecting Standard Output and Standard Error”段落。

如果在命令中直接改變重定向的位置,那么命令執(zhí)行結(jié)束的時候描述符會自動還原。正如上面的ls /boot 21 /tmp/fff.log命令,在ls執(zhí)行結(jié)束后,fd=2還原回默認(rèn)的/dev/stderr,fd=1還原回默認(rèn)的/dev/stdout。

但是我們可以通過exec程序直接在當(dāng)前的shell環(huán)境下改變重定向目標(biāo),只有在當(dāng)前shell退出的時候才會釋放描述符的綁定。

Tips :shell的內(nèi)建命令exec將并不啟動新的shell,而是用要被執(zhí)行命令替換當(dāng)前的shell進(jìn)程,并且將老進(jìn)程的環(huán)境清理掉,而且exec命令后的其它命令將不再執(zhí)行。

不過,要注意一個例外,當(dāng)exec命令來對文件描述符操作的時候,就不會替換shell,而且操作完成后,還會繼續(xù)執(zhí)行接下來的命令。

例如:下面的命令將標(biāo)準(zhǔn)錯誤fd=2指向fd=3對應(yīng)的文件上。

因此,我們可能在一段程序執(zhí)行結(jié)束后,需要將描述符還原到原來的位置,并關(guān)閉不再需要的描述符。畢竟描述符也是資源,是有限的(ulimit -n)。

[n] filename :打開filename,并指定其文件描述符為n,該描述符是可讀、可寫的描述符。若不指定n則默認(rèn)為0,若filename文件不存在,則先創(chuàng)建filename文件。

文件描述符的移動表示將文件描述符1移動到描述符2上,同時關(guān)閉文件描述符1。

[n]digit- :將文件描述符digit代表的輸出文件移動到n上,并關(guān)閉digit值的描述符。

[n]digit- :將文件描述符digit代表的輸入文件移動到n上,并關(guān)閉digit值的描述符。

LINUX 標(biāo)準(zhǔn)錯誤輸出重定向

用途:不掛斷地運(yùn)行命令。

語法:nohup Command [ Arg … ] [  ]

無論是否將 nohup 命令的輸出重定向到終端,輸出都將附加到當(dāng)前目錄的 nohup.out 文件中。

如果當(dāng)前目錄的 nohup.out 文件不可寫,輸出重定向到 $HOME/nohup.out 文件中。

如果沒有文件能創(chuàng)建或打開以用于追加,那么 Command 參數(shù)指定的命令不可調(diào)用。

退出狀態(tài):該命令返回下列出口值:

126 可以查找但不能調(diào)用 Command 參數(shù)指定的命令。

127 nohup 命令發(fā)生錯誤或不能查找由 Command 參數(shù)指定的命令。

否則,nohup 命令的退出狀態(tài)是 Command 參數(shù)指定命令的退出狀態(tài)。

用途:在后臺運(yùn)行

一般兩個一起用

3.為什么呢 21 要寫在后面?

首先是command file將標(biāo)準(zhǔn)輸出重定向到file中, 21 是標(biāo)準(zhǔn)錯誤拷貝了標(biāo)準(zhǔn)輸出的行為,也就是同樣被重定向到file中,最終結(jié)果就是標(biāo)準(zhǔn)輸出和錯誤都被重定向到file中。

21 標(biāo)準(zhǔn)錯誤拷貝了標(biāo)準(zhǔn)輸出的行為,但此時標(biāo)準(zhǔn)輸出還是在終端。file 后輸出才被重定向到file,但標(biāo)準(zhǔn)錯誤仍然保持在終端。

用strace可以看到:

這個命令中實(shí)現(xiàn)重定向的關(guān)鍵系統(tǒng)調(diào)用序列是:

open(file) == 3

dup2(3,1)

dup2(1,2)

這個命令中實(shí)現(xiàn)重定向的關(guān)鍵系統(tǒng)調(diào)用序列是:

dup2(1,2)

open(file) == 3

dup2(3,1)

注意:0 是標(biāo)準(zhǔn)輸入(STDIN),1 是標(biāo)準(zhǔn)輸出(STDOUT),2 是標(biāo)準(zhǔn)錯誤輸出(STDERR)。

這里的2和之間不可以有空格,2是一體的時候才表示錯誤輸出。

”?'>如何像測試人員介紹linux中的重定向命令“>”?

你好

在linux中,一切都是文件,對于控制臺程序,這意味著:- 鍵盤表示為一個文件,bash從中讀取你的輸入。- 顯示器表示為一個文件,bash把輸出寫入它。重定向是一種機(jī)制,即可將來自鍵盤的輸入或顯示器的輸出,重定向到另一個文件。 :用文件替換標(biāo)準(zhǔn)輸入(即用文件代替鍵盤) :用文件替換標(biāo)準(zhǔn)輸出(即用文件代替顯示器)?:與相同,但不是覆蓋原有文件,而是追加到原有文件的末尾比如,我們調(diào)用ping 的命令,來測試本機(jī)與頭條服務(wù)器之間網(wǎng)絡(luò)的連通性。屏幕會不斷輸出網(wǎng)絡(luò)的延時。

本文標(biāo)題:linux重定向日志命令 linux定位日志命令
網(wǎng)站地址:http://muchs.cn/article38/hjcdpp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信小程序、網(wǎng)站設(shè)計、用戶體驗(yàn)、自適應(yīng)網(wǎng)站、商城網(wǎng)站、App開發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站建設(shè)