我必须从为端口提供的iptables中删除一些规则。我正在尝试使用行号删除规则。因此一个端口可以有多个规则,因此可以有多个行号。如何使用xargs在单个命令中实现这一点?
这是我试过的(端口号69):
iptables-l forward——行号grep“dpt:69”cut-d''-f1 xargs iptables-d forward
如果只有一条规则,这将起作用。但会在多个行号上抛出错误“错误参数”。

最佳答案

默认情况下,xargs将假定命令可以接受一个命令上的多个输入。例如,echo file1 file2 file3 | xargs rm只发出一个rm命令来删除3个文件,这样就可以了。
如果命令有限制,则需要告诉xargs

xargs -n1 iptables -D FORWARD

…这意味着“每个命令只能有一个参数”。如果您使用-i在某个特定的地方插入参数,那么这个参数也会起作用。
顺便说一句,如果你把这个放在脚本中,那么你也应该考虑添加--no-run-if-empty,否则即使grep什么也找不到,它仍然会运行这个命令。

关于linux - 如何使用xargs删除iptables规则?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33078501/

10-15 05:16