乐趣区

关于linux:通过16个实例掌握-linux-cp-命令

作为 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 选项,将文件交互地从一个中央复制到另一个中央,交互选项只在目标目录曾经有雷同的文件时才无效,示例如下所示

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) 复制目录或文件夹 (-r or -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 选项轻松实现。

In the Example:6 we have copied the linuxtechi home directory to
/mnt/backup folder, in the linuxtechi home folder we have 5 txt files,
let’s edit couple of them and then copy all the txt files using“cp -u”.

在示例 6 中,咱们将 linuxtechi 家目录复制到 /mnt/backup 文件夹,在 linuxtechi 主文件夹中,咱们有 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 选项,示例如下所示

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:~#

如果您留神到,备份曾经创立,并在文件开端追加了波浪号符号。备份选项承受以下参数

  • none, off – never make backups
  • numbered, t – make numbered backups
  • existing, nil – numbered if numbered backups exist, simple otherwise
  • simple, never – always make simple backups

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 选项,示例如下所示

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) 复制稠密文件

稠密文件是一个惯例文件,它蕴含一个零字节的长序列,不耗费任何物理磁盘块。稠密文件的益处之一是它不会耗费太多的磁盘空间,并且对该文件的读取操作将十分快。

假如咱们有一个命名为 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 命令中应用稠密参数时,能够应用不同的选项

  • sparse=auto
  • sparse-always
  • sparse=never

我的开源我的项目

  • course-tencent-cloud(酷瓜云课堂 – gitee 仓库)
  • course-tencent-cloud(酷瓜云课堂 – github 仓库)
退出移动版