【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统一操作。


小扩展:

绝对路径与相对路径

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

排序 “叁” 之交换排序

目录 1. 基本思想 2.冒泡排序 2.1 基本思想 2.2 代码示例 2.3 冒泡排序的特性总结 3.快速排序 3.1 基本思想 🌵hoare版本 🌵挖坑法 ​编辑 🌵前后指针版本 ​编辑 3.2 快速排序优化 🌻三数取中法选key 3.4 快速排序…

HAL STM32 SSI/SPI方式读取MT6701磁编码器获取角度例程

HAL STM32 SSI/SPI方式读取MT6701磁编码器获取角度例程 📍相关篇《HAL STM32 I2C方式读取MT6701磁编码器获取角度例程》📌当前最新MT6701数据手册:https://www.magntek.com.cn/upload/MT6701_Rev.1.8.pdf📜SSI协议读角度&#xff…

flutter 实现表单的封装包含下拉框和输入框

一、表单封装组件实现效果 //表单组件 Widget buildFormWidget(List<InputModel> formList,{required GlobalKey<FormState> formKey}) {return Form(key: formKey,child: Column(children: formList.map((item) {return Column(crossAxisAlignment: CrossAxisAlig…

4月21日Linux运维用户相关的添加,分组,修改权限等shell脚本开发第一天

4月21日运维用户相关的添加&#xff0c;分组&#xff0c;修改权限等shell脚本开发第一天 第一天主要实现前2个功能 ​ 主要卡在了&#xff1a; 正确的写法如下&#xff0c;注意[]中的空格&#xff0c;要求很严格&#xff01;&#xff01;&#xff01; #!/bin/bash # 先查看已…

LIUNX系统编程:文件系统

目录 1.创建文件的本质 1.1目录本身也是一个文件&#xff0c;也有他自己的inode 1.2LINUX创建文件&#xff0c;一定是在目录中创建文件。 2.重谈文件的增删查改 2.1为什目录没有写权限&#xff0c;就不能新建文件。 2.2.文件的查找 3.路径 3.1挂载 3.2如何理解挂载 1.创…

【QT学习】8.qt事件处理机制,事件过滤器,自定义事件

1.qt事件处理机制 事件处理&#xff1a; 当用户移动鼠标的时候 &#xff0c;创建一个 鼠标移动事件对象 然后把这个对象放到 事件队列里面去&#xff0c;事件管理器 从队列中 取出事件&#xff0c;然后 调用其对应的事件处理函数。 多态机制&#xff1a; &#x…

2023年图灵奖颁发给艾维·维格森(Avi Wigderson),浅谈其计算复杂性理论方面做出的重要贡献

Avi Wigderson是一位以色列计算机科学家&#xff0c;他在计算复杂性理论方面做出了重要的贡献&#xff0c;并对现代计算产生了深远的影响。 Wigderson的主要贡献之一是在证明计算复杂性理论中的基本问题的困难性方面。他证明了许多经典问题的困难性&#xff0c;如图论中的图同构…

Day08React——第八天

useEffect 概念&#xff1a;useEffect 是一个 React Hook 函数&#xff0c;用于在React组件中创建不是由事件引起而是由渲染本身引起的操作&#xff0c;比如发送AJAx请求&#xff0c;更改daom等等 需求&#xff1a;在组件渲染完毕后&#xff0c;立刻从服务器获取频道列表数据…

每天五分钟机器学习:神经网络模型参数的选择

本文重点 在深度学习和人工智能的浪潮中,神经网络作为其中的核心力量,发挥着举足轻重的作用。然而,神经网络的性能并非一蹴而就,而是需要经过精心的参数选择和调优。 神经网络由大量的神经元组成,每个神经元之间通过权重进行连接。这些权重,以及神经元的偏置、激活函数…

Adobe Acrobat PDF 2024

Adobe Acrobat PDF 2024正式发布&#xff01;支持Windows和macOS系统&#xff0c;新界面做了轻微调整。 下载地址 Windows客户端&#xff1a;https://www.123pan.com/s/f43eVv-GKZKd.html macOS客户端&#xff1a;https://www.123pan.com/s/f43eVv-PKZKd.html

idea在controller或者service使用ctrl+alt+b进入方法后,如何返回到 进入前的那一层

idea在controller或者service使用ctrlaltb进入方法后&#xff0c;如何返回到进入方法的最外层 解决方案使用 ctrlalt ← /→← /→ 键盘上的左右键盘

数据结构练习-算法与时间复杂度

----------------------------------------------------------------------------------------------------------------------------- 1. 设n是描述问题规模的非负整数&#xff0c;下列程序段的时间复杂度是( )。 x0;while(n>(x1)*(x1)xx1; A.O(logn) B.O(n^(1/2)) C.O(n)…

【周总结】总结下这周的工作、(hashmap)知识巩固等

总结 这周开发任务已经全部结束&#xff0c;主要是在修改一些 jira 问题 需要反思的是&#xff0c;中间改造接口时&#xff0c;数据库表需要新增一个字段&#xff0c;这个 sql 脚本忘记加到 basetable.sql 脚本里面了&#xff0c;这样如果是新建的项目&#xff0c;创建的时候不…

百万级别mysql性能耗时自测

注&#xff1a;实际情况会因建表语句和服务器的配置造成偏差 测试环境 &#xff1a;8核CPU 16G运行内存 建表语句&#xff1a; CREATE TABLE user (id bigint(11) NOT NULL AUTO_INCREMENT,username varchar(255) COLLATE utf8mb4_bin DEFAULT NULL,birthday varchar(255)…

AppWizard的软件开发GUI的使用记录

前言 这个软件是针对于EmWin6.0以上的这个软件在emWin的基础上又封装了一层,也只提供的API函数.基于消息事件为核心&#xff08;个人理解&#xff09;一些组件的之间的交互可以通过软件界面进行配置,比较方便本次是基于模拟器进行测试记录,观察api 按键和文本之间的关联 通过…

软考141-上午题-【软件工程】-杂题+小结

一、杂题 真题1&#xff1a; 真题2&#xff1a; 真题3&#xff1a; 真题4&#xff1a; 真题5&#xff1a; 真题6&#xff1a; 真题7&#xff1a; 真题8&#xff1a; 真题9&#xff1a; 真题10&#xff1a; 真题11&#xff1a; 真题12&#xff1a; 真题13&#xff1a; 真题14&a…

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

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

05集合-CollectionListSet

Collection体系的特点、使用场景总结 如果希望元素可以重复&#xff0c;又有索引&#xff0c;索引查询要快? 用ArrayList集合, 基于数组的。(用的最多) 如果希望元素可以重复&#xff0c;又有索引&#xff0c;增删首尾操作快? 用LinkedList集合, 基于链表的。 如果希望增…

亚马逊测评自养号策略:手机与PC结合的重要性

亚马逊测评的核心关键技术在于精心培养买家账号&#xff0c;之所以称之为核心关键&#xff0c;原因在于测评下单的首要条件是拥有一个活跃的买家账号。买家账号并非一次性使用&#xff0c;因此&#xff0c;养号过程显得至关重要。然而&#xff0c;在养号的过程中&#xff0c;很…

Python基础03-深入探索Python字典操作

在Python中&#xff0c;字典是一种非常强大和灵活的数据结构&#xff0c;可以存储键值对&#xff0c;并提供了许多方法来操作这些键值对。本文将深入探讨Python字典的各种操作&#xff0c;包括如何创建、修改、合并和查找字典中的元素。 1. 创建字典 要创建一个字典&#xff…