一文带你了解:Linux 文件系统+文件系统相关 Shell 命令+文件系统类型

一文带你了解:Linux 文件系统+文件系统相关 Shell 命令+文件系统类型_第1张图片

本篇文章是记录我在学习Linux时,有关Linux 文件系统的学习。操作系统的基本功能之一就是文件管理,而文件的管理是由文件系统来完成的。 Linux 支持多种文件系统,接下来我们就来一起了解 Linux 下的文件系统、文件系统类型、文件系统结构和文件系统相关 Shell 命令。

有关Ubuntu下的常见命令操作可以参考这篇文章:

Ubutu下的Shell操作-CSDN博客

一文带你了解:Linux 文件系统+文件系统相关 Shell 命令+文件系统类型_第2张图片

目录

一、 Linux 文件系统简介以及类型

1、Linux 文件系统简介

 2、Linux 文件系统类型

二、文件操作指令

1、创建新文件命令——touch

2、文件夹创建命令——mkdir

3、文件及目录删除命令 ——rm

4、 文件夹(目录)删除命令—rmdir

5、文件复制命令—cp

6、文件移动命令—mv

 三、文件压缩和解压缩

1、图形化压缩和解压缩

2、命令进行文件的压缩和解压缩 

3、命令 zip

4、 命令 unzip

 5、命令 tar

四、文件查询和搜索

1、命令 find

2、命令 grep

五、文件类型

六、结语


一、 Linux 文件系统简介以及类型

1、Linux 文件系统简介

操作系统就是处理各种数据的,这些数据在硬盘上就是二进制,人类肯定不能直接看懂这些二进制数据,要有一个翻译器,将这些二进制的数据还原为人类能看懂的文件形式,这个工作就是由文件系统来完成的,文件系统的目的就是实现数据的查询和存储,由于使用场合、使用环境的不同, Linux 有多种文件系统,不同的文件系统支持不同的体系。

文件系统是管理数据的,而可以存储数据的物理设备有硬盘、 U 盘、 SD 卡、 NAND FLASH、 NOR FLASH、网络存储设备等。不同的存储设备其物理结构不同,不同的物理结构就需要不同的文件系统去管理,比如管理 NAND FLASH 的话使用 YAFFS 文件系统,管理硬盘、 SD 卡的话就是 ext 文件系统等等。


我们在使用 Windows 的时候新买一个硬盘回来一般肯定是将这个硬盘分为好几个盘,比如
C 盘、 D 盘等等。这个叫磁盘的分割, Linux 下也支持磁盘分割, Linux 下常用的磁盘分割工具为: fdisk, fdisk 这个工具我们后面会详细讲解怎么用,因为我们移植 Linux 的时候需要将 SD卡分为三个分区来存储不同的东西。在 Windows 下我们创建一个新的盘符以后都要做格式化处理,格式化其实就是给这个盘符创建文件系统的过程,我们在 Windows 格式化某个盘的时候都会让你选择文件系统,如图所示:

一文带你了解:Linux 文件系统+文件系统相关 Shell 命令+文件系统类型_第3张图片

上图就是格式化磁盘的时候选择文件系统, Windows 下一般有 FAT、 NTFS 和 exFAT这些文件系统。同样的,在 Linux 下我们使用 fdisk 创建好分区以后也是要先在创建好的分区上面创建文件系统,也就是格式化。

在 Windows 下有磁盘分区的概念,比如 C, D, E 盘等,在 Linux 下没有这个概念,因此Linux 下你找不到像 C、 D、 E 盘这样的东西。前面我们说了 Linux 下可以给磁盘分割,但是没有 C、 D、 E 盘那怎么访问这些分区呢?

在 Linux 下创建一个分区并且格式化好以后我们要将其“挂载”到一个目录下才能访问这个分区。 Windows 的文件系统挂载过程是其内部完成的,用户是看不到的, Linux 下我们使用 mount 命令来挂载磁盘。挂载磁盘的时候是需要确定挂载点的,也就是你的这个磁盘要挂载到哪个目录下。


 2、Linux 文件系统类型

