Linux 中的 /dev/null 是什么?

用技术术语来说,“/dev/null”是一个虚拟设备文件。 就程序而言,它们被视为真实文件。 实用程序可以从这种来源请求数据,操作系统向它们提供数据。 但是,操作系统不是从磁盘读取,而是动态生成这些数据。 一个 example 这样的文件是“/dev/zero”。

但是,在这种情况下,您将写入设备文件。 你写到“/dev/null”的任何东西都会被丢弃、遗忘、扔进虚空。 要理解它为什么有用,首先必须对 Linux 或 *nix 类型操作系统中的标准输出和标准错误有基本的了解。

标准输出和标准错误

命令行实用程序可以生成两种类型的输出。 标准输出被发送到标准输出。 错误被发送到 stderr。

默认情况下,stdout 和 stderr 与您的终端窗口(或控制台)相关联。 这意味着发送到 stdout 和 stderr 的任何内容通常都会显示在您的屏幕上。 但是通过 shell 重定向,您可以改变这种行为。 为了 example,您可以将标准输出重定向到文件。 这样,它不会在屏幕上显示输出,而是将其保存到文件中供您稍后阅读 – 或者您可以将 stdout 重定向到物理设备,例如数字 LED 或 LCD 显示器。

如果您想了解更多信息,可以查看有关管道和重定向的完整文章。

  • 2> 您重定向标准错误消息。 例子: 2>/dev/null 或者 2>/home/user/error.log.
  • 1> 您重定向标准输出。
  • &> 您重定向标准错误和标准输出。

使用 /dev/null 去除不需要的输出

由于有两种类型的输出,标准输出和标准错误,第一个用例是过滤掉一种或另一种。 通过实际操作更容易理解 example. 假设您正在“/sys”中寻找一个字符串来查找引用电源设置的文件。

会有很多普通的非 root 用户无法读取的文件。 这将导致许多“权限被拒绝”错误。

开发空 Grep 错误

这些使输出变得混乱,使您更难发现您正在寻找的结果。 由于“Permission denied”错误是 stderr 的一部分,您可以将它们重定向到“/dev/null”。

Dev Null Grep 没有错误

如您所见,这更容易阅读。

在其他情况下,反向操作可能会很有用:过滤掉标准输出,这样您就只能看到错误。

开发空 Ping 错误

上面的屏幕截图显示,在没有重定向的情况下,当 ping 可以到达目标机器时,它会显示其正常输出。 在第二个命令中,网络在线时不显示任何内容,但一旦断开连接,则仅显示错误消息。

您可以将 stdout 和 stderr 重定向到两个不同的位置。

在这种情况下,stdout 消息根本不会显示,错误消息将保存到“error.log”文件中。

将所有输出重定向到 /dev/null

有时摆脱所有输出很有用。 有两种方法可以做到这一点。

字符串 >/dev/null 表示“将标准输出发送到 /dev/null”,第二部分, 2>&1, 表示将标准错误发送到标准输出。 在这种情况下,您必须将标准输出称为“&1”而不是简单的“1”。 写入“2>1”只会将标准输出重定向到名为“1”的文件。

这里需要注意的重要一点是顺序很重要。 如果您像这样反转重定向参数:

它不会按预期工作。 那是因为一旦 2>&1 被解释后,stderr 被发送到 stdout 并显示在屏幕上。 接下来,stdout 在发送到“/dev/null”时被抑制。 最终结果是您将在屏幕上看到错误,而不是抑制所有输出。 如果您不记得正确的顺序,有一个更简单的重定向,更容易键入:

在这种情况下, &>/dev/null 相当于说“将stdout和stderr都重定向到这个位置”。

重定向到 /dev/null 可能有用的其他示例

假设您想查看磁盘读取顺序数据的速度。 该测试不是非常准确,但足够准确。 您可以使用 dd 为此,但 dd 要么输出到标准输出,要么可以被指示写入文件。 和 of=/dev/null 你可以告诉 dd 写入这个虚拟文件。 您甚至不必在这里使用 shell 重定向。 if= 指定要读取的输入文件的位置; of= 指定输出文件的名称,写入位置。

开发空 Dd

在某些情况下,您可能希望查看从服务器下载的速度。 但是您不想不必要地写入磁盘。 很简单,不要写入常规文件,而是写入“/dev/null”。

结论

希望本文中的示例可以启发您找到自己的创造性方式来使用“/dev/null”。

知道这个特殊设备文件的有趣用例吗? 在下面发表评论并分享知识!

订阅我们的新闻!

我们最新的教程直接发送到您的收件箱

注册所有时事通讯。 注册即表示您同意我们的隐私政策并且欧洲用户同意数据传输政策。 我们不会共享您的数据,您可以随时取消订阅。 订阅