inode_soft link_hard link

1. 概要 &参考

2. 方法

2.1 查看单个 sector 大小?512

 
 
  1. fdisk -l |grep sectors

2.2 查看单个 block 大小?4096

 
 
  1. dumpe2fs /dev/sdboot |grep 'Block size'

2.3 查看单个 inode 大小?128

 
 
  1. dumpe2fs /dev/sdboot |grep 'Inode size'

2.4 查看文件 inode 信息 (stat)?

 
 
  1. stat filename

2.5 查看文件 inode 信息 (ls -i)?

 
 
  1. ls -il filename

2.6 查看磁盘 inode 信息 (df -i)?

 
 
  1. df -i

2.7 通过inode号反查文件名字 (find ./ -inum 524903)?

 
 
  1. find ./ -inum 524903

2.8 创建soft_link/hard_link(link -s source soft_link/ln sorurce hard_link)?

 
 
  1. link -s source soft_link
  2. ln -s source soft_link
  3. link source hard_link
  4. ln sorurce hard_link

3. 概念

3.0 hard disk

  1. 硬盘在linux下的文件名:

    /dev/sd[a-p][1-15]:为SCSI, SATA, U盘, Flash闪盘等接口的磁盘文件名;
    /dev/hd[a-d][1-63]:为 IDE 接口的磁盘文件名;

3.1 sector

硬盘的最小存储单位叫做”扇区”(Sector)。每个扇区储存512字节(相当于0.5KB)

3.2 block

操作系统读取硬盘的时候,不会一个个扇区地读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个”块”(block)。这种由多个扇区组成的”块”,是文件存取的最小单位。”块”的大小,最常见的是4KB,即连续八个 sector组成一个 block

3.3 inode

3.3.1 文件系统(Filesystem)将物理硬盘分成俩部分,user data/meta data

  • 用户数据存放在block里,元信息存放在inode里,一般inode占磁盘空间的1%左右,根据我的计算,我的ubuntu16.04 32bit大概在1.5%

3.3.2 inode结构(stat filename)

inode 数据结构包含了文件所有的元信息,除了文件名和文件的具体数据

  • inode 编号//
  • 用来识别文件类型,以及用于 stat C 函数的模式信息//
  • 文件的链接数目//
  • 属主的 UID
  • 属主的组 ID (GID)
  • 文件的大小//
  • 文件所使用的磁盘块的实际数目//
  • 最近一次修改的时间
  • 最近一次访问的时间
  • 最近一次更改的时间

3.3.3 inode 特性

  • inode 占用一定的磁盘空间,所以 inode 用完会导致系统提示硬盘空间不足,即使硬盘还有空间
  • 移动文件不会导致改变 inode,因为 linux 系统文件的文件和inode是分开存储的
  • 重命名文件不会导致改变 inode,因为 linux 系统文件的文件和inode是分开存储的
  • 操作系统通过inode号来识别不同的文件,文件名可以说只是inode号的别名或者绰号

3.3.4 操作系统访问文件过程

图Directory

1008124-20160911145427242-2108100221.png
图访问过程
1008124-20160911145427633-1380664664.jpg

1.根据文件名,通过Directory里的对应关系,找到文件对应的Inode number
2.再根据Inode number读取到文件的Inode table

  1. 再根据Inode table中的Pointer读取到相应的Blocks。
  2. 进行修改读取等操作。
  3. 结束

3.4 soft_link/hard_link

1008124-20160911145427883-304648988.jpg

3.4.1 soft_link/hard_link对比

  • linux为了解决文件共享使用,引入俩种链接:硬连接(hard link)软连接(soft link)
  • (inode角度)一个inode对应多个文件名字为硬链接
  • (inode角度)文件用户数据块中存放的内容是另一文件的路径名的指向,则该文件就是软连接
  • 硬链接和源文件为一个inode
  • 软链接和源文件为不同的inode,软链接的inode指向的block为源文件名的路径指向

3.4.2 soft link

