文件系统

ppgo8 于 2022-12-02 发布

文件系统

概述

​ 除了计算功能,最重要的功能就是存储和组织功能。文件系统是一套实现了存储、分级组织、访问和获取等操作的抽象数据类型。

常见的文件系统:

目录与路径

​ 目录可以想象的比喻为文件夹。目录可以存放文件和其他目录。通过目录构成的层次,达到组织的存储文件的目的。文件系统中的每个目录或文件都有一个唯一的确定的位置,找到该位置所历经的线路成为路径。

文件系统层次结构标准


​ Linux发行的版本非常多,但是几乎所有发行版本的目录配置都是相似,这得益于Linux目录配置标准(Filesystem Hierarchy Standard,HFS)的制定。

​ FHS最早与1993年制定,名字是FSSTND,目的是针对Linux操作系统,重整目录结构和文件,规范每个特定目录下应该存放的数据。经过多年的发展,目前需要类UNIX操作系统也是用FHS作为其目录标准结构,同时标准的名称修改为“文件系统层次结构标准”。FHS 3.0标准制定与2015年,大体内容如下表格。

目录 描述
/ 第一层次结构的根,整个文件系统层次结构的根目录
/bin 需要在单用户模式可用的必要命令(可执行文件)
/boot 开机引导文件,包含Linux内核文件、开机菜单与开机所需配置文件等
/dev 硬件设备或接口设备的抽象文件,访问该目录下的文件就是访问相应的设备
/etx 系统主要的配置文件存在该目录中
/home 用户的主目录,包含保存的文件、个人设置等
/lib /bin和/sbin中的命令会调用的函数库
/media 可移除媒体(如CD-ROM)的挂载点
/mnt 临时挂在的文件系统
/opt 第三方应用程序放置的目录
/proc 虚拟文件系统,将内核与进程状态归档为文本文件
/root 超级用户的根目录
/sbin 必要的二进制文件
/srv 站点的具体数据,由系统提供
/tmp 临时文件,在系统重启时目录中文件不会被保留
/usr 用于存储只读用户数据的第二层次;包含绝大多数的用户工具和应用程序
/var 在正常运行的系统中其内容不断变化的文件,如日志、脱机文件和临时电子邮件文件
/run 自最后一次启动以来运行中的系统信息

​ 上述只是部分标准,具体内容可以参照Linux基金会Wiki网站。FHS标准北非是强制标准,因此在不同的发行版本中具体的目录结构可能会与FHS标准略有不同。

目录树


​ 在Linux操作系统中,所有的文件与目录都是从根目录/开始的,通过目录一级一级地分治,形成树枝状,称为目录树。

目录树具有以下几个特点:

在Windows操作系统中也有目录树的概念,不同的是,Windows根据硬盘分区数量会有多个根,如‘’‘C:\’“D:\”,而Linux只有一个根

特殊目录符号


为了方便地在各目录中进行跳转,Linux操作系统已用了一些特殊的目录。

目录 释义
. 代表当前目录
.. 代表上层目录
- 代表上一个工作目录
~ 代表当前登录账号的主目录
~ account 代表account账号的主目录(需要把account修改为具体的用户名)

相对路径和绝对路径


​ 根目录是所有目录的起点,任何一个文件或目录都以根目录起存在一个唯一的路径,该路径成为绝对路径绝对路径是从根目录开始的。

​ 与绝对路径相对的是相对路径,相对路径不是从根目录开始的,而是以当前的工作目录为参照,从当前目录到达所需目录或文件所经过的线路称为相对路径,相对路径的开头一般是特殊目录符号

​ 绝对路径和相对路径的表示及使用方法如下所示。

image-20221202124143807

PATH环境变量


通常在当前工作目录下的程序(命令)可以直接在bash中执行,其他目录的程序需要输入完整的路径才可运行,但是像ls命令,进入是在/bin目录下,依然可以在任意目录中执行,其原因就是PATH环境变量中已经设置的/bin目录

​ PATH环境变量中保存了一些目录的路径,执行命令时,回先在当前工作目录中查找该命令是否存在,如果存在即执行,如果不存在,会在PATH环境变量定义的目录中查找该命令,并执行找到的第一个相匹配的命令。

目录管理

