ifconfigコマンドで最初のIPアドレスをキャプチャする方法は?

ifconfigコマンドで最初のIPアドレスをキャプチャする方法は?

ifconfigコマンドで最初のIPアドレスをキャプチャする方法は?

ifconfig -a
enw178032: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 100.14.22.12  netmask 255.255.0.0  broadcast 100.14.255.255
        inet6 fe80::250:56ff:fe9c:158a  prefixlen 64  scopeid 0x20<link>
        ether 00:10:56:9c:65:8a  txqueuelen 1000  (Ethernet)
        RX packets 26846250  bytes 12068811576 (11.2 GiB)
        RX errors 0  dropped 58671  overruns 0  frame 0
        TX packets 3368855  bytes 1139160934 (1.0 GiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

予想される結果:

IP=100.14.22.12

答え1

ifconfig一部のディストリビューション(デフォルトではインストールされていないCentOSや他のディストリビューションなど)では使用されていないため、IPアドレスを取得するためにスクリプトでそれを使用しないことをお勧めします。

他のシステムでは、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」コマンドの違い

ifconfignet-toolsからのこのツールは、長い間Linuxネットワーキングスタックに完全に従うことができませんでした。また、ネットワーク構成にはまだioctlを使用していますが、これはカーネルと対話する醜く弱い方法です。

2005年頃にネットワークスタックを制御するための新しいメカニズムであるnetlinkソケットが導入されました。

iproute2全二重ネットリンクソケットメカニズムを利用し、ifconfigioctlシステムコールに依存するようにネットワークインタフェースを設定します。

答え2

Awk解決策:

ifconfig -a | awk 'NR==2{ sub(/^[^0-9]*/, "", $2); printf "IP=%s\n", $2; exit }'

出力例:

IP=10.0.2.15

答え3

ip addr | grep -v 127.0.0.1 | grep 'inet ' | \
awk {'print $2'} | awk -F "/" {'print "IP="$1'}

関連情報