cp命令用来复制文件或者目录,是Linux系统中最常用的命令之一。一般情况下,shell会设置一个别名,当我们在命令行下复制文件时,如果目标文件已经存在,无论你是否使用-i参数,系统都会询问是否覆盖。但如果是在shell脚本中执行cp时,没有-i参数则不会询问是否覆盖。这说明命令行和shell脚本的执行方式是不同的。
1. 命令格式
cp [选项] [-T] 源文件 目标目录
2. 命令功能
将源文件复制至目标文件,或将多个源文件复制至目标目录。
3. 命令参数
-a,–archive,等价于-dR –preserve=all
–backup[=CONTROL ,为每个已存在的目标文件创建备份。
-b,–backup 但不接受参数。
–copy-contents,在递归处理是复制特殊文件内容。
-d,–no-dereference,–preserve=links
-f, –force,如果目标文件无法打开,则将其移除并重试(当 -n 选项
存在时,则不需再选此项)。
-i,–interactive,覆盖前询问(使前面的 -n 选项失效)。
-H,跟随源文件中的命令行符号链接。
-l,–link,链接文件而不复制。
-L,–dereference,总是跟随符号链接。
-n,–no-clobber,不要覆盖已存在的文件(使前面的 -i 选项失效)。
-P, –no-dereference,不跟随源文件中的符号链接。
-p,–preserve=模式,所有权,时间戳。
–preserve=属性列表,保持指定的属性(默认:模式,所有权,时间戳),如果
可能,保持附加属性:环境、链接、xattr 等。
-R,-r,–recursive,复制目录及目录内的所有项目。
4. 命令实例
例一:当文件在目标文件中不存在时,复制单个文件到目标目录
# cp log.log test5
说明:在没有带-a参数时,两个文件的时间是不一样的;带了-a参数时,两个文件的时间是一致的。
例二:文件在目标目录中存在时,询问是否覆盖
# cp log.log test5
说明:目标文件存在时,会询问是否覆盖。这是因为cp是cp -i的别名。目标文件存在时,即使加了-f标志,还会询问是否覆盖。
例三:复制整个目录
# cp -a test3 test5
说明:注意目标目录存在与否,结果是不一样的。当目标目录存在时,整个源目录被复制到目标目录里面。
例四:复制log.log 建立一个链接文件 log_link.log
# cp -s log.log log_link.log
说明:那个 log_link.log 是由 -s 的参数造成的,建立的是一个『快捷方式』,所以你会看到在文件的最右边,会显示这个文件是『链接』到哪里去的!