在 Linux 系统中,有多种命令可用于文件传输,适用于不同场景(本地传输、网络传输、不同协议等)。以下是常用的文件传输命令:
1. 本地文件传输命令
cp
- 复制文件 / 目录
最基础的本地文件复制命令
bash
# 复制文件
cp 源文件 目标路径# 复制目录(递归)
cp -r 源目录 目标路径# 示例:复制 file.txt 到 /tmp 目录
cp file.txt /tmp/# 示例:复制 dir1 及其内容到 dir2
cp -r dir1 dir2/
mv
- 移动 / 重命名文件
可用于本地移动文件,也可重命名
bash
# 移动文件
mv 源文件 目标路径# 重命名文件
mv 旧文件名 新文件名# 示例:将 file.txt 移动到 /home/user 目录
mv file.txt /home/user/# 示例:重命名 file.txt 为 newfile.txt
mv file.txt newfile.txt
2. 网络文件传输命令(基于 SSH)
scp
- 安全复制(SSH 协议)
通过 SSH 加密传输文件,支持本地与远程、远程与远程之间的传输
bash
# 本地 → 远程
scp 本地文件 用户名@远程IP:远程路径# 远程 → 本地
scp 用户名@远程IP:远程文件 本地路径# 传输目录(-r 递归)
scp -r 本地目录 用户名@远程IP:远程路径# 指定端口(-P,大写)
scp -P 2222 file.txt user@192.168.1.1:/tmp/
(详细用法可参考之前的
scp
说明)sftp
- 安全文件传输协议(SSH 协议)
交互式的文件传输工具,类似 FTP 但基于 SSH 加密
bash
# 连接远程主机
sftp 用户名@远程IP# 常用交互命令
get 远程文件 # 下载远程文件到本地
put 本地文件 # 上传本地文件到远程
ls # 列出远程目录
cd # 切换远程目录
lls # 列出本地目录
lcd # 切换本地目录
quit/exit # 退出
3. 其他网络传输命令
rsync
- 高效同步工具
适用于备份和镜像,仅传输差异内容,速度快
bash
# 本地同步目录
rsync -av 源目录 目标目录# 远程同步(本地 → 远程)
rsync -av 本地目录 用户名@远程IP:远程路径# 远程同步(远程 → 本地)
rsync -av 用户名@远程IP:远程目录 本地路径# 选项说明:
# -a:归档模式(递归+保留权限等)
# -v:显示详细信息
# -z:传输时压缩
# --delete:删除目标中源没有的文件(保持完全一致)
wget
- 下载网络文件
通过 HTTP、HTTPS、FTP 等协议下载文件
bash
# 下载文件到当前目录
wget https://example.com/file.zip# 指定保存文件名
wget -O newname.zip https://example.com/file.zip# 后台下载
wget -b https://example.com/largefile.iso# 断点续传
wget -c https://example.com/largefile.iso
curl
- 多功能传输工具
支持多种协议,可下载或上传文件
bash
# 下载文件(类似 wget)
curl -O https://example.com/file.txt # 保存为原文件名
curl -o newfile.txt https://example.com/file.txt # 指定文件名# 上传文件(FTP 示例)
curl -T localfile.txt ftp://ftp.example.com/ -u 用户名:密码
ftp
- 文件传输协议(非加密)
传统的 FTP 工具,不加密,安全性较低,建议优先使用
sftp
bash
# 连接 FTP 服务器
ftp ftp.example.com# 登录后常用命令
get 远程文件 # 下载
put 本地文件 # 上传
ls、cd、quit # 类似 sftp
总结
- 本地传输:优先用
cp
、mv
- 远程安全传输:首选
scp
(简单传输)、sftp
(交互式)、rsync
(高效同步) - 下载网络文件:
wget
或curl
- 注意:涉及远程传输时,需确保目标主机开启相应服务(如 SSH 服务用于
scp
/sftp
)。
rsync 详解
rsync
是一款高效的文件同步工具,全称为 "remote sync"。它最核心的特点是增量传输—— 只传输源和目标之间的差异部分,而不是完整复制所有内容,这使得它在备份、镜像和大文件传输场景中非常高效。基本原理
rsync
通过对比源和目标文件的校验和(checksum)来识别差异,只传输变化的部分,大幅节省带宽和时间。它支持本地同步和跨网络同步(基于 SSH 或 rsync daemon)。基本语法
bash
rsync [选项] 源路径 目标路径
- 源路径 / 目标路径可以是:
- 本地路径(如
/home/user/file
或./dir
) - 远程路径(如
user@remotehost:/path
)
- 本地路径(如
常用选项(核心参数)
1. 模式与递归
-r
:递归同步目录(但不保留文件属性)-a
:归档模式(最常用),等价于-rlptgoD
,表示:-r
递归-l
保留符号链接-p
保留权限-t
保留修改时间-g
保留组信息-o
保留所有者信息-D
保留设备文件和特殊文件
2. 压缩与显示
-v
:显示详细输出(verbose)-z
:传输时压缩数据(节省带宽,适合网络传输)-h
:以人类可读的格式显示大小(如 K、M、G)
3. 删除与镜像
--delete
:删除目标路径中源路径没有的文件(使目标与源完全一致)--delete-excluded
:删除被排除的文件
4. 排除与包含
--exclude=PATTERN
:排除匹配模式的文件 / 目录--include=PATTERN
:包含匹配模式的文件 / 目录(优先级高于 exclude)
5. 其他实用选项
-n
:模拟运行(dry run),只显示会执行的操作,不实际同步-P
:等价于--partial --progress
,保留部分传输的文件并显示进度-e "ssh -p 端口"
:指定 SSH 端口(用于远程同步)
典型使用场景
1. 本地目录同步
bash
# 将 dir1 同步到 dir2(保持结构和属性)
rsync -av /path/to/dir1 /path/to/dir2# 同步时删除 dir2 中 dir1 没有的文件(完全镜像)
rsync -av --delete /path/to/dir1 /path/to/dir2
2. 本地 → 远程同步(基于 SSH)
bash
# 将本地目录同步到远程服务器
rsync -avz /local/path user@remotehost:/remote/path# 指定 SSH 端口(如 2222)
rsync -avz -e "ssh -p 2222" /local/path user@remotehost:/remote/path
3. 远程 → 本地同步(基于 SSH)
bash
# 将远程目录同步到本地
rsync -avz user@remotehost:/remote/path /local/path
4. 排除特定文件 / 目录
bash
# 同步时排除 .log 文件和 tmp 目录
rsync -av --exclude="*.log" --exclude="tmp/" /source /dest
5. 断点续传大文件
bash
# 传输大文件时保留部分传输的文件并显示进度
rsync -avP large_file.iso user@remotehost:/backup/
6. 模拟运行(测试命令效果)
bash
# 查看同步会执行哪些操作,不实际修改文件
rsync -avn --delete /source /dest
与其他工具的对比
- vs
scp
:rsync
只传差异部分,更适合重复同步;scp
每次都是全量复制,适合单次传输。 - vs
cp
:rsync
支持增量同步、远程传输和更精细的控制;cp
仅用于本地全量复制。
注意事项
- 路径末尾的
/
影响同步行为:rsync -av /source/dir /dest
:会在dest
下创建dir
并同步内容rsync -av /source/dir/ /dest
:直接将dir
内的内容同步到dest
中
- 权限问题:远程同步时确保对源有读权限,对目标有写权限
--delete
选项慎用,可能会误删重要文件(建议先用-n
测试)
通过灵活组合选项,
rsync
可以满足从简单文件复制到复杂系统备份的各种需求,是 Linux 系统中不可或缺的工具之一。