从inode角度描述cp,mv,rm行为

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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值