ifconfig
の使用は避けたほうがよいでしょう 一部のディストリビューションでは推奨されていないため、スクリプトで IP アドレスを取得します (たとえば、CentOS などでは、デフォルトでインストールしないでください)。
他のシステムでは、ifconfig の出力はディストリビューションのリリースによって異なります (例:ifconfig
の出力/間隔/フィールド たとえば、Debian 8 と Debian 9 では異なります)。
ip
で IP アドレスを取得する場合 、あなたが尋ねているのと同様の方法で:
ip addr | awk ' !/127.0.0.1/ && /inet/ { gsub(/\/.*/, "", $2); print "IP="$2 } '
またはさらに良いことに:
$ ip -o -4 address show | awk ' NR==2 { gsub(/\/.*/, "", $4); print $4 } '
192.168.1.249
または、あなたが尋ねるように "IP="
#!/bin/bash
echo -n "IP="
ip -o -4 address show | awk ' NR==2 { gsub(/\/.*/, "", $4); print $4 } '
@Roman からのアイデアを恥知らずに適応
$ ip -o -4 address show | awk ' NR==2 { gsub(/\/.*/, "", $4); print "IP="$4 } '
IP=192.168.1.249
通常の出力:
$ ip -o -4 address show
1: lo inet 127.0.0.1/8 scope host lo\ valid_lft forever preferred_lft forever
2: eth0 inet 192.168.1.249/24 brd 192.168.1.255 scope global eth0\ valid_lft forever preferred_lft forever
man ip
から :
-o、-oneline
改行を「\」文字に置き換えて、各レコードを 1 行に出力します。これは、wc(1) でレコードをカウントしたり、出力を grep(1) したい場合に便利です。
ifconfig
の理由の一例をご覧ください はお勧めしません:BBB:`bbb-conf --check` で IP アドレスが `inet` として表示される - ifconfig の問題
ifconfig
の理由を理解するため 「ifconfig」コマンドと「ip」コマンドの違いを参照してください
ifconfig
長い間、Linux ネットワーク スタックに完全に追いつくことができなかった net-tools からのものです。また、ネットワーク構成には依然として ioctl を使用しますが、これはカーネルと対話する方法としては醜く、あまり強力ではありません。
2005 年頃、ネットワーク スタックを制御するための新しいメカニズムが導入されました - netlink ソケット。
ネットワーク インターフェイス iproute2
を構成するには ifconfig
の間、その全二重ネットリンク ソケット メカニズムを利用します。 anioctl システムコールに依存しています。
Awk
解決策:
ifconfig -a | awk 'NR==2{ sub(/^[^0-9]*/, "", $2); printf "IP=%s\n", $2; exit }'
出力例:
IP=10.0.2.15