每天一个Linux命令(7):文件目录操作命令——cp命令

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命令不会出现交互信息,这一点一定要注意。

原文地址:https://www.cnblogs.com/dabric/p/11116891.html