我搜索但找不到任何东西 - 我正在寻找 ext 文件系统中符号链接的文件结构的细分(以字节为单位)。
我试过创建一个符号链接文件,然后hexdump在符号链接上使用,但它抱怨它是一个目录(链接是一个文件夹),所以它显然试图转储链接指向的文件/文件夹而不是链接本身。
Adm*_*Bee 17
您没有提供其他详细信息,因此此解释目前主要针对 Linux 中常见的 EXT 文件系统。
如果您查看 eg 提供的符号链接的“大小” ls -l,您会注意到大小与其指向的目标名称的长度一样大。因此,可以推断,作为一个符号链接保存在文件类型的元数据的“实际”的文件仅包含路径链接目标为文本,并解释(尤其是标志S_IFLINK在i_modeinode中的链接文件的领域附加到,其中还存储了权限位;请参阅此内核文档参考)。
为了提高性能并减少设备 IO,如果符号链接短于 60 字节,它将存储在i_blockinode 本身的字段中(请参阅此处)。由于这使得单独的块访问变得不必要,这些链接被称为“快速符号链接”,而不是指向更长路径的符号链接,后者回退到将链接目标作为文本存储在外部数据块中的“传统”方法。
这完全取决于文件系统。
通常,符号链接目标按原样存储在 inode 块的额外空间中,与小目录和小文件的存储方式相同。不需要任何特殊的数据格式——文件模式位已经确定它是一个符号链接,应该这样对待。目标是“实际内容”:readlink -n /path/to | hexdump如果您真的想使用hexdump.
在符号链接上调用 lstat(2) 时,st.st_size将包含目标的长度(不包括任何终止的 NUL 字节)。
hexdump在符号链接上使用根本不是在查看 ext4 文件系统。它着眼于面向应用程序的抽象。在这一层没有什么可看的。打开符号链接将尝试根据路径解析语义(no O_NOFOLLOW)或失败(O_NOFOLLOW)打开它所指的内容。在这个抽象层读取内容的方法是readlink,它只会给你传递给symlink它来创建它的字节序列。这不会告诉您有关它在磁盘上的表示方式的任何信息。
要检查磁盘上的表示,您需要打开(或使用打开的工具)块设备,并遍历文件系统结构,直到到达您想要查看的符号链接。我相信 ext4 将小内容符号链接内联存储在 inode 结构中(磁盘上没有单独的数据块),并将大内容符号链接存储为包含链接内容的文件,但类型为符号链接。
| 归档时间: |
|
| 查看次数: |
1430 次 |
| 最近记录: |