linux-cp-command-tourial
作为Linux用户,复制文件和目录是最常见的日常操作任务之一。cp命令用于通过命令行将文件和目录从一个本地复制到另一个本地。cp命令在几乎所有Unix和Linux类操作系统中都可用。
在本文中,我们将为linux初学者演示16个有用的cp命令示例。
下边是cp命令的基本句型:
将一个文件复制到另一个文件
# cp {options} source_file target_file
复制文件到另一个目录或文件夹
# cp {options} source_file target_directory
将目录复制到目录
# cp {options} source_directory target_directory
1)将文件复制到目标目录
假定我们复制/etc/passwd文件到/mnt/backup目录
root@linuxtechi:~# cp /etc/passwd /mnt/backup/
root@linuxtechi:~#
使用以下命令验证是否已复制
root@linuxtechi:~# ls -l /mnt/backup/
total 4
-rw-r--r-- 1 root root 2410 Feb 3 17:10 passwd
root@linuxtechi:~#
2)同时复制多个文件
假定我们要复制多个文件(/etc/passwd,/etc/group,/etc/shadow)到目标目录(/mnt/backup)
root@linuxtechi:~# cp /etc/passwd /etc/group /etc/shadow /mnt/backup/
root@linuxtechi:~#
3)交互地复制文件(-i)
使用-i选项linux 复制快捷键,将文件交互地从一个地方复制到另一个地方,交互选项只在目标目录早已有相同的文件时才有效,示例如下所示
root@linuxtechi:~# cp -i /etc/passwd /mnt/backup/
cp: overwrite '/mnt/backup/passwd'? y
root@linuxtechi:~#
在前面的命令中,必须自动输入y以容许复制操作
4)复制期间详尽输出(-v)
假如你想要cp命令的详尽输出,这么使用-v选项,示例如下所示
root@linuxtechi:~# cp -v /etc/fstab /mnt/backup/
'/etc/fstab' -> '/mnt/backup/fstab'
root@linuxtechi:~#
假如你想同时使用交互模式和详尽模式,这么使用选项-iv
root@linuxtechi:~# cp -iv /etc/fstab /mnt/backup/
cp: overwrite '/mnt/backup/fstab'? y
'/etc/fstab' -> '/mnt/backup/fstab'
root@linuxtechi:~#
5)复制目录或文件夹(-ror-R)
使用-r或则-R选项将目录从一个目录复制到另一个目录,假定我们要将Linuxtechi用户的home目录复制到/mn/backup
root@linuxtechi:~# cp -r /home/linuxtechi /mnt/backup/
root@linuxtechi:~#
在上述命令中,-r选项将递归地复制文件和目录
验证目标位置上linuxtechi目录的内容
root@linuxtechi:~# ls -l /mnt/backup/linuxtechi/
total 24
drwxr-xr-x 2 root root 4096 Feb 3 17:41 data
-rw-r--r-- 1 root root 7 Feb 3 17:41 file_1.txt
-rw-r--r-- 1 root root 7 Feb 3 17:41 file_2.txt
-rw-r--r-- 1 root root 7 Feb 3 17:41 file_3.txt
-rw-r--r-- 1 root root 7 Feb 3 17:41 file_4.txt
-rw-r--r-- 1 root root 7 Feb 3 17:41 file_5txt
-rw-r--r-- 1 root root 0 Feb 3 17:41 file_5.txt
root@linuxtechi:~#
6)拷贝时存档文件和目录(-a)
当复制目录时,我们一般使用-r或-R选项,但我们可以使用-a选项来取代-r选项,它将在复制过程中存档文件和目录,示例如下所示
root@linuxtechi:~# cp -a /home/linuxtechi /mnt/backup/
root@linuxtechi:~# ls -l /mnt/backup/linuxtechi/
total 24
drwxr-xr-x 2 root root 4096 Feb 3 17:41 data
-rw-r--r-- 1 root root 7 Feb 3 17:39 file_1.txt
-rw-r--r-- 1 root root 7 Feb 3 17:39 file_2.txt
-rw-r--r-- 1 root root 7 Feb 3 17:39 file_3.txt
-rw-r--r-- 1 root root 7 Feb 3 17:39 file_4.txt
-rw-r--r-- 1 root root 7 Feb 3 17:40 file_5txt
-rw-r--r-- 1 root root 0 Feb 3 17:39 file_5.txt
root@linuxtechi:~#
7)仅当源文件比目标文件更新时进行复制(-u)
在个别情况下,只有当源文件比目标文件更新时才须要复制文件。这可以使用cp命令中的-u选项轻松实现。
IntheExample:6wehavecopiedthelinuxtechihomedirectoryto
/mnt/backupfolder,inthelinuxtechihomefolderwehave5txtfiles,
let’seditcoupleofthemandthencopyallthetxtfilesusing“cp-u”.
在示例6中,我们将linuxtechi家目录复制到/mnt/backup文件夹,在linuxtechi主文件夹中linux 复制快捷键,我们有5个txt文件,我们编辑它们中的几个,之后使用cp-U命令复制所有txt文件。
root@linuxtechi:~# cd /home/linuxtechi/
root@linuxtechi:/home/linuxtechi# echo "LinuxRocks" >> file_1.txt
root@linuxtechi:/home/linuxtechi# echo "LinuxRocks" >> file_4.txt
root@linuxtechi:/home/linuxtechi# cp -v -u file_*.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)复制时不覆盖现有文件(-n)
在个别情况下,您不希望在复制时覆盖现有目标文件,可以使用-n选项来完成
root@linuxtechi:~# cp -i /etc/passwd /mnt/backup/
cp: overwrite '/mnt/backup/passwd'?
正如你在前面的命令中见到的,它会提示我们覆盖现有的文件,假如你使用-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 -l file_1.txt
lrwxrwxrwx 1 root root 27 Feb 5 18:37 file_1.txt -> /home/linuxtechi/file_1.txt
root@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.txt
918196 -rw-r--r-- 2 root root 37 Feb 5 20:02 /mnt/backup/devops.txt
root@linuxtechi:~# ls -li /home/linuxtechi/devops.txt
918196 -rw-r--r-- 2 root root 37 Feb 5 20:02 /home/linuxtechi/devops.txt
root@linuxtechi:
11)将属性从源复制到目标(–attributes-only)
假如希望使用cp命令仅将属性从源复制到目标,则使用选项-attributes-only
# cp --attributes-only /home/linuxtechi/distributions.txt /mnt/backup/
# ls -l /home/linuxtechi/distributions.txt
-rw-r--r-- 1 root root 41 Feb 5 19:31 /home/linuxtechi/distributions.txt
# ls -l /mnt/backup/distributions.txt
-rw-r--r-- 1 root root 0 Feb 5 19:34 /mnt/backup/distributions.txt
#
在前面的命令中,我们从linuxtechi主目录复制到/mnt/backup目录,仅复制属性,之后跳过内容。/mnt/backup/distribution.txt文件大小为零字节。
12)复制时创建现有目标文件的备份(–backup)
cp命令的默认行为是假如存在相同的文件,则覆盖目标文件,倘若您想在复制操作期间备份现有的目标文件,则使用-backup选项linux apache 虚拟主机,示例如下所示
root@linuxtechi:~# cp --backup=simple -v /home/linuxtechi/distributions.txt /mnt/backup/distributions.txt
'/home/linuxtechi/distributions.txt' -> '/mnt/backup/distributions.txt' (backup: '/mnt/backup/distributions.txt~')
root@linuxtechi:~#
倘若您注意到,备份早已创建,并在文件末尾追加了波浪号符号。备份选项接受以下参数
13)复制时保留模式、所有权和时间戳(-p)
假如你想在复制时保留文件属性,如模式、所有权和时间戳,这么在cp命令中使用-p选项,示例如下所示
root@linuxtechi:~# cd /home/linuxtechi/
root@linuxtechi:/home/linuxtechi# cp -p devops.txt /mnt/backup/
root@linuxtechi:/home/linuxtechi# ls -l devops.txt
-rw-r--r-- 1 root root 37 Feb 5 20:02 devops.txt
root@linuxtechi:/home/linuxtechi# ls -l /mnt/backup/devops.txt
-rw-r--r-- 1 root root 37 Feb 5 20:02 /mnt/backup/devops.txt
root@linuxtechi:/home/linuxtechi#
14)复制时不要遵守源符号链接(-P)
倘若您不想在复制时遵守源符号链接,则在命令中使用-P选项linux操作系统介绍,示例如下所示
root@linuxtechi:~# cd /home/linuxtechi/
root@linuxtechi:/home/linuxtechi# ls -l /opt/nix-release.txt
lrwxrwxrwx 1 root root 14 Feb 9 12:28 /opt/nix-release.txt -> os-release.txt
root@linuxtechi:/home/linuxtechi#
root@linuxtechi:/home/linuxtechi# cp -P os-release.txt /mnt/backup/
root@linuxtechi:/home/linuxtechi# ls -l /mnt/backup/os-release.txt
-rw-r--r-- 1 root root 35 Feb 9 12:29 /mnt/backup/os-release.txt
root@linuxtechi:/home/linuxtechi#
15)强制复制文件和目录(-f)
在个别情况下,现有的目标文件难以打开和删掉。假如你有一个健康的文件,可以复制到现有的目标文件,这么使用cp命令的-f选项
root@linuxtechi:/home/linuxtechi# cp -f distributions.txt /mnt/backup/
root@linuxtechi:/home/linuxtechi#
16)复制稀疏文件
稀疏文件是一个常规文件,它包含一个零字节的长序列,不消耗任何化学c盘块。稀疏文件的益处之一是它不会消耗太多的c盘空间,但是对该文件的读取操作将特别快。
假定我们有一个命名为ubuntu-cloud.img的稀疏云镜像
root@linuxtechi:/home/linuxtechi# du -sh ubuntu-cloud.img
12M ubuntu-cloud.img
root@linuxtechi:/home/linuxtechi# cp --sparse=always ubuntu-cloud.img /mnt/backup/
root@linuxtechi:/home/linuxtechi# du -sh /mnt/backup/ubuntu-cloud.img
0 /mnt/backup/ubuntu-cloud.img
root@linuxtechi:/home/linuxtechi#
在cp命令中使用稀疏参数时,可以使用不同的选项
我的开源项目