Linux 【06-cp命令超详细教程】

Linux cp 命令超详细教程

cp(copy)是 Linux 复制文件/目录的核心命令,支持单文件、多文件、整目录复制、覆盖、保留属性、递归复制等场景,下面分语法、常用参数、实战案例、避坑要点逐一讲解。

一、基础语法

bash 复制代码
# 1. 复制单个文件
cp [选项] 源文件 目标文件

# 2. 复制多个文件/文件到目录
cp [选项] 源文件1 源文件2 ... 目标目录

# 3. 复制目录(必须加递归参数)
cp [选项] 源目录 目标目录

规则:

  • 目标已存在是目录:源文件/目录会放进该目录内
  • 目标不存在:新建目标(文件/目录)并重命名
  • 目标已存在是文件:默认直接覆盖内容

二、常用核心参数(高频必记)

参数 作用
-r / -R 递归复制目录(复制文件夹必备)
-f 强制覆盖,不提示(force)
-i 覆盖前交互式询问(安全模式)
-v 显示复制过程(verbose,可视化进度)
-p 保留文件权限、时间戳、属主等属性
-a 归档模式 = -r + -p + 保留软链接复制目录首选
-n 不覆盖已有文件(no clobber)
-u 仅复制源文件比目标新或目标不存在的文件(增量更新)
-s 创建软链接(而非复制文件)

三、实战案例(从简单到复杂)

1. 复制单个文件

① 同目录复制(改名)
bash 复制代码
# 把 test.txt 复制为 test_bak.txt
cp test.txt test_bak.txt
② 复制到其他目录(文件名不变)
bash 复制代码
# 将 test.txt 复制到 /home/user/ 目录
cp test.txt /home/user/
③ 复制到目录并改名
bash 复制代码
cp test.txt /home/user/new_test.txt

2. 安全复制(覆盖前询问 -i

系统默认部分环境已别名 alias cp='cp -i',手动执行:

bash 复制代码
cp -i test.txt /home/user/
# 若目标已存在,会提示:cp: 是否覆盖 "xxx"? 输入 y 确认,n 取消

3. 强制覆盖(不弹窗 -f

批量复制、脚本中常用:

bash 复制代码
cp -f test.txt /home/user/

4. 复制多个文件

bash 复制代码
# 把 file1 file2 file3 全部复制到 /tmp 目录
cp file1 file2 file3 /tmp/

# 通配符 * 批量复制同类型文件
cp *.txt /tmp/       # 所有 .txt 文件
cp log* /tmp/        # 所有以 log 开头的文件

5. 复制目录(重点)

普通 cp 无法直接复制文件夹,必须加 -r / -a

① 递归复制目录 -r
bash 复制代码
# 复制 dir1 整个目录到 dir2 内
cp -r dir1 dir2
② 归档模式(生产环境首选 -a

保留权限、时间、软链接,备份目录最优

bash 复制代码
cp -a dir1 /backup/
③ 显示复制详情 -v

搭配 -a 查看每一个文件复制过程:

bash 复制代码
cp -av dir1 /backup/

6. 增量复制(只更新新文件 -u

适合反复同步文件,跳过未改动文件:

bash 复制代码
cp -ru dir1 /backup/

7. 不覆盖已有文件 -n

bash 复制代码
cp -n test.txt /tmp/
# 目标存在则直接跳过,无任何提示

8. 保留文件属性 -p

复制后修改时间、权限、所有者不变

bash 复制代码
cp -p test.txt /tmp/

9. 创建软链接(替代复制)-s

bash 复制代码
cp -s /opt/app /tmp/app_link
# 等价 ln -s 源 链接名,只创建快捷方式,不复制实体文件

四、典型组合用法(工作常用)

  1. 安全备份目录(推荐日常使用)
bash 复制代码
cp -av 源目录 目标目录
  1. 批量强制复制所有文件,不询问
bash 复制代码
cp -rf *.log /data/logs/
  1. 增量同步目录(定时同步场景)
bash 复制代码
cp -ruv /data/src /data/dst

五、重要规则 & 避坑(高频踩坑点)

1. 目录复制两种结果区分

假设:dirA 存在,执行 cp -r dir1 dirA

  • 结果:dirA/dir1(把 dir1 放进 dirA 里面)

假设:dirA 不存在 ,执行 cp -r dir1 dirA

  • 结果:新建 dirA,内容和 dir1 完全一致(等价改名复制)

2. 绝对路径 / 相对路径

  • 相对路径:cp test.txt ./tmp/(当前目录出发)
  • 绝对路径:cp /root/test.txt /home/xxx/(全路径,跨目录通用)

3. 不要直接 cp 目录 已有文件

bash 复制代码
# 错误用法:src 是目录,dest 是文件,会报错
cp src dest

4. 隐藏文件复制

通配符 * 默认不匹配 . 开头隐藏文件,复制全部(含隐藏):

bash 复制代码
# 复制当前所有文件+隐藏文件到目标目录
cp -r ./* /target/

5. root 与普通用户权限问题

  • 普通用户复制无读权限文件:提示权限不足
  • 复制到无写权限目录 :报错 Permission denied

六、临时取消 -i 交互询问

如果系统默认 cp -i,想一次性强制覆盖不弹窗:

bash 复制代码
# 临时使用原生 cp,忽略别名
\cp -f test.txt /tmp/

七、快速总结

  1. 复制单个/多个文件 :直接 cp [参数] 源 目标
  2. 复制文件夹 :必加 -r,生产备份优先用 -a
  3. 日常安全操作:cp -iv;脚本/批量操作:cp -rf
  4. 增量同步用 -u,不想覆盖用 -n
相关推荐
江华森1 小时前
深入 Linux 性能调试 —— BPF 与 BCC 工具实战指南
linux·运维·服务器
wangyadong3171 小时前
重新安装k3s,因为我安装jenkins 的时候报错了。不知道为啥rancher 访问不了了。
linux·服务器·rancher
♛识尔如昼♛1 小时前
Linux 设备驱动程序(3)- 字符驱动(2)
linux·驱动开发·字符设备驱动
浊酒南街2 小时前
列表和元组知识总结
linux·python
ScilogyHunter2 小时前
BusyBox完全指南
linux·busybox
ScilogyHunter2 小时前
QEMU完全指南
linux·qemu
2301_777998342 小时前
磁盘与文件系统
linux
牟同學2 小时前
Ubuntu 18.04 升级至 22.04 LTS 完整指南
linux·ubuntu
qq_163135752 小时前
Linux 【05-rmdir命令超详细教程】
linux