日期:2014-05-16  浏览次数:20818 次

linux学习——档案目录之cp,rm,mv
复制、删除与移动:cp, rm, mv
要复制档案,请使用cp(copy) 这个指令即可,不过,cp 这个指令的用途可多了,除了单纯的复制之
外,还可以建立连结档(就是快捷方式啦) ,比对两档案的新旧而予以更新,以及复制整个目录等等的功
能呢!至于移动目录与档案,则使用mv (move) ,这个指令也可以直接拿来作更名(rename) 的动作
!至于移除吗?那就是rm (remove) 这个指令啰~底下我们就先来瞧一瞧~

  cp (复制档案或目录)
[root@sky ~]# cp [-adfilprsu] 来源文件(source) 目标文件(destination)
[root@sky ~]# cp [options] source1 source2 source3 .... directory
选项不参数:
-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 的
选项,对于不同身份来说,差异则非常的大!底下的练习中,有的身份为root 有的身份为一般账号(在
我这里用vbird 这个账号) ,练习时请特别注意身份的差别喔!好!开始来做复制的练习不观察:

范例一:用root 身份,将家目录下的.bashrc 复制到/tmp 下,并更名为
bashrc
[root@sky ~]# cp ~/.bashrc /tmp/bashrc
[root@sky ~]# cp -i ~/.bashrc /tmp/bashrc
cp: overwrite `/tmp/bashrc'? n <==n不覆盖,y 为覆盖

# 重复作两次动作,由于/tmp 底下已经存在bashrc 了,加上-i 选项后,则在覆盖前会询问使用者是否确定!可以按下n 或者y 来二次确认呢!

范例二:变换目录到/tmp ,并将/var/log/wtmp 复制到/tmp 且观察属性:
[root@sky ~]# cd /tmp
[root@sky tmp]# cp /var/log/wtmp . <==想要复制到当前目录,最后的.不要忘
[root@sky 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

# 注意上面的特殊字体,在不加任何选项的情况下,档案的某些属性/权限会改变;这是个很重要的特性!要注意喔!还有,连档案建立的时间也不一样了!
那如果你想要将档案的所有特性都一起复制过来该忟怎么办?可以加上-a 喔!如下所示:
[root@sky tmp]# cp -a /var/log/wtmp wtmp_2
[root@sky 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
# 看到了吧!整个资料特性完全一模一样!相当不错吧~这就是-a 的特性!

这个cp 的功能很多,由于我们常常会进行一些数据的复制,所以也会常常用到这个指令的。一般来
说,我们如果去复制别人的数据(当然,该档案你必须要有read 的权限才行啊!^_^) 时,总是希望
复制到的数据最后是我们自己的,所以,在预设的条件中,cp 的来源档与目的档的权限是不同的,目
的档的拥有者通常会是指令操作者本身。丼例来说,上面的范例二中,由于我是root 的身份,因此复
制过来的档案拥有者与群组就改变成为root 所有了!这样说,可以明白吗?^_^

由于具有这个特性,因此当我们在进行备份的时候,某些需要特别注意的特殊权限档案,例如密码文
件(/etc/shadow) 以及一些配置文件,就不能直接以cp 来复制,而必须要加上-a 或者是-p 等等可以
完整复制档案权限的选项才行!另外,如果你想要复制档案给其他的使用者,也必须要注意到档案的
权限(包括读、写、执行以及档案拥有者等等) ,否则,其他人还是无法针对你给予的档案进行修订的动
作喔!注意注意!

范例三:复制/etc/ 这个目录下的所有内容到/tmp 底下
[root@sky tmp]# cp /etc/ /tmp
cp: omitting directory `/etc' <== 如果是目录则不能直接复制,要加上-r 的选项
[root@sky tmp]# cp -r /etc/ /tmp
# 还是要再次的强调喔!-r 是可以复制目录,但是,档案不目录的权限可能会被改变所以,也可以利用『cp -a /etc /tmp 』来下达指令喔!尤其是在备份的情况下!

范例四:将范例一复制的bashrc 建立一个连结档(symbolic link)

[root@sky tmp]# ls -l bashrc
-rw-r--r-- 1 root root 176 Sep 24 14:02 bashrc <==先观察一下档案情况
[root@sky tmp]# cp -s bashrc bashrc_slink
[root@sky tmp]# cp -l bashrc bashrc_hlink
[root@sky tmp]# ls -l bashrc*
-rw-r--r-- 2 root root 176 Sep 24 14:02 bashrc <==与源文件不太一样了!
-rw-r--r-- 2 root root 176 Sep 24 14:02 bashrc_hlink
lrwxrwxrwx 1 root root 6 Sep 24 14:20 bashrc_slink -> bashrc

范例四可有趣了!使用-l 及-s 都会建立所谓的连结档(link file) ,但是这两种连结档即有不一样的情
况。这是忟么一回事啊?那个-l 就是所谓的实体链接(hard link) ,至于-s 则是符号链接(symbolic
link) ,简单来说,bashrc_slink 是一个【忚捷方式】,这个快捷方式会连结到bashrc 去!所以你会看
到档名右侧会有个指向(->)的符号!
至于bashrc_hlink 档案与bashrc 的属性与权限完全一模一样,与尚未进行连结前的差异则是第二栏的
link 数由1 变成2 了!

范例五:若~/.bashrc 比/tmp/bashrc 新才复制过来
[root@sky tmp]# cp -u ~/.bashrc /tmp/bashrc
# 这个-u 的特性,是在目标档案不来源档案有差异时,才会复制的。所以,比较常被用于【备份】的工作当中喔!^_^

范例六:将范例四造成的bashrc_slink 复制成为bashrc_slink_1 与 bashrc_slink_2

[root@sky tmp]# c