我正在寻找一个命令来扫描连接到我的计算机的任何无线设备。
我的电脑有一个问题,如果我把手放在无线设备的某个部分上,它就会断开连接,所以我必须重新启动电脑才能再次找到无线设备。Linux 中是否有任何命令可以扫描连接的无线设备,我可以重新连接无线设备吗?
答案1
真实性;可靠性:使用nmcli dev status
获取已连接到网络的接口列表,然后使用ping google.com -c 4 -I ifacex
(其中 ifacex 是带编号的实际接口名称)测试它们是否实际已连接。重新连接无线接口nmcli nm wifi off; sleep 1; nmcli nm wifi on
并让其自动重新连接。
最简单的方法是通过nmcli dev status
。此命令输出系统上可用接口的列表,并告诉您它们是否已连接。我的系统的示例输出
DEVICE TYPE STATE
eth0 802-3-ethernet unavailable
wlan0 802-11-wireless connected
如果您只想列出处于连接状态的设备,请执行
nmcli dev status | awk '/connected/ {print $1}'
。在这里,我们仅匹配包含“已连接”字符串的行,并打印其名称。在我的情况下,它只会给出wlan0
。如果您同时连接了 eth0 和 wlan0,则示例输出将是
wlan0
eth0
现在,在我的系统上,网络管理器有点问题。它可能会报告设备已连接,但实际上它已断开连接。您可以使用 测试 wlan0 接口ping google.com -c 4 -I wlan0
。这会从接口 wlan0 发送 4 个数据包google.com
。现在,我也可以执行
nmcli dev status | awk '/connected/ {print $1}' | xargs ping google.com -c 4 -I
,它将获取我的 wlan0 接口的名称并将其作为 -I 参数粘贴在 ping 命令的末尾。示例输出
PING google.com (216.58.217.46) from 192.168.0.68 wlan0: 56(84) bytes of data.
64 bytes from den03s10-in-f14.1e100.net (216.58.217.46): icmp_seq=1 ttl=57 time=44.0 ms
64 bytes from den03s10-in-f14.1e100.net (216.58.217.46): icmp_seq=2 ttl=57 time=40.0 ms
64 bytes from den03s10-in-f14.1e100.net (216.58.217.46): icmp_seq=3 ttl=57 time=48.0 ms
64 bytes from den03s10-in-f14.1e100.net (216.58.217.46): icmp_seq=4 ttl=57 time=40.0 ms
--- google.com ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3016ms
rtt min/avg/max/mdev = 40.000/43.000/48.000/3.316 ms
用户经常会遇到 DNS 问题,这意味着您的机器无法将 google.com 转换为实际 IP 地址(计算机只处理 IP 地址,就像电话只处理电话号码一样)。在这种情况下,您最好运行ping 8.8.8.8 -c 4 -I wlan0 && ping google.com -c 4 -I wlan0
,它将测试您的机器是否已连接到网络并解析域名。
现在,如果你有多个连接的接口怎么办?我个人会分别用 ping 测试每个接口,而不依赖于那一行代码,但因为我最近对脚本很感兴趣,这里还有另一行代码:
nmcli dev status | awk '/connected/ {print $1}' | xargs -n 1 ping google.com -c 4 -I
这个基本上是找到已连接接口的名称,并对每个接口执行 ping 命令。由于我没有连接多个设备,因此我只会向您展示当我使用 awk 从第一列获取每个项目时它的样子,因此请注意,第一个输出将是错误的,第二个是 eth0,第三个是 wlan0
nmcli dev status | awk '{print $1}' | xargs -n 1 ping google.com -c 4 -I
ping: SO_BINDTODEVICE: Invalid argument
ping: Warning: source address might be selected on device other than eth0.
PING google.com (216.58.217.46) from 192.168.0.68 eth0: 56(84) bytes of data.
From sergiy-Satellite-L455D.local (192.168.0.68) icmp_seq=1 Destination Host Unreachable
From sergiy-Satellite-L455D.local (192.168.0.68) icmp_seq=2 Destination Host Unreachable
From sergiy-Satellite-L455D.local (192.168.0.68) icmp_seq=3 Destination Host Unreachable
From sergiy-Satellite-L455D.local (192.168.0.68) icmp_seq=4 Destination Host Unreachable
--- google.com ping statistics ---
4 packets transmitted, 0 received, +4 errors, 100% packet loss, time 3152ms
pipe 3
PING google.com (216.58.217.46) from 192.168.0.68 wlan0: 56(84) bytes of data.
64 bytes from den03s10-in-f14.1e100.net (216.58.217.46): icmp_seq=1 ttl=57 time=44.0 ms
64 bytes from den03s10-in-f14.1e100.net (216.58.217.46): icmp_seq=2 ttl=57 time=48.0 ms
64 bytes from den03s10-in-f14.1e100.net (216.58.217.46): icmp_seq=3 ttl=57 time=40.0 ms
64 bytes from den03s10-in-f14.1e100.net (216.58.217.46): icmp_seq=4 ttl=57 time=40.0 ms
--- google.com ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3016ms
rtt min/avg/max/mdev = 40.000/43.000/48.000/3.316 ms
正如所料,我们看到 eth0 已断开连接,wlan0 已连接。
您还可以使用nm-tool
。这个东西会为您提供有关每个接口的详细报告,包括设置。我们可以使用 将其缩减为仅包含接口及其状态的列表nm-tool | tr '-' ' ' | awk '/Device/,/State/ {print $1,$2}'
。在这里,我们用空格替换烦人的 - 字符,然后只获取从设备到状态字符串的文本。
Device: eth0
Type: Wired
Driver: r8169
State: unavailable
Device: wlan0
Type: 802.11
Driver: r8180
State: connected
还有什么?
whois
和nslookup
是dig
域名和 IP 地址的查找实用程序。如果您可以使用它们查找有关域或 IP 地址的信息,则表示您已连接。它们不会告诉您界面,但实际上测试连接性很有用。
综上所述:正如您所知,事情不止一种。第一个命令nmcli dev status
就是ping
您测试连接所需的全部内容,可以说,ping 是任何系统上的“真正 MVP”。现在,如果您想学习一些新的命令行技巧,请务必研究我在此处发布的单行命令!Ubuntu 和 Linux 的强大之处在于命令行
新增内容:
其他人已经适当地指出,sudo service network-manager restart
大多数情况下,重新启动网络管理器即可完成工作。默认情况下,所有连接都设置为在网络管理器处于范围内时自动连接。我经常使用这种方法!
还能做什么?nmcli nm wifi off; sleep 1; nmcli nm wifi on
。这将关闭 wifi,暂停一秒钟,然后再次打开 wifi;并且您的网络应该会自动重新连接。
答案2
我假设您有一个 USB wifi 设备?我问这个问题只是因为在操作系统中通过物理接触丢失设备是很奇怪的。
无论如何,您是否尝试过使用 GUI 禁用/启用网络?这是最简单的第一步。单击时钟附近右上角的网络信号图标,然后取消选中启用网络等待一分钟,然后再次点击网络信号图标并重新检查启用网络选项,再次等待一段时间以赶上进度。然后看看您是否可以重新连接到无线网络。
如果这不起作用,请打开终端窗口并输入以下命令:
sudo service network-manager restart
这应该强制 NM 完全停止并重新启动,并且您的 wifi 适配器可能会重新弹出。
如果其中任何一个都没有帮助,那么当您与 WiFi 适配器失去连接时,请拉出终端并运行以下命令并编辑您的问题并发布结果:
ifconfig
这应该会显示当您失去连接时您的设备是否还能被看到。
假设它是一个 USB 适配器...您可以在同一个插槽中使用其他 USB 设备,或者它们是否遇到同样的问题?