Почему «umount» не написано «unmount»?


64

Мне интересно, есть ли какая-либо историческая или практическая причина, почему umountкоманда не является unmount.

Ответы:


79

Это относится ко времени самого первого издания Unix , где все стандартные имена файлов были длиной не более 6 символов (подумайте passwd), хотя эта версия поддерживала 8 символов в имени файла . У большинства команд был связанный исходный файл, оканчивающийся на .c(например umount.c), который оставлял только 6 символов для базового имени.

6-символьное ограничение могло также быть пережитком более ранней версии разработки или унаследовано от текущей системы IBM, которая имела 6-символьное ограничение. (Ранние реализации C имели ограничение в 6 символов на идентификаторы - более длинные идентификаторы были приняты, но компилятор просматривал только первые 6 символов, поэтому foobar1и foobar2представлял собой одну и ту же переменную.)

(Мне показалось, что я запомнил umountстраницу руководства, в которой правописание указывалось как ошибка неизвестного происхождения, но сейчас я не могу его найти.)


21
Имя команды из 6 символов + .c(или .s) расширение = ограничение имени файла до 8 символов.
geekosaur

@geekosaur: Ах да, исходный файл. Если ты напишешь ответ, я удалю свой.
Жиль "ТАК - перестань быть злым"

5
Эх, просто комментируй, если хочешь.
geekosaur

@geekosaur: Я тоже думал о man-странице, но в V1 не было команды man (и называется одна из man-страниц directory, которая еще не подошла бы). Так что мне интересно, почему passwdбыло усечено до 6 символов (просто еще не было passwdкоманды /etc/passwd).
Жиль "ТАК - перестань быть злым"

2
Может быть, это из-за греческого суффикса óὐ, что означает «нет», это также объясняетurandom
Энтони Гарсия

8

Кажется, здесь какое-то время была какая-то неверная информация.

Наиболее вероятная причина umountкоманды , имеющая сокращенное название, потому что это следует из названия системного вызова , который он использует: umount().

Вероятная причина, по которой системный вызов «unmount» имеет имя, umount()заключается в том, что ранние компоновщики ограничивали длину внешних идентификаторов всего лишь 6 символами (только одного случая) в некоторых типах систем (и имело смысл поддерживать совместимость с такими инструментами в то время), и «umount» является логической формой сокращения для «unmount». См. Страницу 179 первого издания языка программирования C для получения списка характеристик внешнего идентификатора различных систем, представляющих интерес на момент публикации.

Также обратите внимание, что ранние компиляторы C обрабатывали первые 8 символов идентификатора как значимые, но позволяли идентификаторам быть длиннее. (K & R стр. 33)

Обратите внимание, что длина идентификаторов в таблицах символов не имеет никакого отношения к длине имени файла, по крайней мере, в Unix (таблицы символов Unix, начиная с V1, имеют 8 символов для идентификаторов, хотя в руководстве по V1 отмечено, что ассемблер " генерирует символы не более 7 байтов " ).


-1

По той же причине creatсистемный вызов не пишется create?

https://stackoverflow.com/questions/1713457/what-did-ken-thompson-mean-when-he-said-id-spell-create-with-an-e


4
Нет. Сожаление в цитируемой вами цитате связано с тем, что они могли добавить 'e', ​​даже несмотря на то, что в другом ответе было указано ограничение в 6 символов. На самом деле нет веских причин для его усечения, в отличие от umount.
Уоррен Янг

Я предполагаю, что к тому времени было традицией обрезать буквы, если можно.
Шадур
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.