好久不写blog了。。。加油,继续写blog。今天和同事讨论到一个问题,问题描述:
有文件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选项不在此讨论范围内。