《Ubuntu — /dev/null和/dev/zero的作用以及区别》

  在类Unix操作系统中,设备节点并不一定要对应物理设备。没有这种对应关系的设备被称之为伪设备。操作系统运用了它们实现多种多样的功能,/dev/null和/dev/zero就是这样的设备,类似的还有/dev/urandom、/dev/tty等。

  先检查下/dev/null和/dev/zero两个文件的属性:

  

   可以看出这两个文件是字符设备文件。

1. /dev/null

  在类Unix系统中,/dev/null(空设备文件或黑洞文件)是一个特殊的设备文件,所有写入其中的数据,都会被丢弃的无影无踪,/dev/null通常被用于丢弃不需要的数据输出,或作为用于输入流的空文件。这些操作通常由重定向完成。

清空文件:

cat /dev/null>/etc/hosts     将从/dev/null读取到的数据写入到/etc/hosts,表示清空hosts文件。
cat/etc/hosts                就没有数据了

将无用的输出流写入到/dev/null丢弃:

[root@oldboy ~]# curl -Iwww.oldboyedu.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

  执行上述命令时,会凭空多出来的几行无用信息,此时就可以使用将错误信息定向到/dev/null的方式丢弃无用信息。

[root@oldboy ~]# curl -Iwww.oldboyedu.com 2>/dev/null|head -1
HTTP/1.1 200 OK

2./dev/zero

  和/dev/null类似,/dev/zero也是一个特殊的字符设备文件,当我们使用或读取它的时候,它会提供无限连续不断的空的数据流(特殊的数据格式流)。

/dev/zero文件的常见应用场景有二:

  a./dev/zero文件覆盖其他文件信息。
  b.产生指定大小的空文件,例如:交换文件、模拟虚拟文件系统等。

产生指定大小的空文件:

root@oldboy ~]# dd if=/dev/zero of=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@oldboy ~]# ls -lh test.data
-rw-r--r--. 1 root root 2.0MJul 15 20:20 test.data #<==一共2M大小。

[root@oldboy ~]# file test.data
test.data: data #<==特殊的数据文件格式。

  提示:在使用dd命令产生空文件时常用/dev/zero作为字符流的源。

利用/dev/zero文件覆盖其他文件信息:

[root@oldboy ~]# echo oldboy > new.txt     #<==生成一个新文件写入oldboy字符串。
[root@oldboy ~]# ddif=/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@oldboy ~]# cat new.txt #<==数据丢失了。

3./dev/null和/dev/zero的区别

  /dev/null  : 在类Unix系统中,/dev/null,或称空设备,是一个特殊的设备文件,它丢弃一切写入其中的数据(但报告写入操作成功),读取它则会立即得到一个EOF。
  在程序员行话,尤其是Unix行话中,/dev/null 被称为位桶(bit bucket)或者黑洞(black hole)。空设备通常被用于丢弃不需要的输出流,或作为用于输入流的空文件。当你读它的时候,它会提供无限的空字符(NULL, ASCII NUL, 0x00)。

  /dev/zero也是一个伪文件,但它实际上产生连续不断的null的流(二进制的零流,而不是ASCII型的)。写入它的输出会丢失不见,/dev/zero主要的用处是用来创建一个指定长度用于初始化的空文件,像临时交换文件。

原文地址:https://www.cnblogs.com/zhuangquan/p/12534594.html