一、cp
命令详解
1. 基本语法
cp [选项] 源文件或目录 目标文件或目录
2. 核心功能
- 本地文件/目录复制:支持单文件、多文件或目录的复制。
- 属性保留:可选保留权限、时间戳等元数据。
- 简单高效:适用于一次性复制任务。
3. 常用选项
选项 | 说明 |
---|
-r | 递归复制目录及其子内容。 |
-i | 覆盖前提示确认(交互模式)。 |
-p | 保留文件权限、所有者和时间戳。 |
-a | 归档模式(等效于 -rp ,保留所有元数据)。 |
-u | 仅当源文件比目标文件新时复制(增量更新)。 |
-v | 显示详细复制过程。 |
--backup | 覆盖前创建备份文件(备份文件名为目标文件加 ~ )。 |
-l | 创建硬链接而非复制(节省磁盘空间)。 |
-s | 创建符号链接(软链接)而非复制。 |
-f | 强制覆盖目标文件(不提示)。 |
4. 10个实用示例
示例 1:复制单个文件
cp file.txt /backup/file.txt
- 功能:将
file.txt
复制到 /backup
目录,保留文件名。 - 场景:快速备份单个文件。
示例 2:递归复制目录
cp -r /data/logs /backup/logs
- 功能:递归复制
/data/logs
目录及其子内容到 /backup/logs
。 - 场景:备份整个目录结构。
示例 3:保留文件属性
cp -p /var/www/config.ini /backup/config.ini
- 功能:复制时保留权限、所有者和时间戳。
- 场景:配置文件迁移需保持属性一致。
示例 4:交互式覆盖确认
cp -i *.log /backup
- 功能:复制所有
.log
文件到 /backup
,若目标存在则提示用户确认。 - 场景:避免意外覆盖重要文件。
示例 5:增量更新文件
cp -u /source/*.csv /destination
- 功能:仅复制
/source
中比 /destination
新的 .csv
文件。 - 场景:定期更新数据目录。
示例 6:创建硬链接
cp -l large_file.iso /backup/large_file.iso
- 功能:通过硬链接共享相同磁盘数据,不占用额外空间。
- 场景:节省磁盘空间的大文件多副本需求。
示例 7:创建软链接
cp -s /opt/app/bin/start.sh /usr/local/bin/start
- 功能:在
/usr/local/bin
中创建指向原始文件的软链接。 - 场景:简化路径调用。
示例 8:强制覆盖文件
cp -f critical_data.db /backup/critical_data.db
- 功能:强制复制,忽略目标文件是否存在。
- 场景:脚本中无需人工干预的自动化备份。
示例 9:归档模式复制
cp -a /home/user /backup/user
- 功能:完全保留目录结构、权限和时间戳。
- 场景:完整备份用户目录。
示例 10:备份覆盖文件
cp --backup=numbered file.txt /backup/file.txt
- 功能:若目标文件存在,会生成
file.txt.~1~
等备份文件。 - 场景:防止数据丢失的风险操作。
5. 高级用法
结合 find
过滤后复制
find /source -name "*.jpg" -exec cp {} /backup/images \;
- 功能:复制
/source
下所有 .jpg
文件到 /backup/images
。
批量重命名复制
cp file{1..10}.txt /backup/renamed_files/
- 功能:复制
file1.txt
到 file10.txt
到目标目录。
二、rsync
命令详解
1. 基本语法
rsync [选项] 源路径 目标路径
2. 核心功能
- 增量同步:仅传输变化部分,大幅减少数据传输量。
- 本地/远程同步:支持 SSH、RSH 等协议。
- 灵活过滤:可排除特定文件或目录。
- 带宽控制:限制传输速度避免影响网络。
3. 常用选项
选项 | 说明 |
---|
-a | 归档模式(保留权限、时间戳等,等效于 -rlptgoD )。 |
-v | 显示详细同步过程。 |
-z | 压缩传输数据(减少网络带宽占用)。 |
--delete | 删除目标中源不存在的文件(完全同步)。 |
--exclude | 排除指定文件或目录。 |
--exclude-from | 从文件读取排除规则。 |
--progress | 显示传输进度。 |
-b | 覆盖前备份文件(备份文件名为目标文件加 ~ )。 |
--dry-run | 模拟执行但不实际传输(用于测试)。 |
--partial | 保留部分传输的文件(便于断点续传)。 |
--bwlimit | 限制传输带宽(如 --bwlimit=1M )。 |
4. 10个实用示例
示例 1:本地目录同步
rsync -a /source/dir/ /backup/dir/
- 功能:将
/source/dir
同步到 /backup/dir
,保留所有属性。 - 场景:本地备份或镜像目录。
示例 2:远程服务器同步
rsync -avz /data/ user@remote:/backup/data/
- 功能:压缩传输本地
/data
到远程服务器的 /backup/data
。 - 场景:跨服务器备份。
示例 3:删除目标多余文件
rsync -av --delete /source/ /backup/
- 功能:完全同步,删除
/backup
中不存在于 /source
的文件。 - 场景:保持目标与源严格一致。
示例 4:排除特定文件
rsync -a --exclude="*.tmp" /source/ /backup/
- 功能:同步时跳过所有
.tmp
文件。 - 场景:忽略临时文件。
示例 5:从文件读取排除规则
rsync -a --exclude-from="exclude_list.txt" /source/ /backup/
- 文件内容:每行一个排除模式(如
*.log
、/temp/
)。 - 场景:复杂过滤需求的批量处理。
示例 6:带宽限制
rsync -avz --bwlimit=500K /large_files/ user@remote:/backup/
- 功能:限制传输速度为 500KB/s。
- 场景:避免占用生产网络带宽。
示例 7:增量备份
rsync -ab --backup-dir=/backup/old /source/ /backup/current/
- 功能:覆盖文件前,将旧文件移动到
/backup/old
目录。 - 场景:保留历史版本的数据备份。
示例 8:断点续传
rsync -avz --partial /bigfile.iso user@remote:/downloads/
- 功能:网络中断后重新执行命令可继续传输。
- 场景:大文件传输的容错处理。
示例 9:模拟执行(试运行)
rsync -avn --delete /source/ /backup/
- 功能:显示哪些文件会被删除或传输,但不实际操作。
- 场景:验证同步计划的安全性。
示例 10:同步符号链接
rsync -avl /source/ /backup/
- 功能:同步时保留符号链接本身(
-l
),而非链接指向的文件。 - 场景:维护软链接结构的备份。
5. 高级用法
通过 SSH 加密传输
rsync -avz -e "ssh -p 2222" /source/ user@remote:/backup/
- 功能:通过指定端口 2222 的 SSH 加密传输。
定时同步任务
crontab -e
0 3 * * * rsync -a --delete /source/ /backup/
三、cp
vs rsync
核心区别总结
1. 功能性对比
特性 | cp | rsync |
---|
设计目的 | 简单复制文件或目录。 | 增量同步、远程传输和高效数据管理。 |
增量传输 | 仅支持 -u 选项的简单增量。 | 原生支持增量传输(仅传输变化部分)。 |
远程同步 | 不支持。 | 支持本地与远程路径(如 user@host: )。 |
带宽控制 | 不支持。 | 支持 --bwlimit 限制传输速度。 |
文件排除 | 需结合 find 或 Shell 通配符。 | 原生支持 --exclude 和排除文件列表。 |
断点续传 | 需手动处理。 | 支持 --partial 保留部分文件。 |
硬链接/软链接处理 | 支持 -l 和 -s 。 | 默认保留链接,可通过 -L 复制目标文件。 |
备份功能 | 需 --backup 选项。 | 支持 -b 和自定义备份目录。 |
元数据保留 | -p 保留权限和时间戳。 | -a 保留所有属性(包括 ACL 和扩展属性)。 |
适用场景 | 单次简单复制或本地备份。 | 频繁同步、远程备份或大规模数据传输。 |
2. 性能与效率
-
cp
:
- 优点:简单快速,适合少量文件的一次性复制。
- 缺点:无增量传输,重复复制相同内容浪费资源。
-
rsync
:
- 优点:仅传输差异数据,节省时间和带宽。
- 缺点:首次同步可能较慢(需计算文件差异)。
3. 典型场景
-
使用 cp
:
- 复制单个配置文件到备份目录。
- 快速创建硬链接节省磁盘空间。
- 简单脚本中的文件操作。
-
使用 rsync
:
- 每日增量备份服务器数据到远程存储。
- 跨数据中心同步大型数据集。
- 维护开发环境与生产环境的一致性。
四、扩展内容
1. 结合使用场景的深度优化
rsync
的 --checksum
选项
rsync -avc --checksum /source/ /backup/
- 功能:通过校验和检测文件变化(即使文件时间戳未变)。
cp
与 tar
结合
tar cf - /source | (cd /backup && tar xvf -)
- 功能:保留所有属性的高效目录复制(类似
cp -a
)。
2. 错误处理与调试
rsync
的错误日志
rsync -av --log-file=rsync.log /source/ /backup/
cp
的权限问题
sudo cp -a /root/config /backup/