前面我们说了,在 Windows 下有 FAT、 NTFS 和 exFAT 这样的文件系统,在 Linux 下又有哪些文件系统呢, Linux 下的文件系统主要有 ext2、 ext3、 ext4 等文件系统。 Linux 还支持其他的 UNIX 文件系统,比如 XFS、 JFS、 UFS 等,也支持 Windows 的 FAT 文件系统和网络文件系统 NFS 等。这里我们主要讲一下 Linux 自带的 ext2、 ext3 和 ext4 文件系统。


ext2 文件系统:
ext2 是 Linux 早期的文件系统,但是随着技术的发展 ext2 文件系统已经不推荐使用了,ext2是一个非日志文件系统,大多数的 Linux 发行版都不支持 ext2 文件系统了。


ext3 文件系统:
ext3 是在 ext2 的基础上发展起来的文件系统,完全兼容 ext2 文件系统, ext3 是一个日志文件系统, ext3 支持大文件, ext3 文件系统的特点有如下:

高可靠性:使用 ext3 文件系统的话,即使系统非正常关机、发生死机等情况,恢复 ext3 文
件系统也只需要数十秒。

数据完整性: ext3 提高了文件系统的完整性,避免意外死机或者关机对文件系统的伤害。
文件系统速度: ext3 的日志功能对磁盘驱动器读写头进行了优化,文件系统速度相对与 ext2来说没有降低。

数据转换:从 ext2 转换到 ext3 非常容易,只需要两条指令就可以完成转换。用户不需要花
时间去备份、恢复、格式化分区等,用 ext3 文件系统提供的工具 tune2fs 即可轻松的将 ext2 文件系统转换为 ext3 日志文件系统。 ext3 文件系统不需要经过任何修改,可以直接挂载成 ext2 文件系统。


ext4 文件系统:

ext4 文件系统是在 ext3 上发展起来的, ext4 相比与 ext3 提供了更佳的性能和可靠性,并且功能更丰富, ext4 向下兼容 ext3 和 ext2,因此可以将 ext2 和 ext3 挂载为 ext4。那么我们安装的 Ubuntu 使用的哪个版本的文件系统呢?在终端中输入如下命令来查询当前磁盘挂载的啥文件系统:
df -T – h

一文带你了解:Linux 文件系统+文件系统相关 Shell 命令+文件系统类型_第4张图片

在图中,框起来的就是我们安装 Ubuntu 的这个磁盘,在 Linux 下一切皆为文件,“/dev/sda1”就是我们的磁盘分区,可以看出这个磁盘分区类型是 ext4,它的挂载点是“/”,也就是根目录。

在 Linux 下因为没有 C、 D 盘之说,因此 Linux 只有一个根目录,没有 C 盘根目录、 D 盘
根目录之类的。其实如果你的 Windows 只有一个 C 盘的话那么整个系统也就只有一个根目录。Windows 下的 C 盘根目录就是“C:” ,在 Linux 下的根目录就是“/”,你没有看错, Linux 根目录就是用“/”来表示的,打开 Ubuntu 的文件浏览器,文件浏览器在左侧的导航栏,图标如图所示:

一文带你了解:Linux 文件系统+文件系统相关 Shell 命令+文件系统类型_第5张图片

打开以后的文件浏览器如图所示:
一文带你了解:Linux 文件系统+文件系统相关 Shell 命令+文件系统类型_第6张图片

直接打开文件浏览器以后,我们默认不是处于根目录中的,不像 Windows,我们直接打开
C 盘就处于 C 盘根目录下。
Ubuntu 是支持多用户的, Ubuntu 为每个用户创建了一个根目录,比如我电脑现在登陆的是“zxf”这个用户,因此默认进入的是“zxf”这个用户的根目录。我们点击图中左侧的“计算机”,打开以后如图所示
一文带你了解:Linux 文件系统+文件系统相关 Shell 命令+文件系统类型_第7张图片

就是 Ubuntu 的根目录“/”,这时候肯定就有人有疑问,刚刚说 Ubuntu 会给每个用户创建一个根目录,那这些用户的根目录在哪里?是不是和根目录“/”是一个地位的?其实所谓的给每个用户创建一个根目录只是方便说而已,这个所谓的用户根目录其实就是“/”下的一个文件夹,以我的“zxf”这个用户为例,其用户根目录就是: /home/zxf。


