繁体   English   中英

Shell - 获取 IP 地址的接口名称

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM