如何查找网络接口名称

art*_*bot 6 linux ip bash sed

我有一个在各种不同的Ubuntu Linux机器上运行的bash脚本.它的工作是找出localhost的LAN IPv4地址.

该脚本正在使用

ip addr show eth0 | sed -n '/inet /{s/^.*inet \([0-9.]\+\).*$/\1/;p}'
Run Code Online (Sandbox Code Playgroud)

这很好,但有些机器出于某种原因使用eth1而不是eth0.我希望能够发现LAN iface名称,所以我可以在这里替换它而不是eth0.

当然,如果你能想出一个不同的oneliner做同样的事情,那一切都很好.

gat*_*ado 13

不确定这是否有帮助,但似乎ip route get会显示它用于连接远程主机的接口.

ubuntu@ip-10-40-24-21:/nail/srv/elasticsearch$ ip route get 8.8.8.8
8.8.8.8 via <gateway address> dev eth0  src <eth0 IP Address>
Run Code Online (Sandbox Code Playgroud)

当然你可以在shell脚本中使用类似的东西自动化

ip route get 8.8.8.8 | awk '{ print $NF; exit }'
Run Code Online (Sandbox Code Playgroud)


use*_*471 8

主NIC通常具有默认路由.所以:

ip -o -4 route show to default
Run Code Online (Sandbox Code Playgroud)

网卡:

ip -o -4 route show to default | awk '{print $5}'
Run Code Online (Sandbox Code Playgroud)

网关:

ip -o -4 route show to default | awk '{print $3}'
Run Code Online (Sandbox Code Playgroud)

与ifconfig不同,ip具有一致且可解析的输出.它只适用于Linux; 它不适用于其他Unixen.


小智 6

最近,systemd/udev 已经开始自动为所有本地以太网、WLAN 和 WWAN 接口分配接口名称,这是我们都习惯的。这与传统的接口命名方案(“eth0”、“eth1”、“wlan0”等)不同。现在我们必须先检查本地接口名称是什么,然后才能使用它,而之前我们是这样的非常准确地猜测“eth0”是正确的名称。您要求的是网络名称..这是一个解决问题的小脚本

  1. 使用“ip route get 8.8.8.8”找出哪个活动接口具有到互联网(或当前正在使用)的路由,输出应如下所示:

    8.8.4.4 通过 10.10.1.1 dev enp0s3 src 10.10.1.118 缓存

  2. 使用 awk 打印 Interface NAME 的第 5 个文本块

    ]# ip 路由获取 8.8.8.8 | awk -- '{print $5}' 输出:enp0s3

  3. 使用 awk 打印接口地址的第 7 个文本块

    ]# ip 路由获取 8.8.8.8 | awk -- '{print $7}' 输出:10.10.1.118