只要你创建了一个用户,那么系统就会在/home 这个目录下创建一个以这个用户名命名的文件夹,这个文件夹就是这个用户的根目录。用户可以对自己的用户根目录下的文件进行随意的读写操作,但是如果要修改根目录“/”下的文件就会提示没有权限。打开终端以后默认进入的是当前用户根目录,比如我们打开终端以后输入“ls”命令查看当前目录下有什么文件,结果如图所示:

我们来看一下根目录“/”下都有哪些文件,在终端中输入如下命令:
cd /                                 //进入到根目录"/"
ls                                    //查看根目录“/”下的文件以及文件夹

图中列举出了根目录“/”下面的所有文件夹,这里我们仔细观察一下,当我们进入到根目录“/”里面以后终端提示符“$”前面的符号“~”变成了“/”,这是因为当我们在终端中切换了目录以后“$”前面就会显示切换以后的目录路径。我们来看一下根目录“/”中的一些重要的文件夹:
一文带你了解:Linux 文件系统+文件系统相关 Shell 命令+文件系统类型_第8张图片


二、文件操作指令

下面我来给大家分享一些在终端进行文件操作的一些常用命令

一文带你了解:Linux 文件系统+文件系统相关 Shell 命令+文件系统类型_第9张图片

1、创建新文件命令——touch

在前面学习 VIM 的时候我们知道可以用 vi 指令来创建一个文本文档,本节我们就学习一个功能更全面的文件创建命令—touch。 touch 不仅仅可以用用来创建文本文档,其它类型的文档也可以创建,命令格式如下:

touch [参数] [文件名]

使用touch创建文件的时候,如果 [文件名] 的文件不存在,那就直接创建一个以 [文件名] 命名的文件,如果[文件名]文件存在的话就仅仅修改一下此文件的最后修改日期,常用的命令参数如下:
 

-a 只更改存取时间
-c 不建立任何文件
-d<日期> 使用指定日期,而并非现在日期
-t<时间> 使用指定的时间,而并非现在时间

进入到用户根目录下,直接使用命令“cd ~”即可快速进入用户根目录,进入用户根目录以
后使用 touch 命令创建一个名为 test 的文件,创建过程如图所示:

一文带你了解:Linux 文件系统+文件系统相关 Shell 命令+文件系统类型_第10张图片

2、文件夹创建命令——mkdir

既然可以创建文件,那肯定可以创建文件夹,那创建文件夹的命令是什么呢?

创建文件夹的命令格式如下: 

mkdir      [ 参数 ]    [ 文件夹名目录名 ]

主要参数如下:

-p 如所要创建的目录其上层目录目前还未创建,那么会一起创建上层目录。

我们在用户根目录下创建两个分别名为“testdir1”和“testdir2”的文件夹,操作如图
所示:

一文带你了解:Linux 文件系统+文件系统相关 Shell 命令+文件系统类型_第11张图片

3、文件及目录删除命令 ——rm

既然有创建文件的命令,那肯定有删除文件的命令,要删除一个文件或者文件夹可以使用命令“rm”,此命令可以完成删除一个文件或者多个文件及文件夹,它可以实现递归删除。对于链接文件,只删除链接,原文件保持不变,所谓的链接文件,其实就是 Windows 下的快捷方式文件,此命令格式如下

rm [参数] [目的文件或文件夹目录名]

命令主要参数如下:

一文带你了解:Linux 文件系统+文件系统相关 Shell 命令+文件系统类型_第12张图片

我们使用 rm 命令来删除前面使用命令“touch”创建的 test 文件,操作过程如图所示:
一文带你了解:Linux 文件系统+文件系统相关 Shell 命令+文件系统类型_第13张图片

命令“rm”也可以直接删除文件夹,我们可以试一下删除前面创建的 testdir1 文件夹,先直
接使用命令“rm testdir1”测试一下是否可以删除,结果如图所示:


可以看出,直接使用命令“rm”是无法删除文件夹(目录)的,我们需要加上参数“-rf”,也就是强制递归删除文件夹(目录),操作结果如图所示:
一文带你了解:Linux 文件系统+文件系统相关 Shell 命令+文件系统类型_第14张图片

