标签:linux cp 老九门
cp命令详解
cp命令的老九门
我们先看第一种情况:
1、源是一个文件,目标是不存在的
使用 cp aa /testdir/dir1他会创建一个dir1的目标文件,并且将源的内容放到创建的dir目标文件中
2、源是一个文件,目标存在且为文件(上述命令执行后,dir1的文件就会被创建了),然后再次执行cp aa /testdir/dir1,会提示你是否覆盖dir1这个文件,选择y后,再次查看aa和dir1文件的属性,发现dir1的mtime发生了改变说明该文件是被修改了,的确完成了复制。
但是使用普通用户登录一个终端使用同样一个命令执行,就不会出现上述交互式的提醒,说明root用户定义了一个别名,利用了cp命令的-i选项,这时我们查看别名的定义的确找到这个别名。
此时在root用户下,我不想有交互式的提示,可以通过执行命令本身,可以有三种方式
1、\cp 反斜线cp
2、‘cp’ 单引号cp
3、/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帮助也是同一个意思
3、源是一个文件,目标存在且为目录
使用cp aa /home/命令(注意目录的写法),在目标/home/目录下会创建一个和aa同名的一个文件,并将源文件的内容写到home目录下创建的文件中
4、源是多个文件,目标是文件且不存在
此时会报错执行不了
错误提醒你/home/xxxxxxx不是一个目录,因为cp命令要求的如果是多个源文件,其目标必须是目录文件,可以通过man帮助查看
5、源是多个文件,目标是文件且存在
同样的道理,根据man帮助,目标必须是目录文件,因此也同样是报错的
6、源是多个文件,目标是目录文件且存在
注意目录的写法,这个很好理解因为/home目录下面存在aa文件,因此执行cp aa bb cc /home/操作时会提醒下是否覆盖,选择覆盖后,然后到/home目录下的确可以看到有aa bb cc 文件,这个很容易理解。
7、源是目录文件,目标是不存在的(复制目录文件必须使用-r 选项实现递归的作用)
目标不存在,不管是文件还是目录,都会创建指定的/aa/目录或者/bb文件,复制源目录下面的所有文件内容到目标文件或者目录,通过ls查看,的确是给复制过来了。
8、源是目录文件,目标已经存在且为文件
如果源是目录文件,目标是存在的文件,执行cp -r /etc/sysconfig/ /gg 则会报错,意思说目录不能覆盖文件
9、源是目录文件,目标已经存在且为目录
首先/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选项(表面意思是强制,实际是把原文件删了,再重新建一个)
本文出自 “Linux Study@薛帅” 博客,请务必保留此出处http://xueshuai.blog.51cto.com/11578473/1832330
标签:linux cp 老九门
原文地址:http://xueshuai.blog.51cto.com/11578473/1832330