工作多年,Linux文件系统还不太了解?
source link: https://my.oschina.net/jiagoujingjin/blog/5074145
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
▲ 点击上方“架构精进之路”关注公众号
回复“01”领取「程序员进阶大礼包」
这是「架构精进之路」公众号的第67篇原创文章
我们作为“码农”,每天都在接触编程,接触linux系统,那么常见的Linux目录和文件都有哪些,它们又有什么作用呢? 想必大家经常会忽略这点,作为工作多年的你而言也不例外,今天就带大家来一起了解一下吧~1 初识目录结构
2 初识文件
2.1 文件类型
2.1.1 文件
第一个属性为 [-]。最常用的类型,包括:纯文本文件(ASCII);
二进制文件(binary);
数据格式的文件(data);
各种压缩文件。
2.1.2 目录
第一个属性为 [d]2.1.3 链接文件
第一个属性为 [l]2.1.4 管道
第一个属性为 [p]2.1.5 块设备
第一个属性为 [b] 。储数据以供系统存取的接口设备,简单而言就是硬盘。ll /dev/vda1
brw-rw---- 1 root disk 253, 1 11月 28 19:17 /dev/vda1
2.1.6 字符设备文件
第一个属性为 [c] 。即串行端口的接口设备,例如键盘、鼠标等等。2.1.7 套接字
第一个属性为 [s]。最常在 /var/run目录中看到这种文件类型。 查看文件类型的方法:#file, stat, ls
讲到这里,可以有些疑问,到底文件是个什么东东?
2.2 文件是什么?
如上图所示,一般文件包括两部分:元数据和用户数据元数据:文件的附属信息:文件大小,文件创建时间,文件拥有者,Inode编号(文件的唯一标识)
用户数据:记录文件真实内容的地方。
2.3 文件系统
文件系统,本身是对存储设备上的文件,进行组织管理的机制。所以根据组织机制的不同,可以分为不同的文件系统。 文件系统系统包括4大要素:索引节点,目录项,逻辑块,超级块。 2.3.1 索引节点 同上面讲的元数据部分,索引节点和文件是一一对应的,它和文件内容一样,是存储在磁盘中的。所以索引节点是占用磁盘空间的。所以它不会随着进程的消亡而消失。2.3.2 目录项
简称dentry,用来记录文件的名称,索引节点指针以及目录项之间的关联关系,会形成一棵树状结构。多个关联的目录项,就形成了目录结构。 它是由内存维护的一个内存数据结构,所以通常被称作“目录项缓冲”。2.3.3 逻辑块
索引节点和目录项记录了文件的元数据,那么文件内容是怎么存储的? 实际上,磁盘上最小的读写单位是“扇区”,只有512B大小,也就是0.5K,为了读写效率,系统会将连续的扇区组合一个”块“,一般一个“块”是8个扇区,也就是4K,4096B。 从磁盘中读取内容是特别慢的,所以系统会将读取的内容存到“页缓冲”中。2.3.4 超级块
一个超级块对应一个文件系统。超级块会保存文件系统的大小和状态、块设备的引用和元数据信息(比如空闲列表等等) 文件系统有多种,比如Ext4, NFS等,根据存储位置不一样,可以分为三类。基于磁盘的文件系统:也就是数据直接存储在计算机本地挂载的磁盘中。常见的Ext4, Ext3,XFS。
基于内存的文件系统:也就是虚拟文件系统。这类文件系统,不需要任何磁盘分配存储空间,但会占用内存。比如/proc文件系统,/sys文件系统。
网络文件系统:用来访问其他计算机数据的文件系统,比如NFS,SMB。
缓冲IO:只利用标准库的缓冲来加速文件的访问。标准库内部会通过系统调用来访问文件。
非缓冲IO:直接系统调用。
无缓存IO操作数据流向路径:数据——内核缓存区——磁盘
标准IO操作数据流向路径:数据——流缓存区——内核缓存区——磁盘
阻塞IO:是指应用程序执行IO操作,如果没有获得响应,则会阻塞当前线程,不会做其他任务。
非阻塞IO:是指应用程序执行IO操作,不阻塞当前线程,可以继续执行其他任务,随后会轮询或者事件通知的形式,获取调用结果。
2.5.4 同步和非同步IO
设置O_SYNC或者O_DSYNC标志,就代表同步IO。设置O_DSYNC,会等待数据写入磁盘才返回;设置O_SYNC,则是在O_DSYNC的基础上,要求文件元数据也要返回磁盘后,才返回。同步IO:是指应用程序执行IO操作后,要一直等待IO完成后,才能获得IO响应。
异步IO:是指用用程序执行IO操作后,不用等待完成或完成后的响应,而是继续执行就可以。等待IO完成,响应会用事件通知的形式,告诉应用程序。
·················· END ··················
关注公众号,免费领学习资料
十年研发路,大厂架构师,CSDN博客专家
专注架构技术学习及分享,职业与认知升级
坚持分享接地气儿的干货,期待与你一起成长
「架构精进之路」专注架构研究,技术分享
点“赞”和“在看”哦Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK