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

scr*_*apy 4 syslog

在网页 iptables 日志中

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

:msg, startswith, "iptables: " -/var/log/iptables.log
& ~
Run Code Online (Sandbox Code Playgroud)

第二行表示丢弃前一行中匹配的消息。
为什么& ~在 iptables 配置中意味着“丢弃在前一行中匹配的消息”?

Kam*_*ski 5

它与bash也无关iptables(正如您最初建议的问题标签)。这/etc/rsyslog.d/iptables.confrsyslogd配置的一部分,而不是iptables配置。

&rsyslog理解的语法的一部分。

在这里解释:

您可以为单个选择器(或更准确地说是此类选择器行的单个过滤器)执行多个操作。每个操作都必须在自己的行上,并且该行必须以与号 ( &) 字符开头并且没有过滤器。一个例子是

*.=crit :omusrmsg:rger
& root
& /var/log/critmsgs
Run Code Online (Sandbox Code Playgroud)

这三行发送重要消息给用户rger,并root和他们也存储/var/log/critmsgs。每个选择器使用多个操作很方便,而且还提供了性能优势。

然后在这里~解释:

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

stop
Run Code Online (Sandbox Code Playgroud)

例如,

*.*   stop
Run Code Online (Sandbox Code Playgroud)

丢弃所有内容(好吧,您可以通过根本不运行来实现相同的效果rsyslogd……)。

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

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