如何通过命令行/shell 脚本从 etc/wpa_supplicant/wpa_supplicant.conf 中删除网络配置文件
How to delete a network profile from etc/wpa_supplicant/wpa_supplicant.conf through command line / shell script
我的 etc/wpa_supplicant/wpa_supplicant.conf 中保存了多个 wifi 网络 ssid,如下所示,
我们可以从此 wpa_supplicant.conf
中删除特定网络吗
例如:在下面的网络中,可以通过 shell 脚本删除网络 myssid1,然后我可以通过 node.js 服务器
执行该脚本
network={
ssid="myssid1"
scan_ssid=0
proto=WPA
key_mgmt=WPA-PSK
psk=5f55a9b869e9ab6d03839cae23c7243accc0ac0a12079d358328bf73ad2e0ebe
}
network={
ssid="myssid2"
scan_ssid=0
proto=WPA
key_mgmt=WPA-PSK
psk=d89660510d06bbf7691f5296daae36872d697a88876c53db7de91aa85df4f68b
}
network={
ssid="myssid3"
scan_ssid=0
proto=WPA
key_mgmt=WPA-PSK
psk=d635b33481a13b28a67e8964f58343cb19bc8c85c67cc56ee9bfe0c302914a5f
}
你可以自己写。一些非常丑陋的 Quick-n-Dirty 代码例如:
file="/etc/wpa_supplicant/wpa_supplicant.conf"
foo="$(cat "$file" | awk '/myssid3/ { flag=1 }; flag==0 { print [=10=] }; /network={/ { flag=0 }' )"
if echo -e "$foo" | tail -1 | grep -q 'network={'; then
foo=$(echo -e "$foo" | head -n -1)
fi
echo -e "$foo" > "$file"
我能够使用以下脚本完成它:
SSID_TO_DELETE=
sed -n "1 !H 1 h $ { x s/[[:space:]]*network={\n[[:space:]]*ssid=\"${SSID_TO_DELETE}\"[^}]*}//g p }" /etc/wpa_supplicant/wpa_supplicant.conf > /etc/wpa_supplicant/wpa_supplicant.conf
SSID=
temp_var=$(sudo awk -v RS= '!/${SSID}/{printf [=10=]""RT}' etc/wpa_supplicant/wpa_supplicant.conf)
echo -e "$temp_var" | sudo tee etc/wpa_supplicant/wpa_supplicant.conf
需要临时变量,因为这是我发现实际使 awk 写入其处理文件的最简单方法。
要查看更改 wpa_supplicant.conf 的效果,请执行
svc wifi disable && svc wifi enable
一些参考资料:
使用 wpa_cli
你可以这样做:
1:
wpa_cli remove_network 0
其中 0
是您在 运行 wpa_cli add_network
之后得到的 network_id。它将删除网络并断开所有使用它的接口。
注意network id
不是文件中的网络顺序。您可以使用 wpa_cli list_networks
配置网络
2:
wpa_cli save_config
这将保留更改,并且相应的网络块将从 etc/wpa_supplicant/wpa_supplicant.conf
中删除
我的 etc/wpa_supplicant/wpa_supplicant.conf 中保存了多个 wifi 网络 ssid,如下所示, 我们可以从此 wpa_supplicant.conf
中删除特定网络吗例如:在下面的网络中,可以通过 shell 脚本删除网络 myssid1,然后我可以通过 node.js 服务器
执行该脚本 network={
ssid="myssid1"
scan_ssid=0
proto=WPA
key_mgmt=WPA-PSK
psk=5f55a9b869e9ab6d03839cae23c7243accc0ac0a12079d358328bf73ad2e0ebe
}
network={
ssid="myssid2"
scan_ssid=0
proto=WPA
key_mgmt=WPA-PSK
psk=d89660510d06bbf7691f5296daae36872d697a88876c53db7de91aa85df4f68b
}
network={
ssid="myssid3"
scan_ssid=0
proto=WPA
key_mgmt=WPA-PSK
psk=d635b33481a13b28a67e8964f58343cb19bc8c85c67cc56ee9bfe0c302914a5f
}
你可以自己写。一些非常丑陋的 Quick-n-Dirty 代码例如:
file="/etc/wpa_supplicant/wpa_supplicant.conf"
foo="$(cat "$file" | awk '/myssid3/ { flag=1 }; flag==0 { print [=10=] }; /network={/ { flag=0 }' )"
if echo -e "$foo" | tail -1 | grep -q 'network={'; then
foo=$(echo -e "$foo" | head -n -1)
fi
echo -e "$foo" > "$file"
我能够使用以下脚本完成它:
SSID_TO_DELETE=
sed -n "1 !H 1 h $ { x s/[[:space:]]*network={\n[[:space:]]*ssid=\"${SSID_TO_DELETE}\"[^}]*}//g p }" /etc/wpa_supplicant/wpa_supplicant.conf > /etc/wpa_supplicant/wpa_supplicant.conf
SSID=
temp_var=$(sudo awk -v RS= '!/${SSID}/{printf [=10=]""RT}' etc/wpa_supplicant/wpa_supplicant.conf)
echo -e "$temp_var" | sudo tee etc/wpa_supplicant/wpa_supplicant.conf
需要临时变量,因为这是我发现实际使 awk 写入其处理文件的最简单方法。 要查看更改 wpa_supplicant.conf 的效果,请执行
svc wifi disable && svc wifi enable
一些参考资料:
使用 wpa_cli
你可以这样做:
1:
wpa_cli remove_network 0
其中 0
是您在 运行 wpa_cli add_network
之后得到的 network_id。它将删除网络并断开所有使用它的接口。
注意network id
不是文件中的网络顺序。您可以使用 wpa_cli list_networks
2:
wpa_cli save_config
这将保留更改,并且相应的网络块将从 etc/wpa_supplicant/wpa_supplicant.conf