当我使用 NetworkManager 的图形界面(通过托盘图标)时,它会显示大约 10 个 SSID(针对我当前的位置)。然而,当我使用nmcli dev wifi
它时,它返回大约 55 个条目。原因是同一 SSID 以不同的信号强度(有时甚至不同的传输速率)多次返回。大多数重复的 SSID 具有不同的频道/频段,但有些具有相同的频道/频段。
样本输出
IN-USE SSID MODE CHAN RATE SIGNAL BARS SECURITY
G4_9647 Infra 11 65 Mbit/s 84 ▂▄▆█ WPA2
Telekom Infra 11 130 Mbit/s 64 ▂▄▆_ --
Airport-Frankfurt Infra 11 130 Mbit/s 62 ▂▄▆_ --
FRAWiSe Infra 11 130 Mbit/s 60 ▂▄▆_ WPA2 802.1X
FRAWiSe Infra 48 405 Mbit/s 60 ▂▄▆_ WPA2 802.1X
Airport-Frankfurt Infra 48 405 Mbit/s 60 ▂▄▆_ --
Ca81pVb5jKTw Infra 11 130 Mbit/s 59 ▂▄▆_ WPA2
Telekom Infra 48 405 Mbit/s 59 ▂▄▆_ --
Airport-Frankfurt Infra 36 270 Mbit/s 57 ▂▄▆_ --
Telekom Infra 36 270 Mbit/s 55 ▂▄__ --
FRAWiSe Infra 36 270 Mbit/s 55 ▂▄__ WPA2 802.1X
Ca81pVb5jKTw Infra 11 130 Mbit/s 54 ▂▄__ WPA2
AndroidAP 3 Infra 6 65 Mbit/s 50 ▂▄__ WPA2
FRAWiSe Infra 11 130 Mbit/s 50 ▂▄__ WPA2 802.1X
以下命令还列出了大约 55 个连接
sudo iwlist wlp4s0 scan | grep ESSID
sudo iw dev wlp4s0 scan | grep SSID
如何使用nmcli
NetworkManager GUI 获得相同的结果并将结果限制为每个唯一 SSID 的一个条目?我想在不知道 SSID 位于哪个通道/频段的情况下实现这一点(在这种情况下我可以只使用 grep)。例如,仅返回具有最高信号强度的频道/频段的条目。
答案1
nmcli dev wifi | awk -F' +' '{ if (!seen[$2]++) print}'
awk 脚本的工作原理如下:
- -F' +' - 分隔符是两个或多个空格
- 如果之前没有看到第二列 (SSID),则打印。然后将该值加 1,以便下次不再打印