【Linux文件系统开发】认知篇

【Linux文件系统开发】认知篇

文章目录

  • 【Linux文件系统开发】认知篇
    • 一、文件系统的概念
    • 二、文件系统的种类(文件管理系统的方法)
    • 三、分区
    • 四、文件系统目录结构
    • 五、虚拟文件系统(Virtual File System)
      • 1.概念
      • 2.原因
      • 3.作用
      • 4.总结

一、文件系统的概念

常规认知: 根目录

文件系统是操作系统用于明确存储设备(常见的是磁盘,也有基于NAND Flash的固态硬盘)或分区上的文件的方法和数据结构;即在存储设备上组织文件方法

​ 方法的具体实施是由一个叫做文件管理系统程序来做,这个系统就简称文件系统

二、文件系统的种类(文件管理系统的方法)

文件系统有很多种类,每种都有其独特的特性和用途。

FAT VFAT NTFS EXT1/2/3/4 HFS 等等

常见的:

vfat:boot (bootloader,kernel)
ext4:根目录
tmpfs:内存文件系统

比如,windows用的就是NTFS

在这里插入图片描述

树莓派查看文件系统的命令如下

df -T

在这里插入图片描述

​ 上述命令显示的文件系统类型中,vfat通常用于启动分区(boot),而ext4用于根目录;tmpfs通常用于存储临时文件系统,对于需要快速访问的数据非常有用(是一种基于内存的文件系统,将文件存储在RAM中而不是磁盘上)

虚拟机ubuntu下的文件系统类型:

在这里插入图片描述

以下是一些常见的文件系统类型:

  • FAT (File Allocation Table)

    FAT是一种简单而古老的文件系统,最早用于MS-DOS和Windows操作系统。它具有广泛的兼容性,但是在处理大容量磁盘和文件时效率相对较低。

  • VFAT (Virtual FAT)

    VFAT是对FAT的扩展,支持长文件名和其他改进。它主要用于支持Windows中的长文件名。

  • NTFS (New Technology File System)

    NTFS是Windows操作系统中常见的文件系统,具有高级的安全性、恢复性和性能特性。它支持大文件和大容量硬盘。

  • ext (Extended File System)

    ext是Linux操作系统系列中使用的文件系统。不同的版本有 ext1、ext2、ext3、ext4。每个版本都引入了新的特性,如日志文件系统(ext3和ext4),以提高稳定性和性能。

  • HFS (Hierarchical File System)

    HFS是苹果公司早期Macintosh计算机上使用的文件系统,后来演变为HFS+和APFS。HFS+用于较老的Mac系统,而APFS是Apple File System,用于最新的macOS。

  • Btrfs (B-Tree File System)

    Btrfs是Linux中的一种先进的文件系统,具有高级的快照、校验和、压缩等特性。

  • exFAT (Extended File Allocation Table)

    exFAT是一种用于闪存存储设备和大容量存储设备的文件系统,它是FAT32的扩展。

  • ZFS (Zettabyte File System)

    ZFS是一种先进的文件系统,最初由Sun Microsystems开发,用于Solaris操作系统。它具有强大的存储管理和数据完整性保护特性。

  • tmpfs

    tmpfs是一种基于内存的文件系统,将文件存储在RAM中而不是磁盘上。它通常用于存储临时文件系统,对于需要快速访问的数据非常有用。

  • XFS

    XFS是一种高性能的文件系统,最初由SGI(Silicon Graphics, Inc.)开发,用于UNIX系统

三、分区

windows:

  • 对于分区的管理较为“随意”,因为其面向普通PC用户
  • 目录即分区,C,D盘随意存放文件

linux:

  • 按照功能来分区,每个分区严格存放文件,大多面向开发者
  • (根)目录不是分区,和windows不同,同一文件夹下的文件也可能属于不同分区

嵌入式系统可分为4个区

  • **Bootloader **: 存放引导加载程序(启动代码)的位置,这个分区通常比较小。
  • parameter : 存放启动代码向内核传递参数的位置。这个分区存储一些启动时需要的配置信息。
  • kernel : 存放操作系统内核的位置。内核是操作系统的核心部分,负责管理硬件和提供系统调用接口。
  • root (根目录)分区: 根分区包含文件系统的根目录,也就是整个文件系统的起始点。在Linux中,根分区是文件系统的基础。

四、文件系统目录结构

文件系统目录结构是文件系统中用于组织和存储文件的一种层次化结构。在不同的操作系统中,文件系统目录结构可能有所不同。

cd /      #进入根目录
cd ~      #进入工作目录,相当了C,D盘,随便操作

