如果您已经使用 Linux 用户一段时间,那么您一定遇到过 /dev/null 一词,至少在模因中是这样。
/Dev
是大多数外围设备(例如磁盘驱动器)所在的目录。
但是这个 /dev/null 文件由于其特性而很特殊,我将在本指南中讨论这一点。
/dev/null 是什么?
它是一个虚拟文件,具有处理文件的独特方式。 写在 /dev/null 上的任何内容都将消失并且无法恢复。 一个命令应该产生巨大的输出? 将它重定向到 /dev/null 并且系统中的任何地方都不会看到输出,甚至在 /tmp 中也看不到。 这就是为什么它被称为 Linux 的黑洞。
让我快速分享一下 example 这里。
在这里,我将我的标准输出重定向到 /dev/null
:
echo "Linuxhandbook" > /dev/null
如您所见,当我使用 cat 命令打印的内容时 /dev/null
,它什么也没显示。
现在,让我们深入了解文件属性 /dev/null
.
/dev/null 的文件属性
为了更好的可读性,我将使用 stat 命令来了解文件系统的状态。
stat /dev/null
它解释了很多。
- 它是空的
- 创建日期与我上次启动的日期相同
- 文件的 UID 和 GID 为 0
- 并且允许每个用户读取和写入
/dev/null
- 它是一个字符设备文件,这意味着它将像一个未缓冲的设备一样工作并且可以接受数据流
所以你可以发送任意数量的文件到 /dev/null
,它不能被填充或不会增加尺寸。
?的 /dev/null
充当文件,因此,您不能使用 mv 命令删除或转储带有 dev/null 的目录。
在 Linux 中使用 /dev/null
正如我之前提到的,它是一个黑洞,无论发送到那里什么都无法恢复。
/dev/null 最常见的用途之一是将命令的错误或输出重定向到此文件。
想象一个命令运行了一段时间,它产生了标准输出和错误。 如果您只对阅读错误感兴趣,您可以将输出重定向到 /dev/null 以便它只显示错误。
command 1> /dev/null
同样,如果您只想查看标准输出而不是错误,则可以将错误重定向到 /dev/null。
command 2> /dev/null
您可以将标准输出和错误发送到 /dev/null。 这将运行命令但不会在屏幕上显示任何内容。
command 2>&1 /dev/null
如果所有这些 2>&1 的内容对您来说都像是代数,我强烈建议您阅读本文中有关 stdout、stdin 和 stderr 重定向的内容。
让我如此傻傻的简单 example.
在这里,我使用了两个命令 ls
和 apt update
其中更新存储库的命令 (apt update) 将需要超级用户权限。
在理想情况下,它应该给我以下输出:
ls && apt update

现在,我将错误部分重定向到 /dev/null:
ls && apt update 2> /dev/null

正如您所看到的,输出的错误部分不再显示。
还有更多的开发文件…
/dev/null 不是唯一的特殊设备文件。 /dev/zero 用于创建填充零的文件或 /dev/random 用于生成随机数。
为了结束本文,我将与您分享一个很酷的 /dev/null 模因?
