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
相关推荐
ltl8 小时前
内核追踪:ftrace、kprobe、uprobe、tracepoint 生产实战
linux
·薯条大王8 小时前
经济实惠玩云服务器|一台云服务器多人共用,子账号配置教程
java·linux·运维·服务器·汇编·c++·python
小小、码农11 小时前
Linux进程控制:从fork到exec,手写一个简易Shell
linux·运维·服务器
不会就选b11 小时前
Linux之进程间通信(二)---模拟进程池
linux·运维·服务器
沫璃染墨13 小时前
《从零入门Linux系统篇(十五):系统工具篇·六——GDB调试器详解:从程序执行控制到高级调试技巧》
linux·运维·服务器·c语言·c++
AIgorithmGEEK14 小时前
Linux 环境变量完全指南:从入门到理解底层原理
linux·运维·服务器
酷可达拉斯15 小时前
Linux操作系统-升级OpenSSH修复漏洞
linux·运维·服务器·云计算
Molesidy15 小时前
【Linux】基于busybox的根文件系统的完善
linux·服务器·嵌入式linux
jufeng130718 小时前
【系列:MiniKV 原理剖析 · 第 6 篇】
linux·软件工程·个人开发·makefile
IT摆渡者19 小时前
ubuntu系统网络问题
linux·运维·ubuntu