Merikanto

一簫一劍平生意,負盡狂名十五年

Linux File System, FHS & umask

今天来 总结一下 Linux 的文件系统,还有文件类型。



File System

FHS

Linux 主要采用的是树形结构,它是单一的一棵树,无论有多少分区,都包含在以 / 为根节点的树结构上。其中分区是物理上的区分,目录则是逻辑上的区分。Linux 中每个分区都要挂载到目录树中一个具体的目录下才能访问,其中根目录必须挂载一个分区 (挂载是 Linux 文件系统与一个存储设备关联起来的过程)。 因为 Linux 是一个多用户系统,一个规范的目录有助于对系统文件和不同的用户文件进行统一管理。

在 Linux 的目录结构中,用户的主目录通常是保存在一个单独的文件系统上,然后挂载到根目录下的一个目录。FHS (Filesystem Hierarchy Standard) 定义了系统中每个区域的用途、所需要的最小构成的文件和目录,同时还给出了例外处理与矛盾处理。


文件系统的组成

  1. Namespace: 主要给事物对象命名,并按照一种层次结构来组织

  2. API: 主要用于查询和操作对象的一种系统调用

  3. 安全模型: 主要用于保护、共享和隐藏对象

  4. 实现: 主要用于逻辑模型和硬件系统连接起来


File Types

7 Types

  1. 普通文件 -

    • 文本文件、数据文件、可执行程序等等都可作为普通文件存储。
  2. 目录 d

    • 目录中按照名字来对其他文件进行引用,用户通过 mkdir 创建目录,用 rmdir 来删除空目录,用 rm -r 来删除非空目录。
  3. 字符设备文件 c

    • 字符设备文件让相关的驱动程序作为输入输出的缓冲。
  4. 块设备文件 b

    • 块设备文件有处理块数据的 I/O 的驱动程序使用,同时让内核提供缓冲。
  5. 本地域套接口 s

    • 实现进程间通信的连接,本地域套接口由系统调用 socket 创建,用 rmunlink 删除。
  6. 有名管道(FIFO)p

    • 让运行在同一主机上的两个进程相互通信,和 socket 相似,用 mknod 创建,用 rm 来删除。
  7. 符号链接 l

    • 也叫做软链接,通过名字指向文件。用 ln -s 创建,用 rm 来删除。

软链接 & 硬链接

在 Linux 中链接文件可以分为软链接硬链接两种。创建方法:

  • 软链接:ln -s source target
  • 硬链接:ln source target

  1. 软链接(符号链接):
    软链接文件类似于快捷方式。它实际上是一个特殊的文件。在符号连接中,文件实际上是一个文本文件,其中包含的有另一文件的位置信息。

  1. 硬链接(实体链接):
    硬连接是通过索引节点(inode)来进行的连接,其作用是允许一个文件拥有多个有效路径名,能够达到误删除的作用。在 Linux 中,多个文件名指向同一索引节点是存在的。只删除一个连接并不影响索引节点本身和其它的连接,只有当最后一个连接被删除后,文件的数据块及目录的连接才会被释放。也就是说,文件真正删除的条件是与之相关的所有硬连接文件均被删除

  1. ln 命令:

    • 软链接(ln -s) 只会在你选定的位置上生成一个文件的镜像,不会占用磁盘空间

    • 硬链接ln没有参数 -s, 在选定的位置上生成一个和源文件大小相同的文件

    • 无论是软链接还是硬链接,文件都保持同步变化。 ln 会保持每一处链接文件的同步性。 不论改动哪一处,其它的文件都会发生相同的变化

    • e.g.

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      touch f
      ln -s f f2 # Create softlink f2
      rm f
      cat f2
      >>> No such file or directory

      echo "hello"
      >>> f2

      ls
      >>> f f1 f2 # Original file f reappears
  • img
  1. 区别:

    • 硬链接缺点:

      • 不允许给目录创建硬链接
      • 只有在同一文件系统中的文件之间才能创建链接,而且只有 root 才有建立权限
    • 软链接优点:

      • 没有硬链接以上的两个限制,因而现在更为广泛使用,它具有更大的灵活性,甚至可以跨越不同机器、不同网络对文件进行链接。
    • 软链接缺点:

      • 因为软链接含有原文件的路径信息,所以当原文件被移到其他目录中,再访问链接文件,系统就找不到了。而硬链接就没有这个缺陷,想怎么移就怎么移。
      • 要系统分配额外的空间用于建立新的索引节点和保存原文件的路径
    • 一句话总结

      • 软链接可以跨分区,但源文件不能删除。
      • 硬链接不能跨分区,但可以删除源文件

补充:umask

umask 主要用来设置用户创建文件的默认权限,它与 chmod 的效果刚好相反。umask 设置的是权限“补码”,而 chmod 设置的是文件权限码。一般在 /etc/profile~/.bash_profile~/.profile 中设置 umask 值。


计算 umask 值相应的文件,和目录缺省创建权限的步骤如下:

  • 先写下具有全部权限的模式,即 777 (所有用户都具有读、写和执行权限)。
  • 在下面一行按照 umask 值写下相应的位。
  • 在接下来的一行中记下上面两行中没有匹配的位。这就是目录的缺省创建权限。
  • 对于文件来说,在创建时不能具有执行权限,只要拿掉相应的执行权限即可。

e.g. 假设 umask 值为 022

  • 文件的最大权限是: rwx rwx rwx (777)

  • umask 值为 022 (--- -w- -w-)

  • 目录权限就是 755 (rwx r-x r-x)(这就是目录创建缺省权限)

  • 文件权限 644 (rw- r-- r-- ) (这就是文件创建缺省权限)