find命令的目的默认大小单位512字节

find命令的目的默认大小单位512字节

find命令允许您按大小搜索,您可以使用man页面中拼写的单位来指定大小:

File uses n units of space.  The following suffixes can be used:
  `b'    for 512-byte blocks (this is the default if no suffix is used)
  `c'    for bytes
  `w'    for two-byte words
  `k'    for Kilobytes (units of 1024 bytes)
  `M'    for Megabytes (units of 1048576 bytes)
  `G'    for Gigabytes (units of 1073741824 bytes)

b选择“块”而不是“字节”是否有历史原因,我怀疑这是更常见的假设?为什么块是默认值而不是字节?何时以及为什么有人想要使用这个装置?转换为字节/千字节涉及一些数学,作为默认单位似乎不太方便。

答案1

Unix 的第一个版本碰巧在其文件系统和磁盘驱动程序中使用 512 字节块。 Unix 最初是一个非常简约的低级系统,其接口紧密遵循实现,并泄漏了本应保持抽象的细节,例如块大小。这就是为什么今天,“块”在许多上下文中仍然意味着 512 字节,即使可以有不同的块大小,甚至可能应用于给定文件的不同块大小(一个用于文件系统,一个用于卷管理器,一个用于卷管理器)磁盘…)。

该实现通过计算为文件分配了多少数据块来跟踪磁盘使用情况,因此可以轻松地将文件的大小报告为块数。磁盘使用率和文件大小可能不同,不仅因为磁盘使用率通常是四舍五入到整数块的大小,还因为稀疏文件具有比通常需要的大小更少的块。据我所知,早期实现稀疏文件的Unix系统find -size使用的是文件使用的块数,而不是文件大小;现代实现使用文件大小四舍五入(在POSIX规范)。

最早的find实现仅接受 后的一些块-size。在某个时候,find -size开始接受c后缀来表示一些C字符而不是块;我不知道是谁开始的,但事情是这样的4.3BSD。后来出现了其他后缀,例如在 FreeBSD 中是版本6.2引入了k,M和其他后缀,但b我认为仅存在于 GNU 和 BusyBox find 中。

从历史上看,许多程序交替使用“字符”和“字节”,并且倾向于更喜欢“字符”一词。例如,wc -c计算字节数。对多字节字符的支持以及因此与字节计数不同的字符计数是一个相对较新的现象。

总结起来就是没有目的。 512 字节的块大小、它是默认单位这一事实以及该字母的使用b并不是故意出现的,而是历史偶然造成的。

答案2

块比字节更重要,因为从一开始,文件就使用了给定数量的块而不是字节在文件系统上。一个字节的文件仍然占用磁盘上的一个块。

例如find(1)Unix 第六版的手册页说

-size n         True if the file is n blocks long (512 bytes
                 per block).

手册页没有提供表示其他尺寸测量单位的便捷方法。

POSIX 在描述中明确指出find它使用 512 字节块:

-size n[c]
如果文件大小(以字节为单位)除以 512 并四舍五入为 n,则主项应评估为 true。如果 n 后跟字符“c”,则大小应以字节为单位。

在一些较旧的系统上,例如HPUX 10.20手册页上没有明确说明。

相关内容