ip rule:删除表中的所有规则

时间:2014-11-12 19:37:09

标签: linux bash routing routes

我正在使用一个使用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 12322ip rule del lookup 12322,但这两个命令始终会删除第一个规则,而不是第一个查找12322的规则,我的意思是第一个规则from all lookup local。如果我运行任何这些命令5次,我最终没有规则。

如何在一个命令中删除lookup 12322的所有规则?

4 个答案:

答案 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的东西,似乎工作正常。