/dev/null 和 /dev/zero的區(qū)別
/dev/null 和 /dev/zero的區(qū)別
1./dev/null:表示 的是一個黑洞,通常用于丟棄不需要的數(shù)據(jù)輸出, 或者用于輸入流的空文件
1.1 將無用的輸出流寫入到黑洞丟棄。
curl -Iwww.baidu.com 2>/dev/null | head -l 錯誤信息定位到黑洞
1.2 清空文件
cat /dev/null > /home/omc/h.txt
1.3 在書寫定時任務(wù)總,規(guī)范的寫法就是將所有定時任務(wù)腳本結(jié)尾加上>/dev/null 2>&1,讓所有的輸出流(包括錯誤的和正確的)都定向到空設(shè)備丟棄。
00 01 * * * /bin/sh/server/scripts/mysqlbak.sh >/dev/null 2>&1
2./dev/zero:當(dāng)我們使用或者讀取他的時候,她是會提供無限連續(xù)不斷的空的數(shù)據(jù)流
2.1覆蓋其他的文件信息
2.2產(chǎn)生指定大小的空文件,如交換文件,模擬虛擬文件系統(tǒng)
一、區(qū)別:
2>/dev/null
意思就是把錯誤輸出到“黑洞”
>/dev/null 2>&1
默認(rèn)情況是1,也就是等同于1>/dev/null 2>&1。意思就是把標(biāo)準(zhǔn)輸出重定向到“黑洞”,還把錯誤輸出2重定向到標(biāo)準(zhǔn)輸出1,也就是標(biāo)準(zhǔn)輸出和錯誤輸出都進(jìn)了“黑洞”
2>&1 >/dev/null
意思就是把錯誤輸出2重定向到標(biāo)準(zhǔn)出書1,也就是屏幕,標(biāo)準(zhǔn)輸出進(jìn)了“黑洞”,也就是標(biāo)準(zhǔn)輸出進(jìn)了黑洞,錯誤輸出打印到屏幕
二、解釋:
1、文件描述符
Linux系統(tǒng)預(yù)留可三個文件描述符:0、1和2,他們的意義如下所示:
0——標(biāo)準(zhǔn)輸入(stdin)
1——標(biāo)準(zhǔn)輸出(stdout)
2——標(biāo)準(zhǔn)錯誤(stderr)
標(biāo)準(zhǔn)輸出——stdout
假設(shè):在當(dāng)前目錄下,有且只有一個文件名稱為ljl.txt的文件,這時我們運(yùn)行這個命令【ls ljl.txt】,就會獲得一個標(biāo)準(zhǔn)輸出stdout的輸出結(jié)果:ljl.txt
2>/dev/null
意思就是把錯誤輸出到“黑洞”
>/dev/null 2>&1
默認(rèn)情況是1,也就是等同于1>/dev/null 2>&1。意思就是把標(biāo)準(zhǔn)輸出重定向到“黑洞”,還把錯誤輸出2重定向到標(biāo)準(zhǔn)輸出1,也就是標(biāo)準(zhǔn)輸出和錯誤輸出都進(jìn)了“黑洞”
2>&1 >/dev/null
意思就是把錯誤輸出2重定向到標(biāo)準(zhǔn)出書1,也就是屏幕,標(biāo)準(zhǔn)輸出進(jìn)了“黑洞”,也就是標(biāo)準(zhǔn)輸出進(jìn)了黑洞,錯誤輸出打印到屏幕
二、解釋:
1、文件描述符
Linux系統(tǒng)預(yù)留可三個文件描述符:0、1和2,他們的意義如下所示:
0——標(biāo)準(zhǔn)輸入(stdin)
1——標(biāo)準(zhǔn)輸出(stdout)
2——標(biāo)準(zhǔn)錯誤(stderr)
標(biāo)準(zhǔn)輸出——stdout
假設(shè):在當(dāng)前目錄下,有且只有一個文件名稱為ljl.txt的文件,這時我們運(yùn)行這個命令【ls ljl.txt】,就會獲得一個標(biāo)準(zhǔn)輸出stdout的輸出結(jié)果:ljl.txt
錯誤輸出——stderr
按照上面的假設(shè),我們運(yùn)行另一條命令【ls gss.txt】,這樣我們就會獲得一個標(biāo)準(zhǔn)錯誤stderr的輸出結(jié)果“l(fā)s:無法訪問gss.txt:沒有那個文件或目錄”。
按照上面的假設(shè),我們運(yùn)行另一條命令【ls gss.txt】,這樣我們就會獲得一個標(biāo)準(zhǔn)錯誤stderr的輸出結(jié)果“l(fā)s:無法訪問gss.txt:沒有那個文件或目錄”。
2、重定向
重定向的符號有兩個:>或>>,兩者的區(qū)別是:前者會先清空文件,然后再寫入內(nèi)容,后者會將重定向的內(nèi)容追加到現(xiàn)有文件的尾部。舉個例子:
(1)、重定向標(biāo)準(zhǔn)輸出stdout
重定向的符號有兩個:>或>>,兩者的區(qū)別是:前者會先清空文件,然后再寫入內(nèi)容,后者會將重定向的內(nèi)容追加到現(xiàn)有文件的尾部。舉個例子:
(1)、重定向標(biāo)準(zhǔn)輸出stdout
如上圖所示,對比沒有添加重定向的操作,這條命令在使用之后并沒有將123.txt打印到屏幕。在緊接的cat操作后,可以發(fā)現(xiàn)本來應(yīng)該被輸出的內(nèi)容被記錄到stdout.txt中。
(2)、重定向標(biāo)準(zhǔn)錯誤stderr
(2)、重定向標(biāo)準(zhǔn)錯誤stderr
如上圖所示,文件描述符2,標(biāo)準(zhǔn)錯誤的重定向也是同樣的原理被記錄在了文件stderr.txt這個文件里面了。
(3)、可以將stderr單獨(dú)定向到一個文件,stdout重定向到另一個文件
cmd 2> stderr.txt 1>stdout.txt
(4)、也可以將stderr和stdout重定向到同一個文件
cmd > output.txt 2>&1
或采用下面的方法,可以少寫幾個字,能達(dá)到同樣的效果
cmd &> output.txt
cmd >& output.txt #兩個表達(dá)式效果一樣的
3、Linux特殊文件
/dev/null是一個特殊的設(shè)備文件,這個文件接收到任何數(shù)據(jù)都會被丟棄。因此,null這個設(shè)備通常也被稱為位桶(bit bucket)或黑洞。
所以,2>/dev/null的意思就是將標(biāo)準(zhǔn)錯誤stderr刪掉。
附:linux中單進(jìn)程的文件數(shù)據(jù)結(jié)構(gòu)圖
(3)、可以將stderr單獨(dú)定向到一個文件,stdout重定向到另一個文件
cmd 2> stderr.txt 1>stdout.txt
(4)、也可以將stderr和stdout重定向到同一個文件
cmd > output.txt 2>&1
或采用下面的方法,可以少寫幾個字,能達(dá)到同樣的效果
cmd &> output.txt
cmd >& output.txt #兩個表達(dá)式效果一樣的
3、Linux特殊文件
/dev/null是一個特殊的設(shè)備文件,這個文件接收到任何數(shù)據(jù)都會被丟棄。因此,null這個設(shè)備通常也被稱為位桶(bit bucket)或黑洞。
所以,2>/dev/null的意思就是將標(biāo)準(zhǔn)錯誤stderr刪掉。
附:linux中單進(jìn)程的文件數(shù)據(jù)結(jié)構(gòu)圖
上圖是linux中單進(jìn)程的文件數(shù)據(jù)結(jié)構(gòu)圖,最左邊使我們熟悉的fd標(biāo)志,也就是文件描述符,一個進(jìn)程內(nèi)所有的文件描述符按照順序排列構(gòu)成一張文件描述符表,其中包括fd0,fd1,fd2。(注意:這里并沒有說標(biāo)準(zhǔn)輸入,標(biāo)準(zhǔn)輸出,錯誤輸出,原因后面講)
那么,問題來了,假如我們想fd1寫入數(shù)據(jù)時,最終數(shù)據(jù)會到哪兒呢?事實(shí)上fd1作為文件描述符,它本身并不是文件的真正的“入口”,文件真正的“入口”在文件描述符表的第二列:記錄了每個文件描述符所對應(yīng)文件位置的文件指針。換言之,如果我們更換fd1所對應(yīng)的文件指針,就改變了fd1指向文件的”真正位置”。
fd0,fd1,fd2指向的文件默認(rèn)情況下分別是/dev/stdin、/dev/stdout和/dev/stderr,這才是真正的標(biāo)準(zhǔn)輸入,標(biāo)準(zhǔn)輸出,錯誤輸出,如果將數(shù)據(jù)寫入到/dev/stdout中,就會在屏幕上顯示數(shù)據(jù),fd0,fd1,fd2只是標(biāo)志而已,真正起作用的是他們對應(yīng)的文件指針!
所以重定向命令’>’所做的工作就是就是改變了fd所對應(yīng)的文件指針!
參考來自:https://blog.csdn.net/gramdog/article/details/80374119,https://blog.csdn.net/zhongqi2513/article/details/78613768,https://blog.csdn.net/a1439458305/article/details/79586567
————————————————
版權(quán)聲明:本文為CSDN博主「林建龍」的原創(chuàng)文章,遵循 CC 4.0 BY-SA 版權(quán)協(xié)議,轉(zhuǎn)載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/longgeaisisi/article/details/90519690
那么,問題來了,假如我們想fd1寫入數(shù)據(jù)時,最終數(shù)據(jù)會到哪兒呢?事實(shí)上fd1作為文件描述符,它本身并不是文件的真正的“入口”,文件真正的“入口”在文件描述符表的第二列:記錄了每個文件描述符所對應(yīng)文件位置的文件指針。換言之,如果我們更換fd1所對應(yīng)的文件指針,就改變了fd1指向文件的”真正位置”。
fd0,fd1,fd2指向的文件默認(rèn)情況下分別是/dev/stdin、/dev/stdout和/dev/stderr,這才是真正的標(biāo)準(zhǔn)輸入,標(biāo)準(zhǔn)輸出,錯誤輸出,如果將數(shù)據(jù)寫入到/dev/stdout中,就會在屏幕上顯示數(shù)據(jù),fd0,fd1,fd2只是標(biāo)志而已,真正起作用的是他們對應(yīng)的文件指針!
所以重定向命令’>’所做的工作就是就是改變了fd所對應(yīng)的文件指針!
參考來自:https://blog.csdn.net/gramdog/article/details/80374119,https://blog.csdn.net/zhongqi2513/article/details/78613768,https://blog.csdn.net/a1439458305/article/details/79586567
————————————————
版權(quán)聲明:本文為CSDN博主「林建龍」的原創(chuàng)文章,遵循 CC 4.0 BY-SA 版權(quán)協(xié)議,轉(zhuǎn)載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/longgeaisisi/article/details/90519690
*博客內(nèi)容為網(wǎng)友個人發(fā)布,僅代表博主個人觀點(diǎn),如有侵權(quán)請聯(lián)系工作人員刪除。
接地電阻相關(guān)文章:接地電阻測試方法