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选项不在此讨论范围内。

猜你喜欢

转载自blog.csdn.net/u012923827/article/details/82664269