[linux]cp和mv对文件和链接影响的区别

有文件a,a1为其硬链接,即: ln a a1

  现在有文件b,对其进行以下两种操作:

    1. mv b a

    2. cp b a

      问这两种操作对a1有何影响?

 

     这个问题以前还真没关注过,之前的项目的做法是对一个文件用ln old back, 然后mv back histroy/,过一段时间若有新文件产生是进行mv new old操作并做类似的backup操作,没有想过在做mv new old的时候是否对之前的back文件造成任何的影响(毕竟backup文件在不出问题的情况下没人去关心)。

  今天做了一个实验搞明白了其中的奥秘。

  1. 创建文件a 和 ln a a1

  2. 创建文件b

 

  

  3. 执行mv b a

  

  可以看出a的inode变为了b的inode,而a1不变。并且a的变为b文件的内容,a1内容不变。

  而且a1对应的inode的引用数变为了1。

  4. 将环境重置

 

  

  5. 执行 cp b a

 

  

  可以看出inode和引用数没有发生变化, 但是a和a1的内容变为了b的内容。

  6. 执行 cp a a2

 

  

  这时可以看出a2的inode已经和a、a1不同,并且a,a1的inode和引用数都没有发生变化。

 

  结论: mv 操作只是改变文件的inode,并没有对inode所指向的磁盘block做任何的改动。

      cp操作是改变(创建)inode所指向的block(在创建时,会分配新的block)。

 

      注:cp -i选项不在此讨论范围内。

 

 

【原文地址】http://www.cnblogs.com/wwillforever/archive/2012/01/30/2332396.html

posted @ 2012-05-23 15:41  Nereus_37  阅读(438)  评论(0编辑  收藏  举报