COMMAND.COM
COMMAND.COM — это командный интерпретатор (оболочка) операционных систем MS-DOS, PC DOS, DR-DOS, FreeDOS и ранних версий Microsoft Windows (до Windows 9x). Представляет собой исполняемый файл, который обеспечивает взаимодействие пользователя с операционной системой через текстовый интерфейс командной строки. COMMAND.COM выполняет внутренние команды, загружает и запускает внешние программы, обрабатывает командные файлы (сценарии с расширением .BAT) и управляет загрузкой операционной системы.
История
Происхождение и MS-DOS
COMMAND.COM был создан компанией Microsoft в 1981 году для первой версии MS-DOS (PC DOS 1.0), разработанной для IBM PC. Изначально он был частью операционной системы, поставлявшейся с первыми персональными компьютерами IBM. Основой для COMMAND.COM послужил интерпретатор команд из CP/M, популярной операционной системы того времени. В MS-DOS 1.0 COMMAND.COM был неотъемлемой частью ядра системы, но уже в версии 2.0 его функциональность была расширена: появилась поддержка подкаталогов, перенаправления ввода-вывода и пакетных файлов.
Эволюция в Windows
С выходом Windows 3.0 и Windows 3.1 COMMAND.COM продолжал использоваться как среда для запуска DOS-приложений и выполнения системных команд. В Windows 95 и Windows 98 он оставался основным интерпретатором для режима MS-DOS, который можно было запустить отдельно, а также использовался при загрузке системы в защищённом режиме. В Windows ME (Millennium Edition) доступ к COMMAND.COM был ограничен, а в Windows NT, 2000 и XP его заменил более функциональный cmd.exe, хотя COMMAND.COM сохранялся для совместимости со старыми программами. В современных версиях Windows (начиная с Vista) COMMAND.COM как отдельный компонент отсутствует, но его эмуляция возможна через cmd.exe.
Альтернативные реализации
Помимо оригинальной версии Microsoft, существовали совместимые реализации COMMAND.COM. Наиболее известные:
- DR-DOS (Digital Research) — включал собственную версию COMMAND.COM с расширенными возможностями (поддержка длинных имён файлов, улучшенная обработка ошибок).
- FreeDOS — свободная операционная система, в которой COMMAND.COM является частью проекта и постоянно развивается сообществом.
- 4DOS (JP Software) — коммерческая замена, добавлявшая множество функций (история команд, автодополнение, псевдонимы).
Структура и компоненты
COMMAND.COM состоит из трёх логических частей, которые загружаются в память при старте системы:
- Резидентная часть — загружается в старшую область памяти и остаётся там постоянно. Содержит обработчики прерываний (например, INT 21h для системных вызовов), код для выполнения внутренних команд (DIR, COPY, TYPE, DEL и др.) и обработки критических ошибок.
- Инициализационная часть — загружается при запуске, после чего освобождает занимаемую память. Отвечает за обработку файла AUTOEXEC.BAT и настройку окружения.
- Транзиентная часть — находится в младшей области памяти и может быть перезаписана при запуске внешних программ. После завершения внешней программы COMMAND.COM восстанавливает свою транзиентную часть из резидентной.
Команды
Внутренние команды
Внутренние команды реализованы непосредственно в коде COMMAND.COM и выполняются без загрузки внешних файлов. Основные из них:
- DIR — вывод списка файлов и подкаталогов.
- COPY — копирование одного или нескольких файлов.
- DEL (или ERASE) — удаление файлов.
- TYPE — вывод содержимого текстового файла на экран.
- REN (или RENAME) — переименование файлов.
- MD (или MKDIR) — создание каталога.
- CD (или CHDIR) — смена текущего каталога.
- RD (или RMDIR) — удаление каталога.
- CLS — очистка экрана.
- VER — вывод версии операционной системы.
- DATE и TIME — установка и отображение системной даты и времени.
- ECHO — включение/выключение вывода команд на экран или вывод текстовых сообщений.
- SET — отображение, установка или удаление переменных окружения.
- IF — условное выполнение команд.
- GOTO — переход к метке в командном файле.
- FOR — выполнение команды для каждого файла в наборе.
- REM — комментарий в командном файле.
Внешние команды
Внешние команды реализованы в виде отдельных исполняемых файлов (обычно с расширениями .COM, .EXE или .BAT). COMMAND.COM загружает их в память и запускает. Примеры: FORMAT, FDISK, CHKDSK, XCOPY, EDIT, HELP.
Пакетные файлы (.BAT)
Одной из ключевых функций COMMAND.COM является выполнение пакетных (batch) файлов — текстовых файлов с расширением .BAT, содержащих последовательности команд. Пакетные файлы позволяют автоматизировать выполнение рутинных операций. COMMAND.COM поддерживает в пакетных файлах:
- Метки и переходы (GOTO).
- Условные операторы (IF, IF NOT, IF EXIST, IF ERRORLEVEL).
- Циклы (FOR).
- Параметры командной строки (%1, %2, ... %9).
- Переменные окружения.
- Подстановку символов (например, * и ?).
Файл AUTOEXEC.BAT, расположенный в корневом каталоге загрузочного диска, автоматически выполняется COMMAND.COM при запуске системы. Он используется для настройки окружения, загрузки драйверов и запуска резидентных программ.
Ограничения
COMMAND.COM имеет ряд ограничений, обусловленных архитектурой MS-DOS:
- Длина имён файлов — до 8 символов (имя) + 3 символа (расширение) в формате 8.3. Длинные имена файлов не поддерживались до появления Windows 95, хотя некоторые альтернативные реализации (например, 4DOS) добавляли такую поддержку.
- Объём оперативной памяти — COMMAND.COM может использовать не более 640 КБ (обычная память), что ограничивает размер запускаемых программ.
- Однозадачность — COMMAND.COM не поддерживает многозадачность; одновременно может выполняться только одна программа.
- Отсутствие поддержки Unicode — работа с текстом ограничена кодовыми страницами (например, CP866 для кириллицы).
- Ограниченная обработка ошибок — механизм ERRORLEVEL прост и не предоставляет детальной информации об ошибках.
Значение и наследие
COMMAND.COM стал стандартом де-факто для командных интерпретаторов в эпоху DOS. Его синтаксис и набор команд легли в основу многих последующих оболочек, включая cmd.exe в Windows NT, а также Bash в Linux (через эмуляцию DOS). Несмотря на архаичность, COMMAND.COM используется в эмуляторах DOS (например, DOSBox) для запуска старых игр и приложений, а также в проектах по ретро-вычислениям. Встроенная в Windows cmd.exe поддерживает большинство команд COMMAND.COM для обратной совместимости.
Критика
Основные претензии к COMMAND.COM связаны с его ограниченностью по сравнению с современными оболочками:
- Отсутствие автодополнения команд и истории ввода (добавлено в поздних версиях DOS и альтернативных реализациях).
- Примитивный редактор командной строки.
- Невозможность перенаправления нескольких потоков (stderr не поддерживался).
- Неудобство работы с длинными именами файлов (в версиях до Windows 95).
Тем не менее, для своего времени COMMAND.COM был эффективным и надёжным инструментом, обеспечивавшим базовое управление системой.
Источники
- MS-DOS Encyclopedia (Microsoft Press, 1988)
- Ray Duncan. Advanced MS-DOS Programming (Microsoft Press, 1988)
- Документация FreeDOS: COMMAND.COM (FreeDOS Project)
- Спецификация MS-DOS 2.0 (Microsoft, 1983)
- Статья «COMMAND.COM» в OS/2 Museum (os2museum.com)
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →