Перейти к содержанию

2.3 Получение справки по командам оболочки Linux (Getting Help for Linux Shell Commands)

Одним из несомненных достоинств Linux является обилие документации и справочных материалов. Для любой задачи администрирования или любой утилиты Linux вы, скорее всего, найдёте документацию, которая объяснит, как её решить. В этом разделе мы рассмотрим два отличных инструмента для получения справки при работе с Linux.

Прежде чем перейти к ним, важно понять несколько ключевых особенностей документации Linux.

Во-первых, поставщик вашего дистрибутива, вероятно, предоставляет какую-либо общесистемную документацию. Однако эта документация, как правило, весьма скудна — для некоторых дистрибутивов её может не быть вовсе.

Это объясняется тем, что каждая служба или программа, устанавливаемая в Linux, обычно поставляется с собственной документацией. Если учесть количество различных пакетов, входящих в состав Linux, станет понятно: составить единую документацию, охватывающую все эти пакеты, — задача огромной сложности. Поэтому поставщики дистрибутивов опираются на сообщество разработчиков свободного программного обеспечения, которое документирует все используемые в Linux приложения и службы.

Это подводит нас ко второй особенности: как правило, документацию к конкретной службе или утилите пишет тот же программист, который её разработал. Лишь часть документации к программному обеспечению Linux написана профессиональными техническими писателями. Это приводит к заметным различиям в качестве документации. Одни программисты умеют хорошо писать: они излагают мысли понятно и умеют организовать информацию так, чтобы её было легко воспринимать.

К сожалению, у других программистов с документированием дела обстоят плохо. Ключевая ошибка, которую они допускают, — предположение, что читатель обладает таким же уровнем знаний, как и они сами. (Здесь возникает очевидное противоречие: если читатель знает столько же, сколько автор, — зачем ему вообще нужна документация?) Такая документация, как правило, неполна и малоинформативна.

Примечание

Если вы столкнулись с подобной ситуацией и располагаете свободным временем, большинство программистов будут рады добровольному помощнику в написании документации. Как вы увидите далее в этой главе, большинство справочных источников Linux содержат контактный адрес электронной почты, по которому можно связаться с автором.

Третья особенность состоит в том, что большинство источников документации Linux не являются печатными. В ранние годы Linux многие дистрибутивы поставлялись с толстым печатным руководством. Первый дистрибутив Linux, который я устанавливал в 1995 году (Caldera OpenLinux версии 1.0), сопровождался именно таким руководством. Сегодня, однако, печатные руководства — редкость. Как нетрудно догадаться, печать руководств подобного объёма обходится очень дорого и требует большого расхода бумаги. Поэтому практически вся актуальная документация для дистрибутивов Linux распространяется в электронном формате.

Совет к экзамену

Умение получать справку при работе с Linux — важнейший навык системного администратора. Когда возникает проблема, необходимо быстро найти ответ. Поэтому на экзаменах Linux+ и LPIC-1 вы должны уметь пользоваться различными инструментами поиска справки. Вам необходимо хорошо знать man и info: как запустить эти утилиты, как перемещаться по отображаемой информации и как выйти из них.

В этом разделе главы вы познакомитесь с различными источниками справки при работе с Linux. Будут рассмотрены следующие темы:

  • работа со страницами руководства (man);
  • работа с утилитой info.

Начнём с рассмотрения утилиты man.

Работа со страницами руководства man

Один из основных способов ведения документации в Linux — использование страниц руководства (man-страниц, man pages). Эти страницы содержат документацию как об операционной системе в целом, так и о любых установленных на ней приложениях. Для просмотра man-страниц используется утилита man.

Утилита man была изначально разработана и применялась в операционной системе UNIX. Впоследствии она была перенесена на Linux и предоставляет ту же функциональность, что и в UNIX. С её помощью можно отобразить страницу руководства для любой команды, утилиты или файла Linux.

man — незаменимый инструмент при работе с Linux-системой. Если учесть, что даже на самой простой Linux-системе доступно огромное количество команд и утилит, причём некоторые из них используются очень редко, запомнить синтаксис и параметры каждой из них практически невозможно.

