Linux 中的 /dev/null

Linux中的**/dev/空** 是空设备文件。这将丢弃写入它的所有内容,并在读取时返回** EOF** 。

这是一个命令行黑客,它就像一个真空吸尘器,吸掉扔到它上面的任何东西。

让我们来看看它意味着什么,以及我们可以对这个文件做些什么。


/dev/空属性

如果您尝试使用CAT command.]读取文件,这将返回文件结束(EOF )字符

1cat /dev/null

这是一个有效文件,可以使用以下命令进行验证

1stat /dev/null

这为我提供了以下输出

1File: /dev/null
2  Size: 0 Blocks: 0 IO Block: 4096 character special file
3Device: 6h/6d Inode: 5 Links: 1 Device type: 1,3
4Access: (0666/crw-rw-rw-)  Uid: (    0/    root)   Gid: (    0/    root)
5Access: 2020-02-04 13:00:43.112464814 +0530
6Modify: 2020-02-04 13:00:43.112464814 +0530
7Change: 2020-02-04 13:00:43.112464814 +0530

这表明该文件的大小为0字节,分配给它的块为零。文件权限还设置为任何人都可以对其进行读/写,但不能执行。

由于不是可执行文件,所以我们无法使用|操作符重定向到/dev/null的管道。唯一的办法是使用文件重定向(>>>,或者<<<)。

从下图可以看出,/dev/null确实是一个合法文件。

文件表

现在我们来看看/dev/null的一些常见用例。


Linux下重定向到/dev/空

我们可以通过重定向到/dev/null来丢弃我们使用的脚本的任何输出。

例如,我们可以尝试使用此技巧丢弃`ECHO‘消息。

1echo 'Hello from JournalDev' > /dev/null

您将不会得到任何输出,因为它被丢弃!

让我们尝试错误地运行一个命令,并通过管道将其输出到/dev/null

1cat --INCORRECT_OPTION > /dev/null

我们仍然会得到这样的输出:

1cat: unrecognized option '--INCORRECT'
2Try 'cat --help' for more information.

为什么会发生这种事?这是因为错误消息来自stderr,但我们只丢弃来自stdout的输出。

我们也需要考虑到‘stderr’。

丢弃错误消息

让我们将stderr和stdout重定向到 /dev/null 。我们可以使用stderr(** =2** )的文件描述符。

1cat --INCORRECT_OPTION > /dev/null 2>/dev/null

这会给我们需要的东西!

还有另一种方法可以做到这一点:首先将stderr重定向到stdout,然后将stdout重定向到**/dev/空** 。

其语法为:

1command > /dev/null 2>&1

注意末尾的2>&1。我们将stderr(2 )重定向到stdout(** 1** )。我们使用&1来告知外壳,目标文件是** 文件描述符** ,而不是文件名。

1cat --INCORRECT_OPTION > dev/null 2>&1

所以如果我们使用2>1,我们只会将stderr重定向到一个名为1的文件。这不是我们想要的!


总结

希望这能把事情弄清楚一点,这样您现在就可以在Linux中使用**/dev/空** ,知道它的意思了!请随时在下面的评论部分提出问题。


参考文献


Published At
Categories with 技术
Tagged with
comments powered by Disqus