Answers:
在Linux上,您具有iw
(显示/操作无线设备及其配置),并且与dev
命令一起使用时:
Commands:
dev
List all network interfaces for wireless hardware.
那是
iw dev
你会得到类似的东西:
phy#0
Interface wlan0
ifindex 3
wdev 0x1
addr 00:12:32:e4:18:24
type managed
phy#1
Interface wlan1
ifindex 4
wdev 0x2
addr 00:12:22:c6:b2:0a
type managed
如果只想提取接口名称,则可以随时处理输出,例如
iw dev | awk '$1=="Interface"{print $2}'
只需记住帮助页面即可清楚地指出:
Do NOT screenscrape this tool, we don't consider its output stable.
至少在Ubuntu上,该/proc/net/wireless
文件包含有关Wi-Fi接口的详细信息。对我来说输出如下:
$ cat /proc/net/wireless
Inter-| sta-| Quality | Discarded packets | Missed | WE
face | tus | link level noise | nwid crypt frag retry misc | beacon | 22
wlp5s0: 0000 36. -74. -256 0 0 0 16 33004 0
有点混乱,但是设备名称在那里。
仅获取接口名称:
cat /proc/net/wireless | perl -ne '/(\w+):/ && print $1'
该perl
代码在冒号之前打印单词字符的字符串。
如果您在/ sys上挂载了sysfs,则可以使用以下命令:
# find /sys/class/net -follow -maxdepth 2 -name wireless | cut -d / -f 5
wlan0
# find /sys/class/net -follow -maxdepth 2 -name phy80211 | cut -d / -f 5
wlan0
或者,如果没有find
:
for dev in `ls /sys/class/net`; do
if [ -d "/sys/class/net/$dev/wireless" ]; then echo $dev; fi;
done
第一查找所有设备在/sys/class/net
同一个wireless
目录中(其可以是多只的WiFi设备)和其是802.11兼容的第二设备的发现
在内核4.4上测试
基于Josh的答案,我将使用Shell Glob来识别内部/sys/class/net
带有wireless
目录的目录,并awk
获取设备名称:
# find the directories
$ printf '%s\n' /sys/class/net/*/wireless # substitute with phy80211 if desired
/sys/class/net/wlp4s0/wireless
# filter out the "device" part
$ printf '%s\n' /sys/class/net/*/wireless | awk -F'/' '{ print $5 }'
wlp4s0