MyException - 我的异常网
当前位置:我的异常网» Linux/Unix » linux学习——档案索引之cp,rm,mv

linux学习——档案索引之cp,rm,mv

www.MyException.Cn  网友分享于:2013-07-03  浏览:13次
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]# cp bashrc_slink bashrc_slink_1
[root@sky tmp]# cp -d bashrc_slink bashrc_slink_2
[root@sky tmp]# ls -l bashrc bashrc_slink*
-rw-r--r-- 2 root root 176 Sep 24 14:02 bashrc
lrwxrwxrwx 1 root root 6 Sep 24 14:20 bashrc_slink -> bashrc
-rw-r--r-- 1 root root 176 Sep 24 14:32 bashrc_slink_1 <==不源文件相同
lrwxrwxrwx 1 root root 6 Sep 24 14:33 bashrc_slink_2 -> bashrc <==是连结档!
# 这个例子也是很有趣!原本复制的是连结档,但是即将连结档的实际档案复制过来了也就是说,如果没有加上任何选项时,cp 复制的是源文件,而非链接文件的属性!若要复制链接文件的属性,就得要使用-d 的选项了!如bashrc_slink_2 所示。

范例七:将家目录的.bashrc 及.bash_history 复制到/tmp 底下

[root@sky tmp]# cp ~/.bashrc ~/.bash_history /tmp
# 可以将多个数据一次复制到同一个目录去!最后面一定是目录!

rm (移除档案或目录)
[root@sky ~]# rm [-fir] 档案或目录
选项不参数:
-f :就是force 的意思,忽略不存在的档案,不会出现警告信息;
-i :互动模式,在删除前会询问使用者是否执行
-r :递归删除,最常用在目录的删除了!这是非常危险的选项!!!

范例一:将刚刚在cp 的范例中建立的bashrc 删除掉!
[root@sky ~]# cd /tmp
[root@sky tmp]# rm -i bashrc
rm: remove regular file `bashrc'? y
# 如果加上-i 的选项就会主动询问,避免你删除到错误的档案!

范例二:透过通配符*的帮助,将/tmp 底下开头为bashrc 的档名通通删除:
[root@sky tmp]# rm -i bashrc*
# 注意那个星号,代表的是0 到无穷多个任意字符喔!很好用的东西!

范例三:将cp 范例中所建立的/tmp/etc/ 这个目录删除掉!
[root@sky tmp]# rmdir /tmp/etc
rmdir: etc: Directory not empty <== 删不掉啊!因为这不是空的目录!
[root@sky tmp]# rm -r /tmp/etc
rm: descend into directory `/tmp/etc'? y
# 因为身份是root,预设已经加入了-i 的选项,所以你要一直按y 才会删除!如果不想要继续挄y ,可以按下【[ctrl]-c】来结束rm 的工作。这是一种保护的动作,如果确定要删除掉此目录而不要询问,可以这样做:
[root@sky tmp]# \rm -r /tmp/etc
# 在指令前加上反斜杠,可以忽略掉alias 的指定选项!

