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
相关推荐
一叶龙洲5 小时前
wslg打开Ubuntu24.04默认打开图形界面
linux·服务器·数据库·ubuntu
敖行客 Allthinker7 小时前
Parallels Ubuntu虚拟机项目如何让手机访问?完整解决方案
linux·运维·ubuntu
keyipatience8 小时前
线程栈与TLS和线程互斥
java·linux·服务器·开发语言·ubuntu
j7~8 小时前
【Linux】二十二.《Linux 信号机制完全指南:表示、捕捉与处理》
linux·信号处理·volatile·可入重函数·保存信号
观山岳五楼9 小时前
Ubuntu 24 怎么使用Ubuntu 20 的镜像源
linux·运维·ubuntu
m0_715646769 小时前
20260720
linux·arm
寒晓星10 小时前
[linux]线程及多线程
linux·运维
辰痕~10 小时前
物理机装Linux操作系统(Ubuntu为例)
linux·ubuntu
国服第二切图仔12 小时前
13其他工具 - Skill/LSP/Sleep等
linux·运维·里氏替换原则
就不掉头发12 小时前
计算机的虚拟内存
linux·服务器·windows