Почему «ls» в UNIX и «dir» в DOS имеют разные имена?

2066
siamii

Почему они имеют разные имена для одной и той же команды, перечисляя каталог? Конечно, они могли бы поговорить друг с другом и договориться об одном общем имени, например, cdто же самое, что и для unix, и для dos.

Это решение иметь разные имена создало много головной боли для разработчиков и пользователей, а также увеличило несовместимость между двумя системами. Они сделали это нарочно? Тогда почему "CD" является таким же?

6
Обратите внимание, что PowerShell - новая и предпочтительная командная строка для Windows - определяет как `ls`, так и` dir` как псевдонимы базового `Get-ChildItem` (который способен работать с реестром и другими (возможно, установленными пользователем) поставщиками). в файловую систему). Richard 13 лет назад 0

2 ответа на вопрос

17
Gilles

Обратите внимание, что Unix появился первым (формулировка вашего вопроса выглядит так, как будто это было наоборот).

DOS унаследовал dirкоманду от CP / M, которая получила от VMS . Символ /для ввода параметров (который заставлял DOS принимать другой символ в качестве разделителя каталогов, когда каталоги были введены) имел одинаковое происхождение.

Почему разработчики VMS не следовали Unix? Потому что, когда проектировался VMS, Unix был еще молодым и не стал де-факто стандартом, каким он станет позднее (отчасти благодаря усилиям по стандартизации POSIX ). VMS и Unix имели разные дизайны во многих отношениях; Я сомневаюсь, что были предприняты преднамеренные усилия, чтобы сделать их несовместимыми. CP / M и DOS, а также ранние версии Windows следовали за VMS, потому что в то время не было веской причины выбирать Unix вместо VMS; ведущий конструктор Windows NTранее работал над VMS, что еще больше повлияло на Windows, а не на Unix. Позже, когда Unix вышел в качестве стандартной операционной системы на серверах, Windows была слишком прочно укоренилась, чтобы измениться. Тем не менее, Windows действительно приобрела некоторую ограниченную совместимость с POSIX (иногда с помощью стороннего программного обеспечения); например, внутренние API принимают /в качестве разделителя пути.

В сторону: [очевидно,] (http://bytes.com/topic/python/answers/23123-when-did-windows-start-accepting-forward-slash-path-separator) все системные вызовы MS-DOS приняты `/` в качестве разделителя пути, просто * команды * этого не сделали. (MS-DOS v2 действительно имел возможность изменить разделитель пути командной строки на `/` и префикс опции на `-`, поскольку многие его разработчики использовали для Xenix.) grawity 13 лет назад 0
Unix восходит к 1969 году, а первая опубликованная документация была выпущена в 1971 году. MSDOS начиналась как QDOS (Quick and Dirty OS) компании Seattle Computer Product, разработка которой началась в 1980 году. К тому времени большинство новых программистов знакомились с Unix в колледже, и другие знали об этом. У SCP, MS и IBM (которые, конечно, заказали MSDOS) было множество возможностей перейти на стандарты Unix (вероятно, это заняло бы около двух дней), но, к сожалению, этого не произошло. Я подозреваю, что это было сочетание невежества и высокомерия. Daniel R Hicks 13 лет назад 1
@DanH Не так уж и много: в те дни VMS и другие операционные системы, которые были полностью забыты за пределами IBM, все еще были серьезными соперниками. Gilles 13 лет назад 0
К концу 70-х годов UNIX был «там, где он был», хотя остальные все еще болтались. Конечно, если бы DOS был создан хотя бы год спустя, то UNIX был бы, без сомнения, стандартом де-факто. (Возможно, более раздражающим является то, что многие из внутренних компонентов, которые были добавлены позже, были созданы из «цельной ткани», а не с помощью копирования парадигм UNIX.) Daniel R Hicks 13 лет назад 0
VMS не был доступен до 77, CP / M был разработан в 73/74. Но есть источники влияния DEC: CP / M был разработан для TOPS-10 и PDP-10 (как и ранние продукты MS). TOPS-10 имеет команду DIRECT. TOPS-20 (другая ОС PDP-10) имеет команду DIRECTORY, которая может быть сокращена до DIR. ISTR - операционные системы DEC для PDP-11 (включая Cutter RSX-11 от Cutter), где также используется та же номенклатура (и, следовательно, возможно, также имена команд, основанные на DIRECTORY). Что касается Unix, ISTR, что Unix не распространялся из Bell до 1974/1975, возможно, до позднего времени, чтобы повлиять на CP / M. AProgrammer 13 лет назад 1
4
Tim Kennedy

Команды разные, потому что они разрабатывались параллельно, без взаимодействия. Команды DOS, как правило, являются производными от QDOS, которая сама была производной от CP / M, Программы управления микрокомпьютерами Гэри Килдалла, которая была в значительной степени первой операционной системой для микропроцессоров Intel, изначально предназначенной для процессора Intel 8080 и написанной в значительной степени для включения PL / M для управления дисководом. Все это произошло в начале 1970-х годов.

Linux в значительной степени является производной от Unix, причем многие команды с одинаковыми именами выполняют идентичные (или очень, очень похожие функции). Unix разрабатывался начиная с 1969 года, и большая часть первоначального именования команд происходила параллельно с CP / M.

CP / M был нацелен на персональные компьютеры, тогда как Unix был нацелен на миникомпьютеры, как правило, в корпоративных лабораториях или университетских исследовательских центрах, и между этими двумя усилиями действительно не было никакого сотрудничества.

Теперь он в значительной степени придерживается принципа обеспечения дифференциации, при этом ни одна из сторон не желает признать, что соглашение об именах другой стороны является превосходящим.

Обе системы допускают псевдонимы команд.