可以看出,当在命令“rm”中加入参数“-rf”以后就可以删除掉文件夹“testdir1”了。

4、 文件夹(目录)删除命令—rmdir

上面我们讲解了如何使用命令“rm”删除文件夹,那就是要加上参数“-rf”,其实 Linux 提供了直接删除文件夹(目录)的命令—rmdir,它可以不加任何参数的删除掉指定的文件夹(目录),命令格式如下:

rmdir      [参数]              [文件夹(目录)]
命令主要参数如下:

-p 删除指定的文件夹(目录)以后,若上层文件夹(目录)为空文件夹(目录)的话就将其一起删除。
我们使用命令“rmdir”删除掉前面创建的“testdir2”文件夹,操作过程如图所示:

一文带你了解:Linux 文件系统+文件系统相关 Shell 命令+文件系统类型_第15张图片

5、文件复制命令—cp

在 Windows 下我们可以通过在文件上点击鼠标右键来进行文件的复制和粘贴,在 Ubuntu下我们也可以通过点击文件右键进行文件的复制和粘贴。但是本节我们来讲解如何在终端下使用命令来进行文件的复制, Linux 下的复制命令为“cp”,命令描述如下:

cp [参数] [源地址] [目的地址]
主要参数描述如下:

-a
-d
-f
-I
-p

-r 或-R 递归处理

此参数和同时指定“-dpR”参数相同
在复制有符号连接的文件时,保留原始的连接。
强行复制文件,不管要复制的文件是否已经存在于目标目录。
覆盖现有文件之前询问用户。
保留源文件或者目录的属性。

将指定目录下的文件及子目录一并处理

我们在用户根目录下,使用前面讲解的命令“mkdir”创建两个文件夹: test1 和 test2,过程
如图所示:

一文带你了解:Linux 文件系统+文件系统相关 Shell 命令+文件系统类型_第16张图片

进入上面创建的 test1 文件夹,然后在 test1 文件夹里面创建一个 a.c 文件,操作过程如图所示:

我们先将图 中的 a.c 这个文件做个备份,也就是复制到同文件夹 test1 里面,新的文件命名为 b.c。然后在将 test1 文件夹中的 a.c 和 b.c 这两个文件都复制到文件夹 test2 中,操作如下:
一文带你了解:Linux 文件系统+文件系统相关 Shell 命令+文件系统类型_第17张图片

在图中,我们添加了一些高级使用技巧,首先是拷贝 a.c 和 b.c 文件到 test2 文件夹中,我们使用了通配符“*”,“*.c”就表示 test1 下的所有以“.c”结尾的文件,也就是 a.c 和 b.c。“../test2”中的“../”表示上级目录,因此“../test2”就是上级目录下的 test2 文件夹。
上面都是文件复制,我们接下来学习一下文件夹复制,我们将 test2 文件夹复制到同目录下,新拷贝的文件夹命名为 test3,操作如图所示:

一文带你了解:Linux 文件系统+文件系统相关 Shell 命令+文件系统类型_第18张图片

6、文件移动命令—mv

有时候我们需要将一个文件或者文件夹移动到另外一个地方去,或者给一个文件或者文件夹进行重命名,这个时候我们就可以使用命令“mv”了,此命令格式如下:

mv [参数] [源地址] [目的地址]
主要参数描述如下:
-b
-f
-I

如果要覆盖文件的话覆盖前先进行备份。
若目标文件或目录与现在的文件重复,直接覆盖目的文件或目录。

在覆盖之前询问用户。

使用上面讲解“cp”命令的时候创建了三个文件夹,在上面创建的 test1 文件夹里面创建一个 c.c 文件,然后将 c.c 这个文件重命名为 d.c。最后将 d.c 这个文件移动到 test2 文件夹里面,操作如图所示:
一文带你了解:Linux 文件系统+文件系统相关 Shell 命令+文件系统类型_第19张图片

我们再将 test1 中的 d.c 文件移动到 test2 文件夹里面,操作如图所示:
一文带你了解:Linux 文件系统+文件系统相关 Shell 命令+文件系统类型_第20张图片


