我们的邮件队列中有很多来自某个地址的邮件。我想删除它们。我找到了按主题行删除的方法,但我想按发件人地址搜索,这似乎要棘手得多。(注意:这些主要是外发邮件。)
通过谷歌搜索,我找到了这个命令如何锻造,但没有解释它的作用。
postqueue -p | tail -n +2 | awk 'BEGIN { RS = "" } / spammer@example\.net/ { print $1 }' | tr -d '*!' | postsuper -d -
我尝试使用 mailqueuemng,但没有取得太大进展(首先,它没有 --help)。
答案1
可以逐步分析管道以了解其功能。尝试按顺序运行每个命令,直到您理解所有命令:
postqueue -p
打印队列
postqueue -p | tail -n +2
删除前几行
postqueue -p | tail -n +2 | awk 'BEGIN { RS = "" } / spammer@example\.net/ { print $1 }'
搜索任何带有[电子邮件保护];打印这些行的第一个字段。
postqueue -p | tail -n +2 | awk 'BEGIN { RS = "" } / spammer@example\.net/ { print $1 }' | tr -d '*!'
摆脱任何*!
这将输出一堆队列 ID。
postqueue -p | tail -n +2 | awk 'BEGIN { RS = "" } / spammer@example\.net/ { print $1 }' | tr -d '*!' | postsuper -d -
最后的命令告诉 postfix 删除这些队列 ID。
postqueue
阅读、tail
、tr
和的手册页postsuper
。Awk 更复杂,它是一种自成一派的小语言。您需要的不仅仅是手册页才能理解它的复杂性,尽管根据我的经验,99% 的 awk 用法与该特定的单行代码非常相似。