百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术流 > 正文

关于linux文件系统的理解(一)(linux文件系统到底有什么用处)

citgpt 2024-07-15 15:20 14 浏览 0 评论

文件系统的理解一共分为了三个部分,第一个部分主要是VFS 的理解,第二个部分主要是linux 上的经典文件系统(ext2\ext3),最后再输出一下无持久存储的文件系统,通过以上三部分基本可以熟悉到文件系统的所有基础内容了.本文主要从VFS 的层面进行分析文件系统。我们知道linux 为了在支持本机的文件系统外同时允许访问其他操作系统的文件,用户态和文件系统之间加入了一个抽象层,该抽象层就是VFS,VFS 处于内核态。它的主要作用就是为了实现在linux系统里面那句万物皆文件的口号。

文件系统主要分三类:

关于linux文件系统的理解(一)(linux文件系统到底有什么用处)

1:基于磁盘的文件系统:主要包括了一些iso9660、FAT EXT2/3等,底层设备无非是存储块组成的一个列表。

2:虚拟文件系统,在内核中生成,主要是用户态获取内核态信息的一个通信方式

3:网络文件系统(NFS)

通用文件系统模型

VFS 不仅为文件系统提供了方法和抽象,还支持文件系统中对象的统一视图,该模型只存在于虚拟中,需要使用各种对象和函数指针与每种文件系统进行适配,所有文件系统的实现都需要提供与VFS 定义的结构配合。ext2与vfs结构之间的转换,几乎是可以不计损失时间。

对于文件的处理,用户态和内核态处理的对象有所不一样,对于用户程序来说对文件的处理主要是通过文件描述符标识。该描述符是一个整数,在对所有的文件操作中用做标识文件的参数,它在打开的时候由内核分配,只能在一个进程中有效,两个不通的进程可以使用相同的标识符,但他们不能指向同一个文件,所以通过文件描述符来共享文件是不行的。而内核处理文件的关键是inode,每个文件和目录都有一个inode,inode包含其他文件属性却并不包含文件名。

inode的成员主要有如下两类

1:描述文件状态的元数据,访问权限和修改日期

2:保存实际文件内容的数据段(数据指针)

为了更清楚的了解inode是如何构建文件系统的目录结构,我们用一个图可以很清晰的看出来(这里略)。其中查看inode的方法可以通过ls -li 查出

这里简单的介绍下链接,

软链接:每个软链接都会使用一个inode,相应的inode数据段包含的则是链接目标的路径

硬链接:硬链接创建后是无法区分源文件,创建的文件使用了同一个inode编号,这个有个问题如果我们删除了源文件,是否inode 也删除了呢?此时我们在inode中加入了一个计数器,对于每个硬链接计数器都会增加1,只有计数器为0 时系统才确定该文件不需要使用了。

inode和三个文件管理命令关系

cp和inode

分配一个空闲的inode号,在inode表中生成新条目

在目录中创建一个目录项,将名称与inode编号关联

拷贝数据生成新的文件

rm 和inode:

链接数递减,从而释放的inode号可以被重用

把数据块放在空闲列表中

删除目录项

数据实际上不会马上被删除,但当另一个文件使用数据块时将被覆盖

mv和inode

1、如果mv命令的目标和源在相同的文件系统,作为mv 命令

用新的文件名创建对应新的目录项

删除旧目录条目对应的旧的文件名

不影响inode表(除时间戳)或磁盘上的数据位置:没有数据被移动!、如果目标和源在一个不同的文件系统, mv相当于cp和rm

下一期 我们将针对VFS 的结构和文件操作进行分析。敬请关注!

相关推荐

js中arguments详解

一、简介了解arguments这个对象之前先来认识一下javascript的一些功能:其实Javascript并没有重载函数的功能,但是Arguments对象能够模拟重载。Javascrip中每个函数...

firewall-cmd 常用命令

目录firewalldzone说明firewallzone内容说明firewall-cmd常用参数firewall-cmd常用命令常用命令 回到顶部firewalldzone...

epel-release 是什么

EPEL-release(ExtraPackagesforEnterpriseLinux)是一个软件仓库,它为企业级Linux发行版(如CentOS、RHEL等)提供额外的软件包。以下是关于E...

FullGC详解  什么是 JVM 的 GC
FullGC详解 什么是 JVM 的 GC

前言:背景:一、什么是JVM的GC?JVM(JavaVirtualMachine)。JVM是Java程序的虚拟机,是一种实现Java语言的解...

2024-10-26 08:50 citgpt

使用Spire.Doc组件利用模板导出Word文档
  • 使用Spire.Doc组件利用模板导出Word文档
  • 使用Spire.Doc组件利用模板导出Word文档
  • 使用Spire.Doc组件利用模板导出Word文档
  • 使用Spire.Doc组件利用模板导出Word文档
跨域(CrossOrigin)

1.介绍  1)跨域问题:跨域问题是在网络中,当一个网络的运行脚本(通常时JavaScript)试图访问另一个网络的资源时,如果这两个网络的端口、协议和域名不一致时就会出现跨域问题。    通俗讲...

微服务架构和分布式架构的区别

1、含义不同微服务架构:微服务架构风格是一种将一个单一应用程序开发为一组小型服务的方法,每个服务运行在自己的进程中,服务间通信采用轻量级通信机制(通常用HTTP资源API)。这些服务围绕业务能力构建并...

深入理解与应用CSS clip-path 属性
深入理解与应用CSS clip-path 属性

clip-pathclip-path是什么clip-path 是一个CSS属性,允许开发者创建一个剪切区域,从而决定元素的哪些部分可见,哪些部分会被隐...

2024-10-25 11:51 citgpt

HCNP Routing&Switching之OSPF LSA类型(二)
  • HCNP Routing&Switching之OSPF LSA类型(二)
  • HCNP Routing&Switching之OSPF LSA类型(二)
  • HCNP Routing&Switching之OSPF LSA类型(二)
  • HCNP Routing&Switching之OSPF LSA类型(二)
Redis和Memcached的区别详解
  • Redis和Memcached的区别详解
  • Redis和Memcached的区别详解
  • Redis和Memcached的区别详解
  • Redis和Memcached的区别详解
Request.ServerVariables 大全

Request.ServerVariables("Url")返回服务器地址Request.ServerVariables("Path_Info")客户端提供的路...

python操作Kafka

目录一、python操作kafka1.python使用kafka生产者2.python使用kafka消费者3.使用docker中的kafka二、python操作kafka细...

Runtime.getRuntime().exec详解

Runtime.getRuntime().exec详解概述Runtime.getRuntime().exec用于调用外部可执行程序或系统命令,并重定向外部程序的标准输入、标准输出和标准错误到缓冲池。...

promise.all详解 promise.all是干什么的
promise.all详解 promise.all是干什么的

promise.all详解promise.all中所有的请求成功了,走.then(),在.then()中能得到一个数组,数组中是每个请求resolve抛出的结果...

2024-10-24 16:21 citgpt

Content-Length和Transfer-Encoding详解
  • Content-Length和Transfer-Encoding详解
  • Content-Length和Transfer-Encoding详解
  • Content-Length和Transfer-Encoding详解
  • Content-Length和Transfer-Encoding详解

取消回复欢迎 发表评论: