为什么 `&~` 的意思是“丢弃上一行匹配的消息”?

为什么 `&~` 的意思是“丢弃上一行匹配的消息”?

在网页中 iptables 日志

/etc/rsyslog.d/iptables.conf使用下列内容创建:

:msg, startswith, "iptables: " -/var/log/iptables.log
& ~

第二行的意思是丢弃上一行匹配到的报文。
为什么& ~在iptables配置中会有“丢弃上一行匹配到的报文”的意思呢?

答案1

bash它与nor无关iptables(正如您的问题标签最初所暗示的那样)。这/etc/rsyslog.d/iptables.conf是 config 的一部分rsyslogd,而不是iptablesconfig。

&是理解语法的一部分rsyslog

有解释这里

您可以为单个选择器(或更准确地说,此类选择器行中的单个过滤器)设置多个操作。每个操作必须位于其自己的行上,并且该行必须以与号 ( &) 字符开头,并且没有过滤器。例如

*.=crit :omusrmsg:rger
& root
& /var/log/critmsgs

这三行向用户发送关键消息rger,并将root它们存储在中/var/log/critmsgs。每个选择器使用多个操作很方便,还可以提高性能。

然后~解释这里

如果执行了丢弃操作,则收到的消息将被立即丢弃。不会对其进行进一步处理。[…] 丢弃只是一个单词,stop没有其他参数:

stop

例如,

*.*   stop

丢弃所有内容(好吧,你完全不运行也可以达到同样的效果rsyslogd……)。

请注意,在旧式配置中,也可以使用波浪符号~来代替单词stop

在您的情况下,匹配的消息将被记录到文件中,然后被丢弃(不再进一步处理)。

相关内容