​ 虽然文件系统都能确保文件内容的完整性,但是目录与文件的管理、组织依然需要用户来进行操作,本节内容就将介绍Linux操作系统如何在终端进行目录管理。

显示当前工作目录


​ 进行目录管理前,首先需要知道当前所处目录(当前工作目录),Linux中提供了pwd(print working directory)命令来执行该操作。

image-20221202130103092

查看目录与文件


​ Linux操作系统提供了强大的ls命令来显示某个路径下的文件和目录,其常用选项如下

-a: 显示当前目录下所有文件,包括隐藏文件和'.'','..'两个特殊目录
-A: 与-a相比不显示'.'','..'两个特殊目录
-h: 以方便阅读的形式显示文件单位
-i: 显示文件的节点信息
-l: 显示文件的详细信息
-R: 递归显示目录及其子目录的内容
-S: 按文件大小从小到大排序显示
-t: 按修改时间顺序排列,最新的在前边

常用目录操作


​ 在计算机的使用过程中,不可避免要进行新建、复制、移动(剪切)、删除等操作,通常通过鼠标右键快捷菜单中可以快速执行这几种操作。在Linux终端中,同样有相对应的命令来进行这些操作,而且功能更加强大。

文件管理

​ Linux操作系统秉承着一切且文件的哲学思想,将目录、硬件设备、网络接口等全部抽象成了文件,所有的任务都由专门的文件负责。这导致在Linux操作系统中,文件种类非常多,对文件的操作的过程也不同。

文件类型


名称 符号 描述
普通文件 - 按照文件内容,大致可以分为:纯文本文档、二进制文件、数据格式文件
目录 d directory文件夹
链接文件 l link快捷方式
块设备 b block硬盘、U盘、SD卡等设备
字符设备 c character一些串口端口的接口设备,如鼠标、键盘
套接字 s sockets数据接口文件、常用在网络上的数据连接
管道 p pipe主要目的在于解决多个程序同时访问一个文件造成的错误问题,是一种先进先出的队列

管道


​ 管道是一系列将标准输入输出连接起来的进程,其中上一个进程的输出被直接作为下一个进程的输入。Linux系统中有匿名管道命名管道两种管道。匿名管道在终端环境下经常被用来连接两个或多个命令,实现一些组合功能,匿名管道用符号|表示,将前一个命令的输出导出作为下一个命令的输入参数

新建文件


​ 在计算机使用过程中,需要创建很多文件,用来保存运行日志、用户数据等。在Windows环境下一般采用右键快捷菜单创建新文件即可,在Linux中终端中,提供了多种创建新文件的方式,下面简单介绍几种常用的创建新文件的方法。

复制、移动、删除文件


​ 前面已经演示了如何使用cp、mv、rm命令对目录进行复制、移动、删除,本节将介绍如何使用这些命令来对文件进行操作。


​ 随着计算机使用的增多,计算机中文件的数量越来越多,很多时候需要查找功能才能找到想要的文件,Linux提供了多个使用的命令来查找文件,比如which、locate、find等。

显示文件内容

​ 在Linux操作系统中,与用户关系较密切的文件大多是文本文件,比如配置文件、日志文件、代码文件等,如何查看这些文件使用户必须掌握的一项技能。查看文件主要使用的是cat命令,还有一切其他命令能够实现不同的查看模式,例如more、less、grep。

cat命令


​ cat命令的作用是将两个或两个以上的文件内容拼接起来并输出到终端,配合上文的重定向操作符可以实现多个文件的合并。当cat命令只包含一个文件时,就实现了将这一个文件内容输出到终端后窗口。

more命令


​ 接下以.bashrc文件为例,演示当文件内容较长时,如何分页显示。.bashrc文件的绝对路径是/home/用户名/.bashrc,该文件保存在用户对应的home目录中,主要存放用户环境变量设定、个性化设定、命令别名等内容,只对相应的用户起作用,对别的用户没有影响。

​ 当显示较长的文件时,cat命令只会显示最后一部分内容,如果想查看上边输出的那部分内容,可以使用more命令来进行内容分页,之后采用翻页的方式查看完整的内容。more命令使用方法如如下。

