linux文件系统寻址,Linux快速入门(1)一一 文件系统简介

1. Linux常见的文件系统

EXT(Extended File System)

EXT2:Linux的第一个设计为一个商业级文件系统,沿用 BSD 的 Berkeley 文件系统的设计原理。提供了GB级别的最大文件和TB级别的文件系统。但是如果在将数据写入到磁盘的时候,系统发生崩溃或断电,则容易发生灾难性的数据损坏。

EXT3:使用 32 位内部寻址,引入日志事务解决了EXT2数据损坏问题。三个级别的日志记录方式日记(journal)、 顺序(ordered)和 回写(writeback)。

EXT4:使用 48 位的内部寻址,可以存储最大16TB的单一文件,支持最大1EB的分区容量。EXT -> EXT2 -> EXT3 -> EXT4

XFS (Extents File System)

它是一个 64 位的日志文件系统,自 2001 年以来内置于 Linux 内核中,为大型文件系统和高度并发性提供了高性能(即大量的进程都会立即写入文件系统)。从 RHEL 7 开始,XFS 成为 Red Hat Enterprise Linux 的默认文件系统。

ZFS(Zettabyte File System)

Sun Microsystems 开发,以 zettabyte 命名 —— 相当于 1 万亿 GB —— 因为它理论上可以解决大型存储系统。

Btrfs(B-Tree Filesystem)

Chris Mason 于 2007 年在 Oracle 任职期间发布。Btrfs 旨在跟 ZFS 有大部分相同的目标,提供多种设备管理、每块校验、异步复制、直列压缩等等。SUSE Enterprise Linux 在 2015 年采用它作为默认文件系统,而 Red Hat 于 2017 年宣布它从 RHEL 7.4 开始不再支持 Btrfs。

2. Linux系统的层次

=======================================================

| Application | User space

=======================================================

| SCI (System Call Interface) | K

|-----------------------------------------------------| e

| VFS (Virtual File System) | r

|-----------------------------------------------------| n

| Ext3 | Ext4 | XFS | ZFS | Btrfs | ... | e

|-----------------------------------------------------| l

| General Block Device Layer |

|-----------------------------------------------------| Kernel space

| Device Driver |

=======================================================

| Physical Disk | Hardware

=======================================================

清单2-1

Kernel Space

Device Driver

常见的硬盘类型有PATA、SATA以及AHCI等。

General Block Device Layer

为文件系统提供统一抽象的硬盘驱动接口,屏蔽不同硬盘驱动带来的IO接口的多样性和复杂性。

File System

管理文件的实际系统。常用的如Ext4等。

VFS

向SCI层提供统一抽象的文件系统接口。

SCI

为用户程序提供系统调用的接口。

3. 文件存储结构

Linux中,文件 = inode + 数据块

inode:又称文件索引节点,存放文件的元信息

数据块:存放文件内容的区域

有些介绍文件存储结构的文章说

一个文件包含了目录项、inode和数据块

这个说法是不准确的。目录项并不是文件存储结构的组成部分,目录项只是数据块的数据而已。在Linux中,目录也是一种文件,即目录文件(文件类型为目录)。对于目录文件而言,其数据块存放的是目录项,即目录下所有的文件名和文件的inode编号。

通常我们在使用ls -al命令查看目录结构时,返回结果的前两个的目录名分别时.和..:

[root@localhost /]# ls -al

total 16

dr-xr-xr-x. 17 root root 224 Aug 7 00:25 .

dr-xr-xr-x. 17 root root 224 Aug 7 00:25 ..

清单3-1

清单3-1种,.指向的是当前目录inode,..指向的是上一级目录的inode。

inode的元信息通常包括:

文件类型 (regular file, directory, symbolic link etc.)

文件的字节数

分配给文件的block数量

Inode编号

文件的硬链接数量(详见5.文件链接,hard link)

文件的访问权限(详见4. 文件权限控制)

文件的时间戳(atime:access time, mtime:modify time, ctime:inode change time)

文件数据块的地址数组

使用state 命令可以查看指定目录或文件的inode信息。以/dev目录文件为例:

[root@localhost ~]# stat /etc

File: ‘/etc’

Size: 8192 Blocks: 24 IO Block: 4096 directory

Device: fd00h/64768d Inode: 67160161 Links: 79

Access: (0755/drwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root)

Context: system_u:object_r:etc_t:s0

Access: 2019-09-05 23:42:58.818662000 +0800

Modify: 2019-09-05 11:29:26.972884600 +0800

Change: 2019-09-05 11:29:26.972884600 +0800

