Linux探秘————/dev/null与/dev/zero

/dev目录

/dev目录挂载了linux的所有外部设备,dev意为device,是linux访问外部设备的端口,但没有入口,只能通过挂载的方式访问,在任意一台正常使用的服务器上,/dev下面的文件是很多的,因为linux遵循unix万物皆文件的风格。常见的设备有:

  • /dev/hd[a-t]:IDE设备,硬盘
  • /dev/sd[a-z]:SCSI设备
  • /dev/ram[0-15]内存
  • ………

还有很多,剩下不常见的就不一一举例了,也没啥意义,主要介绍俩新奇东西:/dev/null 和 /dev/zero

/dev/null

在类unix系统中,/dev/null称为空设备,是一个特殊的外部设备端口,它丢弃一切写入其中的数据(但写入会提示成功),如果尝试读取它,会立即得到一个EOF。行话称为位桶(bit bucket)或者黑洞(black hole),空设备一般用于丢弃不需要的输出流,或作为输入流的空文件,这些操作一般由重定向完成。如:

cat file意思是输出file内容至标准输出(即终端)

cat file > /dev/null 则输出直接丢失

cat file 2>/dev/null 当file不存在时,也不会报错,因为标准错误输出重定向至位桶了。

网上有个例子:cat file 2>/dev/null >/dev/null 可以当做检测文本文件file而存在,但我觉得好像不太管用,因为这相当于不管file是否存在,它都不会报错,那还怎么检测file是否存在呢?还不如直接用find ./-name file

/dev/zero

在类unix系统中,/dev/zero是一个特殊的文件,当你读它的时候,它会提供无线的空字符(null、ascii null、0x00)。其中一个典型的用法就是用它提供的字符流来覆盖信息,另一个用法就是产生一个特定大小的空白文件。

OK,上面这段是来自wiki的官方描述,实际上这玩意儿对普通用户真的没有什么作用,说是可以初始化文件,但我尝试用cat /dev/zero > zero.log时发现没几秒种这个文件就被塞进去6个G的乱码,我看了下速度是6.7G/s……吓得我赶紧停掉,后来查了下,正确的用法应该是使用dd命令从/dev/zero里任意大小的块出来:

dd if=/dev/zero of=/dev/raw bs=xxx count=xxx 。

bs:输出的块的大小,单位byte,count:块的数量

如此,我们再尝试:dd if=/dev/zero of=/home/zero.log bs=1024 count=1 得到的结果就是一个1kb的空文件,cat zero.log不会打印任何内容,vim编辑进去却有很多^@符号,应该是文本格式的原因


Linux探秘————/dev/null与/dev/zero
https://zhouyinglin.cn/post/a71cbc0a.html
作者
小周
发布于
2022年8月6日
更新于
2022年12月15日
许可协议