1、概论 -- 来自维基的解释
/dev/null :
在类Unix系统中,/dev/null,或称空设备,是一个特殊的设备文件,它丢弃一切写入其中的数据(但报告写入操作成功),读取它则会立即得到一个EOF。
在程序员行话,尤其是Unix行话中,/dev/null 被称为位桶(bit bucket)或者黑洞(black hole)。空设备通常被用于丢弃不需要的输出流,或作为用于输入流的空文件。当你读它的时候,它会提供无限的空字符(NULL, ASCII NUL, 0x00)。
其中的一个典型用法是cat $filename 会输出filename对应的文件内容(输出到标准输出)
而使用 cat $filename >/dev/null
则不会得到任何信息,因为我们将本来该通过标准输出显示的文件信息重定向到了 /dev/null 中,so what will you get ?
使用 cat $filename 1>/dev/null 也会得到同样的效果,因为默认重定向的 1 就是标准输出。 如果你对 shell 脚本或者重定向比较熟悉的话,应该会联想到 2 ,也即标准错误输出。
我们使用 cat $filename 时如果filename对应的文件不存在,系统肯定会报错: “ cat: filename: 没有那个文件或目录 ” 。
如果我们不想看到错误输出呢?我们可以禁止标准错误: cat $badname 2>/dev/null
/dev/zero
像/dev/null一样,/dev/zero也是一个伪文件,但它实际上产生连续不断的null的流(二进制的零流,而不是ASCII型的)。写入它的输出会丢失不见,/dev/zero主要的用处是用来创建一个指定长度用于初始化的空文件,像临时交换文件。
比如说,在我的前一篇博客中(《尝试安装Chrome OS的新版本 Vanilla & 安装之后U盘遇到的问题解决》),提到我使用dd 制作的U盘系统,而我的U盘有16G,而制作好后,系统盘只占了2.5G,而其他的空间(将近12G)都无发使用。我只能使用 dd if=/dev/zero of=/dev/sdb bs=4M 来重新给我整个U盘清零。