我想知道是否有任何历史或实际原因导致该umount
命令不存在unmount
。
答案1
这可以追溯到Unix 的第一版,其中所有标准文件名最多只有 6 个字符长(想想passwd
),即使这个版本支持百日咳文件名包含 8 个字符。大多数命令都有一个以.c
(eg )结尾的关联源文件umount.c
,仅留下 6 个字符作为基本名称。
6 个字符的限制也可能是早期开发版本的保留,或者继承自当时确实有 6 个字符限制的 IBM 系统。 (早期的 C 实现对标识符有 6 个字符的限制 - 接受更长的标识符,但编译器只查看前 6 个字符,因此foobar1
和foobar2
是相同的变量。)
(我想我记得一个umount
手册页将拼写列为来源不明的错误,但我现在找不到它。)
答案2
似乎有些错误信息已经存在了一段时间了。
命令具有缩写名称的最可能原因umount
是它源自它使用的系统调用的名称: umount()
。
“卸载”系统调用具有该名称的可能原因umount()
是,在某些类型的系统上,早期链接器将外部标识符的长度限制为少至 6 个字符(仅一种情况)(并且保持与此类工具的兼容性是有意义的)当时),“umount”是“unmount”缩写的逻辑形式。参见第一版第179页C 编程语言获取发布时各种感兴趣的系统的外部标识符特征的列表。
另请注意,早期的 C 编译器将标识符的前 8 个字符视为重要字符,但允许标识符更长。 (K&R 第 33 页)
请注意,符号表中标识符的长度有没有什么无论如何直接处理文件名长度,至少在 Unix 中不行(Unix 符号表,自 V1 起,有 8 个字符作为标识符,尽管 V1 手册中指出汇编器”生成最多 7 个字节的符号”)。
答案3
出于同样的原因,creat
系统调用未拼写create
?