用法:cp [OPTION]... [-T] SOURCE DEST
或:cp [OPTION]... SOURCE... DIRECTORY
或:cp [OPTION]... -t DIRECTORY SOURCE...
把 SOURCE 复制到 DEST, 或者把多个 SOURCE 复制到 DIRECTORY.
-a, --archive 复制所有的文件和目录,包括它们的属性,权限。
等于-dR --preserve=all
--attributes-only 仅复制属性而不复制数据
--backup[=CONTROL] 为每个已存在的目标文件创建备份
-b 类似--backup 但不接受参数
--copy-contents 在递归处理时复制特殊文件内容
-d 等于--no-dereference --preserve=links
-f, --force 如果一个存在的目标文件不能打开,删除它并重试
(这个效果在 -n 也被使用时会被忽略)
-i, --interactive 覆盖前提示 (使前面的 -n 选项失效)
-H 跟随 SOURCE 的软链接
-l, --link 不复制,而是创造硬链接
-L, --dereference 总是跟随 SOURCE 的软链接
-n, --no-clobber 不要覆盖已存在的文件(使前面的 -i 选项失效)
-P, --no-dereference 不跟随 SOURCE 的符号链接
-p 等于--preserve=mode,ownership,
timestamps
--preserve[=ATTR_LIST] 保持指定的属性
(默认:mode,ownership,timestamps),
如果可能保持附加属性:
context,link,xattr,all
-c 已废弃, 等于 --preserve=context
--no-preserve=[=ATTR_LIST] 不保留指定的文件属性
--parents 在目标目录使用全部的源文件名
-R, -r, --recursive 递归复制目录及其子目录内的所有内容
--reflink[=WHEN] 控制克隆/CoW 副本。请查看下面的内容。
--remove-destination 尝试打开目标文件前先删除已存在的目标文件
(相对于 --force 选项)
--sparse=WHEN 控制创建稀疏文件的方式。请查看下面的内容。
--strip-trailing-slashes 删除参数中所有源文件或目录末端的斜杠
-s, --symbolic-link 只创建符号链接而不复制文件
-S, --suffix=SUFFIX 自行指定备份文件的后缀
-t, --target-directory=DIRECTORY 将所有参数指定的源文件/目录复制至目标目录
-T, --no-target-directory 将 DEST 视作普通文件
-u, --update 只在源文件比目标文件新,或目标文件不存在时
才进行复制
-v, --verbose 显示详细的步骤
-x, --one-file-system 不跨越文件系统进行操作
-Z 设置 DEST 的 SeLinux 安全上下文为默认类型
--context[=CTX] 类似 -Z, 或者如果 CTX 已经指定,设置
SELinux 安全上下文或者 SMACK 安全上下文
的值是 CTX
--help 显示此帮助信息并退出
--version 显示版本信息并退出
默认情况下,SOURCE 的稀疏性仅仅通过简单的方法判断,对应的 DEST 也被当做
有稀疏性。这是因为默认情况下使用了--sparse=auto 参数。如果明确使用
--sparse=always 参数则不论 SOURCE 是否包含足够长的0序列也将 DEST 创
建为稀疏文件。使用--sparse=never 参数禁止创建稀疏文件。
当指定了--reflink[=always] 参数时执行轻量化的复制,即只在数据块被修改的
情况下才复制。如果复制失败或者同时指定了--reflink=auto,则返回标准复制模式。
指定--reflink=never 进行标准复制。
如果不使用 --suffix 或 SIMPLE_BACKUP_SUFFIX 指定后缀, 备份文件的后缀是 '~'
在使用 --backup 选项 或 VERSION_CONTROL 环境变量时,版本控制方法有可能会生效
下边是可选值:
none, off 不进行备份(即使使用了--backup 选项)
numbered, t 备份文件加上数字进行排序
existing, nil 若有数字的备份文件已经存在则使用数字,否则使用普通方式备份
simple, never 永远使用普通方式备份
有一个特别情况:如果同时指定--force 和--backup 选项,而 SOURCE 和 DEST
是同一个已存在的一般文件的话,cp 会将 SOURCE 备份。
使用示例:
1. cp file1 file2: 如果file2存在,覆盖file2,如果不存在,新建file2
file2存在:
[root@server dir]# cat file1
123
[root@server dir]# cat file2
[root@server dir]# cp file1 file2
[root@server dir]# cat file1
123
[root@server dir]# cat file2
123
file2不存在:
[root@server dir]# cat file1
123
[root@server dir]# cat file2
cat: file2: 没有那个文件或目录
[root@server dir]# cp file1 file2
[root@server dir]# cat file2
123
2. cp -i file1 file2:操作前打印提示信息
[root@server dir]# cp -i file1 file2
cp:是否覆盖"file2"? y
3. cp file1 file2 dir1: 在dir1存在的情况下,把file1和file2复制到dir1下边:
# dir1存在的情况
[root@server dir]# ll dir1
总用量 0
[root@server dir]# cp file1 file2 dir1
[root@server dir]# ll dir1
总用量 8
-rw-r--r-- 1 root root 4 12月 1 22:31 file1
-rw-r--r-- 1 root root 4 12月 1 22:31 file2
# dir1不存在的情况
[root@server dir]# rm dir1 -rf
[root@server dir]# ll
总用量 20
drwxr-xr-x 2 root root 4096 12月 1 16:29 dir2
drwxr-xr-x 3 root root 4096 12月 1 16:11 dir3
-rw-r--r-- 1 root root 4 12月 1 18:05 file1
-rw-r--r-- 1 root root 4 12月 1 18:08 file2
-rw-r--r-- 1 root root 0 11月 28 15:12 file3
-rw-r--r-- 1 root root 0 11月 29 14:41 file4
-rw-r--r-- 1 root root 164 11月 28 16:41 file.zip
[root@server dir]# cp file1 file2 dir1
cp: 目标"dir1" 不是目录
4. cp dir1/* dir2: 把dir1的所有文件复制到dir2中:
# dir2存在的情况
[root@server dir]# ll dir1
总用量 8
-rw-r--r-- 1 root root 4 12月 1 22:33 file1
-rw-r--r-- 1 root root 4 12月 1 22:33 file2
[root@server dir]# ll dir2
总用量 0
[root@server dir]# cp dir1/* dir2
[root@server dir]# ll dir2
总用量 8
-rw-r--r-- 1 root root 4 12月 1 22:35 file1
-rw-r--r-- 1 root root 4 12月 1 22:35 file2
# dir2不存在的情况
[root@server dir]# rm dir2 -rf
[root@server dir]# cp dir1/* dir2
cp: 目标"dir2" 不是目录
5. cp -r dir1 dir2: 如果dir2存在,把dir1和它里边的文件复制到dir2里边,如果dir2不存在,新建dir2,将dir1中的文件复制到dir2中。
# dir2存在的情况
[root@server dir]# ll dir1
总用量 8
-rw-r--r-- 1 root root 4 12月 1 22:33 file1
-rw-r--r-- 1 root root 4 12月 1 22:33 file2
[root@server dir]# cp -r dir1 dir2
[root@server dir]# ll dir2
总用量 4
drwxr-xr-x 2 root root 4096 12月 1 22:54 dir1
[root@server dir]# ll dir2/dir1
总用量 8
-rw-r--r-- 1 root root 4 12月 1 22:54 file1
-rw-r--r-- 1 root root 4 12月 1 22:54 file2
# dir2不存在的情况
[root@server dir]# rm dir2 -rf
[root@server dir]# cp -r dir1 dir2
[root@server dir]# ll dir2
总用量 8
-rw-r--r-- 1 root root 4 12月 1 23:00 file1
-rw-r--r-- 1 root root 4 12月 1 23:00 file2
6. cp -v :显示过程:
[root@server dir]# cp -rv dir1 dir2
"dir1" -> "dir2"
"dir1/file2" -> "dir2/file2"
"dir1/file1" -> "dir2/file1"
有可能会遇到在使用linux过程中执行cp,默认提示确认信息,这是因为系统已预配置了alias:
[root@server dir]# alias cp
alias cp='cp -i'