Linux 拷贝文件命令详解大全
📁 一、主要拷贝命令对比
🔧 二、cp 命令详解
基本语法
cp [选项] 源文件 目标文件cp [选项] 源文件... 目标目录
常用参数详解
| | | |
-r / -R | | cp -r dir1 dir2 | |
-a | | cp -a src dst | |
-p | | cp -p file1 file2 | |
-u | | cp -u src dst | |
-i | | cp -i file1 file2 | |
-f | | cp -f file1 file2 | |
-l | | cp -l file1 file2 | |
-s | | cp -s file1 file2 | |
-v | | cp -v file1 file2 | |
-t | | cp file1 file2 -t dir/ | |
-b | | cp -b file1 file2 | |
--backup | | cp --backup=numbered | |
-T | | cp -T src dst | |
--reflink | | cp --reflink=auto | |
-n | | cp -n src dst | |
高级组合示例
# 1. 完整备份目录cp -a /home/user /backup/user_backup# 2. 同步更新目录cp -rup /newdata/* /olddata/# 3. 带备份的复制cp -ab --suffix=.bak file.txt file_new.txt# 4. 批量复制并编号备份cp --backup=numbered *.txt backup/# 5. 使用写时复制(Btrfs/ZFS)cp --reflink=auto large_file.iso backup/
cp 优缺点
优点:
缺点:
场景推荐:
🔄 三、rsync 命令详解
基本语法
rsync [选项] 源 目标
核心参数详解
| | | |
-a | -rlptgoD | | |
-v | | | |
-z | | | |
-P | --progress --partial | | |
-r | | | |
-l | | | |
-p | | | |
-t | | | |
-g | | | |
-o | | | |
-D | | | |
-H | | | |
-A | | | |
-X | | | |
-S | | | |
-n | --dry-run | | |
--delete | | | |
--exclude | | | |
--include | | | |
--bwlimit | | | |
--checksum | | | |
-c | | | |
-u | --update | | |
--size-only | | | |
--existing | | | |
--ignore-existing | | | |
-h | --human-readable | | |
--stats | | | |
-e | | | |
高级用法示例
# 1. 完整备份(保留一切)rsync -avAXHS --progress /source/ /backup/# 2. 远程同步(压缩+限速)rsync -avzP --bwlimit=10000 -e ssh /local/ user@host:/remote/# 3. 增量备份(硬链接节省空间)rsync -av --link-dest=/backup/previous/ /source/ /backup/current/# 4. 镜像同步(完全一致)rsync -av --delete /source/ /destination/# 5. 排除特定文件rsync -av --exclude='*.tmp' --exclude='.git/' src/ dst/# 6. 仅同步修改的文件rsync -av --checksum src/ dst/# 7. 带宽限制(10MB/s)rsync -av --bwlimit=10240 src/ user@host:dst/
rsync 优缺点
优点:
缺点:
场景推荐:
🔐 四、scp 命令详解
基本语法
scp [选项] 源文件 目标文件scp [选项] 源文件... 目标目录
参数详解
| | | |
-r | | scp -r dir user@host:/path | |
-P | | scp -P 2222 file host:/path | |
-p | | scp -p file host:/path | |
-C | | scp -C file host:/path | |
-q | | scp -q file host:/path | |
-v | | scp -v file host:/path | |
-c | | scp -c aes256-ctr file host:/path | |
-i | | scp -i key.pem file host:/path | |
-l | | scp -l 1000 file host:/path | |
-o | | scp -o "StrictHostKeyChecking=no" | |
-B | | scp -B file host:/path | |
-S | | scp -S /path/ssh file host:/path | |
-3 | | scp -3 src host1:dst | |
使用示例
# 1. 本地到远程scp file.txt user@192.168.1.100:/home/user/# 2. 远程到本地scp user@host:/path/file.txt .# 3. 远程到远程(通过本地中转)scp -3 user1@host1:/file user2@host2:/path# 4. 保留属性复制目录scp -rp /local/dir user@host:/remote/# 5. 指定端口和密钥scp -P 2222 -i ~/.ssh/key.pem file host:/path# 6. 限制带宽(500KB/s)scp -l 4000 large_file host:/path # 4000 Kbit/s = 500KB/s
scp 优缺点
优点:
缺点:
场景推荐:
📦 五、tar 命令详解(用于复制)
管道复制模式
# 保留属性的目录复制(cd /source && tar cf - .) | (cd /dest && tar xf -)# 带压缩的远程复制tar czf - /source | ssh user@host "cd /dest && tar xzf -"# 排除文件的复制tar --exclude='*.tmp' -cf - . | (cd /dest && tar xf -)
参数说明
优点:保留所有属性,适合管道操作缺点:需要两次磁盘读写,大文件效率低
💾 六、dd 命令详解
块级复制
# 磁盘克隆ddif=/dev/sda of=/dev/sdb bs=4M status=progress# 文件复制ddif=input.iso of=output.iso bs=1M# 创建空文件ddif=/dev/zero of=1g.bin bs=1M count=1024
关键参数
| | |
if= | | |
of= | | |
bs= | | |
count= | | |
skip= | | |
seek= | | |
conv= | | |
优点:底层操作,适合磁盘/镜像缺点:不适合普通文件操作
📊 七、场景推荐表
| | | |
| 本地小文件 | cp | cp file1 file2 | |
| 本地目录备份 | cp -a | cp -a src/ dst/ | |
| 远程文件传输 | scp | scp file user@host:/path | |
| 大文件远程传输 | rsync -zP | rsync -avzP src/ host:dst/ | |
| 增量备份 | rsync | rsync -av --link-dest | |
| 目录同步 | rsync --delete | rsync -av --delete src/ dst/ | |
| 磁盘克隆 | dd | dd if=/dev/sda of=/dev/sdb | |
| 管道传输 | tar | | |
| 脚本中复制 | cp | cp -f src dst | |
| 带宽限制传输 | rsync --bwlimit | rsync --bwlimit=1000 | |
| 加密传输 | scp | scp -c aes256 file host:/ | |
| 大量小文件 | rsync | rsync -a src/ dst/ | |
| 保留硬链接 | cp -l | cp -al src/ dst/ | |
| 试运行测试 | rsync -n | rsync -avn src/ dst/ | |
| 排除特定文件 | rsync --exclude | rsync --exclude='*.log' | |
⚡ 八、性能对比与技巧
速度对比(大致)
dd (块复制) > cp > rsync(首次) > scp > tar管道rsync(增量) > 所有(增量时)
优化技巧
# 1. 调整块大小(dd/cp)dd bs=4M # 一般4M-8M最佳cp --reflink # Btrfs/ZFS用写时复制# 2. rsync并行传输# 使用多个rsync进程for i in {1..4}; do rsync -a src/part$i dst/ &done# 3. 避免元数据开销(大量小文件)# 先tar打包,再传输tar cf - src/ | ssh host "cd dst && tar xf -"# 4. 内存盘加速cp src/ /dev/shm/tmp/ # 使用tmpfs# 5. 使用ionice降低磁盘影响ionice -c2 -n7 cp -a src/ dst/
🔐 九、安全注意事项
1. 权限保留
# 可能需要的操作sudocp -a src/ dst/ # 保留root权限文件sudo rsync -avAX src/ dst/ # 保留所有属性
2. 符号链接处理
# 不同选择cp -L # 跟随链接(复制内容)cp -P # 保留链接(复制链接本身)rsync -l # 保留符号链接
3. 敏感文件
# 避免复制特殊文件cp --no-preserve=mode,ownership src/ dst/rsync --chmod=ugo=rwX src/ dst/ # 重置权限
📈 十、监控与验证
验证复制结果
# 1. 校验和验证md5sum source.filemd5sum dest.file# 2. 目录差异diff -r src/ dst/# 3. 文件数量find src/ -type f | wc -lfind dst/ -type f | wc -l# 4. 大小统计du -sh src/ dst/
进度监控
# rsync进度rsync -av --progress src/ dst/# pv监控管道tar cf - src/ | pv | tar xf - -C dst/# 后台监控watch -n1 'du -sh dst/'
✅ 十一、终极选择指南
简单决策流程
需要远程传输?├── 是 → 需要增量/断点续传?│ ├── 是 → rsync -avzP│ └── 否 → scp└── 否 → 本地复制 ├── 需要增量同步? → rsync -a ├── 简单快速复制? → cp ├── 磁盘/镜像克隆? → dd └── 管道/流处理? → tar管道
黄金法则
- 1. 日常备份:
rsync -av /source/ /backup/ - 2. 远程传输:
rsync -avzP -e ssh src/ user@host:dst/ - 4. 安全脚本:
cp -f src dst (明确覆盖) - 5. 大文件传输:
rsync -avzP --bwlimit=10000
🎯 总结表格
| | | |
| cp | cat | cp -a src dst |
| rsync | | rsync -av --delete src/ dst/ |
| scp | rsync | scp -rp src/ user@host:dst/ |
| rsync | tar | rsync -av --link-dest |
| dd | cat | dd if=/dev/sda of=/dev/sdb |
| rsync | tar | rsync -a src/ dst/ |
| rsync | scp | rsync --bwlimit=1024 |
| cp -a | rsync -l | cp -al src/ dst/ |
掌握这些命令的组合使用,能让你在 Linux 文件操作中游刃有余!