cp命令:(copy)命令用来将一个或多个源文件或者目录复制到指定的目的文件或目录。它可以将单个源文件复制成一个指定文件名的具体的文件或一个已经存在的目录下。cp命令还支持同时复制多个文件,当一次复制多个文件时,目标文件参数必须是一个已经存在的目录,否则将出现错误
源文件,目标文件
源文件:制定源文件列表。默认情况下,cp命令不能复制目录,如果要复制目录,则必须使用-R选项;
目标文件:指定目标文件。当“源文件”为多个文件时,要求“目标文件”为指定的目录。
单源复制:cp [OPTION]... [-T] SOURCE DEST
多源复制:cp [OPTION]... SOURCE... DIRECTORY:目标必须是目录;
cp [OPTION]... -t DIRECTORY SOURCE...
常用选项:
-i,--interactive:交互式复制,即覆盖目标文件之前提醒用户确认;
-f,force:强制覆盖目标文件;
-R,-r,--recursive:递归复制目录及其内容;
-d:相当于--no-dereference;复制链接本身(默认为复制链接文件的原文件内容);
-P,--no-dereference:复制链接文件本身,而非默认的复制链接文件指向的原文件内容;
--preserve[=ATTR_LIST]: 指明保留的原文件属性列表;
默认为default: mode, ownership, timestamps;
还包括其它属性:context(安全上下文), links(符号链接), xattr(额外属性), all;
-a,--archive:归档复制;备份时才会使用;
相当于-dR --preserve=all;
注意:仅管理员有权限复制时保留属主和属组属性;
单源复制:cp [OPTION]... [-T] SOURCE DEST
如果目标文件文件名与原文件不同名则:复制文件并重命名;
复制过程:先创建目标文件,而后复制源文件的内容导入至目标文件;
如果目标文件事先存在:
如果目标文件文件名与原文件同名则:则覆盖目标文件,root用户默认使用-i选项,为交互确认;
如果目标文件是目录则:在此目录中创建一个与原文件同名的文件,则导入其内容;
当root用户操作cp命令覆盖时不提示确认,直接覆盖,则使用\cp:不使用别名;
而其它用户不需要使用\cp就没有提示;
例如:
~]# cp /etc/grub2.cfg /tmp/:复制文件到指定目录;
~]# cp /etc/grub2.cfg /tmp/mygrub.cfg:复制重命名;
~]# cp /etc/grub2.cfg /tmp/mygrub.cfg:显示复制后重名文件,是否覆盖;
\COMMAND:使用原命令,而不使用命令别名;
~]# \cp /etc/grub2.cfg /tmp/mygrub.cfg:复制后重名文件直接覆盖,不提示;
多源复制:
基本前提:DEST存在,且必须是目录;否则即为错误;即复制时目标目录必须提前创建;
例如:
~]# cp /etc/fstab /etc/grub2.cfg /tmp/mytestdir:目标目录必须存在,否则错误;
~]# cp /etc/grub2.cfg /tmp/mygrub.cfg:复制后并重命名;
~]# \cp -i -f /etc/fstab /tmp/mygrub.cfg:选择-i执行交互式选项;
复制链接文件时要注意:
~]# ll /etc/redhat-release:显示为链接文件,指向同目录下的centos-release;
~]# cp /etc/etc/redhat-release /tmp/:复制链接文件;默认复制链接文件的原文件内容;
~]# /tmp/redhat-release:显示正常的链接文件;可查看链接内容;
~]# cp -P /etc/redhat-release /tmp/my-release:如果仅复制链接文件本身(快捷方式);
~]# ll /tmp/my-release:无法打开链接文件;相当于只复制了快捷方式;
~]# cp /etc/grub2.cfg /tmp/centos-release:只要链接文件同目录下有链接源文件的文件名就能打开链接文件;墙头草,随风倒;
~]# ll /tmp/my-release:再查看,链接文件正常;
复制文件元数据时注意:
~]# ll /etc/grub2.cfg:查看文件的属主、属组;是root;
~]$ cp /etc/grub2.cfg /tmp/mygrub2.cfg:用mageedu用户复制文件;
~]$ ll /tmp/mygrub2.cfg:查看文件的属主、属组;是mageedu;即不复制文件的元数据,只复制文件内容本身;
~]$ cp -p /etc/grub2.cfg /tmp/mygrub2.cfg:复制时保留文件元数据;
~]$ ll /tmp/mygrub2.cfg:查看文件的属主、属组;是root;
实例:
如果把一个文件复制到一个目标文件中,而目标文件已经存在,那么,该目标文件的内容将被破坏。此命令中所有参数既可以是绝对路径名,也可以是相对路径名。通常会用到点.或点点..的形式。例如,下面的命令将指定文件复制到当前目录下:
cp -i /usr/men m*.c /usr/zh
我们在Linux下使用cp命令复制文件时候,有时候会需要覆盖一些同名文件,覆盖文件的时候都会有提示:需要不停的按Y来确定执行覆盖。文件数量不多还好,但是要是几百个估计按Y都要吐血了,于是折腾来半天总结了一个方法:
转载于:https://blog.51cto.com/14127438/2331034