• APUE Chapter 4 Files and Directories(2)—File systems


         看一下UFS的构成。

         1、每一个disk drive都可以分成好多小的partitions,每个partition都可以使用一种file system。在Unix世界中有各种各样的File system可供使用:UFS,PCFS,HSFS等等。这里介绍UFS。

         看下图:

    disk drive partitions and file system

         书上没有详细介绍各个细节,只是介绍了i-node。在这个file system中,i-node里存放了有关文件的几乎全部的信息:file type, access permission bits, file size, pointers to the file’s block, and so on.

         只有两个信息没有在i-node中存储:i-node number和filename。

         2、具体看一下i-nodes和data blocks中的信息:

    cylinder group

         根据这些信息,可以定义几个links:

            · hard links:对于每一个i-node,有多少directory entry指向它,它自己是知道的,这个值储存在st_nlinks中(对应的数据类型为nlink_t,在系统中有LINK_MAX表示最大hard links的个数)。只有当hard links减为0的时候,它所对应的data blocks才会释放。

            · symbolic links:对于一个i-node,如果它的file type为S_IFLNK(symbolic link),那么它所指向的data block就是一个名字,表示它所指向的那个文件。比如一个directory entry中的filename为lib,它指向一个i-node,这个i-node是一个link file,它指向的data block中写着/usr/lib,那么它指向的文件就是/usr/lib这个文件。

         3、再看一下在一个目录中新建一个目录会产生什么情况:

    image

         当前目录是右边的这个directory block,在它之下新建一个testdir目录。

         先看右边,第一个entry表明它的filename是dot,它的i-node number是1267,那么它就代表一个i-node,这个i-node的file type是directory。它新建一个目录,filename是testdir,i-node number是2549,它指向一个新的i-node,这个i-node 的file type也是directory。这个i-node指向一个directory block,这个block中存放着有关2549这个目录的信息。

         leaf directory  <==>  st_nlink=2

         other directory  <==> st_nlink>=3

         4、文件的重命名。

         这个很简单,只是在directory block中新建一个entry,它指向同一个i-node,只不过把filename变一下。然后再把原来的directory entry删除。

         操作完成后,i-node中的st_nlink的值没有发生改变。

  • 相关阅读:
    [nginx&php]相关的Q&A
    [C++] 类中的虚函数
    [Linux] 从外网访问内网硬盘
    官网上下载Python安装包的选择
    计数排序的优化版
    插入排序
    Python一些坑
    Linux 一些冷门实用的命令
    分布式爬虫中的在ubuntu镜像里面安装redis的一些细节(-)
    vscode快捷键
  • 原文地址:https://www.cnblogs.com/wangshuo/p/2033902.html
Copyright © 2020-2023  润新知