Linux-/dev/null的含义

Linux系统中,经常会再shell中遇到/dev/null,本文就主要说明一下/dev/null是什么。

/dev是什么

在 Linux 上,从驱动程序到设备的所有内容都可以作为文件进行访问(一切皆文件)。/dev/ 是包含所有物理和虚拟设备的目录。例如,/dev/sda 可能是主硬盘驱动器,/dev/sdb 可能是现在正在使用的笔记本驱动器的文件。这就是在 Linux 中访问设备的方式。除了这些物理设备(如硬盘驱动器)之外,Linux还具有虚拟设备。虚拟设备是类似于物理设备的设备,但实际上仅以软件形式存在。应用程序可以从这些设备获取数据,但这些数据(而不是来自物理设备)来自操作系统本身。

1
$ ls /dev/

/dev/null是什么

/dev/null 是一种特殊的虚拟设备,它用于写入而不是读取。写入 /dev/null 的任何内容都会从操作系统中消失。正是由于这个原因,/dev/null 被称为 bitbucket。例如,在这里,将”Hello World”输出重定向到/dev/null中。如您所见,没有输出。输出“Hello World”不存储在系统上的任何文件中。它只是消失了。

1
2
3
4
[root@localhost ~]# echo "Hello World"
Hello World
[root@localhost ~]# echo "Hello World">/dev/null
[root@localhost ~]#

我们还可以通过命令stat /dev/null来验证 /dev/null 是一个文件:

从输出中,我们可以看到这个文件的大小是0字节大小,所有人都有读写权限,没有执行权限。另外,它还是个 character special files。
由于它没有执行权限,不是一个可执行文件,所以不能使用管道符 | 来接 /dev/null ,只能使用文件重定向(>, >><, <<)。

/dev/null的使用

/dev/null的用途有哪些呢?比如我们在启动一个SpringBoot项目的时候,启动脚本里可以写成这样:

1
java -jar $JAR_NAME >/dev/null 2>>logs/catalina.out

意思是启动jar包是,将标准输出输出到/dev/null ,将标准错误输出到 logs/catalina.out 文件。
对于标准输出、标准错误输出的定义可以参考Linux-Shell中重定向 2>&1 含义解释这篇文章。

------ 本文完 ------