软链接就是一个普通文件(文件属性l打头),只是数据块内容有点特殊。软链接有着自己的 inode 号以及用户数据块。因此软链接的创建与使用没有类似硬链接的诸多限制;

  • 软链接有自己的文件属性及权限等;
  • 可对不存在的文件或目录创建软链接
  • 软链接可交叉文件系统(不通的文件系统之间创建软链接?)
  • 软链接可对文件或目录创建
  • 创建软链接时,链接计数 i_nlink 不会增加
  • 删除软链接并不影响被指向的文件,但若被指向的原文件被删除,则相关软连接被称为死链接(即 dangling link,若被指向路径文件被重新创建,死链接可恢复为正常的软链接)
  • 软链接的用户数据也可以是另一个软链接的路径,其解析过程是递归的

软链接特性展示:

 
 
  1. ls -al
  2. # lrwxrwxrwx 1 hzn vboxsf 6 9月 9 14:12 soft -> source #文件属性第一个字符为(l)链接文件,硬连接为(-)普通文件
  3. ln -s inexistence_file soft_link #对不存在的文件创建软连接
  4. cat soft_link #dangling link死连接,读取改文件失败
  5. ln -s test_dir soft_link_dir #对目录创建链接,可以cd

3.4.3 hard link

硬链接是有着相同 inode 号仅文件名不同的文件

  • 文件有相同的 inode 及 data block
  • 只能对已存在的文件进行创建
  • 不能交叉文件系统进行硬链接的创建
  • 不能对目录进行创建,只可对文件创建
  • 删除一个硬链接文件并不影响其他有相同 inode 号的文件
  • 创建硬链接不会多占用inode空间和数据空间,软链接则要同时占用,只是软链接的数据空间占用非常小
  • 硬链接文件属性和源文件文件属性一致,因为他们是同一个inode号

硬链接特性展示

 
 
  1. ln source hard_link
  2. stat source/hard_link #创建一个hard_link, stat 查link会+1

4. 实践

4.1 通过inode号删除文件

由于各种原因在linux下总是会出现那么一些乱码文件,无法通过正常的rm删除,那么通过删除inode号指定文件删除它

  • 通过 ls -l 或者 stat 获取文件的inode号
 
 
  1. ls -l #524903 -rwxr-xr-x 1 hzn vboxsf 35 9月 9 15:38 hard_1
  • 通过 rm & find 用inode删除文件
 
 
  1. rm `find ./ -inum 524903`

4.2 find查找软链接 (find dir/ -iname filename)?

在指定目录下查找特定文件名(不能写绝对路径)的软链接(find dir/ -iname filename)?

 
 
  1. find /home/hzn -lname source
  2. # /home/hzn/tmp1/soft1
  3. # /home/hzn/tmp/tt/soft1
  4. # /home/hzn/tmp/tt/soft2
  5. # /home/hzn/tmp/tt/soft3
  6. # find dir/ -iname filename dir/只能是目录,filename只能是文件名,不能是绝对路径的文件

4.3 find 查找硬链接(find dir/ -samefile /../..filename)?

在指定目录下查找特定文件名(最好绝对名)的硬链接(find dir/ -samefile /../..filename)?

 
 
  1. find /home -samefile /home/hzn/tmp/tt/source
  2. # /home/hzn/tmp1/hard
  3. # /home/hzn/tmp/tt/hard
  4. # /home/hzn/tmp/tt/hard1
  5. # find dir/ -samefile /../..filename dir/只能是目录,filename可以是文件名(本目录),最好是绝对路径

4.4 find 通过inode号反查文件名(find dir/ -inum 524904)?

在指定目录下查找相同inode的所有文件(find dir/ -inum 524904)?

 
 
  1. find /home -inum 524904
  2. # /home/hzn/tmp1/hard
  3. # /home/hzn/tmp/tt/hard
  4. # /home/hzn/tmp/tt/hard1

4.5 列出指定目录下所有软链接?

find方式

 
 
  1. find /home -type l -ls

ls+grep方式

 
 
  1. ls -al |grep '^l'

5. 总结

  • 一个Inode对应一个文件,而一个文件根据其大小,会占用多块blocks。
  • 更为准确的来说,一个文件只对应一个Inode。因为硬链接其实不是创建新文件,只是在Directory中写入了新的对应关系而已
  • 当我们删除文件的时候,只是把Inode标记为可用,文件在block中的内容是没有被清除的,只有在有新的文件需要占用block的时候,才会被覆盖




转载于:https://www.cnblogs.com/lshconfigure/p/5861800.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值