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

理解Linux目录与inode号码的映射关系及文件操作命令原理
本文详细解释了Linux中目录与inode号码之间的映射关系,以及cp、mv和rm命令如何影响这些关系。通过案例分析,揭示了文件系统上数据迁移与inode号码变动的内在机制。

 

 

    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)删除目录映射表中的相关行

 

    但是底层数据实际上没有被删除,只是当数据块被另一个文件使用时,原来的数据就会被覆盖

评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值