Ip

如何在 Linux 中找到網路介面的主人

  • July 25, 2018

我需要從 bash 腳本中讀取網路介面的主控。

比如我有這兩個介面…

$ ip link show tap0
4: tap0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop master br0 state DOWN mode DEFAULT group default qlen 1000
   link/ether c6:3f:96:13:02:25 brd ff:ff:ff:ff:ff:ff
$ ip link show br0
3: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default qlen 1000
   link/ether 30:9c:23:75:ad:b1 brd ff:ff:ff:ff:ff:ff

給定介面的名稱,我需要找到該介面的主控,所以tap0->"br0"br0->""

我可以解析ip link show…的輸出

ip link show tap0 | head -n1 | sed 's/.*master \([^ ]*\).*/\1/' | grep -v " "

哪個輸出br0(如果我用tap0沒有主機的設備替換,或者什麼都沒有)

但我更喜歡一種更強大的方式來閱讀這些資訊。是否有某種 procfs 風格的方式來閱讀這個?或者一個可以只輸出介面主控的命令?

您可以通過執行以下操作編寫一個收集此資訊的腳本(這可能是什麼ipifconfig做什麼)

  • /sys/class/net
  • sysfs 文件系統中的所有網路適配器都有符號連結。對應於物理硬體的符號連結到../../devices/pciXXXX:XX/...,其他符號連結到../../devices/virtual
  • 如果您cd訪問其中一個虛擬介面,則會有一個master符號連結指向該介面的主介面。如果沒有主人,這可能就不存在了。

引用自:https://unix.stackexchange.com/questions/458306