Командная строка и MS-DOS - это одно и то же?

12

Я поспорил со своим другом, что командная строка - это просто версия MS-DOS с графическим интерфейсом, которая работает в среде форм Windows. Он полностью не согласен со мной.

Кто прав?

user978733
источник
2
Что ваши исследования сказали вам до сих пор?
Slhck
4
cmd.exeэто совершенно другой зверь из MS-DOS.
Сатьяджит Бхат
7
MS-DOS - это операционная система. Командная строка Windows - это интерфейс, похожий на MS-DOS.
Der Hochstapler

Ответы:

20

Когда-то это было правдой, но это уже не так.

Из интерфейса командной строки MS-DOS # Windows - Википедия :

Все версии Microsoft Windows имели интерфейс командной строки (CLI), подобный MS-DOS. Это может запускать многие DOS и различные утилиты командной строки Win32, OS / 2 1.x и Posix в одном сеансе командной строки, позволяя передавать по трубам между командами. Пользовательский интерфейс и значок до Windows 2000 следовали стандартному интерфейсу MS-DOS.

Потребительская Windows (до 3.11, Win9x, WinME) работала как графический интерфейс пользователя (GUI), работающий поверх MS-DOS. С Windows 95, 98 и ME часть MS-DOS была интегрирована, рассматривая обе операционные системы как полный пакет. Командная строка обращалась к командной строке DOS (обычно command.com) через модуль Windows (winoldap.mod).

Новая линейка Windows (Windows NT) загружается через ядро, единственной целью которого является загрузка Windows. Нельзя запускать приложения Win32 в системе загрузчика так, как OS / 2, UNIX или Consumer Windows могут запускать сеансы в символьном режиме.

Так что нет, в каждой Windows из семейства NT (например, XP, Vista, 7, 8) командная строка и MS-DOS визуально похожи, но совершенно разные.

Деннис
источник
На самом деле, я бы сказал, что это никогда не было правдой. Эквивалентом была cmd.exeбы command.comдовольно небольшая часть MSDOS.
9

Это разные вещи - командная строка - это не MS-DOS, но для пользователя это может быть то же самое, что и для одних и тех же вещей.

Так что это зависит от вашей точки зрения. С технической точки зрения ваш друг это правильно, но с точки зрения пользователя вы правы (вроде как есть различия, которые заметит эксперт).

ChrisF
источник
Я думаю, что вы имеете в виду противоположное право? Он тот, кто технически прав, потому что они буквально не одно и то же, друг - тот, кто практически прав, потому что они одно и то же для пользователя.
Брэд
@Brad - я прочитал вопрос так: ОП сказал, что они одинаковые, но его друг сказал, что это не так.
ChrisF
8

Нет.

(Если ваше определение равенства не распространяется на прошлое ». Это текстовый интерфейс, и я могу запускать программы из него. « )

То, что запускается, когда вы нажимаете командную строку в меню «Пуск», - это командный процессор Windows, он же cmd.exe. Его встроенные команды и синтаксис сценариев (включая многие причуды) основаны на древних command.comиз CP / M и более поздних MS-DOS, но, кроме того, они совершенно разные вещи. Кроме того, command.comэто 16-битная программа, в то время cmd.exeкак это родное консольное приложение Windows.

В Windows 95, 98 и ME все было по-другому, и command.com в этом случае виртуальная машина MS-DOS работала бы под управлением Windows в качестве гипервизора (да, у них уже было такое). Там у вас была целая виртуальная машина с DOS. Но на Windows NT, 2000, XP, Vista и 7 - нет. DOS живет только там, ntvdm.exeгде находится NT Virtual DOS Machine, представляющая собой тонкий слой эмуляции, фиксирующий вызовы, которые ЦП не может выполнять напрямую (поэтому он работает быстрее, но хуже, чем DOSBox).

В любом случае даже command.comбыла просто оболочка для DOS. Это была не операционная система.

Внутри я на самом деле съеживаюсь каждый раз, когда вижу людей, обращающихся к окну с серо-черным текстом как MS-DOS. В подавляющем большинстве случаев они на самом деле не знают, что имеют в виду.

детеныш
источник
4

Насколько я понимаю, MS-DOS - это дисковая операционная система, выпущенная Microsoft. Командная строка - это неграфический интерфейс, который позволяет вам взаимодействовать с вашей операционной системой.

Командная строка - это приложение интерпретатора командной строки, доступное в большинстве операционных систем Windows, официально называемое Windows Command Processor, но иногда называемое командной оболочкой. Командная строка - это программа для Windows, которая эмулирует многие возможности командной строки, доступные в MS-DOS, но на самом деле это не MS-DOS.

Командная строка - это версия command.com для MS-DOS с графическим интерфейсом. cmd.exe - это родное приложение Windows, обычно работающее в консоли Win32. Это позволяет ему использовать функции, доступные для собственных программ на платформе, которые в противном случае недоступны для программ DOS.

Например, поскольку cmd.exe является приложением в текстовом режиме в OS / 2, он может использовать реальные конвейеры в командных конвейерах, позволяя обеим сторонам конвейера работать одновременно. В результате можно перенаправить стандартную ошибку в cmd.exe, в отличие от COMMAND.COM. (COMMAND.COM использует временные файлы и запускает две стороны последовательно, одну за другой.)

На самом деле cmd.exe - это программа для Windows, которая работает как DOS-подобный интерпретатор командной строки. Как правило, он совместим, но предоставляет расширения, которые касаются некоторых ограничений COMMAND.COM (приведенные выше пояснения приведены в Википедии).

Чт йен тун
источник
2

Твой друг прав. MS-DOS является / была операционная система (Microsoft Disk Operating System является то , что аббревиатура расшифровывается.) Пользовательский интерфейс для DOS называется ( ) командной строки.

Первые несколько версий Windows работали поверх DOS (что делало их технически работающими средами, хотя я не уверен, что кто-то больше делает это различие), но более поздние ОС, начиная с ядра NT, этого не сделали - DOS исчезла.

Тем не менее, люди все еще нуждались в функциональности, предоставляемой командной строкой, и вместо command.com мы получили command.exe (и в наши дни cmd.exe), который при запуске выдает нам командную строку.

Но это не единственная (и нигде рядом с первой) командная строка, которую использовали люди. Командные строки также называются оболочками, и в Unix их много, а команды разные и часто очень мощные. Говоря о Power, Microsoft создала новую командную строку для Windows под названием PowerShell, которая является невероятно мощной и интересной. См. Википедию для получения дополнительной информации: http://en.wikipedia.org/wiki/Command-line_interface#Operating_System_Command-Line_Interfaces

Марк Аллен
источник
> Пользовательский интерфейс для DOS называется командной строкой. Также «командная строка».
Synetech
и CLI или интерфейс командной строки.
Марк Аллен
Технически, CLI - это тип интерфейса, а не конкретный экземпляр. Это все равно что называть Windows GUI (например, я использовал Windows GUI ). Вы можете сказать это, и это технически верно / точно, но это было бы просто странно.
Synetech
Я просто называю это командной строкой. :)
Марк Аллен
Я просто называю это DOS (по крайней мере, раньше, я неохотно называл это чистой DOS ).
Synetech
1

Они не одинаковы!

Очевидно, многие люди не понимают, что приглашение DOS и командная строка Windows - это не одно и то же. На самом деле это две разные программы - COMMAND.COM и CMD.EXE соответственно.

Знай свои командные строки

Во-первых, из-за различий в платформе (DOS против Windows) и интерпретаторе (command.com против cmd.exe), будут очевидные различия, такие как

  • DOS работает в полноэкранном режиме без оконного режима, поэтому нет mode con:cols=COL lines=ROWкоманды для изменения размера консоли и нет titleкоманды
  • DOS не поддерживает многозадачность, многопользовательский режим, реестр, разрешения, длинные имена файлов, символические ссылки / жесткие ссылки, сеть, Unicode, динамические диски и расширенные тома поддерживают ... поэтому нет инструментов для управления этими