-d : 输出内容时同时显示常用的快捷键
-f : 计算逻辑行数,而非屏幕行数
-l : 屏蔽换页后的暂停
-c : 不滚动,显示文本并清理行末
-p : 不滚动,清理屏幕并显示文本
-s : 将多行空行压缩为一行
-u : 屏蔽下划线
-<数字> : 指定每屏显示的行数
+<数字> : 从指定行开始显示文件
+/<字符串> : 从匹配搜索字符串的位置开始显示文件

image-20221202204228801

进入more环境后,可以通过以下快捷键进行操作

空格键 : 下一屏
B键   : 上一屏
回车键 : 下一行
/     : 斜线后输入字符串,可以在文本中查找下一个匹配的字符串位置并显示
q     : 退出more命令

less命令


​ 相对于cat命令,more命令已经足够强大,但是其操作逻辑不是特别的人性化,比如对于管道文件等只能查看之后的内容,无法查看已经看过的内容。与more相比,less的使用更加弹性化,功能也更加强大。对于大文件,less不需要将文件内容一次性读入到内存中,所以打开更快、操作更流畅。less常用快捷键和more相同。

less .bashrc

head、tail命令


​ 如果指向查看文件的前几行或者后几行内容,利用以上几个命令输出全部内容很显然是非常麻烦的,此时可以使用head/tail命令来输出前几行或者后几行内容。

head 命令常用选项
-n : 指定输出的行数
-c : 指定输出的字符数

tail命令常用选项

-n : 指定输出的行数
-f : 持续监测文件内容,如果目标文件有新的输入,则将新增加的内容输出

grep命令


​ 前面的内容介绍了一些文件显示方法,但是很多时候并需要显示所有内容,而需要显示指定的内容,Linux同样提供了一些强大的工具来实现这些需求。

​ grep命令是一个非常强大的文本处理命令,主要功能是根据关键词对文本内容进行筛选,查找匹配指定关键词的行并输出,grep命令提供了很多常用选项

-a: 不要忽略二进制数据
-b: 除显示查找到的行号外,还显示匹配字符所在的整个文档的位置
-c: 显示匹配关键词的内容的行数合计
-e: 指定关键词,使用该选项可以指定讴歌关键词
-E: 指定正则表达式
-i: 查找是不区分大小写
-n: 显示匹配行的行号
-w: 显示和关键词完全匹配的内容
-o: 只输出文件中匹配到的内容

文件压缩与备份

​ 当文件需要传输、发送邮件的时候,经常需要将多个文件压缩为一个压缩包,然后再践行传输,这样不仅数量减少、大小也会变小,方便文件的传输和存储。Linux平台上提供了许多命令来完成压缩、解压的操作。

文件压缩原理


​ 文件压缩技术通过一定的算法,将文件传输内容进行可恢复的压缩,多个文档要在一起还可以起到归档作用。也可以将一个大文件在压缩时分割成一定大小的压缩包,解压时再合并为一个压缩包进行解压,方便刻录光盘等。

​ 文件压缩大体可以分为有损压缩无损压缩,算法有很多。在此不介绍了。

gzip压缩命令


​ gzip是GUN计划的一部分,一般认为是GUN zip的缩写。gzip是一个应用较广泛的命令,可以实现文件的压缩与解压缩,常用的命令选项有如下几个。

-c : 将压缩的内容输出到屏幕上,源文件保持不变,可以通过重定向处理输出的内容
-d : 解压缩文件
-l : 输出压缩包内存存储的原始文件信息,如解压缩后的文件名、压缩率等
-# : 指定压缩等级,可以分为1~9,压缩率一次增大,速度依次减慢,默认压缩等级为6

bzip2压缩命令


​ bzip2在使用方法上与gzip基本一致,命令选项也基本一致,此处不再一一列出。示例代码如下所示:

image-20221202213052839

tar归档命令


​ 前面介绍的gzip和bzip2两个命令只能对单文件进行压缩,并不能将多个文件压缩为一个压缩包。这具有很大局限性。tar命令可以将多个文件合并为一个压缩包,但是该命令没有压缩功能,需要与gzip和bizp2一同使用来实现文件的压缩和打包。tar命令常用选项如下

-c: 新建打包文件
-t: 查看打包文件中包含哪些文件
-x: 解包文件包
-j: 通过bzip2的支持进行压缩/解压缩
-z: 通过gizp的支持进行压缩/解压缩
-C: 指定解包目标路径
-p: 打包过程中保留源文件的属性和权限
-v: 输出打包过程中正在处理的文件名