Linux文件系统(一)文件系统基本概念

2023-05-16

文件系统基本概念

  • 1.文件系统概述
  • 2.文件系统的类型
    • (1)ext系列
    • (2)Reiserfs
  • 3. Ubuntu文件系统的结构
    • (1)概述
    • (2)路径
    • (3)主要文件夹及其作用
      • /bin/
      • /sbin/
      • /root/
      • /home/
      • /boot/
      • /mnt/
      • /dev/
      • /etc/
      • /lib/
      • /lost+found/
      • /var/
      • /usr/
      • /media/
      • /proc/
      • /tmp/
      • /initrd/
      • /opt/
      • /srv/
      • /sys/

Linux支持许多种文件系统,从日志型文件系统到集群文件系统和加密文件系统。

在LINUX系统中有一个重要的概念:一切都是文件。 其实这是UNIX哲学的一个体现,而Linux是重写UNIX而来,所以这个概念也就传承了下来。在UNIX系统中,把一切资源都看作是文件,包括硬件设备。UNIX系统把每个硬件都看成是一个文件,通常称为设备文件,这样用户就可以用读写文件的方式实现对硬件的访问。

1.文件系统概述

  文件系统是对一个存储设备上的数据和元数据进行组织的机制,其目的是易于实现数据的查询和存取。不同的操作系统具有不同的文件系统,一个操作系统可能无法兼容所有的文件系统。Linux文件系统接口实现为分层的体系结构,从而将用户接口层、文件系统实现和操作存储设备的驱动程序分开。

  要透彻理解文件系统,需要明确以下几个名词:

  1. 存储介质
    用以存储数据的物理设备,如软盘、硬盘、光盘、磁带、网络存储设备等。
  2. 磁盘的分割
    对于容量较大的存储介质来说,通常是硬盘。在使用时,需要合理地规划分区。常用的Linux磁盘分割工具有fdisk、cfdisk、parted等。此外,还有PQ等第三方工具。
  3. 创建文件系统
    创建新的文件系统是一个过程,通常成为初始化或格式化,整个过程是针对存储介质进行的。一般情况下,操作系统都有自己相应的工具。创建文件系统是在分割磁盘空间的基础上进行的。
  4. 挂载
    在Linux或Unix系统中,没有磁盘分区的逻辑概念(如C盘、D盘等),仍和一个种类的文件系统被创建后,都需要挂载到某个特定的目录才能使用,这个过程相当于激活一个文件系统,使它能够使用。

    Windows的文件系统挂载使用其内部机制完成,用户基本无法探知其过程。而Linux使用mount工具对文件系统进行挂载。挂载文件系统时,需要明确挂载点。在创建文件系统后,操作系统会提示将此文件系统挂载至哪个位置,这个位置就是挂载点,通常选择“/”即根目录。挂载点的实质是一个空的目录。

2.文件系统的类型

文件系统有多种类型,不同操作系统采用不同的文件系统,对其他的文件系统的支持程度也不相同。

Linux的文件系统主要有ext\ext2、ext3、ext4、reiserfs 等

(1)ext系列

