Eth0のIPアドレスを環境変数($ ipなど)にできるだけ簡単に割り当てるにはどうすればよいですか?
更新:DistroはUbuntu Server 12.04 LTSです。
より短い(そして私はよりきちんと見つける)方法はhostname -i
。 ipconfig、ip、sed、awkなどの煩わしさはもうありません。
ip address show
を使用する方法です。特に、照会しているインターフェイスがifconfig
が認識できない複数のアドレスを持つ可能性がある最新のLinuxシステムでは特にそうです。
$ ip a s eth0 | awk '/inet / {print$2}'
10.13.211.83/24
192.168.17.21/16
もちろん、ネットマスクが必要ない場合は、パイプを使用して、次のようにさまざまなものにパイプします。
cut -d/ -f1
注:同じシステムで、ifconfigは以下を表示します。
$ ifconfig em1 | awk '/inet / {print $2}'
10.13.211.83
こちらもチェックしてください:
ifconfig eth0 | awk '/inet /{print $2}' | cut -f2 -d':'
これはSolarisとHP-UXでも機能します(eth0
の代わりに適切なnet devを使用してください)。
hostname -i
コマンドについては、構成済みのインターフェース(ループバックを除く)がある場合はhostname -I
を試してください。
これを試してください:
ip=$(
ifconfig eth0 |
Perl -ne 'print $1 if /inet\s.*?(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})\b/'
)
echo "$ip"
定義されたインターフェイスにIPを割り当てたいので、正確な問題には答えませんが、外部IPを取得する方法(NATの背後にある場合でも)を将来の情報としてここに記載しておくと便利だと思いました。
ip=`wget -qO- ipecho.net/plain`
ご覧のように、 hostname -i
は127.0.0.1を表示できます(NAT
はここ(archlinux)ではありません)、これは私たちが望むものではありません。
だから私は提案します:
dev=eth0
ip=$(
ip a s dev $dev |
awk '/inet /{gsub("/.*", "");print $2}'
)
echo "$ip"
または、-P
grep
のスイッチ:
ip a s dev eth0 | grep -oP 'inet\s+\K[^/]+'
私はそれが最短の解決策だと思います=)