
- •Терминал и командная строка
- •Терминал
- •Управляющие символы
- •Одновременный доступ к системе
- •Пример 2.1. Пример выполнения команды
- •Команды
- •Шаблоны
- •Перенаправление ввода и вывода
- •Программное окружение
- •Стандартные переменные окружения
- •Служебные символы
- •Процесс выполнения команды
- •Справочная подсистема
- •Страницы руководства
- •Поиск по руководствам
- •Программа info
- •Документация, поставляемая с программой
- •Интегрированные системы документации
Пример 2.1. Пример выполнения команды
user@desktop ~ $ date
Втр Окт 4 23:15:37 MSD 2005
user@desktop ~ $
Здесь приглашением является строка user@desktop ~ $, которая содержит: имя пользователя, с правами которого исполняется командная оболочка (user), имя компьютера (desktop), имя текущего каталога (~, этим символом в командных оболочках UNIX принято обозначать домашний каталог пользователя). Заканчивается приглашение символом начала ввода ($), который, по существу, является единственным обязательным элементом приглашения и показывает, собственно, готовность командной оболочки к вводу команды. В качестве символа начала ввода могут выступать разные символы, но чаще всего используется именно ($) для обозначения командной строки обычного пользователя и символ (#) для обозначения командной строки суперпользователя (root). Пользователь имеет возможность произвольным образом изменить оформление приглашения командной строки.
Команды
Презентация 4-03: формат команды
Приведенный выше пример демонстрирует простейшую команду, которая состоит только из имени команды: date. Для исполнения этой команды командная оболочка находит и запускает программу, имя которой совпадает с именем команды. В данном примере это утилита date, которая и выводит на терминал пользователя информацию о текущей дате и времени. Некоторые команды (такие как echo) являются встроенными для данной командной оболочки, и для их выполнения вызывается не программа, а внутренняя функция оболочки.
В качестве имени команды, помимо внешней программы и встроенной функции, может выступать еще и псевдоним (alias). Псевдонимы — это определяемые пользователем сокращения, позволяющие заменить длинную, но часто используемую команду, более короткой. В конфигурационных файлах командного интерпретатора пользователя обычно уже определено несколько сокращений, список которых можно посмотреть с помощью команды alias без параметров:
user@desktop ~ $ alias
alias cp='cp -i'
alias l='ls -lapt'
alias ll='ls -laptc'
alias ls='ls --color=auto'
alias md='mkdir'
alias mv='mv -i'
alias rd='rmdir'
alias rm='rm -i'
Например, по команде ls вместо утилиты /bin/ls bash запускает собственную команду-сокращение, превращающуюся в команду ls --color=auto. Повторно появившуюся в команде подстроку "ls" интерпретатор уже не обрабатывает, во избежание вечного цикла. Например, команда ls -al превращается в результате в ls --color=auto -al.
Сокращения не наследуются с окружением.
Параметры
Однако команды UNIX могут быть устроены и более сложным образом, когда необходимо не только выполнить внешнюю программу, но и передать ей какую-то дополнительную информацию, чтобы так или иначе модифицировать ее работу. Модификаторы поведения в этом случае вводятся в командной строке после имени команды — это параметры команды. Параметров может быть произвольное количество (оно зависит только от смысла передаваемой внешней программе информации), друг от друга параметры отделяются пробелами. Параметры будут переданы программе в том порядке, в котором они указаны в командной строке.
Пример 2.2. Пример выполнения команды c параметром
user@desktop ~ $ cal 1 2006
Января 2006
Вс Пн Вт Ср Чт Пт Сб
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Командная оболочка передает внешней программе ее параметры не в виде единой строки, как их ввел пользователь, а в виде упорядоченного списка (первый параметр, второй параметр...). Для этого командную строку необходимо разбить на отдельные «слова». При разбиении на слова командная оболочка использует понятие разделитель (delimiter). Разделитель — это символ, разделяющий слова; таким образом, командная строка — это последовательность слов (которые имеют значение) и разделителей (которые значения не имеют). Для командной оболочки разделителями являются символ пробела, символ табуляции и символ перевода строки. Количество разделителей между двумя соседними словами значения не имеет. Если необходимо передать в качестве параметра строку, содержащую символы-разделители, необходимо эту строку окружить одинарными или двойными кавычками.
user@desktop ~ $ echo "Hello, world."
Hello, world.
Параметры, которые могут быть переданы команде, подразделяются на два вида: первые — это внешние объекты, с которыми должна работать вызываемая команда (например, имена файлов, числа), вторые — это принимаемые программой модификаторы поведения. Последовательность в командной строке обычно такая: имя команды — модификаторы — объект(ы), где и модификаторы, и объекты необязательны.
В программах для UNIX параметры-модификаторы принято называть ключами (а также опциями и иногда флагами). Для формата ключей нет жёсткого стандарта, однако существуют договорённости, нарушать которые не принято. Однобуквенные ключи должны начинаться с символа «-» (как -h), такие ключи можно объединять: du -s -h и du -sh эквивалентны. Другой вид ключей — полнословные — начинается с двух символов «-» (например, --help, который чаще всего выдаёт подсказку). Особый вид ключей — параметрические, которые принимают собственный параметр: например, в команде grep -f access.log -n test имя файла access.log — часть параметра -f.
Проблемы могут возникнуть, если с символа «-» начинается не ключ, а обычный параметр, например, имя файла. В этом случае команда может интерпретировать этот параметр как ключ, что повлечет ошибку. Для выхода из этой ситуации используется специальная конструкция «--», указывающая, что список ключей закончен, и любые последующие строки следует интерпретировать как параметры. Например:
user@desktop ~ $ ls -l -- -test-file
-rw-r--r-- 1 user users 90 Сен 19 00:20 -test-file