/dev/null和/dev/zero的区别及其用法

在Linux操作系统中/dev/null和/dev/zero是两个相似却又很特殊的文件,特别是在shell脚本开发和系统运维过程中会经常用这两个文件

/dev/null

可以把/dev/null文件看作”黑洞”,它等价于一个只写文件,所有写入/dev/null文件的内容都会丢失,而从/dev/null文件中也读取不到任何内容

作用:

1. 禁止标准输出
  例如:cat查看$filename文件,其回显信息将为空
  # cat $filename >/dev/null

2. 禁止标准错误
  例如:rm删除文件时,若$badname文件不存在,那么如下的方式则会过滤回显的错误信息
  # rm $badname 2>/dev/null

3. 禁止标准输出和标准错误的输出
  例如:cat查看$filename文件
  # cat $filename 2>/dev/null >/dev/null
  # 如果”$filename”不存在,将不会有任何错误信息提示.
  # 如果”$filename”存在, 文件的内容不会打印到标准输出.
  # 因此上面的代码根本不会输出任何信息.

4. 清除日志文件内容
  例如:
  # cat /dev/null > /var/log/messages
  # : > /var/log/messages 有同样的效果, 但不会产生新的进程.(因为:是内建的)
  # cat /dev/null > /var/log/wtmp

5. /dev/null的特殊用法,程序打印的日志将不再记录,避免系统空间被不需要的日志所占用
  例如:将该cookie的日志文件链接到/dev/null,那么往该文件中写入的内容都将被抛弃
  # ln -s /dev/null ~/.netscape/cookies

/dev/zero

/dev/zero和/dev/null一样,也是一个伪文件,但/dev/zero实际上能产生连续不断的null的流(二进制的零流,而不是ASCII型的),写入/dev/zero的输出会丢失不见

/dev/zero主要的用处是用来创建一个指定长度用于初始化的空文件,它通常都是配合dd命令一起使用

1. 用/dev/zero创建一个指定大小的临时文件
  例如:结合dd命令可创建一个大小为1024*1000bit的文件/swap,当然这个文件的大小可通过bs和count参数去调整
  # dd if=/dev/zero of=/swap bs=1024 count=1000

2. 通过/dev/zero将零填充到一个指定大小的文件,以使用某些特殊需求
  例如:把RAM设备的内容用零填充,从而实现格式化RAM的目的
  # dd if=/dev/zero of=$DEVICE count=$SIZE bs=$BLOCKSIZE

综上所述,/dev/null和/dev/zero文件的区别和用法如下:

/dev/null文件是空设备,也称为位桶(bit bucket),它主要是用于“被写入”,任何写入它的输出都会被抛弃。如果不想让消息以标准输出显示或写入文件,那么可以将消息重定向到/dev/null。因此凡是向/dev/null输入的任何数据,它通吃,并且不会撑着!

/dev/zero文件主要是用作一个标准的“0”输入设备,它可无穷尽地提供0,可以使用/dev/zero来初始化文件。

原文地址:https://www.cnblogs.com/wyhb008/p/15402400.html