19

Я искал разницу между adduser и useradd , и объяснение состоит в том, что useradd - это команда, а adduser - это perl-скрипт. Я понимаю, что такое Perl-скрипт, но я не понимаю, что такое command .

Я всегда думал, что такие команды, как ls , ln , cd т.д. - это простые программы, написанные на любом языке, которые просто выполняют одно действие. В чем разница между этими "простыми программами" и сценарием perl?

Я, конечно, знаю, что (perl) скрипт не компилируется, а интерпретируется во время выполнения, но я думаю, что это не единственная разница?

3 ответа3

32

Проще говоря, команда - это инструкция (или набор инструкций), которая должна выполняться компьютером.

Автономные команды

Фундаментальные утилиты Unix, такие как ls , ln и т.д. (Обычно) написаны на C и скомпилированы для того, чтобы быть автономными исполняемыми программами, которые не требуют выполнения интерпретатора; они обычно требуют, чтобы определенные библиотечные файлы были установлены в системе, но это ответ на другой вопрос.

Сценарии

Сценарий - это набор команд, и фактически сами сценарии считаются командой.

Сценарий Perl - это последовательность операторов Perl, для выполнения которой требуется perl исполняемая (автономная и скомпилированная) программа для интерпретации операторов Perl.

Иногда большие и сложные интерпретирующие сценарии (в таких языках, как Perl, Python и Ruby) также называют интерпретируемыми программами, в то время как термин сценарий зарезервирован для более коротких и простых сценариев.

Сценарий оболочки - это последовательность других команд (команд любого типа), и для интерпретации сценария требуется оболочка Unix, например Bash. Со страницы руководства Bash:

Bash - это совместимый с sh интерпретатор языка команд, который выполняет команды, считываемые со стандартного ввода или из файла.

Встроенные оболочки

Оболочки обычно имеют встроенные команды, которые не являются ни автономными программами, ни скриптами. Вместо этого они являются частью самой оболочки и запускаются непосредственно оболочкой. cd - пример такой встроенной команды.

Иногда существуют команды, которые существуют как встроенные в оболочку и как отдельные команды одновременно, например, команда echo .

$ type -a echo
echo is a shell builtin
echo is /usr/bin/echo

echo самостоятельно выполняет встроенную оболочку, а отдельную команду можно выполнить, указав полный путь к ней.

Запустите встроенную версию echo:

$ echo --version
--version

Запустите автономную echo программу:

$ /usr/bin/echo --version
echo (GNU coreutils) 8.23
Packaged by Cygwin (8.23-4)
Copyright (C) 2014 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Примечание. Приведенные выше особенности относятся к среде Unix, но те же принципы применимы к среде Windows.

2

Встроенная команда является частью оболочки. Программа выполняется оболочкой.

Встроенные команды содержатся внутри самой оболочки. Когда имя встроенной команды используется в качестве первого слова простой команды (см. Простые команды), оболочка выполняет команду напрямую, без вызова другой программы. Встроенные команды необходимы для реализации функциональности, которую невозможно или неудобно получить с помощью отдельных утилит.

http://www.gnu.org/software/bash/manual/bashref.html#Shell-Builtin-Commands

1

Команда просто означает, что приложение или система должны что-то делать.

Приложение обычно принимает много разных команд, либо из GUI, либо из stdin , но возможны и другие методы, например, сокет UNIX или именованный канал, какой-то веб-API, RPC-соединение или какой-либо другой пользовательский протокол.

Приложение, которое выполняет только одно, а затем завершает работу, как правило, без графического интерфейса, также можно назвать командой, потому что вы действительно можете "дать" этому приложению только одну значимую "команду". Вот как работают такие маленькие программы, как ls и подобные, и почему они называются командами.

Но вы не стали бы называть Photoshop командой, но вы наверняка бы использовали команды в ней через графический интерфейс.

Тем не менее, термин может означать разные вещи для разных людей. В вашем примере команда используется для описания исполняемого файла, который запускается напрямую, в отличие от файла, для работы которого требуется интерпретатор сценариев. Различие может быть важным, потому что когда вы запускаете скрипт Perl, /usr/bin/perl - это двоичный файл, который на самом деле работает (так что если вы хотите уничтожить долго работающий скрипт Perl, это то, что вы должны искать в ps), Однако большинство оболочек имеют «встроенные» команды, которые являются командами самой оболочки и не запускают внешний исполняемый файл. Например, cd обрабатывается самим bash и не вызывает /sbin/cd или что-то подобное.

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