Q&A Linux 黑洞之旅 - /dev/null

根据 NASA 的说法,“黑洞是宇宙空间中引力非常大的地方,甚至连光都无法逃脱”。在 Linux 世界中也存在类似的东西——它会丢弃写入其中的任何内容,并在读取时仅返回 EOF(文件结束符)。这是一个特殊文件,也称为空设备 - /dev/null
所以,它只是一个文件?
是的,Linux 中的大多数东西都是文件,但 /dev/null
不是一个普通文件——让我们深入了解一下。
crw-rw-rw-
中的 c
告诉我们它是一个字符特殊文件,这意味着它逐字符处理数据。这也可以使用 test -c
来检查
文件的内容是什么?
让我们使用 cat
命令来检查一下
如前所述,它在读取时仅返回 EOF(文件结束符)。所以,它是空的!
关于该文件,我们还能了解什么?
让我们使用 stat
命令来找出答案
这告诉我们它的大小为 0。此外,值得注意的是,该文件的读取和写入权限对所有人启用,但它不需要执行权限。
当我们向文件写入数据时,文件的大小会发生什么变化?
让我们试试看
cat
命令没有返回任何内容,并且根据 stat
命令,它的大小没有改变。
如前所述,它会丢弃写入其中的任何内容。您可以向其中写入任意数量的数据,这些数据将被立即丢弃,因此其大小将始终保持为 0 – 奇点?
换句话说,您无法更改 /dev/null
它有用吗?如何使用它?
是的,它非常有用,并且在许多情况下都非常方便。
请记住它的 2 个关键属性(丢弃写入其中的任何内容并在读取时返回 EOF),让我们探讨一下它的常见用例
- 我们可以通过重定向到
/dev/null
来丢弃任何命令/脚本的输出 (stdout) 或错误 (stderr)作为参考,这里快速回顾一下重定向运算符
将 stdout 重定向到文件
> file 1> file
将 stderr 重定向到文件
2> file
将 stdout 和 stderr 重定向到文件
&> file > file 2>&1
因此,当您运行命令/脚本并且它生成您想要忽略的输出或错误时,它会非常方便。
-
我们可以通过将
/dev/null
的输出重定向到文件来清空文件(清除文件的内容) -
如果需要,我们可以为命令/脚本提供空输入
< /dev/null
这将提供空输入。换句话说,它将立即向命令/脚本发送 EOF,使其不会等待输入。
请注意,重定向运算符
<
用于输入 (stdin)。例如:在 mail 命令中,如果我们想避免电子邮件正文,我们可以使用
< /dev/null
示例:
$ mail -s hello mail@nawazabbasi.com < /dev/null
如果我们删除 /dev/null 会发生什么?
你想看看删除黑洞的后果吗? :D
好吧,首先让我们尝试找出我们是否可以删除它。
为了删除文件,我们需要对文件所在的目录具有写入权限。
让我们检查一下 /dev 目录的权限
在第一列中,第一个字符 d
表示 /dev
是一个目录。
随后的字符分别用于所有者、组和其他人——每组 3 个字符。
所有者拥有所有权限 rwx
,这意味着目录的所有者可以读取、写入和搜索目录。请注意,写入权限允许所有者在目录中创建或删除文件。
组和其他人的权限为 r-x
,这意味着组成员和其他用户可以读取和搜索目录,但不能在其中创建或删除文件。
现在让我们尝试删除它
显然,没有删除它的权限。
但是,所有者或具有 root 权限的用户应该能够删除它,对吧?
让我们将这部分作为 DIY 和一个后续问题留给好奇心
如果删除,它会自动重新创建吗?
启动你的终端并找出答案 - 祝你好运!
本文中使用的命令总结在下面的链接中。
您可以下载或直接执行它 - BlackHole