文件系统介绍特点优势
ext第一代扩展文件系统,一种文件系统,于1992年4月发表,是为linux核心所做的第一个文件系统。采用Unix文件系统(UFS)的元数据结构,以克服MINIX文件系统性能不佳的问题。它是在linux上,第一个利用虚拟文件系统实现出的文件系统克服MINIX文件系统性能不佳的问题
ext2第二代扩展文件系统是LINUX内核所用的文件系统。它开始由Rémy Card设计,用以代替ext,于1993年1月加入linux核心支持之中。ext2 的经典实现为LINUX内核中的ext2fs文件系统驱动,最大可支持2TB的文件系统,至linux核心2.6版时,扩展到可支持32TB。在ext2文件系统中,文件由inode(包含有文件的所有信息)进行唯一标识。一个文件可能对应多个文件名,只有在所有文件名都被删除后,该文件才会被删除。此外,同一文件在磁盘中存放和被打开时所对应的inode是不同的,并由内核负责同步。文件系统高效稳定
ext3EXT3是第三代扩展文件系统(英语:Third extended filesystem,缩写为ext3),是一个日志文件系统,常用于Linux操作系统。Ext3文件系统是直接从Ext2文件系统发展而来,目前ext3文件系统已经非常稳定可靠。它完全兼容ext2文件系统。用户可以平滑地过渡到一个日志功能健全的文件系统中来。1、高可用性:系统使用了ext3文件系统后,即使在非正常关机后,系统也不需要检查文件系统。 2、数据的完整性:避免了意外宕机对文件系统的破坏。 3、文件系统的速度:因为ext3的日志功能对磁盘的驱动器读写头进行了优化。所以,文件系统的读写性能较之Ext2文件系统并来说,性能并没有降低。 4、数据转换 :“由ext2文件系统转换成ext3文件系统非常容易。 5、多种日志模式
ext4EXT4是第四代扩展文件系统(英语:Fourth extended filesystem,缩写为 ext4)是Linux系统下的日志文件系统,是ext3文件系统的后继版本。Ext4是由Ext3的维护者Theodore Tso领导的开发团队实现的,并引入到Linux2.6.19内核中。Ext4是Ext3的改进版,修改了Ext3中部分重要的数据结构,而不仅仅像Ext3对Ext2那样,只是增加了一个日志功能而已。Ext4可以提供更佳的性能和可靠性,还有更为丰富的功能1.与Ext3兼容:执行若干条命令,就能从Ext3在线迁移到Ext4,而无须重新格式化磁盘或重新安装系统。 2.更大的文件系统和更大的文件:较之Ext3目前所支持的最大16TB文件系统和最大2TB文件,Ext4分别支持1EB(1,048,576TB,1EB=1024PB,1PB=1024TB)的文件系统,以及16TB 的文件。 3.无限数量的子目录:Ext3目前只支持32,000个子目录,而Ext4支持无限数量的子目录。 4.Extents:Ext4引入了现代文件系统中流行的extents概念,每个 extent 为一组连续的数据块,相比Ext3采用间接块映射,提高了不少效率。 5.多块分配:Ext4 的多块分配器“multiblock allocator”(mballoc) 支持一次调用分配多个数据块。 *6.延迟分配 7.快速 fsck 8.日志校验 9.“无日志”(No Journaling)模式 10.在线碎片整理 11.inode 相关特性:较之Ext3默认的inode大小128字节,ext4默认inode大小为256字节

(这里参考了:参考)

(2)Reiserfs

reiserfs文件系统是最早用于Linux的日志文件系统之一。支持大文件,支持反删除。

3. Ubuntu文件系统的结构

(1)概述

Ubuntu 16.04使用的文件系统是ext3,而Ubuntu18.04已经采用ext4文件系统,可以更加轻松地挂载windows系统的文件,实现资源共享。

与其他linux发行版本类似,Ubuntu支持长文件名和目录名。文件名的最大长度是255个字符(characters),文件路径的最大长度是4096字符(characters), 即可以包含16级的最大文件长度的路径。

 1 #ifndef _LINUX_LIMITS_H
 2 #define _LINUX_LIMITS_H
 3 
 4 #define NR_OPEN            1024
 5 
 6 #define NGROUPS_MAX    65536    /* supplemental group IDs are available */
 7 #define ARG_MAX       131072    /* # bytes of args + environ for exec() */
 8 #define LINK_MAX         127    /* # links a file may have */
 9 #define MAX_CANON        255    /* size of the canonical input queue */
10 #define MAX_INPUT        255    /* size of the type-ahead buffer */
11 #define NAME_MAX         255    /* # 文件名最大字符数 */
12 #define PATH_MAX        4096    /* # 相对路径名最大字符数 */
13 #define PIPE_BUF        4096    /* # bytes in atomic write to a pipe */
14 #define XATTR_NAME_MAX   255    /* # chars in an extended attribute name */
15 #define XATTR_SIZE_MAX 65536    /* size of an extended attribute value (64k) */
16 #define XATTR_LIST_MAX 65536    /* size of extended attribute namelist (64k) */
17 
18 #define RTSIG_MAX      32
19 
20 #endif 

字符指的是ASCII字符,如果是汉字或者其他语言,则需要视编码而定

(2)路径

“/”表示系统的顶级目录,即根目录。系统中的所有数据文件以及硬件资源都是以文件或目录的形式出现,并并且挂载于根目录之下。

从根目录开始的路径成为绝对路径,如“/usr/bin/vim”,不以“/”开头的路径则为相对路径,表示文件与当前目录的相对关系。

(3)主要文件夹及其作用

以我虚拟机里面的Ubuntu16.04系统为例,这里显示了系统根目录下所有的文件及文件夹信息。

在这里插入图片描述

各个文件夹的基本功能不同,它们存储了不同类型的文件,具体如下

/bin/

存储二进制可执行文件。

/sbin/

许多系统命令的存储位置。

/root/

根用户的主目录。

/home/

