iptables
如果我在 EL7 环境下查看命令:
bash-4.1# uname -rvos
Linux 3.10.0-327.18.2.el7.x86_64 #1 SMP Thu May 12 11:03:55 UTC 2016 GNU/Linux
符号链接最终位于 sbin 目录中的 iptables-multi-1.4.7 进程中。
bash-4.1# namei /sbin/iptables
f: /sbin/iptables
d /
d sbin
l iptables -> /etc/alternatives/iptables.x86_64
d /
d etc
d alternatives
l iptables.x86_64 -> /sbin/iptables-1.4.7
d /
d sbin
l iptables-1.4.7 -> iptables-multi
l iptables-multi -> /etc/alternatives/sbin-iptables-multi.x86_64
d /
d etc
d alternatives
l sbin-iptables-multi.x86_64 -> /sbin/iptables-multi-1.4.7
d /
d sbin
- iptables-multi-1.4.7
如果我使用iptables-multi-1.4.7
与 相同的参数运行iptables
,则会出现未知的子命令错误。
bash-4.1# iptables --list INPUT 1
KUBE-FIREWALL all -- anywhere anywhere
bash-4.1# iptables-multi-1.4.7 --list INPUT 1
iptables multi-purpose version: unknown subcommand "--list"
即使它们是相同的二进制文件(彼此符号链接),相同的命令行参数也会生成不同的输出。正确的调用方式是什么iptables-multi-1.4.7
?
答案1
bash-4.1# iptables-multi-1.4.7 main --list INPUT 1
KUBE-FIREWALL all -- anywhere anywhere
绊倒之后源代码 iptables-multi 的我看到它尝试解析 argv 中的第一个和第二个条目。作为子命令传递main
回 iptables。