清单3-2

4. 文件权限控制

4.1. 文件的属性

使用ls -l 命令可以查看到指定path下的文件相关的属性信息。以/bin/目录为例:

[root@localhost efrey]# ls -l /bin/

total 68012

-rwxr-xr-x. 1 root root 41544 Oct 31 2018 [

-rwxr-xr-x. 1 root root 107904 Jan 22 2019 a2p

-rwxr-xr-x. 1 root root 52720 Jul 30 01:20 ab

-rwxr-xr-x. 1 root root 29200 Oct 30 2018 addr2line

-rwxr-xr-x. 1 root root 29 Oct 31 2018 alias

lrwxrwxrwx. 1 root root 6 Aug 7 00:22 apropos -> whatis

......

[ 1 ] [2] [3] [4] [ 5 ] [ 6 ] [ 7 ]

清单4-1

清单4-1的返回信息分为7列:

[1]:文件的权限

[2]:文件的hard link数量

[3]:文件的拥有者(owner)

[4]:文件的组(group)

[5]:文件的字节数

[6]:文件的mtime(modify time,文件最后被修改的时间)

[7]:文件名

4.2. 文件的权限分配

4.2.1. 权限类型

Linux文件系统的权限类型有3种:

r (Read)

文件的r权限意味着可以读取文件的内容;

目录的r权限意味着可以读取目录的内容(子目录与文件名清单)。

w (Write)

文件的w权限意味着可以修改文件的内容;

目录的w权限意味着可以新建子目录、文件,也可以对其子目录、文件名进行修改、删除、移动。

x (eXecute)

文件的x权限意味着该文件可以被执行;

目录的x权限比较特殊,rw权限都依赖与x权限。如果只为用户分配了某个目录的rw权限但是没有x权限,该用户仍然无法访问这个目录的。

我们做个验证,首先在登陆用户的home目录内新建一个目录fldr,系统默认的owner权限为rwx。此时将目录fldr的owner权限修改为rw,然后再试着访问fldr:

[efrey@localhost ~]$ mkdir fldr

[efrey@localhost ~]$ ls -l

total 0

drwxrwxr-x. 2 efrey efrey 6 Sep 6 22:53 fldr

[efrey@localhost ~]$ touch fldr/test.txt

[efrey@localhost ~]$ ls -l fldr

total 0

-rw-rw-r--. 1 efrey efrey 0 Sep 6 22:54 test.txt

[efrey@localhost ~]$ sudo chmod u=rw,g=rw,o=r fldr

[efrey@localhost ~]$ ls -l fldr

ls: cannot access fldr/test.txt: Permission denied

total 0

-????????? ? ? ? ? ? test.txt

清单4-2

4.2.2. 文件权限的涵义

从清单4-1中可以看到第[1]栏的文件权限,总共有10个字符。以第一行的文件权限-rwxr-xr-x为例,这10位字符的权限涵义可以划分为1+3+3+3 总计4个段落(- + rwx + r-x + r-x):

段落1:左起第1位字符。这1个字符代表文件的类型。文件的类型比较常见的有,-表示为普通的文件;d表示是目录;l表示是symbolic link(soft Link)等。

段落2:第2~4位字符。这3个字符代表文件所有者的权限。第2位字符表示r权限,第3位表示w权限,第4位表示x权限。如果权限位字符为-则表示没有该权限。

段落3:第5~7位字符。这3个字符代表用户组的权限。权限位的字符涵义同上。

段落4:第8~10位字符。这3个字符代表其他用户的权限(非所有者和该用户组的用户)。权限位的字符涵义同上。

4.2.3. 修改文件的权限

chmod命令:改变文件的权限设置, 还可以设置SUID, SGID, SBIT等特殊性质的权限。

例如为文件test设置权限:所有者为rwx,用户组为rx,其他用户为rx,则执行的命令为chmod u=rwx, g=rx, o=rx test

上面的命令又可以简化为chmod 755 test。即所有者、用户组、其他用户这三组权限分别用一个数值表示。

具体的转换规则如下:每一组权限有3个权限位字符,每个字符对应一个八进制的数字:

- 第1位:r=4, -=0

- 第2位:w=2,-=0

- 第3位:x=1,-=0

最后将这3位的数值相加的和就是这一组权限的数值。

例如`-rwxr-xr-x`,对应的权限值为`755`。计算过程如下,三组权限分别为:

- rwx = 4 + 2 + 1 = 7

- r-x = 4 + 0 + 1 = 5

- r-x = 4 + 0 + 1 = 5

5. 文件的链接

Linux中文件有两种链接方式:Hard link和soft link。

hard link

第3节我们提到了文件的存储结构,一个文件是由inode和数据块两部分组成的。目录下的文件名本质就是指向该文件inode的一个hard link(文件名比inode编号更容易记忆和使用),一个文件至少有一个hard link文件名。

使用ln filename newfilename可以为一个文件创建多个hard link文件名。

我们用一个例子来演示,首先创建一个demo.txt文件,然后用这个文件创建一个hard link文件hdemo.txt,最后查看文件及其inode编号:

[root@localhost efrey]# echo 'file link demo' > demo.txt

[root@localhost efrey]# ln demo.txt hdemo.txt

[root@localhost efrey]# ls -il

total 8

110 -rw-r--r--. 2 root root 15 Sep 6 17:05 demo.txt

110 -rw-r--r--. 2 root root 15 Sep 6 17:05 hdemo.txt

从上面的例子可以看到,在当前目录中,demo.txt文件(inode id = 110)及其hard link文件名都指向同一个inode编号。文件的link数是2(第3列)

即使原文件被删除,仍然可以通过hard link文件访问文件内容。

soft link:

soft link就是指向某个path的一个快捷方式,path可为目录文件或普通文件。soft link并不会增加文件的link数。一旦原文件名被删除,则soft link文件就无法找到文件的inode。

使用ln -s filename newfilename可以创建soft link。

[root@localhost efrey]# ln -s demo.txt sdemo.txt

[root@localhost efrey]# ls -il

total 8

110 -rw-r--r--. 2 root root 15 Sep 6 17:05 demo.txt

110 -rw-r--r--. 2 root root 15 Sep 6 17:05 hdemo.txt

111 lrwxrwxrwx. 1 root root 8 Sep 6 17:19 sdemo.txt -> demo.txt

可以看到,为文件demo.txt增加soft link之后,文件的link数量并未增加。而ls命令返回结果的第二列,权限信息中的第一个字母变成了l(symbolic link)。此时如果用rm -f demo.txt命令删除demo.txt,再用cat sdemo.txt命令访问sdemo.txt就会收到No such file or directory的提示,因为虽然文件本身仍然在,但是快捷方式指向的demo.txt文件名被删除了。

[root@localhost efrey]# echo "I am new demo" > demo.txt

[root@localhost efrey]# ls -il

total 8

112 -rw-r--r--. 1 root root 1 Sep 6 17:25 demo.txt

110 -rw-r--r--. 1 root root 15 Sep 6 17:05 hdemo.txt

111 lrwxrwxrwx. 1 root root 8 Sep 6 17:19 sdemo.txt -> demo.txt

[root@localhost efrey]# cat sdemo.txt

I am new demo

此时再用echo '' > demo.txt新建文件,此时这个demo.txt文件的inode编号已经改变为112了,和原来的demo.txt已经不是同一个文件了;而我们查看sdemo.txt的内容已经是112这个demo.txt文件的了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
FATFS文件系统是一种在FAT文件系统基础上进行了封装和简化的文件系统。FATFS文件系统的原理是通过使用FAT表来索引和定位磁盘中的文件数据。FAT表是一种链式结构,类似于一本书的目录,用于记录文件的存储位置和状态。FAT文件系统将目录也抽象为文件,以简化对数据的管理。 在FATFS文件系统中,用户无需了解FATFS的内部结构和复杂的FAT协议,只需要调用提供的应用接口函数(如f_open,f_read,f_write和f_close等),就可以像在PC上读写文件一样简单地进行操作。FATFS文件系统文件的存储组织为簇链式数据结构,文件被分成一系列的数据簇进行存储。 FAT文件系统的目录结构是一颗从根到叶的有向树,根目录是整个目录结构的入口。跟目录的位置在格式化时就已经确定,通常紧随FAT表之后,大小为32个扇区。根据根目录的位置,FAT文件系统可以其他文件文件夹。 FAT文件系统将目录(文件夹)当作一个特殊的文件来处理,在FAT16中,根目录的组织形式和普通的目录并没有不同,而在FAT32中,根目录也被当作文件处理。目录文件实际上是一个存放其他文件文件夹入口参数的数据表,其占用空间的大小并不等同于其下所有数据的大小,但也不为0。目录文件以32个字节为单位进行簇的分配,每个字节偏移定义一个文件文件夹的属性,形成一个简单的二维表。 总的来说,FATFS文件系统通过使用FAT表和目录文件来管理文件的索引和定位,为用户提供了简单而方便的文件操作接口。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值