Tải bản đầy đủ (.pdf) (880 trang)

IT training linux adm and syst progr

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (19.98 MB, 880 trang )


А

Practical Guide to Linux Commands,
Editors, and Shell Programming

SECOND EDITION

Mark G. Sobell

..••••

PRENTICE
HALL

Upper Saddle River, NJ • Boston • Indianapolis • San Francisco
New York· Toronto • Montreal • London • Munich • Paris • Madrid
Capetown • Sydney • Tokyo • Singapore • Mexico City


Администрирование и системное
проrраммирование

2-Е ИЗДАНИЕ
Марк г. Собель

Москва· Санкт-Петербург· Нижний Новгород· Воронеж
Ростов-на-Дону

.


Екатеринбург· Самара· Новосибирск

Киев· Харьков· Минск

2011


ББК 32.973.2-018.2
УДК 004.451
С54

С54

Собель М.
Linux. Администрирование и системное программирование. 2-е изд. — СПб.:
Питер, 2011. — 880 с.: ил.
ISBN 978-5-459-00450-2
Эта книга представляет собой всеобъемлющее руководство по работе, настройке, администрированию и системному программированию операционных систем семейства UNIX/Linux, включая
Ubuntu, Fedora, openSUSE, Red Hat, Debian, Mandriva, Mint и даже Mac OS X. Первая часть книги
дает начальные представления о работе в Linux: объясняется интерфейс командной строки, приводится обзор наиболее распространенных утилит, рассматривается иерархическая файловая система Linux, объясняется, как использовать свойства оболочки, чтобы ускорить работу в системе. Во
второй части рассмотрены два мощных Linux-редактора, работающих в режиме командной строки
и включенных в большинство дистрибутивов Linux: текстовый редактор vim и GNU-редактор
emacs. В третьей части книги освещаются аспекты работы с оболочками bash и tcsh. Четвертая
часть посвящена важным средствам программирования, широко используемым при системном
администрировании Linux и Mac OS: рассказывается об особенностях расширенного программирования оболочки с использованием bash; дается представление о создании сценариев администрирования Linux-систем на языке программирования Perl; подробно рассмотрены утилиты sed и
rsync. Заключительная часть книги представляет собой обширный справочник команд Linux,
включающий подробные примеры использования более сотни наиболее важных утилит.
Книга адресована широкому кругу читателей: от пользователей Linux и Mac OS X, желающих
узнать преимущества работы с системой из командной строки, до системных администраторов
и программистов, нуждающихся в более глубоком понимании системы и доступных им инструментальных средств.


ББК 32.973.2-018.2
УДК 004.451

Права на издание получены по соглашению с Prentice Hall, Inc. Upper Sadle River, New Jersey 07458. Все
права защищены. Никакая часть данной книги не может быть воспроизведена в какой бы то ни было форме
без письменного разрешения владельцев авторских прав.
Информация, содержащаяся в данной книге, получена из источников, рассматриваемых издательством как
надежные. Тем не менее, имея в виду возможные человеческие или технические ошибки, издательство не
может гарантировать абсолютную точность и полноту приводимых сведений и не несет ответственности за
возможные ошибки, связанные с использованием книги.

ISBN 978-0131367364 англ.
ISBN 978-5-459-00450-2

© Prentice Hall, Inc. 2010
© Перевод на русский язык ООО Издательство «Питер», 2011
© Издание на русском языке, оформление ООО Издательство «Питер», 2011


Оглавление
Предисловие . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
Особенности данной книги . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Содержание . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Часть I. Операционные системы Linux и Mac OS X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Часть II. Редакторы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
ЧастьIII. Оболочки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Часть IV. Средства программирования . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Часть V. Справочник команд . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Вспомогательные материалы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .


13
14
14
16
16
17
18
19

Глава 1. Добро пожаловать в Linux и Mac OS X . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
История UNIX и GNU–Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Что можно отнести к достоинствам Linux? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Обзор Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Дополнительные свойства Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Заключение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Упражнения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

21
25
31
37
39
40

ЧАСТЬ I. ОПЕРАЦИОННЫЕ СИСТЕМЫ LINUX И МАС OS X
Глава 2. Начнем! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
Соглашения, используемые в этой книге . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Вход в систему через терминал или эмулятор терминала . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Работа с оболочкой . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

su/sudo: Ограничение ваших полномочий (root-права) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Где найти документацию . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Дополнительная информация о входе в систему . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Заключение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Упражнения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

42
45
46
50
52
60
63
64

Глава 3. Утилиты . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
Специальные символы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Основные утилиты . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Работа с файлами . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
| (канал): Организация связи между процессами . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Еще четыре утилиты . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Сжатие и архивирование файлов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Команды для поиска мест, где находятся утилиты . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Получение информации о пользователе и системе . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Связь с другими пользователями . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Электронная почта . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Заключение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Упражнения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

65

66
69
76
77
80
85
87
91
92
93
95


6   Оглавление
Глава 4. Файловая система . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
Иерархическая файловая система . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Полные имена . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Работа с каталогами . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Права доступа . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Списки управления доступом (ACL-списки) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Ссылки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Заключение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Упражнения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

97
103
106
114
121
126

132
134

Глава 5. Оболочка . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137
Командная строка . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Стандартный ввод и стандартный вывод . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Запуск команды в фоновом режиме . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Генерация имени файла и расширение имени . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Встроенные команды . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Заключение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Упражнения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

137
143
154
157
161
162
164

ЧАСТЬ II. РЕДАКТОРЫ
Глава 6. Редактор vim . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168
История . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Руководство. Использование vim для создания и редактирования файла . . . . . . . . . . . . .
Введение в функции редактора vim . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Командный режим: перемещение курсора . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Режим ввода . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Командный режим: Удаление и изменение текста . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Поиск и замена . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Другие команды . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Копирование, перемещение и удаление текста . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Чтение и запись файлов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Установка параметров . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Расширенные технологии редактирования . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Единицы отсчета . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Заключение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Упражнения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

168
169
177
184
188
189
193
199
200
202
203
208
211
214
218

Глава 7. Редактор emacs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220
История . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Руководство по началу работы с emacs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Графический интерфейс пользователя emacs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Основные команды редактирования . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Интерактивная справка . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Расширенное редактирование . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Основные режимы: редактирование с восприимчивостью к языкам
программирования . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Дополнительная информация . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Заключение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Упражнения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

220
223
230
231
239
241
256
270
271
278


Оглавление    
  7
