#1 linux輸出重定向
$ command > file 2>&1 $ command >> file 2>&1
這里的&沒有固定的意思
放在>后面的&,表示重定向的目標(biāo)不是一個(gè)文件,而是一個(gè)文件描述符,內(nèi)置的文件描述符如下
1 => stdout 2 => stderr 0 => stdin
換言之2>1代表將stderr重定向到當(dāng)前路徑下文件名為1的regular file中,而2>&1代表將stderr重定向到文件描述符為1的文件(即/dev/stdout)中,這個(gè)文件就是stdout在file system中的映射
而&>file是一種特殊的用法,也可以寫成>&file,二者的意思完全相同,都等價(jià)于
>file 2>&1
此處&>或者>&視作整體,分開沒有單獨(dú)的含義
順序問題:
find /etc -name .bashrc > list 2>&1 # 為什么不能調(diào)下順序,比如這樣 find /etc -name .bashrc 2>&1 > list
這個(gè)是從左到右有順序的
第一種
xxx > list 2>&1
先將要輸出到stdout的內(nèi)容重定向到文件,此時(shí)文件list就是這個(gè)程序的stdout,再將stderr重定向到stdout,也就是文件list
第二種
xxx 2>&1 > list
先將要輸出到stderr的內(nèi)容重定向到stdout,此時(shí)會(huì)產(chǎn)生一個(gè)stdout的拷貝,作為程序的stderr,而程序原本要輸出到stdout的內(nèi)容,依然是對接在stdout原身上的,因此第二步重定向stdout,對stdout的拷貝不產(chǎn)生任何影響
#2 輸入重定向
command1 < file1
#3 dev/null
如果希望執(zhí)行某個(gè)命令,但又不希望在屏幕上顯示輸出結(jié)果,那么可以將輸出重定向到 /dev/null:
command > /dev/null
/dev/null 是一個(gè)特殊的文件,寫入到它的內(nèi)容都會(huì)被丟棄;如果嘗試從該文件讀取內(nèi)容,那么什么也讀不到。但是 /dev/null 文件非常有用,將命令的輸出重定向到它,會(huì)起到"禁止輸出"的效果。
如果希望屏蔽 stdout 和 stderr,可以這樣寫:
command > /dev/null 2>&1
#4 重定向深入
一般情況下,每個(gè) Unix/Linux 命令運(yùn)行時(shí)都會(huì)打開三個(gè)文件:
標(biāo)準(zhǔn)輸入文件(stdin):stdin的文件描述符為0,Unix程序默認(rèn)從stdin讀取數(shù)據(jù)。
標(biāo)準(zhǔn)輸出文件(stdout):stdout 的文件描述符為1,Unix程序默認(rèn)向stdout輸出數(shù)據(jù)。
標(biāo)準(zhǔn)錯(cuò)誤文件(stderr):stderr的文件描述符為2,Unix程序會(huì)向stderr流中寫入錯(cuò)誤信息。
默認(rèn)情況下,command > file 將 stdout 重定向到 file,command < file 將stdin 重定向到 file。
如果希望 stderr 重定向到 file,可以這樣寫
command 2 > file
如果希望 stderr 追加到 file 文件末尾,可以這樣寫
command 2 >> file
如果希望將 stdout 和 stderr 合并后重定向到 file,可以這樣寫:
$ command > file 2>&1 或者 $ command >> file 2>&1
如果希望對 stdin 和 stdout 都重定向,可以這樣寫:
$ command < file1 >file2
command 命令將 stdin 重定向到 file1,將 stdout 重定向到 file2。
注意:為什么需要將標(biāo)準(zhǔn)錯(cuò)誤重定向到標(biāo)準(zhǔn)輸出,因?yàn)闃?biāo)準(zhǔn)錯(cuò)誤沒有緩沖區(qū),而stdout有。
https://www.runoob.com/linux/linux-shell-io-redirections.html
| 命令 | 說明 |
|---|---|
| command > file | 將輸出重定向到 file。 |
| command < file | 將輸入重定向到 file。 |
| command >> file | 將輸出以追加的方式重定向到 file。 |
| n > file | 將文件描述符為 n 的文件重定向到 file。 |
| n >> file | 將文件描述符為 n 的文件以追加的方式重定向到 file。 |
| n >& m | 將輸出文件 m 和 n 合并。 |
| n <& m | 將輸入文件 m 和 n 合并。 |
| << tag | 將開始標(biāo)記 tag 和結(jié)束標(biāo)記 tag 之間的內(nèi)容作為輸入。 |
-
Linux
+關(guān)注
關(guān)注
88文章
11807瀏覽量
219509 -
命令行
+關(guān)注
關(guān)注
0文章
83瀏覽量
10778
原文標(biāo)題:全面掌握Linux重定向技巧:讓命令行操作效率翻倍的秘密
文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運(yùn)維】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
涂鴉CLI正式開源:讓AI Agent一行命令管理3000+品類智能設(shè)備
運(yùn)維工程師必須掌握的10個(gè)系統(tǒng)命令
Kubernetes kubectl命令行工具詳解
Linux 下開發(fā)嵌入式必備命令速查表
Linux中13個(gè)基本Cat命令示例
命令行阿里千問搭建過程
TI Driverlib 標(biāo)準(zhǔn)輸出完整重定向的改進(jìn)方案
迅為3568開發(fā)板從零學(xué)習(xí)Linux驅(qū)動(dòng)開發(fā):迅為一站式資料包如何讓我效率翻倍
遠(yuǎn)程命令執(zhí)行:IT 運(yùn)維效率翻倍新方式
所見即所得——Luban-Lite VS Code插件讓開發(fā)實(shí)現(xiàn)“命令行自由”
全面掌握Linux重定向技巧:讓命令行操作效率翻倍的秘密
評論