cp命令详解ide
cp命令的老九门ui
咱们先看第一种状况:spa
一、源是一个文件,目标是不存在的orm
使用 cp aa /testdir/dir1他会建立一个dir1的目标文件,而且将源的内容放到建立的dir目标文件中blog
二、源是一个文件,目标存在且为文件(上述命令执行后,dir1的文件就会被建立了),而后再次执行cp aa /testdir/dir1,会提示你是否覆盖dir1这个文件,选择y后,再次查看aa和dir1文件的属性,发现dir1的mtime发生了改变说明该文件是被修改了,的确完成了复制。递归
可是使用普通用户登陆一个终端使用一样一个命令执行,就不会出现上述交互式的提醒,说明root用户定义了一个别名,利用了cp命令的-i选项,这时咱们查看别名的定义的确找到这个别名。get
此时在root用户下,我不想有交互式的提示,能够经过执行命令自己,能够有三种方式it
一、\cp 反斜线cp
io
二、‘cp’ 单引号cp
class
三、/usr/bin/cp 使用绝对路径
-f选项的使用
如今root用户下将/testdir/aa复制到andy用户的家目录下而且以dd命名
这时咱们从新开一个终端,使用andy用户登陆,查看家目录下面的文件
发现dd文件的属主和属组都是root用户的,这个咱们不会奇怪,会保持本来的属性
这时使用cp aa dd 命令看是否能够将dd文件覆盖了,发现是权限不够的
这时使用cp -f aa dd 实现的是将dd文件先给删了,而后在从新以andy用户建立一个dd的文件,而且将aa文件的内容写到dd里面(为何说将原来的dd文件删了呢?咱们看新的dd文件的属主和属组就知道了,若果是没有删除dd文件,简单的执行覆盖操做,其dd本来的属主和属组属性是不会变的)经过查man帮助也是同一个意思
三、源是一个文件,目标存在且为目录
使用cp aa /home/命令(注意目录的写法),在目标/home/目录下会建立一个和aa同名的一个文件,并将源文件的内容写到home目录下建立的文件中
四、源是多个文件,目标是文件且不存在
此时会报错执行不了
错误提醒你/home/xxxxxxx不是一个目录,由于cp命令要求的若是是多个源文件,其目标必须是目录文件,能够经过man帮助查看
五、源是多个文件,目标是文件且存在
一样的道理,根据man帮助,目标必须是目录文件,所以也一样是报错的
六、源是多个文件,目标是目录文件且存在
注意目录的写法,这个很好理解由于/home目录下面存在aa文件,所以执行cp aa bb cc /home/操做时会提醒下是否覆盖,选择覆盖后,而后到/home目录下的确能够看到有aa bb cc 文件,这个很容易理解。
七、源是目录文件,目标是不存在的(复制目录文件必须使用-r 选项实现递归的做用)
目标不存在,无论是文件仍是目录,都会建立指定的/aa/目录或者/bb文件,复制源目录下面的全部文件内容到目标文件或者目录,经过ls查看,的确是给复制过来了。
八、源是目录文件,目标已经存在且为文件
若是源是目录文件,目标是存在的文件,执行cp -r /etc/sysconfig/ /gg 则会报错,意思说目录不能覆盖文件
九、源是目录文件,目标已经存在且为目录
首先/gg文件不存在,第一次执行cp -r /etc/sysconfig/ /gg 会按照第7种状况,会把sysconfig目录下的内容复制到/gg文件内,此时/gg就为目录了,而后再次执行cp -r /etc/sysconfig/ /gg,此时会在目标/gg下新建一个sysconfig的目录,而且把目录的内容放置在新建的sysconfig里面,这时ls /gg 会发现里面多了一个sysconfig的目录,若是再次执行cp -r /etc/sysconfig/ /gg 就会出现是否覆盖的提醒,若不需提醒是使用命令自己,而不是使用咱们理解的-f选项(表面意思是强制,实际是把原文件删了,再从新建一个)