/dev/null 和 /dev/zero 之间的区别

Pan*_*dya 42 devices

当尝试重定向到/dev/nulland 时/dev/zero,它的输出将被丢弃。这似乎都/dev/null/dev/zero接受,并丢弃所有输入。那么,/dev/null和之间有什么区别/dev/zero

Pan*_*dya 71

是的,都接受和丢弃所有输入,但它们的输出不一样:

  • /dev/null不产生输出
  • /dev/zero产生一个连续的 NULL(零值)字节流

您可以通过执行cat /dev/null和来查看差异cat /dev/zero

  • 尝试cat /dev/null > file,你会发现一个空的file.

  • 现在尝试cat /dev/zero > file,同时观察文件 ( watch -n 1 du -h file)的大小不断增加。这是因为从中读取/dev/zero会产生无穷无尽的\0(空)字符流。

用于dd更恰当地可视化差异:

$ dd if=/dev/null of=file count=10
0+0 records in
0+0 records out
0 bytes (0 B) copied, 0.000276193 s, 0.0 kB/s
Run Code Online (Sandbox Code Playgroud)

$ dd if=/dev/zero of=file count=10
10+0 records in
10+0 records out
5120 bytes (5.1 kB) copied, 0.00090775 s, 5.6 MB/s
Run Code Online (Sandbox Code Playgroud)

/dev/zero 用于创建虚拟文件或交换。

还请访问:

  • 也许对普通读者来说并不明显,只是*如何* `/dev/null` 不产生任何输出:它立即发出 EOF 信号。 (8认同)
  • 嗨@AaronFranke,哦,当然!`:-)` 将 `/dev/zero` 的输出视为 _potential_ 全 1 字节流:我们只需要用全 1 字节替换每个全零字节。一个全 1 字节是八进制中的 `377`(如 `printf '%o\n' $((2#11111111))` 告诉我们的);**`tr '\000' '\377' </dev/zero >/tmp/all-ones.dat `** 会迅速生成一大堆全1字节。 (3认同)
  • 值得注意的是:`mmap`ping `/dev/zero` 和 `MAP_PRIVATE` 是获取匿名内存映射的“可移植”方式(在没有像 `MAP_ANON` 这样的扩展名的情况下)。 (2认同)
  • 有没有一种设备可以满足所有人的需求? (2认同)