Linux 文件知识 补充
目录与文件路径解析目录亦是文件存文件与 inode 号的映射关系所以访问文件需打开当前目录。但是我们要访问当前目录去哪找也就是说当前工作目录的 inode 去哪找想向上想我们打开当前目录要从上级目录找那又如何找实际上我们打开一个文件要把路径中所有目录全部解析从根目录开始这个过程叫做 Linux 路径解析访问文件本质是进程访问进程的 CWD 提供路径。最开始的路径从哪来根目录其下又有许多缺省目录所以你新建的任何文件都是在系统指定目录下新建的由系统和用户共同构建 Linux 路径结构。路径缓存每次访问文件都从头开始未免太慢所以 Linux 会缓存历史路径结构有个维护树状路径结构的内核结构体叫struct dentry 。所以当你打开一个目录第一次会比较慢后面就会变快。挂载分区我们通过 inode 号在指定分区找文件但是我们知道 inode 是不能跨分区的那我们怎么知道我们在哪个分区呢路径解析过程中内核会通过挂载点切换文件系统分区inode 只在当前文件系统内有效无需跨分区识别。什么意思呢我们假设一个一个分区是一栋栋由 “连廊”挂载点连接的的 “楼”inode 是楼里面的房间号。根目录永远属于系统的主分区我们假设叫 A 楼当内核根据用户需求行动在该分区中找到了 home 目录发现它是一个挂载点也就是说home 是 A 楼到 B 楼之间的连廊。所以内核在接下来的操作就来到了另一个分区进行。所以inode 只在 “当前这栋楼” 里是唯一的内核永远是先确定 “在哪栋楼”再用 inode 找房间自然就不存在跨分区的问题了软硬链接硬链接在 Linux 中其实可以让多个文件名对应同一个 inode 这种操作叫做硬链接。我们使用 ln 命令可以将两个文件硬链接起来当我们查看它们的 inode 号就会发现完全一样从硬链接的规则其实不难想到一种情况创建硬链接时目标文件不能预先存在。所以硬链接其实是一种备份操作。内核会记录一个文件的硬链接数所以删除一个文件时会干两件事1.在目录中将对于的记录删除。2.将硬链接数 -1 之后如果为 0 则释放对应磁盘空间。当我们创建一个空目录会看到我们以前就知道.表示当前目录. .表示上级目录。现在再看它们的硬链接数你能想到什么呢.在上级目录有一份在自己里面有一份所以硬链接数为 2而. .相同但是多了其下级目录里面的一份所以硬链接数为 3。软链接硬链接是通过inode引用另一个文件而软链接是通过名字引用另一个文件。软链接产生的新文件和被引用文件的 inode 是不一样的我们用一个例子来搞清楚软链接的作用code.exe 是 code.c 形成的可执行文件运行之后打印hello Im code.c 。通过 code 引用 code.exe 当我们运行 code 结果和运行 code.exe 完全一样可能到这还有点难以理解但是联想一下我们的 Windows 电脑电脑的桌面上有很多软件的图标当我们双击图标就可以打开对应的文件。但是我们删除图标真正的文件并不会被删除因为那只是一种快捷方式。那么软链接不就是 Linux 创建快捷方式的操作吗