次のようにすべてのインターフェイスを取得してIPアドレスを関連付けるにはどうすればよいですか
[root@centso ]# ifconfig
enp3s0f0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet addr:10.5.2.10 Bcast:10.5.7.255 Mask:255.255.248.0
inet6 fe80::e611:5bff:feea:5e50 prefixlen 64 scopeid 0x20<link>
ether e4:11:5b:ea:5e:50 txqueuelen 1000 (Ethernet)
RX packets 638000416 bytes 763371981799 (710.9 GiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 16607280 bytes 9787019600 (9.1 GiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
enp3s0f1: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
ether e4:11:5b:ea:5e:52 txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
enp4s0f0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
ether e4:11:5b:ea:5e:44 txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
enp4s0f1: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
ether e4:11:5b:ea:5e:46 txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<Host>
loop txqueuelen 1 (Local Loopback)
RX packets 45015 bytes 4371658 (4.1 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 45015 bytes 4371658 (4.1 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
次のような出力が必要です。また、コマンドip link
または何かがそれを実行しますが、覚えていません。また、一部のマシンはenoX
やethX
のように異なるニックネームを持っています
enp3s0f0: 10.5.2.10
enp3s0f1:
enp4s0f0:
enp4s0f1:
私は何かを見つけたと思います、もっと賢い方法があるに違いないと確信していますが、今のところ私はすべて準備ができています。
[root@server1 ~]# ip -o -4 addr show | awk '{print $1" " $2": "$4}'
1: lo: 127.0.0.1/8
2: eno1: 192.168.100.190/24
3: eno2: 10.5.8.33/21
これを試して:
ip addr show | awk -F '[: ]+' '
/^[^ ]/ { iface=$2 } # Start of section, we memorize the interface name
$2 == "inet" { print iface ": " $3 } # IPv4 address => print the line
'
例があります:
ip address show | awk '/inet / {split($2,var,"/*"); print $7,":",var[1]}'
出力は次のようになります。
: 127.0.0.1
enp3s0f0: 10.5.2.10
enp3s0f1: .......
enp4s0f0: .......
enp4s0f1: .......
これにより、要求した形式でレポートが提供されます。
# ip -o -4 addr show | awk '{print $2": "$4}'
このコマンドは、すべてのインターフェイスとそれぞれのIPアドレスをスペースで区切って表示します
ip r|grep " src "|cut -d " " -f 3,12 | xargs