以下是完整的 Linux 命令流程,用于:

  1. 从 Gitee 下载源码为 zip 格式
  2. 解压到指定文件夹
  3. 通过 SSH 上传到云服务器的指定目录

✅ 前提条件

  • 本地机器运行 Linux 或 macOS(或 WSL)
  • 已安装 wgetunzipscprsync(通常默认已安装)
  • 可访问 Gitee
  • 有云服务器的 SSH 访问权限(用户名、IP、端口、目标路径)

🔧 完整命令流程(附详细解释)

# 1. 定义变量(便于修改)
REPO_URL="https://gitee.com/用户名/仓库名/repository/archive/master.zip"
ZIP_FILE="repo-master.zip"
LOCAL_DIR="/tmp/myproject"
TARGET_DIR="/home/user/myproject"
SERVER_USER="user"
SERVER_IP="123.456.789.123"
SERVER_PORT="22"

# 2. 创建本地目标文件夹
mkdir -p $LOCAL_DIR

# 3. 下载 Gitee 仓库的 zip 包
wget -O $ZIP_FILE $REPO_URL

# 4. 解压 zip 文件到指定本地目录
unzip -o $ZIP_FILE -d $LOCAL_DIR

# 5. 使用 scp 将文件上传到云服务器
scp -r -P $SERVER_PORT $LOCAL_DIR/* $SERVER_USER@$SERVER_IP:$TARGET_DIR

# 6. (可选)清理本地临时文件
rm -f $ZIP_FILE
rm -rf $LOCAL_DIR

📌 详细解释

🔹 第一步:定义变量

REPO_URL="https://gitee.com/用户名/仓库名/repository/archive/master.zip"
  • Gitee 提供了直接下载某个分支(如 mastermain)为 zip 的链接。
  • 示例:若仓库是 https://gitee.com/dogedoge/test-project,则下载链接为:
    https://gitee.com/dogedoge/test-project/repository/archive/master.zip
    

💡 你可以在 Gitee 页面点击 “克隆/下载” → “下载 ZIP” 获取实际链接。


🔹 第二步:创建本地目录

mkdir -p $LOCAL_DIR
  • -p 表示如果父目录不存在则自动创建。
  • 这个目录将用来存放解压后的代码。

🔹 第三步:下载 ZIP 包

wget -O $ZIP_FILE $REPO_URL
  • wget 是下载工具。
  • -O 指定保存的文件名(覆盖默认命名)。
  • 如果提示 wget: command not found,请先安装:
    sudo apt install wget -y   # Ubuntu/Debian
    sudo yum install wget -y   # CentOS/RHEL
    

🔹 第四步:解压 ZIP 文件

unzip -o $ZIP_FILE -d $LOCAL_DIR
  • unzip 解压 zip 文件。
  • -o 表示覆盖已有文件,不提示。
  • -d $LOCAL_DIR 指定解压目标目录。
  • 如果没有 unzip,安装:
    sudo apt install unzip -y
    

⚠️ 注意:Gitee 下载的 zip 文件通常会把所有内容放在一个子目录中,例如 repository-master-xxxxx/。如果你希望只传源码内容,可能需要进入该子目录再复制。


🔹 第五步:上传到云服务器

scp -r -P $SERVER_PORT $LOCAL_DIR/* $SERVER_USER@$SERVER_IP:$TARGET_DIR
  • scp 是安全拷贝命令,基于 SSH。
  • -r 表示递归复制整个目录。
  • -P 指定 SSH 端口(注意大写 P),例如 22、2222 等。
  • $LOCAL_DIR/* 表示目录下的所有文件(避免传外层目录本身)
  • 目标格式:用户@IP:路径

🔐 执行时会提示输入密码。如需免密,请配置 SSH 公钥认证。

✅ 配置免密登录(推荐)
# 生成密钥(如未生成)
ssh-keygen -t rsa -b 2048

# 上传公钥到服务器(实现免密)
ssh-copy-id -p $SERVER_PORT $SERVER_USER@$SERVER_IP

之后 scpssh 就不需要每次输入密码了。


🔹 第六步:清理临时文件(可选)

rm -f $ZIP_FILE
rm -rf $LOCAL_DIR
  • 删除本地下载和解压的文件,节省空间。
  • -f 强制删除,不报错。
  • -rf 递归强制删除目录。

🔄 替代方案:使用 rsync(更高效同步)

如果你要频繁上传,建议使用 rsync

rsync -avz -e "ssh -p $SERVER_PORT" $LOCAL_DIR/ $SERVER_USER@$SERVER_IP:$TARGET_DIR
  • -a 归档模式(保留权限、时间等)
  • -v 显示过程
  • -z 压缩传输
  • -e "ssh -p" 指定 SSH 端口

🛠️ 实际例子(替换为你自己的信息)

# 示例:下载 Gitee 上的 test-demo 项目主分支
REPO_URL="https://gitee.com/dogedoge/test-demo/repository/archive/main.zip"
ZIP_FILE="test-demo.zip"
LOCAL_DIR="/tmp/test-demo"
TARGET_DIR="/var/www/html/test-demo"
SERVER_USER="ubuntu"
SERVER_IP="49.123.456.78"
SERVER_PORT="22"

mkdir -p $LOCAL_DIR
wget -O $ZIP_FILE $REPO_URL
unzip -o $ZIP_FILE -d $LOCAL_DIR
scp -r -P $SERVER_PORT $LOCAL_DIR/* $SERVER_USER@$SERVER_IP:$TARGET_DIR
rm -f $ZIP_FILE
rm -rf $LOCAL_DIR

❗常见问题与解决

问题解决方法
wget: command not foundsudo apt install wget
unzip: command not foundsudo apt install unzip
Permission denied检查服务器目录权限,或使用 sudo
Connection refused检查服务器 IP、端口、防火墙、SSH 是否开启
Gitee 下载限速登录后使用私人令牌生成授权下载链接(进阶)

✅ 总结

这套脚本适用于自动化部署简单项目。你可以将其保存为 .sh 脚本文件运行:

chmod +x deploy.sh
./deploy.sh

如需进一步自动化(比如定时拉取、构建),可结合 cron 或 CI/CD 工具。


需要我帮你生成一个 可直接运行的脚本模板 吗?只需提供:

  • Gitee 仓库地址
  • 分支名(如 main/master)
  • 服务器 IP、用户名、端口、目标路径

更多推荐