百度已收录

Linux安装clash

  1. 下载clash-linux安装包,传送门

  2. 下载clash-linux-amd64-v1.17.0.gz压缩包到本地

  3. 上传压缩包到服务器任意位置,这里以/apps/work为例

  4. 在服务器上解压压缩包,得到clash-linux-amd64-v1.17.0文件
gunzip clash-linux-amd64-v1.17.0.gz
  1. clash-linux-amd64-v1.17.0添加执行权限,并且创建软连接
chmod +x clash-linux-amd64-v1.17.0
ln -s $(pwd)/clash-linux-amd64-v1.17.0 /usr/bin/clash
  1. 切换到/usr/bin路径下,运行clash
cd /usr/bin
./clash

Clash 运行时需要Country.mmdb文件和config.yaml,当第一次启动 Clash 时(使用 ./clash 命令)会自动下载(会下载至 /home/XXX/.config/clash 文件夹下),自动下载可能会因网络原因较慢,可以直接上github上下载,然后传到服务器上

  1. 将下载好的Country.mmdb文件移动到clash解压文件同级目录下

  2. 准备clash节点配置文件config.yaml,从订阅源down一个自己的节点配置文件下来,上传到clash解压文件同级目录下

  3. 编写脚本start_service.shstop_service.shpost_stop_service.shpre_start_serivce.sh,内容如下:
cat << EOF >> /apps/work/clash/post_stop_service.sh
#!/bin/bash

# 指定需要查找和修改的文件路径
file_path="/etc/profile"

# 使用 sed 命令将文件中包含 http://127.0.0.1:7890 的行注释掉
sed -i '/http:\/\/127.0.0.1:7890/ s/^/#/' "$file_path"

echo "注释完成"

source /etc/profile
EOF
cat << EOF >> /apps/work/clash/pre_start_serivce.sh
#!/bin/bash

# 指定需要查找和修改的文件路径
file_path="/etc/profile"

# 判断文件中是否包含 http://127.0.0.1:7890
if grep -q "http://127.0.0.1:7890" "$file_path"; then
    # 如果存在,则判断是否被注释
    if grep -q "#.*http://127.0.0.1:7890" "$file_path"; then
        # 如果被注释,则取消注释
        sed -i 's/^#\(.*http:\/\/127\.0\.0\.1:7890\)/\1/' "$file_path"
        echo "已取消注释"
    else
        echo "已存在且未被注释"
    fi
else
    # 如果不存在,则添加 http://127.0.0.1:7890
    echo "export http_proxy=http://127.0.0.1:7890" >> "$file_path"
    echo "export https_proxy=http://127.0.0.1:7890" >> "$file_path"
    echo "已添加"
fi
source /etc/profile
EOF
cat << EOF >> /apps/work/clash/start_service.sh
#!/bin/bash
# 修改启动路径
sudo clash -d /apps/work/clash 
source /etc/profile
EOF
cat << EOF >> /apps/work/clash/stop_service.sh
#!/bin/bash

# 使用 pgrep 命令查找包含 "clash" 关键字的进程 ID
pids=$(pgrep -f "clash")

# 判断是否找到匹配的进程
if [ -n "$pids" ]; then
    # 循环遍历进程 ID 并杀死对应进程
    for pid in $pids; do
        kill "$pid"
    done
    echo "已杀死进程"
else
    echo "未找到匹配的进程"
fi
EOF
  1. 编写systemd 服务,将clash转变为系统服务
cat << EOF >> /etc/systemd/system/clash.service
[Unit]
Description=clash

[Service]
ExecStartPre=/apps/work/clash/pre_start_serivce.sh
ExecStart=/apps/work/clash/start_service.sh
ExecStop=/apps/work/clash/stop_service.sh
ExecStopPost=/apps/work/clash/post_stop_service.sh

[Install]
WantedBy=multi-user.target
EOF
  1. 最后剩下的就是看个人需不需要设定开机自启和启动systemd服务的命令了
# 设置开机自启
systemctl enable clash

# 开启clash
systemctl start clash

# 停止clash
systemctl stop clash