文件系统—Linux文件系统基础

使用计算机的过程中,文件是经常被提到的概念,例如可执行文件、文本文件等,这里说的文件是一个抽象的概念,文件是存放一切数据化信息的仓库。用户为了保存数据或信息,首先要创建一个文件,然后把数据或信息写入该文件。最终这些数据被保存到文件的载体上,通常情况下是磁盘上,只要给出存放文件的路径和文件名,文件系统就可以在磁盘上找到该文件的物理位置,并把文件调入内存供用户使用。在此过程中文件系统起着重要作用,通过文件系统才能根据路径和文件名访问到文件,以及对文件进行各种操作。

从系统角度来看,文件系统是对文件存储器空间进行组织和分配,负责文件的存储并对存入的文件进行保护和检索的系统。具体地说,文件系统负责为用户建立文件,存入、读出、修改、转储文件,控制文件的存取,当用户不再使用时撤销文件等。

一、Linux文件系统基础

在深入了解文件系统之前,首先介绍文件系统的基础知识。

1、Linux文件结构

文件结构是文件存放在磁盘等存储设备上的组织方法。主要体现在对文件和目录的组织上。目录提供了管理文件的一个方便而有效的途径。Linux使用标准的目录结构,在安装Linux时,安装程序就已经为用户创建了文件系统和完整而固定的目录组织形式,并指定每个目录的作用和其中的文件类型,如图8.1所示。

Linux采用树状结构。最上层是根目录,其他所有目录都是从根目录出发而生成的。在Linux中,无论操作系统管理几个磁盘分区,这样的目录树只有一个。因为Linux是一个多用户系统,因此制定这样一个固定的目录规划有助于对系统文件和不同的用户文件进行统一管理。

下面列举Linux下一些主要目录的功能。

/bin——二进制可执行命令

/dev——设备特殊文件

/etc——系统管理和配置文件

/home——用户主目录的基点,比如用户user的主目录就是/home/user

/lib——标准程序设计库,又叫动态链接共享库

/sbin——系统管理命令,这里存放的是系统管理员使用的管理程序

/tmp——公用的临时文件存储点

/root——系统管理员的主目录

/mnt——用户临时安装其他文件系统的目录

/proc——虚拟的目录,不占用磁盘空间,是系统内存的映射。可直接访问这个目录来获取系统信息

/var——某些大文件的溢出区,例如各种服务的日志文件

/usr——最庞大的目录,要用到的应用程序和文件几乎都在这个目录下

2、文件类型

Linux的文件可以是下列类型之一。

1)常规文件

计算机用户和操作系统用于存放数据、程序等信息的文件。一般都长期地存放在外部存储器(磁盘、磁带等)中。常规文件一般又分为文本文件和二进制文件。

2)目录文件

Linux文件系统将文件索引结点号和文件名同时保存在目录中。目录文件就是将文件的名称和它的索引结点号结合在一起的一张表。目录文件只允许系统进行修改。用户进程可以读取目录文件,但不能对它们进行修改。

3)设备文件

Linux把所有的外设都当作文件来看待。每一种I/O设备对应一个设备文件,存放在/dev目录中。

4)管道文件

主要用于在进程之间传递数据。管道是进程之间传递数据的媒介。某进程数据写入管道的一端,另一个进程从管道另一端读取数据。Linux对管道的操作与文件操作相同,它把管道作为文件进行处理。管道文件又称FIFO文件。

5)链接文件

又称符号链接文件,它提供了共享文件的一种方法。在链接文件中不是通过文件名实现共享,而是通过链接文件中包含的指向文件的指针来实现对文件的访问。使用链接文件可以访问常规文件、目录文件和其他文件。

3、存取权限和文件模式

为保证文件信息的安全,Linux设置了文件保护机制,其中之一是给文件都设定了一定的访问权限。当文件被访问时,系统首先检验访问者的权限,只有与文件的访问权限相符时才允许对文件进行访问。

Linux中的每一个文件都归某一个特定的用户所有,而且一个用户一般总是与某个用户组相关。Linux对文件的访问设定了三级权限:文件所有者、与文件所有者同组的用户、其他用户。对文件的访问主要是三种处理操作:读取、写入和执行。如图8.2所示。

4、Linux文件系统

文件系统指文件存在的物理空间,Linux系统中的每个分区都是一个文件系统,都有自己的目录层次结构。Linux将这些分属不同分区的、单独的文件系统按一定的方式形成一个系统的总的目录层次结构。

1)索引结点

Linux文件系统使用索引结点inode记录文件信息。索引结点inode是一个数据结构,包含文件的长度、创建时间、修改时间、权限、所属关系、磁盘中的位置等信息。每个文件或目录都对应一个索引结点,文件系统把所有的索引结点形成一个数组,系统给每个索引结点分配一个号码,就是该结点在数组中的索引号,称为索引结点号。文件系统根据这个索引结点号来识别文件的。使用ls -i命令查看文件的索引结点。

2)软链接和硬链接

使用链接命令ln(link)对一个已经存在的文件建立一个链接,不复制文件的内容。ln是将两个文件名彼此链接起来,使得用户无论使用哪一个文件名都可以访问到同一文件。链接有软链接(符合链接)和硬链接之分。

