我想显示 IP 地址,如下所示
lo : 127.0.0.1
eth0 : 192.168.5.123
eth1 : 192.172.0.212
wlan0 : 10.1.0.124
我可以通过 打印所有 IP 地址ifconfig | awk '/inet addr/{print substr($2,6)}'
。但它只是打印 IP。每个系统都有自己的接口名称和地址。所以我的脚本必须显示它们与 IP 地址相关的接口。
答案1
以下将做你想做的事:
$ ip addr | awk '
/^[0-9]+:/ {
sub(/:/,"",$2); iface=$2 }
/^[[:space:]]*inet / {
split($2, a, "/")
print iface" : "a[1]
}'
lo : 127.0.0.1
br0 : 10.1.10.12
答案2
ip -o addr | awk '{split($4, a, "/"); print $2" : "a[1]}'
或者,如果您对本地地址不感兴趣:
ip -o addr show scope global | awk '{split($4, a, "/"); print $2" : "a[1]}'
答案3
尝试这个:
ip -o a show | cut -d ' ' -f 2,7
127.0.0.1/8
瞧::1/128
enp0s31f6 10.35.4.166/23
enp0s31f6 2620:52:0:2304:367:c01c:fe74:22ed/64
enp0s31f6 fe80::9a54:7adb:839e:fdb6/64
wlp58s0 10.201.132.132/22
wlp58s0 fe80::fa34:41ff:feb3:a06/64
virbr0 192.168.122.1/24
docker0 172.17.0.1/16
答案4
仅对于 IPv4 地址,使用
ip -o addr | awk '{split($4, a, "/"); print $2" : "a[1]}' | grep -v '::'
我想出这个是因为接受的答案不方便作为别名粘贴到 .bashrc 文件中。
每次输入这么长的命令是很费力的。
所以我在 bashrc 文件中创建了一个别名
sudo nano ~/.bashrc
将此行添加到文件末尾
alias myip="ip -o addr | awk '{split(\$4, a, \"/\"); print \$2\" : \"a[1]}' | grep -v '::'"
使用 Ctrl+O 保存,然后使用 Ctrl+X 退出
source ~/.bashrc
您可能必须为上述命令添加前缀 sudo
现在你可以在终端中输入命令“myip”,如下所示