650)this.width=650;"src="https://img.baidu.com/hi/jx2/j_0003.gif"alt="j_0003.gif"/>650)this.width=650;"src="https://i"/>

linux之cp命令详解

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux之cp命令详解相关的知识,希望对你有一定的参考价值。

技术分享技术分享技术分享技术分享技术分享技术分享技术分享技术分享技术分享技术分享技术分享技术分享技术分享技术分享

Copy Files And Directory

       文件的复制和移动对于大多数计算机爱好者来说是耳熟能详的,在window下直接鼠标右键复制粘贴,重命名等等,看着是那么简单,但是步骤也不少,但是在linux中文件的复制与移动也仅仅就是一句命令就可以实现,下面我们就来看看文件中的复制命令把..

    Name:

                cp(copy files and directory)复制文件和目录

    命令格式:

                cp [选项]... SOURCE... DESC

                "..."表示源文件可以有多个因此我们可以从上面得到这样的结论:

  1. cp只能把一个文件复制成另一个文件

  2. cp可以把多个文件复制到一个目录里

   3.如果cp后面有很多文件,那么最后一个一定是一个目录

下面我们通过代码详细了解一下cp的实际用法:

[[email protected] ~]$ cp /etc/man_db.conf /tmp/test
[[email protected] ~]$ ls /tmp/
anaconda.log      storage.log
hsperfdata_root   systemd-private-3E1wlM
ifcfg.log         systemd-private-cxUWsv
ks-script-5GePg3  systemd-private-StjRUY
packaging.log     test
program.log       vmware-root
ssh-x1RDJKuGNlHn  yum.log
[[email protected] ~]$


这句命令是把man_db.conf复制到/tmp/下面并且把文件改名为test

如果目标目录下存在目标文件,那么源文件的内容就会覆盖目标文件

[[email protected] tmp]$ cp /etc/man_db.conf /tmp/test
[[email protected] tmp]$ cp /etc/locale.conf /tmp/test
cp:是否覆盖"/tmp/test"?


这样是不是很清楚明白呢?大家注意这里cp的交互是因为在alias中定义了一个alias cp=‘cp -i‘的原因,i是cp的一个选项,实现人机交互的作用,这里的覆盖其实相当于把原来的test文件删除,然后把源文件复制到/tmp/下并且改名为test,这一点我们要理解

可是,如果test在/tmp/下是一个目呢?

[[email protected] tmp]$ cp /etc/man_db.conf /tmp/test
[[email protected] tmp]$ ls /tmp/test
man_db.conf
[[email protected] tmp]$


这样一看就明白了,把源文件复制到test目录下,源文件的名称不变

下面我们看这样一段代码

[[email protected] tmp]$ cp /etc/init.d/ /tmp/
cp: 略过目录"/etc/init.d/"
[[email protected] tmp]$


    这是什么意思呢,原因很简单,cp默认机制是复制文件的,不会复制目录,可是我们想复制目录改如何实现呢?

-r:[递归选项]复制一个目录及其目录下的所有文件

[[email protected] tmp]$ cp -r /etc/init.d/ /tmp/home
[[email protected] tmp]$ ls /tmp/home
functions  netconsole  network  README
[[email protected] tmp]$


这样大家是不是看明白了呢? -r会把一个目录以及目录下的所有的文件递归复制出来到目标目录中,大家仔细看,/tmp下是没有home目录的,这样的执行会直接创建一个home目录并且home目录里面有源目录的内容,大家理解了吗

我们假如home是一个文件,看一看什么情况

[[email protected] tmp]$ cp -r /etc/init.d/ /tmp/1
cp: 无法以目录"/etc/init.d/" 来覆盖非目录"/tmp/1"
[[email protected] tmp]$


会提示你cp: 无法以目录"/etc/init.d/" 来覆盖非目录"/tmp/1",但是在有些系统的版本中是可以执行的,执行的结果就是会覆盖文件的内容,并且创建成一个没有源文件的错误的链接,好这里大家注意一下就可以了

下面我们看一下cp的一些其它选项

-f:表示强行复制

如果目标文件存在,不进行人机交互,直接覆盖文件内容,是不是很霸道呢?

[[email protected] tmp]$ cp -f /etc/man_db.conf /tmp/1
[[email protected] tmp]$


-i:进行人际交互,前面我们讲过了

-p:保留文件的属主,属组,时间戳

[[email protected] tmp]$ cp -p ./storage.log ./storage.log1
[[email protected] tmp]$ ll
-rw-r--r--. 1 root  root       0 3月   9 23:36 storage.log
-rw-r--r--. 1 jason jason      0 3月   9 23:36 storage.log1


-L:复制的是链接,实际上复制的是链接指向的文件(默认的是-L)

[[email protected] etc]$ ll
lrwxrwxrwx.  1 root root       13 3月  10 07:19 rc.local -> rc.d/rc.local
[[email protected] etc]$ cp -L /etc/rc.local /tmp/
[[email protected] etc]$ ll /tmp
-rw-r--r--. 1 jason jason    473 3月  10 16:59 rc.local


看明白是什么意思了么?复制过来后显示的是一个文件,文件的内容是rc.d/rc.local的内容,而不是链接

-P:保持链接自身

[[email protected] etc]$ cp -P /etc/rc.local /tmp/rc12.local
[[email protected] etc]ll /tmp
lrwxrwxrwx. 1 jason jason     13 3月  10 17:04 rc12.local -> rc.d/rc.local

原来的是链接,复制过来的还是链接

-d:与-P一样,复制链接自身

-R:与-r一样,递归

-a:same as -dR,猜猜什么意思技术分享,"归档",就是不改变文件的所有属性,备份存放

好了,演示到这,cp这个命令我想你一定会是熟记于心了,在回头巩固巩固吧技术分享

技术分享技术分享技术分享技术分享技术分享技术分享技术分享技术分享技术分享技术分享技术分享技术分享技术分享技术分享

本文出自 “Jasonforcto” 博客,请务必保留此出处http://xuelong.blog.51cto.com/10573089/1749664

以上是关于linux之cp命令详解的主要内容,如果未能解决你的问题,请参考以下文章

Linux命令之CP详解

linux之cp/scp命令+scp命令详解

linux之cp/scp命令+scp命令详解

linux之cp/scp命令+scp命令详解

linux之cp命令详解

linux之cp/scp命令+scp命令详解