文件系统
文件系统
文件系统是OS中负责管理持久数据的子系统,也就是负责把用户的文件存到磁盘硬件中,即使计算机断电了,磁盘里的数据并不会丢失,所以可以持久化地保存文件。文件系统的基本数据单位是文件,它的目的是对磁盘上的文件进行组织管理。
Linux最经典的一句话是“一切皆文件”,不仅普通的文件和目录,就连块设备、管道、socket等,也都可以通过文件接口访问。
文件和目录是按照层次关系管理的,这种结构可以用树表示。文件夹中包含了子文件夹或者文件,这样就形成了一个树的结构。不过也有一些特殊情况,例如团队在协同工作时会共享一些信息,两个人有着不同的目录,但是可以共享同一份文件。
Linux文件系统会为每个文件分配索引结点(inode)和目录项(directory entry)这两个数据结构。索引结点用来记录文件的元信息,比如inode编号、文件大小、访问权限、时间戳、数据在磁盘的位置等。目录项用来记录文件的名字、索引结点指针以及与其它目录项的层级关联关系。多个目录项关联起来,就会形成目录结构;磁盘上的目录记录会持久保存,而内核维护的目录项缓存保存在内存中。
由于索引结点在同一文件系统内唯一标识一个文件,而目录项记录着文件名,所以目录项和索引结点的关系是多对一。也就是说,一个文件可以有多个别名,例如,硬链接的实现就是多个目录项中的索引结点指向同一个文件。
硬链接与软链接
链接简单说实际上是一种文件共享的方式,主流文件系统都支持链接文件。链接简单地理解为Windows中常见的快捷方式,Linux中常用它来解决一些库版本的问题,通常也会将一些目录层次较深的文件链接到一个更易访问的目录中。
链接分为硬链接(hard link)和软链接(symbolic link)。从使用的角度讲,两者通常都与正常的文件访问方式一样,支持读写,如果目标是可执行文件的话也可以直接执行。
硬链接通过同一个inode指向原始文件,软链接通过保存的路径指向原始文件。但是,当原始文件在同一文件系统内重命名或移动后,inode不会改变,所以硬链接还是正确的;软链接保存的路径如果不再有效,就无法访问目标。
重命名文件,观察硬链接与软链接
解锁完整互动实验、进阶解析与精选参考答案。
知识测验
知识测验
三个名字、两个inode、一份共享报告
同一目录、同一文件系统中,file1和硬链接file2共享inode 37259183,内容为REPORT;软链接file3有自己的inode 13549669,保存路径file1。没有未关闭的文件对象。
- 把file1改名为report,哪些名字仍能读到REPORT?用关系图解释。
- 通过file2把内容改为EDITED,再删除report,最后删除file2;写出每一步的共享数据、可用名字与硬链接计数。