在终端中如何纯命令行控制clash
ssh连接服务器的时候没有桌面环境,不能使用GUI,本文主要是讲述如何用命令行控制clash软件
1. 下载和配置clash
我们现在一个下载clash软件,如果是64位的linux都可以使用下面命名下载软件
wget https://github.com/Dreamacro/clash/releases/download/v1.10.6/clash-linux-amd64-v1.10.6.gz # 下载clash
其他系统可以去软件下载地址选择正确的版本
我们为解压后的软件赋予执行权限,使用命令
sudo chmod +x clash-linux-amd64-v1.10.6 # 增加执行权限
./clash-linux-amd64-v1.10.6 # 运行文件
然后我们直接在当前目录下直接执行该文件,使用命令./clash-linux-amd64-v1.10.6
,发现提示中初始化了一个配置文件,该文件处于~/.config/clash
目录下,提示中出现报错,原因是不能下载Country.mmdb
文件,我们手动下载即可
接下来我们将刚刚执行的文件clash-linux-amd64-v1.10.6
复制到配置文件目录中并重命名为clash
,方便使用,使用的命令是
cp clash-linux-amd64-v1.10.6 ~/.config/clash/clash # 复制clash文件
cd ~/.config/clash # 进入配置文件目录
接下来入到~/.config/clash
目录下,我们发现了移动过来并重命名的文件clash
,还有刚刚初始化失败的产生的配置文件config.yaml
我们先下载缺少的Country.mmdb
文件,可以直接使用命令下载
wget -O Country.mmdb https://www.sub-speeder.com/client-download/Country.mmdb # 下载文件
文件config.yaml
中包含的是你配置信息,这里需要使用代理商提供的订阅链接
wget -O config.yaml [代理商提供的订阅链接] # 下载到本地
到了这里该目录下文件应如下所示
并且查看config.yaml
文件可以看见里面的配置信息,这里的配置可以参考配置信息参数
这个时候我们再次执行文件,可以发现成功运行,结果显示已经监听9090端口,注意后面都不要关闭这个终端
./clash #执行文件
2. 系统配置
此时只是clash
运行成功,我们需要修改系统配置,将代理配置修改成
这里改成手动填写,地址都为127.0.0.1,http
和https
的端口号都对应配置文件中的port
,而sockes
对应socks-port
,如下所示
我们也可以在clash
启动后用浏览器访问网址http://clash.razord.top/
,在这里修改配置信息。
3. 修改命令行配置
将下列命令放入终端的配置文件中,使用zsh
的话配置文件就是~/.zshrc
,使用bash
的话配置文件就是~/.bashrc
# 这里两条都要放入配置文件里 ---start
alias 'proxy'='export all_proxy=socks5://127.0.0.1:7891' # 打开代理
alias 'unproxy'='unset all_proxy' # 关闭代理
# 这里两条都要放入配置文件里 ---end
# 执行命令
vim ~/.zshrc # 在最下面放入上面两句话
结果应如下所示
最后使用命令source ~/.zshrc
更新一下,然后使用命令proxy
打开终端的代理,最后可以用curl命令进行验证
source ~/.zshrc
curl [url]
curl
命令是如果能看到返回的html信息即访问成功
tips:proxy
打开终端代理,unproxy
关闭终端代理
4. 设置clash后台运行
目前来说,基本完成了整个功能,但是在运行clash
后,终端无法关闭,一旦关闭终端会导致clash
也关闭,所以我们继续设置,使用nohup进行后台运行,使用&
可以继续执行命令,这个时候查看7890端口后会发现软件在后台继续运行
pkill -9 clash # 每次重启前建议先杀死之前的进程,因为设置不输出错误信息后需要严谨一些
nohup ./clash -d . & # 这里nophup可以后台运行,&是继续执行其他命名,.是在当前目录下
lsof -i:7890 # 查看端口占用情况
但是,此时会在执行命令的目录下产生nohuo.out
文件,我们当然不想这样子四处沾花惹草,所以继续修改命令为
nohup ./clash -d . > /dev/null 2>&1 &
这里将输出文件写入到/dev/null下,这个目录会丢弃所有写入数据,就是垃圾站,而数字是linux的重定向,里面的数字含义如下所示
1
:标准输出,在一般使用时,默认的是标准输出;2
:表示错误信息输出。
这里整句话含义是将错误信息重定向到标准输出,其他信息丢进/dev/null
pkill -9 clash # 先杀死之前的进程
rm nohuop.out # 删除刚刚生成的nohup.out文件
nohup ./clash -d . > /dev/null 2>&1 & # 不生成文件
ls # 显示文件
到现在为止,还没有完美,如果我们没有在有config.yaml
的目录下执行就会报错,所以需要将路径都写为绝对路径
nohup /home/your_name/.config/clash/clash -d /home/your_name/.config/clash/ > /dev/null 2>&1 & # 设置绝对路径
这里要把之前的./clash
软件路径换成绝对路径,.
也要换成绝对路径(在防止config.yaml的目录下)
建议先用/home/your_name/.config/clash/clash -d /home/your_name/.config/clash/
先尝试,使用nohup后不输出报错信息了。
在无误后,在~/.zshrc
中增加为命令起别名,增加下面内容
alias 'clash'='nohup /home/your_name/.config/clash/clash -d /home/your_name/.config/clash > /dev/null 2>&1 &'
alias 'unclash'='pkill -9 clash'
最后不要忘记使用source ~/.zshrc
,使修改生效。
这个时候就可以使用简单的命令clash
和clash
命令来启动和关闭该软件
通过命令ps -ef | grep clash
来判断clash
是否运行
5. 设置开机自启
目前到这里为止功能已经很完善,已经是可以使用,后面的部分都是更加完善
每次服务器重启时,clash
软件都需要手动用命令控制,这种事情根本不允许出现在我这里,所以我们需要设置开机时就让他自动运行。
先创建一个auto_run.sh
脚本,内容如下
#! /bin/sh
nohup /home/your_name/.config/clash/clash -d /home/your_name/.config/clash/ > /dev/null 2>&1 &
这里最好先尝试执行一下sh auto_run.sh
,可以通过ps -ef | grep clash
查看是否成功运行
然后是利用rc-local
来设置开机自动运行脚本
cp /usr/lib/systemd/system/rc-local.service /etc/systemd/system/ # 先将rc-local.service复制到system目录下
sudo touch /etc/rc.local # 创建rc.local文件
sudo chmod 755 /etc/rc.local # 设置权限
# 设置rc-local开机自启
systemctl start rc-local
systemctl enable rc-local
sudo reboot # 重启服务器!!!!
systemctl status rc-local # 查看服务
确认是启动状态
最后在rc-local
中增加要开机执行的任务
sudo vim rc-local
# 下面是写入的内容
#!/bin/bash
sh /home/dl/.config/clash/auto_run.sh
最后可以重启实验一下,可以通过ps -ef | grep clash
验证是否开机自启
6. 自动更新配置文件
配置文件信息是会更新的,我们也需要定时地更新本地的配置文件
wget -O /home/your_name/.config/clash/config.yaml [订阅链接]
我们将config.yaml
的路径写成绝对路径,这样我们无论在哪个目录下都能正常执行该命令,更新该配置文件。
有了命令后,只需要设置好定时器,每天定时执行,就能达到自动更新本地配置文件的效果
这里使用linux自带的cron
定时器,设定每日都运行一遍
crontab -e # 编辑定时任务
25 20 * * * wget -O /home/your_name/.config/clash/config.yaml [订阅地址] # 将该行内容加入,这里需要特别注意,因为地址中会有一些符号在命令行中是需要转义的,也就是加\,所以这里建议先复制到终端中,终端会将地址自动转义,将转义后的命令复制进来
service cron restart # 修改完都需要重启服务,不然不能生效
上面的含义是每天的20:25
定时执行后面的命令,更多细节可以去查看文档
设置定时任务是有可能失败的,主要都是自己设置的命令的问题,可能是没有使用绝对路径、没有转义等原因。可以在linux开启cron
的日志,方便排查失败原因。
下面是如何开启cron日志,最后日志在/var/log/cron.log
中
sudo vim /etc/rsyslog.d/50-default.conf
cron.* /var/log/cron.log #将cron前面的注释符去掉
sudo service rsyslog restart #重启rsyslog
sudo service cron restart #重启cron
最后查看一下文件修改日期,可以发现定时任务按时运行了
7. 总结
这篇文章最终结果就是设置了四个命令,可以只通过命令控制clash
软件
clash
:启动clash软件unclash
:关闭clash软件proxy
:修改终端配置unproxy
:关闭终端配置
实现了clash
的开机自启,自动更新配置文件的功能。
Tips:
ps -ef | grep clash
:查看calsh是否已运行~/.config/clash/config.yaml
:clash
的配置文件crontab -e
:定时任务器(注意:加sudo和不加sudo不是同一个)/var/log/cron.log
:cron的日志文件service cron restart
:定时器重启(修改配置文件后都需要重启)/etc/rc.local
:开机自启运行器systemctl status rc-local
:rc-local
的运行状态