- Linux文件系统的三层抽象是什么?
- 写出Cat userlist的过程,要详述目录文件,i-node.数据块,要画图示意
- 假设块大小为4k, userlist的大小不小于10k,自己假设大小
一、Linux文件系统的三层抽象是什么?
Linux文件系统的内部结构
硬盘实际上是由一些磁性盘片组成的计算机系统的一个设备。文件系统是对该设备的一种多层次的抽象。
- 第一层抽象:一个磁盘能够储存大量的数据,一个磁盘可以被划分成分区,每个分区可以看作是一个独立的磁盘。
- 第二层抽象:一个硬盘有一些磁性盘片组成。每个盘片的表面都被划分为很多同心圆,这些同心圆称作磁道,每个磁道又被进一步划分为扇区,每个扇区可以储存一定字节数的数据。扇区是磁盘上的基本储存单元。一个磁盘扇区编号的系统使得我们可以把磁盘视为一系列块的组合。
- 第三层抽象:文件系统可以用来储存文件内容,文件属性和目录Unix把磁盘块分成了3个部分来储存上述信息。
嵌入式Linux系统分三层:应用层,内核层,硬件层。
1:应用层是一些应用程序和库,是面向用户的,如命令,QQ等应用程序;
2:内核层的主要功能是设备驱动,进程管理,内存管理,文件系统和网络通信;
3:硬件层是以信号为对象,完成各种信号之间的相互转换,通常信号变换前后其承载的信息保持不变,因此,无论如何变换,信号之间总是存在某种函数关系。
二、写出Cat userlist的过程,要详述目录文件,i-node.数据块,要画图示意
使用man cat命令
cat主要有三大功能:
- 一次显示整个文件。
$ cat filename - 从键盘创建一个文件。
$ cat > filename
只能创建新文件,不能编辑已有文件. - 将几个文件合并为一个文件。
$cat file1 file2 > file
cat具体命令格式为 : cat [-AbeEnstTuv] [--help] [--version] fileName
- 说明:把档案串连接后传到基本输出(屏幕或加 > fileName 到另一个档案)
- 参数:
-
- -n 或 –number 由 1 开始对所有输出的行数编号
- -b 或 –number-nonblank 和 -n 相似,只不过对于空白行不编号
- -s 或 –squeeze-blank 当遇到有连续两行以上的空白行,就代换为一行的空白行
- -v 或 –show-nonprinting
- -n 或 –number 由 1 开始对所有输出的行数编号
超级块 | inode节点表 | 数据区 | |||||||
(一)inode
inode在linux中是一种数据结构,包含了文件系统中文件相关的重要信息
inode节点表存放inode节点,存储文件属性、所有者、权限等元数据信息
文件储存在硬盘上,硬盘的最小存储单位叫做"扇区"(Sector)。每个扇区储存512字节(相当于0.5KB)
操作系统读取硬盘的时候,不会一个个扇区地读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个"块"(block)。这种由多个扇区组成的"块",是文件存取的最小单位。"块"的大小,最常见的是4KB,即连续八个 sector组成一个 block。
文件数据都储存在"块"中,那么很显然,我们还必须找到一个地方储存文件的元信息,比如文件的创建者、文件的创建日期、文件的大小等等。这种储存文件元信息的区域就叫做inode,中文译名为"索引节点"。
(二)目录文件
Linux文件系统是目录和文件组成的一种层次结构,目录(directory)也是一种文件,起点称为根(root),其名字是一个字符 / 。Linux系统中打开目录,实际上就是打开目录文件。目录文件的结构非常简单,就是一系列目录项(dirent)的列表。每个目录项,由两部分组成:所包含文件的文件名,以及该文件名对应的inode号码。
Linux中,一个文件(包括目录)的文件名,及文件名与inode的对应关系,都是由包含该文件的目录所描述的。在Linux目录中,每个名字有一个inode number,inode number指出了存储数据的硬盘空间的位置。ls -i命令列出整个目录文件,即文件名和inode号码,所以我们可以先读取文件的inode,然后通过ls -i观察名字和inode对应关系;如果要查看文件的详细信息,就必须根据inode号码,访问inode节点,读取信息。
(三)数据块
三、假设块大小为4k, userlist的大小不小于10k,自己假设大小
1.Cat userlist的过程:
- 从目录找到userlist
- 从dentry结构体定位inode
- 从inode结构体读出i_block[]
- 按顺序组织i_block[]中的内容,输出到终端。