跳到主要内容

Linux文件系统

Ubuntu的文件

文件是 Linux 操作系统处理信息的基本单位,所有软件都以文件形式进行组织(一切皆文件)。

Linux 下的可执行程序是一个二进制文件,程序启动时候需要加载一些配置文件,程序运行时会产生一些日志文件或者中间文件,这些文件是文本文件,如果程序产生的日志需要打印到控制台上,需要用到标准输出文件,即stdout文件。Visual

各程序之间进行数据交互,例如一个程序的输出是另一个程序的输入,需要用到管道文件。Visual

不同的程序之间通信利用 socket 进行通信,在 socket 编程的时候就需要操作** socket 文件**。

运行中的程序可能需要访问一些硬件设备,每个硬件设备在 Linux 上也是映射成了 设备文件。Visual

文件本身需要有地方存储,存储文件的对象叫文件夹(即目录),目录 自身也是一种文件。

注意事项:

  • 单一文件或目录的最大容许文件名为 255 个字符
  • 同类文件应使用同样的后缀或扩展名
  • 包含完整路径名称及根目录(/)的完整文件名最长为 4096个字符
  • 文件名严格区分大小写V
  • 文件名可以包含空格等特殊字符,但必须使用引号
  • 不可以包含“/” 字符,还应避免特殊字符(通配符):
* ?><;&![]|\'"`(){}

Linux 文件无论是一个程序、一个文档、一个数据库,或者是一个目录,操作系统都会赋予文件相同的结构,具体包括以下两部分:

  • 索引节点:又称1节点。在文件系统结构中,包含有关相应文件信息的记录,这些信息包括文件权限、文件所有者、文件大小等
  • 数据:文件的实际内容,可以是空的,也可以非常大,并且有自己的结构

Linux 文件分为以下4种类型:

  1. 普通文件
  2. 目录文件
  3. 设备文件
  4. 链接文件

普通文件

普通文件也称为常规文件,包含各种长度的字符串。内核对这些文件没有进行结构化,只是作为有序的字符序列把它提交给应用程序,由应用程序自己组织和解释这些数据

普通文件包括文本文件、数据文件和可执行的二进制程序等

目录文件

目录文件是一种特殊文件,利用它可以构成文件系统的分层树形结构。目录文件也包含数据,但与普通文件不同的是内核对这些数据加以结构化,即它是由成对的“索引节点号/文件名”构成的列表

索引节点号是检索索引节点表的下标,索引节点中存有文件的状态信息。文件名是给一个文件分配的文本形式的字符串,用来标识该文件。在一个指定的目录中,任何两个文件都不能有重复的名字

每个目录文件中至少包括两个条目:“”表示上一级目录,也可表示为“./”;“”表示该目录本身,也可表示为“./”;前者为相对路径的方式,后者为绝对路径的方法。

设备文件

设备文件是一种特殊文件,除了存放在文件索引1节点中的信息外,它们不包含任何数据。 系统利用它们来标识各个设备驱动器,内核使用它们与硬件设备通信。设备文件又可分为两种类型:字符设备文件和块设备文件

Linux将设备文件置于/dev目录下,系统中的每个设备在该目录下有一个对应的设备文件,并有一些命名约定

串口 COM1的文件名为 /dev/ttys0,光驱表示为 /dev/cdrom,软驱表示为 /dev/fd0

/dev/sda 对应第一个 SCSI 硬盘(或 SATA 硬盘),/dev/sda5 对应第一个SCSI硬盘(或SATA硬盘)第1个逻辑分区

Linux 还提供伪设备(实际没有的)文件,如/dev/null、/dev/zero

链接文件

链接文件是一种特殊文件,它们存放的数据是文件系统中通向文件的路径。当使用链接文件时,内核自动地访问所指向的文件路径

链接文件有两种,分别是 符号链接( Symbolic Link)和 硬链接( Hard Link)

符号链接文件类似于 Windows 系统中的快捷方式,其内容是指向原文件的路径。原文件删除后符号链接失效,删除符号链接文件并不影响源文件

硬链接是对原文件建立的别名,可认为是一个文件拥有两个文件名。建立硬链接文件后,即使删除源文件,硬链接也会保留源文件的所有信息。与符号链接不同,硬链接和源文件必须在同一个文件系统上,而且不允许链接至目录

Ubuntu 目录

