简介

cp命令来缘于英语词组“copy”,用于复制文件和目录。它是Linux系统中最常用的文件管理命令之一linux cp命令,可以将文件或目录从一个位置复制到另一个位置。

使用方法

cp [选项]... 源文件 目标文件
cp [选项]... 源文件... 目标目录

常用选项--backup[=CONTROL]

默认的备份文件后缀为‘~’,也可通过--suffix或SIMPLE_BACKUP_SUFFIX这个环境变量来更改。

--backup可以拿来控制备份的模式,也可以通过VERSION_CONTROL这个环境变量来设定。具体的模式如下:

--reflink[=WHEN]

当指定了--reflink[=always]时,cp命令会执行一种轻量级的复制方法。在这些情况下,只有在原始数据块被更改时,才能实际复制这种数据块。若果系统不支持该操作,那复制会失败。

当使用--reflink=auto时,系统会尝试进行这些轻量级的复制,若果此时失败,则会回挪到普通的复制模式。

使用--reflink=never则会确保本次复制是普通模式。

稀疏文件

默认情况下,系统会用一种简单的启发式(crudeheuristic)方法来检查源文件是否为稀疏文件。假如源文件被辨识为稀疏文件,这么目标文件也会被设置为稀疏文件。这些行为由--sparse=auto来控制。

倘若指定了--sparse=always,系统会在源文件包含有足够长的零字节序列时创建稀疏文件。

使用--sparse=never将确保目标文件仍然是一个常规文件。

linux cp命令_linuxcp命令源代码_linux复制命令cp

参考示例1.复制文件到另一个目录

cp test.txt subdir/

上述指令将当前目录下的test.txt文件复制到了当前目录的subdir目录下:

jay@jaylinuxlenovo:~/test/cmd_test_dir$ cp test.txt subdir/
jay@jaylinuxlenovo:~/test/cmd_test_dir$ ls -R
.:
subdir  test.txt
./subdir:
test.txt

首先执行复制指令,再使用ls命令查看当前目录结构发觉test.txt已被成功复制到了subdir目录下。

2.复制文件并备份已存在的目标文件

cp --backup test.txt subdir/

在示例1的基础上,加入--backup选项,因为示例1中早已复制了一个test.txt到subdir中linux学习视频,因而本次复制因为使用了--backup,系统会手动对原来的test.txt创建一个备份:

linux复制命令cp_linux cp命令_linuxcp命令源代码

jay@jaylinuxlenovo:~/test/cmd_test_dir$ cp --backup test.txt subdir/
jay@jaylinuxlenovo:~/test/cmd_test_dir$ ls -lR
.:
total 8
drwxrwxr-x 2 jay jay 4096 Jul 22 14:50 subdir
-rw-rw-r-- 1 jay jay   17 Jul 22 14:37 test.txt
./subdir:
total 8
-rw-rw-r-- 1 jay jay 17 Jul 22 14:50 test.txt
-rw-rw-r-- 1 jay jay 17 Jul 22 14:38 test.txt~

经过复制后可以发觉subdir中多了一个test.txt~的文件,该文件即系统在复制之前创建的原test.txt的备份文件。

3.复制整个目录

cp -r subdir ./test

复制当前目录下的subdir目录及其内部的所有内容到当前目录下的test目录中:

linuxcp命令源代码_linux cp命令_linux复制命令cp

jay@jaylinuxlenovo:~/test/cmd_test_dir$ cp -r subdir ./test
jay@jaylinuxlenovo:~/test/cmd_test_dir$ ls -lR test
test:
total 4
drwxrwxr-x 2 jay jay 4096 Jul 22 14:56 subdir
test/subdir:
total 8
-rw-rw-r-- 1 jay jay 17 Jul 22 14:56 test.txt
-rw-rw-r-- 1 jay jay 17 Jul 22 14:56 test.txt~

可见subdir及其内容早已全部复制到了test目录中。

4.交互式复制文件

cp -i test.txt ./subdir/

使用-i选项可以在目标文件已存在时提示用户是否要覆盖,此时输入y/n可以决定是否覆盖:

jay@jaylinuxlenovo:~/test/cmd_test_dir$ cat ./subdir/test.txt

linux复制命令cp_linux cp命令_linuxcp命令源代码

This is test.txt jay@jaylinuxlenovo:~/test/cmd_test_dir$ cp -i test.txt ./subdir/ cp: overwrite './subdir/test.txt'? y jay@jaylinuxlenovo:~/test/cmd_test_dir$ cat ./subdir/test.txt This is a new test.txt

可以看见在复制之前使用cat命令查看test.txt内容为Thisistest.txtlinux cp命令,此时使用cp-i指令进行复制,但是在系统进行交互提示后输入y确认。最后再度使用cat命令查看文件内容早已弄成了Thisisanewtest.txt,表示覆盖成功。

5.创建文件的硬链接

cp -l test.txt test_hl.txt

使用-l选项创建test.txt的硬链接,但是将其命名为test_hl.txt:

jay@jaylinuxlenovo:~/test/cmd_test_dir$ cp -l test.txt test_hl.txt
jay@jaylinuxlenovo:~/test/cmd_test_dir$ ls -l
total 16
drwxrwxr-x 2 jay jay 4096 Jul 22 14:50 subdir
drwxrwxr-x 3 jay jay 4096 Jul 22 14:58 test
-rw-rw-r-- 2 jay jay   24 Jul 22 15:02 test_hl.txt

linuxcp命令源代码_linux复制命令cp_linux cp命令

-rw-rw-r-- 2 jay jay 24 Jul 22 15:02 test.txt

6.创建文件的符号链接

cp -s test.txt test_sl.txt

使用-s选项创建test.txt的软链接linux cp,并将其命名为test_sl.txt:

jay@jaylinuxlenovo:~/test/cmd_test_dir$ cp -s test.txt test_sl.txt
jay@jaylinuxlenovo:~/test/cmd_test_dir$ ls -l
total 16
drwxrwxr-x 2 jay jay 4096 Jul 22 14:50 subdir
drwxrwxr-x 3 jay jay 4096 Jul 22 14:58 test
-rw-rw-r-- 2 jay jay   24 Jul 22 15:02 test_hl.txt
lrwxrwxrwx 1 jay jay    8 Jul 22 15:13 test_sl.txt -> test.txt
-rw-rw-r-- 2 jay jay   24 Jul 22 15:02 test.txt

注意事项

Tagged:
Author

这篇优质的内容由TA贡献而来

刘遄

《Linux就该这么学》书籍作者,RHCA认证架构师,教育学(计算机专业硕士)。

发表回复