В таких ситуациях man приходит на помощь. Если при работе с какой-либо командой или утилитой возникли затруднения, достаточно воспользоваться man, чтобы отобразить соответствующую страницу руководства и вспомнить порядок её использования.

Помимо системных команд и утилит, man-страницы ведутся и для большинства пакетов. При установке пакета на Linux вместе с ним устанавливаются и man-страницы с документацией к этому программному обеспечению. Таким образом, man позволяет просматривать документацию и для установленных пакетов.

В этом разделе мы рассмотрим следующие темы:

  • структура каталогов man;
  • разделы руководства;
  • использование man для просмотра документации.

Структура каталогов man

Страницы, отображаемые утилитой man, хранятся в нескольких каталогах внутри пути, заданного переменной окружения MANPATH. На 64-разрядной системе openSUSE Linux переменная MANPATH указывает на каталоги /usr/lib64/mpi/gcc/openmpi/share/man, /usr/local/man и /usr/share/man.

Проверить значение MANPATH на своей системе можно, введя echo $MANPATH в приглашении командной строки. В ответ будет выведен список каталогов, разделённых двоеточием:

rtracy@openSUSE:~> echo $MANPATH
/usr/lib/mpi/gcc/openmpi/share/man:/usr/local/man:/usr/share/man

Рис. 2-3. Файл /etc/man_db.conf с настройкой каталогов man в Fedora.

Рис. 2-3. Настройка каталогов man в Fedora с помощью файла /etc/man_db.conf.

Важно учитывать, что утилита man может быть реализована по-разному в различных дистрибутивах. Например, в дистрибутиве Fedora по умолчанию не используется переменная окружения MANPATH. Вместо этого применяется директива MANPATH_MAP в файле /etc/man_db.conf, которая задаёт каталоги с man-страницами. Пример такого файла конфигурации показан на рис. 2-3.

Внутри каталогов, заданных переменной MANPATH или директивой MANPATH_MAP в файле /etc/man_db.conf, располагается ряд подкаталогов с именами man1, man2, man3 и так далее:

rtracy@openSUSE:/usr/share/man> ls
ar           cs     et             gd            ja       man1p    man9   pa       sk    ug
ast          cy     eu             gl            kk       man2     mann   pl       sl    uk
be           da     fa             he            km       man3     ml     ps       sq    uz
bg           de     fi             hi            ko       man3p    ms     pt       sr    vi
bn           el     fo             hr            ku       man4     my     pt_BR    sv    zh
bo           en_AU fr              hu            lt       man5     nb     ro       ta    zh_CN
bs           en_GB fr.ISO8859-1 id               lv       man6     nl     ru       te    zh_HK
ca           eo     fr.UTF-8       io            man0p    man7     nn     shn      th    zh_TW
ca@valencia es      fy             it            man1     man8     oc     si       tr

Некоторые из этих каталогов не являются разделами руководства: такие каталоги, как hu, it, jp, предназначены для man-страниц, локализованных на языки, отличные от английского.

Переменная MANPATH по умолчанию не задана и в дистрибутивах Ubuntu. На Ubuntu путь к man-страницам можно узнать с помощью команды man -w.

Разделы руководства

Все man-страницы, хранящиеся в различных каталогах, в совокупности образуют руководство (manual). Каждый из перечисленных каталогов представляет собой раздел этого руководства. Стандарты, которых придерживаются авторы man-страниц, делят руководство на разделы, указанные в табл. 2-2.

Раздел Содержимое
1 Программы и команды оболочки, доступные любому пользователю
2 Системные функции, предоставляемые ядром Linux
3 Функции библиотек
4 Специальные файлы в /dev
5 Описания форматов файлов и соглашения
6 Игры
7 Разные соглашения
8 Административные утилиты для суперпользователя root
9 Документация по процедурам ядра

Табл. 2-2. Разделы руководства man.

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

Использование man для просмотра документации

Искать информацию с помощью man очень просто: достаточно ввести man и следом — имя утилиты, о которой нужно получить информацию.

