我在 /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吗?
我在 /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吗?
>> /dev/null
会将标准输出(stdout
)重定向到/dev/null
,该设备会将其丢弃。
(>>
似乎有些多余了,因为>>
表示追加,而>
表示截断并写入,无论是追加还是写入/dev/null
都具有相同的净效果。出于这个原因,我通常只使用>
。)
2>&1
会将标准错误(2
)重定向到标准输出(1
),由于标准输出已经被重定向,因此也会将其丢弃。
&
符号在2>&1
中表示将标准错误输出重定向到与标准输出相同的位置。 - Nobody让我们将>> /dev/null 2>&1
语句分解为几个部分:
第一部分:>>
输出重定向
这用于重定向程序输出并将输出附加到文件末尾。更多...
第二部分: /dev/null
特殊文件
这是一个伪设备特殊文件。
命令ls -l /dev/null
将为您提供有关此文件的详细信息:
crw-rw-rw-. 1 root root 1, 3 Mar 20 18:37 /dev/null
你有没有注意到crw
?这意味着它是一个字符特殊文件类型的伪设备文件,提供串行访问。
/dev/null
接受和丢弃所有输入;不产生任何输出(在读取时始终返回文件结束指示)。参考:维基百科
第三部分: 2>&1
(将流2的输出与流1合并)
每当您执行程序时,操作系统总是打开三个文件:标准输入,标准输出和标准错误。我们知道,每当打开一个文件时,操作系统(来自内核)返回一个非负整数,称为文件描述符。这些文件的文件描述符分别为0、1和2。
因此,2>&1
简单地将标准错误重定向到标准输出。
&
表示其后跟随的是一个文件描述符,而不是文件名。
简而言之,使用此命令告诉您的程序在执行时不要大声喊叫。
使用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
>
是一个重定向运算符,重定向运算符后面期望的是一个文件位置,在1
前面添加&
表示这不是应用程序必须重定向输出的文件,而是一个文件描述符。如果有人能补充更多关于这个评论的细节,我会很感激。 - Vishrant这是一种以静默方式执行程序并隐藏其所有输出的方法。
/dev/null
是一个特殊的文件系统对象,可以将写入其中的所有内容都丢弃。将流重定向到其中意味着隐藏了程序的输出。
2>&1
部分表示“将错误流重定向到输出流中”,因此当您重定向输出流时,错误流也会被重定向。即使您的程序现在写入 stderr
,该输出也会被丢弃。
让我逐步解释一下。
0: standard input
1: standard output
2: standard error
>>
在command >> /dev/null 2>&1
中将命令输出附加到/dev/null
。
command
命令后: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
/dev/null
是一个标准文件,它丢弃所有写入它的内容,但会报告写操作成功。
1
是标准输出,2
是标准错误。
2>&1
将标准错误重定向到标准输出。 &1
表示文件描述符(标准输出),否则(如果只使用 1
)将会将标准错误重定向到名为 1
的文件中。 [任何命令] >>/dev/null 2>&1
将所有标准错误重定向到标准输出,并将所有内容写入 /dev/null
文件中。
>> /dev/null 2>&1
来进行无声的cronjob。cronjob可以完成工作,但不会将报告发送到我的电子邮件。/dev/null
。它很有用,特别是当你运行cPanel时,它可以用于丢弃cronjob报告。如其他人所述,将内容写入 /dev/null 可以消除程序的输出。通常情况下,cron 会为使用 cronjob 启动的进程的每个输出发送一封电子邮件。因此,通过将输出写入 /dev/null,您可以防止在 cron 中指定了您的地址时被垃圾邮件轰炸。
我通常会在与日志文件相关的命令中使用该命令...其目的是捕获任何错误并在同时运行脚本的多个服务器上评估/解决问题。
sh -vxe cmd > cmd.logfile 2>&1
不要使用 >/dev/null 2>&1,可以使用:wget -O /dev/null -o /dev/null example.com
在其他论坛上我看到的是这样说的:"这里 -O 将下载的文件发送到 /dev/null,-o 记录日志到 /dev/null 而不是 stderr。这样就完全不需要重定向了。"
另一个解决方案是:wget -q --spider mysite.com
https://serverfault.com/questions/619542/piping-wget-output-to-dev-null-in-cron/619546#619546
编辑/etc/conf.apf
文件。将DEVEL_MODE="0"
设置为DEVEL_MODE="1"
会添加一个cron任务,在5分钟后停止apf。
>&- 2>&-
。 - Zaz2>&1 > /dev/null
和> /dev/null 2>&1
是一样的吗?对我来说,后者更自然... - edelans/dev/null
,标准错误仍然会输出。请尝试此工具:https://gist.github.com/zigg/344361751c0110419b0f - zigg>> /dev/null 2>&1
可以写成&> /dev/null
。参见:What does &> do in bash?。 - codeforester