ЧАСТЬ III. ОБОЛОЧКИ
Глава 8. Оболочка Bourne Again Shell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 282
Предыстория . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Основы оболочки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Параметры и переменные . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Специальные символы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Процессы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
История . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Псевдонимы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Функции . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Управление bash: Свойства и настройки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Обработка командной строки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Заключение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Упражнения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

283
284
304
320
321
324
341
344
347
351
362
364

Глава 9. Оболочка TC Shell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 367
Сценарии оболочки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Вход в оболочку TC Shell и выход из нее . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Свойства, общие для оболочек Bourne Again Shell и TC Shell . . . . . . . . . . . . . . . . . . . . . . . .
Перенаправление стандартной ошибки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Работа с командной строкой . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Переменные . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Управляющие структуры . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Встроенные команды . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Заключение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Упражнения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Упражнения повышенной сложности . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

368
369
371
377
378
384
397
406
411
412
413

ЧАСТЬ IV. СРЕДСТВА ПРОГРАММИРОВАНИЯ
Глава 10. Программирование оболочки Bourne Again Shell . . . . . . . . . . . . . . . . 416
Управляющие структуры . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Описатели файлов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Параметры и переменные . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Встроенные команды . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Выражения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Программы оболочки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Заключение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Упражнения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Упражнения повышенной сложности . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

417
449
452
465

480
488
499
501
502

Глава 11. Язык сценариев Perl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 504
Введение в Perl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Переменные . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Управляющие структуры . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Работа с файлами . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Сортировка . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Подпрограммы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Регулярные выражения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

504
512
520
530
534
535
538


8   Оглавление
Модули CPAN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Примеры . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Заключение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Упражнения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Упражнения повышенной сложности . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .


544
546
550
550
551

Глава 12. Язык обработки шаблонов AWK . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 552
Синтаксис . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Аргументы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Ключи . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Примечания . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Основы языка . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Примеры . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Заключение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Упражнения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Упражнения повышенной сложности . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

552
553
553
554
554
562
583
584
584

Глава 13. Редактор sed . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 585
Синтаксис . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Аргументы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Ключи . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Основы редактора . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Примеры . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Заключение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Упражнения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

585
585
585
586
590
600
601

Глава 14. Утилита безопасного копирования rsync . . . . . . . . . . . . . . . . . . . . . . . 602
Синтаксис . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Аргументы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Ключи . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Примеры . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Заключение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Упражнения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

602
602
603
605
613
613


ЧАСТЬ V. СПРАВОЧНИК КОМАНД
Указатель команд . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Общие ключи . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
sample . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
aspell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
at . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
bzip2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
cal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
cat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
cd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
chgrp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
chmod . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
chown . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
cmp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

616
619
620
622
626
630
632
633
635
636
640
645
647



Оглавление    
  9
comm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
configure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
cp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
cpio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
crontab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
cut . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
date . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
dd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
df . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
diff . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
diskutil (OS X) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
ditto (OS X) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
dmesg . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
dscl (OS X) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
du . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
echo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
expr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
file . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
find . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
finger . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
fmt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
fsck . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
ftp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
gawk . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
gcc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
GetFileInfo (OS X) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
grep . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
gzip . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

head . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
kill . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
killall . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
launchctl (OS X) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
less . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
ln . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
lpr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
ls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
make . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
man . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
mkdir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
mkfs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Mtools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
mv . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
nice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
nohup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
od . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
open (OS X) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
otool (OS X) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
paste . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
pax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
plutil (OS X) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
pr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

649
651
653
657
662
665

667
669
672
674
680
683
685
686
689
691
694
697
699
706
708
710
715
722
723
727
729
734
737
738
740
741
744
748
750
753

761
767
771
772
775
778
780
782
782
786
788
790
792
798
799


10   Оглавление
ps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
rcp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
renice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
rlogin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
rm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
rmdir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
rsh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
rsync . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
scp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
sed . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
SetFile (OS X) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
sleep . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

sort . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
split . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
ssh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
stat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
strings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
stty . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
sysctl (OS X) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
tail . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
tee . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
telnet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
test . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
top . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
touch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
tr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
tty . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
tune2fs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
umask . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
uniq . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
w . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
wc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
which . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
who . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
xargs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

801
805
807
809
810
811

812
814
814
816
817
818
820
829
830
838
839
840
845
846
849
850
852
855
859
861
864
864
867
868
870
872
873
875
877



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

Вы узнаете как работать с основой операционной системы Mac OS X,
которая досталась ей от UNIX/Linux. Книга позволит вам «заглянуть
под капот», обходя стороной традиционный графический интерфейс пользователя
(GUI), который отождествляется большинством людей с компьютерами Macintosh,
и объяснит, как использовать мощный интерфейс командной строки (command-line
interface, CLI). В этой книге не приводится описание конкретного выпуска OS X, поскольку она подходит для всех последних выпусков. Материалы, относящиеся к Linux,
также относятся и к Mac OS X. Различия между этими операционными системами
оговариваются особо.
Mac OS X

Первым появился интерфейс командной строки (CLI), или текстовый
интерфейс, позволяющий управлять операционной системой Linux
прямо из командной строки. Тогда еще не было мыши, с помощью
которой можно было указывать на элементы экрана или перетаскивать значки. В некоторых программах (например, emacs) были реализованы примитивные окна, использующие весьма скромные возможности псевдографического оформления, предоставляемые набором ASCII-символов. Выделение областей экрана осуществлялось
с помощью негативного изображения.
Система Linux зарождалась и совершенствовалась именно в таком окружении,
поэтому вполне естественно, что все исходные инструменты Linux вызывались из
командной строки. В этой среде до сих пор скрывается реальная мощь Linux, чем
и объясняется тот факт, что многие профессионалы Linux работают исключительно
из командной строки. Благодаря четким описаниям и множеству примеров эта книга

показывает, как добиться наибольшей отдачи от вашей Linux-системы, используя
интерфейс командной строки.
Интерфейс
командной
строки

Дистрибутив Linux содержит ядро, утилиты и прикладные программы.
В настоящее время доступно множество дистрибутивов — Ubuntu,
Fedora, Red Hat, Mint, OpenSUSE, Mandriva, CentOS и Debian. Хотя дистрибутивы
несколько отличаются друг от друга, все они основаны на ядре Linux, утилитах и приложениях. В этой книге взят за основу тот код, который является общим для большинства дистрибутивов, поэтому вы можете использовать его независимо от того,
какой именно дистрибутив работает на вашей машине.
Дистрибутив
Linux