Но есть также значительные различия в возможностях и синтаксисе внутренних команд между command.com и cmd.exe, а также в некоторых внешних инструментах в двух средах. В MS-DOS есть

  • Нет функций, кодовых блоков ()и локальных областей, которые означают

    • for, if... должна сопровождаться одной командой в одной строке
    • нет exit /bилиgoto :eof
    • нет setlocalиendlocal
    • gotoможно только перейти к метке, callможно только запустить другой пакетный файл
    • команды не могут быть сгруппированы как

      (
      command1
      command2
      ) >output.txt
      
  • Нет экранирующего персонажа ^. Печать специальных символов будет проблемой, и нет возможности запуска многострочных команд

  • Никаких специальных форматов if
    • нет if cmdextversionиif defined
    • нет числового и регистрозависимого сравнения строк if [/i] string1 compare-op string2
  • Нет истории команд и завершение командного аргумента
  • Нет косвенного расширения (например, call set %%var%suffix%=stringпеременных) и нет отложенного расширения (например echo !var%suffix%!)
  • Никаких сложных манипуляций со строками
  • Частичное имя переменной не соответствует set, и
    • нет, set /aпоэтому вы не можете делать арифметику
    • нет, set /pчто означает, что чтение ввода пользователя является болью
    • нет set "var=value"синтаксиса
  • Нет %*для всей командной строки
  • Нет for /d, for /rили for /l. Нет, for /fтак что читать входные данные из файлов также сложно. Единственная форма forв DOS этоFOR %variable IN (set) DO command [command-parameters]
  • Нет findstr, и findне поддерживает Unicode
  • Нет специальных переменных среды, таких как%CD% %DATE% %TIME% %RANDOM% %ERRORLEVEL% %CMDEXTVERSION% %CMDCMDLINE% %HIGHESTNUMANODENUMBER%
  • Ограниченная возможность смены каталога
    • нет pushd/popd
    • Нет cd /d. Также нет cd path with spacesи cd "path with spaces"из-за отсутствия поддержки длинных имен файлов
  • нет color
  • нет forfiles
  • Нет assoc(потому что нет графического интерфейса, и файлы должны открываться вручную из командной строки, поэтому нет необходимости в сопоставлении файлов)

В Windows много полезных внешних команд, таких как where, sort, more (в некоторых версиях DOS), choice ... также отсутствуют в DOS


И это то, что сказал MS 'Rich Turner

Также Cmd! = MS-DOS!

Я также хочу указать на распространенное заблуждение, закрепленное в статьях, подобных приведенным выше: Cmd <> MS-DOS!

На самом деле:

  • В последний раз Microsoft поставляла «новую» версию MS-DOS (v8.0 в Windows ME) 16 сентября 2000 года - 16 лет назад (на момент написания статьи) !!
  • MS-DOS была операционной системой (хотя по сегодняшним меркам это относительно простая ОС), основным пользовательским интерфейсом которой была оболочка командной строки, пока Windows 3.x и 9.x не появились и не работали с MS-DOS.
  • Язык сценариев командной оболочки MS-DOS был относительно лаконичным и умеренно мощным, но в нем отсутствовали многие из более богатых и более продвинутых функций, которыми мы обладаем в современных PowerShell, Bash и т. Д.
  • В то время как более поздние версии MS-DOS становились все более изощренными и добавляли / заменяли некоторые более старые сборки новым кодом, написанным на «C», большая часть MS-DOS оставалась написанной в сборке x86 для эффективности, и потому что это был единственный способ в то время получить доступ ко многим аппаратным устройствам и периферии. Это сделало MS-DOS не переносимым к процессорам не x86. Если вы так склонны, вы можете загрузить исходный код для MS-DOS v1.1 и v2.0, чтобы увидеть, сколько ранних версий MS-DOS было написано в сборке x86 (подсказка: почти все Это)!

https://devblogs.microsoft.com/commandline/rumors-of-cmds-death-have-been-greatly-exaggerated/


дальнейшее чтение

В заключение, по функциональности они могут быть немного похожи, но в остальном сильно отличаются

phuclv
источник
1
Ничего себе, это похоже на отличный ответ для В чем разница между CMD и командной строки в Windows? тоже
SamB