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の最初の項目と2番目の項目を解析しようとしていることがわかります。サブコマンドとしてiptablesに戻されますmain
。