12   Предисловие
Новое в этом
издании

Это издание содержит множество новых и обновленных материалов:

�������������������������������
���������������������������
OS�������������������������
������������������������
X�����������������������
(по всей книге). В ча‰‰В нем дан обзор интерфейса командной строки Mac����������������������������
сти V рассматриваются утилиты и подчеркивается разница между теми ключами
утилит, которые используются при работе под управлением Linux, и теми ключами,
которые используются при работе под управлением Mac OS X.

‰‰Добавлена глава о языке сценариев Perl (глава 11).
‰‰Обновлено описание утилиты безопасного копирования rsync (глава 14).
‰‰В части V рассмотрено более пятнадцати новых утилит, включая некоторые утилиты, доступные только при работе под управлением Mac OS X.
Если вам приходилось читать книгу «A Practical Guide to Red Hat®
Linux®: Fedora™ and Red Hat Enterprise Linux» или «A Practical Guide
to Ubuntu Linux®», вы можете заметить схожесть изложенных в них
материалов с некоторыми материалами данной книги. В этих книгах очень похожи
предисловия и главы, посвященные утилитам (речь идет о главе 3 данной книги, но
не о части V), файловой системе, оболочке Bourne Again Shell (bash) и языку Perl.
Вместе с тем, в данной книге есть главы, которых нет в вышеупомянутых книгах, — это
главы, посвященные редакторам vim и emacs, оболочке TC Shell (tcsh), языкам AWK
и sed, утилите rsync, а также часть V, в которой подробно описываются 97 наиболее
востребованных утилит Linux и полезных программ Mac OS X.
Похожие
источники
информации

Эта книга адресована широкому кругу читателей. Для ее чтения не
нужен богатый опыт программирования, но предполагается наличие
некоторого опыта в использовании компьютерных систем. Она вполне подойдет:
‰‰студентам, изучающим предметы, в которых предусмотрено использование Linux
или Mac OS X;
‰‰опытным пользователям, желающим исследовать все преимущества работы с Linux
или Mac OS X из командной строки;
‰‰профессионалам, использующим Linux или Mac OS X в своей работе;
‰‰начинающим пользователям Macintosh, желающим узнать, что такое UNIX/Linux
и почему все продолжают говорить об их важности, а также как пользоваться их
преимуществами;
‰‰опытным пользователям Macintosh, желающим узнать, как воспользоваться всей
мощью UNIX/Linux, лежащей в основе Mac OS X;

‰‰пользователям UNIX, желающим применить свое мастерство работы с UNIX
к среде Linux или Mac OS X;
‰‰системным администраторам, нуждающимся в более глубоком понимании Linux
или Mac OS X и доступных им инструментальных средств, включая оболочку bash
и язык сценариев Perl;
‰‰студентам, изучающим компьютерные дисциплины, осваивающим операционную
систему Linux или Mac OS X;
‰‰программистам, которым нужно разобраться в программной среде Linux или Mac
OS X;
‰‰техническим специалистам, желающим постичь основы Linux или Mac OS X.
Круг
читателей


Особенности данной книги    13

«Linux. Администрирование и системное программирование» позволяет всецело усвоить вопросы использования Linux или Mac OS X из
командной строки. Независимо от уровня ваших исходных знаний, данная книга
предлагает сведения, необходимые в вашей практической деятельности. Прочитав эту
книгу, вы поймете, как использовать Linux/OS X, а содержимое книги послужит ценным справочником на многие последующие годы.
Для систем Macintosh всегда было доступно огромное количество свободного
программного обеспечения. К тому же большую активность проявляет сообщество
пользователей условно-бесплатных программ для Macintosh. Представляя UNIX/
Linux аспекты, присущие Mac OS X, эта книга открывает для пользователей Macintosh
огромные запасы свободного и дешевого программного обеспечения, применяемого
в Linux и других UNIX-подобных систем.
Преимущества
данной книги




В ДАННОЙ КНИГЕ ТАМ, ГДЕ ГОВОРИТСЯ О LINUX, ИМЕЕТСЯ В ВИДУ
НЕ ТОЛЬКО LINUX, НО И MAC OS X
Операционная система UNIX является общим предком как для Linux, так и для Mac OS X.
Несмотря на существенные различия в графических пользовательских интерфейсах (GUI)
этих двух операционных систем, их интерфейсы командной строки (CLI) очень похожи друг
на друга и во многих случаях совпадают. В этой книге описываются интерфейсы командных
строк как Linux, так и Mac OS X. Чтобы упростить чтение книги, термин Linux используется
в ней применительно и к Linux, и к Mac OS X. Там, где между этими двумя операционными
системами имеются различия, даются специальные пояснения.

Особенности данной книги
Структура книги рассчитана на легкое извлечение нужной информации в различных
ситуациях. Например, ее можно прочитать от корки до корки, изучив с нуля все, что
касается использования командной строки Linux. Но при наличии достаточного опыта
в работе с Linux можно использовать эту книгу как справочное пособие: достаточно
будет найти интересующую тему в оглавлении или указателе и прочитать обо всем,
что ее касается. Или же перейти к описанию одной из утилит в части V, «Справочник
команд».
Можно также рассматривать эту книгу в качестве каталога Linux. В книге также
имеется множество указателей на веб-сайты, из которых можно извлечь дополнительную информацию: считайте, что Интернет является своеобразным расширением
данной книги.
Книга «Linux. Администрирование и системное программирование» обладает
следующими особенностями:
‰‰Дополнительные разделы, позволяющие читать книгу на разных уровнях, возвращаясь к более сложному материалу после предварительной подготовки к его
усвоению.
‰‰Врезки ВНИМАНИЕ, обращающие ваше внимание на те процедуры, при проведении которых можно легко ошибиться, и подсказывающие правильные действия,
предупреждая возникновение проблем.
‰‰Врезки СОВЕТ, в которых даются сведения, позволяющие сэкономить время за
счет применения более рациональных подходов, или приводится дополнительная

информация, представляющая какую-нибудь пользу или интерес.


14   Предисловие
‰‰Врезки БЕЗОПАСНОСТЬ, указывающие способы повышения безопасности си-

