在终端中如何纯命令行控制clash

在终端中如何纯命令行控制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
在终端中如何纯命令行控制clash
文章图片

我们先下载缺少的Country.mmdb文件,可以直接使用命令下载
wget -O Country.mmdb https://www.sub-speeder.com/client-download/Country.mmdb # 下载文件

文件config.yaml中包含的是你配置信息,这里需要使用代理商提供的订阅链接
wget -O config.yaml [代理商提供的订阅链接] # 下载到本地

到了这里该目录下文件应如下所示
在终端中如何纯命令行控制clash
文章图片

并且查看config.yaml文件可以看见里面的配置信息,这里的配置可以参考配置信息参数
在终端中如何纯命令行控制clash
文章图片

这个时候我们再次执行文件,可以发现成功运行,结果显示已经监听9090端口,注意后面都不要关闭这个终端
./clash #执行文件

在终端中如何纯命令行控制clash
文章图片

2. 系统配置 此时只是clash运行成功,我们需要修改系统配置,将代理配置修改成
在终端中如何纯命令行控制clash
文章图片

这里改成手动填写,地址都为127.0.0.1,httphttps的端口号都对应配置文件中的port,而sockes对应socks-port,如下所示
在终端中如何纯命令行控制clash
文章图片

我们也可以在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 # 在最下面放入上面两句话

结果应如下所示
在终端中如何纯命令行控制clash
文章图片

最后使用命令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 # 查看端口占用情况

在终端中如何纯命令行控制clash
文章图片

但是,此时会在执行命令的目录下产生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 # 显示文件

在终端中如何纯命令行控制clash
文章图片

到现在为止,还没有完美,如果我们没有在有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】这个时候就可以使用简单的命令clashclash命令来启动和关闭该软件
通过命令ps -ef | grep clash来判断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 # 查看服务

确认是启动状态
在终端中如何纯命令行控制clash
文章图片

最后在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定时执行后面的命令,更多细节可以去查看文档
在终端中如何纯命令行控制clash
文章图片

设置定时任务是有可能失败的,主要都是自己设置的命令的问题,可能是没有使用绝对路径、没有转义等原因。可以在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

最后查看一下文件修改日期,可以发现定时任务按时运行了
在终端中如何纯命令行控制clash
文章图片

在终端中如何纯命令行控制clash
文章图片

7. 总结 这篇文章最终结果就是设置了四个命令,可以只通过命令控制clash软件
  • clash:启动clash软件
  • unclash:关闭clash软件
  • proxy:修改终端配置
  • unproxy:关闭终端配置
实现了clash的开机自启,自动更新配置文件的功能。
Tips:
  • ps -ef | grep clash:查看calsh是否已运行
  • ~/.config/clash/config.yamlclash的配置文件
  • crontab -e:定时任务器(注意:加sudo和不加sudo不是同一个)
  • /var/log/cron.log:cron的日志文件
  • service cron restart:定时器重启(修改配置文件后都需要重启)
  • /etc/rc.local:开机自启运行器
  • systemctl status rc-localrc-local的运行状态

    推荐阅读