首页 > 代码库 > 关于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命令