什么是/ dev / null,它如何为您提供帮助?

如果我们已经有了GNU / Linux目录树的一些概念,那么我们至少应该熟悉/ dev / reference,这实际上是所有与之相关的文件 硬件设备.

如果我们查看目录 / dev / 我们将看到一个名为“文件”的文件 ,但是如果我们想打开它查看其内容,系统将告诉我们这是不可能的,因为它不是普通的内容。 我将文件一词括起来,因为众所周知,对于Linux来说,所有内容(硬件和软件)都表示为文件。

这是Daniel Durante的贡献,因此成为我们每周比赛的获胜者之一:分享您对Linux的了解«。 恭喜丹尼尔!

/ dev / null对应于什么设备?

出于实际目的,想象一下一个垃圾桶,一个无底洞或可以将任何东西丢进去的无底坑或外太空(无论来自NASA的人如何努力)。

但是,如果我已经有了rm之类的命令,为什么要删除一些新内容?

因为这两个“黑洞”的工作方式是完全不同的:您将如何在运行时覆盖Shell脚本中命令的错误的标准输出? 这是/ dev / null出现的地方。

让我们看一个例子。

我们创建了一个名为tests的文件,其中包含字符串“ Hello World”。 如果要在命令行上表示该文件的内容,可以通过以下方式实现:

用户@笔记本电脑:〜$猫测试
你好,世界

如果该文件不存在或被命名为测试(末尾带有“ s”),则在控制台中将出现以下错误:

用户@笔记本电脑:〜$猫测试
cat:测试:文件或目录不存在

我们如何避免该错误消息? 好吧,如果发生错误,只需将命令的输出重定向到“垃圾桶”,即/ dev / null

我们如何指定出现错误的情况? 在这里输入程序的标准输入,输出和错误值:STDIN,STDOUT和STDERR(可以分别替换为0、1和2)。 这样,如果我们把...

用户@笔记本电脑:〜$猫测试2> / dev / null
用户@笔记本电脑:〜$

…我们将看到错误消息不会在控制台上产生。

您必须小心,因为语法是必不可少的:字符2和>之间不应有空格。 否则,它将给出以下内容:

用户@笔记本电脑:〜$猫测试2> / dev / null
cat:测试:文件或目录不存在
cat:2:文件或目录不存在

相反,>和/ dev / null之间的空格不会对结果产生负面影响。

我们还可以使用错误重定向,例如,如下所示在日志文件中捕获错误:

用户@笔记本电脑:〜$猫测试2> err.log

另一个有趣的情况是,只要不发生错误,就将结果收集到另一个文件中,对此我们可以考虑:

用户@笔记本电脑:〜$猫测试1> output_result 2> err.log

最后,值得将表达式«> / dev / null 2>&1»放入其中,将标准输出和错误输出组合在一起,将它们重定向,以便在任何情况下都不会获得输出信息。


8条评论,留下您的评论

发表您的评论

您的电子邮件地址将不会被发表。 必填字段标有 *

*

*

  1. 负责数据:MiguelÁngelGatón
  2. 数据用途:控制垃圾邮件,注释管理。
  3. 合法性:您的同意
  4. 数据通讯:除非有法律义务,否则不会将数据传达给第三方。
  5. 数据存储:Occentus Networks(EU)托管的数据库
  6. 权利:您可以随时限制,恢复和删除您的信息。

  1.   吉多·伊格纳西奥(Guido Ignacio)

    嗯,但是/ dev / null缺少的最常用的实用程序之一正在清空文件:$ cat / dev / null> file.log这样,file.log文件将为空。 添加它!

    1.    爱德华多·H

      正是他在寻找的解释。
      我支持添加它的动议=)

      Saludos!

  2.   保罗

    您好,首先文章非常好! 第二个我想为此主题提供一些帮助 来自Cpanel的php中的cron作业 第三篇博客的祝贺!

  3.   保罗

    关于dev / null的不错的文章,我认为我之前在错误的地方错误地评论了,真是太可惜了! 我道歉

  4.   匿名

    好感谢贡献

  5.   耶尔

    问候我得到了空袭。 我使用andrirc,从我的昵称中获得私有字词Null。 2秒后,该程序关闭,我一直在阅读,从我看到的结果来看,这只能由Shell完成,而不能由外部人员完成。 我试图忽略自己/忽略-lrpcntikd,并且命令不断出现令我惊讶。 如果您有任何尝试阻止它的方法,我们将不胜感激。 干杯

  6.   索非亚·马丁内斯

    如果在执行句子时未放置符号>,会发生什么情况?

    有人可以指导我吗?

  7.  

    早上好,我已经在 ACER Extensa 5620Z - 32 位上安装了 Debian netinst。一旦从 USB 安装完成并移除 pendrive,以便它从硬盘启动(不要从 pen 重新安装)但在启动的那一刻她问我的系统:
    debian 登录:xxxxxxxx (ok)
    密码:xxxxxxxx (ok)
    无@debian:~$ ???? 这是什么? 我应该放什么?

    如果没有此命令,我将无法继续进行系统引导。
    你能帮助我吗? 我不知道我应该如何继续。
    非常感谢。 亲切的问候。