作为Linux用户,复制文件和目录是最常见的日常操作任务之一。cp命令用于通过命令行将文件和目录从一个地方复制到另一个地方。cp命令在几乎所有的Unix和类Linux操作系统中都可用。在本文中,我们将为linux初学者演示16个有用的cp命令示例。下面是cp命令的基本语法:将一个文件复制到另一个文件target_directory1)复制文件到目标目录假设我们把/etc/passwd文件复制到/mnt/backup目录下root@linuxtechi:~#cp/etc/passwd/mnt/backup/root@linuxtechi:~#使用如下命令验证是否复制root@linuxtechi:~#ls-l/mnt/backup/total4-rw-r--r--1rootroot2410Feb317:10passwdroot@linuxtechi:~#2)复制多个文件同时假设我们要复制多个文件(/etc/passwd,/etc/group,/etc/shadow)到目标目录(/mnt/backup)root@linuxtechi:~#cp/etc/passwd/etc/group/etc/shadow/mnt/backup/root@linuxtechi:~#3)Copyfilesinteractively(-i)使用-i选项交互的将文件从一个地方复制到另一个地方,interactive选项只有在目标目录下才可用已经有相同的文件例子如下:root@linuxtechi:~#cp-i/etc/passwd/mnt/backup/cp:overwrite'/mnt/backup/passwd'?yroot@linuxtechi:~#在上面的命令中,你必须手动输入y以允许复制操作4)复制过程中的详细输出(-v)如果你想要cp命令的详细输出然后使用-v选项,示例如下所示root@linuxtechi:~#cp-v/etc/fstab/mnt/backup/'/etc/fstab'->'/mnt/backup/fstab'root@linuxtechi:~#如果你想在同时,然后使用使用选项-ivroot@linuxtechi:~#cp-iv/etc/fstab/mnt/backup/cp:overwrite'/mnt/backup/fstab'?y'/etc/fstab'->'/mnt/backup/fstab'root@linuxtechi:~#5)Copyadirectoryorfolder(-ror-R)使用-r或-R选项从一个目录到另一个目录,假设我们要将Linuxtechi用户的主目录复制到/mn/backuproot@linuxtechi:~#cp-r/home/linuxtechi/mnt/backup/root@linuxtechi:~#在上面的命令中,-r选项将递归复制文件和目录验证目标位置root@linuxtechi:~#ls-l/mnt/backup/linuxtechi/total24drwxr-xr-x2rootroot4096Feb317上linuxtechi目录的内容:41data-rw-r--r--1rootroot7Feb317:41file_1.txt-rw-r--r--1rootroot7Feb317:41file_2.txt-rw-r--r--1rootroot7Feb317:41file_3.txt-rw-r--r--1rootroot7Feb317:41file_4.txt-rw-r--r--1rootroot7Feb317:41file_5txt-rw-r--r--1rootroot0Feb317:41file_5.txtroot@linuxtechi:~#6)复制时存档文件和目录(-a)复制目录时,我们通常使用-r或-R选项,但我们可以使用-a选项代替-r选项,它会在复制过程中归档文件和目录,示例如下root@linuxtechi:~#cp-a/home/linuxtechi/mnt/backup/root@linuxtechi:~#ls-l/mnt/backup/linuxtechi/total24drwxr-xr-x2rootroot4096Feb317:41data-rw-r--r--1rootroot7Feb317:39file_1.txt-rw-r--r--1rootroot7Feb317:39file_2.txt-rw-r--r--1rootroot7Feb317:39file_3.txt-rw-r--r--1rootroot7Feb317:39file_4.txt-rw-r--r--1rootroot7Feb317:40file_5txt-rw-r--r--1rootroot0Feb317:39file_5.txtroot@linuxtechi:~#7)copyonlyifthesourcefileisnewthanthetargetfile(-u)在某些情况下,只有当源文件比目标文件新时才需要复制文件这可以使用cp中的-u选项轻松实现命令。在示例:6中,我们将linuxtechi主目录复制到/mnt/backup文件夹,在linuxtechi主文件夹中,我们有5个txt文件,让我们编辑其中几个,然后使用“cp-u”复制所有txt文件。在示例6中,我们将linuxtechi主目录复制到/mnt/backup文件夹中,在linuxtechi主文件夹中,我们有5个txt文件,我们编辑其中的几个,然后使用cp-U命令复制所有txt文件.root@linuxtechi:~#cd/home/linuxtechi/root@linuxtechi:/home/linuxtechi#echo"LinuxRocks">>file_1.txtroot@linuxtechi:/home/linuxtechi#echo"LinuxRocks">>file_4.txtroot@linuxtechi:/home/linuxtechi#cp-v-ufile_*.txt/mnt/backup/linuxtechi/'file_1.txt'->'/mnt/backup/linuxtechi/file_1.txt''file_4.txt'->'/mnt/backup/linuxtechi/file_4.txt'root@linuxtechi:/home/linuxtechi#8)Donotoverwriteexistingfileswhencopying(-n)在某些情况下,你不想在复制时覆盖现有的目标文件,你可以使用-n选项做root@linuxtechi:~#cp-i/etc/passwd/mnt/backup/cp:overwrite'/mnt/backup/passwd'?上面命令可以看到,提示Weoverwriteexistingfiles,如果使用-n选项则不会提示覆盖,也不会覆盖现有文件。root@linuxtechi:~#cp-n/etc/passwd/mnt/backup/root@linuxtechi:~#9)使用cp命令创建软链接(-s)假设要创建文件的软链接而不是复制它。这种情况下,在cp命令中使用-s选项,如下图root@linuxtechi:~#cp-s/home/linuxtechi/file_1.txt/mnt/backup/root@linuxtechi:~#cd/mnt/backup/root@linuxtechi:/mnt/backup#ls-lfile_1.txtlrwxrwxrwx1rootroot27Feb518:37file_1.txt->/home/linuxtechi/file_1.txtroot@linuxtechi:/mnt/backup#10)使用cp命令创建硬链接(-l)假设要创建文件的硬链接而不是复制,则使用-l选项,示例如下root@linuxtechi:~#cp-l/home/linuxtechi/devops.txt/mnt/backup/root@linuxtechi:~#在硬链接中,源文件和目标文件具有相同的inode号,让我们使用以下命令验证这一点root@linuxtechi:~#ls-li/mnt/backup/devops.txt918196-rw-r--r--2rootroot37Feb520:02/mnt/backup/devops.txtroot@linuxtechi:~#ls-li/home/linuxtechi/devops.txt918196-rw-r--r--2rootroot37Feb520:02/home/linuxtechi/devops.txtroot@linuxtechi:11)Copyattributesfromsourcetotarget(–attributes-only)如果要使用cp命令复制只有从源到目标的属性,然后使用选项-attributes-only#cp--attributes-only/home/linuxtechi/distributeions.txt/mnt/backup/#ls-l/home/linuxtechi/distributions.txt-rw-r--r--1rootroot41Feb519:31/home/linuxtechi/distributions.txt#ls-l/mnt/backup/distributions.txt-rw-r--r--1rootroot0Feb519:34/mnt/backup/distributions.txt#在上面的命令中,我们从linuxtechi主目录复制到/mnt/备份目录,仅复制属性,然后跳过内容/mnt/backup/distribution.txt文件大小为零字节。12)复制时创建现有目标文件的备份(--backup)cp命令的默认行为是如果存在相同的文件则覆盖目标文件,如果要在复制操作期间备份现有目标文件,请使用-backup选项,示例如下'/mnt/backup/distributions.txt'(backup:'/mnt/backup/distributions.txt~')root@linuxtechi:~#如果你注意到,创建的备份在文件。备份选项接受以下参数none,off–从不对备份进行编号,t–使编号备份存在,nil–如果编号备份存在则编号,否则简单,never–始终进行简单备份13)复制时保留模式,所有权和时间戳(-p)如果你想在复制时保留文件属性,如模式、所有权和时间戳,然后在cp命令中使用-p选项,示例如下所示root@linuxtechi:~#cd/home/linuxtechi/root@linuxtechi:/home/linuxtechi#cp-pdevops.txt/mnt/backup/root@linuxtechi:/home/linuxtechi#ls-ldevops.txt-rw-r--r--1rootroot37Feb520:02devops.txtroot@linuxtechi:/home/linuxtechi#ls-l/mnt/backup/devops.txt-rw-r--r--1rootroot37Feb520:02/mnt/backup/devops.txtroot@linuxtechi:/home/linuxtechi#14)Donotfollowsourcesymlinkswhencopying(-P)如果你不想在复制时跟随sourcesymlinks,在命令中使用-P选项,例子如下root@linuxtechi:~#cd/home/linuxtechi/root@linuxtechi:/home/linuxtechi#ls-l/opt/nix-release.txtlrwxrwxrwx1rootroot14Feb912:28/opt/nix-release.txt->os-release.txtroot@linuxtechi:/home/linuxtechi#root@linuxtechi:/home/linuxtechi#cp-Pos-release.txt/mnt/backup/root@linuxtechi:/home/linuxtechi#ls-l/mnt/backup/os-release.txt-rw-r--r--1rootroot35Feb912:29/mnt/backup/os-release.txtroot@linuxtechi:/home/linuxtechi#15)强制复制文件和目录(-f)在某些情况下,现有的目标文件无法打开和删除如果你有一个健康的文件,你可以复制到现有的目标文件,然后使用cp命令的-f选项root@linuxtechi:/home/linuxtechi#cp-fdistributions.txt/mnt/backup/root@linuxtechi:/home/linuxtechi#16)复制稀疏文件稀疏文件是一个常规文件,它包含一长串零字节,不占用物理磁盘块。稀疏文件的好处之一是它不会占用太多磁盘空间,并且对文件的读取操作会非常快。假设我们有一个稀疏云镜像,名为ubuntu-cloud.imgroot@linuxtechi:/home/linuxtechi#du-shubuntu-cloud.img12Mubuntu-cloud.imgroot@linuxtechi:/home/linuxtechi#cp--sparse=alwaysubuntu-cloud.img/mnt/backup/root@linuxtechi:/home/linuxtechi#du-sh/mnt/backup/ubuntu-cloud.img0/mnt/backup/ubuntu-cloud.imgroot@linuxtechi:/home/linuxtechi#When在cp命令中使用稀疏参数,您可以使用不同的选项sparse=autosparse-alwayssparse=never-github存储库)
