大部分 crontab 计划任务,在命令行末尾都会带 >/dev/null 2>&1,它的作用是什么呢?

  • 以下为其详解:

> 代表重定向;

/dev/null 代表空设备文件,相当于回收站。null是一个名叫null小桶的东西,将输出重定向到它的好

处是:不会因为输出的内容过多而导致文件大小不断的增加,也就是将命令的输出扔掉了。

1 表示stdout标准输出,系统默认值是1,所以">/dev/null" 等同于 "1>/dev/null"

2 表示stderr标准错误输出;

& 表示等同于的意思,2>&1表示将标准错误输出重定向到标准输出stdout。

#整句的意思就是标准输出重定向到空设备文件,也就是不输出任何信息到终端,标准错误输出重定向等

同于标准输出,因为之前标准输出已经重定向到了空设备文件,所以标准错误输出也重定向到空设备文

件。

  • command > file 2>file command > file2>&1 区别

1command >file 2>file含义

#表示将命令所产生的标准输出信息,和错误的输出信息送到file 中。但是file会被打开两次,而且

stdoutstderr会互相覆盖,这样写相当于使用了FD1FD2两个同时去抢占file 的管道。

2command >file 2>&1 含义

#表示将stdout直接送向file stderr 继承了FD1管道后,再被送往file,此时,file 只被打开一次,也只

使用了一个管道FD1,它包括了stdoutstderr的全部内容。

IO效率上讲,前一条命令的效率比后一条命令的效率要低,所以在编写shell脚本时,我们较多会用

command > file 2>&1 这样的写法。