linux中文件的组织形式
============================
1.索引节点
============================
磁盘分区中的文件,都有一个索引节点 , 它是一个数组的入口索引号
对应关系:
一个文件 <----一> 一个索引结点号 <----一> 数组中的一个元素(即一个索引节点)
索引节点存储的信息 :
1) 文件所有权 用户,组
2) 访问模式 读,写,执行
3) 时间标记 最后一次修改,访问的时间
4) 文件类型 常规/特殊/其它/抽象伪装文件
5) 文件数据块在磁盘上的位置 对应的目录块和数据块,不包含文件名
6) 文件长度
当一个文件系统被创建时,会创建若干数量的索引节点,该数目就是文件系统所能容纳的最大文件数。
索引节点存储在一个称为索引节点表<inode table>的数组中。
============================
2. linux 硬盘组织结构
============================
1) 引导区
2) 超级块(super block) 硬盘或分区上文件系统的整体信息,比如文件系统的大小
3) 索引节点(inode) 包含了针对某一具体文件的全部信息<无文件名>
4) 数据块 真正存储文件内容的位置
5) 目录块 文件名,文件索引节点号
于是有如下对应关系:
文件(单)---------索引节点号(单)-----------目录项(多)
可见:可以为一个文件创建多个有效路径
============================
3.文件系统常识
============================
根设备,任何一个需要mount,才能挂载进来的分区、软盘、NFS, 光驱都是一个独立的文件系统。
注意:硬连接只能局限在一个文件系统内,而软连接则无此限制。
VFS linux提供了一个虚拟文件系统--VFS,它是实际文件系统的上层软件,掩盖了实际文件系统底层的具体差异,
为系统访问不同的文件系统的文件提供了一个通用的接口。
============================
4.连接计数
============================
表明本文件系统中共有几个文件项或目录项(即硬连接数)的inode和本文件相同
ls -l 显示文件拥有的硬连接数。
ls -i 显示文件的索引节点号
实际上许多文件系统并不具备inode结构,其目录结构也和以上的讨论不同,但通过VFS,系统均为其提供了虚拟一致的inode和目录项结构。
所以,'ls -il'命令实际显示的inode应该是VFS inode,也就是说,inode是存在于内存中的数据结构,而不一定是实际的硬盘结构。
但为Linux量身定做的ext2文件系统具备实际的inode和连接型目录项结构,所以,对于ext2文件系统,可以认为我们上面讨论的关于硬连接的概念是完全正确的。
============================
5. cp 和 硬连接的区别
============================
cp : 建立了一个新文件 ,包括索引节点号,文件数据块,目录项,这三者都增加
硬连接: 建立了一个快捷方式,只有目录项增加,其余几项均不变
===============================================
6. 硬连接(symbolic link) vs 软连接(hard link)
===============================================
硬连接 建立的连接的属主、inode节点号,权限完全等同于最初的文件 ( 新的文件相当于一个快捷方式<一个别名>,仅仅是目录项加1,其它不变 )
软连接 属主 :lrwxrwxrwx 由l--〉软连接 其它依赖于原文件 ( 新的文件具有一个全新的inode节点,也可以理解为一种快捷方式 )
总结:
1)
hard link所创建的文件和原文件的索引节点编号相同,相当于一个原文件有多个别名;
symbolic link所创建的链接和原文件的索引节点编号不同,相当于指向原文件的位置。
符号连接可以跨分区,而硬连接只能在本分区进行。