стемы.
‰‰Веб-сайт www.sobell.com, поддерживающий книгу и включающий различные исправления, загружаемые примеры, приводимые в книге, указатели на полезные
веб-сайты и ответы на упражнения с четными номерами.
‰‰Практические примеры, которые приводятся во всех частях книги и иллюстрируют
изложенный в книге материал.
‰‰Множество полезных URL (интернет-адресов), ведущих на сайты, где можно получить программное обеспечение и информацию.
‰‰Заключения для каждой из глав, выделяющие наиболее важные из рассмотренных
вопросов.
‰‰Завершающие каждую главу упражнения для читателей, желающих отточить свое
мастерство. Ответы на упражнения с четными номерами доступны на веб-сайте
www.sobell.com.
‰‰Подробные описания важных инструментальных средств, созданных в рамках
проекта GNUs, включая gcc, систему конфигурации и сборки GNU, make, gzip,
и множество других инструментов.
‰‰Указатели, помогающие извлечь онлайн-документацию из множества источников,
включая локальную систему и Интернет.
‰‰Подробные описания важных утилит командной строки, разработанных компанией
Apple специально для операционной системы Mac OS X, включая diskutil, ditto,
dscl, GetFileInfo, launchctl, otool, plutil и SetFile.

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

qГлава 1, «Добро пожаловать в Linux и Mac OS X».
Здесь представлена предыстория появления на свет Linux и OS X. В главе
дается историческая справка по ����������������������������������������������
Linux�����������������������������������������
, краткая справка по ядру ���������������
OS�������������
X�����������
������������
Mach������
����������
, объясняется, как проект GNU помог Linux на первых порах, и рассматривается ряд
важных свойств Linux, отличающих эту операционную систему от других.

Часть I. Операционные системы Linux и Mac OS X



ВОЗМОЖНО, ОПЫТНЫМ ПОЛЬЗОВАТЕЛЯМ БУДЕТ ДОСТАТОЧНО
ВСЕГО ЛИШЬ БЕГЛО ПРОСМОТРЕТЬ ЧАСТЬ I
Если с системой UNIX/Linux уже приходилось иметь дело, возможно, будет вполне достаточно
просмотреть или пропустить некоторые или все главы первой части данной книги. Раздел
«Соглашения, используемые в этой книге» на с. 42, в котором объясняются принятые в книге
соглашения по типографскому оформлению текста, а также раздел «Где найти документацию»
на с. 52, в котором указываются как локальные, так и удаленные источники документации по
Linux, нужно просмотреть всем читателям.


Часть I. Операционные системы Linux и Mac OS X    15

В Части ���������������������������������������������������������������������

I��������������������������������������������������������������������
дается представление об операционной системе ����������������������
Linux�����������������
и начальные сведения о работе с ней.
‰‰Глава 2, «Начнем!».
Здесь объясняются соглашения по типографскому оформлению книги, помогающие представит материал в более понятном виде и упростить чтение книги.
Эта глава предоставляет базовую информацию и объясняет, как войти в систему,
изменить свой пароль, дать системе Linux команду с помощью оболочки и найти
документацию по системе.
‰‰Глава 3, «Утилиты».
Здесь объясняется интерфейс командной строки и дается краткое введение
в более чем 30 утилит, использующих данный интерфейс. Изучение этой главы
позволяет понять, что такое операционная система Linux, и узнать, что собой
представляют некоторые инструментальные средства повседневного пользования.
В этой главе рассматриваются следующие утилиты:
yy grep, осуществляющая поиск в файлах строки символов;
yy unix2dos, осуществляющая преобразование текстовых файлов Linux в формат
Windows;
yy tar, создающая архивные файлы, которые могут содержать многие другие файлы;
yy bzip2 и gzip, сжимающие файлы, позволяя им занимать меньше места на диске,
и позволяющие вам пересылать их по сети с более высокой скоростью;
yy diff, выводящая различия между двумя текстовыми файлами.
‰‰Глава 4, «Файловая система».
Здесь рассматривается иерархическая файловая система Linux, включая файлы,
имена файлов, путевые имена, работу с каталогами, права доступа, а также жесткие
и символьные ссылки. Знание файловой системы позволяет организовать свои данные таким образом, чтобы не тратить лишнее время на поиск нужной информации.
Это дает также возможность делиться некоторыми своими файлами с другими
пользователями, оставляя остальные файлы закрытыми от посторонних глаз.
‰‰Глава 5, «Оболочка».
Здесь объясняется, как использовать свойства оболочки, чтобы ускорить и облегчить свою работу. Все свойства, рассмотренные в этой главе, присущи как bash,

так и tcsh. В этой главе рассматриваются следующие вопросы:
yy использование ключей командной строки для изменения способов работы
команды;
yy внесение незначительных изменений в командную строку для перенаправления
ввода в команду, чтобы он исходил из файла, а не с клавиатуры;
yy перенаправление вывода команды в файл вместо экрана;
yy использование каналов для отправки вывода из одной утилиты непосредственно другой утилите, чтобы все задачи решались с использованием только одной
командной строки;
yy запуск программ в фоновом режиме, чтобы можно было работать с одной задачей, в то время как Linux будет работать с другой;
yy использование оболочки для генерации файловых имен с целью экономии времени на их набор и с целью оказания помощи в том случае, если пользователь
забыл конкретное имя файла.


16   Предисловие

Часть II. Редакторы
Во второй части книги рассмотрены два мощных классических ����������������������
Linux�����������������
-редактора, работающих в режиме командной строки. Текстовый редактор vim, «улучшенная» версия
широко распространенного редактора vi, а также популярный GNU-редактор emacs
включены в большинство дистрибутивов Linux. Текстовые редакторы позволяют
создавать и изменять текстовые файлы, в которых могут содержаться программы,
сценарии оболочки, памятки и данные для ввода в программы форматирования текста.
Поскольку администрирование системы Linux�����������������������������������
����������������������������������������
предполагает редактирование конфигурационных файлов, имеющих текстовую основу, высокопрофессиональные Linuxадминистраторы имеют большой опыт по части использования текстовых редакторов.
‰‰Глава 6, «Редактор vim».
Глава начинается с руководства по редактору vim, далее в ней объясняется, как
используются многие расширенные функции редактора, включая специальные
символы в строках поиска, универсальный и именованные буферы, параметры,

