从inode角度描述cp,mv,rm行为
1 概述 我们常以为目录是个容器,放着目录和文件。实际上,目录是个映射表。人使用文件名来引用文件,计算机使用inode号码来引用文件。而目录则是文件名和inode号码之间的映射表。 2 cp和inode 用法:cp [选项] 文件 [文件2|文件3...]目标选项:-i在覆盖文件前询问-r
1 概述
我们常以为目录是个容器,放着目录和文件。实际上,目录是个映射表。人使用文件名来引用文件,计算机使用inode号码来引用文件。而目录则是文件名和inode号码之间的映射表。
2 cp和inode
用法:
cp [选项] 文件 [文件2|文件3...] 目标
选项:
-i 在覆盖文件前询问
-r 递归地复制整个目录树
-p 保留权限,所有者,和时间戳
-a -r和-p的结合
cp命令必须总是至少有两个参数,如果给出的参数超过两个,除了最后一个参数以外的所有参数都会被解系成源文件
目标影响cp的行为:
如果目标是目录,复制后的文件就会被放置其中
如果目标是文件,复制后的文件就会覆盖目标
如果目标不存在,复制后的文件就会被重命名为目标名
inode角度:
1)分配一个未用的inode号码,在inode表中添加一个新项目
2)在目录映射表创建一行,关联文件名和inode号码
3 mv和inode
mv的行为和cp相同,除了mv时,源文件会消失
当一个文件mv后,构成这个文件的实际内容,不管是inode项目还是硬盘上的数据,都没有被转移。被转移的仅仅是目录映射表。
两种情况:
1)目标和原文件在同一个文件系统
a)在目录映射表新建一行
b)删除带有源文件名的原有目录行
2)如果目标是不同的文件系统
mv的行为就是复制和删除
案例:
[root@think water]# ll -i w
3496568 -rw-r--r-- 1 root root 17 09-25 15:12 w
[root@think water]# mv w /home/water
[root@think water]# cd /home/water
[root@think water]# ll -i w
3496568 -rw-r--r-- 1 root root 17 09-25 15:12 w
inode号码仍就一样。文件系统上的数据没转移,inode表没变,只不过其上的时间戳被更新
4 rm和inode
rm -r 删除目录及其内容,但每删一样之前都会询问
rm -f 删除目录及其内容,但每删一样之前不会询问
inode分析:
1)递减链接计数,从而释放inode号码,这个inode号码可以被重用
2)把数据块挂到可用空间列表
3)删除目录映射表中的相关行
但是底层数据实际上没有被删除,只是当数据块被另一个文件使用时,原来的数据就会被覆盖
更多推荐
所有评论(0)