文章系Gemini自动生成 仅供参考
💡 前言:为什么我们需要命令行传输?
很多刚接触 VPS(虚拟专用服务器)的朋友,习惯使用 FileZilla 或 Xftp 这样的图形化工具。它们确实直观,但你是否遇到过这些尴尬时刻?
-
速度慢:上传成千上万个小文件(比如 WordPress 网站源码)时,速度慢到让人怀疑人生。
-
易中断:传大文件传了一半断网了,还得从头再来。
-
没界面:有时候你手里只有 SSH 终端,根本没法用鼠标拖拽。
今天我们要学习 Linux 系统自带的两个“神器”:SCP 和 Rsync。它们不需要安装额外软件,一行命令就能搞定文件传输,既快又稳,是每一位服务器玩家的必备技能。
第一部分:SCP —— 简单粗暴的“搬运工”
1. 什么是 SCP?
SCP (Secure Copy) 是基于 SSH 协议的文件传输工具。
通俗理解:它就像是电脑上的 Ctrl+C (复制) 和 Ctrl+V (粘贴),只不过这次是跨越了两台电脑。它的特点是简单、通用,几乎所有 Linux 系统都默认安装了它。
2. 基本语法公式
SCP 的命令逻辑非常符合直觉:
Bash
scp [选项] 源文件 目标位置
记忆口诀:
scp 谁 去哪里
3. 实战场景(手把手演示)
场景 A:把本地文件“扔”到服务器(上传)
假设你电脑里有一个文件叫 demo.zip,你想把它上传到服务器的 /root 目录下。
-
服务器 IP:192.168.1.100
-
用户名:root
命令:
Bash
scp demo.zip root@192.168.1.100:/root/
解释:把本地的 demo.zip 复制到 root用户 在 192.168.1.100 这台机器上的 /root/ 文件夹里。
场景 B:把服务器文件“拉”回本地(下载)
假设你想把服务器上的数据库备份 /home/backup.sql 下载到你现在的电脑桌面上(假设当前就在桌面目录下)。
命令:
Bash
scp root@192.168.1.100:/home/backup.sql .
注意:命令最后那个小点 . 代表“当前目录”,千万别漏了!
场景 C:传输整个文件夹
默认情况下 SCP 只能传单个文件。如果要传文件夹,需要加一个参数 -r (Recursive,递归)。
命令:
Bash
scp -r my_website_folder root@192.168.1.100:/var/www/html/
4. 常见问题:如果服务器端口不是 22 怎么办?
很多为了安全的 VPS 会修改默认 SSH 端口(比如改为 2222)。这时候需要用 -P (大写) 参数。
Bash
scp -P 2222 demo.zip root@192.168.1.100:/root/
第二部分:Rsync —— 智能高效的“同步大师”
1. 为什么有了 SCP 还要学 Rsync?
SCP 很傻,它每次不管文件有没有变动,都会重新覆盖拷贝一遍。
Rsync (Remote Sync) 则聪明得多。它在传输前会先对比两边的文件:
-
增量传输:只传修改过的部分。
-
断点续传:传一半断了,下次运行命令接着传,不用重头开始。
-
保持属性:可以完美保留文件的创建时间、权限等信息。
通俗理解:SCP 是搬家公司,不管你家东西乱不乱,全部打包拉走;Rsync 是强迫症整理师,只处理那些位置变了或新买的东西。
2. 黄金组合参数:-avzP
Rsync 的参数很多,但对于 99% 的小白用户,记住这个“万能钥匙”就够了:
rsync -avzP
-
-a(Archive):归档模式,保留所有文件属性(权限、时间、软链接等),且默认递归(包含文件夹)。 -
-v(Verbose):啰嗦模式,让你看到传输过程。 -
-z(Compress):压缩传输,省流量,传文本文件时速度飞快。 -
-P(Progress):显示进度条,并支持断点续传。
3. 实战场景
场景 A:同步网站代码到服务器
假设你在本地更新了网站代码 my_blog/,现在要同步到服务器。
命令:
Bash
rsync -avzP my_blog/ root@192.168.1.100:/var/www/html/my_blog/
第一次运行会全量上传,第二次运行如果只改了一个 index.html,它就只会瞬间传输这一个文件!
场景 B:非标准端口的同步
Rsync 指定端口稍微复杂一点点,需要用 -e 参数包裹 ssh 命令。假设端口是 8888:
命令:
Bash
rsync -avzP -e "ssh -p 8888" my_blog/ root@192.168.1.100:/var/www/html/
4. 一个必须要懂的“斜杠 /” 陷阱 ⚠️
这是 Rsync 最容易踩坑的地方,请务必注意!
-
写法 1(不带斜杠):
rsync -av my_folder destination/- 结果:会在目标目录下创建一个名为
my_folder的文件夹。
- 结果:会在目标目录下创建一个名为
-
写法 2(带斜杠):
rsync -av my_folder/ destination/- 结果:会将
my_folder里面的内容 直接撒在目标目录下,而不会创建my_folder这个目录本身。
- 结果:会将
口诀:有斜杠是“只传内容”,没斜杠是“连皮带肉”。
给新手的建议:
-
如果你只是临时想把一个配置文件传到服务器,或者从服务器拿个日志看一眼,用 SCP,因为它命令短,敲得快。
-
如果你是在维护网站、备份几十个 G 的数据,或者网络环境不稳定,一定要用 Rsync。它是专业的选择。