[英]Shell - Get interface name of IP address
有没有办法在 Linux (GNU) 上查询接口名称和 IP 地址? 反之亦然,这似乎很简单,但我完全需要它,因为我只有一个 IP 地址作为输入,该地址分配给我系统的许多接口之一。 如何查出输入的IP地址属于哪个接口?
想象一下你有一个这样的脚本:
ips=($(hostname -I))
PS3='Please select a network the master should listen onto: '
ips=($(hostname -I))
ips=("${ips[@]}" 'Quit')
select ip in "${ips[@]}"; do
case $ip in
*[0-9]*)
break
;;
Quit) echo quit
break;;
*) echo Invalid option >&2;;
esac
done
echo "IP: $ip has been choosen for enrollment"
而现在想知道选择的ip地址的接口名称
提前致谢
您可以使用例如awk
来解析ip addr
的 output 以找到具有特定 Z957B527B527BCZE9 地址的接口名称。 例如:
ip addr | awk -vtarget_addr=192.168.1.200 '
/^[0-9]+/ {
iface=substr($2, 0, length($2)-1)
}
$1 == "inet" {
split($2, addr, "/")
if (addr[1] == target_addr) {
print iface
}
}
'
这将查找地址为 192.168.1.200 的接口。 在我的系统上,这将打印:
vlan100
因为:
$ ip addr show vlan100
5: vlan100: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default qlen 1000
link/ether 56:ba:dc:0f:73:69 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.200/32 brd 192.168.1.200 scope global noprefixroute vlan100
valid_lft forever preferred_lft forever
inet 192.168.1.169/24 brd 192.168.1.255 scope global dynamic noprefixroute vlan100
valid_lft 47960sec preferred_lft 47960sec
inet6 fe80::acb6:be79:224e:3062/64 scope link noprefixroute
valid_lft forever preferred_lft forever
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.