先說一下linux重定向:
0、1和2分別表示標準輸入、標準輸出和標準錯誤信息輸出,可以用來指定需要重定向的標準輸入或輸出。
在一般使用時,默認的是標準輸出,既1。
當我們需要特殊用途時,可以使用其他標號。
例如,將某個程序的錯誤信息輸出到log文件中:./program 2>log
。
這樣標準輸出還是在屏幕上,但是錯誤信息會輸出到log文件中。
另外,也可以實現(xiàn)0,1,2之間的重定向。2>&1
:將錯誤信息重定向到標準輸出。
Linux下還有一個特殊的文件/dev/null
,它就像一個無底洞,所有重定向到它的信息都會消失得無影無蹤。
這一點非常有用,當我們不需要回顯程序的所有信息時,就可以將輸出重定向到/dev/null
。
如果想要正常輸出和錯誤信息都不顯示,則要把標準輸出和標準錯誤都重定向到/dev/null
,
例如:# ls 1>/dev/null 2>/dev/null
還有一種做法是將錯誤重定向到標準輸出,然后再重定向到 /dev/null,
例如:# ls >/dev/null 2>&1
注意:此處順序不能更改,否則達不到想要的效果,此時先將標準輸出重定向到 /dev/null,然后將標準錯誤重定向到標準輸出,由于標準輸出已經(jīng)重定向到/dev/null,因此標準錯誤也會重定向到/dev/null,于是一切靜悄悄。
由于使用nohup時,會自動將輸出寫入nohup.out文件中,如果文件很大的話,nohup.out就會不停的增大,這是我們不希望看到的,因此,可以利用/dev/null來解決這個問題。
(1)舍棄標準輸出,將錯誤輸出到log文件中
nohup ./program >/dev/null 2>log &
(2)如果錯誤信息也不想要的話:
nohup ./program >/dev/null 2>&1 &
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
關(guān)于重定向,參考文章:http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=484163
1. 基本概念
a、I/O重定向通常與 FD有關(guān),shell的FD通常為10個,即 0~9;(FD:file descripter,文件描述符)
b、常用FD有3個,為: 0(stdin,標準輸入)、1(stdout,標準輸出)、2(stderr,標準錯誤輸出),默認與keyboard、monitor、monitor有關(guān);
c、用 < 來改變讀進的數(shù)據(jù)信道(stdin),使之從指定的檔案讀進;
d、用 > 來改變送出的數(shù)據(jù)信道(stdout, stderr),使之輸出到指定的檔案;
e、0 是 < 的默認值,因此 < 與 0<是一樣的;同理,> 與 1> 是一樣的;
f、在IO重定向 中,stdout 與 stderr 的管道會先準備好,才會從 stdin 讀進資料;
g、管道“|”(pipe line):上一個命令的 stdout 接到下一個命令的 stdin;
h、tee 命令是在不影響原本 I/O 的情況下,將 stdout 復制一份到檔案去;
i、bash(ksh)執(zhí)行命令的過程:分析命令-變量求值-命令替代(``和$( ))-重定向-通配符展開-確定路徑-執(zhí)行命令;
j、( ) 將 command group 置于 sub-shell 去執(zhí)行,也稱 nested sub-shell,它有一點非常重要的特性是:繼承父shell的Standard input, output, and error plus any other open file descriptors。
k、exec 命令:常用來替代當前 shell 并重新啟動一個 shell,換句話說,并沒有啟動子 shell。使用這一命令時任何現(xiàn)有環(huán)境都將會被清除。exec 在對文件描述符進行操作的時候,也只有在這時,exec 不會覆蓋你當前的 shell 環(huán)境。
2. 基本IO
cmd > file
把 stdout 重定向到 file 文件中
cmd >> file
把 stdout 重定向到 file 文件中(追加)
cmd 1> fiel
把 stdout 重定向到 file 文件中
cmd > file 2>&1
把 stdout 和 stderr 一起重定向到 file 文件中
cmd 2> file
把 stderr 重定向到 file 文件中
cmd 2>> file
把 stderr 重定向到 file 文件中(追加)
cmd >> file 2>&1
把 stderr 和 stderr 一起重定向到 file 文件中
cmd < file >file2
cmd 命令以 file 文件作為 stdin,以 file2 文件作為 stdout
cat <>file
以讀寫的方式打開 file
cmd < file
cmd 命令以 file 文件作為 stdin
cmd << delimiter
Here document,從 stdin 中讀入,直至遇到delimiter 分界符