Linux中的/dev/null

时间:2020-02-23 14:38:01  来源:igfitidea点击:

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

这是一个命令行程序,起到了吸尘的作用,它吸走了扔给它的所有东西。

让我们看一下它的含义,以及该文件可以做什么。

/dev/null属性

如果您尝试使用cat命令读取文件尾(EOF)字符,则将返回该字符。

cat /dev/null

这是有效的文件,可以使用进行验证

stat /dev/null

这给了我一个输出

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

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

由于它不是可执行文件,因此我们不能使用使用|运算符的管道重定向到/dev/null
唯一的方法是使用文件重定向(">"," >>"或者" <"," <<")。

下图显示/dev/null确实是有效文件。

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

在Linux中重定向到/dev/null

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

例如,我们可以尝试使用此技巧来丢弃" echo"消息。

echo 'Hello from theitroad' > /dev/null

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

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

cat --INCORRECT_OPTION > /dev/null

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

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

为什么会这样呢?这是因为错误消息来自" stderr",但是我们仅丢弃" stdout"的输出。

我们还需要考虑" stderr"。

丢弃错误消息

让我们将stderr和stdout一起重定向到/dev/null。
为此,我们可以将文件描述符用于stderr(= 2)。

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

这将给我们我们所需要的!

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

语法如下:

command > /dev/null 2>&1

注意最后的" 2>&1"。
我们将stderr(2)重定向到stdout(1)。
我们用&1向shell提及目标文件是文件描述符而不是文件名。

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

因此,如果我们使用" 2> 1",则只会将" stderr"重定向到名为" 1"的文件。