Например, команда ls — полезная команда оболочки для отображения содержимого каталога. Она поддерживает множество параметров, определяющих формат вывода. Как узнать, какие это параметры? Воспользуйтесь man, чтобы отобразить страницу руководства для ls. Введите man ls в приглашении командной строки — и на экране появится страница, показанная на рис. 2-4.

Рис. 2-4. Man-страница утилиты ls.

Рис. 2-4. Просмотр man-страницы утилиты ls.

Man-страница состоит из нескольких элементов, как показано на рис. 2-4. Одни страницы содержат много разделов, другие — лишь несколько. Большинство man-страниц включают следующие разделы:

  • Заголовок (Title) — первая строка man-страницы. В ней указывается имя утилиты, команды или файла, а следом — номер раздела руководства. На рис. 2-4 первая строка содержит LS(1). Это означает, что страница описывает утилиту ls и находится в разделе 1 руководства. Напомним из табл. 2-2: раздел 1 содержит страницы для команд и утилит, доступных всем пользователям системы.

  • NAME — кратко указывает имя команды, файла или утилиты и её назначение. На рис. 2-4 раздел NAME показывает, что утилита ls используется для отображения содержимого каталога.

  • SYNOPSIS — краткое описание синтаксиса команды или утилиты. Если страница документирует файл конфигурации (например, smb.conf), раздел SYNOPSIS даёт краткое описание назначения этого файла. На рис. 2-4 раздел SYNOPSIS показывает синтаксис вызова ls из приглашения командной строки: вы можете ввести ls и затем указать список параметров и имён файлов.

  • DESCRIPTION — основная часть man-страницы. Здесь подробно описывается принцип работы команды, файла или утилиты, а также перечисляются доступные параметры. Например, на рис. 2-4 man-страница сообщает, что параметр -a или --all заставляет ls отображать скрытые каталоги и файлы наряду с обычными. Без man-страницы вы, скорее всего, никогда бы не узнали о существовании параметра -a.

    Совет к экзамену

    Имена скрытых файлов и каталогов Linux начинаются с точки.

  • AUTHOR — имя программиста, написавшего команду, утилиту или службу, описанную в man-странице. Пример для утилиты ls показан на рис. 2-5.

  • REPORTING BUGS — адрес электронной почты для сообщений об ошибках, обнаруженных в утилите или документации, как показано на рис. 2-5.

  • COPYRIGHT — сведения о правообладателе команды, утилиты или службы, а также информация о правах на распространение, как показано на рис. 2-5.

  • SEE ALSO — список man-страниц и других ресурсов, связанных с текущей страницей. Например, на рис. 2-5 раздел SEE ALSO предлагает воспользоваться info для просмотра полной документации по команде ls.

  • Номер версии и дата редакции (Version Number and Revision Date) — самая последняя строка man-страницы.

Рис. 2-5. Man-страница утилиты ls — дополнительные разделы.

Рис. 2-5. Просмотр дополнительных разделов man-страницы для утилиты ls.

Все разделы, кроме NAME, являются необязательными. Авторы вправе добавлять новые разделы, которые не вошли в приведённый список, если этого требует конкретная программа. Вы можете встретить man-страницы с такими разделами, как OPTIONS, FILES, ENVIRONMENT и DIAGNOSTICS.

При отображении man-страницы в самой нижней строке экрана показывается строка состояния с информацией о текущей странице, отображаемой строке и положении в документе. На рис. 2-5 строка состояния показывает, что отображается man-страница ls(1), текущей верхней строкой является строка 224, и отображаемый текст находится примерно на 99 процентах документа.

Для перемещения по man-странице используйте комбинации клавиш, перечисленные в табл. 2-3.

Клавиша Функция
стрелка вниз Прокрутка на одну строку вниз
стрелка вверх Прокрутка на одну строку вверх
Page Down Прокрутка на 14 строк вниз
Page Up Прокрутка на 14 строк вверх
пробел Прокрутка на 26 строк вниз
Home Переход к началу страницы
End Переход к концу страницы
q Закрытие текущей man-страницы и выход из утилиты man

Табл. 2-3. Клавиши навигации в man-страницах.

