【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.mzph.cn/diannao/1474.shtml

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

相关文章

[ LeetCode ] 题刷刷(Python)-第35题:搜索插入位置

题目描述 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 nums 为 无重复元素 的 升序 排列数组 请必须使用时间复杂度为 O(log n) 的算法。 示例 示例 1: 输入: …

减肥变成一种趋势!足球直播是一种刺激——早读(逆天打工人爬取热门微信文章解读)

看直播是打发时间的好方式 引言Python 代码第一篇 洞见 跌入粪坑的钟美美,才是真正的“人间清醒”第二篇 人民日报 来了!新闻早班车要闻社会政策 结尾 变化是生活的法则 而直播的比赛则是这一法则的缩影 每一秒都可能带来转折和惊喜 充满了未知和奇迹 引…

磁盘损坏无法读取:原因、恢复方案与防范之道

在数字化信息爆炸的时代,磁盘作为数据存储的重要载体,承载着无数重要的文件和资料。然而,当磁盘突然损坏,无法读取数据时,我们往往会陷入困境,焦虑不已。面对这种情况,我们该如何应对&#xff1…

插入排序(insertionSort)

插入排序是一种简单直观的排序算法, 基本思想 将待排序的元素逐个插入到已经排序好的部分中的适当位置,从而得到新的有序序列。核心思想是不断地比较和移动元素,直到找到合适的插入位置。 插入排序的特点: 稳定性:插…

Yolo-world使用

1、安装 python pip install ultralytics 前往官网下载模型:https://docs.ultralytics.com/models/yolo-world/#key-features 我这里使用yolov8s-world.pt举例 最简单的使用示例 if __name__ __main__:model YOLO(model/yolov8s-world.pt)results model.pre…

中仕公考:考公还是考编?区别是什么?

公务员和事业编应该如何选择?区别在哪里?中仕为大家总结以下几点,看完就明白了! 事业编制:主要指从事事业单位工作人员所获得的稳定的事业单位编制。 公务员:是指在各级政府机关中,行使国家行政职权,执行国家公务的…

Ubuntu的apt命令用法汇总

在Ubuntu系统中,apt 是一个十分常用的包管理工具,用于安装、更新、卸载和管理软件包。 本文将汇总apt 命令的用法,以便你更好地利用Ubuntu系统进行软件管理。 一. 安装软件包要安装一个软件包,使用以下命令: sudo a…

pyhton学习之-分支结构-运费计算模板-第二练

第1关:运费计算模板第二练-地区运费计算模板 任务描述 现在有一个淘宝店铺,发货地在天津,店主设计了一个运费规则如下图所示: 可以选择区域来指定每件商品的运费,达到一定的购买金额以后可以包邮 测试说明 计算运费 根据地区和购买数量计算运费。 输入:北京,1件 输出:…

2024HW ---->内网横向移动

在蓝队的面试过程中,如果你会内网渗透的话,那是肯定的一个加分选项!!! 那么从今天开始,我们就来讲一下内网的横向移动!!! 目录 1.域内任意用户枚举 2.Password-Sprayi…

ffmpeg入门

ffmpeg入——安装 Fmpeg地址 FFmpeg源码地址:GitHub - FFmpeg/FFmpeg: Mirror of https://git.ffmpeg.org/ffmpeg.git FFmpeg可执行文件地址:Download FFmpeg Windows平台 ​ ​ Windows平台下载解压后如图所示(文件名称以-share结尾的…

深入剖析Spring框架:循环依赖的解决机制

你好,我是柳岸花开。 什么是循环依赖? 很简单,就是A对象依赖了B对象,B对象依赖了A对象。 在Spring中,一个对象并不是简单new出来了,而是会经过一系列的Bean的生命周期,就是因为Bean的生命周期所…

如何添加所有未跟踪文件到暂存区?

文章目录 如何将所有未跟踪文件添加到Git暂存区?步骤与示例代码1. 打开命令行或终端2. 列出所有未跟踪的文件3. 添加所有未跟踪文件到暂存区4. 验证暂存区状态 如何将所有未跟踪文件添加到Git暂存区? 在版本控制系统Git中,当我们首次创建新文…

Java每日面试题

Java 高级面试问题及答案 问题1: Java中的垃圾回收机制是如何工作的?请描述一下垃圾收集器的工作原理。 答案: Java的垃圾回收机制主要依赖于垃圾收集器(Garbage Collector,GC),它负责自动回收不再使用的对象&#x…

最全!2024腾讯春招Spring Circuit Breaker面试题大全,附详解和技巧,必备收藏!

面对2024年腾讯春季招聘,准备充分的技术面试答案至关重要,尤其是在微服务架构和高可用性设计方面。Spring Circuit Breaker作为维持微服务稳定性和可靠性的关键技术,了解其工作原理和实际应用对于任何希望在当今技术驱动的环境中取得成功的软…

安全狗云眼的主要功能有哪些?

"安全狗云眼"是一款综合性的网络安全产品,主要用于实时监控和保护企业的网络安全。其核心功能包括威胁检测、漏洞扫描、日志管理和合规性检查等。 以下是安全狗云眼的主要功能详细介绍: 1、资产管理 定期获取并记录主机上的Web站点、Web容器、…

【科大讯飞笔试题汇总】2024-04-21-科大讯飞春招笔试题-三语言题解(CPP/Python/Java)

🍭 大家好这里是KK爱Coding ,一枚热爱算法的程序员 ✨ 本系列打算持续跟新科大讯飞近期的春秋招笔试题汇总~ 💻 ACM银牌🥈| 多次AK大厂笔试 | 编程一对一辅导 👏 感谢大家的订阅➕ 和 喜欢&…

卷积神经网络 (CNN)

计算机视觉最常见的机器学习模型体系结构之一是卷积神经网络 (CNN)。 CNN 使用筛选器从图像中提取数值特征图,然后将特征值馈送到深度学习模型中以生成标签预测。 例如,在图像分类方案中,标签表示图像的主要主题(换句话说&#xf…

Go 之常用并发学习

在 Go语言实战 中看到有些并发相关的例子,讲解得也比较详细,于是乎写来加深下印象。 无缓冲通道 无缓冲通道在接收前没有能力保存任何值。我自己找了书上的示例来加深一下印象。 模拟网球比赛 package mainimport ("fmt""math/rand&q…

微信有关白名单IP

一、商家支付 二、公众号

开启智慧之旅,AI与机器学习驱动的微服务设计模式探索

​🌈 个人主页:danci_ 🔥 系列专栏:《设计模式》 💪🏻 制定明确可量化的目标,坚持默默的做事。 🚀 转载自热榜文章🔥:探索设计模式的魅力:开启智慧…