$
$ 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 哈希值。
每个文件的文件名存储在哪里?
答案1
在 Linux 文件系统(即 ext4)中,文件的文件名通常存储在该文件的目录条目中。
另一方面,文件的实际内容存储在文件系统内的数据块中。
为了将它们链接起来,文件系统使用 inode(索引节点)结构。这包括大小、权限、时间戳和所有权等信息(元数据)。
要列出目录条目及其关联的 inode,您可以运行ls -i
“sha256sum”函数仅计算文件内容的哈希值(文件系统调用相关底层数据块返回的数据流)。此计算不包括目录条目和 inode 结构中存在的与文件相关的任何元数据。