Это не имеет ничего общего ни с 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
В вашем случае соответствующие сообщения будут записаны в файл, а затем удалены (не обрабатывается дальше).