linux的重定向
Ⅰ linux輸出重定向到文件命令
輸出即把相關對象通過輸出設備(顯示器等)顯示出來,輸出又分正確輸出和錯誤輸出
一般情況下標准輸出設備為顯示器,標准輸入設備為鍵盤。
命令 >> 文件 2>&1 和 命令 &>>文件 兩個命令作用相同
系統有個常見用法 ls &>/dev/null 正確輸出或錯誤輸出結果都不要。(null可以理解為黑洞或垃圾站)
命令>>文件1 2>>文件2 正確日誌和錯誤日誌分開保存
例:nohup java -jar /usr/sbin/lb-agent.jar >>/var/log/lb-agent.log 2>&1 &
將jar執行的結果寫入到lb-agent.log中
在命令最後加上&符號,表示讓這個進程到後台去執行,這樣立刻返回到提示符狀態,我們可以接著做下面的事。如:command &。
這種「後台」進程在shell一直打開的情況下是沒有問題的,如果我們關了shell窗口甚至退出ssh登錄或vnc登錄,那麼進程自動就結束了。所以如果想退出窗口乃至退出登錄仍然保持程序運行,再加上nohup,形如:nohup command 1>output 2>&1 &《Linux就該這么學》學習更多linux知識。
Ⅱ 簡述linux系統中有哪些重定向的方式
重定向能夠實現Linux命令的輸入輸出與文件之間重定向,以及實現將多個命令組合起來實現更加強大的命令。這部分涉及到的比較多的命令主要有:
cat:連接文件 sort:排序文本行 uniq:忽略或者報告重復行
wc:統計文件的行數、詞數、位元組數
grep:列印匹配製定模式的行
head:輸出文件的頭部 tail:輸出文件的尾部
tee:從標准輸入讀,並往標准輸出或者文件寫
重定向標准輸出
使用>可以將本來出現在屏幕的標准輸出信息重定向到一個文件中。
使用>>可以在實現重定向時不覆蓋原有內容,而是在文件末尾追加內容。
重定向標准錯誤信息到文件
使用文件描述符,在shell中,默認用數字0,1,2分別代表標准輸入、標准輸出、標准錯誤。
屏蔽不想看到的信息
Linux中有一個特殊的文件/dev/null,這個文件叫做bit bucket,可以接受輸入信息但是什麼都不做。例如:ls/usr/> /dev/null
重定向標准輸入
cat命令可以接受一組文件為參數,將這些文件復制到標准輸出。我們前面的例子中已經多次使用到cat命令來將文本文件的內容讀取到屏幕上。cat還有一個很重要的功能:接受一組文件,然後通過重定向將他們重新組合到一個文件中。
cat ls1 ls2 > ls這個命令將ls1和ls2文件中的內容合並到ls文件中了。cat命令的這種功能不僅僅適用於文本文件,同樣對二進制文件有效。這個場景主要在將多個壓縮包文件合並到一個壓縮包中用到。
cat也可以不傳遞參數,這種情況下,cat會重定向標准輸入到標准輸出。
管道
Linux提供|操作符,該操作符可以將一個命令的輸出作為另一個命令的輸入,這樣通過多個命令的協作來完成一些比較復雜的內容。比如,我們可以通過uniq命令來排除重復的行。但是uniq命令往往需要和sort命令配合使用。因為uniq接收一組排好序的文本,而剛好sort可以將文本行排序。
Ⅲ LINUX 標准錯誤輸出重定向
用途:不掛斷地運行命令。
語法:nohup Command [ Arg … ] [& ]
無論是否將 nohup 命令的輸出重定向到終端,輸出都將附加到當前目錄的 nohup.out 文件中。
如果當前目錄的 nohup.out 文件不可寫,輸出重定向到 $HOME/nohup.out 文件中。
如果沒有文件能創建或打開以用於追加,那麼 Command 參數指定的命令不可調用。
退出狀態:該命令返回下列出口值:
126 可以查找但不能調用 Command 參數指定的命令。
127 nohup 命令發生錯誤或不能查找由 Command 參數指定的命令。
否則,nohup 命令的退出狀態是 Command 參數指定命令的退出狀態。
用途:在後台運行
一般兩個一起用
3.為什麼呢 2>&1 要寫在後面?
首先是command > file將標准輸出重定向到file中, 2>&1 是標准錯誤拷貝了標准輸出的行為,也就是同樣被重定向到file中,最終結果就是標准輸出和錯誤都被重定向到file中。
2>&1 標准錯誤拷貝了標准輸出的行為,但此時標准輸出還是在終端。>file 後輸出才被重定向到file,但標准錯誤仍然保持在終端。
用strace可以看到:
這個命令中實現重定向的關鍵系統調用序列是:
open(file) == 3
p2(3,1)
p2(1,2)
這個命令中實現重定向的關鍵系統調用序列是:
p2(1,2)
open(file) == 3
p2(3,1)
注意:0 是標准輸入(STDIN),1 是標准輸出(STDOUT),2 是標准錯誤輸出(STDERR)。
這里的2和>之間不可以有空格,2>是一體的時候才表示錯誤輸出。