次のコマンドを使用して、特定のインターフェイスを信頼できるゾーンとして追加しました。
firewall-cmd --zone=trusted --change-interface=eth0
ここでは、複数のインターフェイス(例:eth0、eth1、bond0、bond1)があり、bashスクリプトで書かれた上記のコマンドを実行して、すべてのインターフェイスを一度追加したいとします。
上記のコマンドを一度実行してすべてのインターフェイスを追加する構文とコマンドは何ですか?
答え1
これにより、すべてのデバイス名が取得され、各インターフェイスのコマンド実行が続行されます。
for i in $( ifconfig -a | sed 's/[ \t].*//;/^\(lo\|\)$/d' ); do
firewall-cmd --zone=trusted --change-interface=$i
echo "Added $i to trusted\n"
done
答え2
このコマンドを使用するLinuxシステムip
(しかしバリアントではありません)を使用すると仮定するbusybox
と、おそらく 。addr
ip -j addr
この結果に基づいて、JSONプロセッサを使用してjq
インターフェイス名を抽出して評価できるシェルコードを生成できます。
eval "$(
ip -j addr |
jq -r 'map(
["firewall-cmd", "--zone=trusted", "--change-interface=" + .ifname],
["printf", "added %s to trusted\\n", .ifname] | @sh )[]'
)"
私が持っているUbuntu仮想マシンで次のコマンドを評価します。
'firewall-cmd' '--zone=trusted' '--change-interface=lo'
'printf' 'added %s to trusted\n' 'lo'
'firewall-cmd' '--zone=trusted' '--change-interface=enp0s3'
'printf' 'added %s to trusted\n' 'enp0s3'
'firewall-cmd' '--zone=trusted' '--change-interface=enp0s8'
'printf' 'added %s to trusted\n' 'enp0s8'
'firewall-cmd' '--zone=trusted' '--change-interface=docker0'
'printf' 'added %s to trusted\n' 'docker0'
あるいは、インターフェイス名だけを繰り返すより伝統的なシェルループを作成することもできます。
ip -j addr | jq -r 'map(.ifname)[]' |
while IFS= read -r ifn; do
firewall-cmd --zone=trusted --change-interface="$ifn"
printf 'added %s to trusted\n' "$ifn"
done
答え3
これにより、以前の回答で複雑で説明されていない sed 構文を回避できます。
devlist=`netstat -i |cut -f1 -d' '`
for dev in ${devlist}; do
echo "Adding $dev to trusted"
firewall-cmd --zone=trusted --change-interface=$dev
done