我正在使用一个使用de ip rule...
命令添加和删除一些规则的bash脚本。但是我在移除它们时遇到了问题。例如,ip rule show
输出如下所示:
0: from all lookup local
32764: from all fwmark 0x3022 lookup 12322
32765: from 10.10.10.1 lookup 12322
32766: from all lookup main
32767: from all lookup default
我拥有的所有信息都是表ID(12322),我需要删除查找该表的所有规则。
我尝试了这些命令:ip rule del table 12322
和ip rule del lookup 12322
,但这两个命令始终会删除第一个规则,而不是第一个查找12322的规则,我的意思是第一个规则from all lookup local
。如果我运行任何这些命令5次,我最终没有规则。
如何在一个命令中删除lookup 12322
的所有规则?
答案 0 :(得分:8)
您可以使用"从0/0删除0/0和#34;但这只会删除一条规则。要删除它们,请使用以下内容:
while ip rule delete from 0/0 to 0/0 table 12322 2>/dev/null; do true; done
这将删除所有规则,直到不再有。
答案 1 :(得分:3)
以下是否有效?
ip rule delete from 0/0 to 0/0 table 12322
答案 2 :(得分:1)
ip rule del prio {rule #}
简单。有用。而且这是"官方"根据Kuznetsov的原始iproute2指令的方法。
另请参阅iproute2手册:
警告:使用这些命令对RPDB所做的更改不会变为活动状态 立即。假设在脚本完成一批更新后,它就会出现 ushes 使用ip route flush cache的路由缓存。
要删除所有规则,您可以使用以下内容。
ip route del
如果您通过SSH连接到服务器,这样做会丢弃您的连接并将您锁定。
答案 3 :(得分:0)
问题似乎是iproute上的一个错误:https://groups.google.com/forum/#!msg/linux.debian.bugs.dist/wPaWWfa3K0Q/lCIOfpxsFgAJ
我现在使用类似ip rule show | grep "regex" | xargs -r -L1 ip rule del
的东西,似乎工作正常。