Linux的文件系统


文件系统:

我们都知道Linux的文件系统层次结构是一棵树,以”/“表示的为最上层的目录。

example:

Ubuntu文件系统示意图:

无法显示图片


定义:

文件: 是文件系统中存储数据的一个命名对象。即使是一个空文件,它也包含用户数据,仍然为操作系统提供其他信息。

目录: 其中包含许多文件项目的一类特殊文件。支持文件系统的层次结构。系统中每个文件都登记在一个目录中。

子目录: 被包含在另一个目录中的目录。除了root目录以外,所有的目录都是子目录,并且有他们的父目录。root目录就作为自己的父目录

文件名: 用来标志文件的字符串,保存在一个目录文件项中。


文件结构:

文件的成分:无论文件是一个程序,一个文档,一个数据库,还是一个目录,操作系统都会赋予它如下所示的同样的结构:

  • 文件索引:又称I节点,是文件系统结构中包含相应文件信息一个记录。这些信息包括文件权限、文件主、文件大小等。

  • 数据: 文件的实际内容,可以是空,可以非常大,并且有自己的结构。

    文件名规范:

    (1)除了写先(“/”)和空字符(ASCII字符“\0”)以外,文件名可以包含任意的ASCII字符,因为这两个字符被核心当作标识路径名的特殊字符来解释。

    (2)Linux区分大小写

    (3)以圆点(.)开头的文件为隐含文件


文件类型:

  • 普通文件:

普通文件也称规范文件,包含各种长度的字符串。核心对这些数据没有进行结构化,只是作为有序的字符序列把它提交给应用程序。应用程序自己组织和解释这些数据。

(1)文本文件:有ASCII字符构成。

(2)数据文件:来自应用程序数字型和文本型数据组成,例如:电子表格,数据库及字处理文档。

(3)可执行的二进制文件:有机器指令和数据构成。

命令:指定文件的类型(可将多个文件作为参数)

1
$ file 文件名 [文件名...]
  • 目录文件:

目录文件也包含数据,但与普通文件的差别是:核心对这些数据进行结构处理,即它是有成对的“I节点号/文件名”构成的列表

  • I节点号是检索I节点表的下标,I节点中存放有文件的状态信息

  • 每个目录的第一项都表示目录本身,用“点(.)”作文它的文件名,每个目录的第二项的名字用“点点(..)”表示。这就是当你输入ls显示第一二项是.和..的原因。

  • 当文件添加到一个目录时,改目录的尺寸会加大,以便容纳新文件名。当删除文件时,目录的尺寸并不会减小,而是核心对该目录项上做特殊标识,一边下次添加一个文件时重新使用它。ls不会列出这些未被使用的项。

  • 设备文件

是一种特别文件,除了在其文件I节点中存放属性信息外,不包含任何数据。系统利用他们来标记各个设备驱动器,核心使用它们与硬件设备通信。

  • 字符设备:最常用的设备文件,允许I/O传送任意大小的数据,取决于设备本身的容量。使用这种接口的设备:终端,打印机及鼠标。

  • 块设备:利用核心缓冲区的自动缓存机制。缓存区进行I/O传送总是已KB为单位。使用这种接口的设备包括硬盘,软盘和RAM盘。

tty可显示设备文件:

1
$ tty   #=> /dev/pts/1

注意: 设备文件存放在”/dev/“目录下

  • 符号链接文件: 存放的数据是文件系统通向文件的路径。当使用符号链接文件时,核心自动访问所保存这个路径

讲到这里,我不得不说一下硬链接和软链接。

什么是链接:

Linux具有一个文件起多个名字的功能,叫做链接。它有两种情况:

  • 被链接的文件存放在相同的目录下,但是必须有不同的文件名,不用在硬盘上为同样的数据重复备份。

  • 被链接的文件拥有相同的文件名,但是存放在不同的目录下。只要在一个目录下的文件做修改,就可以完成对所有目录下同名链接文件的修改

链接形式就这两种:

硬链接:

别的目录本目录增加目标文件的一个目录项(让某目录同样可以访问目标文件),这样一个文件就登记在多个目录中。 创建硬链接后,已经存在的文件节点(Inode)会被多个目录文件项使用。

一个文件的硬链接数可以在目录的长列表格式的第二列中看到,无额外链接的文件的连接数为1。 在默认情况下,ln命令创建硬链接。ln会增加链接数rm命令会减少链接数。一个文件除非链接数为0,否则不会从文件系统中物理地删除。

限制:

不能对目录文件创建硬链接。

不能在不同的文件系统之间做硬链接。链接文件与被链接文件必须位于同一个文件系统。

软链接:(符号链接)

将一个路径名链接到一个文件。这些文件是一种特殊类型的文件。事实上,它只是一个文本文件,其中包含它提供链接的另一个文件的路径名。 当使用读写文件内容的命令被用于符号链接时,将沿着链接方向前进来访问实际的文件。

两种链接的区别:

  1. 符号链接是一个新文件,它具有不同的I节点;硬链接并没有建立新文件,只是建立目录项。

  2. 符号链接可以对目录建立符号链接,也可在不同文件系统中建立符号链接

  3. 删除源文件或目录时,只删除数据,不会删除符号链接,一旦以同样文件名创建源文件,链接将继续指向该文件的新数据。

  4. 符号链接的大小是链接文件的路径名的字节数

命令:

1
   ln [选项] 源文件 [目标文件]        # -s建立符号链接

Comments