一台服务器同事反馈/dev/null使用不正常,登陆发现,其由一个块设备文件变成了一个普通方件,看这个情况应该是被删除后,重新直接touch了一个文件掩盖。重建/dev/null和/dev/zero的方法如下:

1[root@localhost /]# mknod /dev/null c 1 3
2[root@localhost /]# chmod 666 /dev/null
3然后执行命令查看/dev/null 文件,如下所示,已经成功修复/dev/null文件
4[root@localhost /]# ls -la /dev/null
5同样/dev/zero也类似:
6[root@localhost /]# mknod /dev/zero c 1 5
7[root@localhost /]# chmod 666 /dev/zero

两者的作用:

  • /dev/null 在类Unix系统中,/dev/null,或称空设备,是一个特殊的设备文件,它丢弃一切写入其中的数据(但报告写入操作成功),读取它则会立即得到一个EOF。/dev/null 被称为位桶(bit bucket)或者黑洞(black hole)。空设备通常被用于丢弃不需要的输出流,或作为用于输入流的空文件。这些操作通常由重定向完成。
  • /dev/zero /dev/zero 是一个特殊的文件,当你读它的时候,它会提供无限的空字符(NULL, ASCII NUL, 0x00)。其中的一个典型用法是用它提供的字符流来覆盖信息,另一个常见用法是产生一个特定大小的空白文件。BSD就是通过mmap把/dev/zero映射到虚地址空间实现共享内存的。可以使用mmap将/dev/zero映射到一个虚拟的内存空间,这个操作的效果等同于使用一段匿名的内存(没有和任何文件相关)。(引自:/dev/zero – 维基百科)

比如我们经常会使用如下命令创建一个空文件:

1# dd if=/dev/zero of=test bs=1M count=100 oflag=dsync