在 Windows 系统中,大家一定经常会有的一个行为就是复制或者移动一个文件到另一个文件夹下,又或者是移动一个文件夹到另一个文件夹下,这些都是常有的操作,并且很多时候我们也需要这么做;同样的,在 Linux 操作系统中,也会经常需要有复制或者移动的操作,将一个文件复制到本机另一个位置该怎么操作呢?其实很简单,本文就来为大家介绍一下在 Linux 系统中 cp
命令的使用。
首先介绍一下 cp
命令,cp
命令可以理解为英文单词 copy 的缩写,我们可以在命令行键入:
$ man cp
之后可以看到,在 Linux 系统中对 cp
的解释为 copy files and directories,翻译过来复制文件和目录。
cp
命令的基本语法使用格式:
cp [OPTION] SOURCE DEST
cp [选项] [源文件] [目标文件]
需要注意的是:cp
命令以及后面的选项和文件,每个元素之间都至少要有一个空格。
上面已经介绍 cp
命令的语法格式以及该命令的作用,在语法格式中,源文件很好理解也就是你要复制的那个文件,同样的目标文件也很好理解也就是需要复制到的文件。那么选项该怎么理解呢?下面就为大家介绍几个平时比较常用的选项:
参数选项 [option] | 解释说明 |
---|---|
-p | 复制文件时保持源文件的所有者、权限信息即时间属性(有继承的特性) |
-d | 如果复制的源文件是符号链接,那么仅复制符号链接本身,而且保留符号链接所指向的目标文件或目录 |
-r | 递归复制目录,即复制目录下的所有层级的子目录及文件 |
-a | 等同于上面 p、d、r 这 3 个选项功能的总和(比较强大的一个选项) |
-i | 覆盖已有文件前提示用户确认 |
-t | 默认情况下命令格式是 “cp 源文件 目标文件” ,使用 -t 参数可以颠倒顺序,格式变为 “cp -t 目标文件 源文件” |
说到这里,大家是不是对 cp
命令已经有所了解了呢。那么接下来,为大家演示一下使用范例,来让大家印象更深刻。在此之前还是先部署一下环境,如下所示( /src 为源目录,/desc 为目标目录):
示例1:(对比无参数和带参数 -a
的区别)
此处我们在执行 cp
之前先查看了源目录下文件的时间戳,然后分别拷贝 1.txt 和 2.txt,区别在于一个有使用 -a
选项。在执行完之后,查看目标目录下两个文件的时间戳,不难看出使用 -a
参数时,文件的时间属性没有改变,-a
参数的功能包含了 -p
参数保持文件的属性功能。
示例2:( -i
参数举例)
$ cp -i /src/1.txt /dest/a.file
cp: overwrite '/dest/a.file'?
可以看出,加了 -i
选项之后有了交互的功能,因为目标目录下已经有了 a.file 这个文件,如果再把源目录下 1.txt 复制为 a.file ,则会提示这个操作将会覆盖 ‘/dest/a.file’ 。为了对比效果,我们再次执行这个命令,不过这次不加 -i
选项:
$ cp /src/1.txt /dest/a.file
cp: overwrite '/dest/a.file'?
咦,很奇怪呢!为什么不加 -i
还是会有交互?那是因为 CentOS 系统默认为 cp
命令设置了别名,即当执行 cp
时默认执行的是 ‘ cp -i ‘。可以通过查看别名进行验证:
$ alias cp
alias cp='cp -i'
**注意:**这里如果想要继续执行覆盖操作,那么只需要键入 ‘ y ‘ 就可以,相反,如果不像继续执行覆盖操作,键入 ‘ n ‘ 即可。
示例3:( 复制目录 )
现在我想把整个源目录复制到目标目录,话不多说,为大家演示操作方法:
[root@VM-16-64-centos ~]$ cp /src/ /dest/ ==> 复制/src 到 /dest,但是结果显示跳过/src
cp: omitting directory '/src'
[root@VM-16-64-centos ~]$ cp -r /src/ /dest/ ==> 使用 -r 则可以复制成功
[root@VM-16-64-centos ~]$ tree /dest/ ==> 查看复制结果
/dest/
├── a.file
├── b.file
├── c.file
├── d.file
├── e.file
└── src
├── 1.txt
├── 2.txt
└── 3.txt
**提示:**使用 -a
也可以达到同样的效果,因为 -a
参数相当于 “dpr” 三个参数。
总结:cp
命令使用起来比较简单,也是一个使用频率很高的命令,并且这里为大家介绍的几个选项也足够平时使用。本文主要为大家介绍了几个比较常用到的参数供大家学习,如果还想了解更多关于 cp
的使用,可以去看一下 man 手册,里面涵盖了所有 cp
命令的相关内容。