在这里插入图片描述

sudo su   #进入超级用户目录
su - pi   #返回普通用户目录

在这里插入图片描述

以下是常见的Linux文件系统目录结构:

下面只是Linux系统中的典型目录结构,不同的Linux发行版可能会有些许差异。目录结构的设计旨在使系统文件有条理地分布在不同的目录下,方便用户和系统进行管理。

  • 根目录(/)所有目录和文件的起始点。根目录包含了整个文件系统的基本结构。
  • /bin: 存放**系统命令(二进制文件)**的目录。这里包含了许多用户和系统都需要使用的基本命令,如ls、cp、mv等。
  • /boot: 存放系统启动所需的文件,包括内核文件引导加载程序(Bootloader)
  • /dev: 包含设备文件,如硬件设备,字符设备等。
  • /etc: 存放系统配置文件的目录。这里包含了许多系统的配置文件,如网络配置、用户配置等。(可对其下的文件,如rc.local,init目录下文件等等,进行配置,实现开机自启某些软件或程序)
  • /home用户的主目录。每个用户在这个目录下都有一个独立的子目录,用于存放个人文件和配置。(该目录下两个子目录相当于windows系统的两个不同用户,互不干扰)
  • /lib和/lib64: 存放系统和应用程序所需的共享库文件
  • /mnt: 用于挂载其他文件系统(如虚拟机Ubuntu与windows的共享文件夹)临时挂载点
  • /opt: 用于存放第三方软件的安装目录。
  • /proc: 虚拟文件系统,提供了内核和进程的信息,可以通过cat命令读取这里的文件获取系统状态
  • /root: **超级用户(root)**的主目录。
  • /sbin存放系统命令(二进制文件),与/bin类似,不过这里的命令通常是供超级用户使用的。
  • /tmp: 用于存放临时文件的目录。
  • /usr: 存放系统用户和系统管理器命令的目录,也包含了一些共享的系统资源。
  • /var: 存放经常变化的文件,如日志文件缓存文件等。

五、虚拟文件系统(Virtual File System)

1.概念

VFS就是对各种文件系统的一个抽象,它为各种文件系统提供了一个通用的接口,使得用户和应用程序可以简便地访问各种不同类型的文件系统,而不用关心底层的实现细节。

2.原因

  • 文件系统的种类有很多,除了Linux标准的文件系统Ext2/Ext3/Ext4外,还有很多种文件系统 。

  • 文件对应文件系统的类型可能不一样,数据存储的方式不一样,访问方式也就不一样,没办法做到操作统一化,给编程开发带来困难。

3.作用

​ VFS(虚拟文件系统)的存在正是解决了上述问题,VFS 提供了一组标准的系统调用,如 openreadwriteclose 等,以及文件操作的标准接口,使得应用程序在不同的文件系统上能够保持一致的操作方式。这也为操作系统的可移植性提供了便利,因为应用程序不需要依赖于特定文件系统的实现细节。

VFS(虚拟文件系统)

  • 简化上层应用程序员的开发,不管是什么文件类型,磁盘还是设备,通通都是用open,read,write统一操作。

例如,cp 指令的实现

cp /floppy/TEST /tmp/test

​ 结合下图,其中/floppy是MS-DOS磁盘的一个安装点,而/tmp是一个标准的第二扩展文件系统(second Extended Filesystom, Ext2)的目录。

​ 正如图(a)所示,VFS是用户的应用程序与文件系统实现之间的抽象层。因此,cp程序并不需要知道/floppy/TEST 和 /tmp/test是什么文件系统类型。相反,cp程序直接与VFS交互,这是通过Unix程序设计人员都熟悉的普通系统调用来进行的。cp的执行代码如图(b)所示:

在这里插入图片描述

从系统编程,从上层到底层来看

如果从分区的角度,串口操作的就是/dev;普通文件如 .config在ext4上;共享内存 tmpfs dev/shm…

之前所学的Linux系统编程,各种应用层的知识,vfs都提供了帮助。

在这里插入图片描述

4.总结

VFS(虚拟文件系统)就是对各种文件系统的一个抽象,它为各种文件系统提供了一个通用的接口;简化应用程序员的开发,不管是什么文件类型,不管文件是磁盘还是设备,都只用open read write统一操作。


小扩展:

绝对路径与相对路径

绝对路径 :以/开始,表示该文件从根目录开始的完整位置路径,必须以根开始

相对路径 :不以/开始,指该文件相对于该目录的路径或某个目录的路径,不以根开始;可以作为一个简短的形式来指定一个文件名。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/636923.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【GoWeb框架初探————XORM篇】

