![文件名是如何存储的?](https://linux22.com/image/1340406/%E6%96%87%E4%BB%B6%E5%90%8D%E6%98%AF%E5%A6%82%E4%BD%95%E5%AD%98%E5%82%A8%E7%9A%84%EF%BC%9F.png)
我注意到重命名文件不会改变其哈希值。我还注意到创建一个空文件会得到一个零字节的文件,但它有一个文件名。
由于文件名似乎会随文件在设备间传输,因此我想知道文件名到底是什么?为什么可以在不改变哈希值的情况下更改文件名,为什么它似乎不占用任何空间?
我想如果我了解它们是如何存储的,就可以回答这些问题。
答案1
在 NTFS 中,所有文件数据(文件名、创建日期、访问权限(通过使用访问控制列表)和内容)都是作为元数据存储在主文件表中。在 Windows 世界中,您可能还听说过文件分配表. 其他文件系统有其他名称和结构。
所有文件系统都以这种方式工作。通常会在磁盘的最开始处保留一定量的空间,紧接着引导扇区。该空间包含一个数据结构,其中包含用于检索文件的信息。
主文件表不是文件。它只是有组织的数据。事实上,文件只是具有开头和大小的数据,存储在 MFT、FAT 或类似文件中。更改文件名时,您不会更改文件,只会更改主文件表中的某些字节。
由于名称和属性与数据不同,您可以将存储在 Linux 服务器上的文件下载到 Windows 机器上。传输的是数据,而不是元数据。您必须自己命名并选择文件的位置(尽管服务器和浏览器可以提示您原始文件名)。