Ubuntu
用於檢索乙太網網路介面名稱的 Bash 腳本
在 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
,loopback
和wl
(無線) 之類的介面,那麼下面的方法應該可以解決問題。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