Именно при редактировании текста вы впервые увидите отличие терминала от графического интерфейса пользователя. Редакторы вроде vi запускаются внутри окна терминала с помощью стандартного интерфейса ввода/вывода. Редакторы с графическим интерфейсом запускаются в собственном окне, которое не зависит от терминала и снабжено собственным интерфейсом. Редактор Emacs по умолчанию запускается в GUI-режиме, но может быть запущен и в окне терминала.
2.13. Получение интерактивной справки
Операционные системы Linux снабжены документацией. Страницы руководства расскажут вам обо всем необходимом для основных команд. Например, чтобы увидеть страницу руководства по команде ls, введите следующий запрос:
$ man ls
Большинство страниц руководства содержат главным образом справочную информацию, возможно, с некоторыми примерами и перекрестными ссылками. Не ожидайте увидеть учебное пособие и не рассчитывайте на воодушевляющий литературный стиль.
Когда у команды много параметров, они перечисляются на странице руководства в каком-либо систематизированном виде (например, в алфавитном порядке). Степень их важности при этом определить невозможно. Если вы достаточно терпеливы, то в большинстве случаев сможете найти все необходимые сведения в руководстве.
Чтобы выполнить поиск на странице руководства по ключевому слову, используйте параметр -k:
$ man -k keyword
Это полезно, если вы не вполне уверены в названии необходимой команды. Например, если вы ищете команду для сортировки чего-либо, введите следующее:
$ man -k sort
—snip—
comm (1) –сравнивает два отсортированных файла строка за строкой
qsort (3) –сортирует массив
sort (1) –сортирует строки текстового файла
sortm (1) –сортирует сообщения
tsort (1) –выполняет топологическую сортировку
—snip—
Результат включает название страницы руководства, раздел руководства (см. ниже), а также краткое описание того, что содержит данная страница руководства.
примечание
Если у вас есть какие-либо вопросы насчет команд, рассмотренных в предыдущих разделах, можете попробовать найти ответы с помощью команды man.
На страницы руководства ссылаются с помощью пронумерованных разделов. Когда кто-либо приводит ссылку на страницу руководства, то в скобках после названия указывается номер раздела, например, так: ping(8). В табл. 2.3 перечислены все разделы с их нумерацией.
Таблица 2.3. Разделы интерактивного руководства
Раздел
Описание
1
Команды пользователя
2
Системные вызовы
3
Документация к высокоуровневой программной библиотеке Unix
4
Интерфейс устройств и информация о драйверах
5
Описание файлов (файлы конфигурации системы)
6
Игры
7
Форматы файлов, условные обозначения и кодировки (ASCII, суффиксы и т. д.)
8
Системные команды и серверы
Разделы 1, 5, 7 и 8 служат хорошим дополнением к данной книге. Раздел 4 может пригодиться в редких случаях, а раздел 6 был бы замечателен, если бы его сделали немного больше. Вероятно, вы не сможете воспользоваться разделом 3, если вы не программист, однако вам удастся понять раздел 2, когда вы узнаете из этой книги немного больше о системных вызовах.
Вы можете выбрать страницу руководства по разделу. Это важно, поскольку система отображает первую из страниц, на которой ей удается обнаружить нужное понятие. Например, чтобы прочитать описание файла /etc/passwd (а не команды passwd), можно добавить номер раздела перед названием страницы:
$ man 5 passwd
Страницы руководства содержат основные сведения, но есть и другие способы получить интерактивную справку. Если вам необходимо узнать что-либо о параметре команды, введите название команды, а затем добавьте параметр —help или -h (варианты различны для разных команд). В результате вы можете получить множество ответов (как, например, в случае с командой ls —help) или, возможно, сразу то, что нужно.
Когда-то участники проекта GNU Project решили, что им не очень нравятся страницы руководства, поэтому появился другой формат справки — info (или texinfo). Зачастую объем этой документации больше, чем у обычных страниц руководства, и иногда она более сложная. Чтобы получить доступ к этой информации, введите команду info и укажите название команды:
$ info command
Некоторые версии системы сваливают всю доступную документацию в каталог /usr/share/doc, не заботясь о предоставлении какой-либо справочной системы вроде man или info. Загляните в этот каталог, если вам необходима документация, и, конечно же, поищите в Интернете.
2.14. Ввод и вывод с помощью оболочки
Теперь, когда вы знакомы с основными командами системы Unix, файлами и каталогами, вы готовы к изучению перенаправления стандартных ввода и вывода. Начнем со стандартного вывода.
Чтобы направить результат команды command в файл, а не в терминал, используйте символ перенаправления >:
$ command > file
Оболочка создаст файл file, если его еще нет. Если такой файл существует, то оболочка сначала сотрет его (затрет данные). Некоторые оболочки снабжены параметрами, предотвращающими затирание данных. В оболочке bash, например, наберите для этого set –C.
Вы можете добавить выводимые данные к файлу вместо его перезаписи с помощью такого синтаксиса перенаправления >>:
$ command >> file
Это удобный способ собрать все выходные данные в одном месте, когда выполняется последовательность связанных команд.
Чтобы отправить стандартный вывод какой-либо команды на стандартный вход другой команды, используйте символ вертикальной черты (|). Чтобы понять, как он работает, попробуйте набрать следующие команды:
$ head /proc/cpuinfo
$ head /proc/cpuinfo | tr a-z A-Z
Можно пропустить выходные данные через любое количество команд. Для этого добавляйте вертикальную черту перед каждой дополнительной командой.
2.14.1. Стандартная ошибка
Иногда при перенаправлении стандартного вывода вы можете обнаружить, что команда выводит в терминал что-то еще. Это называется стандартной ошибкой (stderr). Она является дополнительным выходным потоком для диагностики и отладки.
Например, такая команда вызовет ошибку:
$ ls /fffffffff > f
После ее выполнения файл f должен быть пустым, однако вы увидите в терминале следующее сообщение стандартной ошибки:
ls: cannot access /fffffffff: No such file or directory
Если желаете, можете перенаправить стандартную ошибку. Чтобы, например, отправить стандартный вывод в файл f, а стандартную ошибку в файл e, используйте синтаксис 2> следующим образом:
$ ls /fffffffff > f 2> e
Число 2 определяет идентификатор потока, который изменяет оболочка. Значение 1 соответствует стандартному выводу (по умолчанию), а значение 2 — стандартной ошибке.
Вы можете также направить стандартную ошибку туда же, куда осуществляется стандартный вывод, с помощью нотации >&.
Например, чтобы отправить стандартный вывод и стандартную ошибку в файл f, попробуйте такую команду:
$ ls /fffffffff > f 2>&1
2.14.2. Перенаправление стандартного ввода
Чтобы отправить файл на стандартный ввод команды, используйте оператор <:
$ head < /proc/cpuinfo
Вам может встретиться команда, которой потребуется указанный выше тип перенаправления, но поскольку большинство команд системы Unix принимает имена файлов в качестве аргументов, такое происходит нечасто. Эту команду можно было бы переписать в виде head /proc/cpuinfo.