Linux cp
命令详细教程
cp
是 Linux 系统中最常用的命令之一,用于复制文件或目录。- 它可以将源文件/目录复制到指定的目标位置,支持批量复制、强制覆盖、保留文件属性等功能。下面详细介绍其用法。
- 资料已经分类整理好:
https://pan.quark.cn/s/26d73f7dd8a7
一、基本语法
cp [选项] 源文件/目录 目标文件/目录
- 源:可以是一个或多个文件/目录(多个源时,目标必须是目录)。
- 目标:若源是文件,目标可以是文件(重命名复制)或目录(复制到该目录下);若源是目录,目标必须是目录(需配合
-r
选项)。
二、常用选项
选项 | 功能描述 |
---|---|
-i | 交互式操作,若目标文件已存在,会提示是否覆盖(避免误操作) |
-f | 强制覆盖,若目标文件已存在,直接覆盖且不提示(慎用) |
-r /-R | 递归复制目录,用于复制文件夹及其所有子内容 |
-p | 保留源文件的属性(如权限、所有者、修改时间等) |
-v | 显示复制过程(verbose,详细输出) |
-a | 等同于 -dR --preserve=all ,常用于备份(保留链接、递归复制、保留所有属性) |
-l | 不复制文件,而是创建硬链接(链接文件与源文件共享数据) |
-s | 创建符号链接(软链接),而非复制文件内容 |
三、实际操作示例
1. 复制文件到指定目录
将文件 file.txt
复制到 docs
目录下(若 docs
不存在,会报错):
cp file.txt docs/
- 若
docs
目录存在,file.txt
会被复制到docs
中,文件名不变。
2. 复制文件并重命名
将 file.txt
复制到当前目录,并命名为 file_copy.txt
:
cp file.txt file_copy.txt
- 若
file_copy.txt
已存在,默认会直接覆盖(非交互式shell),建议加-i
选项确认:cp -i file.txt file_copy.txt # 提示:cp: 是否覆盖 'file_copy.txt'? y
3. 复制多个文件到目录
将 a.txt
、b.txt
复制到 backup
目录:
cp a.txt b.txt backup/
- 多个源文件时,目标必须是目录,否则会报错。
4. 复制目录(递归复制)
复制目录 dir1
及其所有子文件/子目录到 dir2
(dir2
可不存在):
cp -r dir1 dir2 # 若 dir2 不存在,会创建 dir2 并复制 dir1 内容到其中# 若 dir2 存在,会将 dir1 复制到 dir2 内(即 dir2/dir1)
- 必须加
-r
或-R
,否则会提示“cp: 无法 stat ‘dir1’: 是一个目录”。
5. 保留文件属性复制
复制 data.csv
到 archive
目录,并保留其权限、修改时间等属性:
cp -p data.csv archive/
- 可用
ls -l
对比复制前后的文件属性。
6. 强制覆盖文件
当目标文件存在时,无需提示直接覆盖(慎用,可能误删数据):
cp -f old.txt new.txt # 即使 new.txt 存在,也直接覆盖
7. 创建软链接/硬链接
- 创建软链接(类似Windows快捷方式):
cp -s source.txt link.txt # link.txt 指向 source.txt,删除 source.txt 后 link.txt 失效
- 创建硬链接(与源文件共享数据,删除源文件不影响链接文件):
cp -l source.txt hardlink.txt
8. 备份式复制(保留所有属性)
复制目录 project
到 backup
,保留链接、权限、所有者等所有属性:
cp -a project/ backup/ # 常用于完整备份目录
四、注意事项
- 复制目录必须加
-r
:若忘记加-r
,复制目录会报错。 - 目标路径的斜杠区别:
cp file.txt dir
与cp file.txt dir/
效果相同(若dir
是目录)。- 但推荐加
/
明确表示目标是目录,避免误操作(如dir
是文件时,会覆盖该文件)。
- 权限问题:若复制到没有写入权限的目录(如
/root
),会提示“权限不够”,需用sudo
提升权限。 - 避免覆盖重要文件:优先使用
-i
选项,或通过alias cp='cp -i'
设置别名(大多数Linux默认配置)。
通过灵活组合选项,cp
命令可以满足各种复制需求,从简单的文件复制到复杂的目录备份均能胜任。