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 含义解释这篇文章。