UNIX系统 ---- 文件和目录

文件类型

UNXI系统的大多数文件是普通文件或目录,但是也有另外一些文件类型:

  • 普通文件(regular file)。这是最常见的文件类型,这种文件包含了某种形式的数据。至于这种数据是文本还是二进制数据对于内核而言并无区别。对普通文件内容的解释由处理该文件的应用程序进行。
  • 目录文件(directory file)。这种文件包含了其他文件的名字以及指向与这些文件有关信息的指针。对一个目录文件具有读许可权的任一进程都可以读该目录的内容,但只有内核可以写目录文件。
  • 字符特殊文件(character special file)。这种文件用于系统中某些类型的设备。
  • 块特殊文件(block special file)。这种文件典型地用于磁盘设备。系统中的所有设备或者是字符特殊文件,或者是块特殊文件。
  • FIFO。这种文件用于进程间的通信,有时也将其称为命名管道。
  • 套接口( socket )。这种文件用于进程间的网络通信。套接口也可用于在一台宿主机上的进程之间的非网络通信。
  • 符号连接(symbolic link)。这种文件指向另一个文件。文件类型信息包含在stat结构的st_mode成员中。这些宏的参数都是stat结构中的st_mode成员。

设置用户ID和组ID

与一个进程相关的ID有六个~
在这里插入图片描述

  • 实际用户ID和实际组ID标识我们究竟是谁。这两个字段在登录时取自口令文件中的登录项。通常,在一个登录会话期间这些值并不改变,但是超级用户进程有方法改变它们。
  • 有效用户ID,有效组I D以及添加组ID决定了我们的文件访问权。
  • 保存的设置用户ID和设置-组ID在执行一个程序时包含了有效用户 ID和有效组ID的副本。
  • 通常,有效用户ID等于实际用户ID,有效组ID等于实际组ID。

文件存取许可权

每个文件有9个存取许可权位,可将它们分成三类。
在这里插入图片描述

  • 在用chmod更改文件权限的时候,参数-u表示用户,-g表示组,-o表示其它。

文件权限的定义

  • 若进程的有效用户ID是0 (超级用户),则允许存取。这给予了超级用户对文件系统进行处理的最充分的自由。
  • 若进程的有效用户ID等于文件的所有者ID (也就是该进程拥有此文件):
    • 若适当的所有者存取许可权位被设置,则允许存取。适当的存取许可权位指的是,若进程为读而打开该文件,则用户 -读位应为1;若进程为写而打开该文件,则用户-写位应为1;若进程将执行该文件,则用户-执行位应为1
    • 否则拒绝存取。
  • 若进程的有效组ID或进程的添加组ID之一等于文件的组ID:
    • 若适当的组存取许可权位被设置,则允许存取。
    • 否则拒绝存取。
  • 若适当的其他用户存取许可权位被设置,则允许存取,否则拒绝存取。

新文件和目录的所有权

新文件的用户ID设置为进程的有效用户ID。

  • 新文件的组ID可以是进程的有效组ID。
  • 新文件的组ID可以是它所在目录的组ID。

文件长度

文件长度包含普通文件的长度、目录文件的长度和符号链接的长度。

  • 对于普通文件,其文件长度可以是0,在读这种文件时,将得到文件结束指示。
  • 对于目录,文件长度通常是一个数,例如16或512的整倍数。
  • 对于符号连接,文件长度是在文件名中的实际字节数。

文件系统

我们可以把一个磁盘分成一个或多个分区,每个分区可以包含一个文件系统。
i节点是固定长度的记录项,它包含有关文件的信息。
在这里插入图片描述
较为详细的文件系统。
在这里插入图片描述

  • 在图中有两个目录项指向同一i节点。每个i节点中都有一个连接计数,其值是指向该i节点的目录项数。只有当连接计数减少为0时,才可删除该文件(也就是可以释放该文件占用的数据块)。这就是为什么“解除对一个文件的连接”操作并不总是意味着“释放该文件占用的磁盘块”的原因。这也就是为什么删除一个目录项的函数被称之为unlink而不是delete的原因。在stat结构中,连接计数包含在st_nlink成员中,其基本系统数据类型是nlink_t。
  • 另外一种连接类型称之为符号连接(symbolic link)。对于这种连接,该文件的实际内容(在数据块中)包含了该符号连接所指向的文件的名字。
  • i节点包含了所有与文件有关的信息:文件类型、文件存取许可权位、文件长度和指向该文件所占用的数据块的指针等等。stat结构中的大多数信息都取自i节点。只有两项数据存放在目录项中:文件名和i节点编号数。i节点编号数的数据类型是ino_t。
  • 因为目录项中的i节点编号数指向同一文件系统中的i节点,所以不能使一个目录项指向另一个文件系统的i节点。
  • 当在不更改文件系统的情况下为一个文件更名时,该文件的实际内容并未移动,只需构造一个指向现存i节点的新目录项,并删除老的目录项。
发布了34 篇原创文章 · 获赞 14 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_44816732/article/details/104357932