一文带你了解:Linux 文件系统+文件系统相关 Shell 命令+文件系统类型_第21张图片

 三、文件压缩和解压缩

文件的压缩和解压缩是非常常见的操作,在 Windows 下我们有很多压缩和解压缩的工具,比如 zip、 360 压缩等等。在 Ubuntu 下也有压缩工具,本节我们学习 Ubuntu 下图形化以及命令行这两种压缩和解压缩操作。

1、图形化压缩和解压缩

图形化压缩和解压缩和 Windows 下基本一样,在要压缩或者解压的文件上点击鼠标右键,然后选择要进行的操作,我们先讲解一下如何进行文件的压缩。首先找到要压缩的文件,然后在要压缩的文件上点击鼠标右键,选择“压缩”选项,如图所示:
一文带你了解:Linux 文件系统+文件系统相关 Shell 命令+文件系统类型_第22张图片

在图中我们要对 test2 这个文件夹进行压缩,点击“压缩”以后会弹出图所示界面让选择压缩后的文件名和压缩格式。
一文带你了解:Linux 文件系统+文件系统相关 Shell 命令+文件系统类型_第23张图片

设置好压缩以后的文件名,然后选择压缩格式,可选的压缩格式如图所示
一文带你了解:Linux 文件系统+文件系统相关 Shell 命令+文件系统类型_第24张图片

从图中可以看出,可以选择的压缩格式还是有很多的,挑选一个格式进行压缩,比如我选择的“.zip”这个格式,压缩完成以后如图所示:
一文带你了解:Linux 文件系统+文件系统相关 Shell 命令+文件系统类型_第25张图片

上面就是使用图形化进行文件压缩的过程,我们接下来对刚刚压缩的 test2.zip 进行解压缩,
鼠标放到 test2.zip 上然后点击鼠标右键,选择“提取到此处”,如图所示:

一文带你了解:Linux 文件系统+文件系统相关 Shell 命令+文件系统类型_第26张图片

2、命令进行文件的压缩和解压缩 

命令行下进行压缩和解压缩常用的命令有三个: zip、 unzip 和 tar,我们依次来学习:

3、命令 zip

zip 命令看名字就知道是针对.zip 文件的,用于将一个或者多个文件压缩成一个.zip 结尾的
文件,命令格式如下:

zip [参数] [压缩文件名.zip] [被压缩的文件]
一文带你了解:Linux 文件系统+文件系统相关 Shell 命令+文件系统类型_第27张图片

上面讲解了如何使用图形化压缩工具对文件夹 test2 进行压缩,这里我们使用命令“zip”对test2 文件夹进行压缩,操作如图所示:
一文带你了解:Linux 文件系统+文件系统相关 Shell 命令+文件系统类型_第28张图片
上图就是使用 zip 命令进行 test2 文件夹的压缩,我们使用的命令如下:
zip -rv test2.zip test2                                                                            
上述命令中, -rv 表示递归压缩并且显示压缩命令执行过程。

4、 命令 unzip

unzip 命令用于对.zip 格式的压缩包进行解压,命令格式如下:

unzip [参数] [压缩文件名.zip]

一文带你了解:Linux 文件系统+文件系统相关 Shell 命令+文件系统类型_第29张图片

一文带你了解:Linux 文件系统+文件系统相关 Shell 命令+文件系统类型_第30张图片

对上面压缩的 test2.zip 文件使用 unzip 命令进行解压缩,操作如图所示:
一文带你了解:Linux 文件系统+文件系统相关 Shell 命令+文件系统类型_第31张图片

 5、命令 tar

我们前面讲的 zip 和 unzip 这两个是命令只适用于.zip 格式的压缩和解压,其它压缩格式就
用不了了,比如 Linux 下最常用的.bz2 和.gz 这两种压缩格式。其它格式的压缩和解压使用命令tar, tar 将压缩和解压缩集合在一起,使用不同的参数即可,命令格式如下:

tar [参数] [压缩文件名] [被压缩文件名]

一文带你了解:Linux 文件系统+文件系统相关 Shell 命令+文件系统类型_第32张图片

