inode

======

在Linux系统中,内核为每一个新创建的文件分配一个inode,每个文件都有一个惟一的inode号,我们可以将inode简单理解成一个指针,它永远指向本文件的具体存储位置。文件属性保存在inode里,在访问文件时,inode被复制到内存,从而实现文件的快速访问。系统是通过inode来定位每一个文件。

硬链接(hard link)

======
硬链接实际上是一个指针,指向源文件的inode,系统并不为它重新分配inode。硬连接不会建产新的inode,硬连接不管有多少个,都指向的是同一个inode节点,只是新建一个hard link会把结点连接数增加,只要结点的连接数不是0,文件就一直存在,不管你删除的是源文件还是连接的文件。只要有一个存在,文件就存在(其实就是引用计数的概念)。当你修改源文件或者连接文件任何一个的时候,其他的文件都会做同步的修改。

硬链接文件有两个限制
1)、不允许给目录创建硬链接
2)、只允许在同一文件系统中的文件之间才能创建链接

硬链接的作用是允许一个文件拥有多个有效路径名,这样用户就可以建立硬链接到重要文件,起到防止“误删”的功能。因为对应目录的索引节点有一个以上的链接,只删除一个链接并不影响索引节点本身和其他的链接,只有当最后一个链接被删除后,文件的数据块及目录的链接才会被释放。也就是说,至此文件才被真正删除。

软链接(soft link)

======
软链接最直观的解释:相当于Windows系统的快捷方式,是一个独立文件(拥有独立的inode,与源文件inode无关),实际上是特殊文件的一种, 该文件的内容是源文件的路径指针(另一个文件的位置信息),通过该链接可以访问到源文件。所以删除软链接文件对源文件无影响,但是删除源文件,软链接文件就会找不到要指向的文件(可以类比Windows上快捷方式,你点击快捷方式可以访问某个文件,但是删除快捷方式,对源文件无任何影响)。

小结

======

符号链接(symbolic link)在建立的时候建立了一个新的inode,并记录了指向源文件inode的路径。所以symbolic的inode number跟原始档案的inode number是不一样的。这也是为什么symbolic link能够跨越不同文件系统的原因。
符号链接建立了新的inode number,所以它是一个真实的文件并占有一定的磁盘空间。另外对symbolic link的操作除了删除都会直接对源文件进行操作。
硬链接(hard link)并没有新建立inode,而是新建了一个内容以及inode number、hard link文件名和其他相关资讯的一个directory entry,所以hard link的inode number跟源文件的inode number是一样的。因为一个文件系统有着相同的inode number,所以hard link是不可以跨文件系统创建的。也可以将hard link理解为不是一个文件,把它看成是同一个inode的别名,建立hard link后他和源文件互为别名,删除其中任何一个,inode都不会释放。只有指向同一inode的文件名都删除后,inode才释放。hard link实际上是不占空间的。

资料来源

==========

硬链接(hard link)和符号连接(symbolic link)的区别

http://blog.51cto.com/wzgl08/308987

Linux下的softlink和hardlink

https://blog.csdn.net/yasaken/article/details/7292186

最新文章

  1. 浅谈js的事件冒泡机制
  2. atitit.提升稳定性---hibernate 增加重试retry 机制解决数据库连接关闭
  3. 使用Webdriver执行JS小结
  4. SQL分组取每组前一(或几)条记录(排名)
  5. C语言初学者代码中的常见错误与瑕疵(15)
  6. Cocos2d-x中由sprite来驱动Box2D的body运动(用来制作平台游戏中多变的机关)
  7. Linux下实现流水灯等功能的LED驱动代码及测试实例
  8. 学习笔记-[Maven实战]-第三章:Maven使用入门(1)
  9. hibernate_validator_02
  10. Walle 瓦力 web部署系统
  11. Ubuntu12.04 下修改Apache端口号
  12. webdriver介绍&与Selenium RC的比较
  13. 三:Linux 的基本命令、
  14. 深入理解OkHttp源码(一)——提交请求
  15. navicat连接mysql报错1251的解决方法
  16. Netty实战七之EventLoop和线程模型
  17. GDI+案例
  18. HDU 2075 A|B?
  19. ROS学习手记 - 5 理解ROS中的基本概念_Services and Parameters
  20. 解决input 有多少个radio绑定change事件,手动触发就会执行多少次问题

热门文章

  1. Android-序列化-Serializable/Parcelable
  2. Django如何重设Admin密码
  3. 六省联考2017 Day1
  4. BZOJ2888 : 资源运输
  5. 使用Newlife网络库管道模式解决数据粘包(二)
  6. 如何利用Reveal神器查看各大APP UI搭建层级
  7. Wingdings 2 符号编码对照表
  8. Snmp学习总结(七)——SNMP4J介绍
  9. GoJS 、 GoDiagram
  10. springboot中配置druid允许一次执行多条sql