推荐使用iw而非iwlist扫描wi-fi:iw基于netlink接口,需先sudo ip link set wlan0 up并加sudo权限;iwlist已废弃,依赖过时ioctl,在新内核中结果不可靠且不支持6 ghz频段。

直接用 iwlist 或 iw 就能扫,但两者权限、输出格式、依赖内核接口不同,选错可能报错或返回空——尤其在较新发行版(如 Ubuntu 22.04+、Debian 12+)上,iwlist 已被标记为废弃,而 iw 是推荐路径。
iw dev wlan0 scan 返回空或 Permission denied
这是最常见卡点。原因不是命令写错了,而是无线接口没启用,或用户没权限调用 nl80211 接口。
-
iw必须走 netlink 通信,要求接口处于 UP 状态:sudo ip link set wlan0 up - 普通用户默认无权访问 nl80211,必须加
sudo;不加会直接报command failed: Operation not permitted (-1) - 某些网卡驱动(如 rtl8192cu、ath9k_htc)不支持主动扫描,
iw dev wlan0 scan可能静默失败,此时可试sudo iw dev wlan0 scan trigger && sudo iw dev wlan0 scan dump拆成两步 - 若提示
command failed: Device or resource busy (-16),说明wpa_supplicant正在占用接口,先sudo pkill wpa_supplicant
iwlist wlan0 scan 报 No scan results 和 deprecated 警告
iwlist 依赖旧的 ioctl 接口,在 kernel ≥ 5.15 后很多驱动已移除支持。它还能跑,但结果不可靠。
- 报
No scan results很可能是驱动拒绝响应 ioctl 请求,不是没信号,而是“问法过时了” - 执行时带
-v可看到警告:iwlist: This tool is deprecated. Use 'iw' instead. - 如果非要用(比如嵌入式设备只装了 wireless-tools),确保内核编译时开了
CONFIG_WIRELESS_EXT,否则连命令都找不到 -
iwlist不支持 6 GHz(Wi-Fi 6E)频段扫描,遇到 6E AP 会完全忽略
nmcli device wifi list 输出简略但稳定
如果你只需要快速看 SSID、信号强度、加密类型,且系统装了 NetworkManager(桌面版默认有),nmcli 是最省心的选择——它自动处理接口 UP、权限、后台扫描队列。
- 无需
sudo:nmcli device wifi list - 支持实时刷新:
nmcli device wifi list --rescan yes(强制重扫,等效于触发一次 scan + dump) - 字段对齐友好,适合管道处理,例如取最强信号的 SSID:
nmcli -f SSID,SIGNAL device wifi list --rescan yes | sort -k2nr | head -n2 | tail -n1 | awk '{print $1}' - 缺点:不显示信道、频率、BSSID(MAC 地址),也无法获取 RSN IE 等加密细节
解析 scan 结果时注意 Signal level 单位差异
iw 和 iwlist 都输出信号强度,但单位和归一化方式不同,直接比较会误判。
-
iw dev wlan0 scan中的signal:字段是 dBm 值(如signal: -54.00 dBm),数值越接近 0 越强 -
iwlist wlan0 scan中的Signal level=67/100是驱动上报的百分比,不同芯片换算逻辑不同(rtl8821ae 和 iwlwifi 完全不可比) -
nmcli统一转成 0–100 整数,但底层仍来自驱动,实际值需查iw dev wlan0 link的rx bitrate和重传率才更准 - 别只盯一个数值:-65 dBm 且
tx bitrate稳定 867 Mbit/s,比 -52 dBm 但频繁降速到 6 Mbit/s 更可靠
真正影响连接质量的从来不是“能不能扫到”,而是“扫到后能不能稳定协商速率”。扫完记得用 iw dev wlan0 link 看当前链路状态,再结合 cat /proc/net/wireless 里的丢包率判断——这些才是调试弱信号场景的关键落点。











