一、inode:index node (索引节点)
1.Linux文件系统使用索引节点(inode)来记录文件信息,作用类似于Windows下的文件分配表。表中包含文件系统所有文件列表。
一个节点(索引节点)是一个表项,包含有关文件的信息(元数据)包括:
1.文件类型,权限,UID,GID
2.链接数(指向这个文件名路径名称的个数)
3.该文件的大小和不同的时间戳
4.指向磁盘上文件的数据块指针
5.有关文件的其他数据
也就是说,Linux系统中每个文件都有一个与众不同的标记,都有一个编号。
2.显示文件系统的索引节点方法:
ls -i , ll -i(如下图)
3.在一个分区中inode节点编号是唯一的,如果相同则代表是同一个文件; 不在一个分区中,inode节点编号可能是相同的,但相同并不代表是同一个文件。每个分区中都有自己的一套编号,也就是inode表(inode table)
4.每个文件在创建的时候,系统都会自动的给分配一个节点编号。但并不是可以无限索取的。可以通过df -i来查看大小 (df显示块即容量大小)。所以有时候系统显示磁盘已满,但查看空间还有,就有可能是inode耗尽导致的。
5.inode table表
元数据,放在inode表中,数据放在数据块中(block)
每个分区都有一个独立的inode表,文件在inode表中对应自己的元数据表,存放的是文件的元数据(大小、权限、时间戳...)和指针,都在节点条目(inode entrv)中显示。
6.目录
文件引用一个inode号,
一个目录是目录下的文件名和inode号之间的映射
7.cp和inode
分配一个空闲的inode号,在inode表中生成新条目,在目录中创建一个目录项,将名称与inode编号关联,拷贝数据生成新的文件。
8.rm和inode
链接数递减,从而释放的inode号可以被重用
把数据块放在空闲列表中
删除目录项
数据实际上不会马上被删除,但当另一个文件使用数据块时将被覆盖。
9.mv和inode
(1)如果mv命令的目标和源在相同的文件系统
用新的文件名创建对应新的目录项
删除旧目录条目对应的旧的文件名
不影响inode表(除时间戳)或磁盘上的数据位置:没有数据被移动!
(2)如果目标和源在一个不同的目标中,mv相当于cp和rm
二、硬链接
1.创建硬链接:ln filename [linkname]
2.然后查看下文件 aa 和 bb 是否相同
通过实验得出结论:
1.创建硬链接会增加额外的记录项以引用文件.(多增加一条访问渠道)
2.硬链接是对应与同一个文件上的物理文件(就是说,一个文件多个名,对应的内容都是相同的。)
3.每个目录引用相同的indoe号
4.创建时硬链接数递增
5.删除文件时:
rm 命令递减计数的链接
文件要存在至少有一个链接数
当链接数为零时,该文件被删除。
6.不能跨越驱动器和分区(硬链接本质是一个文件多个名,在一个分区的不同文件可以,跨分区就不是一个文件了)
7.不允许对目录创建硬链接。这里注意,目录至少有两个硬链接,有隐藏的目录 “.”而且每创建一个子目录就会都一个硬链接数,因为子目录有“..”
三、软链接(符号链接)
1.创建软链接:ln -s filename [linkname]
2.在同一个分区下创建文件f1的软链接文件f2,通过观察二者的节点编号和元数据、时间戳都不同,所以软链接和原文件不是同一个文件。
3.在不同分区下创建软链接,情况如下(一定要注意绝对路径和相对路径)
注意:
软连接本质上不是一个文件(节点编号不一样),是指向到了f1.可以通过f11,f111访问f1 中的内容。
原文件f1一定要写绝对路径,或相对路径(相对于软连接文件路径,而不是相对于当前工作目录)
4.可以对目录创建软链接
结论:
1.软链接(符号)是一个文件指向另一个文件;
2.ls -l 显示连接的名称和引用文件
3.软链接(符号)的内容是它指向文件的内容
4.可以对目录进行软链接
5.可以跨分区对文件或目录进行软链接
6.指向的是另一个文件的路径;其大小为指向的路径字符串的长度;不增加或减少目标文件inode的引用计数;