2.13Linux下cp命令及其参数详解
下一篇: 2.14Linux下rm命令
在linux下,要复制文件或目录,使用cp(copy)命令即可。不过cp命令不仅可以用来复制文件,还可以创建快捷方式,对比新旧文等。下面先来看下cp命令的用法。
cp命令用法
[root@lmode ~]# cp [-adfilprsu] 复制源 目标源 [root@lmode ~]# cp [options] source1 source2 ... 目录
其实命令的用法很简单,就是将复制源(source,就是你要复制的文件或目录)复制到相应的目标源(destination,就是文件最终被复制到的目录)。
cp选项和参数
选项与参数: -a :相当于 -pdr 的意思,pdr相应含义看下面 -d :若来源为连结档的属性(link file),则复制连结档属性而原非文件本身; -f :为强制(force)的意思,若目标文件已经存在且无法开启,则移除后再尝试一次; -i :若目标档(destination)已经存在时,在覆盖时会先询问是否进行覆盖(常用) -l :进行硬式连结(hard link)的连结档创建,而非复制文件本身; -p :连同文件的属性一起复制过去,而非使用默认属性(备份常用); -r :递回持续复制,用于目录的复制行为;(常用) -s :复制成为符号连结档 (symbolic link),也就是捷径文件的意思; -u :若 destination 比 source 旧才升级 destination ! 最后需要注意的,如果来源文件有两个以上,则最后一个目的档一定要是目录才行。
复制(cp)这个命令是非常重要的,不同身份者运行这个命令会有不同的结果产生,尤其是那个-a, -p的选项,对于不同身份来说,差异则非常的大。
实例1:
用root身份,将家目录下的.bashrc 复制到 /tmp 下,并更名为bashrc。
[root@lmode ~]# cp ./.bashrc /tmp/bashrc [root@lmode ~]# cp -i ./.bashrc /tmp/bashrc cp: overwrite `/tmp/bashrc'? n <==n不覆盖,y为覆盖 # 重复作两次动作,由于第一次复制/tmp底下已经存在 bashrc了,加上 -i 选项后, # 则在覆盖前会询问是否对原来的内容进行覆盖提示。可以按下 n(no,不覆盖)或者y(yes,同意覆盖)来进行二次确认。
实例2:
切换目录到/tmp,并将/var/log/wtmp复制到/tmp下并观察属性:
[root@lmode ~]# cd /tmp [root@lmode tmp]# cp /var/log/wtmp . <==.表示复制到当前目录 [root@lmode tmp]# ls -l /var/log/wtmp wtmp -rw-rw-r-- 1 root utmp 96384 Sep 24 11:54 /var/log/wtmp -rw-r--r-- 1 root root 96384 Sep 24 14:06 wtmp 在不加任何选项的情况下,复制文件的某些属性/权限发生改变,上面文件的创建时间也发生了变化
实例3:
在复制过程中如果想要将文件的所有特性都一起复制过来要怎么做?可以加上-a参数。
[root@lmode tmp]# cp -a /var/log/wtmp wtmp_2 [root@lmode tmp]# ls -l /var/log/wtmp wtmp_2 -rw-rw-r-- 1 root utmp 96384 Sep 24 11:54 /var/log/wtmp -rw-rw-r-- 1 root utmp 96384 Sep 24 11:54 wtmp_2
在cp复制的过程中,复制完成后,复制文件的拥有者与群组就变成操作者本身。所以一般来说,cp的来源文件与最终复制后的文件权限可能不同。所以,基于这个特性,当我们在进行备份的时候,某些需要特别注意的特殊权限文件,例如密码文件(/etc/shadow)以及一些配置文件,就不能直接以cp来复制,而必须要加上 -a 或者是 -p 等等可以完整复制文件权限的选项。另外,如果你想要复制文件给其他的使用者,也必须要注意到文件的权限(包含读、写、运行以及文件拥有者等)。
实例4:
复制 /etc/ 这个目录下的所有内容到 /tmp 底下。
[root@lmode tmp]# cp /etc/ /tmp cp: omitting directory `/etc' <== 如果是目录则不能直接复制,要加上-r的选项 [root@lmode tmp]# cp -r /etc/ /tmp # -r 是可以复制目录,但是,文件与目录的权限可能会被改变 # 所以,也可以利用cp -a /etc /tmp 来下达命令。尤其是在备份的情况下。
实例5:
将家目录的 .bashrc 及 .bash_history 复制到 /tmp 底下。
[root@lmode tmp]# cp ~/.bashrc ~/.bash_history /tmp # 可以将多个数据一次复制到同一个目录去。最后面一定是目录。
实例6:
普通用户很难将一些高权限用户的文件属性完整复制过来。
比如否使用普通用户,完整的复制/var/log/wtmp文件到/tmp底下?
[ppp@www ~]$ cp -a /var/log/wtmp /tmp/ppp_wtmp [ppp@www ~]$ ls -l /var/log/wtmp /tmp/ppp_wtmp -rw-rw-r-- 1 vbird vbird 96384 9月 24 11:54 /tmp/ppp_wtmp -rw-rw-r-- 1 root utmp 96384 9月 24 11:54 /var/log/wtmp
由于普通用户的身份并不能随意修改文件的拥有者与群组,因此虽然能够复制wtmp的相关权限与时间等属性,但是与拥有者、群组相关的,即使加上 -a 选项,普通用户也是无法达成完整复制权限的!
下一篇: 2.14Linux下rm命令
2 Comments
文章写的很详细。
cp参数好多,好容易混掉。。