Команда или программа?

Команда или программа?

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

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

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

решение1

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

Отдельные команды

Основные утилиты 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

решение3

Командапросто означает способ приказать приложению или системе что-то сделать.

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

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

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

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

Связанный контент