cp命令是用来复制文件或目录的,该命令是Linux中常用的命令之一。
1、基本使用格式
# cp [OPTION]... [-T] SOURCE DEST # cp [OPTION]... SOURCE... DIRECTORY # cp [OPTION]... -t DIRECTORY SOURCE...
2、常用选项
Options | Function |
-i | 交互式复制,即覆盖之前提醒用户确认 |
-f | 强制覆盖文件目标 |
-d | 复制符号链接文件本身,而非其指向的源文件 |
-a | -dR --preserve=all, archive,用于实现归档 |
-s | 给源文件创建一个符号链接文件 |
--preserve= | 复制源文件时保护源文件的一些属性,这些属性包括 mode: 权限 ownership: 时间戳 timestamp: 时间戳 context: 安全标签 xattr: 扩展属性 links: 符号链接 all: 上述所有属性 |
3、命令功能
cp命令分为单源复制和多源复制,并且目标文件的不同,所实现的功能不同,下面具体来看下cp命令的功能:
Source(L)/DEST(C) | 文件 | 目录 |
文件 | 只能为单源复制,并且如果该目标文件存在时,则会覆盖目标文件; 当目标文件不存在时,则事先创建此文件,并复制源文件的数据流至DEST中; |
可以为单源和多源复制。在复制的过程中则先在DEST目录下创建一个与源文件同名的文件,并复制其数据流。 |
目录 | 错误 | 可以为单源和多源复制。 当目标目录存在时,在复制的过程中则先在DEST目录下创建一个与源文件同名的目录,并复制其数据流。 当目标目录不存在时,则事先创建此目录,并复制源文件的数据流至DEST中 |
4、应用示例
(1)单源复制
a. 目标为文件时
# cp /etc/yum.repos.d/CentOS-Base.repo Base.repo 该目标文件在当前工作路径下不存在
在执行上面的命令时,当前工作路径下没有Base.repo文件,所以在复制的过程中会事先创建Base.repo文件,然后将源文件中的数据流存入目标文件中。
当再次执行上面的复制命令是就会出现下面的情况:
这是因为目标文件是一个已经存在的文件,在复制的过程会询问用户是否覆盖目标文件。
b. 目标为目录时
# cp /etc/fstab ./public/
在当前工作目录下的public目录下,不存在和源文件同名的文件,所以在复制的过程中,因为没有给出目标文件名,所以系统会默认先创建一个和源文件同名的文件,然后将源文件的中数据流直接复制过来。
(2)多源复制
在多源复制中DEST只能为目录。
a. 源为文件
# cp ifconfg initial public/
b. 源为目录
# cp -r 11/ music/ public/
当源为目录的时候,此时要使用-r参数递归的将源目录复制到目标目录下。当然在单源复制中,源也可以为目录,但目标必须为目录。
c. 源为文件和目录
# cp -r ifconfg initial public/ music/
从上面可以看出,cp命令在使用的过程中,不管参数有多少,都会将最后一个参数作为DEST。
(3)利用cp命令创建链接文件
# cp -s /etc/fstab fstab.link
总结
cp命令在系统中是cp -i命令的别名,所以在目标文件存在时会出现交互信息。在BASH中使用cp命令会出现交互信息,但是在shell中使用cp命令不会出现交互信息,这一点一定要注意。