You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于文件名称存储位置的技术问询

文件名称的存储位置技术问询

我执行了以下操作:

$ echo "abcd" > a.txt
$ echo "abcd" > aaaaaaaaaaaaaaaaaaaaaaaa.txt
$ sha256sum a*
fc4b5fd6816f75a7c81fc8eaa9499d6a299bd803397166e8c4cf9280b801d62c  a.txt
fc4b5fd6816f75a7c81fc8eaa9499d6a299bd803397166e8c4cf9280b801d62c  aaaaaaaaaaaaaaaaaaaaaaaa.txt
$ ls -hl
total 0
-rwxrwxrwx 1 erh-unix erh-unix 5 Sep 27 11:13 a.txt
-rwxrwxrwx 1 erh-unix erh-unix 5 Sep 27 11:13 aaaaaaaaaaaaaaaaaaaaaaaa.txt

我创建了两个文件:a.txt和aaaaaaaaaaaaaaaaaaaaaaaa.txt,内容都是ASCII字符abcd。文件名不同,但内容完全一致,它们占用的空间相同(5字节),SHA256哈希也完全一样。想问问这些文件的文件名是存在哪里的?

嘿,这个问题问到点子上了!在你用的这类类Unix文件系统(比如Linux常用的ext4、XFS这些)里,文件名和文件本身的内容、元数据是分开存储的,具体来说:

  • 文件名存储在**目录项(Directory Entry)**里:每个目录其实本质上是一个特殊的文件,它的内容就是该目录下所有文件/子目录的目录项集合。每个目录项会记录文件名,以及这个文件名对应的文件的inode编号。
  • 而文件的内容、大小、权限、创建时间这些元数据,是存在**inode(索引节点)**里的——inode里完全不包含文件名,只负责管理文件的实际数据块和属性。

回到你的例子:你创建的两个文件内容相同,所以它们的SHA256哈希一致,大小也相同,但它们是两个独立的inode(你可以用ls -i命令查看,会看到两个不同的inode编号),每个inode对应目录里的一个目录项,分别存储a.txt和aaaaaaaaaaaaaaaaaaaaaaaa.txt这两个文件名。

简单来说,文件名就像是目录给文件贴的“标签”,用来让用户找到对应的inode,进而访问到文件内容;而文件内容本身和这个“标签”是分开放置的,所以即使标签不同,只要内容一致(或者像你这样是两个内容相同的独立文件),哈希和大小就不会受文件名影响啦。

备注:内容来源于stack exchange,提问作者jester

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.21 12:13:07