我在/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作业吗?
答案 0 :(得分:284)
>> /dev/null
将标准输出(stdout
)重定向到/dev/null
,将其丢弃。
(>>
似乎有点多余,因为>>
表示追加而>
表示截断和写入,并且追加或写入/dev/null
具有相同的网络因为这个原因,我通常只使用>
。)
2>&1
将标准错误(2
)重定向到标准输出(1
),然后标准输出也被丢弃,因为标准输出已被重定向。
答案 1 :(得分:106)
让我们将>> /dev/null 2>&1
语句分成几部分:
第1部分: >>
输出重定向
这用于重定向程序输出并将输出附加到文件的末尾。 More...
第2部分: /dev/null
特殊文件
这是 Pseudo-devices special file 。
命令ls -l /dev/null
将为您提供此文件的详细信息:
crw-rw-rw-. 1 root root 1, 3 Mar 20 18:37 /dev/null
您是否观察过crw
?这意味着它是伪设备文件,其character-special-file类型提供串行访问。
/dev/null
接受并丢弃所有输入;不产生输出(总是在读取时返回文件结束指示)。参考:Wikipedia
第3部分: 2>&1
文件描述符
无论何时执行程序,操作系统始终会打开三个文件STDIN
,STDOUT
和STDERR
,因为我们知道每当打开文件时,操作系统(来自内核) )返回一个非负整数,称为文件描述符。这些文件的文件描述符分别为0,1,2。
所以2>&1
只是说将STDERR
重定向到STDOUT
&
表示后面的内容是文件描述符,而不是文件名。
简而言之,通过使用此命令,您告诉您的程序在执行时不要大喊。
使用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
答案 2 :(得分:51)
这是静默执行程序的方法,并隐藏其所有输出。
/dev/null
是一个特殊的文件系统对象,它会抛弃写入其中的所有内容。将流重定向到它意味着隐藏输出。
2>&1
部分意味着"重定向输出和错误流"。即使您的程序写入stderr
,也不会显示该输出。
答案 3 :(得分:13)
/dev/null
- 标准文件,丢弃您写入的所有内容,但报告
写操作成功。
1
是stdout,2
是stderr。
2>&1
将stderr重定向到stdout。 &1
表示文件描述符(stdout),否则(如果仅使用1
),则会将stderr重定向到名为1
的文件。 [any command] >>/dev/null 2>&1
将所有stderr重定向到stdout,并将所有内容写入/dev/null
。
答案 4 :(得分:7)
让我一点点解释。
0: standard input
1: standard output
2: standard error
>>
中的 command >> /dev/null 2>&1
将命令输出附加到 /dev/null
。
command
=> 1 output on the terminal screen
=> 2 output on the terminal screen
command >> /dev/null
=> 1 output to /dev/null
=> 2 output on the terminal screen
/dev/null 2>&1
之后command >> /dev/null 2>&1
=> 1 output to /dev/null
=> 2 output is redirected to 1 which is now to /dev/null
答案 5 :(得分:5)
我使用>> /dev/null 2>&1
作为无声的cronjob,cronjob会完成这项工作,但不会将报告发送到我的电子邮箱。
据我所知,不要删除/dev/null
,它特别适用于运行cpanel时,可用于丢弃cronjob报告。
答案 6 :(得分:0)
正如其他人所描述的那样,写入/ dev / null会消除程序的输出。通常,cron会为使用cronjob启动的进程的每个输出发送一封电子邮件。因此,通过将输出写入/ dev / null,如果您在cron中指定了地址,则可以防止发送垃圾邮件。
答案 7 :(得分:0)
修改/etc/conf.apf
。设置DEVEL_MODE="0"
。设置为DEVEL_MODE
的{{1}}将在5分钟后添加一个停止apf的cron作业。