Ubuntu

用於檢索乙太網網路介面名稱的 Bash 腳本

  • October 22, 2021

在 Ubuntu 16.04 中,我編寫了一個腳本來根據某些參數動態配置有線乙太網介面的 IP 地址。現在的問題是,在我的腳本中,我假設名稱是 eth0,但這並不總是正確的.. 假設我只有一個有線網路介面(不需要插入)但我也可以有一個無線介面,我怎麼能檢索它的名字(只是有線的)?

ifconfig命令我得到:

enp7s0    Link encap:Ethernet  HWaddr fc:3f:db:a2:6d:46  
         inet addr:192.168.0.101  Bcast:192.168.0.255  Mask:255.255.255.0
         inet6 addr: fe80::149f:3103:af2f:1ec5/64 Scope:Link
         UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
         RX packets:6784 errors:0 dropped:0 overruns:0 frame:0
         TX packets:7493 errors:1 dropped:0 overruns:0 carrier:0
         collisions:0 txqueuelen:1000 
         RX bytes:4565079 (4.5 MB)  TX bytes:827825 (827.8 KB)

lo        Link encap:Local Loopback  
         inet addr:127.0.0.1  Mask:255.0.0.0
         inet6 addr: ::1/128 Scope:Host
         UP LOOPBACK RUNNING  MTU:65536  Metric:1
         RX packets:8037 errors:0 dropped:0 overruns:0 frame:0
         TX packets:8037 errors:0 dropped:0 overruns:0 carrier:0
         collisions:0 txqueuelen:1 
         RX bytes:2261250 (2.2 MB)  TX bytes:2261250 (2.2 MB)

wlp19s0   Link encap:Ethernet  HWaddr c8:ff:28:93:26:32  
         UP BROADCAST MULTICAST  MTU:1500  Metric:1
         RX packets:180463 errors:0 dropped:0 overruns:0 frame:0
         TX packets:121275 errors:0 dropped:0 overruns:0 carrier:0
         collisions:0 txqueuelen:1000 
         RX bytes:229823414 (229.8 MB)  TX bytes:15675806 (15.6 MB)

我想要的是:

enp7s0

如果您想排除vir,loopbackwl(無線) 之類的介面,那麼下面的方法應該可以解決問題。

ip link | awk -F: '$0 !~ "lo|vir|wl|^[^0-9]"{print $2;getline}'

這裡我們使用冒號作為分隔符,-F:然後使用正則表達式檢查該行$0是否與某個字元串不匹配。

因為所有介面都會顯示在 下/sys/class/,例如/sys/class/net/列出所有網路介面,

可以直接使用這個直接搜尋並通過一個簡單的關鍵字返回確切的介面名稱,例如:

ls /sys/class/net | grep enp

引用自:https://serverfault.com/questions/842964