2>/dev/null和>/dev/null 2>&1和2>&1>/dev/null的區別
2>/dev/null和>/dev/null 2>&1和2>&1>/dev/null的區別
一、區別:
2>/dev/null
意思就是把錯誤輸出到“黑洞”
>/dev/null 2>&1
預設情況是1,也就是等同於1>/dev/null 2>&1。意思就是把標準輸出重定向到“黑洞”,還把錯誤輸出2重定向到標準輸出1,也就是標準輸出和錯誤輸出都進了“黑洞”
2>&1 >/dev/null
意思就是把錯誤輸出2重定向到標準出書1,也就是螢幕,標準輸出進了“黑洞”,也就是標準輸出進了黑洞,錯誤輸出列印到螢幕
二、解釋:
1、檔案描述符
Linux系統預留可三個檔案描述符:0、1和2,他們的意義如下所示:
0——標準輸入(stdin)
1——標準輸出(stdout)
2——標準錯誤(stderr)
標準輸出——stdout
假設:在當前目錄下,有且只有一個檔名稱為ljl.txt的檔案,這時我們執行這個命令【ls ljl.txt】,就會獲得一個標準輸出stdout的輸出結果:ljl.txt
錯誤輸出——stderr
按照上面的假設,我們執行另一條命令【ls gss.txt】,這樣我們就會獲得一個標準錯誤stderr的輸出結果“ls:無法訪問gss.txt:沒有那個檔案或目錄”。
2、重定向
重定向的符號有兩個:>或>>,兩者的區別是:前者會先清空檔案,然後再寫入內容,後者會將重定向的內容追加到現有檔案的尾部。舉個例子:
(1)、重定向標準輸出stdout
如上圖所示,對比沒有新增重定向的操作,這條命令在使用之後並沒有將123.txt列印到螢幕。在緊接的cat操作後,可以發現本來應該被輸出的內容被記錄到stdout.txt中。
(2)、重定向標準錯誤stderr
如上圖所示,檔案描述符2,標準錯誤的重定向也是同樣的原理被記錄在了檔案stderr.txt這個檔案裡面了。
(3)、可以將stderr單獨定向到一個檔案,stdout重定向到另一個檔案
cmd 2> stderr.txt 1>stdout.txt
(4)、也可以將stderr和stdout重定向到同一個檔案
cmd > output.txt 2>&1
或採用下面的方法,可以少寫幾個字,能達到同樣的效果
cmd &> output.txt
cmd >& output.txt #兩個表示式效果一樣的
3、Linux特殊檔案
/dev/null是一個特殊的裝置檔案,這個檔案接收到任何資料都會被丟棄。因此,null這個裝置通常也被稱為位桶(bit bucket)或黑洞。
所以,2>/dev/null的意思就是將標準錯誤stderr刪掉。
附:linux中單程式的檔案資料結構圖
上圖是linux中單程式的檔案資料結構圖,最左邊使我們熟悉的fd標誌,也就是檔案描述符,一個程式內所有的檔案描述符按照順序排列構成一張檔案描述符表,其中包括fd0,fd1,fd2。(注意:這裡並沒有說標準輸入,標準輸出,錯誤輸出,原因後面講)
那麼,問題來了,假如我們想fd1寫入資料時,最終資料會到哪兒呢?事實上fd1作為檔案描述符,它本身並不是檔案的真正的“入口”,檔案真正的“入口”在檔案描述符表的第二列:記錄了每個檔案描述符所對應檔案位置的檔案指標。換言之,如果我們更換fd1所對應的檔案指標,就改變了fd1指向檔案的”真正位置”。
fd0,fd1,fd2指向的檔案預設情況下分別是/dev/stdin、/dev/stdout和/dev/stderr,這才是真正的標準輸入,標準輸出,錯誤輸出,如果將資料寫入到/dev/stdout中,就會在螢幕上顯示資料,fd0,fd1,fd2只是標誌而已,真正起作用的是他們對應的檔案指標!
所以重定向命令’>’所做的工作就是就是改變了fd所對應的檔案指標!
About Me
........................................................................................................................ ● 本文作者:小麥苗,部分內容整理自網路,若有侵權請聯絡小麥苗刪除 ● 本文在個人微 信公眾號( DB寶)上有同步更新 ● QQ群號: 230161599 、618766405,微信群私聊 ● 個人QQ號(646634621),微 訊號(db_bao),註明新增緣由 ● 於 2020年8月 在西安完成 ● 最新修改時間:2020年8月 ● 版權所有,歡迎分享本文,轉載請保留出處 ........................................................................................................................ ● 小麥苗的微店: ● 小麥苗出版的資料庫類叢書: http://blog.itpub.net/26736162/viewspace-2142121/ ● 小麥苗OCP、OCM、高可用、DBA學習班: http://blog.itpub.net/26736162/viewspace-2148098/ ● 資料庫筆試面試題庫及解答: http://blog.itpub.net/26736162/viewspace-2134706/ ........................................................................................................................ 請掃描下面的二維碼來關注小麥苗的微 信公眾號( DB寶)及QQ群(230161599、618766405)、新增小麥苗微 信(db_bao), 學習最實用的資料庫技術。
........................................................................................................................ |
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26736162/viewspace-2714492/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- ">/dev/null 2>&1 "是什麼意思devNull
- shell指令碼中/dev/null 2>&1詳解指令碼devNull
- Linux下" >/dev/null 2>&1 "相關知識說明LinuxdevNull
- /dev/null和標準*使用devNull
- Shell指令碼中的 /Dev/Null 用途指令碼devNull
- BEA dev2dev 線上dev
- undefined 和 null 區別?UndefinedNull
- null和undefined區別NullUndefined
- null 和 undefined 的區別NullUndefined
- null 和 undefined 的區別!NullUndefined
- 【Postopia Dev Log】Day 2dev
- 關於 /dev/null 差點直播吃鞋的一個小問題devNull
- js中null和undefined的區別JSNullUndefined
- js中undefined和null的區別JSUndefinedNull
- javascrit中undefined和null的區別JavaUndefinedNull
- Object.create(null) 和 {} 的區別ObjectNull
- JS 的型別(null 和 undefined 的區別)JS型別NullUndefined
- npm run dev 和 npm run serve 區別NPMdev
- Python中none和null的區別詳解!PythonNoneNull
- NULL在oracle和mysql索引上的區別NullOracleMySql索引
- mysql 空值(null)和空字元('')的區別MySqlNull字元
- TypeScript Null和Undefined 型別TypeScriptNullUndefined型別
- null 和 undefinedNullUndefined
- 【Postopia Dev Blog】day 1dev
- npm run dev 換成 pm2NPMdev
- PHP7 ?? 與 ?: 的作用和區別(null合併運算子, null條件運算子)PHPNull
- Object.create(null) 和 {} 區別是什麼ObjectNull
- 為什麼索引無法使用is null和is not null索引Null
- MySQL null和''分析MySqlNull
- JavaScript中的“undefined、null”區別?JavaScriptUndefinedNull
- JavaScript undefined與null區別JavaScriptUndefinedNull
- npm –save-dev –save 的區別NPMdev
- dart系列之:和null說再見,null使用最佳實踐DartNull
- SCSS Null 型別CSSNull型別
- 【NULL】Oracle null值介紹NullOracle
- C++中的NULL和nullptrC++Null
- JavaScript中0, "", null, false, undefined的區別JavaScriptNullFalseUndefined
- Spring Boot 2中actuator和H2資料庫別名暴露遠端執行程式碼漏洞 — spaceraccoon.devSpring Boot資料庫行程dev