dav*_*mos 3 filesystems symlink files
Unix 中有很多类型的特殊文件,例如符号链接、设备文件和 proc 文件(在 下/proc
)。/proc
文件只是普通文件,甚至是文本文件。但对于其余的,我只知道如何使用它们,但我不知道它们的内部结构和它们是什么(深入)。不幸的是,所有访问文件的方式都只能获取它们所代表的对象。换句话说,没有办法获得内部表示。
对于符号链接,毫无疑问有一个字符串来存储其目标的路径。但是,如果只有一个字符串,如何与纯文本文件区分开来呢?如果有一个由文件系统驱动程序指定的特殊标头,它是什么?有什么约定吗?谁能告诉我符号链接指向的二进制表示/usr/bin/bash
是什么?
对于设备文件(节点),它们的二进制结构和表示是什么?根据他们的行为,他们必须包含有关接口号和驱动程序的信息。但这会使它们的大小相差很大。任何人都可以在二进制级别解释这一点吗?
对于符号链接和设备文件的兼容性(我知道同一个设备文件不可能在两个不同的环境中工作,但我们可以发挥我们的想象力来做一个实验)是这些文件的二进制内容强烈依赖于文件系统类型和操作系统的内核?例如,如果我复制(不是通过cp
命令,只是写入相同的二进制内容)到不同的文件系统(比如从 ext4 到 xfs),这个文件(符号链接或设备文件)是否仍然有效和功能?将它从 Linux 机器复制到 BSD 机器时怎么样?
或者它们不是文件,而只是文件系统头部分中的特殊记录?
“特殊”文件仍然是文件,像“常规”文件一样存储在文件系统中。目录、文件、符号链接等根据它们的类型进行区分,这些类型明确存储在文件系统中。有关您可能遇到的各种文件类型的详细信息,请参阅了解 UNIX 权限和文件类型。
文件的存储方式以及可以存储的文件取决于文件系统。一些文件系统支持 Unix 风格文件类型的子集;例如,FAT 不能存储文件或目录(和卷标)以外的任何内容。这意味着“特殊”文件的存储取决于文件系统,您不能将代表文件的位从一个文件系统复制到另一个文件系统。
符号链接存储其目标的文本表示。在大多数当前的 Unix 风格的文件系统中,除了符号链接的“核心”信息(在其 inode 中)之外,还有用于短目标的空间;更长的链接需要分配一个数据块。
设备节点确实存储标识符,称为节点的主要和次要。这是两个具有固定存储要求的小数字,并且在 inode 中为它们提供了空间。这些数字是特定于操作系统的,因此您无法在保留其功能的同时将节点从 Linux 复制到 BSD。
您可以在内核的 Ext4 文档 中查看 Ext4 存储此信息的方式的详尽细节。寻找i_mode
特别是看到文件的类型的存储方式。
归档时间: |
|
查看次数: |
370 次 |
最近记录: |