硬链接(Hard Link)就是让一个文件对应一个或多个文件名,或者说把使用的文件名和文件系统使用的结点号链接起来,这些文件名可以在同一目录或不同目录下。一个文件有几个文件名,就说该文件的链接数为几。硬链接有两个限制,一是不允许给目录创建硬链接,二是只有在同一个文件系统中的文件之间才能创建硬链接。

例如,对已有的文件my.c创建一个硬链接my_link.c:

ln my.c my_link.c

ls -i

可以看到my.c和my_link.c具有相同的索引结点号。

为克服硬链接的两个限制,引入符号链接(symbolic link)。符号链接是一种特殊的文件,这种文件包含了另一个文件的任意一个路径名。这个路径名指向位于任意一个文件系统的任意文件,甚至可以指向一个不存在的文件。系统会自动把对符号链接的大部分操作(如读、写等)变为对源文件的操作,但某些操作(如删除等)就会直接在符号链接上完成。

例如,对已有的文件my.c创建一个符号链接文件myslink.c

ln -s my.c myslink.c

ls -li

从显示结果可以看出,my.c和myslink.c具有不同的索引结点号,也就是myslink.c中存放的是my.c的路径。在列目录中显示有myslink.c——>my.c,表示myslink.c是符号链接文件,指向实际的文件my.c。

3、安装(挂载)文件系统

将一个文件系统的顶层目录挂载到另一个文件系统的子目录上,使它们成为一个整体,称为Mount(挂载)。该子目录就称为挂载点(Mount Point),如图8.3所示。

Ext2/Ext3是Linux的标准文件系统,所以系统把Ext2文件系统的磁盘分区作为系统的根文件系统,Ext2以外的文件系统则安装在根文件系统下的某个目录下,成为系统树状结构中的一个分支。挂载一个文件系统用mount命令。

例如:mount -t iso9660(文件系统的类型:光盘或光盘镜像) /dev/cdrom /mnt/cdrom

分析:iso9660是光驱文件系统的名称,/dev/cdrom是包含文件系统的物理块设备,/mnt/cdrom是将要安装到的目录,即挂载点。

安装一个文件系统实际上就是挂载一个物理设备。将 /dev/cdrom挂载到 /mnt/cdrom下。

4、文件系统创建实例

为说明Linux文件系统层的功能以及安装的方法,在当前文件系统的一个文件中创建一个文件系统。实现的方法是,首先用dd命令创建一个指定大小的文件(使用/dev/zero作为源文件复制)——一个用0进行初始化的文件。

$ dd if=/dev/zero of=file.img bs=1KB count=10000

// 把输入文件/dev/zero拷贝到输出文件file.img中,输入输出的块大小为1KB,总共拷贝10000块
           10000+0 records in //输入块为10000
           10000+0 records out //输出块为10000
           10000000 bytes (10 MB, 9.5 MiB) copied, 0.0220118 s, 454 MB/s

现在有一个10MB的file.img文件。使用losetup命令将一个循环设备与这个文件关联起来,让它看起来像一个块设备,而不是文件系统中的常规文件:

$ losetup /dev/loop0 file.img

file.img文件作为一个块设备出现(由/dev/loop0表示)。

然后用mke2fs在这个设备上创建一个文件系统。这个命令可以创建一个指定大小的新的Ext2文件系统。

$ mke2fs -c /dev/loop0 10000 // 在/dev/loop0块设备上创建大小为10MB的Ext2文件系统

使用mount命令将循环设备/dev/loop0所表示的file.img文件挂载到挂载点/mnt/point1。注意,文件系统类型指定为Ext2。挂载之后,就可以将这个挂载点当作一个新的文件系统,比如使用ls命令。

$ mkdir /mnt/point1 // 创建挂载点

$ mount -t ext2 /dev/loop0 /mnt/point1 // 在挂载点/mnt/point1 上挂载Ext2文件系统(/dev/loop0)

$ ls /mnt/point1 // 查看文件系统

lost+found // 新文件系统中的默认目录

还可以继续这个过程:在刚才挂载的文件系统中创建一个新文件,将它与一个循环设备关联起来,在上面创建另一个文件系统。

在循环文件系统中创建一个新的循环文件系统

$ dd if=/dev/zero of=/mnt/point1/file.img bs=1KB count=1000

$ losetup /dev/loop1 /mnt/point1/file.img

$ mke2fs -c /dev/loop1 1000 // 在/dev/loop1块设备上创建大小为1MB的Ext2文件系统

$ mkdir /mnt/point2 // 创建挂载点

$ mount -t ext2 /dev/loop1 /mnt/point2 // 在挂载点/mnt/point2 上挂载Ext2文件系统(/dev/loop1)

$ ls /mnt/point2 // 查看另一个新的文件系统

lost+found // 新文件系统中的默认目录

$ ls /mnt/point1

file.img lost+found 

总结:可以按照相同的方法在文件上用循环设备创建加密的文件系统。可以在需要时使用循环设备临时挂载文件,这有助于保护数据。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值