1. XORM xorm 是一个简单而强大的Go语言ORM库. 通过它可以使数据库操作非常简便。 1.1 特性 支持 Struct 和数据库表之间的灵活映射,并支持自动同步事务支持同时支持原始SQL语句和ORM操作的混合执行使用连写来简化调用支持使用ID, In, Where, Limit, Join, Havi…

请编写一个函数void fun(int m,int k,int xx[]),该函数的功能是:将大于整数m且紧靠m的k个素数存入xx所指的数组中。

本文收录于专栏:算法之翼 https://blog.csdn.net/weixin_52908342/category_10943144.html 订阅后本专栏全部文章可见。 本文含有题目的题干、解题思路、解题思路、解题代码、代码解析。本文分别包含C语言、C++、Java、Python四种语言的解法和详细的解析。 题干 请编写一个函…

vector简单介绍

目录 学习语法,不必拘泥,重要的是要学会和理解。所有的一切,例如做题,学习、看书、各种行为都是手段,为着我们更好的运用。因为,最终都是为了更好的去理解某个东西,以便于更好的去改造这个世界…

C语言 | 自定义类型:联合和枚举

目录: ----前言 1. 联合体 1.1 联合体类型的声明 1.2 联合体的特点 1.3 相同成员的结构体和联合体对比 1.4 联合体大小的计算 1.5 联合的使用 1.6联合体的练习 2. 枚举 2.1 枚举类型的声明 2.2 枚举类型的优点 2.3 枚举类型的使用 --前言: c语言中内…

OpenVINO安装教程 npm版

从 npm Registry安装 OpenVINO™ 工具套件的英特尔发行版 请注意: 仅提供 JavaScript API 专用于所有主要操作系统的用户:Windows、Linux 和 macOS (所有 x86_64 / ARM64 架构) macOS 仅支持 CPU 推理 系统要求软件要求 Window…

博客网站/部署服务器---继上篇前端页面接入后端

目录 准备工作 创建用户类博客类与连接数据库 创建博客类 创建用户类 创建连接数据库工具类 实现对数据库数据博客的操作 实现对数据库用户的操作 创建数据库语句 登录页面 前端 后端 博客列表 前端 注销登录 写入数据 判断用户是否登录 替换页面用户昵称 后…

分类预测 | Matlab实现CNN-LSTM-SAM-Attention卷积长短期记忆神经网络融合空间注意力机制的数据分类预测

分类预测 | Matlab实现CNN-LSTM-SAM-Attention卷积长短期记忆神经网络融合空间注意力机制的数据分类预测 目录 分类预测 | Matlab实现CNN-LSTM-SAM-Attention卷积长短期记忆神经网络融合空间注意力机制的数据分类预测分类效果基本描述程序设计参考资料 分类效果 基本描述 1.Mat…

目标检测——防护装备数据集

一、重要性及意义 防护装备中的头盔和背心检测具有至关重要的重要性和深远的意义,主要体现在以下几个方面: 首先,它们对于保护工作人员的人身安全起着至关重要的作用。在各类工作环境中,尤其是那些涉及高空作业、机械操作或交通…

Linux基本命令之正则表达式(转义字符)

一:查看二进制文件 strings 命令:strings 文件名 生成链接文件 ln 命令:ln 选项 源文件(f1) 链接文件(f2) 软连接:eg:ln -s f1 f2 软链接不能跨分区链接,但可以在同一分区的不同目录下链接…

故障诊断 | 用于跨机器工况下故障诊断的深度判别迁移学习网络附Pytorch代码

目录 基础代码小结基础 目前,研究者已经提出了很多用于解决目标域和源域之间的分布对齐和知识迁移问题的领域自适应方法。然而,大多数研究方法只关注到边缘分布对齐,忽略了目标域和源域之间判别性特征的学习。因此,在某些案例中,这些方法仍然不能很好地满足故障诊断要求。…

从OWASP API Security TOP 10谈API安全

1.前言 应用程序编程接口(API)是当今应用驱动世界创新的一个基本元素。从银行、零售、运输到物联网、 自动驾驶汽车、智慧城市,API 是现代移动、SaaS 和 web 应用程序的重要组成部分,可以在面向客 户、面向合作伙伴和内部的应用程…

android开发 多进程的基本了解

目录 如何开启多进程?理解多进程模式的运行机制 如何开启多进程? 给四大组件在androidMenifest中指定android:precess <activityandroid:name".ThreeActivity"android:exported"false"android:process"com.my.process.three.remote" />…