什么是/ dev / null的2>&1?什么是/ dev / null的2>&1?(W

2019-05-13 23:24发布

我发现这段代码在/etc/cron.daily/apf

#!/bin/bash  
/etc/apf/apf -f >> /dev/null 2>&1  
/etc/apf/apf -s >> /dev/null 2>&1  

它刷新和重新加载防火墙。
我不明白>> /dev/null 2>&1部分。

什么是cron的有这个的目的是什么? 它覆盖我的防火墙规则。 我可以安全地删除此cron作业?

Answer 1:

>> /dev/null重定向标准输出( stdout )到/dev/null ,这将其丢弃。

(该>>似乎有点多余,因为>>表示追加,而>表示截断和写入,并要么追加或写/dev/null具有相同的净效应。我通常只是用>出于这个原因。)

2>&1重定向标准误差( 2 )到标准输出( 1 ),然后将其丢弃,以及因为标准输出已经被重定向。



Answer 2:

让我们打破>> /dev/null 2>&1语句转换成部分:


第1部分: >>输出重定向

这是用来重定向程序输出并在该文件的末尾的输出追加。 更多...


第2部分: /dev/null特殊文件

这是一个伪设备特殊文件

命令ls -l /dev/null会给你这个文件的详细信息:

crw-rw-rw-. 1 root root 1, 3 Mar 20 18:37 /dev/null

你观察crw ? 这意味着它是一个伪设备文件这是字符专用文件 ,它提供串行访问类型。

/dev/null接受并丢弃所有输入; 不产生输出(总是返回上一个读的结束文件指示)。 参考: 维基百科


第3部分: 2>&1文件描述符

当你执行一个程序,操作系统始终打开三个文件STDINSTDOUTSTDERR ,因为我们知道,每当打开一个文件时,操作系统(从内核 )返回一个称为文件描述符的非负整数。 这些文件的文件描述符是0,1,2分别。

所以2>&1只是说重定向STDERRSTDOUT

&任何如下的手段是文件描述符,而不是文件名。

总之,通过使用该命令你告诉你的程序不是在执行喊。

什么是使用的重要性2>&1

如果你想制作即使在终端产生了一些错误的情况下,没有输出。 为了解释清楚,让我们看看下面的例子:

$ ls -l > /dev/null

对于上述命令,没有输出被印在终端上,但如果该命令产生一个错误:

$ ls -l file_doesnot_exists > /dev/null 
ls: cannot access file_doesnot_exists: No such file or directory

尽管我输出重定向到/dev/null ,它被印刷在终端中。 这是因为我们没有重定向错误输出到/dev/null ,所以为了重定向错误输出,以及,需要添加2>&1

$ ls -l file_doesnot_exists > /dev/null 2>&1


Answer 3:

这是悄悄执行程序,并隐藏了所有的输出方式。

/dev/null是一个特殊的文件系统对象,扔掉一切都写了进去。 重定向流引入这意味着隐藏的输出。

2>&1部分是指“重定向两者的输出和错误流”。 即使你的程序写入stderr ,该输出将不会显示。



Answer 4:

/dev/null -它放弃所有你写它的标准文件,但有报道说写操作成功。 1是stdout和2是标准错误。 2>&1重定向标准错误到stdout。 &1表示文件描述符(标准输出),否则(如果你只使用1 ),你会重定向错误输出到文件名为1[any command] >>/dev/null 2>&1重定向所有错误输出到标准输出,并且所有的写入到/dev/null



Answer 5:

我用>> /dev/null 2>&1无声的cronjob,的cronjob会做的工作,但不发送报告给我的电子邮件。

据我所知,不删除/dev/null ,这尤其是当你运行的cPanel有用,可以用于扔掉的cronjob报告。



Answer 6:

如由其他人所描述的,写入到/ dev / null的消除的程序的输出。 通常的cron将开始与一个cronjob从过程的每一个输出的电子邮件。 因此,通过写输出到/ dev / null的,如果你指定在cron你ADRESS您防止被垃圾邮件。



Answer 7:

编辑/etc/conf.apf 。 设置DEVEL_MODE="0" DEVEL_MODE设置为1会增加一个cron作业5分钟后停止APF。



文章来源: What is /dev/null 2>&1?