POSIX-shell: встроенные команды

Как уже неоднократно говорилось, запуск и исполнение команд -- одна из основных задач командной оболочки. Любая из них способна интерпретировать и исполнять любые внешние команды системы. Однако оболочки располагают и собственными средствами -- т.н. встроенными командами (Shell Builtins).

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

Набор встроенных команд во многом обуславливает функциональные отличия между оболочками. Наиболее скромен именно в оболочке Борна (и её римейке -- штатной /bin/sh из комплекта FreeBSD), где их насчитывается около двух десятков. Однако именно это -- тот самый базовый минимум, который работоспособен в любой Unix-системе. Поэтому имеет смысл привести список основных команд оболочки /bin/sh и их краткие характеристики -- поскольку аналоги таковых имеются и в любой другой оболочке, знание их не помешает в
любом случае.

$ :

Т.н. "пустая" команда, не выполняющая никаких действий, а просто анализирующая командную строку.

$ . file

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

$ alias псевдоним='команда [опции]'

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

$ bg [job]

Перевод задачи по номеру, указанному в качестве аргумента (при отсутствии последнего -- текущей задачи) в фоновый режим.

$ command команда 

Выполнение указанной встроенной команды оболочки; используется в том случае, если имя встроенной команды совпадает с определенной ранее функцией.

$ cd путь

Переход в указанный каталог; синонимом ее является команда chdir.

$ echo символы

Вывод указанной после команды последовательности символов. С опцией -n -- без образования новой строки. В форме echo $ПЕРЕМЕННАЯ выводит значение
указанной переменной.

$ exec команда

Исполнение внешней (не встроенной в оболочку) команды, причём -- в новом экземпляре оболочки.

$ exit

Выход из командной оболочки (обычно -- и из сеанса пользователя).

$ export имя=значение

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

$ fc [-l]

Вывод списка команд из буфера истории; дополнительные опции -n и -r предписывают вывод без нумерации команд или в обратном (от конца к началу) порядке, соответственно.

$ fg [job]

Перевод фоновой задачи (по номеру или текущей) в активный режим.

$ hash

Показывает таблицу запомненных расположений команд.

$ jobid [job]

Вывод идентификатора задачи.

$ jobs

Вывод списка текущих фоновых задач.

$ pwd

Вывод полного пути к текущему каталогу.

$ read name1 ... name#

Считывание строки из стандартного ввода оболочки, которая используется для присвоения значений указанным переменным name#; в качестве значений переменных принимаются слова, разделённые пробелами; если таких слов больше, чем имен, указанных в качестве аргументов, значение последнего составят все избыточные слова.

$ readonly name

Определение переменной name как предназначенной только для чтения, что предотвращает ее переопределение.

$ set

Без аргументов выводит все переменные оболочки.

$ type команда

Выводит полный путь к указанной команде для внешних команд, например:

sh is /bin/sh)

Для команд внутренних указывает, что данная в качестве аргумента команда -- встроенная, например:

type is a shell builtin)
$ ulimit

Устанавливает или выводит на экран ограничения ресурсов. С опцией -a показывает список установленных ограничений, как то: на максимальный размер файла, на количество одновременно запущенных процессов, и т.д.

$ umask

Без аргументов -- выводит маску для атрибутов вновь создаваемых файлов. Если в качестве аргумента указать новую маску -- файлы будут создаваться в соответствие с ней.

$ unalias псевдоним

Удаление указанного псевдонима (противоположность команды alias). С опцией -a (и без имени псевдонима) -- удаление всех установленных псевдонимов команд.

$ unset name

Снимает значение переменной, указанной в качестве аргумента
(противоположность команды set).

$wait job

Ожидание завершения задачи job.

В "развитых" оболочках этот набор дополняется иными командами, иногда специфичными для данного командного интерпретатора. В частности, в оболочке bash таких встроенных команд более 40, в оболочке tcsh -- более 50, а в оболочке zsh -- превышает 80.

. .