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
相关推荐
灯澜忆梦30 分钟前
【Linux】#5 | 文件与目录基础操作命令
java·linux·运维
wuminyu1 小时前
stackChunkOop内部结构与GC屏障的配合工作原理剖析
java·linux·c语言·jvm·c++
青衫客361 小时前
从网卡到 Socket:再探 Linux 网络协议栈与 iptables 数据包处理流程
linux·网络·网络协议
承渊政道1 小时前
Linux网络学习【TCP Socket编程实战:connect的断线重连与客户端访问Linux验证】
linux·网络·学习·ubuntu·tcp·socket编程
sunoo-2291 小时前
嵌入式Linux驱动学习笔记(第3-6天):从misc封装、platform总线到设备树、中断与单总线外设实战
linux·arm开发·驱动开发·笔记·单片机·学习
雪落漂泊1 小时前
Linux基础开发工具(一)软件包管理器与Vim编辑器篇
linux·运维·服务器
崽崽..1 小时前
【Linux】网络编程的调试工具以及连接失败的具体排查方法
linux·网络
承渊政道1 小时前
CentOS 7单机部署Elasticsearch 7.17.29:从启动报错、CRUD验证到固定公网地址的完整过程
linux·elasticsearch·centos·内网穿透·cpolar·单机部署
进击的荆棘1 小时前
Linux系统——库的原理与制作之ELF文件的形成与加载的过程(上)
linux·elf·动静态库
额额额对了2 小时前
Linux 内核定时器与 DHT11
linux·运维·服务器