怎么在linux上清除命令的输出内容

1
$ ls -al > /dev/null 2>&1

执行上面的命令之后你会发现终端没有任何输出,为什么会这样呢?

继续执行下面的命令

1
$ ls -qwer > /dev/null 2>&1

发现还是没有任何输出,即使该命令是错误的。

造成这一切的根源在于命令最后面的2>&1

我们知道/dev/nulllinux系统上的伪设备文件,可以被用来消除来自程序的输出。尤其是对于命令行程序而言有更大的意义。

/dev/null看起来像是一个水漕,比如说一个可写的目标文件,然而只要有任何数据流被写入这个文件,都会被马上删除。

当用户不需要来自程序的输出信息时,这个命令是有用的。因为程序可能会生成大量的输出内容,而这会给分析日志的工作带来混乱。

对于/dev/null 2>&1命令,2在linux上代表STDERR(标准错误输出),而1则代表STDOUT(标准输出)。因此,这个命令的最终解释就是将标准错误输出和标准输出重定向到/dev/null,即消除这两种类型的输出。

我们再来具体分析下这个命令的构成,首先>表示重定向,而被重定向的对象则是/dev/null。而不是打印到终端。

这是否意味着该命令所有的输出都会被重定向到/dev/null呢,并不是,因为它只会重定向标准输出。

因此,还需要加上2>&1。表示将2(标准错误输出)重定向到1(标准输出)。那么&代表什么意思呢?如果不加上&的话,标准错误输出将会输出到名字为1的文件中。而&会告诉系统1不是一个文件,而是一个标准输出描述符号。

最后,我们将标准输出和标准错误输出都重定向到了/dev/null。而/dev/null会将所有的输出内容全部清除掉。

小结:/dev/null是linux系统上一个特殊的设备文件,可以将任何命令的标准输出(不管是标准输出还是错误输出)清除掉。