Мы узнали много нового, но чтобы информация усвоилась, требуется время. Выполняйте упражнения в песочнице раз за разом, пока не почувствуете, что понимаете их смысл. На данном этапе очень важно надежно усвоить, как работают основные команды управления файлами и групповые символы. Не бойтесь выйти за рамки предложенных упражнений — добавьте дополнительные файлы и каталоги, поэкспериментируйте с групповыми символами для определения групп файлов в разных операциях. Идея ссылок на первый взгляд может показаться малопонятной, поэтому уделите время их исследованию. Зачастую они оказываются настоящим спасательным кругом.
До настоящего момента мы видели группы мистических команд, каждая из которых имеет свои таинственные параметры и аргументы. Теперь мы удалим часть этой таинственности и даже создадим несколько собственных команд. В этой главе будут представлены следующие команды:
• type — сообщает, как интерпретируется имя указанной команды.
• which — сообщает, какая программа будет выполнена.
• man — выводит страницу справочного руководства с описанием команды.
• apropos — выводит список подходящих команд.
• info — выводит запись из справочного руководства Info с описанием команды.
• whatis — выводит краткое описание команды.
• alias — создает псевдоним для команды.
Команда может быть:
• Выполняемой программой, как те файлы, что мы видели в каталоге /usr/bin. К этой категории относятся: скомпилированные двоичные программы, например, написанные на C и C++; программы, написанные на языках сценариев, таких как shell, Perl, Python, Ruby и др.
• Встроенной командой, реализованной внутри самой командной оболочки. Командная оболочка bash поддерживает множество внутренних команд, которые так и называют — встроенными (shell builtins). Команда cd, например, — это встроенная команда.
• Функцией командной оболочки. Функции командной оболочки (shell functions) — это миниатюрные сценарии на языке командной оболочки, встроенные в окружение. Мы еще вернемся к вопросам настройки окружения и создания функций командной оболочки в последующих главах, а пока просто помните об их существовании.
• Псевдонимом. Псевдоним (alias) — это команда, которую мы можем определить сами, сконструировав ее из других команд.
Часто бывает полезно точно знать, какому из четырех типов принадлежит команда, и Linux предлагает пару способов узнать это.
type — получение типа команды
Команда type — это встроенная команда, которая сообщает тип указанной ей команды. Вызывается она следующим образом:
type команда
где команда — это имя исследуемой команды. Например:
[ [email protected] ~]$ type type
type встроена в оболочку
[ [email protected] ~]$ type ls
ls является алиасом для `ls --color=tty'
[ [email protected] ~]$ type cp
cp хэширована (/bin/cp)
Здесь мы видим результаты определения типов трех разных команд. Обратите внимание, что команда ls (в дистрибутиве Fedora) фактически является псевдонимом (alias) команды ls с параметром --color=tty. Теперь-то мы знаем, почему результаты команды ls отображаются в цвете!
which — определение местоположения выполняемого файла
Иногда в системе имеется более одной версии исполняемой программы. Это довольно редкое явление для настольных систем, но вполне обычное для больших серверов. Точно определить местоположение данного исполняемого файла позволяет команда which:
[ [email protected] ~]$ which ls
/bin/ls
which ищет только исполняемые программы, она не способна выявлять встроенные команды или псевдонимы, замещающие фактические исполняемые программы. Если попытаться с помощью which определить местоположение встроенной команды (например, cd), мы либо ничего не получим, либо получим сообщение об ошибке:
[ [email protected] ~]$ which cd
/usr/bin/which: no cd in (/opt/jre1.6.0_03/bin:/usr/lib/qt-3.3/bin:/usr/kerberos/bin:/opt/jre1.6.0_03/bin:/usr/lib/ccache:/usr/local/bin:/usr/bin:/bin:/home/me/bin)
Это своеобразное сообщение «command not found» (команда не найдена).
Получение документации с описанием команд
Теперь, зная тип команды, можно поискать документацию с описанием, доступную для каждого вида команд2.
help — получение справки для встроенных команд
bash имеет встроенную справку для каждой встроенной команды. Чтобы получить ее, введите help с именем встроенной команды. Например:
[ [email protected] ~]$ help cd
cd: cd [-L|-P] [dir]
Change the current directory to DIR. The variable $HOME is the default DIR. The variable CDPATH defines the search path for the directory containing DIR. Alternative directory names in CDPATH are separated by a colon (:). A null directory name is the same as the current directory, i.e. `.'. If DIR begins with a slash (/), then CDPATH is not used. If the directory is not found, and the shell option `cdable_vars' is set, then try the word as a variable name. If that variable has a value, then cd to the value of that variable. The –P option says to use the physical directory structure instead of following symbolic links; the -L option forces symbolic links to be followed3.
Примечание к форме записи: квадратные скобки в описании синтаксиса команды указывают на необязательность элемента. Вертикальная черта используется для перечисления взаимоисключающих вариантов. В примере с описанием команды cd, приведенном выше, ее синтаксис описывается как cd [-L|-P] [dir].
Эта форма записи говорит, что команда cd может принимать необязательный параметр -L или -P и необязательный аргумент dir.
Несмотря на то что help дает краткое и точное описание команды cd, это описание не может служить инструкцией по использованию, и, как вы можете видеть, в нем упоминается многое из того, чего мы еще не знаем! Но не волнуйтесь, со всем этим мы познакомимся в свое время.
--help — вывод инструкции по использованию
Многие выполняемые программы поддерживают параметр --help для вывода описания синтаксиса и параметров, поддерживаемых командой. Например:
[ [email protected] ~]$ mkdir --help
Использование: mkdir [КЛЮЧ]... КАТАЛОГ...
Создает КАТАЛОГ(и), если он еще не существует.
-Z, --context=CONTEXT установить контекст безопасности SELinux для каждого
создаваемого каталога равным CTX
Аргументы, обязательные для длинных ключей, обязательны и для коротких.
-m, --mode=РЕЖИМ установить код доступа (как в chmod), не a=rwx — umask
-p, --parents не выдавать ошибок, если существует, создавать
родительские каталоги, если необходимо
-v, --verbose печатать сообщение о каждом созданном каталоге
--help показать эту справку и выйти
--version показать информацию о версии и выйти
Об ошибках в mkdir сообщайте по адресу <bug-coreu [email protected]>.
Некоторые программы не поддерживают параметр --help, но вы все равно пробуйте передать его. Часто в результате выводится сообщение об ошибке, содержащее ту же информацию о порядке использования.
man — вывод страниц справочного руководства
Большинство программ, предназначенных для использования в командной строке, предоставляют официальную документацию, которую называют страницей справочного руководства (man-страницу). Для просмотра этих страниц используется специальная программа постраничного просмотра man, например:
man программа
где программа — имя команды.
Страницы справочного руководства могут несколько отличаться друг от друга оформлением, но в общем случае содержат заголовок, краткий обзор синтаксиса команды, описание назначения команды и список всех параметров с их описанием. Однако страницы справочного руководства обычно не включают примеры использования, и их главная цель — служить справочником, а не инструкцией по использованию. Для примера попробуйте вывести страницу справочного руководства для команды ls:
[ [email protected] ~]$ man ls
В большинстве систем Linux man использует less для вывода страницы, поэтому при просмотре страницы можно использовать все известные команды less.
«Руководство», которое отображает man, разбито на разделы и охватывает не только пользовательские команды, но и команды системного администрирования, программные интерфейсы, форматы файлов и многое другое. В табл. 5.1 перечислены разделы справочного руководства.
Таблица 5.1. Организация справочного руководства
Раздел
Содержит
1
Пользовательские команды
2
Программные интерфейсы системных вызовов в ядре
3
Программные интерфейсы в библиотеке C
4
Специальные файлы, такие как узлы устройств и драйверы
5
Форматы файлов
6
Игры и развлечения, такие как хранители экрана
7
Прочее
8
Команды системного администрирования
Иногда, чтобы найти искомое, нужно заглянуть в конкретный раздел. Это актуально для форматов файлов, названия которых часто совпадают с именами команд. Если номер раздела не указан, man всегда будет возвращать первую найденную страницу, обычно из раздела 1. Ниже приведен пример прямого указания номера раздела: