linux重定向

關於重定向


1. 基本概念

a、I/O重定向一般與 FD有關,shell的FD一般爲10個,即 0~9;(FD:file descripter,文件描述符)node

b、經常使用FD有3個,爲: 0(stdin,標準輸入)、1(stdout,標準輸出)、2(stderr,標準錯誤輸出),默認與keyboard、monitor、monitor有關;shell

c、用 < 來改變讀進的數據信道(stdin),使之從指定的檔案讀進;bash

d、用 > 來改變送出的數據信道(stdout, stderr),使之輸出到指定的檔案;code

e、0 是 < 的默認值,所以 < 與 0<是同樣的;同理,> 與 1> 是同樣的;繼承

f、在IO重定向 中,stdout 與 stderr 的管道會先準備好,纔會從 stdin 讀進資料;ip

g、管道「|」(pipe line):上一個命令的 stdout 接到下一個命令的 stdin;input

h、tee 命令是在不影響本來 I/O 的狀況下,將 stdout 複製一份到檔案去;cmd

i、bash(ksh)執行命令的過程:分析命令-變量求值-命令替代(``和$( ))-重定向-通配符展開-肯定路徑-執行命令;it

j、( )  將 command group 置於 sub-shell 去執行,也稱 nested sub-shell,它有一點很是重要的特性是:繼承父shell的Standard input, output, and error plus any other open file descriptors。pip

k、exec 命令:經常使用來替代當前 shell 並從新啓動一個 shell,換句話說,並無啓動子 shell。使用這一命令時任何現有環境都將會被清除,。exec 在對文件描述符進行操做的時候,也只有在這時,exec 不會覆蓋你當前的 shell 環境。

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 分界符

實際應用


例如,將某個程序的錯誤信息輸出到log文件中:

./program 2>log。

這樣標準輸出仍是在屏幕上,可是錯誤信息會輸出到log文件中。

另外,也能夠實現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,而後將標準錯誤重定向到標準輸出,因爲標準輸出已經重定向到了/dev/null,所以標準錯誤也會重定向到/dev/null)

因爲使用nohup時,會自動將輸出寫入nohup.out文件中,若是文件很大的話,nohup.out就會不停的增大,這是咱們不但願看到的,所以,能夠利用/dev/null來解決這個問題。

(1)捨棄標準輸出,將錯誤輸出到log文件中

nohup node bin/www >/dev/null 2>log &

(2)若是錯誤信息也不想要的話:

nohup node bin/www >/dev/null 2>&1 &

注:其中node bin/www是項目node啓動

相關文章
相關標籤/搜索