范例四:删除一个带有- 开头的档案
[root@sky tmp]# touch ./-aaa- <==touch 这个指令可以建立空档案!
[root@sky tmp]# ls -l
-rw-r--r-- 1 root root 0 Sep 24 15:03 -aaa- <==档案大小为0 ,所以是空档案
[root@sky tmp]# rm -aaa-
Try `rm --help' for more information. <== 因为"-" 是选项嘛!所以系统误判了!
[root@sky tmp]# rm ./-aaa-

这是移除的指令(remove) ,要注意的是,通常在Linux 系统下,为了怕档案被误杀,所以很多distributions 都已经默认加入-i 这个选项了!而如果要连目录下的东西都一起杀掉的话,例如子目录里面还有子目录时,那就要使用-r 这个选项了!不过,使用【rm -r 】这个指令之前,请千万要注意,因为该目录或档案【肯定】会被root 杀掉!因为系统不会再次询问你是否要砍掉哦!所以那是个超级严重的指令下达呦!得特别注意!不过,如果你确定该目录不要了,那么使用rm -r 来循环杀掉是不错的方式!另外,范例四也是很有趣的例子,我们在之前就谈过,档名最好不要使用"-" 号开头,因为"-" 后面接的是选项,因此,单纯的使用【 rm -aaa- 】系统的指令就会误判啦!那如果使用后面会谈到的正规表示法时,还是会出问题的!所以,叧能用避过首位字符是"-" 的方法啦!就是加上本目录【./ 】即可!如果man rm 的话,其实还有一种方法,那就是【rm -- -aaa- 】也可以哦!

mv (移动档案与目录,或更名)
[root@sky ~]# mv [-fiu] source destination
[root@sky ~]# mv [options] source1 source2 source3 .... directory
选项不参数:
-f :force 强制的意思,如果目标档案已经存在,不会询问而直接覆盖;
-i :若目标档案(destination) 已经存在时,就会询问是否覆盖!
-u :若目标档案已经存在,且source 比较新,才会更新(update)

范例一:复制一档案,建立一目录,将档案移动到目录中
[root@sky ~]# cd /tmp
[root@sky tmp]# cp ~/.bashrc bashrc
[root@sky tmp]# mkdir mvtest
[root@sky tmp]# mv bashrc mvtest
# 将某个档案移动到某个目录去,就是这样做!

范例二:将刚刚的目录名称更名为mvtest2
[root@sky tmp]# mv mvtest mvtest2 <== 这样就更名了
# 其实在Linux 底下还有个有趣的指令,名称为rename,该指令专职进行多个档名的同时更名,幵非针对单一档名变更,与mv 不同。

范例三:再建立两个档案,再全部移动到/tmp/mvtest2 当中
[root@sky tmp]# cp ~/.bashrc bashrc1
[root@sky tmp]# cp ~/.bashrc bashrc2
[root@sky tmp]# mv bashrc1 bashrc2 mvtest2
# 注意到这边,如果有多个来源档案或目录,则最后一个目标文件一定是【目 录】意思是说,将所有的数据移动到该目录的意思!这是搬移(move) 的意思!当你要移动档案或目录的时候,这个指令就很重要啦!同样的,你也可以使用-u ( update )来测试新旧档案,看看是否需要搬移啰!另外一个用途就是【变更档名】我们可以很轻易的使用mv 来变更一个档案的档名呢!不过,在Linux 的指令当中,有个rename ,可以用来更改大量档案的档名,你可以利用man rename 来查阅一下,也是挺有趣的指令喔!

文章评论

当下全球最炙手可热的八位少年创业者
当下全球最炙手可热的八位少年创业者
每天工作4小时的程序员
每天工作4小时的程序员
代码女神横空出世
代码女神横空出世
 程序员的样子
程序员的样子
如何区分一个程序员是“老手“还是“新手“?
如何区分一个程序员是“老手“还是“新手“?
如何成为一名黑客
如何成为一名黑客
聊聊HTTPS和SSL/TLS协议
聊聊HTTPS和SSL/TLS协议
10个调试和排错的小建议
10个调试和排错的小建议
老美怎么看待阿里赴美上市
老美怎么看待阿里赴美上市
鲜为人知的编程真相
鲜为人知的编程真相
漫画:程序员的工作
漫画:程序员的工作
5款最佳正则表达式编辑调试器
5款最佳正则表达式编辑调试器
中美印日四国程序员比较
中美印日四国程序员比较
程序员周末都喜欢做什么?
程序员周末都喜欢做什么?
初级 vs 高级开发者 哪个性价比更高?
初级 vs 高级开发者 哪个性价比更高?
什么才是优秀的用户界面设计
什么才是优秀的用户界面设计
一个程序员的时间管理
一个程序员的时间管理
十大编程算法助程序员走上高手之路
十大编程算法助程序员走上高手之路
为什么程序员都是夜猫子
为什么程序员都是夜猫子
做程序猿的老婆应该注意的一些事情
做程序猿的老婆应该注意的一些事情
程序员的一天:一寸光阴一寸金
程序员的一天:一寸光阴一寸金
程序猿的崛起——Growth Hacker
程序猿的崛起——Growth Hacker
不懂技术不要对懂技术的人说这很容易实现
不懂技术不要对懂技术的人说这很容易实现
写给自己也写给你 自己到底该何去何从
写给自己也写给你 自己到底该何去何从
Java程序员必看电影
Java程序员必看电影
程序员和编码员之间的区别
程序员和编码员之间的区别
我跳槽是因为他们的显示器更大
我跳槽是因为他们的显示器更大
我是如何打败拖延症的
我是如何打败拖延症的
程序员必看的十大电影
程序员必看的十大电影
程序员最害怕的5件事 你中招了吗?
程序员最害怕的5件事 你中招了吗?
老程序员的下场
老程序员的下场
“肮脏的”IT工作排行榜
“肮脏的”IT工作排行榜
总结2014中国互联网十大段子
总结2014中国互联网十大段子
程序员的鄙视链
程序员的鄙视链
60个开发者不容错过的免费资源库
60个开发者不容错过的免费资源库
为啥Android手机总会越用越慢?
为啥Android手机总会越用越慢?
Web开发者需具备的8个好习惯
Web开发者需具备的8个好习惯
科技史上最臭名昭著的13大罪犯
科技史上最臭名昭著的13大罪犯
旅行,写作,编程
旅行,写作,编程
Java 与 .NET 的平台发展之争
Java 与 .NET 的平台发展之争
团队中“技术大拿”并非越多越好
团队中“技术大拿”并非越多越好
编程语言是女人
编程语言是女人
Web开发人员为什么越来越懒了?
Web开发人员为什么越来越懒了?
程序员都该阅读的书
程序员都该阅读的书
要嫁就嫁程序猿—钱多话少死的早
要嫁就嫁程序猿—钱多话少死的早
软件开发程序错误异常ExceptionCopyright © 2009-2015 MyException 版权所有