文件名存储在哪里?

文件名存储在哪里?
$
$  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.txtaaaaaaaaaaaaaaaaaaaaaaaa.txt,每个文件的内容都是 ascii 字符abcd

文件名不同,内容相同。但它们都占用相同的空间(5 个字节),并且都具有完全相同的 sha256 哈希值。

每个文件的文件名存储在哪里?

答案1

在 Linux 文件系统(即 ext4)中,文件的文件名通常存储在该文件的目录条目中。

另一方面,文件的实际内容存储在文件系统内的数据块中。

为了将它们链接起来,文件系统使用 inode(索引节点)结构。这包括大小、权限、时间戳和所有权等信息(元数据)。

要列出目录条目及其关联的 inode,您可以运行ls -i

“sha256sum”函数仅计算文件内容的哈希值(文件系统调用相关底层数据块返回的数据流)。此计算不包括目录条目和 inode 结构中存在的与文件相关的任何元数据。

相关内容