本篇文章是记录我在学习Linux时,有关Linux 文件系统的学习。操作系统的基本功能之一就是文件管理,而文件的管理是由文件系统来完成的。 Linux 支持多种文件系统,接下来我们就来一起了解 Linux 下的文件系统、文件系统类型、文件系统结构和文件系统相关 Shell 命令。
有关Ubuntu下的常见命令操作可以参考这篇文章:
目录
一、 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 格式化某个盘的时候都会让你选择文件系统,如图所示:上图就是格式化磁盘的时候选择文件系统, 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在图中,框起来的就是我们安装 Ubuntu 的这个磁盘,在 Linux 下一切皆为文件,“/dev/sda1”就是我们的磁盘分区,可以看出这个磁盘分区类型是 ext4,它的挂载点是“/”,也就是根目录。
在 Linux 下因为没有 C、 D 盘之说,因此 Linux 只有一个根目录,没有 C 盘根目录、 D 盘
根目录之类的。其实如果你的 Windows 只有一个 C 盘的话那么整个系统也就只有一个根目录。Windows 下的 C 盘根目录就是“C:” ,在 Linux 下的根目录就是“/”,你没有看错, Linux 根目录就是用“/”来表示的,打开 Ubuntu 的文件浏览器,文件浏览器在左侧的导航栏,图标如图所示:打开以后的文件浏览器如图所示:
直接打开文件浏览器以后,我们默认不是处于根目录中的,不像 Windows,我们直接打开
C 盘就处于 C 盘根目录下。 Ubuntu 是支持多用户的, Ubuntu 为每个用户创建了一个根目录,比如我电脑现在登陆的是“zxf”这个用户,因此默认进入的是“zxf”这个用户的根目录。我们点击图中左侧的“计算机”,打开以后如图所示就是 Ubuntu 的根目录“/”,这时候肯定就有人有疑问,刚刚说 Ubuntu 会给每个用户创建一个根目录,那这些用户的根目录在哪里?是不是和根目录“/”是一个地位的?其实所谓的给每个用户创建一个根目录只是方便说而已,这个所谓的用户根目录其实就是“/”下的一个文件夹,以我的“zxf”这个用户为例,其用户根目录就是: /home/zxf。
只要你创建了一个用户,那么系统就会在/home 这个目录下创建一个以这个用户名命名的文件夹,这个文件夹就是这个用户的根目录。用户可以对自己的用户根目录下的文件进行随意的读写操作,但是如果要修改根目录“/”下的文件就会提示没有权限。打开终端以后默认进入的是当前用户根目录,比如我们打开终端以后输入“ls”命令查看当前目录下有什么文件,结果如图所示:
我们来看一下根目录“/”下都有哪些文件,在终端中输入如下命令:
cd / //进入到根目录”/”
ls //查看根目录“/”下的文件以及文件夹图中列举出了根目录“/”下面的所有文件夹,这里我们仔细观察一下,当我们进入到根目录“/”里面以后终端提示符“$”前面的符号“~”变成了“/”,这是因为当我们在终端中切换了目录以后“$”前面就会显示切换以后的目录路径。我们来看一下根目录“/”中的一些重要的文件夹:
二、文件操作指令
下面我来给大家分享一些在终端进行文件操作的一些常用命令
1、创建新文件命令——touch
在前面学习 VIM 的时候我们知道可以用 vi 指令来创建一个文本文档,本节我们就学习一个功能更全面的文件创建命令—touch。 touch 不仅仅可以用用来创建文本文档,其它类型的文档也可以创建,命令格式如下:
touch [参数] [文件名] 使用touch创建文件的时候,如果 [文件名] 的文件不存在,那就直接创建一个以 [文件名] 命名的文件,如果[文件名]文件存在的话就仅仅修改一下此文件的最后修改日期,常用的命令参数如下:
-a 只更改存取时间 -c 不建立任何文件 -d<日期> 使用指定日期,而并非现在日期 -t<时间> 使用指定的时间,而并非现在时间 进入到用户根目录下,直接使用命令“cd ~”即可快速进入用户根目录,进入用户根目录以
后使用 touch 命令创建一个名为 test 的文件,创建过程如图所示:
2、文件夹创建命令——mkdir
既然可以创建文件,那肯定可以创建文件夹,那创建文件夹的命令是什么呢?
创建文件夹的命令格式如下:
mkdir [ 参数 ] [ 文件夹名目录名 ]
主要参数如下:
-p 如所要创建的目录其上层目录目前还未创建,那么会一起创建上层目录。 我们在用户根目录下创建两个分别名为“testdir1”和“testdir2”的文件夹,操作如图
所示:
3、文件及目录删除命令 ——rm
既然有创建文件的命令,那肯定有删除文件的命令,要删除一个文件或者文件夹可以使用命令“rm”,此命令可以完成删除一个文件或者多个文件及文件夹,它可以实现递归删除。对于链接文件,只删除链接,原文件保持不变,所谓的链接文件,其实就是 Windows 下的快捷方式文件,此命令格式如下:
rm [参数] [目的文件或文件夹目录名] 命令主要参数如下:
我们使用 rm 命令来删除前面使用命令“touch”创建的 test 文件,操作过程如图所示:
命令“rm”也可以直接删除文件夹,我们可以试一下删除前面创建的 testdir1 文件夹,先直
接使用命令“rm testdir1”测试一下是否可以删除,结果如图所示:
可以看出,直接使用命令“rm”是无法删除文件夹(目录)的,我们需要加上参数“-rf”,也就是强制递归删除文件夹(目录),操作结果如图所示:可以看出,当在命令“rm”中加入参数“-rf”以后就可以删除掉文件夹“testdir1”了。
4、 文件夹(目录)删除命令—rmdir
上面我们讲解了如何使用命令“rm”删除文件夹,那就是要加上参数“-rf”,其实 Linux 提供了直接删除文件夹(目录)的命令—rmdir,它可以不加任何参数的删除掉指定的文件夹(目录),命令格式如下:
rmdir [参数] [文件夹(目录)]
命令主要参数如下: -p 删除指定的文件夹(目录)以后,若上层文件夹(目录)为空文件夹(目录)的话就将其一起删除。
我们使用命令“rmdir”删除掉前面创建的“testdir2”文件夹,操作过程如图所示:
5、文件复制命令—cp
在 Windows 下我们可以通过在文件上点击鼠标右键来进行文件的复制和粘贴,在 Ubuntu下我们也可以通过点击文件右键进行文件的复制和粘贴。但是本节我们来讲解如何在终端下使用命令来进行文件的复制, Linux 下的复制命令为“cp”,命令描述如下:
cp [参数] [源地址] [目的地址]
主要参数描述如下: -a
-d
-f
-I
-p-r 或-R 递归处理
此参数和同时指定“-dpR”参数相同
在复制有符号连接的文件时,保留原始的连接。
强行复制文件,不管要复制的文件是否已经存在于目标目录。
覆盖现有文件之前询问用户。
保留源文件或者目录的属性。将指定目录下的文件及子目录一并处理
我们在用户根目录下,使用前面讲解的命令“mkdir”创建两个文件夹: test1 和 test2,过程
如图所示:进入上面创建的 test1 文件夹,然后在 test1 文件夹里面创建一个 a.c 文件,操作过程如图所示:
我们先将图 中的 a.c 这个文件做个备份,也就是复制到同文件夹 test1 里面,新的文件命名为 b.c。然后在将 test1 文件夹中的 a.c 和 b.c 这两个文件都复制到文件夹 test2 中,操作如下:
在图中,我们添加了一些高级使用技巧,首先是拷贝 a.c 和 b.c 文件到 test2 文件夹中,我们使用了通配符“*”,“*.c”就表示 test1 下的所有以“.c”结尾的文件,也就是 a.c 和 b.c。“../test2”中的“../”表示上级目录,因此“../test2”就是上级目录下的 test2 文件夹。
上面都是文件复制,我们接下来学习一下文件夹复制,我们将 test2 文件夹复制到同目录下,新拷贝的文件夹命名为 test3,操作如图所示:
6、文件移动命令—mv
有时候我们需要将一个文件或者文件夹移动到另外一个地方去,或者给一个文件或者文件夹进行重命名,这个时候我们就可以使用命令“mv”了,此命令格式如下:
mv [参数] [源地址] [目的地址]
主要参数描述如下: -b
-f
-I如果要覆盖文件的话覆盖前先进行备份。
若目标文件或目录与现在的文件重复,直接覆盖目的文件或目录。在覆盖之前询问用户。
使用上面讲解“cp”命令的时候创建了三个文件夹,在上面创建的 test1 文件夹里面创建一个 c.c 文件,然后将 c.c 这个文件重命名为 d.c。最后将 d.c 这个文件移动到 test2 文件夹里面,操作如图所示:
我们再将 test1 中的 d.c 文件移动到 test2 文件夹里面,操作如图所示:
三、文件压缩和解压缩
文件的压缩和解压缩是非常常见的操作,在 Windows 下我们有很多压缩和解压缩的工具,比如 zip、 360 压缩等等。在 Ubuntu 下也有压缩工具,本节我们学习 Ubuntu 下图形化以及命令行这两种压缩和解压缩操作。
1、图形化压缩和解压缩
图形化压缩和解压缩和 Windows 下基本一样,在要压缩或者解压的文件上点击鼠标右键,然后选择要进行的操作,我们先讲解一下如何进行文件的压缩。首先找到要压缩的文件,然后在要压缩的文件上点击鼠标右键,选择“压缩”选项,如图所示:
在图中我们要对 test2 这个文件夹进行压缩,点击“压缩”以后会弹出图所示界面让选择压缩后的文件名和压缩格式。
设置好压缩以后的文件名,然后选择压缩格式,可选的压缩格式如图所示
从图中可以看出,可以选择的压缩格式还是有很多的,挑选一个格式进行压缩,比如我选择的“.zip”这个格式,压缩完成以后如图所示:
上面就是使用图形化进行文件压缩的过程,我们接下来对刚刚压缩的 test2.zip 进行解压缩,
鼠标放到 test2.zip 上然后点击鼠标右键,选择“提取到此处”,如图所示:
2、命令进行文件的压缩和解压缩
命令行下进行压缩和解压缩常用的命令有三个: zip、 unzip 和 tar,我们依次来学习:
3、命令 zip
zip 命令看名字就知道是针对.zip 文件的,用于将一个或者多个文件压缩成一个.zip 结尾的
文件,命令格式如下:
zip [参数] [压缩文件名.zip] [被压缩的文件] 上面讲解了如何使用图形化压缩工具对文件夹 test2 进行压缩,这里我们使用命令“zip”对test2 文件夹进行压缩,操作如图所示:
上图就是使用 zip 命令进行 test2 文件夹的压缩,我们使用的命令如下:
zip -rv test2.zip test2
上述命令中, -rv 表示递归压缩并且显示压缩命令执行过程。
4、 命令 unzip
unzip 命令用于对.zip 格式的压缩包进行解压,命令格式如下:
unzip [参数] [压缩文件名.zip]
对上面压缩的 test2.zip 文件使用 unzip 命令进行解压缩,操作如图所示:
5、命令 tar
我们前面讲的 zip 和 unzip 这两个是命令只适用于.zip 格式的压缩和解压,其它压缩格式就
用不了了,比如 Linux 下最常用的.bz2 和.gz 这两种压缩格式。其它格式的压缩和解压使用命令tar, tar 将压缩和解压缩集合在一起,使用不同的参数即可,命令格式如下:
tar [参数] [压缩文件名] [被压缩文件名] 使用 tar 命令来进行.zip 和.gz 格式的文件压缩,操作如图所示:
在图中,我们使用如下两个命令将testl文件夹压缩为.bz2和.gz这两个格式:
tar -vcjf test1.tar.bz2 test1
tar -vczf test1.tar.gz test1 在上面两行命令中, -vcjf 表示创建 bz2 格式的压缩文件, -vczf 表示创建.gz 格式的压缩文
件。学习了如何使用 tar 命令来完成压缩,我们再来学习使用 tar 命令完成文件的解压,操作如图所示:图中我们使用如下所示两行命令完成.bz2 和.gz 格式文件的解压缩:
tar
tar-vxjf
-vxzftest1.tar.bz2
test2.tar.gz上述两行命令中, -vxjf 用来完成.bz2 格式压缩文件的解压, -vxzf 用来完成.gz 格式压缩文
件的解压。关于 Ubuntu 下的命令行压缩和解压缩就讲解到这里,重点是 tar 命令,要熟练掌握使用 tar 命令来完成.bz2 和.gz 格式的文件压缩和解压缩。
四、文件查询和搜索
文件的查询和搜索也是最常用的操作,在嵌入式 Linux 开发中常常需要在 Linux 源码文件
中查询某个文件是否存在,或者搜索哪些文件都调用了某个函数等等。本节我们了解两个最常用的文件查询和搜索命令: find 和 grep。
1、命令 find
find 命令用于在目录结构中查找文件,其命令格式如下:
find [路径] [参数] [关键字]
路径是要查找的目录路径,如果不写的话表示在当前目录下查找,关键字是文件名的一部
分,主要参数如下:
find 命令的参数有很多,常用的就这些,关于其它的参数大家可以自行上网查找,我们来看一下如何使用 find 命令进行文件搜索,我们搜索目录/etc 中以“vim”开头的文件为例,操
作如图所示:从图可以看出,在目录/etc 下,包含以“vim*”开头的文件有/etc/vim、 /etc/vim/vimrc等等,就不一一列出了。
2、命令 grep
find 命令用于在目录中搜索文件,我们有时候需要在文件中搜索一串关键字, grep 就是完
成这个功能的, grep 命令用于查找包含指定关键字的文件,如果发现某个文件的内容包含所指定的关键字, grep 命令就会把包含指定关键字的这一行标记出来, grep 命令格式如下:
grep [参数] 关键字 文件列表 grep 命令一次只能查一个关键字,主要参数如下:
比如我们在目录/usr 下递归查找包含字符“Ubuntu”的文件,操作如图所示:
五、文件类型
这里的文件类型不是说这个文件是音乐文件还是文本文件,在用户根目录下使用命令“ls-l”来查看用户根目录下所有文件的详细信息,如图所示:
在图中,每个文件的详细信息占一行,每行最前面的符号标记了当前文件类型,比如 test1 的第一个字符是“d”, test1.tar.bz2 文件第一个字符是“-”。这些字符表示的文件类型如下:
六、结语
Linux 下的文件系统、文件系统类型、文件系统结构和文件系统相关 Shell 命令的学习分享就到此结束了。希望我的分享能给你带来不一样的收获!
原文地址:https://blog.csdn.net/m0_73931287/article/details/135944131
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_64345.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!