Одни man-страницы коротки и лаконичны, другие — весьма объёмны. При работе с man-страницей может потребоваться поиск конкретного термина.

Например, при работе с командой ls вам может понадобиться просмотреть расширенную информацию о файлах и каталогах. Обратите внимание на рис. 2-4: по умолчанию ls отображает только имена файлов и каталогов в текущем каталоге. А что если нужно увидеть расширенную информацию: права доступа, сведения о владельце, размер файла или дату последнего изменения? Такой вывод называется форматом подробного листинга (long listing format). Какой параметр ls позволяет использовать этот формат?

Для поиска конкретных сведений в man-странице введите косую черту (/), а затем — искомый текст. Например, чтобы узнать, как получить подробный листинг с помощью ls, откройте man-страницу командой man ls, а затем введите /long для поиска строки «long». Это показано на рис. 2-6.

После нажатия Enter будет найдено первое вхождение «long» в man-странице. Для перехода к следующему вхождению нажмите n. После нескольких нажатий n вы найдёте нужное вхождение, как показано на рис. 2-6. Как видно, параметр -l заставляет ls выводить результаты в подробном формате, показывая права доступа, сведения о владельце, размер и дату последнего изменения файлов и каталогов.

Нередко возникает ситуация, когда нужно найти информацию в man-странице, но точное название нужной команды не вспомнить. Напомним: для открытия man-страницы нужно знать название команды, утилиты или файла. Если вы его не помните, можно воспользоваться двумя инструментами поиска по man-страницам:

  • man -k — параметр -k позволяет выполнить поиск по именам и описаниям всех man-страниц для нахождения конкретного ключевого слова. Например, если нужно удалить каталог из файловой системы, но не вспомнить, какая утилита для этого служит, введите man -k "remove empty" в приглашении командной строки — и будет выведен список man-страниц, содержащих фразу «remove empty»:

    rtracy@openSUSE:~> man -k "remove empty"
    rmdir (1)            - remove empty directories
    
    Из вывода становится понятно, что для удаления каталога используется команда rmdir. Теперь можно ввести man rmdir, чтобы узнать, как ею пользоваться.

  • apropos — утилита apropos выполняет практически то же, что и команда man -k: позволяет искать по именам и описаниям man-страниц для нахождения заданной строки. Например, для поиска man-страниц, содержащих слово «remove», введите apropos remove.

Попрактикуемся в использовании man в следующем упражнении.

Рис. 2-6. Поиск строки «long» в man-странице.

Рис. 2-6. Поиск текстовой строки «long» в man-странице.

Упражнение 2-5. Работа со страницами руководства man

В этом упражнении вы попрактикуетесь в использовании утилиты man для просмотра страниц руководства по утилитам Linux. Упражнение можно выполнить на виртуальной машине, прилагаемой к книге. Для получения правильно настроенной среды загрузите снимок состояния (snapshot) 2-1.

VIDEO Посмотрите видео к упражнению 2-5 с демонстрацией выполнения этого задания.

Выполните следующие действия:

  1. Загрузите систему Linux в режим приглашения командной строки. Если система загрузилась в графическую среду, войдите в систему как пользователь student с паролем student, а затем нажмите Ctrl-Alt-F1.
  2. Выполните аутентификацию как пользователь student с паролем student.
  3. В приглашении командной строки введите man cp.
  4. Ответьте на следующие вопросы:
    • Для чего предназначена утилита cp?
    • Что делает параметр -r при использовании с cp?
    • Кто написал утилиту cp?
    • По какому адресу электронной почты можно сообщить об обнаруженных ошибках?
    • В каком разделе руководства находится страница cp?
    • Если необходимо, чтобы утилита cp запрашивала подтверждение перед перезаписью существующего файла, какой параметр следует использовать?
  5. Закройте man, нажав q.
  6. Введите logout, затем нажмите Alt-F7.

Работа с утилитой info

Помимо man, для просмотра документации по командам, утилитам, службам и файлам Linux можно использовать утилиту info. Возникает закономерный вопрос: зачем нужен info, если уже есть man? Обе утилиты преследуют схожую цель, однако реализуют её по-разному.

