Skip to content
VDS · 机器访问

scp 与 rsync:复制文件

在您的电脑和服务器之间传输文件的两个命令:什么时候 scp 就够了、rsync 有什么用,以及如何避免因末尾斜杠覆盖别人的目录。

更新于 2026年8月23日

图形化客户端适合临时改一次文件,但部署和备份用一条命令更省事。

scp:一次性复制

语法和 cp 一样,只是把路径换成了机器地址:

scp dump.sql root@203.0.113.10:/root/
scp root@203.0.113.10:/var/log/nginx/error.log ./
scp -r ./site root@203.0.113.10:/var/www/

第一条命令发送文件,第二条把文件拉回来,第三条复制整个目录(-r)。

如果 SSH 运行在其他端口,用大写的 -P 指定:

scp -P 2222 dump.sql root@203.0.113.10:/root/

有了 ~/.ssh/config 文件,命令会更短:scp dump.sql vds:/root/。

rsync:同步

rsync 只传输差异部分,可以续传中断的传输并显示进度。对于反复部署来说,它要快上许多倍。

rsync -avz --progress ./site/ root@203.0.113.10:/var/www/example.com/
参数作用
-a保留权限、时间戳、链接
-v打印文件列表
-z压缩数据流
--progress显示传输进度
--delete删除机器上您没有的文件
--exclude跳过不需要的内容

一次干净部署的示例:

rsync -avz --delete \
  --exclude '.git' --exclude 'node_modules' --exclude '.env' \
  ./site/ vds:/var/www/example.com/

把副本从机器拉到本地:

rsync -avz vds:/root/backup-2026-08-23.tar.gz ./backups/

源路径末尾的斜杠表示“目录的内容”。./site/ 会把文件放进目标目录里,./site 则会在目标目录里创建一个 site 子目录。一半所谓“部署丢失”的问题都是它造成的。

小心 --delete

--delete 参数会让机器上的目录变成您本地目录的精确副本:多出来的内容会被直接删除,不会询问。先做一次试运行:

rsync -avzn --delete ./site/ vds:/var/www/example.com/

-n 参数只显示会发生什么。确认无误后,去掉 n 即可。

速度

磁盘速度按套餐限制:每个核心写入 60 MB/s(不低于 60,也不高于 400),读取是写入的两倍,突发速度可达上限的三倍,持续 30 秒。网络带宽最高 500 Mbit/s。在 VDS-1 上,上传大压缩包会触及写入上限,这是正常现象,不是故障。查看当前情况:

df -h
iostat -x 2

常见错误

现象原因
Permission denied您正在写入不属于自己用户的目录——请以 root 登录或更改所有者
No such file or directory机器上不存在该目录,而 scp 不会创建它:请先执行 mkdir -p
文件放到了上一层路径末尾的斜杠多了或少了
rsync: command not found请在两端都安装该软件包:apt install -y rsync
部署后网站返回 403所有者未设置:chown -R www-data:www-data /var/www/example.com

如果您更喜欢图形化客户端,请参阅通过 SFTP 传输文件。