基础命令:cp(最常用)
适用场景:本地快速复制单个文件或中小型目录。
优势:系统内置,无需安装;操作简单。
常用参数:
-r:递归复制目录(必需)-v:显示复制进度(verbose)-p:保留文件属性(权限、时间戳)-u:仅复制源文件中更新的部分(增量复制)
示例:
# 递归复制目录(仅更新修改过的文件) cp -rupv /data/ /backup/
效率提示:
- 复制大量小文件时,先用
tar打包再复制(见下文)比直接cp -r更快。 - 避免复制软链接指向的原文件:添加
-P参数(默认会复制原文件)。
高效工具:rsync(远程/本地均适用)
适用场景:大型目录、增量备份、网络传输(如远程服务器同步)。
优势:增量复制(仅传输变化部分)、断点续传、压缩传输、保留文件属性。
安装:sudo apt install rsync(Debian/Ubuntu)或 sudo yum install rsync(CentOS/RHEL)
核心参数:
-a:归档模式(保留权限等属性,递归复制)-z:压缩传输(节省带宽)--progress:显示实时进度--delete:同步删除目标端多余文件
示例:
# 本地复制(增量同步目录) rsync -az --progress /source/ /destination/ # 远程复制(通过SSH) rsync -azP user@remote:/path/to/source/ /local/destination/
进阶技巧:
- 限速传输:
--bwlimit=5000(单位KB/s,避免带宽占满) - 排除文件:
--exclude="*.tmp" - 后台运行:搭配
nohup或screen防止中断
处理海量小文件:tar + 管道
适用场景:复制数百万个小文件(如日志、代码库),速度比 cp 快数倍。
原理:通过管道边打包边解压,减少磁盘I/O操作。
示例:
# 本地复制目录(保留属性) tar -cf - /source/ | (cd /destination/ && tar -xf -) # 远程复制(通过SSH) tar -czf - /source/ | ssh user@remote "tar -xzf - -C /destination/"
优势:
- 避免频繁磁盘寻址,大幅提升小文件复制效率。
- 支持压缩(
-z使用gzip /-j使用bzip2)节省传输时间。
块级复制:dd(磁盘/分区克隆)
适用场景:整块磁盘或分区的高精度复制(如备份系统盘)。
注意:操作不当会导致数据丢失!务必确认目标路径。
示例:
# 复制整个磁盘(sda到sdb) dd if=/dev/sda of=/dev/sdb bs=4M status=progress # 生成磁盘镜像文件 dd if=/dev/sda of=disk.img bs=4M conv=noerror,sync
参数解析:
bs=4M:设置块大小(提升大文件效率)status=progress:显示进度(较新版本支持)conv=noerror,sync:忽略错误并填充空块
实时监控复制进度
-
pv工具(管道查看器)
安装:sudo apt install pv
示例:# 监控文件复制进度 pv source.iso > /backup/source.iso # 结合tar监控目录复制 tar -cf - /data/ | pv | (cd /backup/ && tar -xf -)
-
rsync --progress
如前述示例,实时显示每个文件传输进度。
性能优化与避坑指南
-
选择合适工具
- 小文件 →
tar管道 - 大文件/远程同步 →
rsync - 磁盘克隆 →
dd
- 小文件 →
-
避免覆盖风险
使用-i参数(如cp -i)或rsync --backup防止误覆盖重要文件。 -
处理特殊文件
- 复制软链接:
cp -P或rsync -l(不跟踪原文件) - 保留SELinux属性:
rsync -aZ或cp --preserve=context
- 复制软链接:
-
提升速度技巧
- 关闭日志:对目标文件系统使用
mount -o noatime - 增加缓冲区:
dd或tar中调大bs值(如bs=128M)
- 关闭日志:对目标文件系统使用
总结建议
| 场景 | 推荐命令 | 关键优势 |
|---|---|---|
| 日常文件/目录复制 | cp -rpv |
简单快速 |
| 大型目录/远程同步 | rsync -azP |
增量备份、断点续传 |
| 海量小文件 | tar + 管道 |
减少I/O,速度提升显著 |
| 磁盘/分区克隆 | dd |
块级精确复制 |
重要提示:
- 操作前用
lsblk或df -h确认路径,避免覆盖错误目标。- 生产环境务必先测试!可使用
--dry-run参数(如rsync -anv)模拟运行。
通过结合场景选择工具,Linux复制操作可快至原来的2-5倍,对于TB级数据,建议先用小样本测试,再调整参数(如 rsync 的 --bwlimit 或 dd 的 bs 值)平衡速度与系统负载。
引用说明:
- GNU Coreutils 手册(
cp、dd命令)https://www.gnu.org/software/coreutils/ - Rsync 官方文档 https://rsync.samba.org/documentation.html
- Linux 内核文档(文件系统优化)https://www.kernel.org/doc/html/latest/
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/6685.html