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

use*_*891 2 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
Run Code Online (Sandbox Code Playgroud)

我拥有的所有信息都是表id(12322),我需要删除查找该表的所有规则.

我尝试了这些命令:ip rule del table 12322并且ip rule del lookup 12322,但是两个命令总是删除第一个规则,而不是第一个查找12322的规则,我的意思是第一个规则from all lookup local.如果我运行任何这些命令5次,我最终没有规则.

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

mla*_*ich 8

您可以使用"从0/0到0/0"删除,但这将只删除一个规则.要删除它们,请使用以下内容:

while ip rule delete from 0/0 to 0/0 table 12322 2>/dev/null; do true; done
Run Code Online (Sandbox Code Playgroud)

这将删除所有规则,直到没有更多.

  • 上面的单行程对我来说没有"从0/0到0/0" (3认同)

MrP*_*ead 5

ip rule del prio {rule #}
Run Code Online (Sandbox Code Playgroud)

简单的。有用。这是根据库兹涅佐夫原始 iproute2 指令的“官方”方法。

另请注意 iproute2 手册:

警告:使用这些命令对 RPDB 所做的更改不会立即生效。假设脚本完成一批更新后,它会使用 ip RoutelushCache 刷新路由缓存。

要删除所有规则,您可以使用以下命令。

ip route del
Run Code Online (Sandbox Code Playgroud)

如果您通过 SSH 连接到服务器,这样做会断开您的连接并将您锁定。


小智 3

下面的方法有效吗?

ip rule delete from 0/0 to 0/0 table 12322
Run Code Online (Sandbox Code Playgroud)