Linux和类Unix系统中,有一个非常神奇且实用的文件,那就是/dev/null。它像一个深不见底的黑色洞穴,吞噬所有进入其中的数据。本文将揭示/dev/null的奥秘以及它的使用场景。

/dev/null是什么

/dev/null是一个特殊的设备文件,被称为 "空设备"。任何写入/dev/null的数据都会被丢弃,而尝试从/dev/null读取数据会立即返回文件结束(EOF)。它可以看作是一个数据的黑洞,将数据送入其中就意味着数据被销毁。

/dev/null使用场景举例

1. 丢弃标准输出

当执行一个命令但不希望看到其标准输出(stdout)时,可以将其重定向到/dev/null。例如,通过which命令判断命令行工具ss是否存在,只需要检查which命令的退出状态即可,不希望在屏幕上显示任何输出,可以这样执行:


which ss > /dev/null
if [ $? -eq 0 ]; then
    #使用ss命令进行一些操作
    ss -anp|grep -w 5672
else
    echo 命令行工具ss不存在
fi

如果某个程序持续生成大量日志信息,而暂时不需要这些信息,可以将日志输出直接发送至/dev/null,避免磁盘空间浪费。

如果某个程序持续生成大量日志到指定的日志文件, 而暂时不需要这些信息,可以将该日志文件链接到/dev/null,这样写入该日志文件的内容将被丢弃。例如:


ln -s /dev/null /path/to/app.log

2. 忽略错误信息

当运行某些命令时,可能会产生标准错误(stderr)。如果我们不希望这些错误信息显示在屏幕上,可以将标准错误重定向到/dev/null。例如,使用find查找文件时,由于部分目录没有访问权限,会输出很多错误提示“Permission denied”,可以这样执行:


find . -name xxx 2>/dev/null

注意:如果find命令存在语法错误,比如使用了错误的选项,也将看不到错误提示,因此需要先测试命令,确保其可以正常执行,再添加2>/dev/null。

可以使用2>&1将标准错误重定向到标准输出,然后与标准输出一起重定向到/dev/null。例如:


command >/dev/null 2>&1

3. 作为输入源

当程序需要读取数据,而实际上并不需要任何实际内容时,可以将/dev/null作为输入来源,例如:


command < /dev/null

4. 测试命令行为

由于/dev/null可以提供一个空的数据源或接收任意大小的数据而不占用资源,所以在测试命令如何处理空输入或无反馈输出的情况时非常有用。