маркеры и выполнение команд непосредственно из самого редактора. Глава завершается кратким справочником по командам этого редактора.
‰‰Глава 7, «Редактор emacs».
Глава открывается руководством по работе с редактором, а затем в ней объясняются многие свойства редактора emacs, а также показывается, как используются
клавиши META, ALT и ESCAPE. Дополнительно рассматривается привязка клавиш,
буферы, а также полный поиск и поиск с последовательным уточнением, как с использованием символьных строк, так и с использованием регулярных выражений.
Дается подробное описание взаимоотношений между Указателем, Курсором,
Меткой и Областью. Также объясняется, как извлечь пользу из всеобъемлющих
интерактивных справочных средств, доступных из редактора emacs.
Другие рассматриваемые темы включают вырезку и вставку, использование
нескольких окон и областей, работу с режимами emacs — особенно с режимом
языка C, который помогает программистам создавать и отлаживать C-код. Глава 7
завершается кратким справочником по командам редактора emacs.

Часть III. Оболочки
Часть III посвящена более подробному рассмотрению оболочки bash и введению
в оболочку TC Shell (tcsh).
‰‰Глава 8, «Оболочка Bourne Again Shell».
Здесь повествование продолжается с того места, на котором оно остановилось
в главе 5, при этом рассматриваются более тонкие аспекты работы с оболочкой.
Для примеров в этой главе используется Bourne Again Shell — bash, оболочка,
практи­чески всегда используемая для системных сценариев оболочки. В главе 8
описывается:
yy как использовать файлы загрузки, ключи и свойства оболочки для ее настройки;
yy как использовать управление заданиями для их приостановки и перемещения
из активного в фоновый режим и обратно;


Часть IV. Средства программирования    17

yy как модифицировать и повторно выполнять команды, используя исторический

список оболочки;
yy как создавать псевдонимы для настройки команд;
yy как в сценариях оболочки работать с переменными, созданными пользователем,
и с переменными, являющимися ключевыми словами;
yy как настраивать функции, аналогичные сценариям оболочки, но выполняемые
значительно быстрее;
yy как создавать и выполнять простые сценарии оболочки;
yy как перенаправлять сообщения об ошибках, чтобы они попадали в файл, а не
на экран.
‰‰Глава 9, «Оболочка TC Shell».
Здесь описывается оболочка tcsh, и рассматриваются как общие для bash и tcsh
свойства, так и те свойства, которые отличают одну оболочку от другой. В этой
главе объясняется:
yy как запустить tcsh и поменять оболочку, используемую по умолчанию на tcsh;
yy как перенаправить сообщения об ошибках, чтобы они попадали в файл, а не на
экран;
yy как использовать управляющие структуры для изменения порядка выполнения
сценариев оболочки;
yy как работать с числовыми переменными и переменными массивов tcsh;
yy как использовать встроенные команды оболочки.

Часть IV. Средства программирования
Часть IV посвящена важным средствам программирования, широко используемым
при системном администрировании Linux и Mac OS, а также при создании программ
общего назначения.
‰‰Глава 10, «Программирование оболочки Bourne Again Shell».
Здесь повествование продолжается с того места, на котором оно остановилось
в главе������������������������������������������������������������������
 �����������������������������������������������������������������
8, рассматриваются особенности расширенного программирования оболочки с использованием bash, подкрепляемые подробными примерами. В этой

главе рассматриваются:
yy управляющие структуры, такие как if…then…else и case;
yy переменные, включая вопросы их локальности;
yy арифметические и логические (булевы) выражения;
yy некоторые, наиболее полезные встроенные команды оболочки, включая exec,
trap и getopts.
После усвоения основ Linux можно будет воспользоваться своим знаниями для
создания более сложных и специализированных программ, используя в качестве
языка программирования оболочку.
В главе 10 даются две сложные задачи, связанные с программированием оболочки, а затем шаг за шагом показывается методика их решения. В первой задаче


18   Предисловие
используется����������������������������������������������������������������
���������������������������������������������������������������
рекурсия�������������������������������������������������������
������������������������������������������������������
для���������������������������������������������������
��������������������������������������������������
создания������������������������������������������
�����������������������������������������
иерархии���������������������������������
��������������������������������
каталогов�����������������������
. ���������������������
Во второй задаче разрабатывается программа quiz, показывающая, как создается сценарий оболочки,
взаимодействующий с пользователем, и объясняется порядок обработки данных
в сценарии. (Примеры в части ������������������������������������������������
V�����������������������������������������������
также показывают многие свойства утилит, которые можно использовать в сценариях оболочки.)

‰‰Глава 11, «Язык сценариев Perl».
Здесь дается представление о популярном языке программирования Perl�����
���������
, обладающим весьма широкими возможностями. В этой главе рассматриваются:
yy справочные средства Perl, включая perldoc;
yy переменные Perl и управляющие структуры;
yy обработка файлов;
yy регулярные выражения;
yy установка и использование CPAN-модулей.
На языке Perl написаны многие сценарии администрирования Linux-систем.
После чтения главы 11 вы сможете лучше разбираться в этих сценариях, а также
приступить к созданию своих собственных сценариев. Эта глава включает множество примеров сценариев на языке Perl.
‰‰Глава 12, «Язык обработки шаблонов AWK».
Здесь объясняется, как создавать программы, использующие довольно мощный
язык AWK, фильтрующий данные, записывающий отчеты и извлекающий данные
из Интернета. В разделе расширенного программирования описывается, как установить двунаправленную связь с другой программой, используя сопроцессы, и как
получить ввод по сети, а не из локального файла.
‰‰Глава 13, «Редактор sed».
Здесь дается описание утилиты sed, неинтерактивного потокового редактора,
который находит множество применений в качестве фильтра внутри сценариев
­оболочки. В этой главе рассматривается порядок использования буферов sed для
написания достаточно простых, но мощных программ и дается множество примеров.
‰‰Глава 14, «Утилита безопасного копирования rsync».
Здесь рассматривается rsync, надежная утилита, копирующая обычный файл
или иерархию каталога на локальной машине или между локальной системой
и другой системой, подключенной к сети. По мере написания программ, эту утилиту можно использовать для их резервного копирования на другие системы.

Часть V. Справочник команд
Система Linux включает сотни утилит. Главы 12–14, а также часть V предоставляют
подробные примеры использования сотни наиболее важных утилит, с помощью которых можно решить проблемы, не обращаясь к программированию на языке C. Для тех,

кто уже знаком с системами UNIX/Linux, эта часть книги послужит весьма объемным
и простым в использовании справочником. Для недостаточно опытных пользователей
она послужит полезным подспорьем при усвоении предыдущих частей книги.


Вспомогательные материалы    19

