Linux 下灵活代理管理:开关、状态显示与自动检测
Linux 下灵活代理管理:开关、状态显示与自动检测
在 Linux 开发和运维环境中,使用 HTTP/HTTPS 代理十分常见,例如加速访问或穿透网络。然而,当代理服务关闭后,如果系统或程序仍然读取环境变量,就可能导致无法联网。本文总结了一套 可控代理管理方案 ,支持手动开关、状态查询以及自动检测代理状态,帮助你轻松管理开发环境的网络访问。
一、问题背景
常见代理配置方式:
1
2
export http_proxy=http://127.0.0.1:10809
export https_proxy=http://127.0.0.1:10809
代理关闭后:
- 使用这些环境变量的命令行工具(如
curl、wget、git、npm等)会 无法联网 。 - 不读取环境变量的程序(部分 GUI 浏览器、系统服务)仍可直接访问网络。
因此,我们需要一种方法: 仅在代理可用时使用代理,关闭代理时恢复正常联网 。
二、手动管理代理
1. 脚本方式
可以通过两个简单脚本来切换代理。
开启代理:
1
2
3
4
5
# ~/proxy_on.sh
export http_proxy=http://127.0.0.1:10809
export https_proxy=http://127.0.0.1:10809
export all_proxy=socks5://127.0.0.1:10809
echo "Proxy ON"
关闭代理:
1
2
3
4
5
# ~/proxy_off.sh
unset http_proxy
unset https_proxy
unset all_proxy
echo "Proxy OFF"
使用
source ~/proxy_on.sh或source ~/proxy_off.sh才能让当前 shell 生效。
2. Shell 函数方式(推荐)
在 ~/.bashrc 或 ~/.zshrc 添加:
1
2
3
4
5
6
7
8
9
10
11
12
13
proxy_on () {
export http_proxy=http://127.0.0.1:10809
export https_proxy=http://127.0.0.1:10809
export all_proxy=socks5://127.0.0.1:10809
echo "Proxy enabled"
}
proxy_off () {
unset http_proxy
unset https_proxy
unset all_proxy
echo "Proxy disabled"
}
刷新配置:
1
source ~/.bashrc
使用方法:
1
2
proxy_on # 开启代理
proxy_off # 关闭代理
三、自动检测代理状态
为了避免手动操作,可以通过 端口检测 自动判断代理是否可用。
1
2
3
4
5
6
7
proxy_auto () {
if timeout 1 bash -c "</dev/tcp/127.0.0.1/10809" 2>/dev/null; then
proxy_on
else
proxy_off
fi
}
使用:
1
proxy_auto
- 代理运行 → 自动开启环境变量
- 代理关闭 → 自动取消环境变量
无需安装额外工具,如
nc,使用 Linux 内置/dev/tcp即可。
四、完整可用代理管理脚本
整合开关、状态、自动检测功能,保存为 ~/proxy.sh:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#!/bin/bash
# Linux 代理管理脚本
# 支持:proxy on/off/status/auto
PROXY_HOST="127.0.0.1"
PROXY_PORT="10809"
proxy_on() {
export http_proxy="http://$PROXY_HOST:$PROXY_PORT"
export https_proxy="http://$PROXY_HOST:$PROXY_PORT"
export all_proxy="socks5://$PROXY_HOST:$PROXY_PORT"
echo "Proxy enabled"
}
proxy_off() {
unset http_proxy
unset https_proxy
unset all_proxy
echo "Proxy disabled"
}
proxy_status() {
if [ -n "$http_proxy" ] || [ -n "$https_proxy" ]; then
echo "Proxy is ON: $http_proxy"
else
echo "Proxy is OFF"
fi
}
proxy_auto() {
if timeout 1 bash -c "</dev/tcp/$PROXY_HOST/$PROXY_PORT" 2>/dev/null; then
proxy_on
else
proxy_off
fi
}
# 根据参数调用函数
case "$1" in
on)
proxy_on
;;
off)
proxy_off
;;
status)
proxy_status
;;
auto)
proxy_auto
;;
*)
echo "Usage: $0 {on|off|status|auto}"
;;
esac
使用方法
- 赋予执行权限:
1
chmod +x ~/proxy.sh
- 在当前终端使用:
1
2
3
4
source ~/proxy.sh on # 开启代理
source ~/proxy.sh off # 关闭代理
source ~/proxy.sh status # 查看状态
source ~/proxy.sh auto # 自动检测并设置
注意使用
source,确保环境变量生效于当前 shell。
五、高级技巧
- 终端自动检测代理 :
在 ~/.bashrc 或 ~/.zshrc 添加:
1
source ~/proxy.sh auto
每次打开终端都会自动判断代理状态。
- 注意工具配置文件 :
部分工具可能还会读取配置文件中的代理,例如:
~/.gitconfig(Git)~/.npmrc(Node.js)~/.pip/pip.conf(Python)/etc/apt/apt.conf(APT)
即使环境变量被 unset,这些程序可能仍然使用代理,需要单独清理。
六、总结
- 手动切换 :通过脚本或函数快速开启/关闭代理。
- 状态查询 :随时了解当前代理状态。
- 自动检测 :代理可用时自动启用,不可用时自动取消,提升开发效率。
- 安全与灵活 :关闭代理时不会影响其它网络访问,兼顾开发和调试环境。
这套方法可以帮助 Linux 用户实现 “代理开启时使用,关闭时不影响联网” 的灵活管理方案,是开发环境中最实用的代理管理方式。
— END —
本文由作者按照 CC BY 4.0 进行授权