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

作者:Nawaz Abbasi
Q&A trip to Linux’s Black Hole - /dev/null

根据 NASA 的说法,“黑洞是宇宙空间中引力非常大的地方,甚至连光都无法逃脱”。在 Linux 世界中也存在类似的东西——它会丢弃写入其中的任何内容,并在读取时仅返回 EOF(文件结束符)。这是一个特殊文件,也称为空设备 - /dev/null

所以,它只是一个文件?

是的,Linux 中的大多数东西都是文件,但 /dev/null 不是一个普通文件——让我们深入了解一下。

/dev/null 1

crw-rw-rw- 中的 c 告诉我们它是一个字符特殊文件,这意味着它逐字符处理数据。这也可以使用 test -c 来检查

/dev/null 2

文件的内容是什么?

让我们使用 cat 命令来检查一下

/dev/null 3

如前所述,它在读取时仅返回 EOF(文件结束符)。所以,它是空的!

关于该文件,我们还能了解什么?

让我们使用 stat 命令来找出答案

/dev/null 4

这告诉我们它的大小为 0。此外,值得注意的是,该文件的读取和写入权限对所有人启用,但它不需要执行权限。 

当我们向文件写入数据时,文件的大小会发生什么变化?

让我们试试看

/dev/null 5

cat 命令没有返回任何内容,并且根据 stat 命令,它的大小没有改变。

如前所述,它会丢弃写入其中的任何内容。您可以向其中写入任意数量的数据,这些数据将被立即丢弃,因此其大小将始终保持为 0 – 奇点?

换句话说,您无法更改 /dev/null

它有用吗?如何使用它?

是的,它非常有用,并且在许多情况下都非常方便。

请记住它的 2 个关键属性(丢弃写入其中的任何内容并在读取时返回 EOF),让我们探讨一下它的常见用例

  1. 我们可以通过重定向到 /dev/null 来丢弃任何命令/脚本的输出 (stdout) 或错误 (stderr)

     

    丢弃 stdout:/dev/null 6

     

    丢弃 stderr:/dev/null 7

     

    作为参考,这里快速回顾一下重定向运算符

    将 stdout 重定向到文件

    > file
    
    1> file

    将 stderr 重定向到文件

    2> file

    将 stdout 和 stderr 重定向到文件

    &> file
    
    > file 2>&1
    /dev/null 8

     

    因此,当您运行命令/脚本并且它生成您想要忽略的输出或错误时,它会非常方便。

  2. 我们可以通过将 /dev/null 的输出重定向到文件来清空文件(清除文件的内容)

    /dev/null 9
  3. 如果需要,我们可以为命令/脚本提供空输入

    < /dev/null

    这将提供空输入。换句话说,它将立即向命令/脚本发送 EOF,使其不会等待输入。

    请注意,重定向运算符 < 用于输入 (stdin)。

    例如:在 mail 命令中,如果我们想避免电子邮件正文,我们可以使用

    < /dev/null

    示例:$ mail -s hello mail@nawazabbasi.com < /dev/null

如果我们删除 /dev/null 会发生什么?

你想看看删除黑洞的后果吗? :D

好吧,首先让我们尝试找出我们是否可以删除它。

为了删除文件,我们需要对文件所在的目录具有写入权限。

让我们检查一下 /dev 目录的权限

/dev/null 10

在第一列中,第一个字符 d 表示 /dev 是一个目录。

随后的字符分别用于所有者、组和其他人——每组 3 个字符。

所有者拥有所有权限 rwx,这意味着目录的所有者可以读取、写入和搜索目录。请注意,写入权限允许所有者在目录中创建或删除文件。

组和其他人的权限为 r-x,这意味着组成员和其他用户可以读取和搜索目录,但不能在其中创建或删除文件。

现在让我们尝试删除它

/dev/null 11

显然,没有删除它的权限。

但是,所有者或具有 root 权限的用户应该能够删除它,对吧?

让我们将这部分作为 DIY 和一个后续问题留给好奇心

如果删除,它会自动重新创建吗?

启动你的终端并找出答案 - 祝你好运!

本文中使用的命令总结在下面的链接中。

您可以下载或直接执行它 - BlackHole

Nawaz 是一位 Linux CLI 爱好者,喜欢分享与命令行和 shell 脚本相关的技巧和教程。可以通过 LinkedIn 联系他。

加载 Disqus 评论