我有一张 WiFi PCI-e 卡,它为我的 Linux 操作系统添加了两个无线接口。我正在编写一个脚本,基本上可以自动初始化和配置此 WiFi 卡。但是,我想找到一种方法来获取在加载相应的 Linux 内核模块(即此卡的驱动程序)后出现在我的系统中的无线接口的名称。
我想到了以下两个解决方案,但仍然不理想:
检查内核日志输出(
dmesg | grep "driver_name"
),但我更喜欢另一种方式,即不依赖日志文件,因为它可能会被覆盖。检查输出,
lshw -C network
但是这有点慢并且需要对输出字符串进行一些解析。
有没有更好的解决办法?
答案1
如果您知道设备将绑定到的驱动程序的名称,那么您可以搜索/sys
文件系统并获取正在使用该文件系统的网络设备列表。
如果您还不知道驱动程序的名称,您可以先使用以下命令找到它:lspci -nnk | grep -i 'network\|ethernet' -A3
。
示例 1
让我们找到驱动程序:
$ lspci -nnk | grep -i 'network\|ethernet' -A3
06:00.0 Ethernet controller [0200]: Intel Corporation 82574L Gigabit Network Connection [8086:10d3]
Subsystem: Super Micro Computer Inc 82574L Gigabit Network Connection [15d9:10d3]
Kernel driver in use: e1000e
Kernel modules: e1000e
07:00.0 Ethernet controller [0200]: Intel Corporation 82574L Gigabit Network Connection [8086:10d3]
Subsystem: Super Micro Computer Inc 82574L Gigabit Network Connection [15d9:10d3]
Kernel driver in use: e1000e
Kernel modules: e1000e
08:08.0 FireWire (IEEE 1394) [0c00]: Texas Instruments TSB43AB22A IEEE-1394a-2000 Controller (PHY/Link) [iOHCI-Lynx] [104c:8023]
请注意,这是说正在使用的内核驱动程序:e1000e。这是我的网卡使用的驱动程序。对于您的系统,请用您的驱动程序名称替换e1000e在以下示例中。
现在我们知道了正在使用的驱动程序,e1000e然后,我可以/sys
使用以下命令搜索文件系统并查找哪些网络设备正在使用该驱动程序:
$ find -L /sys/class/net -maxdepth 3 -name "uevent" -exec grep -iH "e1000e" {} \; 2> /dev/null
/sys/class/net/eth0/device/uevent:DRIVER=e1000e
/sys/class/net/eth1/device/uevent:DRIVER=e1000e
从那里,我可以用来awk
获取网络设备名称:
$ find -L /sys/class/net -maxdepth 3 -name "uevent" -exec grep -iH "e1000e" {} \; 2> /dev/null | awk -F / '{print $5}'
eth0
eth1
示例 2
作为另一台计算机上的另一个例子,我同时拥有 WIFI 和以太网控制器,每个都有不同的驱动程序。
让我们找到驱动程序:
$ lspci -nnk | grep -i 'network\|ethernet' -A3
09:00.0 Network controller [0280]: Intel Corporation Device [8086:2725] (rev 1a)
Subsystem: Intel Corporation Device [8086:0020]
Kernel driver in use: iwlwifi
Kernel modules: iwlwifi
--
0b:00.0 Ethernet controller [0200]: Intel Corporation Device [8086:15f2] (rev 03)
Subsystem: Lenovo Device [17aa:22d8]
Kernel driver in use: igc
Kernel modules: igc
WIFI 与无线上网司机:
$ find -L /sys/class/net -maxdepth 3 -name "uevent" -exec grep -iH "iwlwifi" {} \; 2> /dev/null
/sys/class/net/wlp9s0/device/uevent:DRIVER=iwlwifi
$ find -L /sys/class/net -maxdepth 3 -name "uevent" -exec grep -iH "iwlwifi" {} \; 2> /dev/null | awk -F / '{print $5}'
wlp9s0
以太网控制器伊格司机:
$ find -L /sys/class/net -maxdepth 3 -name "uevent" -exec grep -iH "igc" {} \; 2> /dev/null
/sys/class/net/enp11s0/device/uevent:DRIVER=igc
$ find -L /sys/class/net -maxdepth 3 -name "uevent" -exec grep -iH "igc" {} \; 2> /dev/null | awk -F / '{print $5}'
enp11s0