首页 > 其他分享 >Cat userlist

Cat userlist

时间:2022-10-23 11:56:34浏览次数:57  
标签:文件 存储 Cat userlist 内核 磁盘 节点

1 Linux文件系统的三层抽象

一般而言,文件是存储在硬盘上的,那么将磁盘这一物理实体,进行逻辑划分和组织,就是进行抽象的过程。目的就是为了便于管理。

最朴素的管理手段就是,给硬盘的区域编号,按照编号从低到高给文件分配存储空间。当然,访问效率就可想而知了(当文件数量一多,访问效率将会及其低下)。所以那些系统开发人员就发挥出自己的聪明才智,对文件系统进行了巧妙的设计。

第一层抽象:从磁盘到分区

一整块磁盘,能存储大量的数据,统一管理起来不太方便。若能将它分而治之,则更加灵活。比如说window系统里面的磁盘分区:C盘,D盘,E盘等等。每个分区都可以看作是一个独立的磁盘。

第二层抽象:从磁盘到块序列

一个磁盘由一些磁性盘片组成。每个盘片的表面都被划分为很多同心圆,这些同心圆称作磁道,每一个磁道又进一步被划分为扇区,每个扇区可以存储一定字节的数据(如512字节)。扇区是磁盘上的基本存储单元,每次空间分配或者访问都是以一个扇区为最小单位。

第三层抽象:从块序列到三个区域的划分

为了存储不同类型的数据(文件内容、文件属性、目录),将磁盘块分为3个部分:超级块,inode结点,数据区

  • 文件系统中的第一个块被称为超级块,超级块用来存放文件系统本身的结构信息
  • 文件系统的下一个部分被称为i-节点表。每个文件都有一些属性,如大小、文件所有者和最近修改时间等。这些性质被记录在一个称为i-节点的结构中。所有的i-节点都有相同的大小,并且i-节点表是这些结构的一个列表。i-node节点表存放i-node节点,存储文件属性、所有者、权限等元数据信息
  • 文件系统的第三部分是数据区。文件的内容保存在这个区域。数据区分块存储文件数据,它是不连续存储的,一个文件的内容可能散落在数据区内部

2 Cat userlist的过程

输入ls -ia可以查看当前目录包含的文件以及对应的i-节点号

如上图,代表当前目录的"."的i-节点号为800729,代表上一级目录的".."的i-节点号为800909。

输入cat userlist,表示读取userlist这个文件并显示

step1.在目录中寻找文件名

文件名存储在目录文件中,内核在目录文件中寻找包含字符串"userlist"的记录。userlist所在的记录包含编号为47的i-节点。

step2.定位i-节点并读取内容

内核在文件系统中的i-节点区域找到i-节点47。i-节点包含数据块编号的列表。

step3.访问存储文件内容的数据块

在step2之后,即知道了数据块的位置和在磁盘中的顺序,就可以通过不停的调用read函数,使内核不断将字节从磁盘复制到内核缓冲区。

ps

内核根据文件名找到i-节点号,再根据i-节点号找到i-节点。在i-节点中,找到文件的权限位和用户ID,从而判断该用户是否具有读取权限。通过以上调用构成,内核已经可以知道文件内容存放在哪些数据块上,以及它们的顺序。由于cat不断的调用read函数,使得内核不断将字节从磁盘复制到内核缓存区,进而到达用户空间

所有从文件读取数据的命令,比如,cat、cp、more、who等,都是将文件名传给open来访问文件内容,对open的每次调用都是先在目录中寻找文件名,然后根据目录中的i-节点号获得文件的属性,最终找到文件的内容。

假如open一个没有读或者写权限的文件时:内核首先根据文件名找到i-节点号,然后根据i-节点号找到i-节点。在i-节点中,内核找到文件的权限位和拥有者的用户ID。如果权限位设置你的用户ID对文件没有访问权限,则open返回-1并将errno置为EPERM。

标签:文件,存储,Cat,userlist,内核,磁盘,节点
From: https://www.cnblogs.com/cqszxy2020/p/16818256.html

相关文章

  • Tomcat配置SSL证书
    1、下载证书,并放到Tomcat的conf目录下   2、修改Tomcat->conf->server.xml文件<Connectorport="443"protocol="org.apache.coyote.http11.Http11Nio2Proto......
  • cat userlist
    1.Linux文件系统的三层抽象是什么?Linux文件系统的内部结构硬盘实际上是由一些磁性盘片组成的计算机系统的一个设备。文件系统是对该设备的一种多层次的抽象。第一层抽象:一......
  • 拙见:truncate和delete以及drop
    drop是针对对象的。createtabletest,表示要创建一个表对象,这时会跟数据库申请:给我划块空间出来,命名为test。droptabletest,会跟数据库说:名字为test的表对象的空间不用......
  • 论文解读(GLA)《Label-invariant Augmentation for Semi-Supervised Graph Classificati
    论文信息论文标题:Label-invariantAugmentationforSemi-SupervisedGraphClassification论文作者:HanYue,ChunhuiZhang,ChuxuZhang,HongfuLiu论文来源:2022,NeurI......
  • cat userlist
    任务目标Linux文件系统的三层抽象是什么?写出Catuserlist的过程,要详述目录文件,i-node.数据块,要画图示意假设块大小为4k,userlist的大小不小于10k,自己假设大小Linux......
  • cat userlist的理解
    学习要求Linux文件系统的三层抽象是什么?写出Catuserlist的过程,要详述目录文件,i-node.数据块,要画图示意假设块大小为4k,userlist的大小不小于10k,自己假设大小Linux......
  • [CF311B]Cats Transport
    [CF311B]CatsTransport思路我们发现每只小猫有两个对接走时间有影响的参数\(D_i\)和\(T_i\),而实际上我们只需要知道每只小猫刚好被接走的最小出发时刻是多少。所以......
  • Educational Codeforces Round 138
    EducationalCodeforcesRound138这把是真的丢了大脸。Dashboard$\color{Green}{★}\\$表示赛时做出。$\color{Yellow}{★}\\$表示赛后已补。$\color{Red}{★}......
  • cat userlist
    catuserlistLinux文件系统的三层抽象是什么?linux的三层抽象分别是:磁盘——>分区分区——>块数组块数组——>(超级块,inode,数据块)写出Catuserlist的过程,要详述目录......
  • Content-type的application/json的意义?
    网站服务器编程中,前后端分离在很多项目中流行开来了。前端的静态页面,不断的发送AJAX请求给后端,以获取数据来动态改变呈现。使用什么数据格式进行交互的呢?答案是JS......