1 rfkill
命令简介
rfkill
命令可以用来打开和关闭WiFi的射频开关。
1.1 rf
的含义
射频(rf
)是Radio Frequency的缩写,rfkill
可以管理wifi、wlan、bluetooth、uwb、wimax、wwan、gps、fm、nfc无线信号。
这种开关在某种程度上能够控制硬件的状态,使用的例子有:飞行模式、硬件节能。
1.2 常用命令
rfkill
常用有如下的命令:
# 罗列出所有的无线设备
rfkill list
# 关闭所有的射频设备
rfkill block all
# 打开所有的射频设备
rfkill unblock all
# 可以关掉/打开某种类型的设备,例如WiFi
rfkill block wifi
rfkill unblock wifi
# 也可以对于某个设备进行打开和关闭
# 下面的编号可以从`rfkill list`中查看
rfkill block/unblock 编号
2 rfkill
与ifconfig
配合使用
2.1 正常的现象
假设我的当前系统里面存在一个网卡wlan0
,关闭其射频信号,之后使用ifconfig
则查看不到wlano
这个网卡的信号了,代码(代码1)如下:
rfkill block wifi
ifconfig
然后我再使用rfkill
打开射频,之后就可以使用ifconfig
查看到wlan0
了,具体代码(代码2)如下:
rfkill unblock wifi
ifconfig
2.2 为什么这样使用
由于存在这种特性,则计划使用这种特性来,查看ifconfig
来确定某个无线网卡的状态。
为什么不使用rfkill list
来查看对应无线设备的状态了?
这时因为,在展示的列表中,对应的设备只有编号,并不是很客观能与具体那个无线设备联系起来。
2.3 发现的问题
但是发现一个问题,在我多次交替执行打开/关闭WiFi设备之后,无论是打开还是关闭设备,这个无线网在ifconfig
中一直显示,发现上面的判断的规律失效了,我尝试的系统是CentOS7.x。
2.4 配合ifconfig up/down
解决问题
当我还想使用这个rfkill
和ifconfig
判断是否关闭wlan0,怎么做呢?
我发现使用ifconfig interface up/down
能够控制ifconfig
中显示。如果我在使用rfkill
启停网络之后,再配合使用ifconfig interface up/down
,那么这样就能再使用ifconfig
就能达到刚才的功能了。
在具体执行的时候,只有rfkill
启动了射频,才能使用ifconfig interface up
,因此在逆向操作时候,先执行ifconfig interface down
再执行rfkill
停止射频。具体代码如下:
- 停止射频
ifconfig wlano down
rfkill block wifi
- 打开射频
rfkill unblock wifi
ifconfig wlan0 up
这样在其他程序或者进程/线程中就能使用ifconfig
方便判断硬件射频启停的状态了。
3 其他建议
由于ifconfig
命令已经算是过时的命令,则实际使用中,最后慢慢摆脱对于这个命令的依赖,使用ip
命令代替。
本文章讨论的时候,只存在一个WiFi网络,所有可以方便使用rfkill block/unblock wifi
粗略控制开关,否则具体控制设备编号开控制启停。
本文章对于是否禁掉无线的判断使用ifconfig
并不是最好的,可以用其他更好方法尝试。