我有一个在各种不同的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)
主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”是正确的名称。您要求的是网络名称..这是一个解决问题的小脚本
使用“ip route get 8.8.8.8”找出哪个活动接口具有到互联网(或当前正在使用)的路由,输出应如下所示:
8.8.4.4 通过 10.10.1.1 dev enp0s3 src 10.10.1.118 缓存
使用 awk 打印 Interface NAME 的第 5 个文本块
]# ip 路由获取 8.8.8.8 | awk -- '{print $5}' 输出:enp0s3
使用 awk 打印接口地址的第 7 个文本块
]# ip 路由获取 8.8.8.8 | awk -- '{print $7}' 输出:10.10.1.118
归档时间: |
|
查看次数: |
26145 次 |
最近记录: |