1. 程式人生 > >Linux基礎教程之/dev/null和/dev/zero的區別及其用法

Linux基礎教程之/dev/null和/dev/zero的區別及其用法

在Linux作業系統中/dev/null和/dev/zero是兩個相似卻又很特殊的檔案,特別是在shell指令碼開發和系統運維過程中會經常用這兩個檔案,因此作為Linux系統工程師,你必須瞭解這兩個檔案的區別和用法。

一、/dev/null的用法:
我們可以把/dev/null檔案看作”黑洞”,它非常等價於一個只寫檔案,所有寫入/dev/null檔案的內容都會丟失,而從/dev/null檔案中也讀取不到任何內容。然而,也正因為這些特點,在shell指令碼開發和命令列維護時,/dev/null檔案就可大展身手,顯得非常的有用。

1. 禁止標準輸出
例如:cat檢視$filename檔案,其回顯資訊將為空
# cat $filename >/dev/null

2. 禁止標準錯誤
例如:rm刪除檔案時,若$badname檔案不存在,那麼如下的方式則會過濾回顯的錯誤資訊
# rm $badname 2>/dev/null

3. 禁止標準輸出和標準錯誤的輸出
例如:cat檢視$filename檔案
# cat $filename 2>/dev/null >/dev/null
# 如果”$filename”不存在,將不會有任何錯誤資訊提示.
# 如果”$filename”存在, 檔案的內容不會列印到標準輸出.
# 因此上面的程式碼根本不會輸出任何資訊.

4. 清除日誌檔案內容
例如:
# cat /dev/null > /var/log/messages
# : > /var/log/messages 有同樣的效果, 但不會產生新的程序.(因為:是內建的)
# cat /dev/null > /var/log/wtmp

5. /dev/null的特殊用法,程式列印的日誌將不再記錄,避免系統空間被不需要的日誌所佔用
例如:將該cookie的日誌檔案連結到/dev/null,那麼往該檔案中寫入的內容都將被拋棄
# ln -s /dev/null ~/.netscape/cookies

二、/dev/zero的用法:
/dev/zero和/dev/null一樣,也是一個偽檔案,但/dev/zero實際上能產生連續不斷的null的流(二進位制的零流,而不是ASCII型的),寫入/dev/zero的輸出會丟失不見,而從/dev/zero讀出一連串的null也比較困難,雖然這也能通過dd或一個十六進位制編輯器來做到,/dev/zero主要的用處是用來建立一個指定長度用於初始化的空檔案,它通常都是配合dd命令一起使用的。

1. 用/dev/zero建立一個指定大小的臨時檔案
例如:結合dd命令可建立一個大小為1024*1000bit的檔案/swap,當然這個檔案的大小可通過bs和count引數去調整
# dd if=/dev/zero of=/swap bs=1024 count=1000

2. 通過/dev/zero將零填充到一個指定大小的檔案,以使用某些特殊需求
例如:把RAM裝置的內容用零填充,從而實現格式化RAM的目的
# dd if=/dev/zero of=$DEVICE count=$SIZE bs=$BLOCKSIZE

綜上所述,/dev/null和/dev/zero檔案的區別和用法如下:
/dev/null檔案是空裝置,也稱為位桶(bit bucket),它主要是用於“被寫入”,任何寫入它的輸出都會被拋棄。如果不想讓訊息以標準輸出顯示或寫入檔案,那麼可以將訊息重定向到/dev/null。因此凡是向/dev/null輸入的任何資料,它通吃,並且不會撐著!
/dev/zero檔案主要是用作一個標準的“0”輸入裝置,它可無窮盡地提供0,可以使用/dev/zero來初始化檔案。