Утилита man — «быстрый» справочник. Man-страницы содержат много информации, но не предназначены для обучения. По сути, man говорит: «Вот утилита и её синтаксис — разберитесь сами».

Утилита info, напротив, ориентирована на обучение. Большинство узлов info содержат ту же информацию, что и man-страницы. Однако узлы info обычно значительно подробнее и действительно учат работать с тем или иным инструментом Linux.

Примечание

Единицы информации, отображаемые утилитой info, называются не страницами, а узлами (nodes). Почему — станет понятно далее в этой главе.

Запуск info выполняется так же, как и man: достаточно ввести info и следом — имя команды, утилиты, службы или файла, о которых нужно получить информацию. Например, ранее мы использовали man для просмотра информации об утилите ls. Чтобы изучить ls с помощью info, введите info ls. В результате отобразится информация, показанная на рис. 2-7.

Сразу же можно заметить несколько отличий от man. Информация, доступная в man-странице ls, достаточно скудна. info, напротив, предоставляет гораздо более подробные сведения: узел info объясняет, что делает утилита ls и чего следует ожидать при её использовании.

Обратите внимание на рис. 2-7: в верхней строке отображения info показана информация о текущей странице. Файл с информацией называется coreutils.info. В данный момент в этом файле отображается узел ls invocation. Следующий узел в файле называется dir invocation.

Одно из ключевых отличий info от man состоит в том, что info разделяет информацию на узлы, тогда как man отображает всю информацию об утилите или команде на одной странице. Для навигации в интерфейсе info и между узлами используйте клавиши из табл. 2-4.

Рис. 2-7. Просмотр информации об утилите ls с помощью info.

Рис. 2-7. Использование info для просмотра информации об утилите ls.

Как и в man, в info можно выполнять поиск. Для поиска в текущем узле нажмите Ctrl-S. При этом появится приглашение I-search, как показано на рис. 2-8. В этом приглашении введите искомый текст и нажмите Enter. Будет отображено первое вхождение введённого текста после текущего положения курсора. Повторное нажатие Ctrl-S переместит курсор к следующему вхождению.

Клавиша Функция
стрелка вниз Прокрутка на одну строку вниз
стрелка вверх Прокрутка на одну строку вверх
Page Down Прокрутка на одну страницу вниз
Page Up Прокрутка на одну страницу вверх
пробел Прокрутка на одну страницу вниз
Del или Backspace Прокрутка на одну страницу вверх
Home Переход к началу узла
End Переход к концу узла
n Переход к следующему узлу
p Переход к предыдущему узлу
q Закрытие текущего узла и выход из утилиты info

Табл. 2-4. Клавиши навигации в info.

Рис. 2-8. Поиск информации в узле info.

Рис. 2-8. Поиск информации в узле info.

Упражнение 2-6. Работа с утилитой info

В этом упражнении вы попрактикуетесь в использовании утилиты info для просмотра документации в системе Linux. Упражнение можно выполнить на виртуальной машине, прилагаемой к книге. Для получения правильно настроенной среды загрузите снимок состояния (snapshot) 2-1.

VIDEO Посмотрите видео к упражнению 2-6 с демонстрацией выполнения этого задания.

Выполните следующие действия:

  1. Если вы ещё этого не сделали, загрузите систему Linux и войдите в неё.
  2. При необходимости запустите сеанс терминала.
  3. В приглашении командной строки введите info rm.
  4. Ответьте на следующие вопросы:
    • Для чего предназначена утилита rm?
    • Что делает параметр -v при использовании с rm?
    • В каком узле находится документация по rm?
    • Какой узел предшествует текущему?
    • Какой узел следует за текущим?
    • Если необходимо, чтобы утилита rm запрашивала подтверждение перед удалением каждого файла, какой параметр следует использовать?
    • Если нужно быть уверенным, что удалённый файл не может быть восстановлен, подходит ли для этого утилита rm?
  5. Закройте info, нажав q.

Теперь, когда вы умеете работать с оболочкой bash, перейдём к рассмотрению задач, которые необходимо уметь выполнять с её помощью. Следующая тема посвящена работе с переменными окружения.