使用 tar 命令来进行.zip 和.gz 格式的文件压缩,操作如图所示:
一文带你了解:Linux 文件系统+文件系统相关 Shell 命令+文件系统类型_第33张图片

在图中,我们使用如下两个命令将testl文件夹压缩为.bz2和.gz这两个格式:

tar          -vcjf           test1.tar.bz2         test1
tar          -vczf           test1.tar.gz           test1

在上面两行命令中, -vcjf 表示创建 bz2 格式的压缩文件, -vczf 表示创建.gz 格式的压缩文
件。学习了如何使用 tar 命令来完成压缩,我们再来学习使用 tar 命令完成文件的解压,操作如图所示:

一文带你了解:Linux 文件系统+文件系统相关 Shell 命令+文件系统类型_第34张图片

图中我们使用如下所示两行命令完成.bz2 和.gz 格式文件的解压缩:
 

tar
tar
-vxjf
-vxzf
test1.tar.bz2
test2.tar.gz

上述两行命令中, -vxjf 用来完成.bz2 格式压缩文件的解压, -vxzf 用来完成.gz 格式压缩文
件的解压。关于 Ubuntu 下的命令行压缩和解压缩就讲解到这里,重点是 tar 命令,要熟练掌握使用 tar 命令来完成.bz2 和.gz 格式的文件压缩和解压缩。

四、文件查询和搜索

文件的查询和搜索也是最常用的操作,在嵌入式 Linux 开发中常常需要在 Linux 源码文件
中查询某个文件是否存在,或者搜索哪些文件都调用了某个函数等等。本节我们了解两个最常用的文件查询和搜索命令: find 和 grep。

1、命令 find

find 命令用于在目录结构中查找文件,其命令格式如下:
find           [路径]          [参数]         [关键字]
路径是要查找的目录路径,如果不写的话表示在当前目录下查找,关键字是文件名的一部
分,主要参数如下:

一文带你了解:Linux 文件系统+文件系统相关 Shell 命令+文件系统类型_第35张图片
find 命令的参数有很多,常用的就这些,关于其它的参数大家可以自行上网查找,我们来看一下如何使用 find 命令进行文件搜索,我们搜索目录/etc 中以“vim”开头的文件为例,操
作如图所示:

一文带你了解:Linux 文件系统+文件系统相关 Shell 命令+文件系统类型_第36张图片

从图可以看出,在目录/etc 下,包含以“vim*”开头的文件有/etc/vim、 /etc/vim/vimrc等等,就不一一列出了。

2、命令 grep

find 命令用于在目录中搜索文件,我们有时候需要在文件中搜索一串关键字, grep 就是完
成这个功能的, grep 命令用于查找包含指定关键字的文件,如果发现某个文件的内容包含所指定的关键字, grep 命令就会把包含指定关键字的这一行标记出来, grep 命令格式如下:

grep [参数] 关键字 文件列表

grep 命令一次只能查一个关键字,主要参数如下:
一文带你了解:Linux 文件系统+文件系统相关 Shell 命令+文件系统类型_第37张图片


比如我们在目录/usr 下递归查找包含字符“Ubuntu”的文件,操作如图所示:
一文带你了解:Linux 文件系统+文件系统相关 Shell 命令+文件系统类型_第38张图片

五、文件类型

这里的文件类型不是说这个文件是音乐文件还是文本文件,在用户根目录下使用命令“ls-l”来查看用户根目录下所有文件的详细信息,如图所示:
一文带你了解:Linux 文件系统+文件系统相关 Shell 命令+文件系统类型_第39张图片

在图中,每个文件的详细信息占一行,每行最前面的符号标记了当前文件类型,比如 test1 的第一个字符是“d”, test1.tar.bz2 文件第一个字符是“-”。这些字符表示的文件类型如下:
一文带你了解:Linux 文件系统+文件系统相关 Shell 命令+文件系统类型_第40张图片

六、结语

 Linux 下的文件系统、文件系统类型、文件系统结构和文件系统相关 Shell 命令的学习分享就到此结束了。希望我的分享能给你带来不一样的收获!

一文带你了解:Linux 文件系统+文件系统相关 Shell 命令+文件系统类型_第41张图片

你可能感兴趣的:(Linux,linux,运维,服务器)