转载自:https://blog.csdn.net/vsooda/article/details/9216245

linux中,文件查找不是通过文件名称来查找的。实际上是通过i节点来实现文件的查找定位的。我们可以形象的将i节点看做是一个指针fip。当文件存储到磁盘上去的时候,文件肯定会存放到一个磁盘位置上,可以这样想象,既然文件数据是存放在磁盘上的,如果我们知道这个文件数据的地址,当我们想要读写文件的时候,我们是不是直接使用这个地址去找到文件就可以了呢?

是的,linux下,i节点其实就是可以这么认为,把i节点看作是一个指向磁盘上该文件存储区的地址。只不过这个地址我们一般是没办法直接使用的,而是通过文件名来间接使用的。事实上,i节点不仅包含了文件数据存储区的地址,还包含了很多信息,比如数据大小,等等文件信息。但是i节点是不保存文件名的。文件名是保存在一个目录项中。每一个目录项中都包含了文件名和i节点。

我们可以通过一个图来看看目录项,i节点,文件数据四者之间的关系。

从上图可以看到,目录项中包含了文件名和i节点。

同时,你会发现上图中,目录项A和目录项B的i节点指向同一个存储区,其中这个存储区存放的是printf("ha")的数据。

也就是意味着helloA.c和helloB.c的内容是一样的。

这就引出了一个硬链接和符号链接的概念

硬链接  ln -d

符号链接 ln -s。

要想得到helloA.c和helloB.c这种关系,我们可以使用如下命令:

#ln -d  helloA.c  helloB.c  

这样,就得到了helloA.c的硬链接helloB.c

对于硬链接来说。如果删掉源文件helloA.c,那么磁盘上数据文件时不会删除的。因为i节点上记录了该文件的硬链接数。只有硬链接数是0的时候,删除文件名的时候,该数据在磁盘上才会删除。

也就是说。这里,如果我们使用命令:

# rm  -rf  helloA.c  

helloB.c同样可以正常使用,其内容就是printf("ha");

但是如果是符号链接:

#ln -s  helloB.c  helloC.c 

这就是所谓的符号链接,符号链接其实是文件索引的索引。当源文件helloB.c删除之后,其实磁盘数据文件还在,helloC.c也无法使用。

符号链接包含了一个文件名的路劲,如果这个文件名被删除,这符号链接自然就不能正常工作了。

深入理解linux i节点(inode)的更多相关文章

  1. Linux索引节点(Inode:no space for device)用满导致的一次故障

    问题描写叙述 在storm測试环境集群上上nimbus和supervisor自己主动挂调.重新启动时显示no space for device,也不能创建,加入文件及文件夹,df -h查看 ilesy ...

  2. Linux索引节点(Inode)用满导致空间不足

    一.问题出现 在创建新目录和文件是提示“no space left on device”!按照以前的情况,很有可能是服务器空间又被塞满了,通过命令查看,发现还有剩余.再用df -i查看了一下/分区的索 ...

  3. 理解Linux文件系统之inode

    很少转发别人的文章,但是这篇写的太好了. 理解inode   作者: 阮一峰 inode是一个重要概念,是理解Unix/Linux文件系统和硬盘储存的基础. 我觉得,理解inode,不仅有助于提高系统 ...

  4. 理解Linux文件系统之 inode

    一.inode是什么? 理解inode,要从文件储存说起. 文件储存在硬盘上,硬盘的最小存储单位叫做”扇区”(Sector).每个扇区储存512字节(相当于0.5KB). 操作系统读取硬盘的时候,不会 ...

  5. [转]理解Linux文件系统之inode

    很少转发别人的文章,但是这篇写的太好了. 理解inode   作者: 阮一峰 inode是一个重要概念,是理解Unix/Linux文件系统和硬盘储存的基础. 我觉得,理解inode,不仅有助于提高系统 ...

  6. 真正理解linux的inode?

    linux 在整个架构上可以看作是三层: 1.底层代码, (引导层strip) 跟硬件沟通的那一层的代码(可能是汇编+c), 驱动底层的; strain: n./v. 拉紧, 张力, 气质, 风格, ...

  7. 深入浅出理解linux inode结构

    一.inode是什么? 参考文档:http://tech.diannaodian.com/dw/lin/2012/0112/154629.html 做Android底层驱动或者嵌入式Linux的程序猿 ...

  8. 深入浅出理解linux inode结构【转】

    本文转载自:https://blog.csdn.net/fantasyhujian/article/details/9151615 一.inode是什么? 参考文档:http://tech.diann ...

  9. linux No space left on device 由索引节点(inode)爆满引发500问题

    inode是什么? 理解inode,要从文件储存说起. 文件储存在硬盘上,硬盘的最小存储单位叫做"扇区"(Sector).每个扇区储存512字节(相当于0.5KB). 操作系统读取 ...

随机推荐

  1. APICloud修改最低操作系统版本要求

    在APICloud中的云编译选项中: 点击高级设置,就可以修改对应的操作系统版本要求:

  2. windows 关闭端口被占用脚本

    cmd 关闭进程java taskkill /F /IM java.exe taskkill /f /im java.exe 如何用dat批处理文件关闭某端口对应程序-Windows自动化命令 如何用 ...

  3. oracle多个平等的索引

    当SQL语句的执行路径可以使用分布在多个表上的多个索引时, ORACLE会同时使用多个索引并在运行时对它们的记录进行合并, 检索出仅对全部索引有效的记录. 在ORACLE选择执行路径时,唯一性索引的等 ...

  4. windows上安装redis并安装php5.6的redis扩展

    http://www.884358.com/php-redis/ 1.安装redis Redis 没有官方的Windows版本,但是微软开源技术团队(Microsoft Open Tech group ...

  5. Python 基础课程大纲

      c0102_变量及数据类型.ipynb 1.数据类型概述 Python标准数据类型:Numbers数字,String字符串,List列表,Tuple元祖,Dici字典.布尔类型 # Numbers ...

  6. [android] eclipse里面的安卓模拟器起不来

    提示信息可能是: The connection to adb is down, and a severe error has occured. 网上看了下,常见原因有两个: 1,系统里面另外有个叫ad ...

  7. H3C 静态路由配置示例

  8. P1090 后缀表达式

    题目描述 所谓后缀表达式是指这样的一个表达式:式中不再引用括号,运算符号放在两个运算对象之后,所有计算按运算符号出现的顺序,严格地由左而右新进行(不用考虑运算符的优先级). 如:3(5–2)+7对应的 ...

  9. vue 弹窗时 监听手机返回键关闭弹窗(页面不跳转)

    [注]:  popstate 事件 a.当活动历史记录条目更改时,将触发popstate事件. b.如果被激活的历史记录条目是通过对history.pushState()的调用创建的,或者受到对his ...

  10. Eclipse修改编码字体

    步骤:Window-->Preference-->General-->Appearance-->Colors and Fonts-->java-->java Edi ...