cat userlist
一、Linux文件系统的三层抽象是什么?
在之前的博客中,我们对linux文件系统有了初步的认识:https://www.cnblogs.com/acacacaac/p/16727405.html
大部分的Linux文件系统(如ext2、ext3)规定,一个文件由目录项、inode和数据块组成:
- 目录项:包括文件名和inode节点号;
- inode:又称文件索引节点,包含文件的基础信息以及数据块的指针;
- 数据块:包含文件的具体内容。
不过Linux下的文件系统中,也可以这样分为三层:
- 上层的文件系统的系统调用(System-call );
- 虚拟文件系统VFS(Virtual File System)层;
- 挂载到VFS中的各种实际文件系统。
也可以这样分为三层:
- 用户空间;
- 内核空间;
- 硬件。
具体要看你是怎么理解的。
二、写出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文件系统块大小:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具