Хотя описания утилит, предоставленные в главах 12–14, а также в части V, даны
в формате, похожем на тот, который используется в справочных страницах Linuxруководства (man-страницах), они намного проще читаются и усваиваются. Описания
именно этих утилит включены в книгу потому, что они широко востребованы в повседневной работе (например, ls и cp), являются мощными средствами, особенно
полезными в сценариях оболочки (sort, paste и test), помогают работать с системой
Linux (ps, kill и fsck) или позволяют связываться с другими системами (ssh, scp и ftp).
Описание каждой утилиты включает исчерпывающее объяснение действий ее наиболее полезных ключей с указанием различий между ключами, поддерживаемыми
при работе под управлением Mac OS X, и ключами, поддерживаемыми при работе
под управлением Linux. Подразделы «Комментарии» и «Примечания» полны советов
и приемов, позволяющих извлечь из применения утилит все, на что они способны.
В подразделах «Примеры» показывается использование этих утилит в реальной жизни, как в одиночку, так и совместно с другими утилитами с целью составления отчетов,
суммирования данных и извлечения информации. Чтобы увидеть, насколько объемны эти примеры, обратите внимание на разделы «Примеры» для языка AWK (более
20 страниц в главе 12), для утилиты ftp (в ее описании в части V) и для утилиты sort
(также в части V).

Вспомогательные материалы
На личной странице автора (www.sobell.com) содержатся загружаемые листинги всех
длинных программ, приведенных в данной книге, а также указатели на множество
интересных и полезных сайтов, связанных с Linux и OS X, имеющихся во Всемирной
паутине, перечень исправлений, ответы на все упражнения с четными номерами,
а также дается приглашение на внесение уточнений, написание комментариев и высказывание предложений.
Я беру на себя всю ответственность за любые ошибки и упущения, допущенные
в данной книге. Если вы их обнаружите или просто захотите что-то прокомментировать, поставьте меня в известность (), и я внесу исправления в следующее издание. На моей личной странице (www.sobell.com) имеется перечень ошибок
и упоминания о тех, кто их обнаружил. Там также имеются копии длинных сценариев

из данной книги и указатели на множество интересных веб-страниц, посвященных
Linux.
Марк Собель (Mark G. Sobell)
Сан-Франциско, Калифорния


Глава 1. Добро пожаловать в Linux
и Mac OS X
Операционная система������������������������������������������������������
 �����������������������������������������������������
— это низкоуровневое программное обеспечение, занимающееся планировкой задач, распределением памяти и управлением интерфейсом
с внешним оборудованием, например с принтерами, дисковыми приводами, экраном,
клавиатурой и мышью. Операционная система состоит из двух основных частей: ядра
и системных программ. Ядро занимается распределением ресурсов машины, включая память, дисковое пространство и циклы центрального процессора, между всеми
другими программами, запущенными на компьютере. К системным программам относятся драйверы устройств, библиотеки, служебные программы (утилиты), оболочки
(интерпретаторы команд), сценарии и файлы конфигурации, прикладные программы,
серверы и программы документации. Они занимаются выполнением высокоуровневых
вспомогательных задач, часто работая в качестве серверов в клиент-серверных структурах. Многие библиотеки, серверы и служебные программы были написаны в рамках
проекта GNU, краткие сведения о котором будут даны ниже.
Ядро Linux было разработано финским студентом Линусом Торвальд­
сом (Linus Torvalds), который воспользовался Интернетом, чтобы тут
же запустить исходный код во всеобщий свободный доступ. Торвальдс выпустил Linux
версии 0.01 в сентябре 1991 года.
Новая операционная система стала результатом большого и напряженного труда.
Программисты всего мира довольно быстро расширили ядро и разработали другие инструментальные средства, добавив наряду с новыми функциональными возможностями и те, что уже встречались в операционных системах BSD UNIX и System V UNIX
(SVR4). Название Linux является комбинацией, составленной из слов Linus и UNIX.
Операционная система Linux, разработанная благодаря сотрудничеству многих
людей по всему миру, является продуктом Интернета и относится к бесплатным операционным системам (имеющим открытый код). Другими словами, весь исходный код
находится в свободном распространении. Его можно совершенно свободно изучать,
распространять и изменять. В результате код доступен без каких-либо ограничений, то

есть совершенно бесплатно, это касается программного обеспечения, исходного кода,
документации и поддержки (через тематические конференции, подписки и другие
интернет-ресурсы). Определение свободного программного обеспечения GNU (www.
gnu.org/philosophy/free-sw.html) трактуется следующим образом:
Ядро Linux

В понятие «свободное программное обеспечение» вкладывается смысл
свободы, а не цены. Чтобы вникнуть в это понятие, нужно думать
о «свободе» как о «свободе слова», а не как о «свободном (то есть бесплатном) пиве».
Бесплатное
пиво

Операционная система OS X запускает ядро Mach, разработанное
в университете Карнеги-Меллона (Carnegie Mellon University, CMU),
и является сво­бодным программным обеспечением. CMU оформила свою работу
в проект в 1994 году, хотя другие группы продолжали эту линию исследований. Much
Ядро Mach


История UNIX и GNU–Linux    21

относится к программному обеспечению Mac OS X и имеет открытый исходный код:
ядро Mac OS X основано на коде Mach и FreeBSD, утилиты взяты из BSD и проекта
GNU, а системные программы большей частью взяты из кода BSD, хотя компания
Apple разработала и ряд новых программ.



LINUX, OS X И UNIX
Linux и OS X тесно связаны с операционной системой UNIX. В данной книге рассматривается

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

История UNIX и GNU–Linux
Этот раздел посвящен предыстории, связывающей UNIX и Linux, а также отношениям
между GNU и Linux. По адресу www.levenez.com/unix можно найти довольно любопытную историческую диаграмму, связанную с UNIX.

UNIX как источник наследственных черт Linux
Система ����������������������������������������������������������������������
UNIX������������������������������������������������������������������
была создана теми исследователями, которые нуждались в наборе современных компьютерных инструментов, помогающих в разработке их проектов. Эта
система позволяла группе людей, ведущих совместную работу над проектом, использовать общие избранные данные и программы, сохраняя при этом конфиденциальность
всей остальной информации.
Главную роль в дальнейшем росте популярности операционной системы UNIX
сыграли университеты и колледжи благодаря так называемому «четырехлетнему
эффекту». Когда в 1975 году к операционной системе UNIX был открыт широкий
доступ, компания Bell Labs предложила ее образовательным учреждениям по весьма
скромной цене. В свою очередь, школы использовали эту операционную систему
в своих программах по изучению информатики, обеспечивая знакомство с ней всех,
кто изучал данный предмет. Поскольку UNIX представляла собой передовую систему
разработки, студенты стали осваивать довольно сложную среду программирования.
После ­прихода на производство бывшие студенты предполагали, что будут работать
в такой же передовой среде. По мере продвижения многих из них по карьерной
лестнице в коммерческом мире, операционная система �����������������������
UNIX�������������������
пробилась и в промышленную сферу.

