Почему `& ~` означает «отбросить сообщения, которые были сопоставлены в предыдущей строке»?

622
scrapy

В веб-странице журнала iptables

Создайте /etc/rsyslog.d/iptables.confсо следующим содержанием:

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

Вторая строка означает отбрасывать сообщения, которые были сопоставлены в предыдущей строке.
Почему & ~в конфигурации iptables означает «отбросить сообщения, которые были сопоставлены в предыдущей строке»?

0

1 ответ на вопрос

1
Kamil Maciorowski

Это не имеет ничего общего bashни с iptables(как изначально предлагали ваши теги вопроса). Это /etc/rsyslog.d/iptables.confчасть rsyslogdконфигурации, а не iptablesконфигурации.

&является частью синтаксиса, который rsyslogпонимает.

Это объясняется здесь :

Вы можете иметь несколько действий для одного селектора (или, точнее, одного фильтра такой линии селектора). Каждое действие должно быть в отдельной строке, и строка должна начинаться с &символа амперсанда ( ) и не иметь фильтров. Примером будет

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

Эти три линий отправка критических сообщений пользователя rgerи, rootа также сохранять их в /var/log/critmsgs. Использование нескольких действий для каждого селектора удобно, а также повышает производительность.

Тогда ~это объясняется здесь :

Если действие отмены выполнено, полученное сообщение немедленно отбрасывается. Никакой дальнейшей обработки не происходит. […] Discard - это просто слово stopбез дополнительных параметров:

stop 

Например,

*.* stop 

отбрасывает все (хорошо, вы можете достичь того же самого, вообще не бегая rsyslogd…).

Обратите внимание, что в устаревшей конфигурации ~вместо слова можно использовать символ тильды stop.

В вашем случае соответствующие сообщения будут записаны в файл, а затем удалены (не обрабатывается дальше).

Похожие вопросы