一、inode
由之前的学习,我们知道文件=内容+属性。 要理解 inode 是什么,首先得知道文件的内容和属性是分开存储的。文件数据(内容)储存在硬盘的数据块中,那么还得必须找到一个区域来存储文件的元信息(属性),这种存储文件元信息的区域就叫做 inode(索引节点)
inode 通常包含的一些关键信息:
- 文件的大小(字节数)
- 文件拥有者和所属组 id
- 文件的类型,及其读写执行权限
- 指向数据块的指针,找到数据块的位置
- 硬链接数,指向该 inode 的硬链接数量,当计数变为0时,文件数据被释放
- 文件的时间戳,ctime 指 inode 上一次修改时间,mtime 指文件内容上一次修改时间,atime 指文件最后一次被访问的时间
我们经常通过文件名来对文件进行操作,但真正找到磁盘上文件的并不是文件名,而是 inode, 在 linux 中可以让多个文件名对应于同一个 inode。下面是一些查看 inode 相关的命令
ls -i
命令:查看文件对应的 inode 号码stat
命令:查看某个文件的 inode 信息例,是ls
命令的增强版,提供了更详尽的文件信息df
命令:查看每个硬盘分区的 inode 总数和已经使用的数量
二、软硬链接
2.1 硬链接
方法:ln 源文件 目标文件
一个文件名只能指向一个 inode 编号,但是 Linux 系统允许多个文件名指向同一个 inode ,通过 inode 链接来产生的新的文件名,而不是产生新的文件,称为硬链接。这就意味着,可以用不同的文件名访问同样的内容。删除一个文件名,不影响另一个文件名访问。因为 inode 信息中有一项叫做链接数,即指向该 inode 的文件总数,删除一个文件名时,链接数会减一。变为 0 时,表明没有文件指向这个 inode 编号,系统才会回收这个 inode 号码与文件数据块区,它的实现方式类似引用计数。
默认创建的目录硬链接数是2,是因为目录名(假设为dir)和 inode 建立