Linux之cp命令详解

Copy Files And Directory文件的复制和移动对于大多数计算机爱好者来说是耳熟能详的,在windows下直接鼠标右键复制粘贴,重命名等等,看着是那么简单,但是步骤也不少,但是在Linux中文件的复制与移动也仅仅就是一句命令就可以实现,下面我们就来看看文件中的复制命令把.. Name: cp(copy files and directory)复制文件和目录 命令格式:

cp [选项]… SOURCE… DESC

“…”表示源文件可以有多个因此我们可以从上面得到这样的结论:cp只能把一个文件复制成另一个文件

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

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

下面我们通过代码详细了解一下cp的实际用法:[linuxidc@mylab ~]$ cp /etc/man_db.conf /tmp/test[linuxidc@mylab ~]$ ls /tmp/anaconda.log storage.log hsperfdata_root systemd-private-3E1wlM ifcfg.log systemd-private-cxUWsv ks-script-5GePg3 systemd-private-StjRUY packaging.log testprogram.log vmware-root ssh-x1RDJKuGNlHn yum.log [linuxidc@mylab ~]$

这句命令是把man_db.conf复制到/tmp/下面并且把文件改名为test如果目标目录下存在目标文件,那么源文件的内容就会覆盖目标文件[linuxidc@mylab tmp]$ cp /etc/man_db.conf /tmp/test[linuxidc@mylab tmp]$ cp /etc/locale.conf /tmp/testcp:是否覆盖”/tmp/test”?

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

可是,如果test在/tmp/下是一个目呢?[linuxidc@mylab tmp]$ cp /etc/man_db.conf /tmp/test[linuxidc@mylab tmp]$ ls /tmp/testman_db.conf [linuxidc@mylab tmp]$

这样一看就明白了,把源文件复制到test目录下,源文件的名称不变下面我们看这样一段代码[linuxidc@mylab tmp]$ cp /etc/init.d/ /tmp/cp: 略过目录”/etc/init.d/”[linuxidc@mylab tmp]$

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

-r:[递归选项]复制一个目录及其目录下的所有文件[linuxidc@mylab tmp]$ cp -r /etc/init.d/ /tmp/home[linuxidc@mylab tmp]$ ls /tmp/homefunctions netconsole network README [linuxidc@mylab tmp]$

这样大家是不是看明白了呢? -r会把一个目录以及目录下的所有的文件递归复制出来到目标目录中,大家仔细看,/tmp下是没有home目录的,这样的执行会直接创建一个home目录并且home目录里面有源目录的内容,大家理解了吗我们假如home是一个文件,看一看什么情况[linuxidc@mylab tmp]$ cp -r /etc/init.d/ /tmp/1cp: 无法以目录”/etc/init.d/” 来覆盖非目录”/tmp/1″[linuxidc@mylab tmp]$

会提示你cp: 无法以目录”/etc/init.d/” 来覆盖非目录”/tmp/1″,但是在有些系统的版本中是可以执行的,执行的结果就是会覆盖文件的内容,并且创建成一个没有源文件的错误的链接,好这里大家注意一下就可以了下面我们看一下cp的一些其它选项-f:表示强行复制如果目标文件存在,不进行人机交互,直接覆盖文件内容,是不是很霸道呢?[linuxidc@mylab tmp]$ cp -f /etc/man_db.conf /tmp/1[linuxidc@mylab tmp]$

-i:进行人际交互,前面我们讲过了-p:保留文件的属主,属组,时间戳1234 [linuxidc@mylab tmp]$ cp -p ./storage.log ./storage.log1 [linuxidc@mylab tmp]$ ll -rw-r–r–. 1 root root 0 3月 9 23:36 storage.log -rw-r–r–. 1 linuxidc jason 0 3月 9 23:36 storage.log1

-L:复制的是链接,实际上复制的是链接指向的文件(默认的是-L)[linuxidc@mylab etc]$ ll lrwxrwxrwx. 1 root root 13 3月 10 07:19 rc.local -> rc.d/rc.local[linuxidc@mylab etc]$ cp -L /etc/rc.local /tmp/[linuxidc@mylab etc]$ ll /tmp-rw-r–r–. 1 linuxidc jason 473 3月 10 16:59 rc.local

看明白是什么意思了么?复制过来后显示的是一个文件,文件的内容是rc.d/rc.local的内容,而不是链接-P:保持链接自身[linuxidc@mylab etc]$ cp -P /etc/rc.local /tmp/rc12.local[linuxidc@mylab etc]ll /tmplrwxrwxrwx. 1 linuxidc jason 13 3月 10 17:04 rc12.local -> rc.d/rc.local

原来的是链接,复制过来的还是链接-d:与-P一样,复制链接自身

-R:与-r一样,递归-a:same as -dR,猜猜什么意思j_0006.gif,”归档”,就是不改变文件的所有属性,备份存放好了,演示到这,cp这个命令我想你一定会是熟记于心了,在回头巩固巩固。

而是深沉的意志恢弘的想象炙热的恋情;青春是生命的深泉在涌流。

Linux之cp命令详解

相关文章:

你感兴趣的文章:

标签云: