给定一个包含单个文件的文件h
。如果我find
使用-ls
原语运行,我会得到以下输出:
$ cat some_file
h
$ find . -ls
2750606 0 drwxr-xr-x 4 mbigras FOO\Domain Users 136 May 18 12:35 .
3067730 16 -rw-r--r-- 1 mbigras FOO\Domain Users 6148 May 18 12:33 ./.DS_Store
3067836 8 -rw-r--r-- 1 mbigras FOO\Domain Users 2 May 18 12:35 ./some_file
通过man find
搜索-ls
我们可以发现输出的是以下文件信息:
它的 inode 号、以 512 字节块为单位的大小、文件权限、硬链接数、所有者、组、以字节为单位的大小、上次修改时间和路径名。
我想知道一些事情:
- 如果其中
some_file
只有h
一个字节那么为什么“字节大小”是2?我希望它是 1。 - 如果第二个数字是“512 字节块的大小”,那么为什么它比“字节大小”大?我预计它是 0 或至少更小。
答案1
some_file
containsh
后跟一个换行符,总共两个字节。尝试类似的东西
hexdump -C some_file
逐字节查看文件的内容。
任何 1 到 512 字节之间的文件都将占用一个 512 字节块(如果这是磁盘上的最小分配大小),就像 513 字节文件将占用两个 512 字节块一样。块计数不会向下舍入到最接近的整数。
答案2
看看背后的原因是什么,为什么我们使用 512 字节;假设一个文件大小为 513 字节,那么为了存储该文件,我们需要在硬盘上使用 2 个大小为 512 字节的块。为了保存第513个字节,我们必须分配一个包含512个字节的完整硬盘块。因此,由于内部碎片,会浪费511个字节,因此,为了减少这种内部碎片,最好是保持块的大小尽可能小,通过实验我们发现 512 字节是最佳大小,如果减小它,则可能需要访问很多块才能访问文件,并且需要时间。因此,为了优化这些内容,他们通过实验发现 512 字节是更好的大小,以提高效率并减少内存浪费。