目录是包含许多文件项目的一类特殊文件,每个文件都登记在一个或多个目录中。

Linux 使用树形目录结构来分级、分层组织管理文件,最上层是根目录,用”/”表示

根目录是整个系统最重要的一个目录,所有的目录都是由根目录”/”衍生出来,一般将这种目录配置方式称为目录树(Directory Tree)

Lesson2_20240903085203

目录树的特点:

  • 目录树的起始点为根目录(/)
  • 每一个目录不仅能使用本地分区的文件系统,也可以使用网络上的文件系统
  • 每一个文件在目录树中的文件名(包含完整路径)是独一无二的

路径指定一个文件在分层的树形结构(文件系统)中的位置,可采用绝对路径,也可采用相对路径。绝对路径为由根目录(/)开始的文件名或目录名称,例如/home/zhongxp/.bashrc。相对路径为相对于当前路径的文件名写法,例如../../home/zhongxp/等。

FHS

Directory type

Linux的开发人员和用户较多,制定固定的目录规划有助于对系统文件和不同的用户文件进行统一管理,为此出台文件系统层次标准(Filesystem Hierarchy Standard),简称FHS

  • FHS 是大多数 Linux 发行版采用的文件组织形式,FHS 定义了系统中每个区域的用途、所需要的最小 构成文件和目录等。同时,FHS 还给出了例外情况处理方案
  • FHS定义了两层规范:
  • 第1层是根目录下面的各个目录应该放什么文件
  • 第2层则针对 /usr 及 /var 这两个目录的子目录应该放什么文件
  • FHS仅定义出最上层(/)及子层(/usr、/var)的目录内容应该要放置的文件,在其他子目录层级内可以自行配置

FHS 依据文件系统使用的频繁与否以及是否允许用户随意改动,将目录定义为四种交互作用的形态:

  • 可分享的:可以分享给其他系统挂载使用的目录,包括执行文件与用户的邮件等数据,是能够分享给网络上其他主机挂载用的目录
  • 不可分享的:自己机器上面运作的装置文件或者是与程序有关的 socket 文件等,由于仅与自身机器有关,所不适合分享给其他主机
  • 不可变的:不经常变动的数据,例如函式库、文件说明文件、系统管理员所管理的主机服务配置文件等
  • 可变动的:经常改变的数据,例如登录文件、一般用户可自行接收的新闻等

Specifications

第一层规范:根目录下面的各个目录应该放什么文件

Lesson2_20240903091503

第二层规范:/usr 和 /var 下的各个目录应该放什么文件

Lesson2_20240903091712

/bin /boot /cdrom /dev /etc /home /lib /lib64 /media /mnt /opt /proc /root /run /sbin /snap /srv /sys /tmp /usr /var

  • /bin:存放用于系统管理维护的基本命令文件
  • /boot:存放用于系统启动的内核文件和引导装载程序文件
  • /cdrom:光盘目录,如果插入光盘会出现光盘内容
  • /dev:存放设备文件,设备驱动文件等,设备包括鼠标、键盘、硬盘等
  • /etc:存放系统配置文件,如网络配置、设备配置、X Window系统配置等
  • /home:各个用户的家目录,其中的子目录名称即为各用户名
  • /lib:存放动态连接共享库
  • /media:为光盘、软盘等设备提供的默认挂载点
  • /mnt:为某些设备提供的默认挂载点
  • /opt:第三方软件的程序文件,安装程序的引导文件等
  • /proc:存放的是系统信息和进程信息,记录系统运行的绝大部分性能信息和各种参数信息> /root:root用户家目录,不要将其与根目录混淆
  • /run:保存从系统诞生到当前的关于系统信息的文件
  • /sbin:存放系统管理员或者root用户使用的命令文件
  • /snap:snap应用框架的程序文件
  • /srv:一般是系统存储的服务相关数据
  • /sys:系统中的设备和文件层次结构。文件夹中存储系统信息,用户需要的信息也从中调用
  • /tmp:存放系统或者用户的临时文件的目录
  • /usr:存放与系统用户直接有关的文件和目录
  • /var:存放系统一般运行时要改变的数据
  • /initrd.img:临时引导系统到内核文件的镜像文件,文件是系统启动时用到的一个“最小系统”
  • /vmlinuz:是可引导的、压缩的内核,属于一个可压缩的软链接内核