この回答 およびWebの他の多くのチュートリアルによれば、ifconfig
には多くの魅力的で有用な情報がリストされています。そして、それが私のネットマスクのようなものを見つける標準的な方法のようです。
しかし、スクリプトを作成するには、eth0
のネットマスク自体のみが必要です。 man ifconfig
はこの質問に対して役に立たなかった。
VPSを使用しているため、ネットマスクを制御できません。設定した内容を調べる必要があります。
(注:私はeth0
が必要ですが、一部のマシンにはeth1
またはens3
と言う別のマシンがあり、これも有用です。)
inet 111.222.333.444 netmask 255.255.255.0 broadcast 111.222.555.666
netmask 255.255.255.0
then running sed "s/netmask //"
because stuff can change—unless an expert says soおそらくこれが必要なものです(Ubuntu 16.04では動作しません)。
#!/bin/bash
IFACE='eth0'
ifconfig | grep -A 7 "$IFACE" | sed -nr 's/^.*netmask\s([0-9\.]+)\s\sbroadcast.*$/\1/p'
最初の行では、ネットワークインターフェースの名前が変数$IFACE
の値として割り当てられます-これはスクリプト作成に役立ちます。それ以外の場合はgrep -A 7 'eth0'
を使用できます。
2行目では、コマンドifconfig
の出力がgrep
コマンドにパイプされます。オプション-A 7
は、一致した文字列/正規表現を持つ行の後に次の7行を出力します。そのコマンドの出力は、sed
にパイプされます。
sed
コマンド内:
正規表現^.*netmask\s(.*)\s\sbroadcast.*$
は、最初の^
から最後の$
までの行全体に一致します。これには、いくつかの文字.*
と「キーワード」が含まれますnetmask\space
、[0-9\.]+
=および\s\sbroadcast
正確な順序で。
その行は、最初のキャプチャグループ[s/old/new/
-> (.*)
]のコンテンツで置き換えられます(\1
)。ここで、正規表現[0-9\.]+
は、数字とドットで構成される文字列に一致します。
オプション-r
(または-E
)は、拡張正規表現を有効にします。この場合、丸括弧を自由に使用できます。
フラグp
と組み合わせたオプション-n
は、一致した行のみを出力し、sed
の残りの出力を保持します。
すべてのネットワークインターフェイスの名前を解析し、それぞれのインターフェイスに対して上記のコマンドと同様の処理を行う拡張例を次に示します。
for IFACE in $(ifconfig | sed -nr 's/(^[a-z0-9]+):.*/\1/p'); do \
echo -en "${IFACE}:\t"; ifconfig | \
grep -A 7 "$IFACE" | \
sed 's/ broadcast.*$//' | \
sed -rn 's/^.*netmask (.*)$/\1/p'; \
done
Ubuntu 18.04の仮想マシンで実行された上記コマンドのサンプル出力:
$ for IFACE in $(ifconfig | sed -nr 's/(^[a-z0-9]+):.*/\1/p'); do echo -en "${IFACE}:\t"; ifconfig | grep -A 7 "$IFACE" | sed 's/..broadcast.*$//' | sed -rn 's/^.*netmask (.*)$/\1/p'; done
ens33: 255.255.255.0
lo: 255.0.0.0