Кроме ознакомления студентов с операционной системой UNIX, исследовательская группа по компьютерным системам (Computer Sys­
tems Research Group, CSRG) Калифорнийского университета в Беркли
разработала для нее существенные расширения и изменения. Фактиче­ски количество
внесенных популярных изменений было столь велико, что одна из версий была названа дистрибутивом программного обеспечения системы UNIX, разработанным
в Беркли — Berkeley Software Distribution (BSD) UNIX system (или просто Berkeley
UNIX). Другой основной версией стала UNIX System V (SVR4), производная от версий, разработанных и поддерживаемых компанией AT&T и лабораторией UNIX
BSD
(Berkeley)
UNIX


22   Глава 1. Добро пожаловать в Linux и Mac OS X
System Laboratories. Операционная система Mac OS X в своей основе унаследовала
очень многие черты именно от ветви BSD этого дерева.

Эволюционное развитие до 1983 года
Ричард Столлман (Richard Stallman, www.stallman.org) анонсировал1 Проект ��������
GNU�����
, запущенный в целях разработки операционной системы, включавшей в себя как ядро,
так и системные программы, и представил манифест GNU Manifesto2, начинающийся
следующими словами:
GNU, что означает «Gnu — это не UNIX» (Gnu’s Not UNIX), является названием
полностью UNIX-совместимой программной системы, которую я создал, поэтому
я могу бесплатно делиться ею со всеми, кто может ее использовать.
Несколькими годами спустя, когда Столлман понял, что своим высказыванием
он всех запутал, он добавил к предыдущему предложению следующее примечание:
Здесь дана несколько расплывчатая формулировка. Суть высказывания состояла
в том, что никто не должен платить за разрешение использовать систему GNU.
Но слова не прояснили ситуацию, и люди часто понимали это так, что копии GNU
должны всегда распространяться с минимальными изменениями или вообще в неизменном виде. Я не вкладывал в высказывание именно такой смысл, чуть позже

в манифесте упоминалась возможность для компаний предоставлять поддержку
пакета распространяемых программ с целью получения прибыли. Впоследствии
я понял, что нужно четко разграничить значение слова «free» в смысле свободы, от
значения этого же слова в смысле цены. Программное обеспечение, предваряемое
словом «�����������������������������������������������������������������������
free�������������������������������������������������������������������
», предоставляет пользователям свободу по его распространению и изменению. Некоторым пользователям копии могут доставаться бесплатно, а некоторые будут платить за приобретение копий, и если денежные средства помогают
поддержать процесс внесения усовершенствований в программное обеспечение, я не
вижу в этом ничего плохого. Важно понять, что все обладатели копий могут свободно сотрудничать со всеми, кто их использует.
В манифесте после краткого описания сути проекта и текущих достижений
Столлман приводит следующее продолжение:
Почему я должен создавать программы в рамках проекта GNU.
Я считаю, что золотое правило требует поделиться программой, которая мне
нравится, со всеми, кому она тоже нравится. Продавцы программ хотят разобщить
пользователей и добиться от них покорности, заставляя каждого согласиться
с тем, что он не вправе делиться программами ни с кем другим. Я отказываюсь
разрушать солидарность с другими пользователями подобным образом. Я не могу
с чистой совестью подписывать договор о нераспространении или лицензионное
соглашение. В течение многих лет я работал в лаборатории искусственного интеллекта, сопротивляясь подобным тенденциям и другим недружественным шагам, но
со временем они зашли слишком далеко: я не мог оставаться в учреждении, где все
это затрагивало меня помимо моей воли.
www.gnu.org/gnu/initial-announcement.html
www.gnu.org/gnu/manifesto.html

1
2


История UNIX и GNU–Linux    23


Поэтому, чтобы я мог и дальше бесплатно пользоваться компьютером, я решил объединить достаточное количество свободного программного обеспечения,
чтобы получить возможность обойтись без любых платных компьютерных программ. Я ушел из лаборатории искусственного интеллекта, чтобы лишить MIT
(Массачусетский технологический институт) каких-либо законных оснований
чинить мне препятствия по свободному распространению GNU.

Сцена следующая, 1991 год
Проект GNU успешно продвигался к своей цели. Была завершена основная часть
операционной системы GNU, за исключением ядра. Позже Ричард Столлман напишет
следующее:
К началу 90-х мы скомпоновали всю систему кроме ядра (и мы также работали
над ядром GNU Hurd1, которое запускалось в виде надстройки над Mach2). Вопреки
ожиданиям, разработка этого ядра давалась намного труднее, и мы все еще бились
над ее завершением3.
…Многие верили в то, что как только Линус Торвальдс завершит работу над
ядром, его друзья подыщут другое свободное программное обеспечение, и при наличии
всего самого необходимого ничто уже не сможет помешать сделать UNIX-подобную
систему доступной.
И не случайно они нашли именно то, что нужно, — систему GNU. Доступное и
свободное программное обеспечение4 стало звеном, завершающим систему, поскольку
проект GNU разрабатывался с этой целью с 1984 года. Цель разработки UNIXподобной системы под названием GNU была сформулирована в самом манифесте
GNU. В исходном анонсе проекта GNU также выделялся ряд оригинальных планов
по разработке системы GNU. Ко времени написания Linux система [GNU] была уже
практически завершена5.
В наши дни «операционная система» GNU запускается в виде надстройки над
ядрами FreeBSD (www.freebsd.org) и NetBSD (www.netbsd.org), соблюдая при этом
полную совместимость с двоичными кодами ��������������������������������������
Linux���������������������������������
, а также в виде надстройки предварительных версий Hurd и Darwin (developer.apple.com/opensource), уже без поддержки совместимости.

Свободно распространяемый код

Традиция свободного кода берет свое начало с тех времен, когда UNIX продавалась
университетам по символической цене, благодаря чему она приобрела свой успех
и свойство переносимости. Со временем, в результате коммерциализации UNIX������
����������
и обращения исходного кода в собственность производителей, что сделало его абсолютно
недоступным, эта традиция тихо умерла. Еще одна проблема, касающаяся коммерче www.gnu.org/software/hurd/hurd.html
www.gnu.org/software/hurd/gnumach.html
3
www.gnu.org/software/hurd/hurd-and-linux.html
4
www.gnu.org/philosophy/free-sw.html
5
www.gnu.org/gnu/linux-and-gnu.html
1
2


