Книга Learning the vi and Vim Editors: Unix Text Processing («Изучаем редакторы vi и Vim: работа с текстом в системе Unix»), 7-е издание (O’Reilly, 2008), расскажет вам все, что необходимо знать о редакторе vi. В редакторе Emacs можно воспользоваться справочной системой, запустив редактор, а затем нажав сочетание клавиш Ctrl+H и клавишу T. Можно также почитать книгу GNU Emacs Manual («Руководство по редактору GNU Emacs») (Free Software Foundation, 2011).
У вас может появиться искушение поэкспериментировать на начальных этапах с более дружественным редактором, таким как Pico или одним из множества имеющихся GUI-редакторов. Однако, если вы сразу привыкаете к программе, лучше не следовать такой практике.
примечание
Именно при редактировании текста вы впервые увидите отличие терминала от графического интерфейса пользователя. Редакторы вроде vi запускаются внутри окна терминала с помощью стандартного интерфейса ввода/вывода. Редакторы с графическим интерфейсом запускаются в собственном окне, которое не зависит от терминала и снабжено собственным интерфейсом. Редактор Emacs по умолчанию запускается в GUI-режиме, но может быть запущен и в окне терминала.
2.13. Получение интерактивной справки
Операционные системы Linux снабжены документацией.
$ man ls
Большинство страниц руководства содержат главным образом справочную информацию, возможно, с некоторыми примерами и перекрестными ссылками. Не ожидайте увидеть учебное пособие и не рассчитывайте на воодушевляющий литературный стиль.
Когда у команды много параметров, они перечисляются на странице руководства в каком-либо систематизированном виде (например, в алфавитном порядке). Степень их важности при этом определить невозможно. Если вы достаточно терпеливы, то в большинстве случаев сможете найти все необходимые сведения в руководстве.
Чтобы выполнить поиск на странице руководства по ключевому слову, используйте параметр — k:
$ man — k
Это полезно, если вы не вполне уверены в названии необходимой команды. Например, если вы ищете команду для сортировки чего-либо, введите следующее:
$ 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
Некоторые версии системы сваливают всю доступную документацию в каталог /usr/share/doc, не заботясь о предоставлении какой-либо справочной системы вроде man или info. Загляните в этот каталог, если вам необходима документация, и, конечно же, поищите в Интернете.
2.14. Ввод и вывод с помощью оболочки
Теперь, когда вы знакомы с основными командами системы Unix, файлами и каталогами, вы готовы к изучению перенаправления стандартных ввода и вывода. Начнем со стандартного вывода.
Чтобы направить результат команды
$
Оболочка создаст файл
Вы можете добавить выводимые данные к файлу вместо его перезаписи с помощью такого синтаксиса перенаправления >>:
$
Это удобный способ собрать все выходные данные в одном месте, когда выполняется последовательность связанных команд.
Чтобы отправить стандартный вывод какой-либо команды на стандартный вход другой команды, используйте символ вертикальной черты (|). Чтобы понять, как он работает, попробуйте набрать следующие команды:
$ head /proc/cpuinfo
$ head /proc/cpuinfo | tr a-z A-Z
Можно пропустить выходные данные через любое количество команд. Для этого добавляйте вертикальную черту перед каждой дополнительной командой.
2.14.1. Стандартная ошибка
Иногда при перенаправлении стандартного вывода вы можете обнаружить, что команда выводит в терминал что-то еще. Это называется
Например, такая команда вызовет ошибку:
$ ls /fffffffff > f
После ее выполнения файл f должен быть пустым, однако вы увидите в терминале следующее сообщение стандартной ошибки:
ls: cannot access /fffffffff: No such file or directory
Если желаете, можете перенаправить стандартную ошибку. Чтобы, например, отправить стандартный вывод в файл f, а стандартную ошибку в файл e, используйте синтаксис 2> следующим образом:
$ ls /fffffffff > f 2> e
Число 2 определяет
Вы можете также направить стандартную ошибку туда же, куда осуществляется стандартный вывод, с помощью нотации >&.
Например, чтобы отправить стандартный вывод и стандартную ошибку в файл f, попробуйте такую команду:
$ ls /fffffffff > f 2>&1
2.14.2. Перенаправление стандартного ввода
Чтобы отправить файл на стандартный ввод команды, используйте оператор <:
$ head < /proc/cpuinfo
Вам может встретиться команда, которой потребуется указанный выше тип перенаправления, но поскольку большинство команд системы Unix принимает имена файлов в качестве аргументов, такое происходит нечасто. Эту команду можно было бы переписать в виде head /proc/cpuinfo.
2.15. Объяснение сообщений об ошибках
Когда у вас возникают проблемы при работе в системе, похожей на Unix (например, в Linux), вы
2.15.1. Структура сообщений об ошибке в Unix
Большинство команд системы Unix выдает одинаковые основные сообщения об ошибках, однако окончательный вид может немного различаться для разных команд. Вот пример сообщения, которое в том или ином виде обязательно вам встретится:
$ ls /dsafsda
ls: cannot access /dsafsda: No such file or directory
Это сообщение состоит из трех частей.
• Название команды: ls. Некоторые команды опускают такую идентифицирующую информацию, и это может раздражать при написании сценариев оболочки, хотя, по сути, это не так уж и важно.
• Имя файла, /dsafsda, которое является более конкретной информацией. Указанный путь содержит ошибку.
• Сообщение об ошибке No such file or directory указывает на ошибку в имени файла.
Если собрать эти части воедино, получится нечто вроде «команда ls пыталась открыть файл /dsafsda, но не смогла, поскольку такого файла нет». Это может казаться очевидным, однако подобные сообщения сбивают с толку, если вы запустите сценарий оболочки, который содержит ошибку в другой команде.
При устранении ошибок всегда начинайте разбираться с первой ошибки. Некоторые команды сообщают о том, что они ничего не смогут сделать до выяснения причин других ошибок. Представьте, например, что вы запускаете выдуманную команду под названием scumd, которая выдает такое сообщение об ошибке:
scumd: cannot access /etc/scumd/config: No such file or directory