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.