Linux中/dev/null和/dev/zero兩個文件的做用和區別

咱們在rhce課程中,多處遇到/dev/null,/dev/zero, 好比mysql

find / -name passwd 2>/dev/nulllinux

sha1sum /dev/zero &sql

,那麼,這二者究竟是什麼意思呢?windows

我引用了網上的資料,或許對你們有用.dom

 

 

在類Unix操做系統中,設備節點並不必定要對應物理設備。沒有這種對應關係的設備被稱之爲僞設備。操做系統運用了它們實現多種多樣的功能,/dev/null和/dev/zero就是這樣的設備,相似的還有/dev/urandom、/dev/tty等。curl

先檢查下/dev/null和/dev/zero兩個文件的屬性:url

[root@dbserver ~]# ls -l/dev/null /dev/zero操作系統

crw-rw-rw-. 1 root root 1, 3Jul 15 00:11 /dev/nullunix

crw-rw-rw-. 1 root root 1, 5Jul 15 00:11 /dev/zeroserver

提示:從文件屬性能夠看出這兩個文件都是字符設備文件。

一、/dev/null

1)/dev/null介紹

你們都知道宇宙中「太陽黑洞」吧,全部的天體(含地球)一旦進入了太陽黑洞都會消失的無影無蹤。這裏的/dev/null就是Linux系統中的"黑洞"。

在類Unix系統中,/dev/null(空設備文件或黑洞文件)是一個特殊的設備文件,全部寫入其中的數據,都會被丟棄的無影無蹤,/dev/null一般被用於丟棄不須要的數據輸出,或做爲用於輸入流的空文件。這些操做一般由重定向完成。

2)/dev/null實踐

範例1-1:清空文件。

[root@dbserver ~]# cp/etc/hosts{,.ori} #<==備份。

[root@dbserver ~]# cat /dev/null>/etc/hosts #<==將讀取黑洞設備寫入到/etc/hosts,表示清空hosts文件。

[root@dbserver ~]# cat/etc/hosts #<==果真沒了。使用上述備份恢復回來。

範例1-2:將無用的輸出流寫入到黑洞丟棄。

當取一個地址響應頭的第一行時,加上管道就會出現下面的特殊結果:

[root@dbserver ~]# curl -Iwww.cqsztech.com|head -1

Total % Received % Xferd AverageSpeed Time Time Time Current

Dload Upload Total Spent Left Speed

0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0

HTTP/1.1 200 OK

執行上述命令時,會憑空多出來的幾行無用信息,此時就可使用將錯誤信息定向到黑洞(2>/dev/null)的方式丟棄無用信息。

[root@dbserver ~]# curl -Iwww.cqsztech.com 2>/dev/null|head -1 #<==將錯誤信息定向到黑洞。

HTTP/1.1 200 OK

固然了curl命令也提供了實現參數,這裏暫且很少表。

[root@dbserver ~]# curl -I -s www.cqsztech.com|head-1

HTTP/1.1 200 OK

範例1-3:將定時任務腳本結尾加上>/dev/null 2>&1

在書寫定時任務總,規範的寫法就是將全部定時任務腳本結尾加上>/dev/null 2>&1,讓全部的輸出流(包括錯誤的和正確的)都定向到空設備丟棄。

[root@dbserver ~]# crontab -l

#time sync by sztech at2010-2-1

*/5 * * * * /usr/sbin/ntpdatetime.windows.com >/dev/null 2>&1

#bak all db

00 01 * * * /bin/sh/server/scripts/mysqlbak.sh >/dev/null 2>&1

二、/dev/zero

1) /dev/zero介紹

和/dev/null相似,/dev/zero也是一個特殊的字符設備文件,當咱們使用或讀取它的時候,它會提供無限接二連三的空的數據流(特殊的數據格式流)。

/dev/zero文件的常見應用場景有二:

a./dev/zero文件覆蓋其餘文件信息。

b.產生指定大小的空文件,例如:交換文件、模擬虛擬文件系統等。

2)/dev/zero實踐

範例1-5:產生指定大小的空文件。

[root@dbserver ~]# dd if=/dev/zeroof=test.data bs=1M count=2 #<==生成塊大小1M,含有2個塊的文件。

2+0 records in

2+0 records out

2097152 bytes (2.1 MB) copied,0.00279345 s, 751 MB/s

[root@dbserver ~]# ls -lhtest.data

-rw-r--r--. 1 root root 2.0MJul 15 20:20 test.data #<==一共2M大小。

[root@dbserver ~]# filetest.data

test.data: data #<==特殊的數據文件格式。

提示:在使用dd命令產生空文件時經常使用/dev/zero做爲字符流的源。

範例1-4:利用/dev/zero文件覆蓋其餘文件信息

[root@dbserver ~]# echo sztech>new.txt #<==生成一個新文件寫入sztech字符串。

[root@dbserver ~]# dd if=/dev/zero of=new.txt bs=1M count=10 #<==用空的字符流覆蓋存在的new.txt文件。

10+0 records in

10+0 records out

10485760 bytes (10 MB) copied,0.0475368 s, 221 MB/s

[root@dbserver ~]# cat new.txt #<==數據丟失了。

相關文章
相關標籤/搜索