如何找出分配给 eth0 的 IP 地址并仅显示 IP
对于 shell 脚本和其他原因,您可能只需要 IP 地址。您可以使用 ifconfig 命令或ip 命令与grep 命令和其他过滤器来找出分配给 eth0 的 IP 地址并将其显示在屏幕上。
在 Linux 中查找网络接口名称
使用ip 命令或 nmcli 命令。例如:
这是我从 ip 命令输出中看到的内容,我的接口名称是 lo、eth0 和 lxdbr0:
$ ip link show
$ nmcli device status
$ nmcli connection show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9001 qdisc mq state UP group default qlen 1000 link/ether 0a:b5:af:91:8f:1d brd ff:ff:ff:ff:ff:ff inet 172.26.13.170/20 brd 172.26.15.255 scope global dynamic eth0 valid_lft 2111sec preferred_lft 2111sec inet6 fe80::8b5:afff:fe91:8f1d/64 scope link valid_lft forever preferred_lft forever 3: lxdbr0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000 link/ether 00:16:3e:55:12:fd brd ff:ff:ff:ff:ff:ff inet 10.147.164.1/24 scope global lxdbr0 valid_lft forever preferred_lft forever
使用 ifconfig 命令查找分配给 eth0 的 ip 地址
警告:您可能会看到“bash: ifconfig: command not found”错误,因为大多数现代 Linux 发行版都删除了 ifconfig 而改用ip 命令。请参阅下文了解如何使用 ip 命令获取 IP 地址。
/sbin/ifconfig 命令的默认输出是所有接口,如下所示:示例输出:
$ /sbin/ifconfig
$ /usr/sbin/ifconfig
lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:69527 errors:0 dropped:0 overruns:0 frame:0 TX packets:69527 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:41559546 (39.6 MiB) TX bytes:41559546 (39.6 MiB) eth0 Link encap:Ethernet HWaddr 00:17:9A:0A:F6:44 inet addr:192.168.2.1 Bcast:192.168.1.255 Mask:255.255.255.0 inet6 addr: fe80::217:9aff:fe0a:f644/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:227614 errors:0 dropped:0 overruns:0 frame:0 TX packets:60421 errors:0 dropped:0 overruns:0 carrier:0 collisions:272 txqueuelen:1000 RX bytes:69661583 (66.4 MiB) TX bytes:10361043 (9.8 MiB) Interrupt:17 ra0 Link encap:Ethernet HWaddr 00:50:56:C0:00:01 inet addr:192.168.1.2 Bcast:192.168.2.255 Mask:255.255.255.0 inet6 addr: fe80::250:56ff:fec0:1/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:1024 errors:0 dropped:0 overruns:0 frame:0 TX packets:1320 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)
现在您只需选择 eth0,如下所示:
现在您只需要 IP 地址,使用 grep 来获取 IP:
以下是信息:
$ /sbin/ifconfig eth0
$ /usr/sbin/ifconfig eth0
$ /sbin/ifconfig eth0| grep 'inet addr:'
$ /usr/sbin/ifconfig eth0| grep 'inet addr:'
inet addr:192.168.2.1 Bcast:192.168.2.255 Mask:255.255.255.0
使用 cut 命令获取 IP 地址:
$ /sbin/ifconfig eth0 | grep 'inet addr:' | cut -d: -f2
现在我看到:
192.168.2.1 Bcast
最后,用 awk 删除 Bcast,如下所示:
$ /sbin/ifconfig eth0 | grep 'inet addr:' | cut -d: -f2 | awk '{ print $1}'
Bingo:
192.168.2.1
使用 hostname 和 ip 命令查找分配给 eth0 的 IP 地址
使用 hostname 命令显示主机名的网络地址的语法如下:
$ hostname -i
我们还可以使用以下选项来查找主机的所有网络 IP 地址。此选项枚举所有网络接口上配置的所有地址:
$ hostname -I
这是我看到的:
192.168.2.25
当然,我们也可以与br0 接口的egrep 命令一起使用如下组合:
ifconfig br0 | grep -E -o 'inet [0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' | cut -d' ' -f2 # get an IP and store to bash variable # my_br_ip=$(ifconfig br0 | grep -E -o 'inet [0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' | cut -d' ' -f2) # display it # echo "$my_br_ip"
使用 ip 命令获取分配给 eth0 的 IP 地址并显示 IP 地址
如您所知,ifconfig 已被弃用,取而代之的是 iproute2 和ip 命令。因此,我们的最终解决方案建议仅使用ip 命令,而不是 ifconfig:
# eth0 IPv4 # ip a s eth0 | grep -E -o 'inet [0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' | cut -d' ' -f2 # br0 IPv4 # ip a s br0 | grep -E -o 'inet [0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' | cut -d' ' -f2
获取 IP 地址的最终解决方案取决于Bash 的参数替换功能:
# Step 1. Grab the IP for br0 interface using the egrep and store to the value # value="$(ip a s br0 | grep -E -o 'inet [0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}')" # Step 2. Remove inet part from right side echo "${value##inet}"
点击放大图片
Linux 显示接口 ip 地址
我将使用以下ip 命令:
$ ip -br addr show
它仅以表格格式打印基本信息以提高可读性。
lo UNKNOWN 127.0.0.1/8 ::1/128 enp0s31f6 UP wlp82s0 DOWN br0 UP 192.168.2.25/24 virbr0 DOWN 192.168.122.1/24 virbr0-nic DOWN lxdbr0 UP 10.83.200.1/24 fd42:87d0:ec52:7d50::1/64 fe80::216:3eff:fedd:4a6b/64 vethd48ca772@if15 UP mum-wg0 UNKNOWN 10.8.0.2/24 fd9d:bc11:4021::2/48 fe80::5dfb:6ed3:c11e:f614/64
该-br选项当前仅受 ip addr show 和 ip link show 命令支持,用于列出所有接口:
$ ip -br link show
总结
本文介绍了在 Linux 上使用 ifconfig 命令获取接口(例如 br0 或 eth0)的 IP 地址是多么简单和直接。但是,ifconfig 已被弃用,并被一种称为 ip 实用程序的现代替代品所取代。因此,我建议使用ip 命令而不是 hostname 和 ifconfig。了解如何在 shell 脚本中读取 UNIX/Linux 系统 IP 地址。使用 help 命令或 man 命令阅读以下手册页:
$ man ip
$ man ifconfig