首页 > 代码库 > 关于Linux 中cp命令

关于Linux 中cp命令

0、cp命令 (复制档案或目录)

1、# cp [-adfilprsu] 来源档(source) 目的档(destination)

2、# cp [options] source1 source2 source3 .... directory


参数:

        -a(archive):相当于 -pdr 的意思;不改变源的所有属性,用于归档复制,常用于备份;= --backup

        -d(no-dereference):若来源文件为链接文件的属性(link file),则复制连结文件属性而非档案本身;即如果源是链接,则复制链接

        -f(force):为强制 (force) 的意思,若有重复或其它疑问时,不会询问使用者,而强制复制;

        -i(interactive):若目的檔(destination)已经存在时,在覆盖时会先询问是否真的动作!

        -l(link)(link files instead of copying) :进行硬式连结 (hard link) 的连结档建立,而非复制档案本身;即如果源是链接,则复制链接所指向的文件;

        -P(no-dereference) :保持链接:如果源是链接,则复制链接

        -p (不改变源的属主和属组):连同档案的属性一起复制过去,而非使用预设属性;

        什么是预设属性:本来谁复制的,文件的属主和属组就是谁;

        -r(recursive):递归持续复制,用于目录的复制行为;

        -s(symbolic) :复制成为符号连结文件 (symbolic link),亦即『快捷方式』档案;

        -u(update)   :若 destination 比 source 旧才更新 destination ;或者是destination file is missing


1、问题

    问题1:能不能把一个文件复制成另一个文件,一个文件复制成多个文件,多个文件复制成一个文件。即Src:Dest = 1:1,1:n,n:1,n:n

    归纳1:目标destination只有一个,可以是文件也可以是目录。因此只存在Src:Dest=1:1和n:1这两种情况但多个源的情况下(即Src:Dest=n:1),目标(Dest)只能是目录,否则报错。


    问题2:什么是符号链接?

        答:相当于一个快捷方式,本身不存在,只是指向另一个文件的路径。

    如果源是链接,复制的不是链接而是链接指向的那个文件


    问题3:cp命令,默认不能复制目录;那么如何实现复制目录

 答:# cp -r(recursive递归):

                     递归持续复制,用于目录的复制行为;

     

             # cp -r /etc/init.d /tmp/passwd (目录到文件?)该命令能否执行?

             指令解读:Src为目录,Dest为文件;Src:Dest=1:1

                        在没有r参数的情况下,是不允许执行的。

                        该指令执行




2、范例

        

一个源

范例1: # cp /etc/passwd /tmp,什么意思?

答:Src为文件,Dest为目录;

指令解读:

    将/etc路径下的文件passwd,复制到目标目录/tmp下,复制后的文件名仍为passwd。

   

范例2: # cp /etc/passwd /tmp/test,什么意思?

答:Src为文件,Dest为目录or文件;

指令解读:

1、当Dest(test)为文件时:

    则将文件passwd复制到目录/tmp下:

        1.1 如果test不存在,则复制文件以test为文件名保存在/tmp目录下;

        1.2 如果test已经存在,则询问用户是否用新复制的文件覆盖原来的test文件;

2、当Dest(test)为目录时:

    则将文件passwd,复制到目录/tmp下,复制后的文件名仍为passwd。

     

多个源

范例3:# cp /etc/passwd /etc/issue /etc/inittab /tmp/abc,什么意思?

答:Src:Dest=N:1;Src为文件,Dest为文件or目录

指令解读:

1、当Dest(abc)为文件时:

    问题来了,多个文件可以存放在一个文件中吗?

    答案是不行,当用户试图将多个文件存放于一个文件中,系统会报错提示目标abc不是一个目录。

2、当Dest(abc)为目录时:

    则将源文件(passwd,issue,inittab)复制到目标目录/tmp/abc下,并以原文件名保存文件。






关于Linux 中cp命令