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/空** ,知道它的意思了!请随时在下面的评论部分提出问题。