普通用户的主目录,在此目录下,每个用户拥有一个以用户名命名的文件夹。

/boot/

存放Ubuntu内核和系统启动文件。

/mnt/

通常包括系统引导后被挂载的文件系统的挂载点。

/dev/

存储设备文件,包括计算机的所有外部设备,硬盘、鼠标、键盘等。

/etc/

存放系统管理所需的配置文件和目录。

/lib/

存放各种程序所需要的的共享库文件,这些库文件主要为/bin/和/sbin/目录下的命令文件服务。而/usr/bin/存放更多用于普通用户的库文件。

/lost+found/

一般为空,一般是隐藏文件夹。系统非法关机后,会存放一些相关文件。

/var/

存放许多不断变化的文件,例如日志文件。

/usr/

包括u系统用户相关的文件和目录,如应用程序以及支持它们的库文件。

/media/

存放Ubuntu系统自动挂载的设备文件,比如我插一个U盘:
在这里插入图片描述

/proc/

一个虚拟目录,不实际存储在磁盘上。它是内存的映射,包括系统信息和进程信息。

/tmp/

存储用户和系统的临时文件,为任何用户都提供读写权限。

/initrd/

用来在计算机启动时挂载initrd.img映像文件的目录,以及载入所需设备模块的目录。

/opt/

作为可选文件和程序的存放目录,主要被第三方开发者用来建议安装和卸载它们的软件。比如我安装的ROS就在此目录之下。

/srv/

存储系统提供的服务数据。

/sys/

系统设备和文件层次结构,并向用户程序提供详细的内核数据信息。

