LINUX CP命令详解
Posted at 08月14,2009cp(复制档案或目录)
[root@linux~]#cp[-adfilprsu]来源档(source)目的檔(de stinatio n)
[root@linux~]#cp[options] sourc e 1 source2 source3….directory
参数
-a相当于-p dr的意思
-d若来源文件为连结文件的属性(link file)则复制连结文件属性而非档案本身-f为强制(fo rc e)的意思若有重复或其它疑问时不会询问使用者而强制复制
-i 若目的檔(destinatio n)已经存在时在覆盖时会先询问是否真的动作
-l 进行硬式连结(hard link)的连结档建立而非复制档案本身
-p连同档案的属性一起复制过去而非使用预设属性
-r 递归持续复制用于目录的复制行为
-s 复制成为符号连结文件(symbo lic link)亦即『快捷方式』档案
-u若destinatio n比source旧才更新destin atio n
最后需要注意的如果来源档有两个以上则最后一个目的文件一定要是『目录』才行
范例
范例一将家目录下的.bashrc复制到/tmp下并更名为bashrc
[ro o t@linu x~]#c d/t mp
[root@linux tmp]#cp~/.bashrc bashrc
[ro ot@linux tmp]#cp-i~/.bashrc bashrccp:overwrite`basrhc’?n
#重复作两次动作 由于/tmp底下已经存在bashrc了加上-i参数
#则在覆盖前会询问使用者是否确定可以按下n或者y呢
#但是反过来说如果不想要询问时则加上-f这个参数来强制直接覆盖范例二将/var/log/wtmp复制到/tmp底下
[root@linux tmp]#cp/var/log/wtmp.<==想要复制到目前的目录最后的.不要忘[root@linux tmp]#ls -l/var/lo g/wtmp wtmp
-rw-rw-r–1 root utmp 71808 Jul 18 12:46/var/lo g/wtmp
-rw-r–r–1 root root 71808 Jul 1821:58 wtmp
#注意到了吗 在不加任何参数的情况下档案的所属者会改变连权限也跟着改变了
#这是个很重要的特性要注意喔还有连档案建立的时间也不一样了#如果您想要将档案的所有特性都一起复制过来可以加上-a喔
[root@linux tmp]#cp-a/var/log/wtmp wtmp_2
[root@linux tmp]#ls -l/var/log/wtmp wtmp_2
-rw-rw-r–1 root utmp 71808 Jul 18 12:46/var/log/wtmp
-rw-rw-r–1 root utmp 71808 Jul 18 12:46 wtmp_2
#瞭了吧整个资料特性完全一模一样ㄟ真是不赖这就是-a的特性
范例三复制/e tc/这个目录下的所有内容到/t mp底下
[ro ot@linux tmp]#cp/e tc//tmpcp:o mittin g d irectory`/e tc’<==如果是目录不能直接复制要加上-r的参数[ro ot@linux tmp]#cp-r/etc//tmp
#还是要再次的强调喔 -r是可以复制目录但是档案与目录的权限会被改变#所以也可以利用c p-a/e tc/t mp来下达指令喔
范例四将范例一复制的bashrc建立一个连结档(symbolic link)
[ro ot@linux tmp]#ls -l bashrc
-rw-r–r–1 root root 395 Jul 1822:08 bashrc
[root@linux tmp]#cp-s bashrc b ashrc_slink
[ro ot@linux tmp]#cp-l bashrc ba shrc_hlink
[root@linux tmp]#ls -l bashrc*
-rw-r–r–2 root root 395 Jul 1822:08 bashrc
-rw-r–r–2 root root 395 Jul 1822:08 bashrc_hlink
lrwxrwxrwx 1 root root 6 Jul 1822:31 bashrc_slink->bashrc
#那个bashrc_slink是由-s的参数造成的建立的是一个『快捷方式』
#所以您会看到在档案的最右边会显示这个档案是『连结』到哪里去的#至于那个bashrc_hlink有趣了建立了这个档案之后 bashr c与bashrc_hlin k#所有的参数都一样只是第二栏的link数改变成为2了而不是原本的1喔#这两种连结的方式的异同我们会在下一章里面进行介绍的
范例五若~/.bashrc比/tmp/bashrc新才复制过来
[roo t@linux tmp]#cp-u~/.ba shrc/tmp/bashrc
#这个-u的特性是在目标档案与来源档案有差异时才会复制的。
#所以 比较常被用于『备份』的工作当中喔 ^_^
范例六将范例四造成的b ashrc_s link复制成为b ashr c_slink_2
[root@linux tmp]#cp bashrc_s link b ashrc_slink_2
[root@linux tmp]#ls -l ba shrc_s link*lrwxrwxrwx 1 root root 6 Jul 1822:31 bashrc_slink->bashrc
-rw-r–r–1 root root 395 Jul 1822:48 bashrc_slink_2
#这个例子也是很有趣喔原本复制的是连结档但是却将连结档的实际档案复制过来了
#也就是说如果没有加上任何参数时复制的是源文件而非连结文件的属性#若要复制连结文件的属性就得要使用-d或者-a的参数了
范例七将家目录的.bashrc及.bash_his tory复制到/tmp底下
[ro ot@linux tmp]#cp~/.bashrc~/.bash_history/tmp
#可以将多个数据一次复制到同一个目录去
这个cp的功能很多而由于我们常常在进行一些数据的复制所以也会常常用到这个指令的。 一般来说我们如果去复制别人的数据(当然该档案您必须要有re a d的权限才行啊 ^_^)时 总是希望复制到的数据最后是我们自己的所以
在预设的条件中 cp的来源档与目的档的权限是不同的 目的档的拥有者通常会是指令操作者本身。举例来说 上面的范例二中 由于我是ro o t的身份 因此复制过来的档案拥有者与群组就改变成为ro o t所有了 这样说可以明白吗 ^ ^
_
由于具有这个特性 因此 当我们在进行备份的时候某些需要特别注意的特殊权限档案 例如密码文件(/etc/shadow)以及一些设定档就不能直接以cp来复制而必须要加上-a或者是-p等等可以完整复制档案权限的参数才行另外如果您想要复制档案给其它的使用者 也必须要注意到档案的权限(包含读、写、执行以及档案拥有者等等) 否则其它人还是无法针对您给予的档案进行修订的动作喔注意注意
至于上面的范例当中第四个范例是最有趣的使用-l及-s都会建立所谓的连结档(link file) 但是这两种连结档确有不一样的展现情况。这是怎么一回事啊那个-l就是所谓的hard link至于-s则是symbo lic link鸟哥这里先不介绍 因为这个涉及i-node的相关知识我们还没有介绍到下一章再来讨论这个link的问题喔 总之 由于cp有种种的档案属性与权限的特性所以在复制时您必须要清楚的了解到
?是否需要完整的保留来源档案的信息
?来源档案是否为连结档(symbolic link file)
?来源档是否为特殊的档案例如FIFO, socket等
?来源文件是否为目录