Интерфейс командной строки системы или командная оболочка, используемая в большинстве систем Linux, носит имя bash, которое расшифровывается как Bourne again shell (название "Born again shell" - "возрожденная командная оболочка" было изменено с целью упоминания автора оригинальной командной оболочки sh Стивена Борна). Командная оболочка bash реализует возможности командных оболочек sh (оригинальная командная оболочка Стивена Борна), csh (командная оболочка Билла Джоя с поддержкой сценариев, синтаксис которых основан на синтаксисе языка программирования C), а также ksh (командная оболочка Дэвида Корна).
В данной практической для демонстрации возможностей командной оболочки будет периодически использоваться команда echo. Команда echo является достаточно простой командой: она всего лишь осуществляет вывод переданных ей данных.
Одной из важнейших возможностей командной оболочки является возможность обработки строк команд. При вводе команды после приглашения командной оболочки и нажатии клавиши Enter командная оболочка приступает к обработке строки команды, разделяя ее на аргументы. При обработке строки команды командная оболочка может внести множество изменений в переданные вами аргументы.
Данный процесс называется раскрытием команд командной оболочки. После того, как командная оболочка заканчивает обработку и модификацию переданной строки команды, будет осуществляться непосредственное исполнение результирующей команды.
Части строки команды, которые разделены с помощью одного или нескольких последовательно расположенных символов пробелов (или табуляции), рассматриваются как отдельные аргументы, причем все пробелы удаляются. Первым аргументом является сама команда, которая должна быть исполнена, остальные аргументы передаются этой команде. Фактически командная оболочка производит разделение вашей строки команды на один или несколько аргументов.
Это полностью объясняет эквивалентность следующих четырех команд после их раскрытия средствами командной оболочки.
Команда echo будет выводить каждый из принятых от командной оболочки аргументов. Также команда echo осуществляет добавление пробелов между всеми принятыми аргументами.
Вы можете предотвратить удаление пробелов из строки команды, поместив ее в одинарные кавычки. Содержимое экранированной таким образом строки рассматривается как единый аргумент. В примере ниже команда echo принимает только один аргумент.
Вы также можете предотвратить удаление пробелов из строки команды, поместив ее в двойные кавычки. Как и в примере выше, команда echo примет только один аргумент.
Позднее при обсуждении переменных в рамках данной книги мы разберемся с важными различиями между одинарными и двойными кавычками.
Строки, помещенные в кавычки, могут содержать специальные обозначения символов, идентифицируемые командной echo (в случае использования команды echo -e). В примере ниже продемонстрирована методика использования обозначения символа \n для вставки символа переноса строки, а также обозначения символа \t для вставки символа табуляции (обычно эквивалентного восьми символам пробела).
Команда echo может генерировать и другие символы помимо символов пробелов, табуляции и переноса строки. Обратитесь к странице руководства для ознакомления со списком допустимых обозначений символов.
Не все исполняемые командной оболочкой команды являются внешними; некоторые из них являются встроенными. Внешние команды реализованы в форме программ, представленных отдельными бинарными файлами, которые размещены в какой-либо директории файловой системы. Многие бинарные файлы, реализующие функции внешних команд, размещаются в директории /bin или /sbin. Встроенные команды являются неотъемлемой частью самого приложения командной оболочки.
Для установления того, будет ли переданная командной оболочке команда исполнена как внешняя команда или как встроенная команда, следует использовать специальную команду type.
Как вы можете заметить, команда cd является встроенной, а команда cat - внешней.
Также вы можете использовать данную команду для установления того, является ли введенная команда псевдонимом команды.
Некоторые команды имеют как встроенные, так и внешние реализации. В случае исполнения одной из таких команд приоритет отдается встроенной реализации. Для исполнения внешней реализации вам придется ввести полный путь к бинарному файлу, являющемуся реализацией данной команды.
Команда which осуществляет поиск бинарных файлов в директории, заданной с помощью переменной окружения $PATH (переменные будут рассматриваться позднее). В примере ниже устанавливается, что cd является встроенной командой, а ls, cp, rm, mv, mkdir, pwd и which - внешними командами.
Командная оболочка позволяет вам создавать псевдонимы команд (aliases). Псевдонимы команд обычно используются для создания лучше запоминающихся имен для существующих команд или для упрощения передачи параметров команд.
Команда создания псевдонима команды (alias) также может оказаться полезной в случае необходимости сокращения длины имени существующей команды.
Псевдонимы команд могут использоваться для передачи командам стандартных параметров. Например, ниже показана методика передачи параметра -i по умолчанию при вводе команды rm.
В некоторых дистрибутивах используются стандартные псевдонимы команд для защиты пользователей от случайного удаления файлов ('rm -i', 'mv -i', 'cp -i').
Вы можете передать один или несколько псевдонимов команд в качестве аргументов команды alias для вывода их объявлений. Исполнение команды без аргументов приведет к выводу полного списка используемых на данный момент псевдонимов.
Также вы можете прекратить использование псевдонима команды, воспользовавшись командой unalias.