cp、scp、rsync命令详解

1. cp命令(本地复制)

基本用法

bash 复制代码
cp [选项] 源文件 目标文件
cp [选项] 源文件... 目录

常用选项

bash 复制代码
cp file1.txt file2.txt          # 复制文件
cp file.txt /path/to/directory/ # 复制到目录
cp -r dir1/ dir2/               # 递归复制目录
cp -i file1 file2              # 交互式(覆盖前询问)
cp -u source dest              # 仅更新(源比目标新时复制)
cp -v file1 file2              # 显示详细信息
cp -p file1 file2              # 保留权限、时间等属性
cp -a dir1/ dir2/              # 归档模式(保留所有属性)

示例

bash 复制代码
# 基本复制
cp document.pdf backup.pdf

# 复制目录
cp -r photos/ backup_photos/

# 保留所有属性
cp -a project/ project_backup/

# 复制多个文件到目录
cp file1.txt file2.txt /tmp/

2. scp命令(安全远程复制)

基本语法

bash 复制代码
scp [选项] [[用户@]主机1:]文件1 [[用户@]主机2:]文件2

常用选项

bash 复制代码
-r    # 递归复制目录
-P    # 指定端口(注意是大写P)
-p    # 保留文件属性
-C    # 启用压缩
-q    # 静默模式
-v    # 详细输出(调试用)

示例

bash 复制代码
# 本地 → 远程
scp file.txt user@remote:/path/
scp -r dir/ user@remote:/path/

# 远程 → 本地
scp user@remote:/path/file.txt ./
scp user@remote:/path/dir/ ./ -r

# 远程 → 远程
scp user1@host1:/file user2@host2:/path

# 指定端口
scp -P 2222 file.txt user@remote:/path

# 压缩传输(适合大文件)
scp -C largefile.iso user@remote:/path

3. rsync命令(高级同步工具)

基本语法

bash 复制代码
rsync [选项] 源 目标

核心选项

bash 复制代码
-a, --archive           # 归档模式(-rlptgoD)
-v, --verbose           # 详细输出
-z, --compress          # 传输时压缩
-r, --recursive         # 递归目录
-u, --update            # 仅更新(跳过更新的文件)
--progress              # 显示传输进度
--delete                # 删除目标中源没有的文件
--exclude=PATTERN       # 排除文件/目录
--include=PATTERN       # 包含文件/目录
-e, --rsh=COMMAND       # 指定远程shell(如ssh)

常用模式示例

本地同步
bash 复制代码
# 基本同步(保留属性)
rsync -av source/ destination/

# 删除目标中多余的文件
rsync -av --delete source/ destination/

# 排除特定文件
rsync -av --exclude='*.tmp' source/ destination/
rsync -av --exclude={'*.log','temp/'} source/ destination/

# 只同步特定文件类型
rsync -av --include='*.txt' --include='*/' --exclude='*' source/ destination/
远程同步
bash 复制代码
# 本地 → 远程
rsync -avz /local/path/ user@remote:/remote/path/

# 远程 → 本地
rsync -avz user@remote:/remote/path/ /local/path/

# 使用SSH密钥和特定端口
rsync -avz -e "ssh -p 2222 -i ~/.ssh/key.pem" source/ user@remote:/path/

# 带宽限制(KB/s)
rsync -avz --bwlimit=1000 largefile/ user@remote:/path/
高级用法
bash 复制代码
# 干运行(测试不实际执行)
rsync -avn source/ destination/

# 部分传输(支持断点续传)
rsync -avz --partial source/ destination/

# 比较模式(显示差异)
rsync -avnc source/ destination/

# 备份(创建带时间戳的备份)
rsync -av --backup --backup-dir=/backup/old-$(date +%Y%m%d) source/ destination/

三者的对比

特性 cp scp rsync
用途 本地复制 远程安全复制 高效同步/复制
传输方向 本地→本地 本地↔远程 本地↔本地/远程
增量传输 ❌ 不支持 ❌ 不支持 ✅ 支持
断点续传 ❌ 不支持 ❌ 不支持 ✅ 支持
压缩传输 ❌ 不支持 ✅ 支持 ✅ 支持
保留属性 ✅ 支持 ✅ 支持 ✅ 支持
删除同步 ❌ 不支持 ❌ 不支持 ✅ 支持
效率 非常高(增量时)

使用场景建议

使用 cp 当:

  • 简单的本地文件复制
  • 快速复制小文件/目录
  • 不需要网络传输

使用 scp 当:

  • 简单的远程文件传输
  • 一次性传输任务
  • 需要SSH加密的安全传输

使用 rsync 当:

  • 需要增量同步(只传输变化部分)
  • 大文件或大量文件的传输
  • 需要断点续传功能
  • 定期备份任务
  • 需要删除目标多余文件
  • 需要复杂的包含/排除规则

实用技巧

  1. rsync作为高级cp

    bash 复制代码
    # 比cp -a更详细且可恢复
    rsync -av --progress source/ destination/
  2. 定时备份脚本

    bash 复制代码
    # 每天同步并保留7天备份
    rsync -av --delete --backup \
          --backup-dir=/backup/$(date +%Y%m%d) \
          /data/ /backup/latest/
  3. 快速对比目录

    bash 复制代码
    rsync -avnc dir1/ dir2/
  4. 排除列表文件

    bash 复制代码
    rsync -av --exclude-from='exclude-list.txt' source/ dest/

选择哪个命令取决于具体需求:简单复制用cp,简单远程传输用scp,复杂同步和备份用rsync。

相关推荐
сокол13 小时前
【网安-Web渗透测试-内网渗透】域环境权限维持
服务器·windows·网络安全·系统安全
十六年开源服务商14 小时前
2026服务器配置优化与WordPress运维实战指南
android·运维·服务器
LN花开富贵15 小时前
Ubuntu aarch64 架构安装 NoMachine 远程控制 避坑与实战
linux·运维·笔记·学习·ubuntu·嵌入式
取经蜗牛15 小时前
Windows 11 WSL + Ubuntu 24.04 安装指南
linux·windows·ubuntu
杨云龙UP16 小时前
Oracle RAC/ODA环境下如何准确查询PDB表空间已分配大小?一次说清Oracle表空间逻辑大小和ASM三副本实际占用_2026-05-19
linux·运维·数据库·sql·oracle·ffmpeg
东湖山上16 小时前
GTAC: A Generative Transformer for Approximate Circuits
服务器·人工智能·深度学习·transformer·gpu算力
2023自学中16 小时前
imx6ull开发板,Linux-c编程,识别 键盘、鼠标、触摸屏坐标
linux·嵌入式·开发板·应用编程
码点滴16 小时前
K8s配置与存储运维自动化:从隐形杀手到 AI Agent 安全闭环
运维·人工智能·自动化
步十人16 小时前
【Linux】环境配置
linux·运维·服务器
念恒1230616 小时前
MySQl安装
linux·运维·服务器