und*_*res 5 wifi scripting bash ifconfig
一些背景:有时我的 wi-fi 连接突然断开,所以我输入sudo ifconfig wlan0
并检查单词RUNNING
。相应的行如下所示:
UP BROADCAST RUNNING MULTICAST [...]
Run Code Online (Sandbox Code Playgroud)
当连接断开时,没有RUNNING
设置;我无法连接到任何东西,但接口仍在运行。
我正在考虑编写一个脚本来定期检查RUNNING
状态。为了提取该字符串,使用awk
会是这样的:sudo ifconfig wlan0 | awk '/RUNNING/ {print $3}'
。
是否有另一种方法,例如检查文件系统而不是解析 ifconfig 的输出?
我正在使用 Debian Wheezy。
谢谢。
更多信息:
好的,刚刚做了一些研究并澄清了一些概念上的混乱。
在UP
和RUNNING
标志是不同的。第一个表示接口“当前已初始化”[1],即“系统为接口分配了资源”[2]——它没有说明数据包传输。
该RUNNING
标志实际上表示正在发送和接收数据包。显然,如果例如以太网电缆被拔掉,这个标志就会消失。
[1] https://docs.oracle.com/cd/E19253-01/816-4554/ipconfig-141/index.html
我不知道我的(或任何)无线连接发生了什么,但结果是一样的:当连接完全丢失时,接口保持开启(我的笔记本电脑中的 Wi-Fi LED 灯仍然亮着)。
而不是使用像ifconfig -s
或这样的命令netstat -i
可以检查以下文件来监控 wi-fi 连接状态:
/sys/class/net/wlan0/flags
指示设备是打开还是关闭。它对数据包传输一无所知,因此检查您的连接是否正常工作并不是很有用。它的内容/值是0x1003
(on) 和0x1002
(off)。
/sys/class/net/wlan0/operstate
指示连接是否可操作(正在发送和接收数据包)。这个文件相当于RUNNING
标志显示的ifconfig
。它的值是up
和down
。
/sys/class/net/wlan0/carrier
就像/sys/class/net/wlan0/operstate
. 它的值是1
(向上)和0
(向下)。如果设备关闭,则文件为空。