cat userlist

一、Linux文件系统的三层抽象是什么?

在之前的博客中,我们对linux文件系统有了初步的认识:https://www.cnblogs.com/acacacaac/p/16727405.html

大部分的Linux文件系统(如ext2、ext3)规定,一个文件由目录项、inode和数据块组成:

  1. 目录项:包括文件名和inode节点号;
  2. inode:又称文件索引节点,包含文件的基础信息以及数据块的指针;
  3. 数据块:包含文件的具体内容。

不过Linux下的文件系统中,也可以这样分为三层:

  1. 上层的文件系统的系统调用(System-call );
  2. 虚拟文件系统VFS(Virtual File System)层;
  3. 挂载到VFS中的各种实际文件系统。

也可以这样分为三层:

  1. 用户空间;
  2. 内核空间;
  3. 硬件。

具体要看你是怎么理解的。

二、写出Cat userlist的过程,要详述目录文件,i-node.数据块,要画图示意(假设块大小为4k, userlist的大小不小于10k,自己假设大小)

输入man cat,查看cat的帮助文档:

(一)inode索引节点

  • 理解inode,要从文件储存说起。文件储存在硬盘上,硬盘的最小存储单位叫做"扇区"(Sector),每个扇区储存512字节(相当于0.5KB)。
  • 操作系统读取硬盘的时候,不会一个扇区一个扇区地读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个"块"(block)。这种由多个扇区组成的"块",是文件存取的最小单位。"块"的大小,最常见的是4KB,即连续八个 sector组成一个 block。
  • 文件数据都储存在"块"中,那么很显然,我们还必须找到一个地方储存文件的元信息,比如文件的创建者、文件的创建日期、文件的大小等等。这种储存文件元信息的区域就叫做inode,中文译名为"索引节点"。
  • 在一个文件系统中,一个inode代表一个文件,并使用一个整数值来表示该inode,里面包含了与该文件有关的一些信息。inode包含很多的文件元信息,但不包含文件名,利用stat命令可以查看一个文件更加详细的inode信息,包括:
    • 文件的字节数。
    • 文件拥有者的User ID。
    • 文件的Group ID。
    • 文件的读、写、执行权限。
    • 文件的时间戳,共有三个:
      • ctime指inode上一次变动的时间
      • mtime指文件内容上一次变动的时间
      • atime指文件上一次打开的时间。
    • 链接数,即有多少文件名指向这个inode。
    • 文件数据block的位置。

总之,除了文件名以外的所有文件信息,都存在inode之中。

(二)目录文件

Linux文件系统是目录和文件组成的一种层次结构,目录(directory)也是一种文件,起点称为根(root),其名字是一个字符 / 。Linux系统中打开目录,实际上就是打开目录文件。目录文件的结构非常简单,就是一系列目录项(dirent)的列表。每个目录项,由两部分组成:所包含文件的文件名,以及该文件名对应的inode号码。
Linux中,一个文件(包括目录)的文件名,及文件名与inode的对应关系,都是由包含该文件的目录所描述的。在Linux目录中,每个名字有一个inode number,inode number指出了存储数据的硬盘空间的位置。ls -i命令列出整个目录文件,即文件名和inode号码,所以我们可以先读取文件的inode,然后通过ls -i观察名字和inode对应关系;如果要查看文件的详细信息,就必须根据inode号码,访问inode节点,读取信息。ls -l命令列出文件的详细信息(ll):

(三)数据块

前面也提到过,"块"是文件存取的最小单位,这里就不多赘述了。上述有通过stat查看文件块大小,这里我们可以查看一下linux文件系统块大小:

(四)Cat userlist的过程

posted @ 2022-10-19 20:54  acacacac  阅读(39)  评论(0编辑  收藏  举报