/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
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
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
root@localhost [~]# chmod 666 /dev/null
mknod是linux系统下的创建设备文件命令。
Leave a Reply