一、文件系统
在《Linux磁盘调度》的磁盘格式化中,介绍了磁盘的低级格式化和高级格式化,高级格式化就是为磁盘构件文件系统,那文件系统是什么呢?
可以将文件系统看作一个软件,它需要在磁盘上写入一些数据结构和数据,以扇区为单位写入,这个过程就叫做构建文件系统
1.1 文件系统概念
-
For most users,the file system is the most visible aspect of an operating system
对于大多数用户来说,文件系统是操作系统中最显而易见的,时刻都是使用文件系统
-
It provides the mechanism for on-line storage of and access to data and programs of the operating system and all the users of the computer system
文件系统为计算机系统提供了一种机制,这种机制可以在线存储和访问操作系统和所有用户的数据和程序
-
File systems live on devices,such as magnetic disk,SSDs
文件系统存在于设备上,例如磁盘SSD,
-
The file system consists of two distinct parts:a collection of files,each storing related data,and a directory structure,which organizes and provides information about all the files in the system
文件系统包含两个明显的部分:一个存储相关数据的文件集合和一个目录结构,目录结构用于组织和提供所有操作系统文件
磁盘格式化过程:
磁盘经过地址格式化之后,被分成了大小相等的扇区,将不同的扇区进行了分区,然后进行高级格式化,在每个分区中,最前面若干个扇区存放的是分区表,记录分区大小、分区性质(主分区/扩展分区)等,后面若干个扇区存放的是目录信息,每个分区都有一个根目录,根目录下面有若干个文件或目录,这些文件和目录的信息都存在目录信息中
1.2 文件概念
文件系统的概念中说明了文件系统包含文件和目录结构两个部分,那文件是什么?
1.2.1 文件定义
-
文件是信息的逻辑存储单位
说文件是信息的逻辑存储单位,是从用户的角度来看,对用户来说,一个文件可能包含段落、标题等这些逻辑信息结构
- 在用户看来,文件是具有结构的信息集合
- 在系统看来,文件的本质就是存储在外存当中的二进制集合
-
文件可以存储不同类型的信息,如文本文件、可执行文件、doc文档文件、xls表格文件
1.2.2 文件属性
-
文件名称
文件是“按名存取”的
-
文件类型
通常通过文件的后缀区分文件类型(pdf,txt,doc,exe,py等)
文件类型可用于指示文件的内部结构,操作系统通过了解文件类型决定对文件如何进行解释
一般地,操作系统至少要解释两种文件类型:文本文件(ASCII+控制符构成)、二进制可执行文件(win:.exe linux:./执行文件)
Unix认为每个文件由字节序列构成,解释这些字节的工作交给对应的应用程序完成。
以word应用程序为例,对于test.doc的文件,操作系统并不能解释,但word应用程序向操作系统注册了它可以解释test.doc文件,于是操作系统执行word的可执行文件启动应用,然后由应用程序来解释test.doc文件,如果找不到能解释test.doc文件的应用程序,操作系统就会提示无法打开,需要手工打开一个应用程序来解释该文件
-
位置
文件存放目录
-
大小
文件本身大小可能要比占用的磁盘空间小
-
时间、日期和用户标识
包含文件的创建时间、修改时间、访问时间;操作系统中用户标识有三种:当前用户、同组用户和其他所有人
-
保护
对于不同的用户,文件拥有者、同组用户和其他用户对文件的访问权限可能是不一样的,
1.3 文件的内部结构
磁盘是以扇区为基本读写单元,假设每个扇区的大小为512Bytes
- 文件被划分为若干个逻辑记录,每个逻辑记录占1Byte,假设文件刚好是512Bytes,操作系统将文件将这512个逻辑记录放进一个扇区,这个过程称为打包或成组,从扇区读取分解为不同的逻辑记录的过程称为分解
Linux里面,通常一个文件就是以一个字节为单位的
- 文件被划分为若干个逻辑记录,每个逻辑记录占xBytes,假设文件两个逻辑记录占512Bytes,操作系统将文件将每两个逻辑记录打包放进一个扇区
这种方式的文件系统主要用于数据库,数据库以每行记录为单位,每个记录可能占用若干个字节
1.4 访问方法
1.4.1 顺序访问
-
这种访问文件的方式最为常见,文件信息按顺序排序,读取/写入当前文件信息后,将文件指针移向下一个邻接区域
-
磁带模型
当前指针指示了当前读取的位置,如果继续读或者写,指针继续向前移动,如果需要读取前面的数据,则通过倒带,把指针移到前面的位置,然后再往后读,实现重复读写的能力
1.4.2 直接访问
- 若干文件的逻辑记录(logical record)的长度固定,那么允许在访问文件信息时可以按任意顺序进行快速读取和写入
- 磁盘模型
- 假设逻辑记录长度为L,若要访问某个文件的第N个逻辑记录(编号从0开始),则可转换为:“访问从文件起始位置L*N开始的L字节”
1.5 文件目录
1.5.1 文件目录作用
-
The directory can be viewed as a symbal table that translates file names into their directory entries
文件目录作为一个符号表,用于将文件名转换对应的目录条目
在前面磁盘格式化过程中已经说到,在磁盘的每个分区中,第一个扇区存放的是分区信息,第二个分区存放的是目录信息
每个目录条目包含了文件名,基本属性,文件位置以及读写权限等信息
文件目录提供了以下功能:
1、查找文件(根据文件名)
2、创建文件、删除文件
3、文件重命名
4、列出文件目录所有文件和子目录
5、遍历文件系统,文件目录的除了可以包含文件,还可以包含子目录,遍历文件系统就是可以遍历所有目录以及子目录中的文件
1.5.2 文件目录结构
-
单层目录
单层目录是最简单的目录结构,所有的文件都存放在一个相同的目录中(只有一个目录),这方结构比较容易理解和实现
这种方式最大的缺点是文件命名是一个很麻烦的是事情
两层目录
在两层目录结构中,系统中的每个用户有一个独立的文件目录(user file directory UFD),每个UFD有相似的结构,但是每个用户只能看到自己的文件,当访问某个文件时,首先在系统中查找这个用户下的文件目录,然后判断当前目录是否有该文件
树型结构目录
1、树型结构目录允许用户在当前目录下再创建的子目录,并且管理对应的文件
2、每个树型结构都有一个根目录(Linux用“/”表示当前分区的根目录),并且每个文件在系统中都有一个独一无二的路径名(相同路径下不能有同名文件,不同路径下可以有同名文件)
3、树型结构中,一个文件目录就是文件和子目录的集合
现在常用的操作系统,都使用树型结构的文件目录
1.6 共享与保护
1.6.1 用户和组
-
在多用户系统中,提出了文件共享和保护的需求
-
在文件和目录的属性中,加入了“用户”和“组”的概念
User:即为所有者(Owner)
Group:用户集合,它们拥有相同的访问权限
[root@zhuyuzhu ~]# ll total 0 drwxr-xr-x 3 root root 24 Sep 1 14:25 lizhi drwxr-xr-x 4 root root 166 Jul 16 16:22 logs drwxr-xr-x 3 root root 18 Jul 5 20:02 nginx
在linux系统中可以通过“ls -l”或者“ll”列出文件信息,其中第一个root表示的就是用户,第二个root表示分组
1.6.2 文件访问控制
为每个文件或目录关联一个访问控制列表(Access Control List,ACL)可以实现基于身份的访问控制,以Linux为例:
-
每个文件/目录有三种用户类型:Owner/Group/Other
-
三种用户的访问权限均有readable/writable/executable(rwx)
-
因为ACL只用9个bit来表示,通过1或0来表示是否可读可写可执行,上图中,文件对于拥有者可读可写不可执行,对于同组同于可读不可写不可执行,而对于其他用户,不可读不可写不可执行,用字符表示就是“rw-r—-”。
文件的访问权限也可以使用数字表示,上图也表示的权限对应数字就是610,每3个bit对应一个数字
如上面的列出来的文件信息,第一个“d”表示这是一个目录而不是文件,后面九个字符分别代表了三种用户的访问权限
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/153680.html