24   Глава 1. Добро пожаловать в Linux и Mac OS X
ских версий UNIX, была связана с их сложностью. Поскольку каждый производитель
настроил UNIX под специфическую архитектуру, операционная система стала менее
переносимой, а также слишком громоздкой для обучения и проведения различных
экспериментов.
Преследуя учебные цели, два профессора создали свои собственные
упрощенные UNIX-подобные системы: Дуг Камер (Doug Comer) создал XINU,
а Эндрю Таненбаум (Andrew Tanenbaum) создал MINIX. Линус Торвальдс создал
Linux, чтобы избавиться от недостатков MINIX. Когда нужно было выбирать между
простотой кода и его эффективностью и предоставляемыми возможностями,
Таненбаум предпочитал простоту (чтобы облегчить преподавание с использованием
MINIX), то есть у этой системы отсутствовали многие, необходимые людям свойства.
Система Linux разрабатывалась исходя из совершенно противоположных взглядов.

Систему Linux можно совершенно бесплатно взять в Интернете. Можно также
получить код GNU, воспользовавшись услугами почтовой службы США и заплатив
незначительную сумму за материалы и доставку. Вы можете поддержать фонд свободного программного обеспечения — Free Software Foundation (www.fsf.org), купив этот
же код (GNU), пересылаемый в бандеролях, имеющих более высокую цену, а также
вы можете приобрести коммерческие выпуски Linux (называемые дистрибутивами,
например Ubuntu, Red Hat, openSUSE), которые включают инструкции по установке,
программное обеспечение и поддержку.
MINIX

Linux и программное обеспечение GNU распространяются согласно
условиям общедоступной лицензии GNU General Public License (GPL, www.gnu.org/
licenses/licenses.html). В GPL говорится, что вы имеете право копирования, модификации и дальнейшего распространения кода оговариваемого в соглашении. Но при
дальнейшем распространении кода вы должны также распространять с ним такую же
лицензию, не отделяя таким образом код и лицензию друг от друга. Если вы получаете исходный код через Интернет, то, соблюдая условия распространения программ
с лицензией GPL, в случае последующей модификации этого кода и последующего
распространения исполняемой версии программы вы должны также распространять
и модифицированный исходный код, и GPL-соглашение. Поскольку эти меры являются полной противоположностью порядка соблюдения обычных авторских прав —
copyright (они предоставляют, а не ограничивают права), их назвали copyleft. (Данный
абзац не является официальным изложением GPL, его задача состоит лишь в том,
чтобы дать вам представление о работе лицензии. Когда потребуется сама лицензия
GPL, нужно будет обратиться к ее официальному тексту.)
GPL

Получайте удовольствие!
Два ключевых слова для Linux  — «Получайте удовольствие!» («Have Fun!»). Эти
слова появляются в приглашениях и документации. Развитие UNIX, а теперь и Linux
просто наполнено юмором, который встречается в системе повсюду. Например, слово
меньше (less) используется вместо слова больше (more): в GNU утилита разбиения на
страницы, которая в UNIX называлась more, заменена усовершенствованной утилитой
less. Утилита для просмотра документов PostScript названа ghostscript (призрачным

сценарием), и один из нескольких вариантов замены редактора vi назван elvis. По ана-


Что можно отнести к достоинствам Linux?    25

логии с тем, что компьютеры, оборудованные процессорами Intel, имеют снаружи логотип «Intel Inside» (Интел внутри), некоторые Linux-машины оживляются логотипами
«Linux Inside». Да и сам Торвальдс был замечен в футболке с логотипом «Linus Inside».

Что можно отнести к достоинствам Linux?
В последние годы Linux позиционируется в качестве мощной и инновационной
UNIX-подобной системы. Ее популярность уже превзошла популярность ее UNIXпредшественников. Хотя она во многом подражает UNIX, операционная система
Linux отошла от UNIX по ряду существенных направлений: ядро Linux разработано
независимо от BSD и System V, продолжающаяся разработка Linux осуществляется
объединенными усилиями многих талантливых людей по всему миру, и Linux сделал
мощность UNIX доступной кругу как деловых людей, так и простых компьютерных
пользователей. Используя Интернет, современные опытные программисты отправляют дополнения и улучшения Линусу Торвальдсу, кураторам проекта GNU или одному
из других авторов Linux.
В 1985 году представители компаний всей компьютерной отрасли объединились в целях разработки стандарта POSIX (Portable Operating System Interface
for Computer Environments) — интерфейса переносимой операционной системы, который был основан большей частью на определении интерфейса UNIX System V
Interface Definition (SVID) и на других более ранних попытках стандартизации. Эти
усилия были простимулированы правительством США, которое нуждалось в стандартной вычислительной среде, чтобы минимизировать свои затраты на обучение и
приобретение оборудования. Выпущенный в 1988 году, POSIX представлял собой
сборник IEEE-стандартов, определяющих требования к интерфейсу прикладных
программ — API (application program interface), оболочке и интерфейсу утилит операционной системы. Хотя нацеленность этого сборника была на UNIX-подобные
системы, стандарты могли применяться для любых совместимых операционных систем. Теперь, когда эти стандарты получили признание, у разработчиков программного обеспечения появилась возможность разрабатывать приложения, которые работают на всех, соответствующих этим стандартам версиях UNIX, Linux и других
операционных систем.
Стандарты

Для Linux доступен огромный выбор приложений, как бесплатных, так
и коммерческих, а также широкое разнообразие инструментальных средств для обработки графики и текста, решения сетевых задач, обеспечения безопасности, администрирования системы, работы в качестве веб-сервера и для применения во многих

других сферах. В последнее время крупные компании по разработке программного
обеспечения увидели преимущества в поддержке Linux и теперь содержат штат программистов, занимающихся конструированием и программированием ядра Linux,
GNU, KDE и другого программного обеспечения, которое работает под управлением
Linux. К примеру, основной организацией, поддерживающей Linux, является компания
IBM (www.ibm.com/linux). Linux все больше соответствует стандартам POSIX, а некоторые дистрибутивы и составные части других операционных систем отвечают им
в полной мере. Это свидетельствует о том, что Linux становится широко распростраПриложения


×