linux重新導向及nohup不輸出的方法__linux

來源:互聯網
上載者:User
轉自:http://linchunai1212.blog.163.com/blog/static/35112143201172743917829/ 先說一下linux重新導向:
0、1和2分別表示標準輸入、標準輸出和標準錯誤資訊輸出,可以用來指定需要重新導向的標準輸入或輸出。
在一般使用時,預設的是標準輸出,既1.當我們需要特殊用途時,可以使用其他標號。例如,將某個程式的錯誤資訊輸出到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 ./program >/dev/null 2>log &

(2)如果錯誤資訊也不想要的話:

nohup ./program >/dev/null 2>&1 &

 

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

關於重新導向,參考文章:http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=484163

 1. 基本概念

  a、I/O重新導向通常與 FD有關,shell的FD通常為10個,即 0~9;(FD:file descripter,檔案描述符)
  b、常用FD有3個,為: 0(stdin,標準輸入)、1(stdout,標準輸出)、2(stderr,標準錯誤輸出),預設與keyboard、monitor、monitor有關;
  c、用 < 來改變讀進的資料通道(stdin),使之從指定的檔案讀進;
  d、用 > 來改變送出的資料通道(stdout, stderr),使之輸出到指定的檔案;
  e、0 是 < 的預設值,因此 < 與 0<是一樣的;同理,> 與 1> 是一樣的;
  f、在IO重新導向 中,stdout 與 stderr 的管道會先準備好,才會從 stdin 讀進資料;
  g、管道“|”(pipe line):上一個命令的 stdout 接到下一個命令的 stdin;
  h、tee 命令是在不影響原本 I/O 的情況下,將 stdout 複製一份到檔案去;
  i、bash(ksh)執行命令的過程:分析命令-變數求值-命令替代(``和$( ))-重新導向-萬用字元展開-確定路徑-執行命令;
  j、( )  將 command group 置於 sub-shell 去執行,也稱 nested sub-shell,它有一點非常重要的特性是:繼承父shell的Standard input, output, and error plus any other open file descriptors。
  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 分界符

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.