/dev/null

在类Unix系统中,/dev/null,或称空设备,是一个特殊的设备文件,它丢弃一切写入其中的数据(但报告写入操作成功),读取它则会立即得到一个EOF。

在程序员行话,尤其是Unix行话中,/dev/null 被称为位桶(bit bucket)或者黑洞(black hole)。空设备通常被用于丢弃不需要的输出流,或作为用于输入流的空文件。这些操作通常由重定向完成。


它是空设备,也称为位桶(bit bucket)。任何写入它的输出都会被抛弃。如果不想让消息以标准输出显示或写入文件,那么可以将消息重定向到位桶。

/dev/zero

在类UNIX 操作系统中, /dev/zero 是一个特殊的文件,当你读它的时候,它会提供无限的空字符(NULL, ASCII NUL, 0x00)。

其中的一个典型用法是用它提供的字符流来覆盖信息,另一个常见用法是产生一个特定大小的空白文件。BSD就是通过mmap把/dev/zero映射到虚地址空间实现共享内存的。可以使用mmap将/dev/zero映射到一个虚拟的内存空间,这个操作的效果等同于使用一段匿名的内存(没有和任何文件相关)。


该设备无穷尽地提供0,可以使用任何你需要的数目——设备提供的要多的多。他可以用于向设备或文件写入字符串0。

误操作删除了/dev/zero文件,故障现象:

root@localhost [~]# dd if=/dev/zero of=filename bs=8k count=2k conv=fdatasync
dd: opening '/dev/zero': No such file or directory
root@localhost [~]# dd if=/dev/zero of=filename bs=8k count=2k conv=fdatasync
0+0 records in
0+0 records out
0 bytes (0 B) copied, 1.8578e-05 s, 0.0 kB/s

这种情况下,我们不能直接从别的地方复制或者直接简单的执行创建这个文件。因为该文件是Unix下的一个特殊文件,通过普通的方法是无法还原的,只能使用mknod命令创建:

root@localhost [~]# mknod /dev/zero c 1 5
root@localhost [~]# chmod 666 /dev/zero
root@localhost [~]# dd if=/dev/zero of=filename bs=8k count=2k conv=fdatasync
2048+0 records in
2048+0 records out
16777216 bytes (17 MB) copied, 0.0597288 s, 281 MB/s

同理,误操作删除了/dev/null文件,修复办法如下:

root@localhost [~]# mknod /dev/null c 1 3
root@localhost [~]# chmod 666 /dev/null

mknod是linux系统下的创建设备文件命令。