res*_*ing 199 syntax shell posix io-redirection
我在/etc/cron.daily/apf中找到了这段代码
#!/bin/bash
/etc/apf/apf -f >> /dev/null 2>&1
/etc/apf/apf -s >> /dev/null 2>&1
Run Code Online (Sandbox Code Playgroud)
它正在刷新并重新加载防火墙.
我不明白这一>> /dev/null 2>&1部分.
在cron中有这个的目的是什么?它覆盖了我的防火墙规则.我可以安全地删除这个cron作业吗?
zig*_*igg 307
>> /dev/null将标准输出(stdout)重定向到/dev/null,丢弃它.
(>>看起来有点多余,因为>>意味着追加>意味着截断和写入,并且追加或写入/dev/null具有相同的净效果.我通常只是>因为这个原因使用.)
2>&1将标准error(2)重定向到标准输出(1),然后将其丢弃,因为标准输出已被重定向.
Vis*_*ant 151
让我们把>> /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
Run Code Online (Sandbox Code Playgroud)
你有没有观察到crw?这意味着它是一个伪设备文件,它是字符特殊文件类型,提供串行访问.
/dev/null接受并丢弃所有输入; 不产生输出(总是在读取时返回文件结束指示).参考:维基百科
第3部分: 2>&1文件描述符
无论何时执行程序,操作系统总是打开三个文件STDIN,STDOUT并且STDERR正如我们所知,无论何时打开文件,操作系统(来自内核)都会返回一个称为文件描述符的非负整数.这些文件的文件描述符分别为0,1,2.
所以2>&1简单地说重定向STDERR到STDOUT
&意味着以下是文件描述符,而不是文件名.
简而言之,通过使用此命令,您告诉您的程序在执行时不要喊叫.
使用的重要性是2>&1什么?
如果您想在终端产生一些错误的情况下不产生输出.为了更清楚地解释,让我们考虑以下示例:
$ ls -l > /dev/null
Run Code Online (Sandbox Code Playgroud)
对于上面的命令,终端中没有打印输出,但是如果此命令产生错误怎么办:
$ ls -l file_doesnot_exists > /dev/null
ls: cannot access file_doesnot_exists: No such file or directory
Run Code Online (Sandbox Code Playgroud)
尽管我将输出重定向到/dev/null,但它会在终端中打印出来.这是因为我们没有将错误输出重定向到/dev/null,所以为了重定向错误输出,还需要添加2>&1
$ ls -l file_doesnot_exists > /dev/null 2>&1
Run Code Online (Sandbox Code Playgroud)
das*_*ght 53
这是静默执行程序并隐藏其所有输出的方法.
/dev/null是一个特殊的文件系统对象,它会抛弃写入其中的所有内容.将流重定向到它意味着隐藏输出.
该2>&1部分意味着"重定向输出和错误流".即使您的程序写入stderr,也不会显示该输出.
小智 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.
shi*_*hin 10
让我一点一点地解释一下。
0: standard input
1: standard output
2: standard error
Run Code Online (Sandbox Code Playgroud)
>>incommand >> /dev/null 2>&1将命令输出附加到/dev/null.
command
=> 1 output on the terminal screen
=> 2 output on the terminal screen
Run Code Online (Sandbox Code Playgroud)
command >> /dev/null
=> 1 output to /dev/null
=> 2 output on the terminal screen
Run Code Online (Sandbox Code Playgroud)
/dev/null 2>&1command >> /dev/null 2>&1
=> 1 output to /dev/null
=> 2 output is redirected to 1 which is now to /dev/null
Run Code Online (Sandbox Code Playgroud)
小智 5
我>> /dev/null 2>&1用于无声的cronjob,cronjob将完成这项工作但不向我的电子邮件发送报告.
据我所知,不要删除/dev/null,它特别适用于运行cpanel时,可用于丢弃cronjob报告.