3

Я преподавал интерфейс командной строки моей сестре и научил ее, что такое внутренние и внешние команды (также называемые резидентными и временными командами). Ее вопрос ко мне заключался в том, какие из этих команд в Windows XP и какие из команд Windows 7, Windows 7 являются внутренними, а какие внешними?

Ну, есть ли способ узнать это?

2 ответа2

4

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

3

Ты делаешь помощь своей сестре.

Различие между резидентными и временными командами происходит от не виртуализированной архитектуры управления памятью, которая была в MS-DOS и CP/M. В операционных системах с виртуальной памятью по запросу, таких как Windows NT 6.1, это бессмысленно. Система не хранит вещи, встроенные в резидентный командный процессор, и программы, вызываемые командным процессором, не обязательно являются временными. Память просто не управляется одинаково.

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

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

С некоторыми интерпретаторами команд это очень просто; но это должен быть командный интерпретатор, который делает это.

Заменяющий интерпретатор команд JP Software TCC имеет встроенную команду - ?команда - отображает все включенные в данный момент встроенные команды. Получить список встроенных команд так же просто, как выполнить:

?

Мой командный интерпретатор имеет то же самое. То же самое можно сказать о cmd от ReactOS. (Во всех наших командных интерпретаторах это одна и та же команда - ? - на самом деле.) Все остальные интерпретаторы команд, для которых это возможно, будут иметь эту команду или команду с аналогичной функцией. (Оболочки для систем POSIX имеют, по-разному, встроенные команды с именами type , whence или which , например.) Получение списка встроенных команд должно быть выполнено с помощью команды, встроенной в интерпретатор команд, потому что только что-то, имеющее доступ к внутренностям кода интерпретатора команд, знает, где найти список встроенных команд, которые интерпретатор команд Программа содержит и поддерживает.

Внешняя команда может быть написана с собственным списком встроенных команд. Я написал один такой сам, около двух десятилетий назад. Он знал все о командах, по-разному встроенных в command , cmd , 4dos и 4os2 , потому что я создал свою собственную таблицу того, кто имеет какую встроенную команду, и поместил ее в программу. Но он не мог сказать, были ли какие-либо встроенные команды отключены с помощью setdos /i , и это было во власти авторов этих интерпретаторов команд, которые добавляли новые встроенные команды в свои программы или просто не документировали некоторые команды. , И у него не было возможности узнать, из какого командного интерпретатора (если есть) он был вызван, поэтому он не мог знать, когда (например) help была встроенной командой (как и для некоторых командных интерпретаторов) и когда это была внешняя команда (как и для других).

Единственный надежный метод - это команда, встроенная в интерпретатор команд, которую вы хотите проверить. Внешние команды других людей, такие как разные люди, where , which , help и так далее, будут страдать от тех же проблем, что и моя программа.

К сожалению, Microsoft никогда не считала целесообразным предоставлять такую функциональность в своем cmd .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .