Linux中的/dev/null
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"的文件。