在Linux环境下,只要是可执行文件并且具有可执行权限就可以执行,而不敢文件名的后缀是什么。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Linux文件系统(一)文件系统基本概念 的相关文章

  • 如何在 Linux 上调用 Python 中的内联机器代码?

    我正在尝试从 Linux 上的纯 Python 代码调用内联机器代码 为此 我将代码嵌入到字节文字中 code b x55 x89 xe5 x5d xc3 然后打电话mprotect http www kernel org doc man
  • 当模式在范围内时使用 sed 打印范围?

    我有一个充满查询的日志文件 我只想查看有错误的查询 日志条目类似于 path to file executing query QUERY SIZE ROWS MSG DURATION 我想打印所有这些东西 但只有当MSG 包含一些有趣的内容
  • 使用 Shell 脚本提供密码

    我已将客户端和服务器设置为无密码登录 就像无密码登录一样 通过将服务器的 RSA 密钥复制到所有客户端的 root ssh id rsa pub 来实现 但这是我手动完成的 我喜欢使用 shell 脚本自动执行此过程 并通过脚本向计算机提供
  • 每当调用 malloc/free 时输出到 stderr

    使用 Linux GCC C 每当调用 malloc free new delete 时 我想向 stderr 记录一些内容 我试图了解库的内存分配 因此我想在运行单元测试时生成此输出 我使用 valgrind 进行内存泄漏检测 但我找不到
  • bash 或 sh 中的“=”和“==”运算符有什么区别

    我意识到 和 运算符都可以在 if 语句中使用 例如 var some string if var some string then doing something fi if var some string then doing some
  • 在命令行上解密使用 PHP openssl_encrypt 制作的文件

    我有一个要加密的字符串 encryptThis Super Secret Text echo openssl encrypt encryptThis aes 128 cbc 1234 FALSE F68A9A229A516752 然后我通过
  • bash 别名中允许使用哪些字符[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我最近添加了 alias cd alias cd alias cd 到我的 bash aliases 文件 玩弄这个 我注意到在别名时 被
  • 模拟用户输入以使用不同参数多次调用脚本

    我必须使用提供的脚本 该脚本在脚本运行时接受用户输入而不是参数 我无法解决这个问题 脚本的一个例子是 bin bash echo param one read one doSomething echo param two read two
  • 从汇编程序获取命令行参数

    通读 专业汇编语言书籍 似乎它提供了用于读取命令行参数的错误代码 我纠正了一点 现在它从段错误变成了读取参数计数 然后是段错误 这是完整的代码 data output1 asciz There are d params n output2
  • C中的内存使用问题

    请帮忙 操作系统 Linux 其中 sleep 1000 中 此时 top 显示Linux任务 给我写了7 7 MEM使用 valgrind 未发现内存泄漏 我明白 写得正确 所有 malloc 结果都是 NULL 但是为什么这次 睡眠 我
  • 将一个文件写入.c中的另一个文件

    我有一个读取文件然后将其内容复制到另一个文件的代码 我需要使其仅复制每 20 个符号 然后跳过 10 个符号 然后再次跳过 20 个符号 依此类推 我必须使用 lseek 函数 但我不知道如何将所有这些放入循环中来执行此操作 main ar
  • 不同GIT版本的GIT合并结果不同

    在不同的 GIT 版本上运行 merge 命令我们得到不同的结果 命令是 git merge no ff origin master codeline Results 版本2 1 4 gt 合并成功 版本1 7 1 gt 同一提交上的同一合
  • 在 Linux 2.6.21 (glibc 2.3.5) 上进行 ARP 和反向 ARP

    我需要在任意 IP 网络上存储对第三方设备的持久引用 其中设备的 IP 地址可能是静态的或由 DHCP 随机分配 我不控制网络上的设备 也不能依赖 DNS 和其他现有的或与设备一起使用的临时网络协议 所以我被指示使用硬件地址和 ARP 进行
  • 操作系统崩溃的常见原因[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我有兴趣了解 操作系统崩溃 不限于Windows崩溃 最常见的技术原因 从操作系统编程的角度 有哪些 我正在寻找一个不像 打开太多应用
  • 如何使用sprof?

    请举例说明 从邮件中找到here http sources redhat com ml libc alpha 2003 07 msg00029 html and here http sourceware org ml binutils 20
  • 是否有我可以运行的操作系统命令来确定是否在基于 Xen 的虚拟机内运行

    我可以在基于 Xen 的虚拟机中运行一个操作系统命令来告诉我它是一个虚拟机而不是物理机 我听说内核对此有一些自我意识智能 例如就像 ps 输出中的额外列之类的 我知道 vmstat 提供了 st 列 但我在运行 Linux 内核 2 6 1
  • 如何使用 tmuxinator 在 tmux 中拆分水平窗格内的两个垂直窗格

    目前我的 tmuxinator yml 文件中有这个 windows editor layout main horizontal panes vim server rails s 这给了我两个窗口 一个用于编辑器 另一个用于服务器 在编辑器
  • Linux下的C#,Process.Start()异常“没有这样的文件或目录”

    我在使用 Process 类调用程序来启动程序时遇到问题 可执行文件的层次结构位于 bin 目录下 而当前工作目录需要位于 lib 目录下 project bin a out this is what I need to call lib
  • Mono 和 WebRequest 速度 - 测试

    在 mono 4 6 2 linux 中 我注意到 wget 下载文件的速度与webclient DownloadString 所以我做了一个小测试来调查 为什么 wget 明显比 C 快 根据我自己的实验 使用 wget 下载 手动读取文
  • Bash 中 $() 和 () 之间的区别

    当我打字时ls l echo file 支架的输出 这只是简单的回显 被获取并传递到外部ls l命令 就等于简单的ls l file 当我打字时ls l echo file 我们有错误 因为不能嵌套 内部外部命令 有人可以帮助我理解之间的区

随机推荐

  • Linux进程管理(一) Linux进程的基本概念

    Linux进程的基本概念 最后更新时间2020 04 09 Ubuntu linux的所有任务都是在操作系统内核的调度下由CPU执行 xff0c 很多时候 xff0c Linux是将任务和进程的概念合在一起 进程的标准定义 xff1a 进程
  • Ubuntu wifi适配器未找到

    先蓝牙共享手机网络或在usb共享打开 软件与更新 xff0c 进入 附加驱动 选项卡 xff0c 如果网络正常 xff0c 且源设置正常 xff0c 一般能搜到对应的无线网卡驱动 xff0c 安装之后再重启电脑就可以了 要注意你的bois是
  • ROS简介

    1 什么是 ROS 机器人是一个系统工程 xff0c 它涉及机械 电子 控制 通信 软件等诸多学科 以前 xff0c 开发一个机器人需要设计机械 画电路板 写驱动程序 设计通信架构 组装集成 调试 以及编写各种感知决策和控制算法 xff0c
  • Linux用户及权限管理(一)用户和组

    更新时间2020 04 09 1 ubuntu 用户系统概述 ubuntu linux 是一个多用户多任务的分时操作系统 任何一个要使用系统资源的用户 xff0c 都必须先要向系统管理员申请一个账号 xff0c 然后以这个账号的身份进入系统
  • Linux用户及权限管理(二)用户和组管理命令

    更新时间2020 05 12 在第一节中将了图形界面的用户管理 xff0c 本节讲解与用户和组管理相关的shell命令 1 配置文件 第一节中讲到 etc passwd文件 xff0c 它记录了当前操作系统中所有用户的基本信息 xff1a
  • Linux用户及权限管理(三)权限管理

    更新时间2020 05 13 在使用windows的时候关于权限管理的操作不多 xff0c 大家遇到比较多的应该是 xff1a 使用管理员身份才能正常运行某个程序 xff0c 或者删除某个文件 xff1b hosts文件无法修改 xff0c
  • C# 快速入门笔记

    最后更新时间2020 04 10 C 快速入门精简笔记 Chapter 0 前言Chapter 1 基础1 1 简介1 2 环境1 3 程序结构1 4 基本语法1 5 数据类型1 5 1 value types1 5 2 Reference
  • MATLAB的一点小tips

    更新时间2020 04 15 目录 1 matlab运算符2 matlab特殊变量和常量3 matlab保存工作区4 who 和whos5 长任务6 format 1 matlab运算符 运算符目的 43 加 xff1b 加法运算符 减 x
  • MATLAB矩阵和数组相关函数解析

    更新时间2020 04 15 未完结 目录 1 总表2 简单示例2 1 zeros2 2 ones2 3 rand2 4 true and false2 5 eye 1 总表 点击表中函数名可以跳转至官方网站查看精确英文解析 xff0c 也
  • HTTPS、SSL、TLS三者之间的联系和区别

    SSL Secure Socket Layer 安全套接层 是基于HTTPS下的一个协议加密层 xff0c 最初是由网景公司 xff08 Netscape xff09 研发 xff0c 后被IETF xff08 The Internet E
  • Word论文公式的两个格式问题

    更新时间2020 04 16 1 公式居中 xff0c 编号右对齐 solution xff1a 编写一个样式 xff0c 一劳永逸 你要居中 xff0c 你要右对齐 xff0c 先要有个参考 即你居中的 中 是哪里 xff0c 右对齐的
  • HTML- markdown版 江城子·乙卯正月二十日夜记梦

    江城子 乙卯正月二十日夜记梦 宋 苏轼 十年生死两茫茫 xff0c 不思量 xff0c 自难忘 千里孤坟 xff0c 无处话凄凉 纵使相逢应不识 xff0c 尘满面 xff0c 鬓如霜 夜来幽梦忽还乡 xff0c 小轩窗 xff0c 正梳妆
  • Keil μvision已停止工作?

    今天以及几周前我都遇到了这个问题 xff0c 提示消息都是一样的 xff0c Keil vision已停止工作 xff0c 接着keil就自己关闭了 我两次的原因不一样 1 第一次 用的是F407的板子 xff0c 排查了半天错误 xff0
  • 负数取余,取余和取模

    1 圆整 就是把一个小数或者说浮点数按某种规律近似为一个它左边或右边最近的一个整数 比如 xff1a 向负无穷圆整 span class token number 1 8 span span class token operator gt
  • [joint_state_publisher-3] process has died

    我是ROS melodic xff0c 其他版本应该一样的解决方法 去掉urdf xacro launch文件中的中文注释 xff0c 或者改为英文 xff0c 而且第一行不能有中文
  • Ubuntu 18.04安装N卡驱动

    1 原来 xff0c 是英特尔的集显 2 添加N卡驱动 检查是否有GPU显卡 xff0c 我电脑一张集显 xff0c 一张独显 xff0c 很清楚 如果不清楚的可以用 lspci grep i nvidia查看 xff1a linux202
  • ROS Melodic Arbotix报错

    ImportError dynamic module does not define module export function PyInit tf2 xff09 这是我做的内容 xff1a 1 创建一个四轮小车URDF模型 xff0c
  • Matlab画线性规划可行域

    线性规划什么的应该是运筹学的内容 xff0c 虽然数学建模比赛不会考这个 xff0c 但大家日常学习还是会遇到相关的问题 除了用单纯型法 xff0c 也可以用传统的画图法 xff0c 画出可行域 xff0c 再寻求可行解 可行域一般手画更快
  • 浅谈论文目录制作

    先来看咱们CSDN的目录 Markdown语句 xff1a 一级标题 二级标题 三级标题 四级标题 五级标题 六级标题 效果如下 一级标题 二级标题 三级标题 四级标题 五级标题 六级标题 我们论文中的目录道理也是一样 xff0c 无非就是
  • Linux文件系统(一)文件系统基本概念

    文件系统基本概念 1 文件系统概述2 文件系统的类型 xff08 1 xff09 ext系列 xff08 2 xff09 Reiserfs 3 Ubuntu文件系统的结构 xff08 1 xff09 概述 xff08 2 xff09 路径