Вы находитесь на странице: 1из 425

LINUX

СБОРНИК РЕЦЕПТОВ
-

Карла Шредер

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


Новосибирск • Ростов-на-Дону • Екатеринбург • Самара
Киев • Харьков • Минск
2006
Карла Шредер
Linux. Сборник рецептов
Перевел с английского Е. Матвеев

Заведующий редакцией А. Кривцов


Руководитель проекта А. Пасечник
Технический редактор В. Демидова
Литературный редактор А. Пасечник
Художник Е. Дьяченко
Корректор В. Листова
Верстка Л. Родионова

ББК 32.973-018.2
УДК 004.451

Шредер К.
Ш86 Linux. Сборник рецептов. — СПб.: Питер, 2006. — 432 с: ил.

ISBN 5-469-01188-7
Предлагаемое издание содержит уникальную коллекцию советов, инструментов и сцена-
риев; вы найдете =ряд готовых отлаженных решений сложных проблем, с которыми сталкивается
любой администратор, настраивающий Linux-сервер; эти решения пригодятся и при настройке
небольших сетей, и при создании мощных распределенных хранилищ данных.
Книга написана в уже ставшей популярной форме рецептов издательства O'Reilly в формате
«Проблема-Решение-Обсуждение».
Для опытных пользователей, программистов, системных администраторов, студентов вузов,
аспирантов и преподавателей.

© 2005 O'Reilly Media, Inc.


© Перевод на русский язык, ЗАО Издательский дом «Питер», 2006
© Издание на русском языке, оформление, ЗАО Издательский дом «Питер», 2006
Права на издание получены по соглашению с O'Reilly
Все права защищены. Никакая часть данной книги не может быть воспроизведена в какой бы то ни было форме без письменного
разрешения владельцев авторских прав.
Информация, содержащаяся в данной книге, получена из источников, рассматриваемых издательством как надежные. Тем не
менее, имея в виду возможные человеческие или технические ошибки, издательство не может гарантировать абсолютную
точность и полноту приводимых сведений и не несет ответственность за возможные ошибки, связанные с использованием книги.

ISBN 5-469-01188-7
ISBN 0596006403 (англ.)

Лицензия ИД № 05784 от 07.09.01.


Подписано в печать 15.12.05. Формат 70X100/16. Усл. п. л. 34,83. Тираж 3000 экз. Заказ№ 6920.
ООО «Питер Принт». 194044, Санкт-Петербург. Б. Сампсониевский пр., 29а.
Налоговая льгота — общероссийский классификатор продукции ОК 005-93, том 2; 953005 — литература учебная.
Отпечатано с готовых диапозитивов в ФГУП «Печатный двор» им. А. М. Горького
Федерального агентства по печати и массовым коммуникациям.
197110, Санкт-Петербург, Чкаловский пр., 15.
Краткое содержание

Предисловие 16
Глава 1. Документация 19
Глава 2. Установка и модификация программ в системах на базе RPM 31
Глава 3. Установка и сопровождение программного обеспечения
в системах на базе Debian 49
Глава 4. Установка программ по исходным текстам 66
Глава 5. Идентификация оборудования 72
Глава 6. Редактирование текстовых файлов в JOE и Vim 79
Глава 7. Запуск и завершение работы Linux 97
Глава 8. Управление пользователями и группами 110
Глава 9. Операции с файлами и разделами 137
Глава 10. Заплатки, настройка и обновление ядра 162
Глава 11. Запись CD и DVD 176
Глава 12. Системный загрузчик и альтернативная загрузка 193
Глава 13. Восстановление работоспособности на примере Knoppix 219
Глава 14. CUPS 230
Глава 15. Настройка видео и X Window 241
Глава 16. Архивация и восстановление 253
Глава 17. Удаленный доступ 274
Глава 18. Управление версиями 288
Глава 19. NTP 309
Глава 20. Почтовый сервер Postfix 320
Глава 21. Борьба со спамом и вредоносными программами 343
б Краткое содержание

Глава 22. Веб-сервер Apache 356


Глава 23. Samba 379
Глава 24. Разрешение имен 409
Приложение А. Поиск документации Linux 426
Приложение Б. Информация об устройствах 428
Алфавитный указатель 429



Содержание

Предисловие 16
Для кого написана эта книга 16
О чем рассказано в книге 17
Платформы 17
Благодарности 18
От издательства 18
Глава 1. Документация 19
1.1. Введение 19
1.2. Общие сведения о man-страницах 20
1.3. Поиск нужной man-страницы 22
1.4. Поиск потерянных man-страниц 23
1.5. Чтение man-страниц без программы просмотра 24
1.6. Настройка путей поиска man-страниц 24
1.7. Использование info-страниц 25
1.8. Печать man-страниц 26
1.9. Печать info-страниц 27
1.10. Печать отдельных man- или info-страниц 28
1.11. Поиск всей документации к программе 28
Глава 2. Установка и модификация программ в системах
на базе RPM 31
2.1. Введение 31
2.2. Установка пакетов 32
2.3. Обновление пакетов 33
2.4. Удаление пакетов 34
2.5. Получение информации об установленных пакетах 35
2.6. Получение информации о пакетах, не установленных в системе 37
2.7. Поиск недавно установленных пакетов 37
2.8. Перестройка базы данных RPM 38
2.9. Отслеживание библиотек, построенных по исходным текстам,
в системах на базе RPM 39
2.10. Решение проблем установки RPM 41
2.11. Сборка пакетов по исходным текстам 42
8 Содержание

2.12. Настройка параметров сборки SRPM 43


2.13. Установка Yum 44
2.14. Настройка Yum 45
2.15. Установка и обновление пакетов в Yum 46
2.16. Удаление пакетов в Yum 47
2.17. Получение информации об установленных пакетах в Yum 47
2.18. Сопровождение Yum 48
Глава 3. Установка и сопровождение программного
обеспечения в системах на базе Debian 49
3.1. Введение 49
3.2. Поиск программ для Debian 50
3.3. Установка пакетов Debian с диска CD-ROM 51
3.4. Установка пакетов в системе на базе Debian 52
3.5. Удаление пакетов из системы Debian 53
3.6. Установка программ в Debian по исходным текстам 54
3.7. Обновление пакетов в Debian 55
3.8. Обновление системы Debian 55
3.9. Установка обновленной версии Debian 56
3.10. Создание смешанной системы Debian 57
3.11. Поиск программ, установленных в системе Debian 58
3.12. Операции с кэшем пакетов Debian 60
3.13. Разрешение конфликтов зависимостей в Debian 61
3.14. Создание локального архива Debian 62
3.15. Выбор пакетных зеркал для apt-proxy.conf 63
3.16. Включение существующего кэша пакетов в apt-proxy.conf 64
Глава 4. Установка программ по исходным текстам 66
4.1. Введение 66
4.2. Подготовка системы к компиляции программ по исходным текстам 66
4.3. Построение списка добавленных файлов для упрощения удаления
программ 67
4.4. Установка программ по исходным текстам 68
4.5. Создание пакетов по исходным текстам с применением Checklnstall 70
Глава 5. И д е н т и ф и к а ц и я оборудования 72
5.1. Введение 72
5.2. Идентификация оборудования при помощи Ispci 73
5.3. Сбор информации об оборудовании программой dmesg 74
5.4. Получение текущей сводки оборудования с использованием /ргос 76
5.5. Просмотр разделов в программе fdisk 78
Глава 6. Редактирование текстовых файлов в JOE и Vim 79
6.1. Введение 79
6.2. Поиск команд JOE 81
6.3. Настройка JOE 82
6.4. Сохранение личной конфигурации JOE в отдельном файле 83
6.5. Копирование текста между файлами в JOE 83
6.6. Поиск и замена в JOE 84
6.7. Вертикальное выделение текста в JOE 85
6.8. Поиск и открытие файлов в JOE 86
6.9. Быстрое изучение Vim 87
Содержание

6.10. Создание автотекста в Vim 88


6.11. Привязка команд к клавишам 89
6.12. Настройка Vim 90
6.13. Быстрое перемещение в Vim 91
6.14. Сеансы Vim 92
6.15. Назначение редактора по умолчанию 94
6.16. Определение параметров компиляции Vim 95
Глава 7. Запуск и завершение работы Linux 97
7.1. Введение 97
7.2. Смена уровня выполнения после загрузки 99
7.3. Смена уровня выполнения по умолчанию 100
7.4. Запуск и остановка X 101
7.5. Управление уровнями выполнения в Debian 102
7.6. Создание уровней выполнения с текстовым и графическим
входом в Debian 102
7.7. Управление уровнями выполнения в Red Hat 104
7.8. Ручная настройка служб, запускаемых при загрузке 105
7.9. Ручная остановка и запуск служб 106
7.10. Выключение компьютера или перезагрузка Linux 107
7.11. Запрет или ограничение доступа к Ctrl+Alt+ Delete 108
7.12. Автоматическое выключение компьютера 109
Глава 8. Управление пользователями и группами 110
8.1. Введение 110
8.2. Отделение обычных пользователей от системных 111
8.3. Определение кодов UID и GID 112
8.4. Создание учетной записи пользователя командой useradd 113
8.5. Создание учетной записи пользователя командой adduser 114
8.6. Изменение учетной записи пользователя 115
8.7. Удаление пользователя 117
8.8. Простое завершение процессов 118
8.9. Блокировка учетных записей 118
8.10. Управление паролями 119
8.11. Создание групп командой groupadd 120
8.12. Удаление групп командой groupdel 121
8.13. Создание системного пользователя 121
8.14. Создание системных групп командой addgroup 122
8.15. Изменение принадлежности к группам 123
8.16. Проверка целостности файлов паролей 123
8.17. Серийное добавление новых пользователей 124
8.18. Серийная замена паролей 129
8.19. Серийное включение пользователей в группы 130
8.20. Временное использование привилегий root 131
8.21. Временное предоставление привилегий root командой sudo 132
8.22. Дисковые квоты 134
Глава 9. Операции с файлами и разделами 137
9.1. Введение 137
9.2. Настройка разрешений в числовом формате chmod 142
9.3. Выполнение массовых операций командой chmod 143
10 Содержание

9.4. Настройка разрешений в символьном формате chmod 144


9.5. Назначение владельца файла командой chown 146
9.6. Выполнение массовых операций командой chown 146
9.7. Создание общих каталогов с использованием setgid и бита закрепления ... 147
9.8. Назначение разрешений по умолчанию с использованием маски umask . 149
9.9. Монтирование и демонтирование съемных дисков 150
9.10. Настройка монтирования файловых систем в/etc/fstab 151
9.11. Монтирование и демонтирование файловых систем на жестких дисках 153
9.12. Определение имен устройств для mount и fstab 154
9.13. Создание файлов и каталогов 156
9.14. Удаление файлов и каталогов 157
9.15. Копирование, перемещение и переименование файлов и каталогов 158
9.16. Создание дисковых разделов Linux командой fdisk 159
9.17. Создание файловой системы в новом разделе 161
Глава 1 0 . З а п л а т к и , настройка и обновление ядра 162
10.1. Введение 162
10.2. Добавление новых возможностей в ядро 2.4 164
10.3. Усечение типового ядра 2.4 166
10.4. Обновление до последней стабильной версии ядра 2.4 168
10.5. Построение ядра 2.6 169
10.6. Добавление новых возможностей в ядро 2.6 170
10.7. Добавление нового загружаемого модуля ядра 170
10.8. Установка заплаток ядра 171
10.9. Удаление заплатки ядра 172
10.10. Создание образа initrd 173
10.11. Создание загрузочного диска в Debian 174
10.12. Создание загрузочного диска в Red Hat 174
Глава 1 1 . Запись CD и DVD 176
11.1. Введение 176
11.2. Определение адресов SCSI для записывающих дисководов CD и DVD... 179
11.3. Включение эмуляции SCSI для устройства записи
CD и DVD с интерфейсом IDE/ATAPI 180
11.4. Создание компакт-диска сданными для распространения 181
11.5. Формирование файловых деревьев на компакт-дисках с данными 183
11.6. Копирование диска CD или DVD 184
11.7. Стирание диска CD-RW 185
11.8. Запись многосеансового компакт-диска сданными 186
11.9. Создание загрузочного компакт-диска 187
11.10. Разбиение больших файлов на несколько дисков 188
11.11. Запись дисков DVD сданными 189
11.12. Запись аудиодиска для стандартных проигрывателей 191
Глава 1 2 . Системный загрузчик и альтернативная з а г р у з к а 193
12.1. Введение 193
12.2. Переход с LILO на GRUB 194
12.3. Установка GRUB без дискеты 196
12.4. Установка GRUB сценарием grub-install 197
12.5. Подготовка системы для альтернативной загрузки Linux 198
12.6. Установка дополнительных экземпляров Linux
в системе с альтернативной загрузкой 199
Содержание 11

12.7. Определение параметров загрузки в командной консоли GRUB 201


12.8. Настройка загрузочного раздела 203
12.9. Создание меню загрузки в GRUB 204
12.10. Настройка menu.1st 205
12.11. Добавление Windows 95/98/ME в систему Linux 206
12.12. Добавление Windows NT/2000/XP в систему с альтернативной загрузкой... 208
12.13. Восстановление GRUB в MBR с использованием диска Knoppix 209
12.14. Защита системных файлов паролем GRUB 210
12.15. Защита отдельных пунктов меню GRUB 211
12.16. Создание заставки GRUB 212
12.17. Загрузка Linux с использованием LILO 213
12.18. Альтернативная загрузка Linux с использованием LILO 214
12.19. Альтернативная загрузка Windows и Linux с использованием LILO 215
12.20. Создание загрузочной дискеты LILO 216
12.21. Защита LILO паролем 216
12.22. Создание резервной копии MBR 217
Глава 13. Восстановление работоспособности системы
на примере Knoppix 219
13.1. Введение 219
13.2. Загрузка Knoppix 219
13.3. Создание загрузочной дискеты Knoppix 221
13.4. Сохранение конфигурации Knoppix на флэш-диске 221
13.5. Создание зашифрованного домашнего каталога Knoppix 222
13.6. Копирование файлов на другой PC с системой Linux 223
13.7. Копирование файлов в общий каталог Samba 224
13.8. Копирование файлов на диск CD-R/RW 225
13.9. Редактирование конфигурационных файлов в Knoppix 226
13.10. Установка программ из Knoppix 227
13.11. Восстановление потерянного пароля root 227
13.12. Установка Knoppix на жесткий диск 228
13.13. Запуск антивирусных программ на Windows PC 228
Глава 14. CUPS 230
14.1. Введение 230
14.2. Подключение принтера к автономному компьютеру с системой Linux.... 232
14.3. Обслуживание клиентов Linux 234
14.4. Совместный доступ к принтеру без разрешения имен 235
14.5. Обслуживание клиентов Windows без Samba 236
14.6. Совместный доступ к принтерам в смешанной сети
с использованием Samba 237
14.7. Создание выделенного сервера печати CUPS 237
14.8. Распределенная печать с использованием классов 238
14.9. Ограничение доступа к принтерам и классам 239
14.10. Диагностика 240
Глава 1 5 . Настройка видео и X W i n d o w 241
15.1. Введение 241
15.2. Одновременное использование X и консолей 243
15.3. Установка нового видеоадаптера 245
15.4. Редактирование файла XF86Config 246
15.5. Включение аппаратного ускорения BXFree86/DRI 247
12 Содержание

15.6. Диагностика проблем с ускорением трехмерной графики 248


15.7. Настройка startx 249
15.8. Смена экранного менеджера 250
15.9. Одновременный запуск разных оконных менеджеров 251
Глава 16. Архивация и восстановление 253
16.1. Введение 253
16.2. Применение rsync для локальной пересылки и синхронизации файлов . 254
16.3. Безопасная пересылка данных с применением ssh 256
16.4. Настройка сервера архивации rsync 257
16.5. Защита модулей rsync 258
16.6. Настройка анонимного общедоступного сервера rsync 260
16.7. Запуск демона rsync при загрузке системы 261
16.8. Настройка выбора файлов 262
16.9. Автоматизация архивации rsync на базе ssh 262
16.10. Ограничение загрузки канала при использовании rsync 263
16.11. Настройка путей к файлам в rsync 264
16.12. Установка rsync на клиентах Windows 264
16.13. Создание «сообщения дня» в rsync 265
16.14. Создание загрузочного компакт-диска в Mondo Rescue 266
16.15. Проверка архивов Mondo 269
16.16. Создание загрузочного диска DVD 269
16.17. Использование Mondo Rescue для клонирования систем Linux 270
16.18. Использование mindi-kernel 271
16.19. Восстановление системы с диска Mondo 272
16.20. Восстановление отдельных файлов с диска Mondo 272
Глава 1 7 . У д а л е н н ы й доступ 274
17.1. Введение 274
17.2. Настройка OpenSSH 275
17.3. Построение новых ключей хостов 277
17.4. Аутентификация с использованием открытых ключей 278
17.5. Использование нескольких пар ключей 280
17.6. Вход без пароля с использованием ssh-agent 280
17.7. Вход без пароля с использованием keychain 282
17.8. Беспарольный вход для заданий сгоп 283
17.9. Автоматическое завершение ssh-agent при выходе 283
17.10. Настройка приглашения Bash для ssh 284
17.11. Туннелирование X через SSH 284
17.12. Подключение с компьютера с системой Windows 285
17.13. Назначение разрешений для файлов ssh 287
Глава 1 8 . У п р а в л е н и е версиями 288
18.1. Введение 288
18.2. Построение локального репозитария RCS 289
18.3. Выборка старых версий файлов в RCS 291
18.4. Сравнение версий файла в RCS 293
18.5. Управление системными конфигурационными файлами в RCS 294
Содержание 13

18.6. Использование CVS для создания однопользовательских


локальных репозитариев 296
18.7. Включение новых файлов в репозитарий CVS 298
18.8. Удаление файлов из репозитария CVS 299
18.9. Создание общего репозитария CVS 300
18.10. Совместное использование репозитария группами
пользователей 301
18.11. Обращение к удаленному репозитарию CVS 302
18.12. Обновление рабочих файлов в CVS 303
18.13. Выборка конкретных старых версий из CVS 304
18.14. Построение анонимного репозитария CVS 305
18.15. Настройка среды CVS 307
18.16. Вычисление объема репозитария CVS 308
Глава 1 9 . NTP 309
19.1. Введение 309
19.2. Настройка локального сервера времени 310
19.3. Подключение к локальному серверу времени 311
19.4. Управление доступом 312
19.5. Выбор пула NTP 314
19.6. Подключение к серверу времени при непостоянном подключении 315
19.7. Настройка нескольких локальных серверов времени 316
19.8. Аутентификация с использованием ключей NTP 317
Глава 2 0 . Почтовый сервер Postfix 320
20.1. Введение 320
20.2. Построение почтового сервера РОРЗ 321
20.3. Построение почтового сервера РОРЗ в Debian 324
20.4. Тестирование почтового сервера SMTP/POP3 326
20.5. Отправка интернет-почты 328
20.6. Прием интернет-почты 329
20.7. Установка Cyrus-SASL 329
20.8. Установка Cyrus-SASL в Debian 331
20.9. Настройка smtp-auth для аутентификации пользователей 332
20.10. Применение smtp-auth для аутентификации Postfix
на другом сервере 334
20.11. Настройка полного доменного имени 335
20.12. Построение почтового сервера ШАР 336
20.13. Подключение пользователей 337
20.14. Общий доступ к папкам ШАР 338
20.15. Использование виртуальных доменов Postfix 340
20.16. Создание списка рассылки с применением couriermlm 341
Глава 2 1 . Борьба со спамом и вредоносными программами 343
21.1. Введение 343
21.2. Первоочередные меры по защите от спама и вредоносных программ .... 344
21.3. Тестирование средств борьбы со спамом в Postfix 345
21.4. Настройка антиспамовых ограничений в Postfix 346
21.5. Создание белых списков 347
21.6. Использование черных списков DNS 348
21.7. Блокировка сообщений с вложениями 350
14 Содержание

21.8. Настройка Clam Anti-Virus на сервере Postfix 351


21.9. Настройка SpamAssassin в Postfix 354
Глава 22. Веб-сервер Apache 356
22.1. Введение 356
22.2. Установка Apache 2.0 по исходным текстам 358
22.3. Добавление новых модулей после установки 360
22.4. Настройка разрешений и принадлежности файлов Apache 361
22.5. Обращение к локальному руководству Apache 362
22.6. Создание простого веб-сервера 363
22.7. Перенаправление URL в новый каталог 363
22.8. Предоставление пользователям индивидуальных веб-каталогов 364
22.9. Запуск Apache при загрузке системы 365
22.10. Многодоменный хостинг в Apache 365
22.11. Ведение отдельных журналов для виртуальных хостов 367
22.12. Предотвращение доступа к веб-сайтам локальных сетей из Интернета ... 367
22.13. Парольная защита отдельных каталогов 368
22.14. Файл robots.txt 370
22.15. Блокировка нарушителей 371
22.16. Создание пользовательских страниц ошибок 372
22.17. Настройка стандартных страниц ошибок Apache 373
22.18. Вывод содержимого каталогов без усечения имен файлов 373
22.19. Использование Content Negotiation для предоставления
страниц на разных языках 374
22.20. Использование эмблем 376
22.21. Просмотр журналов обращений Apache с использованием Webalizer 377
Глава 2 3 . Samba 379
23.1. Введение 379
23.2. Построение простого автономного файлового сервера Samba
для Windows 381
23.3. Построение одноранговой сети Windows/Linux 383
23.4. Включение общего доступа к файлам в Windows 384
23.5. Включение аутентификации на сервере Samba 385
23.6. Массовое преобразование системных пользователей 386
23.7. Подключение к Samba из Windows 95/98/ME 387
23.8. Шифрование паролей в Windows 387
23.9. Списки управления доступом (ACL) 388
23.10. Создание общедоступных сетевых каталогов 389
23.11. Работа с домашними каталогами пользователей в Samba 390
23.12. Построение главного контроллера домена 391
23.13. Подключение Windows 95/98/ME к домену Samba 393
23.14. Подключение клиентов Windows NT/2000 к домену Samba 394
23.15. Подключение клиентов Windows XP к домену Samba 395
23.16. Включение перемещаемых профилей 396
23.17. Подключение клиентов Linux к одноранговой сети
или файловому серверу Samba 397
Содержание 15

23.18. Подключение клиентов Linux к рабочим группам Samba


из командной строки 399
23.19. Подключение клиентов Linux к домену Samba
из графического обозревателя 401
23.20. Подключение клиентов Linux к домену Samba из командной строки 402
23.21. Синхронизация паролей Samba и Linux 403
23.22. Общий доступ к принтерам Linux из системы Windows 403
23.23. Общий доступ к принтерам Windows из системы Linux 404
23.24. Запуск приложений Windows в Linux 405
Глава 24. Разрешение имен 409
24.1. Введение 409
24.2. Локальное разрешение имен с использованием файла hosts 411
24.3. Настройка сервера DHCP 412
24.4. Настройка клиентов dhcp 413
24.5. Включение статических хостов в dhcp 414
24.6. Создание общедоступного сервера DNS 415
24.7. Установка djbdns 417
24.8. Перемещение журналов tinydns и dnscache 418
24.9. Создание локального кэширующего сервера имен на базе djbdns 418
24.10. Настройка клиентов Linux и Windows для использования кэширующего
сервера DNS 420
24.11. Создание общедоступного сервера DNS с использованием tinydns 421
24.12. Построение частного сервера DNS 423
24.13. Простое распределение нагрузки в tinydns 424
24.14. Синхронизация с другим сервером tinydns 425
Приложение А. Поиск документации Linux 426
Документация Linux в WWW 426
Веб-сайты Linux 426
Usenet 427
Google 427
Приложение Б. Информация обустройствах 428
Веб-сайты 428
Usenet 428
Алфавитный указатель 429
Предисловие

Итак, вы принадлежите к относительно неопытных пользователей Linux. Вы ус-


тановили Linux, вам удалось войти в систему, пошарить в Интернете, отправить
и получить электронную почту... а дальше что? Несмотря на успешное выполне-
ние некоторых простейших задач, вы чувствуете себя словно пилот самолета, ле-
тящего на автопилоте. В вашем распоряжении масса замечательных возможнос-
тей (во всяком случае, так вам сказал ваш знакомый, большой знаток в области
Linux), но как за них взяться? Что где находится и как работает? Что это за шту-
ковина под названием grep, о которой так часто говорят? И как наладить работу
Samba? И где находится #$% Л документация?
Мир Linux/Unix отлично документирован. Нет, я серьезно! Вы сможете найти
ответ на любой вопрос; нужно только знать, где искать. Man-страницы, info-страни-
цы, файлы README, документация в формате HTML, сами программы... Не нужно
быть великим программистом, чтобы отыскать полезную информацию в исходных
текстах, потому что все необходимые сведения часто содержатся в комментариях.
Среди тысяч виртуальных сообществ Интернета всегда найдется одно (или
несколько) для конкретной программы из Вселенной Linux. Почти у каждой про-
граммы, какой бы малой она ни была, существует собственный список рассылки.
У каждого дистрибутива Linux имеются свои списки рассылки и форумы пользо-
вателей. Я уже не говорю о многочисленных книгах и журналах. Получается, что
настоящая проблема с документацией Linux — не ее нехватка, а получение нуж-
ной информации без долгих и самоотверженных поисков.

Для кого написана эта книга


Книга предназначена для читателей, которые желают решать практические зада-
чи. Конечно, понимать базовую теорию полезно, но если вам не удается добиться
нужного результата, пользы от теории немного. По этой причине я постараюсь
включать поменьше теоретических рассуждений и побольше практических сове-
тов с подробными, пошаговыми инструкциями. В книгу включены многочислен-
ные ссылки на дополнительные источники информации.
От читателя потребуется некоторый опыт работы в Linux. Быть знатоком не
обязательно, но нужно по крайней мере уметь загружать систему и завершать ра-
Предисловие 17

боту с ней, запускать приложения, работать в WWW и ориентироваться в файло-


вой системе. Читатель должен знать, как получить доступ к командной строке
и использовать ее, и обладать навыками работы в графической среде. Он должен
понимать, что Linux является полноценной многопользовательской системой
и что в работе следует по возможности использовать непривилегированную учет-
ную запись, переключаясь на привилегии root только в случае необходимости.
Предполагается, что читатель является администратором отдельного компью-
тера или локальной сети и может получить привилегии root в случае необходимо-
сти. Может быть, вы стремитесь в полной мере управлять работой своего Linux-
компьютера, или создать свой собственный почтовый или веб-сервер, или создать
небольшую сеть. А может, вы — системный администратор Windows, которому
неожиданно потребовалось подключить Windows-клиентов к серверам Linux... или
включить серверы Linux в существующую сеть... или интегрировать компьютеры
с Linux и Windows в одной смешанной сети.
А может, вам вообще нет дела до Windows, и вы просто хотите освоить систем-
ное администрирование Linux.

О чем рассказано в книге


Для Linux существуют тысячи программных пакетов. Почти все они делают что-
то полезное, поэтому заранее понятно, что рассмотреть все темы (или хотя бы их
большинство) попросту невозможно. Решения о том, какой материал включить
в книгу, а какой оставить за пределами рассмотрения, принимались в соответствии
с моими представлениями о базовых навыках администрирования Linux (воз-
можно, у вас эти представления будут другими). В книгу были включены про-
граммы, которые я считаю лучшими в своей категории: djbdns, GRUB, Apache 2,
vim и Postfix, а также испытанные временем ветераны вроде LILO.
В книге приводятся полезные сценарии для выполнения типовых операций:
О массовое создание учетных записей;
О массовое изменение паролей;
О поиск всей установленной документации к программе;
О поиск «бесхозных» библиотек в системах на базе RPM и их включение в базу
данных RPM.
В книгу не вошли настольные и вспомогательные приложения типа Open Office,
KMail, FireFox, Konqueror, Gimp, GnuCash и т. д. — книга посвящена построению
инфраструктуры. Если вы освоите основные принципы администрирования и со-
провождения Linux-системы, дальше можно будет двигаться куда угодно.

Платформы
В мире существуют тысячи дистрибутивов Linux. Свои дистрибутивы создают
отдельные компании, кампусы и даже просто группы единомышленников. Тем не
менее дистрибутивы делятся (пусть и не очень четко) на две большие категории:
системы на базе RPM, представленные в книге Red Hat и Fedora, и системы на
базе apt, представленные Debian. Семейство Debian бурно развивается и пополня-
ется такими представителями, как Knoppix, Xandros, Libranet, Unbuntu и Linspire.
18 Предисловие

Даже если ваш дистрибутив не принадлежит ни к одной из этих категорий (ска-


жем, Slackware или Gentoo), основные принципы практически не изменяются.
Ядро остается тем же; программы и утилиты остаются теми же; оконные менед-
жеры остаются теми же; принципиальные различия существуют только в способе
установки программ.
Впрочем, это не означает, что между дистрибутивами Linux нет других отли-
чий. Одна из классических проблем — различия в местонахождении файлов в раз-
ных дистрибутивах. Привыкайте, эта проблема никуда не денется. В книге будет
показано, как получить информацию о местонахождении конфигурационных, ис-
полняемых файлов и документации для вашего конкретного дистрибутива.

Благодарности
Я благодарна редактору O'Reilly Майклу Лукидесу (Michael Loukides). Его хоро-
ший вкус, зоркий глаз, терпение и неумолимая настойчивость существенно улуч-
шили эту книгу.
Глупые компьютеры понимают все буквально и не прощают ошибок при вводе.
Спасибо техническому рецензенту Дженн Весперман ( Jenn Vespermann) и ее вни-
манию к мелочам!
Я бесконечно благодарна Аккане Пек (Akkana Peck), Дженн Весперманн, Полу
Хайнлайну (Paul Heinlein) и Питеру Сэмюэльсону (Peter Samuelson), внесшим
свой вклад в книгу. Сердечное спасибо всему сообществу Linuxchix, включая
Дженн Весперманн (доброжелательный диктатор Linuxchix), Дэнсер Весперманн
(Dancer Vespermann), Danamania, Колби (Colby), Evilpig, Элмут Беренс (Almut
Behrens), гуру Mandrake Эндрю (Andrew), Hamster, Piglet, Вэл Хенсон (Val Hanson),
Питера Энвина (Peter Anvin), Рика Роуза (Rik Rose), Девдаса Бхагата (Devdas
Bhagat), Дэвида Норта (David North), Телзу Гвинн (Telsa Gwynne), Марию Блэкмор
(Maria Blackmore), Мередид Лафф (Meredyd Luff), Кай Мактейн (Kai MacTane)
и Эринн Кларк (Erinn Clark). Да здравствует Linuxchix!
Наверняка я забыла о ком-нибудь, кто терпеливо сносил мои бесконечные при-
ставания. Напомните о себе, и я внесу изменения во втором издании.

От издательства
Ваши замечания, предложения, вопросы отправляйте по адресу электронной по-
чты comp@piter.com (издательство «Питер», компьютерная редакция).
Мы будем рады узнать ваше мнение!
На веб-сайте издательства http://www.piter.com вы найдете подробную инфор-
мацию о наших книгах.
•.

Глава 1
Документация

1.1. Введение
Документация к программам Linux существует в избытке — вопрос только в том,
как ее найти. Не ищите стопки красивых, глянцевых печатных описаний: боль-
шинство Linux-программ не продается в блестящих коробках, а распространяет-
ся через Интернет.
Существует и другая сложность: в соответствии с великими традициями Unix,
многие задачи в Linux решаются совместной работой множества мелких специали-
зированных программ, поэтому любой дистрибутив Linux состоит из огромного
количества отдельных программ. Дистрибутивы общего назначения типа Mandrake
или SuSE содержат тысячи программ, а в архивах Debian хранятся свыше 12 000
пакетов. Организация и сопровождение печатной библиотеки в таких условиях
создали бы немало трудностей, но к счастью, все программы документированы.
Какой бы вопрос у вас ни возник, на него всегда можно найти ответ.

man и info: универсальные руководства Linux


Практически у каждой программы, написанной для Linux, имеется своя man-стра-
ница. Как правило, man-страницы не предназначаются для освоения программы
новичками. Они создаются для других целей: документирование синтаксиса ко-
манды, описание всех параметров и ключей, а также общедоступность. Даже если
вы окажетесь на компьютере, полностью отрезанном от внешнего мира, в вашем
распоряжении всегда будет информация из man-страниц. А поскольку man-стра-
ницы интегрируются с программами, которым они принадлежат, только установ-
ленные программы будут иметь man-страницы, причем версии этих страниц бу-
дут относиться именно к вашей системе.
Info-страницы обычно содержат более подробную информацию. Включенные
в них гиперссылки используются для перехода к различным узлам, или главам,
документа, а также для создания перекрестных ссылок на другие info-страницы.
Нередко info-страницы представляют собой переформатированные man-страницы.
Но в некоторых случаях (прежде всего, в программах проекта GNU) info-страницы
20 Глава 1. Документация

отличаются большей детализацией, в них присутствует учебный материал и под-


робные примеры.

Другая документация
В различных местах вашей системы также прячутся многочисленные файлы
README, CHANGELOGS, RELEASE NOTES, COPYRIGHT, INSTALL, интег-
рированные справочные системы и документация в формате HTML. Да, в целом
творится изрядная путаница. Не волнуйтесь, в этой главе вы научитесь быстро
находить нужную информацию, а удобный сценарий Python облегчит процесс
поиска.
На многих веб-сайтах хранятся полные архивы man- и info-страниц. Они при-
годятся вам в том случае, если нужная страница отсутствует в вашей системе или
вы хотите прочитать ее без загрузки и установки новых программ. Вы быстро най-
дете их поиском в Google.
Коммерческие дистрибутивы Linux — такие, как Red Hat, SuSE, Mandrake,
Xandros и Linspire — содержат превосходные руководства пользователя. У каждого
серьезного дистрибутива Linux имеется богатый выбор электронной документа-
ции. Полезную и справочную информацию также можно найти при помощи по-
исковых систем, в списках рассылки, конференциях Usenet и на всевозможных
веб-сайтах, посвященных Linux.

Графические оболочки справочных систем


Существует несколько хороших графических программ для просмотра man- и info-
страниц:
О Konqueror — браузер и файловая оболочка KDE также содержит превосход-
ную программу просмотра man- и info-страниц. Просто введите man:foo или
info:/foo в адресной строке. Konqueror позволяет легко напечатать нужную
информацию и отобрать отдельные man- или info-страницы для печати;
О Yelp — программа просмотра для Gnome; отображает man- и info-страницы,
а также справочные документы Gnome. Поддерживает индексирование и по-
иск;
О Pinfo — удобная консольная программа просмотра man- и info-страниц на базе
ncurses. Поддерживает поиск по регулярным выражениям и возможность до-
бавления новых документов.

1.2. Общие сведения о man-страницах


Проблема
Вы пытаетесь использовать какую-нибудь программу, но никак не можете заста-
вить ее сделать то, что требуется. Итак, следуя стандартному совету «RTFM» (Read
The Fine Man page), вы находите нужные страницы, читаете их... и ничего не мо-
жете понять.
1.2. Общие сведения о man-страницах 21

Решение
Разберитесь в структуре man-страниц; изучите условные обозначения команд и их
параметров, и вы поймете, что man-страницы на самом деле очень полезны.

Комментарии
С точки зрения Linux все man-страницы в системе являются частью единого ру-
ководства. Это руководство состоит из следующих разделов:
1 — исполняемые программы или команды оболочки;
2 — системные функции;
3 — библиотечные функции;
4 — специальные файлы (обычно находящиеся в /dev);
5 — форматы файлов и соглашения;
6 — игры;
7 — разное;
8 — команды системного администрирования;
9 — нестандартные функции ядра;
п — новая документация, которая позднее может быть перемещена;
1 — локальная документация, специфическая для вашей системы.
Каждая отдельная программа, утилита или функция представлена в этом ру-
ководстве отдельной страницей. Поиск страницы для программы или команды
обычно сводится к вводу команды man foo, где foo — имя программы.
Вероятно, вам также попадались нумерованные ссылки на man-страницы вида
grep(l). Такая ссылка обозначает страницу man grep из раздела 1. Она вызывается
следующим образом:
$ man I grep
Некоторые man-страницы входят в несколько секций. Команда man foo отобра-
зит только первую из них. Для получения полного списка следует указать ключ -f:
$ man - f man
man (1) an interface to the online reference manuals
man (7) macros to format man pages
Каждая man-страница делится на секции. Имена секций бывают разными, но
чаще всего встречаются следующие: NAME, SYNOPSIS, DESCRIPTION, OPTIONS,
FILES, EXAMPLES, SEE ALSO, BUGS and AUTHOR.
Описание синтаксиса команды находится в секции SYNOPSIS man-страницы
и выглядит следующим образом:
имя_команды [необязательные ключи] обязательные_элементы
При описании ключей команды используются следующие обозначения:
О жирный шрифт — вводится точно так, как показано;
О курсив — обозначает аргумент, заменяемый конкретным значением. В зави-
симости от используемой программы просмотра вместо курсива может ис-
пользоваться подчеркивание текста или жирный шрифт;
О [-abc] — все ключи в квадратных скобках являются необязательными и их
можно комбинировать друг с другом;
22 Глава 1. Документация

О [-а|-Ь|-с] — ключи, разделенные символом «|» (вертикальная черта), не могут


комбинироваться друг с другом;
О аргумент... — многоточие означает, что в данной позиции допускается пере-
числение нескольких аргументов. Элементы списка обычно разделяются про-
белами, но иногда вместо них используются запятые;
О [выражение]... — многоточие означает, что в данной позиции допускается пе-
речисление нескольких выражений.
Короткие ключи могут вводиться в двух форматах:
-abc
или
-а -ь -с
Длинные ключи всегда перечисляются по отдельности и обозначаются двойны-
ми дефисами:
--optionl --option2 --option3
Длинные ключи особенно полезны в сценариях; их содержательные имена по-
могают вспомнить, что делает сценарий.
Большую часть объема man-страницы занимает список ключей.

См. также
man(l).

1.3. Поиск нужной man-страницы


Проблема
Нужно найти программу или утилиту для выполнения конкретной задачи (ска-
жем, для подсчета слов в файле), но вы не знаете, где искать. Ведь если знаешь,
где искать, то тогда и искать незачем, верно?

Решение
Проведите поиск по ключевым словам командой apropos или man -k. Например,
чтобы найти команду для подсчета слов в файле, введите следующую строку:
$ apropos count words
или
$ man -k count words
american-english (5) - a list of english words
grpconv (8) - convert to and from shadow passwords and groups.
grpunconv (8) - convert to and from shadow passwords and groups.
kmessedwords (1) - a letter order game for KDE
lpasswd (1) - add. change, or delete digest passwords.
pwconv (8) - convert to and from shadow passwords and groups.
pwunconv (8) - convert to and from shadow passwords and groups.
shadowconfig (8) - toggle shadow passwords on and off
we (1) - print the number of newlines. words, and bytes in files
1.4. Поиск потерянных man-страниц 23

Выбор команды неважен; apropos и man -k делают одно и то же. Список обшир-
ный, но, похоже, нам нужна программа we.
Не забывайте о ключе -f для вывода всех версий man-страницы:
$ man -f manpath
manpath (1) - determine search path for manual pages
manpath (5) - format of the /etc/manpath.config f i l e

Комментарий
Упомянутые команды выполняют поиск по ключевым словам в секциях DESCRIP-
TION man-страниц. Количество искомых слов может быть произвольным, но чем
больше слов, тем больше результатов вы получите, потому что команда поочеред-
но ищет каждое слово.

См. также
apropos(l),man(l).

1.4. Поиск потерянных man-страниц


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

Решение
Иногда база данных man-страниц повреждается из-за изменений, вносимых поль-
зователями, или некорректной установки man-страниц. Для начала попробуйте
провести поиск командой whereis -m:
Swhereis -m cat
cat:/usr/man/manl/cat.1.gz /usr/share/man/manl/cat.1.gz
Страница обнаружена. Попробуйте прочитать ее командой man:
$man /usr/man/manl/cat.l.gz
Если не получится, попробуйте заново построить базу данных man командой
mandb:
# mandb
Если и это не поможет, проверьте общесистемный поиск с использованием
команд Locate и grep:
tlocate / cat. | egrep -w 'cat\.[l-93[a-zA-Z]*[.gz]?'
Команда подойдет для любой man-страницы — достаточно заменить cat иско-
мым именем.
Если ни одно из этих решений не помогло добраться до нужной страницы, по-
пробуйте воспользоваться сценарием finddoc из раздела 1.11. Если и сценарий не
найдет страницу, значит, она отсутствует в вашей системе.
24 Глава 1. Документация

См. также
whereis(l), mandb(8).
Утилита grep существует в нескольких разновидностях; за подробностями об-
ращайтесь к grep(l).

1.5. Чтение тап-страниц без программы


просмотра
Проблема
Система, в которой вы работаете, была серьезно повреждена. Вы не можете про-
читать man-страницу, потому что программа просмотра не работает.

Решение
Попробуйте прочитать man-страницу напрямую программами zcat и nroff:
$ zcat /usr/man/manl/cat.l.gz |nroff -man | less
Последнее средство — прочитайте низкоуровневый код страницы программой zLess:
$ zless /usr/man/manl/cat.l.gz
Л " DO NOT MODIFY THIS FILE! I t was generated by help2man 1.32.
.TH CAT " 1 " "JULY 2003" "cat ( c o r e u t i l s ) 5.0" "User Commands"
.SH NAME
cat V c o n c a t e n a t e f i l e s and p r i n t on t h e standard output
.SH SYNOPSIS
.B c a t
[\fIOPTION\fR] [ \ f I F I L E \ f R ] . . .
Выглядит некрасиво, но понять можно.

Комментарий
Nroff — «обертка» для форматирования тап-страниц в groff. Groff— программа форма-
тирования документов, позволяющая генерировать документы разных форматов
(HTML,. pdf, печатные копии, info-страницы и т. д.) на основе одного исходного файла.

См. также
mandb(8), locate(l), grep(l), nroff(l), groff(l), zless(l), zcat(l); раздел 1.6.

1.6. Настройка путей поиска тап-страниц


Проблема
У вас постоянно возникают сложности с нахождением тап-страниц. После при-
менения средств, описанных в разделе 1.4, выясняется, что большинство отсут-
ствующих страниц находятся в каталоге, о котором man, похоже, ничего не знает.
Возможно, вновь установленная программа разместила свои man-страницы в ка-
1.7. Использование info-страниц 25

ком-то странном каталоге (скажем, /opt/man). А может, вы хотите разместить часть


страниц в нестандартном каталоге. Как настроить man на поиск этих страниц?

Решение
Отредактируйте файл /etc/manpath.config.
Допустим, в путь поиска нужно добавить каталог /opt/man. Включите его
в /etc/manpath.config:
# Поля, включаемые в каждый автоматически
# сгенерированный путь MANPATH
MANDATORY_MANPATH /usr/man
MANDATORY_MANPATH /usr/share/man
MANDATORY_MANPATH /usr/XllR6/man
MANDATORY_MANPATH /usr/locai/man
MANDATORY_MANPATH /opt/man
Все, готово. Теперь man найдет man-страницы, находящиеся в новом каталоге.
При создании нестандарного каталога man-страниц не забудьте создать подка-
талоги разделов:
$ Is /opt/man/local
manl man2 man3 man4 man5 тапб man7 man8 man9
Включать все нумерованные подразделы не обязательно — достаточно разде-
лов для тех man-страниц, которые будут там храниться.
Если вы будете использовать подкаталоги (например, /opt/man и /opt/man/
local), укажите их именно в таком порядке:
MANDATORY_MANPATH /opt/man/local
MANDATORY_MANPATH /opt/man
Подкаталоги должны указываться перед родительскими каталогами, в против-
ном случае программа просмотра man-страниц их проигнорирует.

Комментарии
Чтобы узнать текущий путь поиска man-страниц, выполните команду manpath без
параметров:
$ manpath
/usr/local /man:/usr/share/man:/usr/XHR6/man:/usr/man

См. также
manpath(l); manpath(5).

1.7. Использование info-страниц


Проблема
Вы решили поближе познакомиться с info-страницами и вызвали info tar (или
любую другую info-страницу по своему выбору). Однако разобраться в ней не так-
то просто. Как лучше всего освоить их?
26 Глава 1. Документация

Решение
Воспользуйтесь встроенным учебником info. Введите в командной строке строку
info, нажмите h и выполните инструкции. Обучение занимает 15-30 минут, и это
время будет потрачено с пользой.

Комментарий
Хотя некоторые пользователи считают, что механизм перемещения по info-стра-
ницам слишком усложнен, с info-страницами все же стоит познакомиться. Хотя
работать с info-страницами сложнее, чем с man-страницами, (обычно) они проще
для понимания. Освоившись с основными приемами перемещения, вы сможете
очень быстро найти нужные сведения.
Существует ряд удобных программ просмотра info-страниц, в том числе pinfo,
Konqueror и Yelp. Pinfo работает в консольном режиме, а для Konqueror и Yelp
необходима система X. Программа Konqueror особенно удобна для поиска и пе-
чати отдельных страниц.

См. также
info info.

1.8. Печать man-страниц


Задача
Требуется напечатать man-страницу в удобочитаемом формате. Вы попытались
применить команду man foo | Lpr, но результат выглядит сомнительно: поля слиш-
ком малы, а все форматирование теряется.

Решение
С ключом -t man-страница форматируется специально для печати. Страница man
finger хорошо подходит для экспериментов, потому что она состоит всего из двух
листов:
% man -t finger | lpr
Вывод на сетевой принтер:
$ man -t finger | 1рг -Р printername
Получение списка доступных принтеров:
$ lpstat -p -d
Возможно и другое решение. Следующая команда форматирует страницу
в HTML и отправляет ее в браузер по вашему выбору:
$ man -Hmozilla finger
Далее остается лишь отдать команду печати в браузере. Проследите за тем,
чтобы между -Н и именем браузера не было пробелов.
1.9. Печать info-страниц 27

Комментарий
Во все основные дистрибутивы Linux входит поддержка CUPS (Common Unix
Printing System). CUPS поддерживает команды как System V (lp), так и Беркли
(Lpr). В настоящем разделе использованы команды Беркли. Вот их аналоги для
System V:
$ man -t finger | lp
Вывод на сетевой принтер:
$ man -t finger | lp -d printername

См. также
Man(l), lpr(l), lp(l); глава 14; CUPS Software Users Manual (http://localhost:631/
documentation.html).

1.9. Печать info-страниц


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

Решение
Воспользуйтесь lpr:
$ info finger | lpr
Однако в зависимости от настроек принтера в распечатке могут оказаться слиш-
ком маленькие поля или странные переносы строк. Отформатируйте выходные
данные при помощи параметров lpr:
$ info finger | lpr -о cpi=12 -о page-left=54 -о page-right=54 -о page-top=54 \
-о page-bottom=54
Числовые значение задаются в пунктах, то есть 1/72 дюйма. В представлен-
ном примере на странице создаются одинаковые поля по 3/4 дюйма.

Комментарий
Во все основные дистрибутивы Linux входит поддержка CUPS (Co; non Unix
Printing System). CUPS поддерживает команды как System V (lp), i t Беркли
(lpr). В настоящем разделе использованы команды Беркли; далее пр1 одятся их
аналоги для System V.
Печать info-страницы:
$ info finger | lp
Печать info-страницы с параметрами форматирования lp:
$ info finger | l p -о cpi=12 -о page-left=54 -о page-right=54 -о page-top=54 \
-о page-bottom=54
28 Глава 1. Документация

См. также
info info, lpr(l), lp(l); глава 14; CUPS Software Users Manual (http://localhost:631/
documentation.html).

1.10. Печать отдельных


man- или info-страниц
Проблема
Многие man- и info-документы весьма длинны — скажем, man bash занимает 33 пе-
чатных страницы. Требуется напечатать лишь часть описания. Как огранизовать
выборочную печать страниц?

Решение
Экспортируйте man- или info-страницу в текстовый файл командой col. После
этого вы сможете легко выбрать печатаемые страницы. Следующие команды по-
казывают, как сделать это для страниц man bash или info bash:
t man bash | col -b > bash.txt
$ info bash | col -b > bash.txt

Комментарий
Если просто ввести команду man bash > bash.txt, результат будет выглядеть убого.
Команда col -b приводит распечатку в порядок, убирает из нее лишние переводы
строк и символы Backspace. Это особенно важно для перевода man-страниц в тек-
стовый формат, в man-страницах часто встречаются символы Backspace, которые
затем отображаются в текстовых файлах в виде пустых квадратов или повторяю-
щихся символов.

См. также
col(l).

1.11. Поиск всей документации к программе


Проблема
Требуется найти все файлы README и H0WT0, все журналы изменений, руко-
водства, примеры и прочую документацию, прилагаемую к установленной программе.

Решение
Воспользуйтесь finddoc — замечательным сценарием Python, любезно предостав-
ленным замечательной Акканой Пек.
1.11. Поиск всей документации к программе 29

Имя сценария может быть произвольным. Не забудьте разрешить его испол-


нение:
$chmod +x finddoc
В командной строке указывается только имя сценария и название программы,
для которой ищется документация. Пример:
$ ./finddoc grep
/usr/share/doc/grep
/usr/share/doc/grep-dctrl
/usr/share/doc/grep-dctrl.changelog.gz

Выходные данные фильтруются другими командами или направляются в файл:


$ ./finddoc | grep -i examples |lpr
$ ./finddoc | grep -i faq
$ ./finddoc j grep -1 examples > python-examples.txt

Листинг 1.1. Программа finddoc


#!/usr/bin/env python
# Finddoc: Сценарий для поиска документации Linux-программ.
# При создании собственной копии сценария обязательно сохраните
# начальные пробелы в том виде, в котором они приводятся в тексте.
# потому что они необходимы для работы Python.
# Поиск документации по заданным строкам, без учета регистра символов
# и только по целым словам. Сценарий зависит от "locate"
# и предполагает, что база данных locate содержит актуальную информацию.
#
# Copyright 2003 by Akkana Peck.
# Допускается использование, распространение или модификация программы
# на условиях GPL.
import sys. os, string, re
# Имена файлов, которые мы будем считать относящимися к документации.
# Редактируйте по своему усмотрению. Следите за тем. чтобы
# новые имена добавлялись только в нижнем регистре,
docfilenames - [ \
"changelog". \
"readme", \
"install". \
howto . \
"authors", \
"news", \
"todo". \
"config", \
"sample" \
samples \
example . \
"examples", \
"ref", \
"guide", \
"manual", \
"quickstart", \ ., л
продолжение •&>
30 Глава 1. Документация

Листинг 1.1 {продолжение)


thanks . \
"notes". \
"features", \
"faq". \
"acknowledgement". \
"bugs", \
"problems" \

def system out (cmdstr) :


retlist = []
fp = os.popen(cmdstr)
while 1:
s - fp.readlineO
if not s : break
retlist.append(s)
fp.closeO
return retlist
# mainO
for arg in sys.argv :
#print string.split(arg. " \t./")
files = system_out("locate " + arg + " | grep -w " + arg):
for path in files :
#print path
# Особый случай для файлов, в пути которых присутствуют слова
# "man", "doc" или "info":
i f (string.findtpath, "/man") >= 0) \
or (string.find(path. "/doc") >=* 0) \
or (string.find(path. "/info") >- 0) :
print path.
continue
# Проверить, совпадает ли с каким-либо именем в файле:
base = os.path.basename(path)
for nam in docfilenames :
if base ~ "" : continue
# Для поиска по части слова

# Поиск только по всему слову:


# Make aA regexp to search for nam as full-word only
pat - " " + nam + "$"
if (re.compile(nam).search(base, 1)) :
print path,
base = ""
continue

См. также
locate(l), grep(l).
Глава 2
Установка
и модификация
программ в системах
на базе RPM

2.1. Введение
В наши дни установка дистрибутива Linux производится без особых проблем.
Вставьте диск CD-ROM в дисковод, задайте несколько конфигурационных пара-
метров и отправляйтесь пить чай, пока идет установка. Современные версии Linux
превосходно распознают оборудование, быстро устанавливаются (обычно за 30 ми-
нут и менее) и требуют не более одной промежуточной перезагрузки.

Компиляция системы по исходным текстам


(старый подход)
Сопровождение системы Linux также прошло большой путь. Благодаря пакетам
и интеллектуальным средствам разрешения зависимостей своевременное обнов-
ление системы и исправление ошибок упростилось и стало порождать меньше
ошибок. В наши дни молодежь получает все готовенькое. В доисторические вре-
мена не было дисководов CD-ROM — вместо широкополосного подключения
приходилось использовать коробки дискет. Чтобы установить новую программу,
нам, ветеранам, приходилось подолгу загружать архивы или копировать их с дис-
кет, а затем компилировать их по исходным текстам. Зависимости? Все пробле-
мы приходилось решать самим, без малейшей помощи со стороны новомодных
утилит. Все проходило примерно так:
# t a r -xvf someprogram.tar
# ./configure
# make
Вызов make завершался неудачно из-за неразрешенных зависимостей. Тогда
приходилось загружать архив программы с необходимыми библиотеками, что на
модеме со скоростью на 300 бод (такой, с резиновой присоской, крепится на те-
лефоне) занимало около 6 часов. Я провела это время за работой в саду. Когда
пересылка была закончена, я вернулась, распаковала новый архив и повторила
попытку:
# ./configure
# make
32 Глава 2. Установка и модификация программ в системах на базе RPM

Снова длинная цепочка сообщений об ошибках, указывающих на новые не-


разрешенные зависимости. Загружаем новый архив, снова работа в саду. К тому
моменту, когда все было установлено и нормально работало, помидоры выраста-
ли до размеров дыни. Хорошо, что в те времена мы были такими умными, что
могли бы обойтись и без компьютеров.
Почему возникали эти мучения с зависимостями? Потому что в Linux использу-
ются общие библиотеки, которые динамически подключаются на стадии выпол-
нения. Многие программы, совершенно не связанные друг с другом, пользуются
одними библиотеками; такая архитектура повышает скорость и эффективность
системы. Программы расходуют меньше памяти и места на диске, становятся бо-
лее компактными, что упрощает их распространение. Но по мере эволюции и ус-
ложнения системы Linux становилось все труднее справляться с построением
системы по исходным текстам. Так программы стали оформляться в виде паке-
тов. В пакет входят откомпилированные библиотеки; сценарии, выполняемые до
и после установки; файловые индексы; сценарии удаления и т. д. Каждый пакет
знает все, что ему необходимо знать для разрешения своих зависимостей. Инфор-
мация обо всех файлах, установленных из пакетов, хранится в системной базе
данных пакетов.

Средства разрешения зависимостей


Впрочем, ситуация не столь безоблачна. Самой популярной системой управле-
ния пакетами для Linux является RPM (Red Hat Package Manager). RPM — мощ-
ная система; она осуществляет проверку зависимостей и версий, а также отслежи-
вает все установленные пакеты в базах данных RPM. Но RPM не может произвести
выборку дополнительных пакетов для разрешения зависимостей или управлять
связями между пакетами. Оказавшись в тупике из-за проблем зависимости, RPM
лишь сообщает, какие пакеты нужно установить; пользователю приходится само-
стоятельно искать пакеты и устанавливать их. При этом могут возникнуть новые
конфликты зависимостей, и простая установка быстро выходит из-под контроля.
Подобные ситуации называются «кошмаром RPM».
Для систем на базе RPM было разработано несколько программ разрешения
зависимостей, в том числе apt-rpm, urpmi, Yum и Ximian Red Carpet. В конкретных
дистрибутивах имеются превосходные программы установки/разрешения зави-
симостей — скажем, up2date в Red Hat или YaST в SuSE. В этой главе рассматри-
ваются основы RPM и программа Yum, которая изначально разрабатывалась для
систем на базе RPM. Для многих пользователей Yum обеспечивает оптимальное
сочетание богатства возможностей и простоты использования.

2.2. Установка пакетов


Проблема
Вы хотите знать, как устанавливать программные пакеты в Red Hat и других ана-
логичных системах.
2.3. Обновление пакетов 33

Решение
Воспользуйтесь системой управления пакетами RPM. Команда установки в Red
Hat имеет следующий синтаксис:
# грт -1 пакет

Например, следующая команда устанавливает графический редактор Tuxpaint.


Ключ -v обеспечивает выдачу подробных сообщений, а ключ -h отображает инди-
катор хода установки в виде строки из символов #:
# rpm -ivh tuxpaint-9.13-1.i386.rpm
Preparing.. .#######»############## [ЮО*]
J- ! J- It It tt It II It It II II II It It It tt tt It tt II It It Г1 II It II U г 1 t\ А П/ ~l
1
. t u x p a i n t //1!IIIIIIIIIItitfffffДпЗД-fffrfffffffff L100*J
Следующая команда проверяет установку без ее фактического выполнения:
# rpm -ivh --test tuxpaint-9.13-1.1386.rpm
Preparing,. .ff////W##f####titftfttfttttf [1СШ]
*
Комментарий
Самой распространенной проблемой с RPM является «кошмар RPM», то есть
бесконечная цепочка неразрешенных зависимостей. Вот некоторые рекоменда-
ции по ее предотвращению:
О не оставляйте неразрешенные зависимости. Они не исчезнут сами по себе,
а лишь будут скрываться во тьме и расти со временем;
О качество пакетов RPM не гарантировано. Любой желающий может слепить
пакет и отправить его для распространения. По возможности старайтесь выби-
рать пакеты RPM, построенные специально для вашего дистрибутива и плат-
формы. PLD (Polished Linux Distribution) строит качественные пакеты RPM
для всех систем на базе х86;
О когда потребуется построить программу по исходным текстам, используйте
утилиту Checklnstall. Checklnstall генерирует пакеты для Red Hat, Debian
и Slackware, поэтому вы получаете дистрибутив со всеми преимуществами
непосредственной компиляции и системы управления пакетами (см. раздел 4.5).

См. также
rpm(8); RPM.org (http://www.rpm.org/); Maximum RPM (http://www.rpm.org/max-rpm/
index.html).

2.3. Обновление пакетов


Проблема
Вышла новая версия программы с новыми возможностями и исправлениями оши-
бок. Требуется обновить установленный пакет RPM.
34 Глава 2. Установка и модификация программ в системах на базе RPM

Решение
Воспользуйтесь флагом -U:
#rpn -Uvh tuxpaint-9.13.-l.i386.rpm
Чтобы предварительно протестировать команду, введите:
#rpm -Uvh --test tuxpaint-9.13.-l.i386.rpm

Комментарий
Вместо ключа -i (установка, install) может использоваться ключ -U (обновление,
Upgrade). При этом может выполняться как обновление, так и установка пакета;
команда работает в обоих случаях. Ключ -II заменяет старый пакет. Если вы хоти-
те установить несколько версий одного пакета (скажем, дсс) или несколько раз-
ных ядер, не используйте ключ -U — только -i.

См. также
rpm(8); RPM.org (http://rpm.org); Maximum RPM (http://www.rpm.org/max_rmp/
index.html).

2.4. Удаление пакетов


Проблема
Некая программа вам надоела, и вы хотите ее удалить. А может, вы случайно ус-
тановили ненужную программу. Итак, требуется удалить пакет RPM из системы.

Решение
Задача решается командой rmp -e:
# rpm -ev tuxpaint
Вводить полное имя пакета (например, tuxpaint-9.13.-l.i386.rpm) не обязатель-
но; достаточно одной метки.
Чтобы удалить сразу несколько программ, перечислите их, разделяя пробелами:
# rpm -ev tuxpaint SDLttf SDLttf-devel SDLimages
Чтобы установка производилась без проверки зависимостей:
# rpm -ev --nodeps tuxpaint
Предварительное тестирование командной строки перед выполнением осуще-
ствляется командой
# rpm -ev --test tuxpaint SDLttf SDLttf-devel SDLJmages

Комментарий
Если RPM сообщает, что удалить пакет невозможно, потому что от него зависят
другие пакеты, вам придется либо удалить остальные пакеты, либо оставить пакет
в системе. В некоторых случаях (например, при замене Sendmail) зависимости
приходится разрывать. Новая почтовая программа — Postfix, Exim или qmail —
2.5. Получение информации об установленных пакетах 35

разрешит зависимости Sendmail, но сначала Sendmai нужно удалить, а это неиз-


бежно приведет к нарушению всех зависимостей.

См. также
rpm(8); Maximum RPM (http://www.rpm.org/max-rpm/index.html).

2.5. Получение информации


об установленных пакетах
Проблема
Требуется узнать, какие пакеты установлены в системе, какие файлы входят
в пакет или к какому пакету принадлежит тот или иной файл. Эта информация
может понадобиться по разным причинам; скажем, вы хотите точно узнать, какая
версия программы установлена в системе или к какому пакету принадлежит тот
или иной файл. А может быть, какой-то файл был случайно изменен, и вы хотите
знать, что именно вы сломали.

Решение
Воспользуйтесь информационными запросами RPM. Все запросы начинаются
с rpm -q.
Следующая команда проверяет по базе данных RPM, установлена ли про-
грамма:
$ rpm -q tuxpaint
tuxpaint-9.13-1
Для проведения поиска установленного пакета по его частичному имени без
учета регистра символов используется команда:
$ rpm -qa | grep -1 kde
lockdev-1.0.1-1.3
kdebase-3.1.4-6
kdeutils-3.1.4-1
kdegames-3.1.4-4
Вывод списка всех файлов установленного пакета:
$ rpm -ql kdegames
/usr/bin/atlantik
/usr/bin/kasteroids
/usr/bin/katomic
...
Вывод списка документации к приложению:
$ rpm -qd kdegames | grep katomic
/usr/share/doc/HTML/en/katomic/common
/usr/share/doc/HTML/en/katomic/index.docbook
...
Вывод списка конфигурационных файлов пакета:
$ rpm -qc openssh
/etc/ssh/moduli
36 Глава 2. Установка и модификация программ в системах на базе RPM

Вывод списка конфигурационных файлов системной команды:


$ rpm -qcf /usr/bin/ssh
/etc/ssh/ssh_config
Вывод списка всех установленных пакетов:
$ гпр -qa
setup-2.5.27-1.1
tzdata-2003d-l
bzip2-libs-l.0.2-10

Сохранение списка в файле с параллельным просмотром на экране:


$ rpm -qa | tee rpmlist.txt
Определение того, к какому пакету принадлежит тот или иной файл:
$ rpm -qf /usr/bin/tuxkart
tuxkart-0.2.0-3
Запросы RPM не обрабатывают символические ссылки и сообщают, что файл
«не принадлежит ни к одному пакету». Чтобы найти файл, на который указывает
символическая ссылка, воспользуйтесь командой
$ namei -/tuxkart
f: tuxkart
1 tuxkart -> /usr/games/tuxkart
d/
d usr
d games
- tuxkart
Вывод информации о пакете:
$ rpm -qi kdegames
Name :kdegames Relocations/usr
Version :3.1.4 Vendor:Red Hat. Inc.
Release :2 Build date: Mon 13 Oct 2003
Install date:Tue Nov 5.2003 Build host: daffy.perf.redhat.com
Group : Amusements/Games Source RPM:kdegames-3.1.4-2.src.rpm
Size :16167441 License: GPL
Signature :DSA/SHA1. Tue 28 Oct 2003 Key ID b446dO4f2a6fd2
Packager :Red Hat. Inc.
<http://bugzilla.redhat.com/bugzi11a>
Summary :K Desktop Environment - Games
Description :
Included with this package are: kenolaba, kasteroids. kblackbox, kmajongg.
kmines. konquest, kpoker. kreversi, ksame. kshisen. ksokoban. ksmiletris.
ksnake. ksirtet, katomic. kjumpingcube, ktuberling

Комментарий
Для поиска документации к конкретному приложению также можно воспользо-
ваться сценарием finddoc из раздела 1.11.

См. также
rpm(8); раздел 1.11; Maximum PRM (http://www.rpm.org/max-rpm/index.html).
2.7. Поиск недавно установленных пакетов 37

2.6 Получение информации о пакетах,


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

Решение
Для выполнения запросов к пакетам, не установленным в системе, в командную
строку добавляется ключ -р.
Следующая команда выводит список всех файлов документации:
$ грш -qpd tuxpaint-9.13-l.i386.rpm
/usr/share/doc/tuxpaint-9.13-l/AUTHORS.txt
/usr/share/doc/tuxpaint-9.13-l/CHANGES.txt
'"sr'share'doc/№nt-"3-1't0PYI"G-"t I .8.5
Вывод списка всех файлов:
$ rpm -qpl tuxpaint-9.13-l.i386.rpm
/etc/tuxpaint/tuxpaint.conf
/usr/bin/tuxpaint

Вывод списка зависимостей пакета:


$ rpm -qpR tuxpaint-9.13-1.i386.rpm
/bin/sh
SDL >- 1.2.4
SOLJmage

Комментарий
Любую информацию о конкретных пакетах можно получить до их загрузки
из таких архивов RPM, как http://freshrpms.net, http://rpmfind.net или http://
rpm.pbone.net.
1

См. также
rpm(8); Maximum PRM (http://www.rpm.org/max-rpm/index.html); FreshRPMs (http://
freshrpms.net/); rpmfind (http://rpmfnd.net); rpm.pbone (http://rpm. pbone.net).

2.7. Поиск недавно установленных пакетов


Проблема
Несколько дней назад вы установили несколько новых пакетов, но забыли, какие
именно.
38 Глава 2. Установка и модификация программ в системах на базе RPM

Решение
Добавьте в командную строку ключ —last:
# rpm -qa --last
Команда выводит список установленных пакетов, начиная с тех, которые ус-
танавливались последними.

Комментарий
Если список получится слишком длинным, передайте его less или head: rpm -qa —
last|head.

См. также
rpm(8); Maximum PRM (http://www.rpm.org/max-rpm/index.htmL).

2.8. Перестройка базы данных RPM


Проблема
Похоже, база данных RPM в вашей системе повреждена или содержит уста-
ревшую информацию, потому что она не отвечает на запросы о заведомо уста-
новленных RPM. А может быть, вы существенно переработали свою систему
и хотите быть уверенными в том, что база данных RPM содержит актуальную
информацию.

Решение
Попробуйте построить заново базу данных RPM с правами root:
# rpm --rebuiiddb
или построить ее заново:
# rpm --initdb

Решение
Необходимость в перестройке базы данных RPM возникает редко, но вреда эта
операция не принесет. При любом внесении серьезных изменений в систему будет
неплохо перестроить базу данных RPM. При сравнении размеров /var/h'b/rpm/
packages до и после запуска rpm —rebuilddb иногда можно заметить некоторое умень-
шение, поскольку в процессе перестройки из базы данных исключаются неисполь-
зуемые части.

См. также
rpm(8); Maximum PRM (http://www.rpm.org/max-rpm/index.html).
2.9. Отслеживание библиотек в системах на базе RPM 39

2.9. Отслеживание библиотек, построенных


по исходным текстам, в системах
на базе RPM
Проблема
В одной системе должны использоваться как программы, построенные по ис-
ходным текстам, так и пакеты RPM. Но RPM ничего не знает о библиотеках, по-
строенных по исходным текстам, и ошибочно выдает сообщения о неразрешен-
ных зависимостях.

Решение
Воспользуйтесь сценарием rpm-orphan-find. Сценарий находит все библиотеки в ва-
шей системе, а затем сравнивает результаты с содержимым базы данных RPM.
Все «бесхозные» библиотеки объединяются в новый, виртуальный пакет .rpm.
Пакет не содержит файлов, а только список обеспечиваемых зависимостей. Сце-
нарий запускается как любой сценарий Bash:
# chmod +x rpm-orphan-find
# ./rpm-orphan-find
После завершения работы сценария установите новый пакет, и прежде «бес-
хозные» библиотеки будут включены в базу данных RPM.
Спасибо Полу Хайнлайну (Paul Heinlein) и Питеру Сэмюэльсону (Peter Samuel-
son) за этот замечательный сценарий.
Листинг 2.1. Программа rpm-orphan-find
#!/bin/bash
# rpm-orphan-find. сценарий для поиска
# "бесхозных" библиотек в системах на базе RPM
# и их преобразования в виртуальный пакет .rpm
## Авторы - Пол Хайнлайн и Питер Сэмюэльсон
# Copyright 2003
# Допускается использование, распространение или модификация
# программы на условиях GPL.
0S=$(uname -s)
LIBS="/lib / u s r / l i b $(cat / e t c / I d . s o . c o n f ) "
NAME=$(echo ${OS}-base-libs | t r ' [ A - Z ] 1 ' [ a - z ] ' )
VER-1.0: REL=1
TMPSPEC=$(mktemp /tmp/${NAME}.spec.XXXXXX)

exec 9>$TMPSPEC
cat < < _ e o f _ >&9
Summary: SOS Base Virtual Package
Name: $NAME
Version: $VER
Release: $REL
продолжение тУ
40 Глава 2. Установка и модификация программ в системах на базе RPM

Листинг 2.1 {продолжение)


Group: System Environment/Base
License: None
eof

found=0: orphan=0;
echo "Scanning system libraries SNAME version $VER-$REI "
find $LIBS -type f \( -name '*.so.*' -o -name '*.so' \) |
while read f
do
((found++))
if ! rpm -qf $f >/dev/null 2>&1
then
((orphan++))
echo "Provides: $(basename $f)" >&9
fi
echo -ne "Orphans found: $orphan/$found...\r"
done
echo '': echo ''
cat « _ e o f _ >&9
^description
This is a virtual RPM package. It contains no
actual files. It uses the 'Provides' token from RPM 3.x and later to list many of the
sharedlibraries that are part of the base operating system and associated subsets for
this SOS environment.

«prep
# nothing to do
«build
# nothing to do

«install
# nothing to do
fclean
# nothing to do
2post
# nothing to do

«files
eof

exec 9>&-
rpmbuild -ba STMPSPEC; rm STMPSPEC

См. также
rpm(8), rpmbuild(8); Maximum PRM (http://www.rpm.org/max-rpm/index.html).
2.10. Решение проблем установки RPM 41

2.10. Решение проблем установки RPM


Г-. Г-

Проблема
Попытка установки пакета RPM завершается с сообщением «Error: Failed depen-
dency». Добро пожаловать в «кошмар зависимостей»!
Решение
Соберите воедино все пакеты, необходимые для разрешения зависимостей, и ус-
тановите их все сразу. Пример:
# rpm -ivh tuxpaint-0.9.13-l.i386.rpm
error: Failed dependencies
SDLjimage is needed by tuxpaint-0.9.13-1
SDL_ttf is needed by tuxpaint-0.9.13-1
1ibSDL_image-1.2.so.O is needed by tuxpaint-0.9.13-1
libSDL_ttf-2.0.so.O is needed by tuxpaint-0.9.13-1
# rpm -ivh tuxpaint-0.9.13-l.i386.rpm SDL_image-1.2.3-4.i386.rpm SDLjttf-2.0.6-
I.i386.rpm
Программа установки сортирует их и устанавливает в правильном порядке.
Что делать, если RPM жалуется на отсутствие файла или пакета, а вы абсо-
лютно уверены в том, что он установлен? Возможно, база данных RPM содержит
ошибки; попробуйте перестроить ее:
# rpm - -rebuilddb
Если это не помогло, переустановите якобы отсутствующий пакет с ключом
--replacepkgs:
# rpm -ivh --replacepkgs SDL_ttf-2.0.6-l.i386.rpm
Если вы твердо уверены в том, что необходимые библиотеки существуют в ва-
шей системе, попробуйте провести форсированную установку, не обращая вни-
мания на ошибки:
# rpm -ivh --force tuxpaint-2002.10.20-1.i386.rpm
или откажитесь от проверки зависимостей:
# rpm -ivh --nodeps tuxpaint-2002.10.20-l.i386.rpm
Если конфликт зависимостей так и не удалось разрешить, попробуйте устано-
вить новую программу и все ее зависимые пакеты из пакетов, сгенерированных
по исходным текстам (см. раздел 2.11).

Комментарий
Где найти необходимые пакеты? Начните с домашней страницы той программы,
которую вы пытаетесь переустановить. Обязательно прочтите всю имеющуюся
документацию.
Сейчас появилось множество разных дистрибутивов на базе RPM, поэтому
постарайтесь раздобыть пакеты, построенные для вашей конкретной системы. Вот
некоторые из крупнейших общедоступных архивов RPM:
о FreshRPMs — http://freshrpms.net;
о rpmfind - http://rpmfind.net;
О rpm.phone — http://rpm.phone.net.
42 Глава 2. Установка и модификация программ в системах на базе RPM

См. также
rpm(8); RPM.org (http://www.rpm.org/); Maximum PRM (http://www.rpm.org/max-
rpm/index.html).

2.11. Сборка пакетов по исходным текстам


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

Решение
Постройте новую программу из пакета RPM с исходными текстами (SRPM, Source
RPM).
Загрузите SRPM (в данном примере tuxpaint-2002.10.20-l.src.rpm) в каталог по
вашему усмотрению. Проследите за тем, чтобы он подходил для вашей поставки Linux.
Запустите программу установки пакета:
# rpm -ivh tuxpaint-2002.10.20-l.src.rpm
Команда помещает исходные тексты в каталог/usr/src/SOURCES, а файл spec —
в каталог/usr/src/SPECS:
# Is /usr/src/SOURCES
tuxpaint-2002.09.29.tar.gz tuxpaint-Makefile.patch tuxpaint-stamps-2002.09.29.tar.gz
tuxpai nt.desktop tuxpai nt-opt.patch
$ Is /usr/src/SPECS
tuxpaint.spec
Далее построите файл spec:
# rpmbuild -bb tuxpaint.spec
Новый пакет RPM создается в каталоге /usr/src/RPMS/i386:
# Is /usr/src/RPMS/i386
tuxpaint-2002.10.20-1.i386.rpm
Теперь у вас имеется новый пакет RPM с программой Tuxpaint, откомпилиро-
ванный для вашей системы.

Комментарий
В вашей системе исходные тексты могут храниться в другом каталоге. В Fedora 1,
как и в некоторых ранних версиях используется каталог /usr/src/redhat/RPMS/.
В других поставках используется каталог/usr/src/RPM/RPMS. Разберитесь, и вы най-
дете нужный каталог.
Построение пакетов по исходным текстам не избавляет от «кошмара RPM».
Оно всего лишь гарантирует двоичную совместимость с системными библиоте-
2.12, Настройка параметров сборки SRPM 43

ками и оптимизацию RPM для архитектуры вашей системы. Соблюдение зави-


симостей придется обеспечивать вручную, а это далеко не так просто, как ка-
жется.
Обратите внимание: rpmbuild и rpm — два отдельных пакета.

См. также
rpmbuild(8), rpm(8); RPM.org (http://rpm.org/); Maximum PRM (http://www.rpm.org/
max-rpm/index.html).

2.12. Настройка параметров сборки SRPM


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

Решение
Сначала загрузите и установите исходный пакет RPM:
# rpni -ivh samba-3.0.0-15.src.rpm
Затем перейдите в каталог SPECS и откройте файл spec:
# cd /usr/src/redhat/SPECS
# vim samba.spec
Найдите секцию с параметрами %configure:
^configure \
--with-acl-support \
--with-automount \
--with-fhs \

Добавьте или удалите параметры конфигурации, сохраните и закройте файл


spec, а затем постройте пакет, как описано в разделе 2.11:
# cd /usr/src/redhat/SPECS
# rpmbuild -bb tuxpaint.spec

Комментарий
Где найти список параметров? Перейдите в каталог SOURCES и распакуйте архив
с исходными текстами:
# cd /usr/src/redhat/SOURCES
# tar xzvf samba-3.0.0.tar.bz2
Как упоминалось в разделе 2.11, в вашей системе может использоваться дру-
гой каталог исходных текстов.
44 Глава 2. Установка и модификация программ в системах на базе RPM

Найдите в распакованном архиве сценарий configure и запустите его встроен-


ную команду:
# cd /usr/src/redhat/S0URCES/samba-3.0.0/source
# ./configure --help
'configure' configure t h i s package to adapt to many kinds of systems

Optional Packages:
with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
without-PACKAGE do not use PACKAGE
with-fhs Use FHS-compliant paths
with-privated=DIR Where to put smbpasswd

Настроив директиву %configu re по своему усмотрению, сохраните и закройте файл.


Создатели пакетов не могут удовлетворить потребности всех пользователей.
Настройка SRPM позволит легко обеспечить именно тот набор параметров кон-
фигурации, который нужен в вашем конкретном случае.
В наше время настройка конфигурации SRPM чаще всего применяется для до-
бавления или настройки поддержки аутентификации. Существует много разных
внутренних модулей аутентификации (LDAP, MySQL, BerkeleyDB, PostgreSQL)
и много разных аутентификационных протоколов. С точки зрения безопасности ре-
комендуется включать только те возможности, которые будут реально использоваться.
'•

См. также
rpmbuild(8), rpm(8); RPM.org (http://www.rpm.org/); Maximum PRM (http://www.rpm.org/
max-rpm/index.htrnl).

2.13. Установка yum


Проблема
Мне надоело постоянно попадать в «кошмар RPM». Работать должен компьютер,
а не пользователь.

Решение
Воспользуйтесь yum (Yellow dog Updater Modified).
Программа yum является стандартной для дистрибутива Fedora; в других сис-
темах ее придется устанавливать дополнительно:
# rpm -ivh yum-2.0.4-1.noarch.rpm
Затем загрузите ключи GPG, необходимые для загрузки из проекта Fedora:
# rpm --import http://www.fedora.us/FEDORA-GPG-KEY
Дополнительные ключи можно найти в каталогах загрузки, таких как http://
download.fedora.redhat.eom/pub/fedora/tinux/core/2/i386/os/. Понадобятся ключи для
всех архивов, на работу с которыми будет настроен yum. Включите следующую стро-
ку в файл /etc/yum.conf, чтобы проверка ключей осуществлялась автоматически:
gpgcheck=l
2.14. Настройка yum 45

Теперь можно устанавливать новую программу:


# yum install tuxpaint
Первая загрузка Yum займет около 30 минут, потому что она будет сопровож-
даться загрузкой списков пакетов:
Gathering header information file(s) from server(s)
Server: Fedora Linux / stable for Red hat Linux 9 (i386)
Server: Red Hat Linux 9 П386)
Server: Red Hat Linux 9 П386) updates
Finding updated packages
Downloading needed headers
getting /var/cache/yum/fedora-stable/headers/leafnode-0-1.9.43-
0.fdr.l.rh90.i386.hdr
getting /var/cache/yutn/fedora-stable/headers/libzvt-devel -0-
2.0 .1-0.fdr,5.rh90.i386.hdr

Dependencies resolved
I w i l l do the following:
[ i n s t a l l : tuxpaint-2002.10.20-l.i386.rpm]
Is t h i s ok [y/N]:
Ответьте утвердительно, и на этом все будет закончено.

Комментарий
FreshRPMs — хороший источник качественных пакетов. Зеркала yum находятся
по адресу http://ayo.freshrpms.net. Ваш пакет yum из FreshRPMs будет заранее на-
строен на использование архивов FreshRPMs. He забудьте установить ключ GPG:
# rpm --import http://freshrpms.net/packages/RPM-GPG-KEY.txt
Включение gpgcheck=l в файл yum.conf и импортирование ключей гарантирует
автоматическую проверку сигнатур пакетов. Этот простой, удобный способ га-
рантирует, что устанавливаемые пакеты не подвергались злонамеренным моди-
фикациям или искажениям в процессе пересылки.

См. также
yum(8), yum.conf(5); домашняя страница yum (http://linux.duke.edu/projects/yum/);
зеркала yum на сайте FreshRPMs (http://ayo.freshrpms.net).

2.14. Настройка yum


Проблема
Требуется сменить источник, из которого yum загружает программы.

Решение
Отредактируйте список источников загрузки в файле /etc/yum.conf. Допустим, вы
хотите использовать некоторые зеркала Fedora по адресу http://www.fedora.us/wiki/
FedoraMirrorList:
46 Глава 2. Установка и модификация программ в системах на базе RPM

University of Southern California. USA


ftp: //mi rrors.use.edu/pub/1i nux/fedora/
http://mi rrors.use.edu/pub/1i nux/fedora/
Теперь отредактируйте файл /etc/yum.conf, используя стандартные записи в ка-
честве образца:
[base]
name=Fedora Core $releasever - Sbasearch - Base
baseurl=http://mirrors.kernel.org/fedora/core/$releasever/$basearch/os
baseurl=http://mi rrors.use.edu/pub/1i nux/fedora/$releasever/$basearch/os

Комментарий
Сетевой этикет предписывает по возможности пользоваться зеркалами, чтобы не
перегружать главный сайт по адресу http://fedora.redhat.com.

См. также
yum(8), yum.conf(5); домашняя страница yum (http://linux.duke.edu/projects/yum/);
зеркала yum на сайте FreshRPMs (http://ayo.freshrpms.net); Fedora Mirror List
(http://www.fedora.us/wiki/FedoraMirrorList).

2.15. Установка и обновление пакетов в yum


Проблема
Требуется узнать, как устанавливать и обновлять пакеты и как выполнять обнов-
ление системы.

Решение
Сначала обновите список пакетов:
# yum check-update
Новые пакеты устанавливаются командой
# yum -у install tuxkart
Флаг -у включает режим автоматизированной установки (с положительными
ответами на все вопросы).
Чтобы обновить один пакет, воспользуйтесь командой
# yum update gltron
Обновление нескольких пакетов:
# yum update gltron ktron tuxracer
Обновление всех установленных пакетов:
# yum update
Поиск устанавливаемого пакета:
# yum search quake
Допустим, вам нужна конкретная библиотека, но вы не знаете, какой пакет
предоставляет ее. Найдите ее с помощью yum:
2.17. Получение информации об установленных пакетах в yum 47

# yum provides 1 i b c 6 . 1 - 1 . s o . 2

Комментарий
Одна из самых замечательных особенностей Yum состоит в том, что програм-
ма хорошо интегрируется с существующими системами. Yum читает готовую
базу данных RPM и создает новый список пакетов, после чего ей можно пользо-
ваться.

См. также
yum(8), yum.conf(5); домашняя страница yum (http://linux.duke.edu/projects/yum/);
зеркала yum на сайте FreshRPMs (http://ayo.freshrpms.net); Fedora Mirror List
(http://www.fedora.us/wiki/FedoraMirrorList).

2.16. Удаление пакетов в yum


Проблема
Требуется удалить некоторые пакеты из системы.

Решение
Yum позволяет решить и эту задачу:
# yum remove gltron
Одновременное удаление нескольких пакетов:
# yum remove gltron ktron tuxkart xpoker

Комментарий
Yum также удаляет пакеты, которые перестали быть необходимыми.
yum(8), yum.conf(5); домашняя страница yum (http://linux.duke.edu/projects/yum/).

2.17. Получение информации


об установленных пакетах в yum
Проблема
Требуется узнать, какие пакеты установлены в системе, или получить информа-
цию о конкретных пакетах.

Решение
Используйте команды запросов yum. Следующая команда выводит список всех
установленных пакетов:
# yum list installed
48 Глава 2. Установка и модификация программ в системах на базе RPM

Поиск конкретных пакетов:


# yum l i s t installed | grep -i tux
tuxracer i386 0.61-23
tuxracer i386 0.2.0-3
Вывод информации о пакете:
# yum info tuxracer
Отображение пакетов, для которых имеются обновления:
#yum l i s t updates

Комментарий
Ту же самую информацию можно получить посредством запросов RPM, но при
помощи yum это делается чуть удобнее.

См. также
yum(8), yum.conf(5); домашняя страница yum (http://linux.duke.edu/projects/yum/).

2.18. Сопровождение yum


Проблема
Вы хотите избавиться от скопления загруженных пакетов в системе или позабо-
титься о том, чтобы Yum работал со свежими пакетами вместо кэшированных.

Решение
Воспользуйтесь параметром clean. Следующая команда удаляет все каптирован-
ные пакеты:
# yum clean packages
Загрузка обновленных заголовков пакетов:
# yum clean headers
Удаление из системы старых, ненужных заголовков:
# yum clean oldheaders
Удаление кэшированных пакетов и старых заголовков с сохранением текущих
заголовков:
# yum clean a l l

Комментарий
Локальный кэш пакетов и заголовков рекомендуется периодически обновлять.
Это предотвратит появление труднообъяснимых ошибок, а при установке и об-
новлении будут использоваться обновленные пакеты.

См. также
yum(8), yum.conf(5); домашняя страница yum (http://Linux.duke.edu/projects/yum/).
.

Глава 3
Установка
и сопровождение
программного
обеспечения
системах на базе Debian
3.1. Введение
Дистрибутив Debian известен своей исключительной стабильностью и надежнос-
тью, а также замечательной системой управления пакетами/разрешения зависи-
мостей apt Установка новых приложений осуществляется очень просто:
# apt-get программа
Выборка и установка библиотек, от которых зависит работа приложения, про-
изводятся автоматически. Apt — изощренная, интеллектуальная программа, а офи-
циальный архив программного обеспечения Debian поддерживает жесткие стан-
дарты качества пакетов. Официальный программный архив Debian содержит более
12 000 программ; это больше, чем у любой другой платформы.
Dpkg — аналог RPM для Debian, обладающий дополнительными возможностя-
ми; он также выполняет базовую настройку конфигурации. Например, при уста-
новке Postfix dpkg запрашивает кое-какую информацию о системе, устанавливает
стартовые и конфигурационные файлы и инициализирует программу.
Debian существует в трех разных версиях: стабильной, тестовой и нестабиль-
ной (также существует четвертая версия для искателей приключений — экспери-
ментальная). Они обозначаются терминами Woody, Sarge и Sid. Версия Woody
чрезвычайно консервативна. Пакеты допускаются в версию Woody только после
обширной проверки зависимостей и исправления всех дефектов безопасности.
Версии Sarge и Sid содержат новые пакеты, не прошедшие столь подробного тес-
тирования. «Заплатки» безопасности быстро выпускаются для Woody и весьма
нерегулярно — для Sarge и Sid.
Какую версию использовать? Наиболее очевидный выбор — стабильная вер-
сия (Woody), надежная, как скала. Тем не менее за надежность приходится рас-
плачиваться: программы в Woody на месяцы, а иногда и на годы отстают от даты
официального выпуска. Woody идеально подходит для серверов. Для настольных
систем и рабочих станций более актуальны тестовая версия (Sarge) и нестабиль-
ная версия (Sid). И несмотря на устрашающие названия («тестовая», «нестабиль-
ная»), они работают вполне нормально.
50 Глава 3. Установка и сопровождение в системах на базе Debian

Кодовые обозначения выглядят симпатично, но не стоит использовать их в кон-


фигурационных файлах. Нестабильной версии всегда будет соответствовать обо-
значение Sid, но Woody и Sarge не всегда будут связываться со стабильной и тес-
товой версиями — когда-нибудь текущая тестовая версия Sarge будет повышена
до статуса стабильной, а текущая версия Woody уйдет на покой. При грамотном
сопровождении система Debian постоянно обновляется без переустановки, поэто-
му не стоит нарушать ее работу использованием кодовых обозначений, которые со
временем изменятся.
Далее перечислены кодовые названия версий. Все они позаимствованы из филь-
ма «История игрушек»:
О Buzz — Базз Световой Год, космонавт (1.1);
О Rex — тираннозавр Рекс (1.2);
О Во - Б о Пип (1.3.x);
О Hamm — Хэм, свинья-копилка (2.0);
О Slink — собака Слинки (2.1);

А теперь версии 3.x:


О Woody — ковбой (стабильная версия);
О Sarge — командир армии зеленых солдатиков (тестовая версия);
О Sid — испорченный мальчишка, ломающий игрушки (нестабильная версия).

3.2. Поиск программ для Debian


Проблема
Вам понадобились программы для системы Debian. В Сети можно найти многие
гигабайты программного обеспечения — но где найти программы, упакованные для
Debian? И как выбрать архив?

Решение
Пакеты Debian устанавливаются из официальных архивов пакетов Debian,
неофициальных архивов и с дисков CD-ROM. Источники указываются в файле
/etc/apt/sources.list, после чего система управления пакетами Debian используется
для установки пакетов из источников.
Списки адресов сайтов для загрузки программ:
О официальное зеркало Debian — http://www.debian.org/mirror/;
О неофициальные архивы APT — http://www.apt-get.org.
Список поставщиков дисков CD-ROM по всему миру:
О http://www.debian.org/CD/vendors/;
Для поиска отдельных пакетов можно воспользоваться страницей поиска Debian:
О http://www.debian.org/distrib/packages/.
3.3. Установка пакетов Debian с диска CD-ROM 51

Следующим шагом должно стать редактирование файла/etc/apt/sources.list и за-


несение в него выбранных источников.

Комментарий
При наличии нескольких источников apt-get всегда использует самую новую вер-
сию пакета. Список начинается с наиболее предпочтительных источников, посколь-
ку apt-get обрабатывает список от начала к концу.
Редактирование файла sources.list — абсолютно законный, простой способ уп-
равления установкой программ. Занесите в файл все записи, которые вы когда-
либо планируете использовать, и закомментируйте строки, не задействованные
в конкретной установке.
В список sources.List рекомендуется включить официальные зеркала Debian,
чтобы снять нагрузку с серверов Debian.org. Полный список официальных зеркал
находится по адресу http://www.debian.org/mirror/.
ВНИМАНИЕ
Заплатки безопасности распространяются только с адреса http://www.debian.org/security/ и не
копируются на зеркалах.

См. также
sources.list(5); официальный список зеркал Debian (http://www.debian.org/mirror/);
страница поиска пакетов Debian (http://www.debian.org/distrib/packages).

3.3. Установка пакетов Debian с диска CD-ROM

Требуется установить пакеты с компакт-диска. Процесс, описанный в предыду-


щем разделе, предполагает, что программы загружаются из архива. Как включить
ссылку на CD-ROM в файл sources.list?

Решение
Измените файл /etc/apt/sources.list командой apt-cdrom; это единственный способ
включения архивов на CD-ROM в sources.list. Диск должен находиться в дисково-
де, но монтировать его не обязательно. Затем введите команду:
# apt-cdrom add
Using CD-ROM mount point /cdrom/
Unmounting CD-ROM
Please insert a Disc in the drive and press enter
Mounting CD-ROM
Identifying.. [OeabcO3dlO414e59dfal622326e2Oda7-2]
Scanning Disc for index files.. Found 1 package indexes and 0 source indexes.
This Disc is called:
'Libranet GNU/Linux 2.8.1 CD2'
Reading Package Indexes...Done
52 Глава 3. Установка и сопровождение в системах на базе Debian

Wrote 1271 records.


Writing new source l i s t
Source List entries for this Disc are:
deb cdrom:[Libranet GNU/Linux 2.8.1 CD2]/ archive/
Repeat this process for the rest of the CDs in your set.
Используйте ключ -d, чтобы добавить данные компакт-диска из другого диско-
вода:
# apt-cdrom -d /cdroml add
Идентификация диска:
$ apt-cdrom ident
Using CD-ROM mount point /cdrom/
Mounting CD-ROM
Identifying.. [Oeabc03dl0414e59dfal622326e20da7-2]
1
Stored Label: 'Libranet GNU/Linux 2.8.1 CD2
$

Комментарий
apt-get всегда выбирает из всех доступных источников новейшие версии устанав-
ливаемых пакетов. Мир Linux быстро развивается, поэтому самая свежая инфор-
мация всегда находится в Интернете. Чтобы выполнить принудительную установку
программы с компакт-диска, закомментируйте все остальные строки в файле
sources.list.
ПРИМЕЧАНИЕ
Не забывайте выполнять команду apt-get update при каждом изменении файла sources.list.

См. также
apt-cdrom(8), apt-get(8); Debian on CD, архивы ISO (http://www.debian.org/CD/http-ftp/).

3.4. Установка пакетов в системе


на базе Debian
Проблема
Все архивы программного обеспечения, компакт-диски и т. д. не принесут ника-
кой пользы, если вы не умеете устанавливать программы. Итак, вы хотите знать,
как установить новый пакет в Debian.

Решение
Воспользуйтесь командой apt-get install:
# apt-get install tuxkart
Установка пакета с перезаписью файлов:
# apt-get install •-reinstall tuxkart
3.5. Удаление пакетов из системы Debian 53

Чтобы установить сразу несколько программ, перечислите их, разделяя пробелами:


# apt-get install tuxkart gltron frozen-bubble
tuxracer nethack galaga
Загрузка программ без установки или распаковки:
# apt-get -d install tuxkart
Чтобы протестировать команду перед выполнением, присоедините к строке
ключ —dry-run:
# apt-get install tuxkart gltron frozen-bubble tuxracer nethack galaga --dry-run

Комментарий
Для определения имен пакетов используйте страницу поиска Debian по адресу
http://www.debian.org/distrib/packages/. Имена пакетов Debian часто отличают-
ся от своих аналогов из RPM. Например, программа CyrusSASL оформляется
в пакет sasl-2.x.rpm, а в Debian она разбивается на несколько пакетов с именами
libsasl-*.
Не забудьте выполнить команду apt-get update после изменения/etc/apt/sources. List
и периодически запускайте ее, чтобы получать обновленную информацию из ар-
хивов пакетов.
apt-get загружает и устанавливает (а при необходимости и удаляет) все пакеты,
необходимые для разрешения всех зависимостей.

См. также
apt-get(8); локальная документация (/usr/share/doc/Debian/apt-howto).

3.5. Удаление пакетов из системы Debian


Проблема
Требуется удалить пакет или несколько пакетов из системы Debian.

Решение
Воспользуйтесь командой apt-get remove:
# apt-get remove tuxpaint
Reading Package Lists... Done
Building Dependency Tree... Done
The following packages will be REMOVED:
tuxkart
0 upgraded. 0 newly installed. 1 to remove and 79 not updated.
Need to get OB of archives.
After unpacking 188 kB disk space will be freed.
Do you want to continue? [Y/n] у
(Reading database ... 141283 files and directories currently installed.)
Removing tuxkart...
54 Глава 3. Установка и сопровождение в системах на базе Debian

Предварительное тестирование команды remove:


# apt-get remove tuxpaint --dry-run
Удаление всех следов существования пакета, включая конфигурационные файлы:
# apt-get --purge remove tuxpaint
Чтобы удалить сразу несколько программ, перечислите их, разделяя пробелами:
# apt-get remove tuxkart gltron frozen-bubble tuxracer nethack gaiaga

См. также
Apt-get(8); локальная документация (/usr/share/doc/Debian/apt-howto).

3.6. Установка программ в Debian


по исходным текстам
Проблема
Требуется откомпилировать программу в системе (вместо установки двоичных
файлов Debian). Возможно, вы хотите отредактировать код программы или запу-
стить пакет из тестовой или нестабильной версии в стабильной (перекомпиляция
обеспечивает построение правильных зависимостей).

Решение
Воспользуйтесь командой apt-get source и содействием dpkg.
Для начала загрузите заголовки и библиотеки, от которых зависит устанавли-
ваемая программа, в каталог, в котором будет строиться пакет:
# cd /usr/src
# apt-get build-dep tuxkart
Загрузка и сборка пакета:
# apt-get -b source tuxkart
Установка пакета:
# dpkg -1 tuxkart.deb

Комментарий
Построение пакетов .deb по исходным текстам чаще всего выполняется с целью
использования пакетов из тестовой или нестабильной версии в стабильной. Пере-
компиляция настраивает зависимости для стабильной версии.
Если потребуется установить программу, отсутствующую в архивах Debian,
постройте .deb при помощи Checklnstall — утилиты, создающей пакеты RPM, .deb
и Slackware (см. раздел 4.5).

См. также
apt-get(8), dpkg-source(l); локальная документация (/usr/share/doc/Debian/apt-howto);
раздел 4.5.
3.8. Обновление системы Debian 55

3.7. Обновление пакетов в Debian


Проблвмэ
Требуется обновить пакет в системе Debian, потому что новая версия обладает рас-
ширенными возможностями или в ней исправлены ошибки.

Решение
Воспользуйтесь командой apt-get install:
# apt-get install gltron
Reading Package Lists... Done
Building Dependency Tree... Done
The following packages will be upgraded:
gltron
1 upgraded, 0 newly installed, 0 to remove and 78 not upgraded.
Need to get 89.5kB of archives.
After unpacking 266kB of additional disk space w i l l be used.
Get:l ftp://ftp.debian.org sid/main gltron 3.53 [89.5kB]
Fetched 89.5kB in 5s (16.8kB/s)
Preconfiguring packages...
(Reading database... 141286 f i l e s and directories currently installed.)
Preparing to replace adduser 3.52 (using .../archives/adduser_3.53_all.deb)...
Unpacking replacement g l t r o n . . .
Setting up adduser (3.53)...
#
О б н о в л е н и е н е с к о л ь к и х пакетов:
# apt-get install tuxkart gltron frozen-bubble tuxracer nethack galaga

Комментарий
Команды обновления отдельных пакетов не существует. Команда apt-get install
всегда устанавливает последнюю версию пакета.

См. также
apt-get(8); локальная документация (/usr/share/doc/Debian/apt-howto).

3.8. Обновление системы Debian


Проблема
Требуется обновить все пакеты в системе и заменить их новейшими версиями.

Решение
Убедитесь в том, что файл /etc/apt/sourcs.list содержит ссылки на нужные источ-
ники, а затем выполните команду apt-get upgrade.
56 Глава 3. Установка и сопровождение в системах на базе Debian

Всегда начинайте с обновления списков пакетов:


# apt-get update
Следующая команда обновляет все установленные пакеты, но не удаляет паке-
ты для разрешения зависимостей:
# apt-get -u upgrade
Обновление всех установленных пакетов с удалением или установкой пакетов
по мере необходимости для разрешения всех зависимостей:
# apt-get -u dist-upgrade
Флаг -и позволяет заранее просмотреть список всех изменений. Обновление
может занять несколько часов, в зависимости от скорости подключения к Интер-
нету и количества загружаемых пакетов.

Комментарий
Чтобы флаг -и применялся по умолчанию, отредактируйте (или создайте) файл
/etc/apt/apt.conf.
// Всегда перечислять обновляемые пакеты
// и запрашивать подтверждение у пользователя
APT::Get::Show-Upgraded "true":
Перед каждым выполнением команды apt_get dist_upgrade сначала выполните
команду apt-get upgrade, чтобы снизить вероятность ошибок при выполнении dist-
upgrade.

См. также
apt-get(8); локальная документация (/usr/share/doc/Debian/apt-howto).

3.9. Установка обновленной


версии Debian
Проблема
Требуется перейти на более новую версию Debian (например, с Woody на Sarge).

Решение
Прежде всего отредактируйте файл /etc/apt/sources.list, чтобы в нем содержались
только записи Sarge. Затем выполните следующие команды:
# apt-get update
# apt-get -u upgrade
# apt-get -u dist-upgrade
Флаг -и позволяет сначала просмотреть список изменений. В зависимости от
скорости подключения к Интернету и количества необходимых пакетов процеду-
ра может занять несколько часов.
3.10. Создание смешанной системы Debian 57

Комментарий
В какой-то момент Sarge повышается до статуса стабильной версии, a Woody «ухо-
дит на покой». Когда это произойдет, обновите свою систему так, как описано в на-
стоящем разделе.

См. также
apt-get(8); локальная документация (/usr/share/doc/Debian/apt-howto).

3.10. Создание смешанной


системы Debian
Проблема
Требуется установить базовую систему в стабильной версии, а также некоторые
программы из тестовой версии. Другими словами, вы хотите иметь абсолютно на-
дежную базовую систему, но в некоторых программах вам необходимы дополни-
тельные возможности, присутствующие только в более новых версиях.

Решение
Отредактируйте файл /etc/apt/sources.List так, чтобы в нем содержались ссылки
на источники как для стабильной, так и тестовой версий (за информацией о фай-
ле sources.list обращайтесь к разделу 3.2. Затем отредактируйте /etc/apt/apt.conf
и задайте версию по умолчанию (в нашем примере это стабильная версия). За-
тем при установке или обновлении пакетов нужная версия выбирается при по-
мощи флага -t.
Отредактированный (или созданный) файл /etc/apt/apt.conf должен выглядеть
примерно так:
// Версия системы по умолчанию.
// Допустимые значения: woody, sarge, sid
// (или stable, testing, unstable)
APT::Default-Release "stable":
Далее производится обновление списков пакетов:
# apt-get update
Сейчас по умолчанию используется стабильная версия, поэтому указывать ее
при установке пакетов не обязательно. Следующая команда устанавливает Tuxkart
из стабильной версии:
# apt-get install tuxkart
Для установки пакета из тестовой версии (Sarge) воспользуйтесь ключом -t:
# apt-get -t testing install tuxkart
Чтобы гарантированно получить конкретную версию, укажите номер пакета:
# apt-get install tuxkart=0.2.0-3
58 Глава 3. Установка и сопровождение в системах на базе Debian

Комментарий
Сопровождение смешанной системы требует осторожности, особенно если в качестве
базовой версии используется Woody. По мере «старения» Woody могут возник-
нуть проблемы двоичной совместимости с Sarge/Sid. Различия между ключевыми
системными файлами (такими как libc и дсс) могут стать настолько серьезными,
что пакеты Sarge/Sid не будут устанавливаться в Woody. Если это произойдет,
попробуйте построить пакеты по исходным текстам (см. раздел 3.6).

См. также
apt.conf(5), sources.List(5); страница поиска пакетов Debian (http://www.debian.org/
distrib/packages).

3.11. Поиск программ, установленных


в системе Debian
Проблема
Требуется узнать, какие пакеты установлены в системе, к какому пакету относят-
ся те или иные файлы и что находится в отдельных пакетах.

Решение
Воспользуйтесь средствами обработки запросов dp kg.
Следующая команда выводит список всех установленных пакетов и направля-
ет его в файл:
$ dpkg -1 | tee dpkgiist
Поиск всех пакетов, удовлетворяющих критерию поиска, и вывод информации
об их состоянии:
$ dpkg - I '*gnome*'
Desired=Unknown/Install/Remove/Purge/Но Id
| Status^tot/Installed/Config-files/Unpacked/Failed-config/Half-installed
|/ Err?=(none)/Hold/Reinst-required/X=both-problems (Status.Err: uppercase=bad)
||/ Name Version Description

pn gnome <none> (no description available)


un gnome-about <none> (no description available)
ii gnome-applets 2.4.2-1 Various applets f o r GNOME 2 panel
re gnome-bin 1.4.2-18 Miscellaneous binaries used by GNOME
Поиск установленных пакетов, удовлетворяющих критерию поиска:
$ dpkg -1 | grep gnome
Вывод списка файлов, входящих в пакет:
$ dpkg -L gnome-applets
/usr/share
/usr/share/lintian
3.11. Поиск программ, установленных в системе Debian 59

/usr/share/lintian/overrides
/usr/share/lintian/overrides/gnome-applets
...
Следующая команда определяет, к какому пакету относится файл:
$ dpkg -S boing.wav
tuxkart-data: /usr/share/games/tuxkart/wavs/boing.wav
Вывод полной информации о пакете:
$ dpkg -s kpoker
Package: kpoker
Status: i n s t a l l ok installed
P r i o r i t y : optional
Section: games
Installed-Size: 428
Maintainer: Daniel Schepler <schepler@debian.org>
Source: kdegames
Version: 4:3.1.5-1
....

Комментарий
Таблица, выводимая командой dpkg -I, выглядит довольно загадочно, поэтому
я приведу расшифровку.
$ dpkg -I gnome*
Desi red=Unknown/Instal1/Remove/Purge/Hoi d
| Status=Not/Installed/Config-files/Unpacked/Failed-config/Half-installed
j / Err?=(none)/Hold/Reinst-required/X=both-problems (Status,Err: uppercase=bad)
||/ Name Version Description

pn gnome <none> (no description available)


un gnome-about <none> (no description available)
ii gnome-applets 2.4.2-1 Various applets f o r GNOME 2 panel
re gnome-bin 1.4.2-18 Miscellaneous binaries used by GNOME
В строке pn gnome поднимитесь от буквы р наверх по «стрелке». Она приведет
вас к строке Desired=Unknown/InstaU/Remove/Purge/Hold с расшифровками первого
символа (Purge в данном случае).
От следующего столбца, п, стрелка ведет к строке Status. По ней можно опреде-
лить, что символ п означает Not/Installed.
В третьем столбце отображается код ошибки. В нашем случае он пуст (и хоро-
шо). Как указано в конце строки, любые символы верхнего регистра в столбцах
Status и Err ни к чему хорошему не приведут.
Получаем: пакет gnome когда-то был установлен в системе, но потом он был
удален.
Код un означает, что пакет никогда не устанавливался.
Код ii означает, что пакет установлен.
Код гс означает, что пакет был установлен, а затем удален, но после него оста-
лись конфигурационные файлы. Состав этих файлов определяется легко:
$ dpkg -L gnome-bin
/etc/1ogcheck/ignore.d.server/gnome-bi n
/etc/logcheck/ignore.d.workstation/gnome-bin
60 Глава 3. Установка и сопровождение в системах на базе Debian

См. также
dpkg(8).

3.12. Операции с кэшем пакетов Debian


Проблема
Требуется обеспечить актуальность кэша пакетов и списков пакетов, чтобы про-
грамма apt работала правильно, без возникновения ложных проблем с зави-
симостями.

Решение
Воспользуйтесь программами apt и dpkg.
Не забывайте выполнять команду apt-get update после модификации файла
/etc/apt/sources.list, а также регулярно выполняйте ее, чтобы список пакетов оста-
вался актуальным.
Следующая команда выводит список загруженных, но не установленных пакетов:
$ dpkg ••yet-to-unpack
Проверка нарушенных зависимостей:
$ apt-get check
Удаление каптированных пакетов, которые стали ненужными:
$ apt-cache autoclean
Удаление всех кэшированных пакетов:
$ apt-cache clean
Вывод списка частично установленных пакетов:
$ dpkg --audit
Если вызов dpkg -audit возвращает какие-либо результаты, как в следующем
случае:
$ dpkg •-audit
vpw (no information available)
для начала убедитесь в том, что возвращаемый пакет существует:
$ dpkg - I vpw
Package 'vpw' is not installed and no info is available
Если пакет существует, либо завершите установку, либо удалите ее. Если пакет
не установлен, поищите соответствующую запись в /var/lib/dpkg/available и /var/
Lib/dpkg/status и удалите ее.

Комментарий
Кэш пакетов запросто может занимать десятки, если не сотни мегабайт. Загляните
в /var/cache/apt/archives и проверьте сами. Чтобы сэкономить место на диске, со-
здайте локальный кэш пакетов в своей сети (см. раздел 3.14).
3.13. Разрешение конфликтов зависимостей в Debian 61

См. также
dpkg(8), apt_cache(8), apt-get(8); локальная документация (/usr/share/doc/Debian/
apt-howto); The Debian Reference Manual (http://qref.sourceforge.net/).

3.13. Разрешение конфликтов


зависимостей в Debian
Проблема •

Программа не устанавливается из-за проблем с зависимостями, или команда


apt-get dist-upgrade оставляет пакеты, которые нужно удалить.

Решение
Существует несколько команд, которые могут пригодиться для решения этой зада-
чи; в этом разделе они перечисляются в том порядке, в котором их стоит попробо-
вать.
Допустим, проблемы возникли с пакетом tibpam-modules, который не желает
обновляться:
# apt-get install libpam-modules
The following packages have unmet dependencies:
libpam-modules: Depends: Iibdb3 (>=3.2.9-19.1) but 3.2.9-19 is to be installed
E: Broken packages
Если вы работаете в смешанной системе, для начала попробуйте указать
версию:
# apt-get i n s t a l l -t stable libpam-modules
Если это не помогает или система не является смешанной, попробуйте восполь-
зоваться системой разрешения конфликтов Debian:
# apt-get -f install
Затем выполните команду:
# dpkg --configure -a
И снова повторите команду:
# apt-get -f install
Если будет получен следующий ответ, значит, попытка завершилась неудачей:
Reading Package Lists... Done
Building Dependency Tree... Done
0 upgraded, 0 newly installed. 0 to remove and 1 not upgraded.
Теперь проверьте, что произойдет при удалении существующего пакета libpam-
modules:
# apt-get remove --dry-run libpam-modules
Reading Package Lists... Done
Building Dependency Tree... Done
The following packages will be REMOVED:
62 Глава 3. Установка и сопровождение в системах на базе Debian

adduser adminmenu apache at base-config courier-imap courier-imap-ssl courier-pop


courier-pop-ssl cron cupsys cupsys-driver-gimpprint diet-elements dict-foldoc dict-
gcide diet-jargon dict-vera dict-wn dictd gdm2...
....
WARNING: The following essential packages w i l l be removed
This should NOT be done unless you know exactly what you are doing!
login libpam-modules (due to login)
В данном случае исправление конфликтов зависимостей потребует едва ли не
полной перестройки системы. Чаще проблемы ограничиваются несколькими па-
кетами. В этом случае начинайте удалять наименее важные из них, пока конфлик-
ты зависимостей не будут разрешены, а затем переустановите все пакеты, которые
вам нужны.
Если apt-get -u dist-upgrage отображает какие-либо задержанные (held) пакеты,
от них лучше избавиться. Пакеты удерживаются из-за конфликтов зависимостей,
которые не удается разрешить apt. Попробуйте воспользоваться следующей ко-
мандой для поиска и исправления конфликтов:
# apt-get -о Debug::pkgProblemResolver=yes dist-upgrade
Если исправить конфликты не удается, команда завершается с сообщением
О upgraded. О newly i n s t a l l e d , 0 t o remove and 6 not upgraded.
Удаляйте held-пакеты один за одним, каждый раз запуская dist-upgrade, пока не
останется ни одного задержанного пакета. Затем установите заново все необходи-
мые пакеты. Не забудьте использовать ключ —dry-run, чтобы заранее знать обо всех
последствиях:
# apt-get remove --dry-run libsdl-peri

Комментарий
В «монолитных» системах подобные конфликты версий встречаются редко. Поль-
зователи смешанных систем сталкиваются с ними чаще. Чтобы предотвратить их,
будьте чрезвычайно осмотрительны при выборе устанавливаемых программ — при
первой установке Debian потратьте немного времени и выберите каждый необхо-
димый пакет.

См. также
dpkg(8), apt-get(8); Debian User's List с архивами (http://lists.debian.org/debian-user/).

3.14. Создание локального архива Debian


Проблема
Требуется создать в локальной сети хранилище пакетов для общего пользователя.
Локальный архив особенно полезен в том случае, если пользователи сети совмес-
тно используют низкоскоростное подключение к Интернету. Вместо того чтобы
загружать файлы из Интернет-архивов, рабочие станции Debian загружают их из
локального архива.
3.15. Выбор пакетных зеркал для apt-proxy.conf 63

Решение
Воспользуйтесь программой apt-proxy:
# apt-get proxy
Apt-proxy запускается автоматически после установки.
Теперь отредактируйте секцию add_backend/debian/ файла /etc/apt-proxy/apt-
proxy.conf так, чтобы она содержала ссылки на географически близкие зеркала (спи-
сок зеркал с пакетами находится по адресу http://www.debian.org/mirror/list).
Затем отредактируйте файл /etc/apt/sources.list на клиентских компьютерах так,
чтобы он содержал ссылку на сервер apt-proxy. По умолчанию используется порт 9999:
deb http://ip-or-hostname:9999/main stable main contrib non-free
deb http://ip-or-hostname:9999/non-US stable/non-US main contrib non-free
deb http://ip-or-hostname:9999/security stable/updates main contrib non-free
Запустите apt-get update на клиентских машинах, и локальный архив начнет
работать. Каждый раз, когда клиентский компьютер в локальной сети устанавли-
вает программу, эта программа будет кэшироваться на сервере apt-proxy. Последу-
ющие запросы того же пакета будут обслуживаться из локального кэша.

Комментарий
Большинству параметров в файле/etc/apt-proxy/apt-proxy.conf, кроме источников
пакетов, можно оставить значения по умолчанию. Исключение составляет частота
«обновлений», определяющая периодичность загрузки списка пакетов. По умол-
чанию соответствующая секция выглядит так:
# Максимальная частота обновлений (в минутах)
# Высокие значения снижают нагрузку.
BACKENDJREO240
Я обычно устанавливаю значение этого параметра равным 1440; ежедневной
проверки вполне достаточно. Действительно важные события происходят не так
часто. Проверку следует производить хотя бы раз в день главным образом для сво-
евременной установки обновлений безопасности.

См. также
apt-proxy(8), apt-proxy.conf(5); официальный список зеркал Debian (http://www.
debian.org/mirror/); домашняя страница apt-proxy (http://apt-proxy.sourceforge.net/).

3.15. Выбор пакетных зеркал


для apt-proxy.conf
Проблема
Пакетные зеркала, содержащиеся по умолчанию в файле apt-proxy.conf, разброса-
ны по всему земному шару. Как выбрать те из них, которые вы хотите использо-
вать? В идеальном варианте хотелось бы использовать зеркальные сайты, находя-
щиеся поближе к вашему компьютеру.
64 Глава 3. Установка и сопровождение в системах на базе Debian

Решение
По умолчанию записи /etc/apt-proxy.apt-proxy.conf выглядят так:
add_backend /debian/ \
$APT_PROXY_CACHE/debian/ \
http://ftp.us.debi an.org/debian/ \
http://ftp.de.debian.org/debian/ \
http://ftp.uk.debian.org/debian/ \
+ftp.us.debian.org::debian/
На сайте http://www.debian.org/mirror/list приведен текущий списокзеркал Debian.
Например, вот некоторые германские зеркала в mirror/list:
DE Germany

ftp.de.debian.org /debian/ /debian/


ftp2.de.debian.org /debian/ /debian/
ftp.tu-clausthal.de /pub/1inux/debian/ /pub/linux/debian/
debian.uni-essen.de /debian/ /debian/
Замените стандартные записи apt-proxy.conf своими, предваряя каждую запись
префиксом http://:
add_backend /debian/ \
$APT_PROXY_CACHE/debian/ \
http://ftp.de.debi an.org/debi an/ \
http://ftp2.de.debi an.org/debi an/ \
http://ftp.tu-clausthal.de/pub/linux/debian/ \
Файлы /etc/apt/sources.list на клиентских компьютерах изменять не нужно.

Комментарий
Команды ping и traceroute помогут определить, какие зеркала обладают минималь-
ным временем отклика. Дело в том, что географическая близость еще не гаранти-
рует быстрого отклика.
Указание трех источников обеспечивает необходимую избыточность, apt-proxy
опрашивает их по порядку: если первый источник не отвечает, опрашивается вто-
рой и т. д.

См. также
apt-proxy(8), apt-proxy.conf(5), apt-proxy-import(8); официальный списокзеркал Debian
(http://www.debian.org/mirror/); домашняя страница apt-proxy (http://apt-proxy.source-
forge.net/).

3.16. Включение существующего


кэша пакетов в apt-proxy.conf
Проблема
На сервере apt-proxy уже существует довольно большой кэш пакетов. Вы хотели
бы, чтобы профамма apt-proxy использовала его вместо того, чтобы загружать все
пакеты заново.
3.16. Включение существующего кэша пакетов в apt-proxy.conf 65

Решение
Сначала запустите apt-get update по крайней мере на одном клиентском компьюте-
ре, чтобы инициализировать кэш. Затем на сервере выполните команду
# apt-proxy-import -d /var/cache/apt/archives

См. также
apt-proxy(8), apt-proxy.conf(5), apt-proxy-import(8); официальный списокзеркал Debian
(http://www.debian.org/mirror/); домашняя страница apt-proxy (http://apt-proxy.source-
forge.net/).

'

'- . • -..•• • '• -Ь »• • ,*V '..-•'


Глава 4
Установка й
программ по
исходным текстам
I
iШ L

4.1. Введение
Несмотря на многочисленные системы управления пакетами и разрешения за-
висимостей, в некоторых случаях вариант с построением программы по исход-
ным текстам оказывается предпочтительным. Например, нужная вам програм-
ма может не существовать в виде пакета, или вы хотите изменить состав ее
встроенных функций, или оптимизировать ее для архитектуры своего процес-
сора. Многие опытные администраторы рекомендуют строить программы, кри-
тические с точки зрения безопасности (например, ssh и все серверы), по исход-
ным текстам.
При построении программы по исходным текстам обязательно ознакомьтесь
со всеми инструкциями. Хотя процедура configure-make-install стала относитель-
но стандартной, существует множество исключений, зависящих от прихоти авто-
ра программы. Нередко в процессе построения необходимо указывать различные
параметры конфигурации, и информацию о них можно найти только в докумен-
тации.
Если вы предпочитаете использовать пакеты, в вашем распоряжении все про-
граммы для самостоятельного построения пакетов RPM и .deb. Впрочем, на осво-
ение этих программ потребуются немалые усилия. Существует третий вариант:
Checklnstall — превосходная утилита, упрощающая построение пакетов RPM,
Debian или Slackware по исходным текстам.

4.2. Подготовка системы к компиляции


программ по исходным текстам
Проблема
Известно, что для компиляции программ из исходным текстов потребуется ком-
пилятор... и наверное, еще какие-нибудь утилиты. Но какие именно?
4.3. Построение списка добавленных файлов для упрощения удаления программ 67

Решение
Необходимые программы делятся на две категории:
О основные средства разработки, общие для всех систем Linux;
О конкретные библиотеки или утилиты для компилируемых программ.
Общие средства разработки Linux:
О GNU coreutils — большой набор важнейших системных утилит: shellutils,
fileutils и textutils. Полный список можно найти по адресу http://www.gnu.org/
software/coreutils/ (также можно воспользоваться командой info coreutils);
О GNU binutils — утилиты для работы с двоичными файлами (http://www.gnu.org/
software/binutils);
О gcc — коллекция компиляторов GNU, в том числе для языков С, C++, Objec-
tive-C, Fortran, Java и Ada, а также библиотеки для этих языков;
О GNU tar — утилита для создания архивов исходных текстов (как правило,
имена файлов заканчиваются суффиксом.tar);
О gunzip — утилита сжатия, часто используемая в сочетании с tar. Имена таких
файлов заканчиваются суффиксом tar.gz;
О bunzip2 — формат сжатия для упаковки и распаковки архивов; имена файлов
заканчиваются суффиксом .bz2;
О make — утилита для чтения параметров конфигурации и построения файлов
программ.
В документации к приложению должна содержаться вся информация, необхо-
димая для его успешной сборки.

Комментарии
Большинство дистрибутивов Linux включает установку Core Development Tools или
что-нибудь в этом роде, поэтому вам не придется отлавливать программы и уста-
навливать их по отдельности.
Требования, специфические для конкретной программы, перечисляются в до-
кументации. Поищите в архиве с исходными текстами файлы README, INSTALL
и другую документацию. Прочитайте все от начала и до конца. При запуске кон-
фигурационный сценарий проверяет наличие в системе всех обязательных эле-
ментов. Если какой-либо из этих элементов отсутствует, сценарий завершается
с кодом ошибки и сообщает, что необходимо сделать.

4.3. Построение списка добавленных


файлов для упрощения
удаления программ
Проблема
Требуется узнать, какие файлы устанавливаются в системе при построении про-
граммы по исходным текстам. Это позволит вам найти и удалить все перечисленные
68 Глава 4. Установка программ по исходным текстам

файлы, когда надобность в них отпадет. Некоторые авторы программ предусмот-


рительно включают режим make uninstalL для «чистого» удаления программы, но
многие этого не делают.

Решение
Стандартными средствами Linux сгенерируйте список всех файлов в системе
перед установкой. Затем сгенерируйте аналогичный список после установки и
сравните два списка командой diff. В результате вы получите список установ-
ленных файлов. В следующем примере используется программа JOE ( Joe's Own
Editor):
A
# find / | grep -v -e / p r o c / -e Vtmp/ -e ~/dev/ > j o e > p r e i n s t a l l . l i s t
Откомпилируйте и установите новую программу, затем сгенерируйте список
файлов после установки:
# find / | grep -v -e */proc/ -e */tmp/ -e */dev/ > joe>postinstall.list
Затем создайте список установленных файлов, сравнив два списка командой diff:
$ diff joe-preinstall.list joe-postinstall.list > joe-installed.list

Комментарий
Совместное использование find и grep позволяет исключить каталоги, не входя-
щие в конечный список. Ключ grep -v включает подробный вывод. Параметр -еЛ
означает «исключить следующий каталог».
Мы исключаем каталоги /ргос и /tmp, потому что они содержат временные
данные и постоянно меняются. Файлы в каталоге /dev находятся под управле-
нием системы, поэтому их тоже можно исключить. Исключение каталогов так-
же является важной мерой безопасности — при ручном удалении программ по
списку diff содержимое каталогов /ргос, /tmp и /dev ни в коем случае не должно
изменяться.

См. также
grep(l),find(l),diff(l).

4.4. Установка программ по исходным


текстам
Проблема
Требуется построить программу по исходным текстам, но вам трудно разобраться
в дебрях tar-архивов, Ьг2-архивов, make-файлов и т. д.

Решение
Распакуйте tar-архив. Запустите сценарий configure, затем make и install.
4.4. Установка программ по исходным текстам 69

Начните с каталога, в котором хранятся tar-архивы и каталоги с исходны-


ми текстами. В следующем примере используется программа JOE (Joe's Own
Editor):
# cd /usr/src/downloads
# tar zxvf joe-2.9.8.tar.gz
# cd joe-2.9.8
#ls
# less README
# less INFO
# ./configure --help
# ./configure «options, i f needed>
# make
# make i n s t a l l | tee joe-makeinstall
Последняя команда сохраняет выходные данные установки в текстовом файле
joe-makeinstall.
Некоторые программы архивируются утилитой bunzip2 вместо более традици-
онной утилиты gzip. Распаковка архивов .bz2 осуществляется так:
# tar jxvf joe-2.9.8.tar.bz2
Удаление программ, построенных по исходным текстам, производится командой
# make uninstall
Такой способ работает только в том случае, если автор программы включил
поддержку make uninstall. Если файлы приходится удалять вручную, сохраните
вывод make install в текстовом файле. Другой способ — построение списка уста-
новленных файлов (см. раздел 4.3).

Комментарий
Описанная в этом разделе процедура считается стандартным способом удаления
программ, построенных по исходным текстам. Тем не менее не все авторы про-
грамм следуют общепринятым правилам. Обязательно просмотрите всю докумен-
тацию к программе.
Прежде всего обратите внимание на параметры конфигурации. Некоторые про-
граммы (такие, как Apache) поддерживают десятки параметров компиляции. Для
обеспечения безопасности откомпилируйте поддержку только тех возможностей,
которые будут реально использоваться. Это особенно важно для серверов, доступ
к которым осуществляется из непроверенных сетей (скажем, почтовых и веб-сер-
веров).
Аргументы в пользу компиляции программ по исходным текстам:
О вы можете включить поддержку тех возможностей, которые вам необходимы;
О оптимизация программ для конкретной архитектуры;
О полный контроль над ходом установки.
Впрочем, есть и недостатки:
О возможные проблемы с обновлением и удалением;
О до «кошмара зависимостей» рукой подать;
О на компиляцию большой программы может потребоваться несколько часов.
70 Глава 4. Установка программ по исходным текстам

Некоторые серверы должны строиться по исходным текстам. Например, веб-


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

См. также
info tar, make(l), bzip2(l).

4.5. Создание пакетов по исходным текстам


с применением Checklnstall
Проблема
Требуется построить пакет Slackware, Red Hat или Debian по исходным текстам,
потому что приложение, которое вы хотите установить, не существует в виде нуж-
ного пакета. Вы почитали кое-какую документацию по построению пакетов, и эта
задача выглядит очень сложной. Нет ли более простого пути?

Решение
Воспользуйтесь Checklnstall. Выполните следующие команды (в данном приме-
ре, как и в предыдущем, используется программа JOE в системе Debian):
# mkdir /doc-pak
# tar zxvf joe-2.9.8.tar.gz
# cd joe-2.9.8
# ./configure
jf make
# check-install -D
Checklnstall заменяет make install, поэтому команда должна выполняться из
корневого каталога дерева исходных текстов. Выполните инструкции, отобража-
емые в процессе работы. Программа строит и устанавливает .deb, в чем нетрудно
убедиться:
$ dpkg -1 | grep joe
ii joe 2.9.801 joe's own editor, my fave
Все, программа установлена и готова к работе. Копия пакета остается в ката-
логе исходных текстов.
Следующая команда строит пакет Slackware:
# checkinstall -S
Построение пакета RPM:
# checkinstall -R
4.5. Создание пакетов по исходным текстам с применением Checklnstall 71

Комментарий
В каталоге doc-pak программа Checklnstall размещает файлы README и прочую
документацию программы. Если не создать каталог doc-pak, Checklnstall спросит,
хотите ли вы создать каталог документации по умолчанию. Если ответить отри-
цательно, пакет останется без документации.
Checklnstall использует «родную» систему управления пакетами: RPM в Red
Hat, installpkg в Slackware, .apt в Debian. Чтобы удалить пакет Checklnstall, вос-
пользуйтесь программой управления пакетами своей системы.
Checklnstall поддерживает любые сценарии установки. Пример:
# checkinstall -D make installpackages
# checkinstall -R make modules_insta11
# checkinstall -S i n s t a l l . s h
# checkinstall -D setup
He забудьте изучить файл README устанавливаемой программы, а также про-
чую прилагаемую документацию. Не все пакеты с исходными текстами следуют
традиционной процедуре configure-make-make install. В отдельных случаях исполь-
зуются другие сценарии установки, как в приведенном выше примере.
Checklnstall еще не позволяет создать пакет без его автоматической установ-
ки. Вероятно, эта возможность появится в будущих версиях.

См также
Домашняя страница Checklnstall (http://asic-linux.com.mx/~izto/checkinstall/news.php)
Глава 5
Идентификация
оборудования

5.1. Введение
В Linux имеются хорошие утилиты для получения подробной информации о внут-
ренних устройствах компьютера. Даже если сесть за совершенно незнакомый ком-
пьютер, через считанные минуты вы получите полный список всех его компонентов.
Такие утилиты не только избавляют вас от необходимости снимать кожух и ко-
паться во «внутренностях» компьютера, но и помогают найти драйверы или уз-
нать, поддерживается ли вообще данное устройство в Linux. Мы живем в дурац-
ком Windows-центрическом мире: чтобы проверить, существуют ли для модема,
сетевой или видеокарты драйверы Linux, обычно необходимо знать чипсет, исполь-
зованный в устройстве. Количество чипсетов не так уж велико, но они делятся на
множество торговых марок и моделей. Некоторые фирмы-производители меняют
чипсеты, не изменяя номер модели, так что на номер модели рассчитывать не сто-
ит. Зная чипсет, можно найти драйверы.

Списки совместимости
Большая часть оборудования PC неплохо поддерживается в Linux, поскольку доб-
лестные программисты продолжают выдавать новые драйверы (порой с минималь-
ной поддержкой со стороны фирм-производителей). Впрочем, к выбору оборудова-
ния следует подходить осторожно. Даже если устройство имеет драйверы для Linux,
иногда для него не существует удобных вспомогательных программ или не под-
держивается полный набор возможностей, доступных для пользователей Windows.
Первым и наиболее надежным источником информации станет веб-сайт ваше-
го дистрибутива Linux. На большинстве таких сайтов публикуются списки HCL
(Hardware Compatibility Lists). Если для какой-то конкретной разновидности Linux
такого списка не существует, возьмите список из другого дистрибутива. Устройство,
которое работает в одном дистрибутиве, должно работать во всех. Различаться будут
только уровни прямой поддержки. Например, Mandrake и Linspire обеспечивают
расширенную поддержку звуковых карт и видеоадаптеров. Другие дистрибутивы
могут работать с теми же устройствами, но, возможно, вам придется найти и уста-
новить драйверы самостоятельно. Иногда для этого даже приходится компилиро-
5.2 Идентификация оборудования при помощи Ispci 73

вать модули ядра (что не вызывает ни малейших сложностей у настоящих асов


Linux — так, мелкое неудобство). Таким образом, начните с источников информа-
ции по вашему дистрибутиву.
Еще один способ быстро найти информацию по конкретному устройству —
провести поиск в Google Groups вида
debian linux riva tnt2
Как правило, вы сразу же получаете целый набор полезных ссылок.
И наконец, стоит посетить веб-сайт производителя устройства. Иногда такие сай-
ты преподносят приятный сюрприз — на них удается найти информацию no Linux.

Чем плохи двоичные драйверы


Некоторые производители оборудования ограничивают поддержку Linux двоич-
ными драйверами. По возможности избегайте их. Двоичные драйверы откомпи-
лированы для конкретной архитектуры и версии ядра. Программу так легко пере-
компилировать, чтобы она правильно работала в вашей системе, что лишать такой
возможности пользователей попросту глупо. Пакетные системы (такие, как Red
Hat, SuSE и Debian) ограждают нас, конечных пользователей, от этих проблем,
поскольку производители пакетов делают всю работу за нас; однако и им необхо-
димы исходные тексты. Линус Торвальдс говорит:
«...Я разрешаю модули, содержащие только двоичные файлы, но хочу, чтобы
люди знали: предполагается, что такие модули работают только в одной версии
ядра, для которой они были откомпилированы. Если они работают в других верси-
ях, это не более чем приятная неожиданность».

5.2. Идентификация оборудования


при помощи Ispci
Проблема
Вы оборудуете новую рабочую станцию или устанавливаете Linux на компьютер,
работавший под управлением другой ОС. Вам хотелось бы знать, все ли компо-
ненты — видеокарта, модем, Ethernet, звуковая карта — будут работать под Linux.
Производители не могут (или не хотят) сказать, работают ли их продукты под Linux.
Чтобы узнать, существуют ли для этих устройств драйверы Linux, нужно знать их
чипсеты.
Возможна и другая ситуация: вы хотите знать, какие компоненты установлены
внутри компьютера. Но при этом вам не хочется браться за отвертку, снимать ко-
жух и копаться внутри.

Решение
Воспользуйтесьь программой
прогр Ispci:

# /sbin/lspci -vv
74 Глава 5. Идентификация оборудования

Следующая команда выводит сводку всех устройств, подключенных к шине PCI:


$ /sbin/lspci
00:00.0 Host bridge: VIA Technologies. Inc. VT8363/8365 KT133/KM133] (rev 02)
00:01.0 PCI bridge: VIA Technologies. Inc. VT8363/8365 KT133/KM133 AGP]
00:06.0 Ethernet controller: Linksys Network Everywhere Fast Ethernet 10/100 model
NC100 (rev 11)

Флаги -v или -vv используются для вывода более подробной информации:


$ /sbin/lspci -v
0000:01.00.0 VGA compatible controller: 3Dfx Interactive. Inc. Voodoo 3 (rev 01) (prog-
i f 00 [VGA])
Subsystem: 3dfx Interactive. Inc.: Unknown device 1252
Flags: 66MHz. fast devsel, IRQ 10
Memory at d4000000 (32-bit, non-prefetchable) [size=32M]

Если вы ищете драйверы, возьмите выходные данные Lspci (например, VT8363/


8365 или 3Dfx Interactive, Inc. Voodoo 3 (rev 01)) и проведите по ним поиск в Google.

Комментарий
Программа lspci получает часть данных от шины PCI, а затем добавляет к ним до-
полнительную информацию из внутренней базы данных /usr/share/misc/pci.ids.
Даже существует специальная команда для обновления этого файла:
# update-pelids
Если к системе подключено устройство, не распознаваемое lspci (скажем, очень
старое и экзотическое устройство ISA), вам придется открыть корпус и посмот-
реть, что это такое. Также можно попробовать запустить dmesg (см. раздел 5.3).

См. также
lspci(8).

5.3. Сбор информации об оборудовании


программой dmesg
Проблема
При всех своих достоинствах шина PCI — день вчерашний. Чаще требуется полу-
чить список всех устройств в системе, не только устройств PCI: это и устройства USB,
и устройства SCSI, конфигурация памяти и даже процессор.

Решение
Воспользуйтесь программой dmesg. Программа выводит список всего оборудова-
ния, обнаруженного ядром.
Чтобы просмотреть весь вывод dmesg, введите команду
$ dmesg | less
5.3. Сбор информации об оборудовании программой dmesg 75

Выходные данные dmesg также можно отфильтровать для поиска конкретных


устройств. Так, следующая команда выводит список всех устройств PCI:
$ dmesg I grep -i usb
Вывод списка устройств ISA:
$ dmesg ] grep - i isa
isapnp: Scanning f o r PnP c a r d s . . .
isapnp: SB audio device q u i r k - i n c r e a s i n g port range
isapnp: Card 'SupraExpress 56i Voice'
Определение объема физической памяти в системе:
$ dmesg | grep -i memory
Memory: 256492/262080k a v a i l a b l e (1467k kernel code. 5204 reserved. 516k data. 96k
i n i t . OK highmem)
Вывод списка устройств IDE, использующих подсистему эмуляции SCSI в яд-
ре 2.4 и более старых версий:
$ dmesg | grep -i scsi
Kernel command l i n e : root=/dev/hda6 ro hdb=scsi hdc=scsi
ide_setup: hdb=scsi
ide_setup: hdc=scsi
SCSI subsystem driver Revision: 1.00
hdb: attached ide-scsi driver
hdc: attached ide-scsi driver
scsio : SCSI host adapter emulation for IDE ATAPI devices

А вот как выглядят «настоящие», не эмулированные устройства SCST:


$ dmesg | grep -i scsi
SCSI subsystem driver Revision: 1.00
scsiO: Adaptec AIC7XXX EISA/VLB/PCI SCSI HBA DRIVER, Rev. 6.2.8
<Adaptec aic7892 Ultral60 SCSI adapter»
aic7892: Ultral60 Wide Channel A, SCSI Id=7. 32/253 SCBs
...Vendor: IBM-PSG Model:DPSS-336950M M Rev: S9HA
Attached scsi disk sda at scsiO, channel 0. id 0. lun 0
(scsi0:A:0): 160.000MB/S transfers (80.000MHz DT. offset 63. 16bit)
SCSI device sda: 71096640 512-byte hdwr sectors (36401 MB)
Partition check:
sda: sdal sda2sda3 sda4 < sda5 sda6 >
Далее показана информация о камере USB, подключенной к системе, включая
ее местонахождение в файловой системе. Обычно информация об устройстве USB
занимает десяток строк и более:
% dmesg | grep -i usb
...
usb.с: r e g i s t e r e d new d r i v e r ibmcam
icmcam.c: IBM PC Camera USB camera found (model 2. r e v . 0x030a)
usbvideo.c: ibmcam on /dev/videoO: canvas=352x240 videosize=352x240
Вывод информации о последовательных портах:
$ dmesg | grep -i tty
ttySOO at 0x03f8 (irq = 4) is a 16550A
Вывод информации о процессоре (или процессорах):
$ dmesg | grep -i cpu
Initializing CPU#0
CPU: LI I Cache: 64K (64 bytes/line). D cache 64K (64 bytes/line)
76 Глава 5. Идентификация оборудования

CPU: L2 Cache: 64K (64 bytes/line)


Intel machine check reporting enabled on CPU#0.
CPU: After generic, caps: 0183f9ff clc7f9ff 00000000 00000000
CPU: Common caps: 0183f9ff clc7f9ff 00000000 00000000
CPU: AMD Duron(tm) Processor stepping 01
Обратите внимание: при поиске возвращаются только те строки, в которых при-
сутствует искомая подстрока. Часто дополнительная информация содержится
в соседних строках и находится прямым просмотром файла:
Initializing CPU#0
Detected 801.446 MHz processor.

Комментарий
Программа dmesg всегда выводит обновленную информацию даже при частой смене
оборудования (например, при подключении и отключении устройств USB).

См. также
dmesg(8).

5.4. Получение текущей сводки


оборудования с использованием /ргос
Проблема
Требуется отслеживать состояние работающей системы в реальном времени, по-
лучать информацию о физической памяти и процессоре, идентифицировать дис-
ки и т. д.

Решение
Прочитайте данные из виртуальной файловой системы /ргос. Для чтения данных
из /ргос следует применять только cat и утилиты, предназначенные специально
для этой цели (например, sysctl, Lspci, ps и top). Синтаксис cat остается неизмен-
ным:
$ cat /proc/файл
Выполняя с/ргос те же операции, что и с обычными файловыми системами, вы
сможете легко найти нужную информацию. Информация об оборудовании хра-
нится в каталогах с соответствующими именами:
$ Is /ргос
bus cmdline cpuinfo devices dma driver filesystems ide kcore kmsg ksyms
loadavg meminfo misc modules mounts mtrr partitions pci scsi swaps sys t t y
Вывод информации о процессоре:
$ cat /proc/cpuinfo
processor : 0
vendor id : AuthenticAMD
5.4. Получение текущей сводки оборудования с использованием /ргос 77

cpu family 6
model 3
model name AMD Duron(tm) Processor
stepping 1
cpu MHz 801 .442

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


$ cat /proc/meminfo
total: used: free: shared: buffers: cached:
Mem: 262746112 237740032 25006080 0 11575296 150138880
Swap: 534601728 81661952 452939776
MemTotal: 256588 kB
MemFree: 24420 kB

Вывод информации о жестком диске IDE:


$ cat /proc/ide/via
VIA BusMastering IDE Configuration
Driver Version: 3.37
South Bridge: VIA vt82c686a
Revision: ISA 0x22 IDE 0x10
Highest DMA rate: UDMA66

Вывод информации о геометрии диска (как физической, так и логической):


$ cat /proc/ide/ideO/hda/geometry
physical 39870/16/63
logical 2501/255/63
Идентификация диска:
$ cat /proc/ide/ideO/hda/model
IBM-DTLA-305220
Вывод информации об устройствах SCSI (обратите внимание: команда не раз-
личает устройства, подключенные к шине SCSI, и устройства IDE, использующие
подсистему эмуляции SCSI; в данном случае речь идет о дисководах CD-ROM
с интерфейсом IDE):
$ cat /proc/scsi/scsi
Attached devices:
Host: scsiO Channel: 00 Id: 00 Lun: 00
Vendor: TOSHIBA Model: DVD-ROM SD-M1202 Rev:1020
Type: CD-ROM ANSI SCSI revision: 02
Host: scsiO Channel: 00 Id: 01 Lun: 00
Vendor: LITE-ON Model: LTR-24102B Rev:5S54
Type: CD-ROM ANSI SCSI revision: 02

Комментарий
Как упоминалось выше, для чтения данных из /ргос следует использовать только
cat и утилиты, предназначенные специально для этой цели. Программы постра-
ничного вывода типа less или more выводят другие данные, потому что они читают
/ргос заново с каждой страницей. Также не рекомендуется использовать тексто-
вый редактор или любую программу с возможностью записи, чтобы не создавать
риска повреждения системы.
78 Глава 5. Идентификация оборудования

См. также
ргос(5).

5.5. Просмотр разделов в программе fdisk


Проблема
Требуется просмотреть все разделы на жестком диске или дисках. Возможно, вы
хотите знать, как распределено свободное место на диске, хотите «вернуть» старые
разделы Windows, задействовать неиспользуемый раздел под виртуальную память
или узнать номер /dev для раздела. Программа fdisk также выводит информацию
о файловой системе раздела и объеме свободного пространства.

Решение
Воспользуйтесь программой fdisk. Вывод информации обо всех разделах на всех
жестких дисках:
# /sbin/fdisk -1
Disk /dev/hda: 20.5 GB. 2057674520 bytes
255 heads, 63 sectors/track. 2501 cylinders
Units - cylinders of 16065 * 512 - 8225280 bytes
Device Boot Start End Blocks Id System
/dev/hdal * 1 893 7172991 7 HPFS/NTFS
/dev/hda2 894 1033 1124550 с W95 FAT32 (LBA)
/dev/hda4 1034 2501 11791710 f W95 Exf d (LBA)
/dev/hda5 2437 2501 522081 82 Linux swap
/dev/hda6 1034 1670 5116639+ 83 Linux
/dev/hda7 1671 2436 6152863+ 83 Linux

Вывод таблицы разделов для отдельного диска:


# /sbin/fdisk -I /dev/hda
Disk /dev/hda: 20.5 GB. 20576747520 bytesDisk /dev/hda: 20.5 GB, 20576747520 bytes 255
heads. 63 sectors/track, 2501 cylinders
Units - cylinders of 16065 * 512 = 8225280 bytes

Комментарий
По выходным данным fdisk также можно узнать, какой тип файловой системы на-
ходится на любом разделе. В рассмотренном примере используются два разных
типа файловых систем Windows (HPFS/NTFS, FAT32) и расширенный раздел
Windows, в котором были построены файловые системы Linux и раздел виртуаль-
ной памяти.

1_м. также
fdisk(8).
mm Глава 6
Редактирование
текстовых файлов
Jв? в ЗОЕ и Vim

6.1. Введение
Освоение текстового редактора — важный навык для каждого, кто хочет быть гра-
мотным, достойным пользователем Linux. Проблема выбора редактора сама по
себе интересна, так как в мире Linux существует много текстовых ASCII-редакто-
ров. Это объясняется двумя причинами. Во-первых, создание текстового редак-
тора является хорошим (и достаточно типовым) проектом для программиста-но-
вичка; во-вторых, текстовый редактор — сугубо личный инструмент. Гуру Linux
часто пишут или изменяют текстовые редакторы, руководствуясь своими капри-
зами... то есть специфическими требованиями.
Пользователи Linux частенько ввязываются в перепалки по поводу текстовых
редакторов (особенно «Emacs против Vim»). Занятие веселое, но бессмысленное.
Найдите тот редактор, который лучше всего подходит для ваших потребностей
и темперамента. Красота Linux (и концепции свободно распространяемого про-
граммного обеспечения вообще) заключается в богатстве выбора пользователя.
В этой главе мы рассмотрим JOE (Joe's Own Editor) и Vim, который является
потомком vi. Почему не Emacs? Emacs — замечательная программа; большая, слож-
ная, с бесконечными возможностями настройки и расширения. Это не простой
текстовый редактор, а скорее интегрированная среда. В Emacs пользователи мо-
гут читать почту и конференции Usenet, писать программы, играть в игры, созда-
вать собственные макросы и комбинации клавиш, имитировать оконные среды
при отсутствии X Window и даже консультироваться с психиатром (М-х doctor).
Emacs может сделать что угодно... если вы знаете, как этого добиться. Но для тех,
кому нужно просто отредактировать текстовый файл, этого многовато. Emacs «ве-
сит» более 22 Мбайт, тогда как JOE и Vim помещаются на одной дискете, да еще
остается свободное место.
JOE и Vim хорошо подходят для повседневной работы по редактированию кон-
фигурационных файлов. Конечно, они также могут использоваться для написа-
ния любых текстов — статей, веб-страниц, программ и т. д. Чем лучше вы печата-
ете, тем производительнее будет ваша работа. В идеальном случае руки не должны
отрываться от клавиатуры, а глаза — от экрана.
80 Глава 6. Редактирование текстовых файлов в JOE и Vim

JOE является «однорежимным» редактором; иначе говоря, ввод команд и редак-


тирование текста осуществляются на одном экране. Vim работает в двух режимах:
нормальном/командном режиме и режиме вставки/редактирования. В нормальном
режиме все вводимые данные интерпретируются как команды. В режиме вставки
все интерпретируется как обычный текст. Это приводит в недоумение некоторых
новичков, которые впервые берутся за Vim — ведь в программе нет анимирован-
ного «помощника», который бы объяснил, что они должны переключаться между
двумя режимами, и показал, как это делается. Vim — серьезный, мощный инстру-
мент, но, как вы узнаете из этой главы, освоить его не так уж трудно.
СОВЕТ
Существует прекрасная бесплатная программа обучения навыкам печати для Linux, которая на-
зывается Gtypist (http://www.gnu.org/software/gtypist/gtypist.html). Она обучает как раскладке
Qwerty, так и раскладке Дворака и содержит учебные курсы на английском, чешском, русском,
испанском, немецком, французском и норвежском языках. Как и большинство программ на базе
ncurses, она лучше смотрится на текстовой консоли, чем в X.

vi/Vim, универсальный редактор


Vi (официально произносится «ви-ай», хотя я люблю говорить «ви» в рифму
с «фи», чтобы позлить фанатов) — общедоступный текстовый редактор. В какой
бы разновидности системы Linux вы ни работали, в вашем распоряжении всегда
будет vi или один из его потомков.
У vi существует множество клонов: Vim, elvis, vile, calvin, Vigor, viper, virus
и т. д. Проекты такого рода появляются и исчезают, но Vim, elvis и vile широко
используются и активно развиваются.
Vim — самый популярный из всех потомков vi. При запуске vi во многих дист-
рибутивах Linux (таких, как Red Hat, Debian и Mandrake) запускается Vim. Про-
грамма поддерживает окна и цветовое выделение синтаксиса, содержит обширную
электронную справку и документацию. Впрочем, даже если в вашем распоряже-
нии окажется только древняя версия vi, навыки работы в Vim вам пригодятся.

Редактор JOE: «пять в одном»


Редактор JOE обладает целым рядом приятных особенностей. В частности, он
работает в нескольких режимах и имеет собственную справочную систему. Вы
можете запустить JOE и сходу взяться за работу, не заботясь о чтении документа-
ции. Конечно, это не лучший способ, но в крайнем случае он сработает.
JOE поддерживает три режима эмуляции:
О jstar (WordStar);
О jpico (Pico);
О jmacs (hmacs)
и два собственных режима, JOE и RJOE. В ограниченном режиме RJOE («Re-
stricted JOE») могут открываться только файлы, указанные в командной строке.
После запуска редактора в режиме RJOE вы не сможете открыть новые файлы
в редакторе или открыть новый сеанс командной оболочки. Таким образом, ре-
жим RJOE хорошо подходит для sudo-пользователей, поскольку он предотвраща-
6.2. Поиск команд JOE 81

ет выход в режим командной строки с привилегиями root. Все пять режимов ра-
ботают из одного 200-килобайтного исполняемого файла.

См. также
joe(l), vi(l); Gtypist (http://www.gnu.org/software/gtypist/gtypist.html).

6.2. Поиск команд JOE


Проблема
Как заставить JOE сделать что-нибудь полезное? Для этого необходим полный
список команд JOE для всех его режимов. Притом справка нужна в электронном
виде, чтобы ее можно было использовать во время работы.

Решение
Включите режим электронной справки, поддерживаемый во всех режимах JOE.
Для запуска JOE в режиме справки воспользуйтесь командой
$ joe -help

Комментарий
В Joe используется много трехклавишных команд. Каретка ( л ) обозначает клавишу
Ctrl. Нажмите первые две клавиши вместе (например, Ctrl+K), затем отпустите их
и нажмите третью клавишу. Далее перечислены базовые команды вызова справки:
о JOEHRJOE:
Л
• К Н . — включение/отключение режима вывода справки;
• Esc. — перебор справочных экранов, Esc, — перебор в обратном направлении,
о Jpico:
• AG . — включение/отключение режима вывода справки;
• Esc . — перебор справочных экранов, Esc , — перебор в обратном направле-
нии.
О Jmacs:
Л
• Х Н . — включение/отключение режима вывода справки;
• Х. — перебор справочных экранов, ЛХ., — перебор в обратном направлении.
Л

О Jstar:
• A J H . — включение/отключение режима вывода справки;
• Esc. — перебор справочных экранов, Esc, — перебор в обратном направлении.

См. также
joe(l).
82 Глава 6. Редактирование текстовых файлов в JOE и Vim

6.3. Настройка JOE


Проблема
JOE поддерживает много режимов и параметров командной строки. Требуется
настроить его конфигурацию по умолчанию, чтобы редактор запускался в нуж-
ном вам состоянии.

Решение
Создайте персональный файл .joerc с описанием нужной конфигурации и сохра-
ните его в своем домашнем каталоге.
Для начала загляните в /etc/joe, где хранятся файлы инициализации JOE по
умолчанию:
$ Is /etc/joe
jmacsrc joerc jpicorc jstarrc rjoerc terminfo
Воспользуемся файлом joerc для «обычного» JOE, который не пытается при-
кидываться кем-то другим. Скопируйте файл в свой домашний каталог и сделай-
те его скрытым, сохранив прежнее имя:
$ joe -linums -help /etc/joe/joerc
*K D
Name of f i l e to save ГС to abort): -/.joerc
Could not make backup f i l e . Save anyway (y,n.*C)? Y
File -/.joerc saved
Л
« » означает клавишу Ctrl. Регистр символов команд не имеет значения; К D —
то же самое, что k d.
Хотя .joerc позволяет управлять всеми аспектами работы JOE вплоть до мело-
чей, самые полезные параметры собраны в первых двух секциях. Например:
-marking Текст между *К В и курсором выделяется
(используется с -lightoff)
-force Вставка завершающего перевода строки
при сохранении файла
-lightoff Снятие выделения после копирования или
перемещения блока
-exask *K X всегда запрашивает подтверждение имени файла

Неактивные параметры начинаются с пробела или символа табуляции. Чтобы


активировать параметр, удалите начальный пробел и убедитесь в том, что строка
сдвинута до предела влево.

Комментарии
Одна из приятных особенностей JOE заключается в том, что программа работает
с копией исходного файла. Оригинал сохраняется в виде резервной копии (впро-
чем, эта возможность тоже настраивается и ее можно отключить в .joerc).

См. также
joe(l); раздел 6.4.
6.5. Копирование текста между файлами в JOE 83

6.4. Сохранение личной конфигурации JOE


в отдельном файле
1роблбмэ
rc-файлы JOE весьма велики, и уследить за всеми изменениями нелегко. Как от-
делить ваши изменения от параметров, сохранивших прежние значения?

Решение
Сохраните изменения в отдельном файле, который в нашем примере будет назы-
ваться .joercprefs. Загрузите этот файл, включив следующую строку в начало .joerc,
в любую позицию до начала «первой секции». Обязательно включите начальное
двоеточие и выровняйте директиву по левому краю:
:include .joercprefs

Комментарий
Сохранение всех изменений в отдельном файле окажет вам неоценимую помощь.
Учтите, что .joercprefs не замещает .joerc — параметры, явно включенные или от-
ключенные в .joerc, сохраняют свое состояние, что бы ни говорилось в .joercprefs.
Однако параметры .joerc, начинающиеся с пробела, игнорируются и потому мо-
гут включаться и отключаться в .joercprefs.

См. также
joe(l).

6.5. Копирование текста между файлами в JOE


Проблема
Хорошо, уговорили — собственный файл -/.joercprefs нужен. Но как создать файл
без дубликатов или параметров, конфликтующих с исходным файлом -/.joerc?

Решение
Откройте в JOE два окна: для -/.joerc и для нового файла-/.joercprefs. Скопируй-
те нужные параметры из -/.joerc в -/.joercprefs.
Сначала создайте резервную копию оригинала -/.joerc:
$ ср -/.joerc -/.joerc.bak
Откройте -/.joerc, затем откройте второе окно и присвойте имя новому файлу:
$ joe -linums -help -/.joerc
"К О
"К Е
Name of f i l e to edit (*C to abort): -/.joercprefs
84 Глава 6. Редактирование текстовых файлов в JOE и Vim

Л
Переключение между окнами осуществляется командами 1 Р и К N. Иногда
Л
с поиском нужного окна возникают проблемы; команда К I переключает режи-
мы показа всех окон/скрытия неактивных окон.
А Л
Пометка копируемых блоков текста производится командами К В и К К. Ус-
Л
тановите курсор в точке вставки и скопируйте текст клавишами К С.

Комментарий
Файл -/.joerc очень велик; возможно, вам будет удобнее отобразить только неак-
тивные параметры. Чтобы отобрать их, воспользуйтесь командой фильтрации JOE:
-к/
$ grep '"[space]]'
Теперь вы сразу увидите неактивные команды и сможете скопировать те из
них, которые хотите активировать, в файл -/.joercprefs.
Вы также можете отобразить только активные параметры:
$ grep •*[*[:space:]] 1
Команда АК X сохраняет -/.joercprefs и завершает работу.
Теперь изменения хранятся отдельно от основного файла, что упрощает их
дальнейшее отслеживание и редактирование.

См. также
joe(l).

6.6. Поиск и замена в JOE


Проблема
Вы редактируете документ и находите особенно раздражающую ошибку, которая
повторяется снова и снова. Какие возможности предлагает J O E для поиска и за-
мены слов, текстовых строк и знаков препинания в документе?

Решение
Команда АК F обеспечит любые потребности в области поиска и замены. Для про-
ведения нетривиального поиска применяются специальные служебные последо-
вательности, называемые регулярными выражениями.
Итак, введите команду ЛК F. Клавиши Т и i позволяют выбрать из списка пре-
дыдущий критерий поиска и замены. Комбинация AL продолжает поиск без при-
менения замены.
Допустим, вы хотите найти в документе все вхождения слова «nucular» и за-
менить их правильным написанием «nuclear». Вот как это делается:
"К F
Find ("С to abort): \<nucular\>
(I)gnore (R)eplace (B)ackwards Bloc(K) Ш Г С to abort): r
Replace with (*C to abort): nuclear
Replace (Y)es (N)o (R)est (B)ackup (X to abort)? r
6.7. Вертикальное выделение текста в JOE 85

Обратите внимание на последовательности \< и \ > . Они указывают JOE, что


поиск должен ограничиваться целыми словами. Без них JOE найдет все вхожде-
ния строки, даже находящиеся внутри других слов.
Возможно, вместо замены написания вы предпочтете заключить неверное слово
в кавычки:
Replace with ГС to abort): "\&"
Или еще более экзотический вариант:
Replace with ГС to abort): "It's nuclear, not "\&" dammit!!"
Поиск совпадения только в начале строки:
rnucular
Поиск совпадения только в конце строки:
nucularU
Чтобы найти пропуски, нажмите «пробел» и символ табуляции в квадратных
скобках:

Поиск любого из символов, указанного в квадратных скобках (для поиска без


учета регистра символов):
\[Nn]ucular

См. также
joe(l); раздел «The special search sequences» в электронной справке JOE.

6.7. Вертикальное выделение текста в JOE


Проблема
Вы долго строили таблицу, а теперь вам потребовалось поменять столбцы места-
ми. Другими словами, требуется выделить вертикальный фрагмент текста — на-
пример, первое слово в нескольких строках, фрагменты текста в середине несколь-
ких строк или столбец данных.

Решение
Воспользуйтесь режимом прямоугольного выделения.
Режим включается командой АТ X. Выделите блок текста командами *К В и ЛК К,
а затем выполните с ним нужную операцию.

Комментарий
Некоторые полезные команды, выполняемые с блоками текста:
О ЛК В, ЛК К — пометка/снятие пометки с начала и конца блока;
О АК М - перемещение блока в текущую позицию курсора;
О ЛК С — копирование блока в текущую позицию курсора;
86 Глава 6. Редактирование текстовых файлов в JOE и Vim

А
О К Y - удаление блока текста;
Л
О К — перемещение блока вправо;
О *К — перемещение блока влево;
Л
О КА — выравнивание текста по центру;
Л
О К / — открытие окна командной строки для выполнения команды обработки
текста.

См. также
joe(l); справочная система JOE.

6.8. Поиск и открытие файлов в JOE


Проблема
У вас много работы. Вам приходится редактировать множество файлов, выпол-
нять огромное количество операций. Постоянно запускать и завершать JOE не-
удобно. Вы предпочитаете найти нужный файл и открыть его, не выходя из JOE.

Решение
Для поиска файлов в J O E используйте команды *KR и АКЕ. Эти команды либо от-
крывают существующий файл, либо создают новый файл:
А
КЕ
Name of the f i l e to edit ГС to abort):
Имена существующих файлов расширяются клавишей Tab. В данном примере
введите да, а затем два раза нажмите Tab. JOE автоматически вставляет звездочку
при нажатии Tab, так что вводить этот символ не нужно.
Л
К Е
Name of the f i l e to edit (AC to abort): .ga*
.gaby/ .gaim/ .gaimrc .galeon/
Клавиша Enter осуществляет переход «вниз» по дереву файлов, a Backspace —
«вверх», по направлению к корневому каталогу. Клавиша Tab выбирает файл.
Следующая команда вставляет существующий файл в позиции курсора:
Ч R
Name of the f i l e to edit (AC to abort):
Запомните команды управления окнами:
О АК0 — открытие нового окна;
О ЛК1 — отображение всех окон/скрытие неактивных окон;
О ЛКР и *KN — перемещение между окнами.

Комментарий
Хотя J O E не обладает собственной поддержкой мыши, вы можете копировать
и вставлять данные из других приложений мышью в сеансах X. Это функция тер-
6.9. Быстрое изучение Vim 87

минала, а не JOE. Используйте классический метод Unix: выделите текст мышью,


а затем щелкните средней кнопкой мыши. Комбинации клавиш AV и ЛС имеют дру-
гой смысл в JOE.

См. также
joe(l).

6.9. Быстрое изучение Vim


• DO бл е м а
Вы проделали изрядную домашнюю работу, возможно — прочитали раздел «Вве-
дение» к этой главе и решили использовать Vim. Итак, требуется как можно быс-
трее освоить Vim и притом с самого начала встать на правильный путь.

Решение
Запустите программу обучения Vim; для этого достаточно ввести vimtutor в ко-
мандной строке. Через 30-60 минут вы будете управляться с программой, как бы-
валый профессионал. Это самый лучший и быстрый способ.

Комментарии
Возможно, из учебного курса вы узнаете все команды, которые вам когда-либо
понадобятся. За дополнительной информацией о миллионах возможностей Vim
обратитесь к превосходному руководству пользователя Брэма Муленаара
(Bram Moolenaar), автора Vim. Руководство включено во внутреннюю спра-
вочную систему Vim, а также существует в нескольких электронных версиях
по адресу http://vimdoc.sourceforge.net (HTML для поиска, PDF и HTML для
печати).
Чтобы вызвать руководство пользователя в Vim, введите команду
:help
Клавиши управления курсором используются для перебора оглавления, а ком-
А
бинация ] открывает главу.
Вы также можете сразу перейти к конкретной теме:
:he!p quickref
:help tutor
:he!p usr 06.txt
Поиск по критерию с выводом списка вариантов:
:help vimrc
Вместо Enter нажмите AD. Результат будет выглядеть примерно так:
:help vimrc
vimrc vimrc-intro system-vimrc _gvimrc
vimrc vimrc-filetype gvimrc :mkvimrc
_vimrc vimrc-example.vim .gvimrc
88 Глава 6. Редактирование текстовых файлов в ЗОЕ и Vim

Выберите нужный вариант


:help vimrc-exampie.vim
Если вы недавно работаете в Vim, для начала потренируйтесь с учебным курсом
Vim. Следующие разделы посвящены настройке рабочей среды и управлению Vim.

См. также
vimtutor(l); страница документации vim.org (http://www.vim.org/docs.php); страница
vimdoc на сайте SourceForge (http://vimdoc.sourceforge.net/).

6.10. Создание автотекста в Vim


Проблема
Вам приходится часто вводить повторяющиеся фрагменты текста: уведомления
об авторских правах, комментарии к программному коду, подписи и т. д. Вам хо-
телось бы как-то оптимизировать процесс ввода.

Решение
Воспользуйтесь сокращениями Vim. Сокращения создаются в нормальном ре-
жиме:
:ab th This is an example of a Vim abbreviation.
Чтобы воспользоваться сокращением, переключитесь в режим вставки и вве-
дите символы th, за которыми следует пропуск (пробел, символ табуляции или
возврат курсора).
Просмотр списка всех сокращений:
tab
Удаление сокращения:
:unabbreviate th
Удаление всех сокращений:
:abclear
Сокращения, как и все параметры конфигурации Vim, можно сохранять в файле
-/.vimrc.

Комментарий
Сокращения могут использоваться для автоматического исправления орфографии
(раздел 6.6) — просто определите свои стандартные ошибки в виде сокращений.
Этот прием лучше всего подходит для исправления опечаток (например, teh вме-
сто the).

См. также
Справочная система vim (:help map.txt); раздел 6.12.
6.11. Привязка команд к клавишам 89

6.11. Привязка команд к клавишам


Пооблема
Некоторые команды Vim слишком длинны и сложны. Вы создали собственную
коллекцию пользовательских команд и теперь хотели бы назначить комбинации
клавиш для их вызова.

Решение
Команда тар связывает нажатия клавиш с произвольной командой или тексто-
вой строкой в нормальном режиме; команда тар! определяет нажатия клавиш для
режима вставки. Чтобы просмотреть текущие назначения, введите команду :тар
или :тар! без параметров.
ВНИМАНИЕ
Будьте осторожны при создании собственных привязок — не используйте клавиши, с которыми
в Vim уже связаны операции, поскольку команда т а р выполнит ваше требование и заменит их,
не сказав ни слова. Кстати говоря, по этой причине стоит сначала как следует освоить Vim,
а уже потом приступать к экспериментам с привязкой.

Новая привязка создается командой вида


:map <F3> :runtine! syntax/2htm1.vim
Команда включает теги HTML в текущий документ в новом окне. Для ее акти-
вации будет использоваться клавиша F3.
Удаление привязок осуществляется командой вида
:unmap <F3>
Имена клавиш Esc, <CR> и <F2>-<F12> приходится записывать в особом виде,
потому что при простом нажатии клавиша выполнит ту команду, которая за ней
закреплена.
В следующем примере с клавишей F3 связывается команда, которая включает
режим вставки, заключает слово между тегами HTML и выходит из режима встав-
ки, чтобы вы могли продолжить печать:
:map <F3> i<B><Esc>ea</B><Esc>a
Приведу несколько примеров привязок режима вставки для быстрого добав-
ления тегов HTML. Они быстро работают, потому что выполняются без выхода
из режима вставки. Маловероятно, чтобы такие комбинации запятых с буквами
встретились в обычном тексте.
:map! .ah <A href="">
:тар! .а </А>
:тар! .b <B><Esc>ea</B><Esc>a
:тар! ,1 <I><Esc>ea</I><Esc>a
:тар! .1 <LI><Esc>ea</LI><Esc>a

Комментарий
Самыми безопасными для привязки являются клавиши F2-F12 и Shift+F2-F12. Но
на практике они обычно быстро заканчиваются. Комбинации «запятая+буква»,
90 Глава б. Редактирование текстовых файлов в JOE и Vim

не встречающиеся в обычных текстах, позволяют создать столько привязок, сколь-


ко потребуется.
Полная информация о встроенных привязках Vim выводится командой :help
map-which-keys. Также можно запросить у Vim справку по конкретной клавише
или комбинации:
:help CTRL-V
:help F5
:help /b
Помните, что названия клавиш CTRL и F5 должны записываться; не нажимайте
их на клавиатуре.

См. также
Справочная система vim (:help 2html.vim, :help key-mapping).

6.12. Настройка Vim


Проблема
При выходе из программы вся настройка теряется. Конечно, вам не хочется зано-
во вводить все сокращения и привязки при запуске. Как настроить рабочую среду
Vim с сохранением сокращений и нестандартных привязок?

Решение •

Создайте файл ~/.vi m re с нужными параметрами. Либо создайте файл заново, либо
скопируйте и отредактируйте глобальный файл /etc/vim/vimrc.
Что можно сохранить в файле -/.vimrc? Любые значения параметров Vim. Что-
бы узнать имена всех параметров, введите команду
:set a l l
aleph=224
noarabic
arabicshape
noallowrevins
noaltkeymap

Затем посмотрите, что означает каждый параметр:


:help noaltkeymap
Следующая команда открывает информацию о параметрах в виде справочной
страницы с гиперссылками:
:help options

Комментарий
Во время чтения документации Vim его гибкость и колоссальные возможности
настройки производят огромный эффект. Начните с самого начала, как показано
ниже, и не обращайте внимания на хитроумные возможности «для фанатов» до
тех пор, пока они вам не потребуются.
6.13. Быстрое перемещение в Vim 91

В следующем примере файла -/.vimrc продемонстрированы три важных воз-


можности Vim: настройка параметров запуска, сокращений и клавиатурных при-
вязок. Апостроф является признаком строки комментария.

" Персональный файл vimrc. создан 4/22/2004 "

" Отключение режима совместимости с vi


" для использования всех возможностей Vim
set nocompatible
' 4 пробела на позицию табуляции
set tabstop=4
" Расширенные возможности забоя
set backspacedndent.eol.start
Выделение синтаксиса включено по умолчанию
syntax on
" Автоматическое определение типа файла
" для выделения синтаксиса.
П1^?!„?1™1!!.,1"™..?"
г.
Сокращения
""" «* •"""""м""м"' """""""""" • """ 'м"""

:ab Qu Carl a Has Gone Fishing, Back Much Later


:ab Co Copyright (c) 2004 Carla Schroder all rights reserved
:ab Em carla@bratgrrl.com
:ab Wb http://tuxcomputing.com
„п „ ,,_!,
Добавление тегов HTML в режиме вставки
:map! .ah <A href="">
:map! .a </A>
:map! .b <B><Esc>ea</B><Esc>a
:map! .i <I><Esc>ea</I><Esc>a
:map! .1 <LI><Esc>ea</LI><Esc>a
Все изменения, внесенные в -/.vimrc, вступают в силу при следующем запуске Vim.

vim(l); справочная система vim (:help vimrc, :help usr_O5.txt, :help ab).

9NH&
6.13. Быстрое перемещение в Vim
Проблема
Вы редактируете большой документ или несколько файлов одновременно, и вам
приходится часто перемещаться туда-сюда между разными секциями. Но на пе-
ремещения уходит время, и вы постоянно сбиваетесь с текущей позиции.
Решение
Воспользуйтесь маркерами Vim для сохранения позиции курсора (по аналогии
с книжными закладками).
92 Глава 6. Редактирование текстовых файлов в JOE и Vim

Существуют 52 закладки: a-z и A-Z. В командном режиме установите курсор


в нужную позицию и введите команду
та
Чтобы вернуться к маркеру, введите команду

(Обратите внимание: апостроф обратный, а не прямой!)
Маркеры нижнего регистра работают только в границах одного файла. Для пе-
рехода к другому файлу следует использовать маркеры верхнего регистра. Допу-
стим, вы пометили позицию в файле configstuff.txt:
шА
Если теперь ввести команду * А в любом открытом файле или окне, Vim перей-
дет к отмеченной позиции configstuff.txt, открыв файл в случае необходимости.
Маркеры верхнего регистра хранятся в файле -/.viminfo, поэтому они восстанав-
ливаются в следующем сеансе.
Нумерованные маркеры — удобная возможность Vim, которая не требует вме-
шательства с вашей стороны. В момент завершения работы Vim запоминает по-
следнюю позицию курсора. При следующем запуске Vim можно вернуться к этой
позиции командой

См. также
Справочная система vim (:help mark-motions, :hetp viminfo).

6.14. Сеансы Vim


Проблема
Вы работаете над большим проектом; работа прерывается на ночь. Хорошо бы
сохранить все: параметры, привязки, открытые файлы, открытые окна, пози-
цию и размер окон... словом, все, что обычно пропадает при завершении ра-
боты?

Решение
Нет проблем — создайте сеанс (session). Сеанс Vim сохраняет всю рабочую среду
и восстанавливает ее в прежнем виде при следующем запуске сеанса. Достигнув
точки, в которой вам хотелось бы сохранить свою рабочую среду, сохраните все
открытые файлы, затем задайте имя сеанса:
:wall
rmksession myarticle.vim
В данном примере создается файл сеанса myarticle.vim. Чтобы вернуться к со-
храненному сеансу, введите команду
$ vim -S myarticle.vim
6.14. Сеансы Vim 93

После работы в этом сеансе у вас есть два варианта. Либо сохраните все изме-
нения под тем же именем:
rmksession! myarticle.vim
либо организуйте доморощенный «контроль версии», сменив имя сеанса:
:mksession myarticle_rev2.vim
Также возможно перейти к другому сеансу без завершения программы:
:wall
:mksession! myarticle_rev2.vim
:source myarticle.vim
У сеансов есть еще одно интересное применение: создайте идеальную рабочую
среду и сохраните ее на будущее:
$ vim
:help
"W w
:vertical split /-
Результат показан на рис. 6.1.

Session Edit view Bookmarks Settings Help


'help.txt* Viat version fi.l. Last change: 2Q01 Sep 14

VIM - main help file


к
Move aroundUse the cursor keys, 01: "h" to go left, h 1
"j" to go down, "k" to go up, "1" to go right. j
ClGse this window use ":q<Bnt#o*.
Get out of Vim Use ":qal<Bnt*E>* (careful, all changes ace lost!».

Jump to a subject Position the cunot on a tag between Ibasiej and hit CTRL-;.
With the mouse ":set mouse=a'1 to enable the mouse (in к teem ОС GUI) .
Double-click the left mouse button on a tag between ibfttsj.
jump back Type CTRJ..--T C LCTPRXi-0(repeat to go further back).

let specific help It is possible to go directly to whatever you want help


on, by giving an argument to then:help" command |:h«lpj.
It is possible to further specify the context:

&с«39 ? toe кит; board shortcut!


S o r t e d by сшив i„bafc,-,.svp,,o
« /hoa«/cai:ia/

AbiSuite/
-in-city/
Trash/
acrobat/
adobe/

New, i'l.l

Рис. 6.1. Создание идеальной рабочей среды

Увеличьте окно с деревом файлов и уменьшите окно справки, чтобы вам


было удобно с ними работать. Команда AW w используется для переключения
между окнами, а команда AW + (или - ) — для изменения их размеров. Добив-
шись идеального результата, сохраните конфигурацию командой :mksession
3pane.vim (рис. 6.2).
94 Глава 6. Редактирование текстовых файлов в JOE и Vim

Session EH» View' BaoKmarKs Settings Help


lp.txt* For Vis v«L'»ion 6.1. Last change: 2001 Sep 14

VIM - main help file


к
Move around: Use the cursor keys, or "h" to go Lett, h 1
" j " to go down, "k" to go up, "1" to go right, j
close this window: use ":q<]SfttBE>'.
| P r e s s ? t o r Keyboard shortcuts
Sorted by nenc С -bate,*, .swp, -o

Abi3uite/
Lin-city/
Trash/
acrobat/
adobe/
aCtvcstep/
aptitude/
avm/
blackbox/
blucfish/
designer/
dia/
dillo/
emelfm/
fblevels/

_JBut, П5ПЯ j Shell Nc 3

Рис. 6.2. Внесение изменений и сохранение сеанса

Комментарий
Файлы сеансов рекомендуется хранить в отдельном каталоге, чтобы их можно
было легко найти при необходимости.

4«Mi т а к ж е
Справочная система vim (:help session, :help usr_08.txt).

6.15. Назначение редактора по умолчанию


Проблема
Некоторые программы (например, crontab и quota) используют редактор по умол-
чанию. Чаще всего им оказывается какое-нибудь убогое древнее страшилище, а вы
стали поклонником Vim и JOE. Как назначить в качестве редактора по умолча-
нию ту программу, которая вам нравится?

Решение
Отредактируйте переменные окружения в файлах ~/.bashrc или ~/.bash_profile.
Файл -/.bashrc является предпочтительным, потому что он распространяется на
6.16. Определение параметров компиляции Vim 95

все экземпляры командного процессора, открытые во время сеанса. Содержимое


файла ~/.bash_profile читается только во время входа в систему.
Включите в ~/.bashrc следующие строки:
EDITOR=vim
VISUAL=$EDITOR
export EDITOR VISUAL
Разумеется, вы можете задать любой редактор по своему выбору. Обычно ре-
комендуется использовать консольные текстовые редакторы вроде JOE, Pico, Vim
или Emacs. Также можно выбрать редактор X вроде Kwrite или GEdit, но учтите,
что в некоторых ситуациях система X может быть недоступна, поэтому такой вы-
бор подходит не всегда. Важно использовать обе переменные, VISUAL и EDITOR. Ста-
рое название VISUAL является пережитком прошлого, но некоторые программы
по-прежнему используют его.
Проследите за тем, чтобы файл -/.bashrc был включен в ~/.bash_profile:
# include .bashrc if it exists
if [ -f -/.bashrc ]; then
source -/.bashrc

См. также
bash(l).

6.16. Определение параметров компиляции Vim


Проблема
У вас возникли трудности с Vim. Похоже, некоторые возможности программы не
были включены при компиляции. Как узнать, какие параметры использовались
при компиляции Vim?

Решение
Запустите Vim и введите команду
:version
Команда выводит все параметры компиляции и местонахождение инициали-
зационных файлов в системе.

Комментарий
Далее приводится упрощенный пример выходных данных :version. Знаком «+»
помечены включенные возможности, а знаком «-» — отключенные. По этим дан-
ным можно легко определить, придется ли вам перекомпилировать Vim, чтобы
использовать нужную возможность.
:version
VIM - Vi IMproved 6.2 (2003 Jun 1. compiled Apr 1 2004 23:39:33)
Included patches: 1-298. 300-426
96 Глава 6. Редактирование текстовых файлов в JOE и Vim

Compiled by Norbert Tretkowsky (nobse@debian.org)


Big version with GTK2 GUI. Features included (+) or not (-):
+arabic +autocmd +balloon_eval +browse ++builtin_terms +byte_offset +cindent
+clientserver
-hanguljinput +iconv +insert_expand +jumplist

system vimrc file: "$VIM/vimrc"


user vimrc file: "$HOME/.vimrc"
user exrc file: "$HOME/.exrc"
system gvimrc file: "$VIM/gvimrc"
user gvimrc file: "$HOME/.gvimrc"
system menu file: "SVIMRUNTIME/menu.vim"
fall-back for $VIM: "/usr/share/vim"

Compilation: gcc -c - I . -Iproto -DHAVE+CONFIG H -DFEAT_GUI_GTK -I/usr/include/gtk-


2.0 -I/usr/lib/gtk-2.0/include -I/usr/include/atk-1.0

См. также
Справочная система vim (:help version).

.
Глава 7
Запуск
и завершение
работы Linux

7.1. Введение
Существует множество способов запуска и остановки системы Linux. Также не
стоит забывать о сценариях инициализации, управляющих запуском различных
процессов, и о различных уровнях выполнения системы (runlevels), в каждом
из которых может работать свой набор процессов. Выполните следующую ко-
манду:
$ ps axfl
Найдите процесс с номером 1 (вывод сокращен, в вашей системе выходные
данные команды будут содержать больше столбцов и строк):
UID PID PPID STAT TTY TIME COMMAND
О 1 О S ? 0:03 init
Это init, предок всех процессов в системе Linux. Обратите внимание: иденти-
фикатор родительского процеса PPJD (Parent Process ID) равен 0, потому что init
является первым процессом, стартующим после запуска ядра.
Процесс загрузки Linux проходит примерно так:
1. BIOS инициализирует оборудование и читает загрузочный сектор.
2. Главная загрузочная запись (MBR, Master Boot Record) запускает загрузчик
операционной системы, который передает управление ядру.
3. Ядро инициализирует периферийные устройства, загружает драйверы, мон-
тирует корневую файловую систему и вызывает/sbin/init.
4. Программа /sbin/init запускает все процессы пользовательского уровня. Она
читает/etc/inittab и переходит к активизации дополнительных сценариев, ука-
занных в /etc/inittab.
5. Дальнейшие действия зависят от дистрибутива. В Debian следующим выпол-
няется сценарий /etc/init.d/rcS, который передает управление в каталог/etc/
rc*.d, указанный в /etc/inittab. По умолчанию Debian работает на уровне 2,
поэтому выполняются все сценарии из каталога /etc/rc2.d (запуск в стиле
SysV).
98 Глава 7. Запуск и завершение работы Linux

В Red Hat следующим выполняется сценарий /etc/rc.d/rc.sysinit, а затем сце-


нарии из каталога, соответствующего уровню выполнения (обычно /etc/rc3.d или
/etc/rc5.d).
Процедура запуска в Slackware ближе к процедуре запуска BSD: в системе име-
ется один каталог /etc/red, в котором находится сценарий init для каждого уров-
ня выполнения. Впрочем, в ней также присутствуют некоторые аспекты SysV.
В системах Red Hat и Debian каталоги /etc/rc*.d содержат не стартовые сцена-
рии, а символические ссылки на сценарии в /etc/init.d. Создание ссылок на основ-
ной каталог сценариев/etc/init.d предотвращает излишнее дублирование. Кроме
того, имена ссылок определяют способ запуска слуисб. Для примера возьмем запись
$ I s -go S20cupsys
lrwxrwxrwx 1 16 Sep 9 17:51 S20cupsys -> . ./init.d/cupsys
Префикс S20 означает, что служба cupsys должна запускаться с приоритетом 20.
Чем ниже значение, тем выше приоритет. Запись K20cupsys означает, что служба
должна быть «убита» (что поделаешь, мир Linux жесток). Этот простой механизм
гарантирует, что службы запускаются и останавливаются так, как вам потребует-
ся, и в правильном порядке.

Уровни выполнения
Стандартная схема уровней выполнения Linux:
О 0 — остановка;
О 1 — однопользовательский режим;
О 2-5 — многопользовательский режим;
О 6 — перезагрузка.
Уровни выполнения в дистрибутивах Debian:
О 0 — остановка;
О 1 — однопользовательский режим;
О 2-5 — многопользовательский режим;
О 6 — перезагрузка.
Уровни выполнения в дистрибутивах Red Hat:
О 0 — остановка;
О 1 — однопользовательский текстовый режим;
О 2 — не используется (определяется пользователем);
О 3 — многопользовательский текстовый режим;
О 4 — не используется (определяется пользователем);
О 5 — многопользовательский графический режим;
О 6 — перезагрузка.
Уровни выполнения в дистрибутивах Slackware:
О 0 — остановка;
О 1 — однопользовательский режим;
7.2. Смена уровня выполнения после загрузки 99

О 2 — не используется (то же, что 3);


О 3 — многопользовательский текстовый режим;
О 4 — многопользовательский графический режим;
О 5 — не используется (то же, что 3);
О 6 — перезагрузка.
В других дистрибутивах могут существовать другие варианты. Уровни 7-9 те-
оретически существуют, но на практике не используются. Чтобы понять, что про-
исходит на каждом уровне, достаточно прочитать каталоги rc*.d.

7.2. Смена уровня выполнения после загрузки


Проблема
Где-то в процессе установки системы Linux вы выбрали «загрузку в текстовом
режиме» или «загрузку в графическом режиме». Возможно, вы не до конца пони-
мали, что означают эти режимы — а может, понимали, но теперь вам нужен гра-
фический интерфейс вместо скучной текстовой консоли. А может, у вас возникли
проблемы с графическим интерфейсом, и теперь вы хотите перейти на уровень
с минимальным набором служб для диагностики.

Решение
Используйте init. Сначала проверьте текущий уровень выполнения:
# /sbin/runlevel
N5
«N» означает, что уровень после загрузки не изменялся. Если бы это произош-
ло, то в выходных данных отображался бы исходный уровень. Для смены уровня
выполнения необходимо обладать правами root:
# /sbin/init 3
Команда останавливает все службы уровня 5 и запускает службы уровня 3.
Происходящее напоминает «частичную перезагрузку». Все пользователи прину-
дительно выводятся из системы.
При решении особо серьезных проблем иногда требуется переключиться на
уровень 1:
# /sbin/init 10
Команда останавливает X и переводит вас в командный процессор с правами
root, с ограниченным набором служб и без X. В Red Hat после спуска на уровень 1
не нужно вводить пароль root, поэтому не предоставляйте доступ к init sudo-пользо-
вателям.

Комментарий
В Red Hat, Fedora, Mandrake и Slackware смена уровня выполнения является од-
ним из способов закрытия сеанса X, так как на уровне 3 загружается текстовая
100 Глава 7. Запуск и завершение работы Linux

консоль. Тем не менее это весьма радикальный способ, поскольку он останавли-


вает и перезапускает все службы и выводит из системы всех текущих пользователей.
Зачем изменять уровень выполнения при помощи init? Возможны разные при-
чины:
О переход на уровень 1 для диагностики и восстановления;
О остановка и перезапуск системы в ситуации, когда обычные способы не работают;
О перезапуск всех служб или переход на другой набор служб.
«Неправильные» причины:
О переход от сеанса текстовой консоли к сеансу X. Однако команда init должна
выполняться с правами root, а запускать сеанс X с правами root не рекомен-
дуется: это небезопасно, а любые случайные ошибки могут нарушить рабо-
тоспособность системы;
О завершение сеанса X.
Как будет показано в разделе 7.4, для перехода между сеансами X и консоль-
ными сеансами существуют другие, более правильные способы.
Также можно воспользоваться командой telinit, которая представляет собой
жесткую ссылку на init:
$ Is -al /sbin/telinit
Irwxrwxrwx 1 root root 4 Oct 31 07:51 /sbin/telinit -> init

См. также
init(8); раздел 7.4.

7.3. Смена уровня выполнения


по умолчанию
Проблема
Вас не устраивает уровень выполнения, в котором загружается система, и вы хо-
тите сменить его. Предположим, вы хотите загрузиться в текстовом режиме вместо
графического интерфейса. А может быть, вы настроили разные уровни выполнения
на запуск разных наборов служб и после должного тестирования и настройки го-
товы выбрать уровень по умолчанию.

Решение
Откройте файл /etc/inittab и найдите следующую запись:
# Уровень выполнения по умолчанию
id:2:initdefault:
Просто замените 2 другой цифрой (кроме 0 или 6).
Если вы предпочитаете иметь свободу выбора на стадии загрузки, закоммен-
тируйте строку id:X:initdefault. Init предложит выбрать уровень выполнения во время
загрузки.
7.4. Запуск и остановка X 101

Комментарий
В Debian стандартные уровни выполнения 2-5 не отличаются друг от друга; они
загружают либо текстовую консоль, либо графическую программу входа в систе-
му в зависимости от того, что было выбрано во время установки. Уровень выпол-
нения 2 используется в Debian по умолчанию. Изменение конфигурации уровней
выполнения Debian рассматривается в разделе 7.5.

См. также
inittab(5); раздел 7.5.

7.4. Запуск и остановка X


Проблема
Вам не нравится менять уровень выполнения только для завершения сеанса X — ведь
это приводит к перезапуску всех служб и нарушению работы всех пользователей,
вошедших в систему. Как лучше завершить сеанс X?

Решение
Существует несколько способов. Лучше всего настроить один уровень выполнения
на загрузку текстовой консоли, а затем запустить X в нужный момент командой startx:
$ startx
После этого простой выход из сеанса X будет приводить к завершению X. Вы
не будете выходить из Linux, только из X.
Во многих дистрибутивах на уровне 3 загружается текстовая консоль. В Red
Hat, Fedora, Mandrake и SuSE на уровне 5 загружается графическая программа
входа в систему. В Slackware это делается на уровне 4.
Возможно, пользователям Debian придется предпринять дополнительные дей-
ствия, потому что в Debian уровни 2-5 идентичны. Настройка уровней выполне-
ния в Debian рассматривается в разделе 7.6.

Комментарий
Другие способы завершения сеансов X лучше подходят для «зависания» X.
Любой пользователь может ввести команду «xkill» нажатием клавиш Ctrl+Alt+
+Backspace.
В графических программах входа в систему (xdm, kdm или gdm) пользователь
root может прервать работу программы. Это автоматически прервет работу всех
пользователей:
# /etc/init.d/gdm stop

См. также
Раздел «Введение» настоящей главы; раздел 7.3; раздел 7.6.
102 Глава 7. Запуск и завершение работы Linux

7.5. Управление уровнями выполнения


в Debian
Проблема
Требуется выбрать службы, запускающиеся при загрузке системы Debian, на каждом
уровне выполнения. При установке новых служб (таких, как Apache, Exim или
OpenSSH) Debian настраивает их на запуск при загрузке. Но пока тестирование
еще не завершено, вы предпочитаете запускать и останавливать их вручную. А может
быть, во время тестирования на разных уровнях должны стартовать разные службы.

Решение
Воспользуйтесь командой update-rc.d. В следующем примере на уровне 5 до-
бавляется новая служба KDE Display Manager. Kdm — имя запускаемого файла
в /etc/init.d. Список уровней выполнения должен завершаться точкой:
# update-rc.d kdm start 99 5 . stop 01 0 1 2 3 4 6 .
Следующая команда удаляет службу на всех уровнях выполнения. Удаление
не может быть избирательным; удаляется либо всех, либо ничего.
# update-rc.d -f kdm remove
Изменение уровня выполнения для существующей службы производится в два
этапа: сначала удалите службу, а затем добавьте ее на нужных уровнях. Обязательно
создайте записи для всех служб на всех уровнях, как для запуска, так и для остановки.

Комментарий
Помните, что update-rc.d работает с именами сценариев в /etc/init.d. Для тестиро-
вания команд update-rc.d используется ключ -п:
# update-rc.d -f -n kdm remove
При необходимости можно удалить сценарии из init.d при помощи ключа remove:
# update-rc.d --purge kdm remove
Но обычно лучше оставить их на случай, если они понадобятся в будущем.

См. также
update-rc.d(8).

7.6. Создание уровней выполнения


с текстовым и графическим входом в Debian
Проблема
В Debian загружается графическая программа входа в систему. Вы хотите, чтобы
на уровне 3 загружалась текстовая консоль, а на уровне 5 — графическая программа.
7.6. Создание уровней выполнения с текстовым и графическим входом в Debian 103

Решение
Сначала узнайте, какой экранный менеджер используется в вашей системе, после
чего вы добавьте или удалите его на соответствующих уровнях. Проверка выпол-
няется так:
$ ps ах | grep dm
537 ? S 0:00 /usr/bin/kdm
544 ? S< 0:10 /usr7XllR6/bin/X :0 -dpi 100 -nolisten tcp vt7 -auth /var/
lib/kdm/A:O-PbCldj
В системе работает kdm, экранный менеджер К. Сначала удалите его на всех
уровнях:
# update-red -f kdm remove
update-rc.d: /etc/init.d/kdm exists during r e d purge (continuing)
Removing any system startup links for /etc/init.d/kdm ...
/etc/rcO.d/KOlkdm
/etc/rcl.d/KOlkdm
/etc/rc2.d/S99kdm
/etc/rc3.d/S99kdm
/etc/rc4.d/S99kdm
/etc/rc5.d/S99kdm
/etc/rc6.d/K01kdm
Обеспечьте запуск kdm на 5 уровне и его остановку на остальных уровнях:
# update-rc.d kdm start 99 5 . stop 01 1 2 3 4 6 .
Adding system startup for /etc/init.d/kdm ...
/etc/rcO.d/KOlkdm -> ../init.d/kdm
/etc/rcl.d/KOlkdm -> . ./init.d/kdm
/etc/rc2.d/K01kdm -> . ./init.d/kdm
/etc/rc3.d/K01kdm -> . ./init.d/kdm
/etc/rc4.d/K01kdm -> . ./init.d/kdm
/etc/rc5.d/K01kdm -> . ./init.d/kdm
/etc/rc6.d/S99kdm -> ../init.d/kdm
Очень важно, чтобы для каждого уровня существовала запись, которая бы явно
запускала или останавливала каждую службу. Приоритет всегда состоит из двух
цифр; 99 — наименьший приоритет.
Наконец, отредактируйте файл /etc/inittab так, чтобы выбранный уровень ис-
пользовался по умолчанию:
# Уровень выполнения по умолчанию
id:3:initdefault:
Новый уровень вступает в силу после перезагрузки. Если закомментировать
эту строку, вам будет предложено выбрать уровень выполнения во время загрузки.

Комментарий
В Gnome используется экранный менеджер gdm, в X — xdm, а в KDE — kdm. До-
вольно часто встречаются системы, в которых установлены все три программы.
Xdm обладает минимальной функциональностью; в сущности, программа всего
лишь предоставляет графическое окно входа. И kdm, и gdm поддерживают ряд до-
полнительных возможностей входа и завершения работы, включая меню для выбо-
ра оконного менеджера.
104 Глава 7. Запуск и завершение работы Linux

L-M. Т Э Ю К 6
Update-rc.d(8); раздел 7.3; справочное руководство Debian (http://qref.sourceforge.net);
раздел «Введение» настоящей главы.

7.7. Управление уровнями выполнения


в Red Hat
Проблема
Если не потратить некоторое время на настройку конфигурации, Red Hat/Fedora
обычно запускает множество всевозможных служб при загрузке. Если вы пошли
по простому пути, вероятно, у вас в системе работает немало служб, которые бы
вы предпочли закрыть. А может, вы предпочитаете запускать разные службы на
разных уровнях выполнения с целью тестирования и настройки.

Решение
Воспользуйтесь программой chkconfig. Пример настройки ssh:
# chkconfig --level 2345 ssh on
# chkconfig --level 016 ssh off
Вы должны выполнить обе операции — определить, на каких уровнях служба
должна запускаться и на каких уровнях она работать не должна. «On» означает
запуск, a «off» — отключение службы.
Добавление новой службы на всех уровнях выполнения:
# chkconfig --add ssh
Удаление службы на всех уровнях выполнения:
# chkconfig --del ssh
Со службами xinetd дело обстоит несколько иначе, но для управления ими так-
же используется chkconfig:
# chkconfig ktalk on
# chkconfig rsync off
Службы xinetd либо работают, либо нет; они не различаются по уровням. Вы-
вод информации о состоянии всех служб на всех уровнях, включая службы xinetd:
# cnkconfig - - l i s t
anacron O:off l:off 2:on 3:on 4 :on 5: on 6: Off
syslog O:off l:off 2:on 3:on 4:on 5: on 6: Off
cups O:off l:off 2:on 3 :on 4 :on 5: on 6: off
apmd O:off l:off 2:on 3:on 4 :on 5: on 6: Off
xinetd based services:
chargen-udp off
rsync: off
sgi-fam: on
Вывод информации об отдельной службе:
# chkconfig --list syslog
syslog O:off l:off 2:on 3:on 4:on 5:on 6:off
7.8. Ручная настройка служб, запускаемых при загрузке 105

Комментарий
Утилита chkconfig берет начальный приоритет и уровень выполнения из старто-
вого сценария программы. Например, в файле /etc/rc.d/init.d/cups присутствует
следующий фрагмент:
# Информация Linux chkconfig
# chkconfig 2345 90 10
Он означает, что chkconfig запускается на уровнях 2, 3, 4 и 5, с приоритетом 90
для запуска и приоритетом 10 для остановки. Конечно, вы можете изменить эти
параметры по своему усмотрению. Либо отредактируйте исходный сценарий из
init.d, либо просто переименуйте ссылки:
# mv /etc/rc.d/rc3.d/S90cups /etc/rc.d/rc3.d/S45cups

См. также
chkconfig(8); The Red Hat Customization Guide (http://www.redhat.com/docs/manuaLs/
linux/).

7.8. Ручная настройка служб, запускаемых


при загрузке
Проблема
Требуется вручную настроить службы, запускаемые при загрузке системы. Воз-
можно, вам не нравятся средства, входящие в ваш дистрибутив Linux, или вы ра-
ботаете в минимальной системе, не содержащей вспомогательных программ, или
считаете, что использование хитроумных средств вроде update-rc.d для управле-
ния уровнями выполнения не оправдано.

Решение
Создайте ссылки в каталогах /rc*.d командой In. Удалите ссылки для тех служб,
которые не будут использоваться.
Например, ссылка для запуска CUPS на уровне 3 создается так:
# In -s /etc/rc.d/init.d/cups /etc/rc.d/rc3.d/S90cups
Повторите для каждого уровня выполнения. Не забудьте создать ссылки для
отключения службы:
# In -S /etc/rc.d/init.d/cups /etc/rc.d/rcO.d/KOlcups
Приоритет задается в интервале 1-99. Наличие процессов с одинаковыми при-
оритетами не создает проблем; на практике чаще всего встречается приоритет 20.
Обычно приоритеты не столь важны, но некоторые функции (например, фильт-
рация пакетов и ведение журналов) должны обладать приоритетами 1 -10 для ран-
него запуска и 80 и выше для позднего завершения. Также обратите внимание на
последовательность запуска. Например, поддержка сети должна запускаться рань-
ше служб, зависящих от работы сети.
106 Глава 7. Запуск и завершение работы Linux

Комментарий
Этот способ настройки чуть более трудоемок, но ничего страшного не происхо-
дит — вы просто создаете «мягкие» ссылки. Помните, что для каждой запускае-
мой службы также необходимо создать записи, которые будут останавливать ее
на всех уровнях выполнения, на которых она не должна работать. Кроме того,
некоторые службы на уровнях 0, 1 и 6 «убивать» не следует, поскольку это важ-
ные системные службы, создаваемые Linux. Сохраните информацию о таких служ-
бах, прежде чем вносить какие-либо изменения:
$ Is /etc/rcO.d /etc/rcl.d /etc/rc6.d > original-runlevels.txt
На уровнях 2-5 можно делать все, что угодно, но будьте внимательны и не
испортите другие уровни.

См. также
1п(1).

7.9. Ручная остановка и запуск служб


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

Решение
Запустите стартовый сценарий программы в init.d с соответствующими парамет-
рами. Найдите сценарий, прочитайте его и просмотрите состав поддерживаемых
параметров. Например, на практике часто выполняется операция перезапуска се-
тевой поддержки. В файле/etc/init.d/networking присутствует следующая команда:
echo "Usage: /etc/init.d/networking {start|stop|restart|force-reload}"
Подобная строка присутствует в каждом сценарии init. Нужную информацию
также можно получить, запустив сценарий без аргументов:
# /etc/init.d/networking
Usage: /etc/init.d/networking (start|stop|restart|force-reload}
Таким образом, остановка службы поддержки сети осуществляется командой
§ /etc/init.d/networking stop

Комментарий
Для любой программы, имеющей стартовый сценарий, рекомендуется использо-
вать сценарий вместо запуска двоичного файла программы, потому что в сцена-
7.10. Выключение компьютера или перезагрузка Linux 107

рии реализована обработка ошибок и проверка файлов, а также все необходимые


условные проверки.

7.10. Выключение компьютера


или перезагрузка Linux
Проблема
Только посмотрите, сколько существует способов выключения и перезагруз-
ки: shutdown, halt, init 0, poweroff, Ctrl+Alt+Delete... Каким из них лучше пользо-
ваться?

Решение
Выбор не столь существенен; используйте тот способ, который вам больше под-
ходит. Следующие команды выключения могут использоваться только привиле-
гированным пользователем root:
# shutdown -h now

или
# poweroff
или
#halt
Выключение через шесть минут:
# shutdown -h +6
Команда shutdown рассылает оповещения всем подключенным пользователям.
Вы можете указать собственный текст:
# shutdown -h +6 "Time to stop working and start partying."
Консольные пользователи увидят следующее сообщение:
Broadcast message from root (pts/6) Wed Aug 14 13:51:24 2003
Time to stop working and start partying.
The system is going DOWN for system halt on 6 minutes!
Чтобы отменить выключение компьютера, выполните следующую команду
с правами root:
# shutdown -с
Перезагрузка выполняется командой
# shutdown -г now
или
# reboot
или нажатием Ctrl+Alt+Delete. Любой пользователь может перезагрузить ком-
пьютер, если только не отключить данную возможность в /etc/inittab (в разде-
ле 7.11 рассказано, как запретить перезагрузку или предоставить разрешение кон-
кретным пользователям).

108 Глава 7. Запуск и завершение работы Linux

Комментарий
Помните, что процесс выключения всегда должен быть контролируемым. Всем
компьютерам, в том числе и машинам с системой Linux, приходится проделать
немалый объем работы, чтобы питание можно было безопасно выключить. Сис-
тема должна завершить работу служб, демонтировать файловые системы и сбро-
сить буферы на диск.
Команды shutdown, poweroff и halt выполняются только привилегированным
пользователем root. Ограничение выглядит довольно глупо, потому что у любого
оконного менеджера и среды настольной системы имеется собственное меню вы-
ключения, а любой пользователь, находящийся поблизости от компьютера, мо-
жет нажать кнопку питания. Но такова жизнь, и с этим приходится смириться.
Возможный выход — предоставить ограниченные привилегии для выполнения ко-
манд выключения командой sudo. Другое решение основано на создании специ-
альной группы пользователей, которым разрешено выключение.

См. также
shutdown(8), poweroff(8); раздел 8.20; раздел 8.21.

7.11. Запрет или ограничение доступа


к Ctrl+Alt+Delete
Проблема
Всем известно, что комбинация клавиш Ctrl+Alt+ Delete перезагружает компьютер.
Но хотите ли вы этого? С точки зрения безопасности машина становится уязви-
мой во время перезагрузки, тогда как перезагрузка может быть выполнена любым
пользователем, имеющим доступ к клавиатуре. Исходя из этих соображений, воз-
можно, вы предпочтете либо полностью запретить перезагрузку компьютера кла-
вишами Ctrl+Alt+ Delete, либо ограничить ее некоторыми пользователями.

Решение
Чтобы полностью запретить перезагрузку по Ctrl+Alt+Delete, закомментируйте сле-
дующую строку в /etc/inittab:
# са:12345:Ctrlaltdel :/sbin/shutdown -tl -r now
Чтобы разрешить ее отдельным пользователям, включите в командную строку
ключ -а:
са:12345:Ctrlaltdel:/sbin/shutdown -tl -a -r now
Затем перечислите пользователей, которым разрешено выполнять перезагруз-
ку, в файле /etc/shutdown.allow.

Комментарий
Если файл /etc/shutdown.allow не существует, создайте его.
7.12. Автоматическое выключение компьютера 109

См. также
shutdown(8).

7.12. Автоматическое выключение


компьютера
Проблема
Пользователи по беспечности забывают выключать свои компьютеры на ночь.
А может быть, вы думаете, что ваш компьютер должен выключаться ночью сам по
себе, чтобы вы могли просто уйти по своим делам и не беспокоиться о нем.

Решение
Благодаря сгоп задача решается элементарно просто. Включите следующий фраг-
мент в /etc/crontab, чтобы компьютер автоматически выключался каждую ночь
в 23:00:
# m h dom mon dow user command
00 23 * * * root /sbin/shutdown -h now

Комментарий
Файл /etc/crontab идеально подходит для планировки простых заданий. Обрати-
те внимание: в файле имеется поле имени, поэтому любой пользователь может
создавать в нем свои записи. Тем не менее редактирование файла/etc/crontab раз-
решается только пользователю root.
Другой способ основан на использовании команды crontab:
ф crontab -u root -e
Команда открывает файл crontab для пользователя root; отредактируйте и со-
храните его. Не пытайтесь задать имя файла — в процессе редактирования файл
является временным, а его имя автоматически задается crontab при сохранении.
Файл сохраняется в каталоге /var/spool/cron/crontabs.

См. также
cron(8), crontab(l), crontab(5).


Глава 8
Управление
пол ьзователя м и
и группами

8.1. Введение
В системе Linux как «живым» пользователям, так и системным процессам назна-
чаются учетные записи (accounts), необходимые для управления привилегиями
и правилами доступа.
Запомните два важнейших принципа безопасности Linux.
1. Всегда используйте минимальный уровень привилегий, необходимый для вы-
полнения работы.
2. Используйте сильные пароли.
Соблюдение этих двух принципов избавит вас от многочисленных огорчений
и неудач.
В Linux входит набор утилит для выполнения операций с пользователями
и группами: useradd, groupadd, userdel, groupdel, usermod, groupmod, passwd, chfn и chsh.
Они входят в семейство «Shadow Suite», разработанное Джулианом Фрэнсисом
Хо (Julianne Frances Haugh) для улучшения защиты паролей и упрощения опера-
ций управления учетными записями. Когда-то все файлы приходилось редакти-
ровать по отдельности, а шифрованные пароли хранились в файле /etc/passwd.
Но поскольку файл /etc/passwd должен оставаться доступным для чтения, хране-
ние паролей в нем, пусть даже в зашифрованном виде, чревато потенциальными
неприятностями. Скопировав этот файл, любой желающий теоретически сможет
вычислить пароли. Перемещение зашифрованных паролей в файл /etc/shadow,
доступный только для привилегированного пользователя root, создает полезный
дополнительный уровень защиты.
Команда useradd по-разному работает в разных системах. Традиционно она
включала всех новых пользователей в одну группу users(lOO). Все домашние ката-
логи становились общедоступными, потому что все пользователи принадлежали
к одной группе. В Red Hat эта схема была заменена схемой «User Privacy Group».
Команда useradd в Red Hat создает для каждого нового пользователя приватную
группу, идентификатор которой (GID) совпадает с идентификатором пользова-
теля (UID). Разумеется, разные пользователи обладают разными потребностями;
некоторые из них могут предпочесть, чтобы их каталоги были открытыми. Фун-
8.2. Отделение обычных пользователей от системных 111

даментальный принцип безопасности гласит: «сначала все запретить, потом раз-


решать по мере необходимости».
Adduser и addgroup, сценарные Perl-обертки для команд useradd и groupadd, по-
явились относительно недавно. Эти сценарии полностью руководят вашими дей-
ствиями при создании нового пользователя. Они очень удобны для создания от-
дельных учетных записей, но не для серийных (batch) операций (разве что если
вы самостоятельно внесете изменения в сценарии adduser и addgroup).
В разделе 8.17 приведен сценарий для серийного создания новых пользовате-
лей и изменения паролей.

8.2. Отделение обычных пользователей


от системных
П DO6/16МЭ
В любой системе Linux, наряду с учетными записями обычных пользователей,
существуют системные учетные записи (root, uucp, daemon и т. д.). В файле /etc/
passwd эти две категории не отделяются друг от друга. Как отделить учетные за-
писи «живых» пользователей от системных учетных записей?

Решение
Воспользуйтесь схемой нумерации идентификаторов пользователей в Linux (UID)
и возможностью сортировки по полям или столбцам в awk. Пример для системы
на базе Debian или Slackware:
$ awk -F: '$3 > 999 { print $0}' /etc/passwd
nobody:x:65534:65534:nobody:/nonexi stent:/bi n/sh
carl a:x:1000:1000::/home/carl a:/bin/bash
foober:x:1001:1001::/home/test:/bi n/false
bitchkat:x:1002:1002::/home/test2/:bin/bash
Colby:x:1003:1003::/home/test3:/bin/bash
Отображение подмножества записей:
$ awk -F: '($3 >- 1000) && ($3 <= 1005) { print $0}' /etc/passwd
Для систем Red Hat и SuSE:
* awk -F: '$3 > 499 { print $0}' /etc/passwd
Алфавитная сортировка результата:
$ awk -F: '$3 > 499 { print $0}' /etc/passwd | sort
Описанный прием особенно удобен тогда, когда схему нумерации UID в груп-
пах удается спроектировать заранее. Например:
О Trainers 1000-1100;
О Coaches 1101-1200;
О Players 1200-2000.
Если вы будете придерживаться подобной схемы, в вашем распоряжении по-
явится простой инструмент для сортировки пользователей и их последующего
разбиения на группы.
112 Глава 8. Управление пользователями и группами

Комментарий
Схемы нумерации (вроде представленного ранее примера «Trainers/Coaches/
Players») хорошо подходят для небольшой и относительно статичной пользователь-
ской базы. В больших организациях с частыми изменениями они приносят боль-
ше вреда, чем пользы. В таких ситуациях лучше направить усилия на правильное
распределение пользователей по группам и своевременное внесение изменений.
Как всегда, между дистрибутивами существуют мелкие, но любопытные раз-
личия.
Коды UID и GID во всех версиях Linux лежат в интервале от 0 до 65534.
Debian:
о 0-99 — системные учетные записи;
О 100-999 — установленные пользователем программы и демоны (Postfix, Fetch-
mail, gdm, dictd и т. д.);
О 1000-29999 — учетные записи обычных пользователей;
О 30000-65533 — согласно документации Debian, коды зарезервированы, но при
желании вы можете их использовать;
О 65534 — пользователь nobody, учетная запись без прав и разрешений.
Red Hat:
О 0-499 — коды зарезервированы для системного использования;
О 500-60000 — обычные пользователи;
О 65534 — пользователь nobody, учетная запись без прав и разрешений.
В других дистрибутивах используются аналогичные схемы нумерации. Экс-
периментируйте с диапазонами, зарезервированными для учетных записей обыч-
ных пользователей, но не трогайте системные диапазоны.

См. также
awk(l); раздел 8.17; Debian Policy Manual, глава 9.2.2 (http://www.debian.org/doc/
debian-poLicy/); Red Hat Linux Reference Pocket Guide (http://www.redhat.com/docs/
manuals/Linux/).

8.3. Определение кодов UID и GID


Проблема
Требуется быстро узнать код UID пользователя и выяснить, к каким группам он
принадлежит.

Решение
Воспользуйтесь командой id:
$ id carl a
uid-lOOO(carla) gid=1000(carla)
8.4. Создание учетной записи пользователя командой useradd 113

groups=1000(carla).20(dialout),24(cdrom),25(floppy),29(audio),30(dip),44(video),
105(windows),432(usb).lOOl(cdrecording)

Комментарий
Ключи команды id:
О -u — вывод только кодов UID;
О -g — вывод только кодов GID;
О -gn — вывод имени первичной группы пользователя вместо GID.

См. также

8.4. Создание учетной записи пользователя


командой useradd
Проблема
Требуется добавить новых пользователей в систему Linux.

Решение
Воспользуйтесь командой useradd -m для создания имени пользователя, его до-
машнего каталога и других переменных окружения; затем назначьте пароль ко-
мандой passwd -e. До создания пароля учетная запись остается неактивной.
Далее приводится простейший вариант вызова. С флагом -гп команда создает
домашний каталог и копирует в него файлы из /etc/skel:
# useradd -m имя пользователя
Как правило, в команду также включается полное имя пользователя с флагом
-с (Comment, то есть «комментарий»). Поставьте четыре запятые после имени
пользователя, чтобы остальные поля комментария (рабочий телефон и т. д.) ос-
тались пустыми.
# useradd -m -с Grace Hopper ghopper
Имяпользователя должно быть уникальным.
Теперь выполните команду passwd -e. Флаг -е означает, что пароль становится
недействительным после первого входа, что заставляет пользователя сменить его:
# passwd -e ghopper
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
Окружение пользователя формируется на основании стандартного содержи-
мого/etc/default/useradd и/etc/skel. Конфигурация useradd по умолчанию отобра-
жается командой
# useradd -D
114 Глава 8. Управление пользователями и группами

Любые значения по умолчанию могут переопределяться в командной строке —


например, UID и командный процессор:
# useradd -u 1500 -s tcsh ghopper
Также существует возможность расширения стандартной конфигурации — на-
пример, включить пользователя в дополнительные группы:
# useradd -G users,cdrecord.dialout ghopper

Комментарий
Useradd, в отличие от своего родственника adduser, прекрасно работает в сценари-
ях (например, в сценарии mass_useradd из раздела 8.17).
Поля комментария также известны под названием данных GECOS. Данные
GECOS состоят из пяти полей, разделенных запятыми. Если вы собираетесь ис-
пользовать поле комментария, включите все четыре запятые, даже если значения
соответствующих атрибутов не указываются. В долгосрочной перспективе это оку-
пится, особенно при выполнении серийных операций и при поиске. Традиционно
в данные GECOS входит полное имя, номер комнаты, рабочий телефон, домаш-
ний телефон и прочее (произвольная информация). Полное имя используется
многими внешними программами — в частности, почтовыми серверами, однако
другие поля можно использовать так, как вы сочтете нужным. Например, они по-
зволяют организовать произвольное деление пользователей на группы и их сор-
тировку (см. раздел 8.19).
GECOS — пыльный пережиток прошлого, оставшийся с очень древних вре-
мен; сокращение означает «General Electric Compliant Operating System». За пол-
ной информацией обращайтесь к Файлу жаргона.

См. также
useradd(8); Файл жаргона (http://www.catb.org/~esr/jargon/).

8.5. Создание учетной записи пользователя


командой adduser
Проблема
Вы предпочитаете использовать adduser вместо useradd, потому что эта команда
помогает ввести все данные конфигурации нового пользователя — пароль, дан-
ные GECOS и т. д.

Решение
Введите команду adduser имя_пользователя и введите запрашиваемые данные:
# adduser anitab
Adding user anitab...
Adding new group anitab (1008).
Adding new user anitab (1008) with group anitab.
8.6. Изменение учетной записи пользователя 115

Creating new home directory /home/anitab.


Copying files from /etc/skel
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
Changing the user information for anitab
Enter the new value, or press ENTER for the default
Full name []:
Room Number []:
Work Phone []:
Home Phone []:
Other []:
Is the information correct [y/n] у
В командной строке add user можно указать код UID, переопределяя значение
по умолчанию:
# adduser --uid 1500 anitab
Стандартная конфигурация adduser задается в файле /etc/adduser.conf.

Комментарий
Полное имя является единственным важным атрибутом информации о пользова-
теле. Оно необходимо любой внешней программе, работающей с /etc/passwd, —
например, почтовому серверу. И хотите — верьте, хотите — нет, но в большинстве
версий Linux по-прежнему продолжает существовать finger:
$ finger anitab
Login: anitab Name:
Directory: /home/anitab Shell: /bin/bash
On since Sun May 30 08:46 (PDT) on ttyl 10 hours 55 minutes idle
(messages off)
No ma i1.
No plan.
Phone 555-5555
Office Fooo
Другие поля могут содержать произвольную информацию. В частности, они
могут использоваться для хранения заметок или группировки.
Пользователь может сменить свой номер комнаты и рабочий телефон коман-
дой chfn, но изменить полное имя и поле «прочее» ему не удастся.

См. также
adduser(8), adduser.conf(5), finger(l).

8.6. Изменение учетной записи пользователя


Проблема
Требуется внести изменения в существующую учетную запись — например,
сменить имя пользователя или UID, обновить данные GECOS или домашний ка-
талог.
116 Глава 8. Управление пользователями и группами

Решение
Воспользуйтесь командами usermod и chfn.
Изменять можно любые атрибуты, включая имя пользователя и код UID. Что-
бы сменить имя, сначала укажите новое имя, а затем старое:
# usermod -I aborg anitab
Следующая команда изменяет UID (в следующем примере исходное значение
1050 меняется на 1200) без изменения имени пользователя. Сначала указывается
новый код UID, затем имя:
# usermod -u 1200 anitab
Принадлежность пользователя к группам не изменяется. Все файлы в домашнем
каталоге пользователя автоматически обновляются новым кодом U1D. Тем не менее
вам придется вручную найти и изменить все файлы за пределами домашнего катало-
га (crontab, почтовые каталоги, временные файлы /tmp и файлы в общих каталогах).
Для поиска файлов можно воспользоваться командой find с указанием исходного
кода UID, если вы хотите просмотреть список файлов перед внесением изменений:
# find / -uid 1050
/usr/src/include/lber.h
/usr/src/include/1 dap.h
/usr/src/include/ldbm.h
Смена владельца файлов осуществляется командой chown:
# chown 1200 /usr/scr/include/lber.h
Последовательная смена владельца для каждого файла — занятие довольно уто-
мительное. Команды chown и find могут выполнить эту работу за вас:
# find / -uid 1050 -exec chown -v 1200 {} \;
changed owner of '/usr/src/include/lber.h' to 1200
changed owner of '/usr/src/include/ldap.h' to 1200
changed owner of '/usr/src/include/ldbm.h' to 1200
Следующая команда перемещает домашний каталог пользователя со всем со-
держимым. Если новый каталог не существует, он автоматически создается. Сна-
чала указывается новый каталог, а затем имя пользователя. Обязательно исполь-
зуйте флаги -d и -т:
# usermod -d /serverl/home/aborg/ -m aborg
Изменение данных GECOS:
# chfn aborg
Пользователь может передать при вызове chfn данные GECOS по своему ус-
мотрению. Исключение составляют два поля: полное имя и «прочее». Содержи-
мое этих полей может редактироваться только суперпользователем.

Комментарий
Постарайтесь обойтись без изменения имени пользователя и кода UID, посколь-
ку такое изменение будет иметь общесистемные последствия. Если изменение все
же неизбежно, не забудьте отыскать все файлы, принадлежащие пользователю,
смените имя в домашнем каталоге пользователя и обновите данные о принадлеж-
ности к группам.
8.7. Удаление пользователя 117

Если заменить ключ -exec на -ok, команда find будет запрашивать подтвержде-
ние каждого изменения:
# find / -uid 1050 -ok chown -v 1200 {} \:
Трудно переоценить удобство такого применения find. Ключ -exec или -ok при-
казывает find выполнить следующую команду. Последовательность {} заменяется
именем текущего файла. Точка с запятой указывает, где завершается команда
chown, а символ \ «экранирует» точку с запятой, чтобы она не была обработана
командным процессором.

См. также
usermod(8), chfn(l); Файл жаргона (http://www.catb.org/~esr/jargon/).

8.7. Удаление пользователя


Проблема
Требуется удалить из системы учетную запись пользователя и найти все файлы,
принадлежащие этому пользователю.

Решение
Учетная запись удаляется командой userdeL. Поиск файлов, принадлежащих поль-
зователю, осуществляется командой find.
Удаление учетной записи:
# userdel aborg
Чтобы команда userdel сработала, пользователь не может находиться в систе-
ме, и под его именем не должны быть запущены процессы.
Команда userdel удаляет данные пользователя из всех системных файлов (/
etc/passwd, /etc/shadow, /etc/group), но не трогает файлы, принадлежащие этому
пользователю. Чтобы удалить домашний каталог пользователя и почтовый ящик,
добавьте флаг -г:
# userdel -г aborg
Другие файлы (такие, как crontab и файлы данных вне домашнего каталога)
приходится искать отдельно:
# find / -uid 1200

Комментарий
Правила удаления учетной записи — дело тонкое. Если вы работаете в своей до-
машней системе, делайте, что хотите. В коммерческих системах заранее изучите
политику своей компании. Всегда полезно сначала заблокировать учетную запись
работника и создать резервную копию принадлежащих ему файлов.

См. также
userdeL(8), find(l); раздел 8.9.
118 Глава 8. Управление пользователями и группами

8.8. Простое завершение процессов


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

Решение
Воспользуйтесь программой slay:
# slay foober
slay: -KILL is kicking foober's butt!
slay: Whoa. I have the power supreme.
Программа slay находит и уничтожает все процессы указанного пользователя,
благодаря чему вам не приходится искать и завершать их самостоятельно.

Комментарий
Традиционный метод поиска процессов, принадлежащих пользователю, основан
на использовании команды ps:
$ ps U 1007
или
$ ps U foober
3936 ? S 0:00 xchat
3987 ? S 0:00 /usr/lib/galeon-bin
4209 ? S 0:00 kdeinit: k i o _ f i l e f i l e /tmp/ksocket-carla/
klauncherkF21rc.siave-
После этого процессы приходится убивать по одному:
# kill 3936
# k i l l 3987
# k i l l 4209

См. также
slay(l), kill(l).

8.9. Блокировка учетных записей


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

Решение
Чтобы временно деактивировать учетную запись, заблокируйте пароль пользова-
теля ключом -I (lock):
8.10. Управление паролями 119

# passwd -I aborg.
Password changed.
Следующая команда снимает блокировку с учетной записи:
# passwd -u aborg

Комментарий
Еще один способ заблокировать учетную запись — вставить восклицательный знак
в начало поля пароля в файле /etc/shadow:
foobar:!$l$wiD1Qr34$mitGZA76MSYCY04AHIYl:12466:0:99999:7:: :
Также можно заменить х в поле пароля в файле /etc/passwd звездочкой (*):
foober:*:1025:1025:Foober Smith..,:/home/foober:/bin/bash
Наконец, можно лишить пользователя доступа к командному процессору:
# usermod -s /bin/false foober
И все же лучше всего придерживаться варианта с passwd -l и -и.

См. также
passwd(l), passwd(5).

8.10. Управление паролями


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

Решение
Операции назначения и настройки паролей осуществляются командой passwd.
Сброс или изменение пароля:
# passwd aborg
Пользователь также может сменить свой пароль:
aborg(s>server04:-$ passwd
Следующая команда ограничивает срок действия пароля aborg шестью месяца-
ми, с выдачей предупреждения за пять дней:
# passwd -х 180 -w 5 -1 I aborg
Чтобы просмотреть пароли пользователя, воспользуйтесь командой
# passwd -S option
aborg P 02/18/2004 0 10 5 1

Комментарий
Пароль может содержать цифры, буквы и знаки препинания, при этом они чув-
ствительны к регистру символов. Пробелы и функциональные клавиши не
120 Глава 8. Управление пользователями и группами

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


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

См. также
passwd(l), passwd(5).

8.11. Создание групп командой groupadd


Проблема
Требуется создать новую пользовательскую или системную группу. Все устанав-
ливаемые программы-серверы должны иметь свои учетные записи пользовате-
лей и групп.

Решение
Воспользуйтесь командой groupadd.
Команда создает новую группу по системным значениям, настроенным в /etc/
default/useradd и /etc/skeL/:
# groupadd newgroup
Системная группа создается с ключом -г:
# groupadd -r newgroup
Ключ -г является специфическим для Red Hat. Если в вашей версии groupadd
он не поддерживается, укажите следующий доступный номер системной груп-
пы:
# groupadd -g 127 newgroup
Следующий доступный номер группы можно узнать из файла /etc/group.

Комментарий
Рекомендуется использовать логически последовательную схему нумерации групп.
С точки зрения Linux это несущественно, но зато такая схема избавит вас от многих
хлопот. В Red Hat номера системных групп лежат в диапазоне 0-499, а в Debian —
в диапазоне 100-999. За дополнительной информацией о схемах нумерации об-
ращайтесь к разделу «Комментарии» в разделе 8.2.

См. также
groupadd(8).
8.13. Создание системного пользователя 121

8.12. Удаление групп командой groupdel


Проблема
Требуется удалить группу или группы, но при этом проследить за тем, чтобы в си-
стеме не осталось «бесхозных» файлов или пользователей.

Решение
Сначала, если потребуется, переназначьте номера групп редактированием файла
/etc/grou p. Просто скопируйте данные пользователей и вставьте их в другую груп-
пу. Затем удалите группу командой groupdel, после чего воспользуйтесь команда-
ми find и chgrp для поиска и передачи права владения файлами другой группе.
Удаление группы:
# groupdel имя_группы
Удаление группы считается хлопотной операцией, потому что не существует ути-
лит для автоматического переноса/удаления файлов или пользователей, входящих
в группу. Вам придется самостоятельно найти их и изменить коды GID вручную:
# find / -gid 750
/usr/src/i nclude/1ber.h
/usr/src/include/ldap.h
/usr/src/include/ldbm.h
Изменения можно вносить последовательно:
# chgrp 800 /usr/src/include/lber.h
А можно выполнить замену одновременно посредством совместного исполь-
зования find и chgrp:
# find / -gid 750 -exec chgrp -v 800 {} \;

См. также
groupdel(8), find(l), chgrp(l); раздел 8.6.

8.13. Создание системного пользователя


Проблема
Вы хотите знать, как создать системного пользователя для таких программ, как
Postfix, Apache или Squid. Для таких программ рекомендуется создать собствен-
ные учетные записи пользователей вместо того, чтобы на скорую руку «свалить»
их на универсального пользователя nobody.

Решение
Задача может быть решена как командой adduser, так и useradd. С adduser это дела-
ется примерно так:
# adduser --system --no-create-home --group squid
Adding system user squid...
122 Глава 8. Управление пользователями и группами

Adding new group squid (109).


Adding new user squid (109) with group squid
Not creating home directory
Проверьте результат:
# cat /etc/passwd | grep squid
squid:x:109:109::/home/squid:/bin/false
Хотя подстрока /home/squid присутствует, домашний каталог не создается.
А вот как то же самое делается в useradd:
# useradd -d /dev/nuil -g squid -s /bin/false squid

Комментарий
Многие демоны и процессы, которым необходима системная учетная запись, по
умолчанию используют nobody, но все больше приложений требует создания соб-
ственной уникальной учетной записи. Старайтесь использовать уникальную учет-
ную запись там, где это возможно, потому что это повышает уровень безопаснос-
ти системы. Учетная запись nobody чаще всего становится объектом хакерских
атак, поэтому собирать разнообразные процессы и демонов в единую цель для
атаки не стоит.

См. также
adduser(8), adduser.conf(5), useradd(8).

8.14. Создание системных групп


командой addgroup
Проблема
Требуется создать несколько новых системных групп с использованием сценария
addgroup.

Решение
Создание системных групп сценарием addgroup происходит следующим образом:
# addgroup - - system группа
В командной строке можно передать код GID, переопределяя значение по умол-
чанию. Не забудьте придерживаться схемы нумерации групп, принятой в вашем
дистрибутиве Linux (или в вашей организации):
# addgroup --system --gid 300 группе

См. также
addgroup(8); раздел 8.11.
8.16. Проверка целостности файлов паролей 123

8.15. Изменение принадлежности к группам


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

решение
Отредактируйте файл /etc/groups вручную. Просто скопируйте и вставьте запи-
си; это самый быстрый способ.
1 г

Комментарий
Для решения задачи также можно воспользоваться командами add user и usermod,
но будьте осторожны: adduser позволяет за один вызов включить пользователя
только в одну группу, а команда usermod, позволяющая перечислить несколько
групп, стирает прежние данные о принадлежности пользователя к группам.

См. также
adduser(8), usermod(8).

8.16. Проверка целостности файлов паролей


Проблема
Файлы паролей (/etc/group, /etc/passwd, /etc/shadow и /etc/gshadow) интенсивно
используются в процессе администрирования, и вам нужно какое-нибудь сред-
ство для проверки правильности их синтаксиса. Было бы неприятно узнать о до-
пущенной ошибке (например, о том, что вы забыли назначить кому-то пароль)
после того, как ваша система будет взломана!

Решение
Файлы /etc/passwd и /etc/shadow проверяются командой pwck, а файлы /etc/group
и /etc/gshadow — командой grpek:
# pwck
# grpek
Если команда завершается без выдачи сообщений, значит, ошибки не обнару-
жены. В противном случае команда выводит перечень ошибок. Ошибки нужно
будет исправить, иначе работа программы завершится. Чтобы ограничиться про-
смотром всех ошибок, запустите программу в режиме «только чтения»:
# pwck -r
# grpek -г
124 Глава 8. Управление пользователями и группами

Комментарий
Программа pwck проверяет логическую целостность файлов /etc/passwd и /etc/
shadow. Она последовательно анализирует записи и проверяет, что каждая запись
содержит:
О правильное количество полей;
О уникальное имя пользователя;
О действительные идентификаторы пользователя и группы;
О действительную первичную группу;
О действительный домашний каталог;
О действительный командный процессор.
Pwck сообщает обо всех записях, не имеющих пароля. Мне очень нравится фор-
мулировка в man-странице: «Проверки правильности количества полей и уни-
кальности имени пользователя являются фатальными». Нечего сказать, хорошая
реклама! Но не волнуйтесь — вы в полной безопасности, и вызов pwck ничему не
повредит.
Когда pwck обнаруживает ошибку, вы можете либо удалить учетную запись,
либо проигнорировать ее. Во втором случае pwck прекращает работу и не прове-
ряет новые строки (за одним исключением: обнаружив повторяющееся имя, про-
грамма продолжит проверку даже в том случае, если вы не удалите учетную за-
пись).
Программа grpck анализирует файлы/etc/group и/etc/gshadow и проверяет, что
каждая запись содержит:
О правильное количество полей;
О уникальное имя группы;
О действительный список членов и администраторов.

См. также
pwck(8), grpck(8).

8.17. Серийное добавление


новых пользователей
Проблема
Требуется добавить сразу несколько учетных записей (вместо того, чтобы вво-
дить их по одной).

Решение
Воспользуйтесь сценарием mass_useradd. Это сценарий командного процессора,
поэтому он должен работать практически везде. Вам также понадобится сценарий
8.17. Серийное добавление новых пользователей 125

mass_passwd (листинг 8.2). Сохраните эти два сценария в одном каталоге. Также
следует установить утилиту pwgen, генерирующую пароли. Создайте список имен
и паролей в формате:
имя_пользователя: имя фамилия
Также можно добавить дополнительные данные GECOS:
dawns:Dawn Marie Schroder,,123-4567,trainers
Затем запустите сценарий mass_useradd (листинг 8.1). Сценарий создает записи
в /etc/passwd, /etc/group и /etc/shadow, домашние каталоги, персональные группы
и пароли, которые становятся недействительными после первого использования.
Следующая команда приказывает mass_useradd использовать список новых
пользователей из файла newusers с заменой/созданием выходного файла newLogins.txt:
sh mass_useradd < newusers > newlogins.txt
Присоединение новых имен и паролей к файлу newlogins.txt:
sh massuseradd < newusers » newlogins.txt
Помимо выходного файла, который представляет собой обычный список,
mass_passwd создает для каждого пользователя отдельный файл с инструкциями.
Инструкции распечатываются и раздаются пользователям. Эти файлы, а также
файл журнала хранятся в домашнем каталоге пользователя, запустившего сцена-
рий (обычно root):
# Is /root/mass passwds
dawns.passwd.txt nikitah.passwd.txt mass_passwd.log rubst.passwd.txt

Комментарий
В сценариях используются стандартные средства Shadow Suite, поэтому они лег-
ко настраиваются посредством регулировки параметров утилит, задействованных
в их работе.
Файл выходных данных выглядит так:
dawns shabaefi 1002
nikitah gohbinga 1003
rubst ahtoohaa 1004
В файл /etc/passwd добавляются записи вида
dawns:x:1002:1002:Dawn Mari Schroder,.123-4567,trainers:/home/dawns:/bin/bash
nikitah:x:1003:1003:Nikita Horse..123-4567,equine:/home/nikitah:/bin/bash
rubst:x:1004:1004:Rubs The Cat.101,,234-5678.,test:/home/rubst:/bin/bash

Листинг 8 . 1 . Программа mass_useradd


#!/bin/sh

##
# Использование:
# # sh mass_useradd < inputfile » new-passwords.txt
##
PATH=/usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin:$PATH

# Чтение строки входных данных.


# Формат входного файла: продолжение #
126 Глава 8. Управление пользователями и группами

Листинг 8.1 {продолжение)


# имя_пользователя : имя фамилия
# Чтобы в качестве разделителя использовалась запятая, замените
# IFS=":$IFS" на IFS=",$IFS"

while IFS=":$IFS" read username realname; do


# Сначала удаляем пустые строки и комментарии
case "Susername" in
'' | \#*) continue ;:
esac
# Чтение /etc/passwd и /etc/group и вычисление
# следующих свободных значений UID and GID.
# Программа начинает с {id=1000}, измените для своей системы
id=$({ getent passwd: getent group; } | cut -f3 -d: | sort -un
awk 'BEGIN { id=1000 }
$1 == id { id++ }
$1 > id { print id: exit }')
# Добавление новых пользователей в /etc/group и /etc/passwd.
# Создание домашних каталогов командой chmod 700
# Все параметры groupadd, useradd и chmod
# можно изменить в соответствии со спецификой системы.
groupadd -g $id Susername
useradd -m -c "$realname" -g $username -u $id Susername
chmod 700 /home/$username
# Назначение пароля. Для этой цели вызывается другой сценарий
# mass_passwd. который может использоваться независимо.
# Сценарий mass_passwd выводит имя пользователя, пароль
# и идентификатор пользователя.
$(dirname $0)/lmass_passwd -M Susername

done
Листинг 8.2. Программа mass_passwd
#! /bin/sh
# Каталог для сохранения файлов "username.passwd.txt"
# Если каталог не существует, он будет создан.
text_file_dir=$HOME/mass_passwds
log_file=mass_passwd.log

## Минимальный идентификатор для "обычных" пользователей


min_uid=1000
# Длина генерируемых паролей
pass_len=8
## Срок действия паролей (в днях)
pass_expire=90
и и и а я а и и и и и и и и а и и и а, и и и л и и и и и и и и
ТГТГТГТГ 7ГТГТГТГТГ7Г7Г7Г7Г7Г7Г7Г7Г7Г7Г7Г7ГТГ7ГТГ7ГПТГТГ7Г 7Г 7Г

# При желании отредактируйте текст между двумя строками


8.17. Серийное добавление новых пользователей 127

# Получение имени программы (скорее всего. "mass_passwd")


prog=${0##*/}
usage О {
echo "usage: $prog [-v] [-n] username ..."
echo " $prog [-v] [-n] [-g] groupname ..."
echo " $prog [-v] [-n] [-a]"
echo " -g change passwords of everyone in a group"
echo " -a change everyone's password"
echo " -v verbose"
echo " -n don't do i t . j u s t simulate (implies - v ) "
exit 0

short_usage 0 {
echo >&2 "usage: $prog [ - v ] [ - g ] [-a] name..."
echo >&2 " $prog -h f o r help"
exit 1

# echo something, but only i f i n verbose mode


vecho О {
t e s t -n "Sverbose" && echo "$(?"
}

# Построение случайного пароля.


ж
# Если программа pwgen доступна, используем ее -- она для этого
# предназначена и хорошо работает.
#
# Если программа недоступна, читаем /dev/urandom и отфильтровываем все
# символы, не являющиеся алфавитно-цифровыми, пока количество символов
# не окажется достаточным для пароля. Символы в "tr -d" определяют
# ASCII-коды (в восьмеричной записи) диапазонов удаляемых символов.
#
# Подобное использование /dev/urandom крайне неэффективно.
# но это несущественно,
randompass О {
pwgen $pass_len 1 2>&- ||
tr -d '[\000-\057][\072-\100][\133-\140][\173-\377]' < /dev/urandom |
dd bs=$pass_len count=l 2>&-
}

# Функция интерпретирует режим (пользователи / группы / серийная замена)


# и возвращает список имен пользователей
get_users О {
if [ -n "$all_mode" ]; then
getent passwd | awk -F: '{if ($3 >= '$min_uid') (print $1}}'
return
if [ -z "$group_mode" ]: then
echo "$@"
return

while [ -n "$1" ] : do -,
продолжение с
128 Глава 8. Управление пользователями и группами

Листинг 8.2 {продолжение)


g_ent=$(getent group "$1" 2>&-)
i f [ -z "$g_ent" ] : then
echo >&2 "warning: $1: group not found"
continue
fi
members=${g_ent##*:}
gid=${g_ents;:*}
gid=${gid##*:}
echo "$members" | tr '.' ' '
getent passwd | awk -F: '{if ($4 == '$gid') { print $1 } }'
shift
done

# Основной код
group_mode=; verbose^; all_mode=: simulate»: eol = ;
while [ -z "$eol" ]: do
case "$1" in
-g) group_mode=l: shift ::
-v) verbose=l: shift ;:
-a) all_mode=l: shift ::
-n) simulate=true: verbose=l: shift :;
-M) mass_out=l; shift :: # we're called from massjjseradd
-h | -? | --help) usage ;:
--) eol-1; shift ::
-*) short_usage :;
*) eol=l ::
esac
done
# Настройка безопасного окружения и каталога для текстовых файлов.
# предназначенных для вывода на печать.
PATH=/usr/sbin:/usr/bin:$PATH
umask 077
mkdi г -р $text_file_dir
cd $text_file_dir
processed=0
for u in $(get_users "$@"); do
vecho -n "generating password for $u..."
pass=$Crandompass)
echo "$u:$pass" | eval Ssimulate chpasswd
vecho -n "."
eval Ssimulate спаде -M $pass_expire -d 2003-01-01 $u
vecho -n "."
rm -f Su.passwd.txt
echo > Su.passwd.txt "\
Login name: $u
Password: Spass
Please log in and change your password: the system should
prompt you to do this when you log in. You can change your
8.18. Серийная замена паролей 129

password at any time with the 'passwd' command.


Choose a strong password - everyday words, birthdays,
names of people or animals, all these are too easy to guess.
Also, DO NOT give your password to anyone, ever. The IT
staff will never ask you for your password, and neither
should anyone else. You will be held responsible for all
activity done via your account.
_ —"
printf » $log_file "$(date) S!-12s XsWn" $u $pass
vecho "Spass"
if [ -n "$mass_out" ] ; then
uid=$(getent passwd $u | cut -f3 -d:)
echo -e "$u\\t$pass\\t$uid"
processed=$(expr $processed + 1)
done

i f [ $processed -gt 0 ] : then


test -z "$mass_out" &&
echo >&2 "Sprocessed password(s) reset - see $ t e x t _ f i l e _ d i r / $ l o g _ f i l e "
else
echo >&2 "no users specified - see '$prog -h' for help"
fi

См. также
bash(l), pwgen(l); домашняя страница программы pwgen (http://sourceforge.net/
proiects/pwgen/).

8.18. Серийная замена паролей


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

Решение
Воспользуйтесь сценарием mass_passwd из раздела 8.17. Сценарий позволяет за-
дать состав пользователей тремя разными способами:
# mass_passwd пользователь! пользователь? ...
# masspasswd -g группа группа...
# mass_passwd -a
В первом случае передается список имен пользователей, разделенных пробе-
лами.
Во втором случае изменяются пароли пользователей, входящих в указанные
группы.
В третьем случае изменяются все пароли из /etc/passwd.
130 Глава 8. Управление пользователями и группами

Сценарий mass_passwd генерирует для каждого пользователя отдельный файл с ука-


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

Комментарий
Ключ -п тестирует команду без ее фактического выполнения:
# ./masspasswd -v -g -n usergroup
generating password for dawns teivuphu
generating password for nikitah kohfahsh
2 password(s) reset - see /root/mass_passwd/mass_passwd.log
Пароли остаются прежними; выполнение команды в этом режиме всего лишь
проверяет параметры перед внесением изменений.

См. также
Раздел 8.17.

8.19. Серийное включение


пользователей в группы
Проблема
Требуется добавить большое количество пользователей в группу.

Решение
Вставьте список имен прямо в файл /etc/group.
Далее описан быстрый способ построения списка пользователей для вставки
в /etc/group. Он основан на схеме нумерации UID, позволяющей легко отсортиро-
вать нужную группу пользователей. Для примера воспользуемся схемой «Trainers/
Coaches/Players», описанной в разделе 8.2. Добавим в группу Trainers несколько
новых членов:
$ awk -F: '($3 >= 1050) && ($3 <= 1060) { print $1}' /etc/passwd | tr '\n' '.'
bcool. bk i nd, fmow. kthxbye. oknodo
Теперь скопируйте и вставьте список в /etc/group.
А если в вашей системе нет аккуратной, четкой схемы нумерации UID? Вос-
пользуйтесь данными GECOS. Выберите одного из полей для хранения метки.
Поле «прочее» лучше всего подходит для этой цели, поскольку пользователи не
могут изменять его по своему усмотрению. Оно находится в данных GECOS —
пяти полей, разделенных запятыми. Данные GECOS выглядят примерно так:
bcool:х:1300:1300:Bob Cool trainer:/home/bkind:/bin/bash
bkind:x:1055:1055:Bev Kind trainer:/home/bkind:/bin/bash
После добавления меток выборка пользователей легко производится при по-
мощи grep и awk:
$ cat /etc/passwd grep trainer awk -F: '{ print $1}' | tr '\n' ','
bkind.bcool.
8.20. Временное использование привилегий root 131

См. также
passwd(5), awk(l).

8.20. Временное использование


привилегий root
Проблема
Будучи добропорядочным пользователем Linux, вы понимаете, как валено исполь-
зовать минимальные привилегии, необходимые для выполнения работы. Вы зна-
ете, что суперпользователь root всемогущ, и поэтому работаете в качестве root
только тогда, когда это абсолютно необходимо. Как временно переключиться на
учетную запись root?

Решение
Когда потребуется выполнить какую-нибудь административную операцию, вос-
пользуйтесь командой su (Switch User):
carla(?windbag:~$ su
Password:
root$wi ndbag:/home/carl a#
Затем вернитесь к своей «основной личности»:
root@windbag:/home/carla# exit
carla@windbag:~$
Переключение на root с восстановлением конфигурации окружения и команд-
ного процессора root:
carlaPwindbag:~$ su •
Password:
root$windbag:/home/carla~#
Переход на другой командный интерпретатор:
$ su - --shell=tcsh
Password:
Доступные командные процессоры перечислены в /etc/shells.

Комментарий
Команда su позволяет переключиться на любую учетную запись, пароль которой
вам известен.
Дефис после su существенно влияет на результат выполнения команды. Без
дефиса команда сохраняет старую системную конфигурацию и переменные окру-
жения — командный процессор, редактор по умолчанию, пути и umask.

См. также
132 Глава 8. Управление пользователями и группами

8.21. Временное предоставление


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

Решение
Воспользуйтесь sudo — командой, которая предоставляет ограниченные права root
конкретным пользователям для решения конкретных задач и регистрирует их
действия без сообщения пароля root.
Допустим, имеется пользователь jhaugh, которому вы хотите предоставить пол-
ные права root. Поскольку пользователи sudo имеют собственные пароли, пароль
root остается защищенным. Отредактируйте файл /etc/sudoers командой visudo —
файл открывается в редакторе по умолчанию.
# visudo
# Файл sudoers
#
# Этот файл ДОЛЖЕН редактироваться командой 'visudo'
# с правами root.
# За дополнительной информацией о записи в файл
# sudoers обращайтесь к man-странице.
#
# Спецификация псевдонимов хостов
# Спецификация псевдонимов пользователей
# Спецификация псевдонимов команд
# Спецификация привилегий пользователей
root ALL=(ALL) ALL
Для начала создайте псевдоним хоста:
Host_Alias LOCALHOST= local host
В секции «Спецификация привилегий пользователей» («User privilege specifi-
cation») добавляются отдельные пользователи:
jhaugh ALL=(ALL) ALL
Эта строка предоставляет jhaugh привилегии root для выполнения любых опе-
раций в системе и на подключенных компьютерах. Допустим, вы хотите предо-
ставить другому пользователю tgwynne привилегии root только на локальном ком-
пьютере. Включите следующую запись:
tgwynne LOCALHOST = ALL
А пользователю msmith разрешается только выключение локального компьютера:
msmith LOCALHOST=/sbin/shutdown, /sbin/halt
8.21. Временное предоставление привилегий root командой sudo 133

Предоставление группам обычных пользователей права выключения своих


компьютеров:
# Спецификация псевдонимов хостов
Host_Alias LOCALHOST = local host
# Спецификация псевдонимов пользователей
User_Alias USERS = tgwynne. msmith. jhaugh, \
abyron. jwinters
# Спецификация псевдонимов команд
Cmnd_Alias SHUTDOWN - /usr/sbin/shutdown, /usr/sbin/halt. \
/usг/sbin/reboot, /usr/sbin/poweroff
# Спецификация привилегий пользователей
USERS LOCALHOST = SHUTDOWN
Вызов команды sudo выглядит так:
$ sudo /usr/sbin/halt
Команда запрашивает у пользователей их пароли, после чего завершается. Что-
бы узнать, выполнение каких команд им разрешено, пользователи могут выпол-
нить следующую команду:
$ sudo -1
User jhaugh may run the following commands on this host:
(ALL) ALL
Команда sudo фиксирует ошибки в системном журнале и передает сообщение root:
$ sudo /usr/sbin/halt
carl a is not in the sudoers file. This incident will be reported.
Вы можете определять группы серверов и предоставлять пользователям при-
вилегии для группы:
# Спецификация псевдонимов хостов
Host Alias FILESERVERS - hostl. host2. host3
# Спецификация псевдонимов пользователей
User_Alias FILESERVERADMINS = jhaugh. abyron. jwinters
# Спецификация псевдонимов команд
Cmnd_Alias FILEUTILS = /bin/chgrp. /bin/chmod, \
/bin/chown, /bin/cp. /bin/dd. /bin/df. \
/bin/dir, /bin/dircolors. /bin/du. /bin/install. \
/bin/In. /bin/Is, /bin/mkdir, /bin/mkinfo, \
/bin/mknod, /bin/mv, /bin/rm. /bin/rmdir. \
/bin/shred, /bin/touch, /bin/vdir sync
# Спецификация привилегий пользователей
FILESERVADMIN FILESERVERS = FILEUTILS

Комментарий
Команда sudo также может применяться для запуска пользователями сценариев (на-
пример, сценариев архивации). Будьте очень осторожны со сценариями, а также с ко-
мандами, предоставляющими доступ к командному процессору или запускающими
134 Глава 8. Управление пользователями и группами

текстовые редакторы, так как с их помощью пользователи могут выйти за пределы


своих привилегий. Попробуйте ограничить sudo-пользователей RJOE — ограни-
ченным редактором, который не позволяет запустить командный процессор, но
лучше с самого начала хорошенько продумать механизм предоставления прав root.

См. также
su(l), sudo(8), sudoers(5); главная страница sudo (http://www.courtesan.com/sudo/).

8.22. Дисковые квоты


Проблема
Требуется ограничить объем дискового пространства, которое может быть занято
пользователем. Во многих системах встречаются нарушители, забивающие свои
диски коллекциями МРЗ-файлов и телесериалами.

Решение
Воспользуйтесь пакетом Linux Disk Quota. Пакет содержит ряд компонентов, в том
числе quota, edquota, quotacheck и repquota.
Сначала отредактируйте файл /etc/fstab и выберите разделы, для которых бу-
дут установлены квоты. Квоты могут устанавливаться как для отдельных пользо-
вателей (usrquota), так и для групп (grpquota). Оба вида квот могут действовать
одновременно:
/dev/hda6 / ext3 defaults 01
/dev/hda7 /home ext3 defaults,usrquota,grpquota 0 1
Перемонтируйте файловую систему:
# mount -о remount /home
Сценарий Quota init запускает программу quotacheck, которая анализирует си-
стему, создает базу данных использования дискового пространства и создает фай-
лы квот.
Затем назначьте квоты пользователям. При этом файл конфигурации откры-
вается в редакторе по умолчанию:
# edquota -u vhenson
Disk quotas for user vhenson (uid 1550):
Filesystem blocks soft hard inodes soft hard
/dev/hda7 550466 0 0 47466 0 0
Мягкое ограничение (soft limits) предоставляет нарушителю отсрочку с выда-
чей предупреждений. Жесткое ограничение (hard limits) вступает в силу немед-
ленно. Чтобы задать ограничение, просто отредактируйте файл:
# edquota -u vhenson
Disk quotas for user vhenson (uid 1550):
Filesystem blocks soft hard inodes soft hard
/dev/hda7 550466 650000 700000 47466 0 0
БЛОКИ всегда имеют размер 1024 байта, поэтому 650 000 блоков составляют
около 665 Мбайт.
8.22. Дисковые квоты 135

Сохраните и закройте файл. Убедитесь в том, что квота вступила в силу:


# quota vhenson
Disk quotas for user vhenson (uid 1550): 650000 700000
Назначение квот группам осуществляется следующим образом:
# edquota -g engineers
Если жадный пользователь использует всю групповую квоту, значит, группе
не повезло — другим ничего не остается.
Следующая команда вызывает редактор по умолчанию для назначения отсроч-
ки для мягких ограничений во всей файловой системе:
# edquota -t
Grace period before encforcing soft l i m i t s for users:
Time units may be: days, hours, minutes, or seconds
Filesystem Block grace period Inode grace period
/dev/hda3 7days 7days
Один из пользователей может использоваться в качестве «прототипа» для оп-
ределения квот нового пользователя:
# edquota -p vhenson dnorth
или сразу нескольких новых пользователей:
# edquota -p vhenson "awk -F: '$3 > 999 {print $1}' /etc/passwd"
Также можно перечислить сразу нескольких пользователей:
# edquota -p vhenson dnorth jvesperman sanvin
Несомненно, вы захотите следить за использованием квот. Следующая коман-
да выводит общесистемный отчет о текущем расходовании дискового простран-
ства:
# repquota -a
Чтобы ограничиться конкретной файловой системой, используйте команду:
# repquota /home

Комментарий
Включите следующую строку в сценарий mass_useradd, после строки chmod, что-
бы квота пользователя vhenson автоматически применялась для всех новых пользо-
вателей:
/usr/sbin/edquota -p vhenson Susername
Команду add user можно настроить на автоматическое назначение квот для но-
вых пользователей. Отредактируйте файл adduser.conf:
QUOTAUSER="vhenson"

А теперь плохие новости: Quota сейчас находится в переходной фазе. Код Quota
в ядрах версий 2.2 и 2.4 устарел и не подходит для современных версий Quota.
Если в ваш дистрибутив включена «заплатка» ядра — считайте, вам повезло. Впро-
чем, вы сможете быть полностью уверены в этом лишь после того, как установите
и настроите Quota и назначите квоту пользователю. Если дистрибутив не содержит
готовые к запуску версии Quota, вероятно, вам придется устанавливать целую
серию «заплаток» ядра. Подробные инструкции приведены в документе «Quota
mini-HOWTO».
136 Глава 8. Управление пользователями и группами

На момент написания книги надежная реализация ReiserFS с поддержкой Quota


существовала только в SuSE.« Заплатки» ReiserFS для других дистрибутивов можно
загрузить с домашней страницы ReiserFS по адресу http://www.namesys.com.
К счастью, ядро 2.6 полностью поддерживает Quota.
После решения проблем с ядром вашим следующим шагом должна стать уста-
новка новейшей версии Quota. Лучше всего найти RPM для вашей системы (поль-
зователи Debian используют apt-get install quota), в этом случае в вашем распоря-
жении появятся настроенные и готовые к использованию сценарии init. Если вы
предпочитаете настраивать сценарии init самостоятельно, обращайтесь к инструк-
циям в документе «Quota mini-HOWTO».

См. также
man(l) quota, man(8) edquota, man(8) quotacheck, man(8) repquota; сценарий mass_useradd
(раздел 8.17); Quota mini-HOWTO (http://www.tldp.org/HOWTO/Quota.htmL); домаш-
няя страница проекта Quota (http://sourceforge.net/projects/linuxquota/); домашняя
страница ReiserFS (http://www.namesys.com).
Глава 9
Операции с файлами
и разделами

9.1. Введение
Хорошее понимание основных принципов работы файловых систем абсолютно
необходимо для понимания того, как работает Linux. В системе все объекты ин-
терпретируются как файлы — файлы данных, разделы, каналы (pipes), сокеты и ус-
тройства. Каталог также представляет собой файл, содержащий информацию
о других файлах.
Спецификация иерархии файловых систем (FHS, Filesystem Hierarchy Stan-
dard) была разработана как «добровольный стандарт», соблюдаемый в большин-
стве версий Linux. Далее перечислены обязательные элементы корневой файло-
вой системы Linux:
/ — корневой каталог;
/bin — важнейшие системные команды;
/boot — файлы статического загрузчика;
/dev — файлы устройств;
/etc — системные конфигурационные файлы, специфические для хоста;
/lib — общие библиотеки, необходимые для работы локальной системы;
/mnt — временные точки монтировки;
/opt — дополнительные программные пакеты (в Linux используются мало);
/ргос — текущая информация о конфигурации и состоянии ядра;
/sbin — команды администрирования системы;
/tmp — временные файлы (в нормальных системах они уничтожаются между
перезапусками);
/usr — общие файлы, данные только для чтения и двоичные файлы;
/var — файлы переменного размера (такие, как почтовые ящики и журналы).
Следующие каталоги считаются необязательными, потому что они могут на-
ходиться в любом месте сети, тогда как обязательные каталоги должны присут-
ствовать для нормальной работы компьютера:
/home — личные файлы пользователя;
/root — личные файлы суперпользователя.
138 Глава 9. Операции с файлами и разделами

Те, кого действительно заинтересует эта тема, найдут дополнительную инфор-


мацию в спецификации FHS. Вот лишь некоторые обстоятельства, которые долж-
ны учитывать пользователи Linux:
О каталоги /tmp и /var могут размещаться в отдельных разделах с целью повы-
шения безопасности. Если вследствие каких-то сбоев начнется неконтроли-
руемое заполнение этих каталогов, они будут изолированы от остальных ком-
понентов системы;
О каталог /home может находиться в собственном разделе или на выделен-
ном сервере для упрощения создания резервных копий и защиты данных
при обновлении системы. В этом случае содержимое /home останется не-
тронутым даже после полного уничтожения и переустановки системы
Linux;
О хранение всех конфигурационных файлов в /etc и /home упрощает создание
резервных копий. Вы можете ограничиться архивацией только содержимого
/etc и /home, а остальные компоненты восстановить с установочных дисков
системы. Но это будет означать, что при восстановлении будут потеряны об-
новления программ — учтите это обстоятельство при разработке чрезвычай-
ных планов.

Типы файлов Linux


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

Таблица 9.1. Типы файлов

Признак типа Тип файла


Обычный файл

Каталог

Ссылка

с Символьное устройство

s Сокет

р Именованный канал
b Блочное устройство

Признак типа выводится в самом начале записи в списке файлов:


# Is -1 /dev/initctl
prw 1 root root 0 Jan 12 00:00 /dev/initctl
# Is -1 /tmp/.ICE-unix/551
srwx- 1 caria caria 0 Jan 12 09:00 /tmp/.ICE-unix/551
Тип файлов может указываться в командной строке find:
# find / -type p
# find / -type s
Если поиск занимает слишком много времени, работу команды можно пре-
рвать клавишами Ctrl+C.
9.1. Введение 139

Атрибуты файлов
Также стоит обратить внимание на атрибуты файла — например, сценария sortusers:
# Is -I sortusers
-rwxr-xr-x 1 meredydd programmers 3783 Jan 7 13:29 sortusers
Строка -rwxr-xr-x 1 meredydd programmers сообщает программисту много полез-
ных сведений:
О первый символ — является признаком обычного файла. Этот атрибут не мо-
жет изменяться пользователем. По этому признаку Linux определяет тип фай-
ла, поэтому с точки зрения системы расширение является лишним. Расшире-
ния нужны только для пользователей и приложений;
О подстрока rwx задает разрешения владельца файла;
О первая подстрока r-х задает разрешения владельца группы;
О вторая подстрока r-х задает разрешения для «всего мира», то есть для каждого,
кто имеет доступ к файлу;
О 1 — количество жестких ссылок на файл. У каждого файла имеется как мини-
мум одна ссылка из родительского каталога;
О в подстроке meredydd programmers содержится владелец файла и группа, кото-
рой принадлежит файл.
Разрешения и права владения могут изменяться командами chmod, chgrp и chown;
команда chmod изменяет разрешения, а команды chown и chgrp меняют права вла-
дения. Запись rwx на первый взгляд выглядит странно, но в действительности это
мнемоника: rwx=Read, Write, eXecute. В этом формате задаются разрешения для
владельца, группы и всех остальных.
Таким образом, в примере sortusers пользователю meredydd разрешается чте-
ние, запись и исполнение файла. Члены группы и прочие могут только читать
и исполнять файл. Хотя отредактировать файл может только сам пользователь
meredydd, ничто не мешает членам группы и другим пользователям скопировать
его содержимое.
Файл является сценарием командного процессора, для него приходится зада-
вать как права чтения, так и права исполнения, потому что командному процессору
требуется прочитать файл. Двоичные файлы читаются непосредственно ядром без
участия командного процессора, поэтому для них право чтения не обязательно.

Определения типов файлов


Далее типы файлов Linux будут представлены чуть более подробно.
О Обычные файлы — обычные текстовые файлы, файлы данных или двоичные
исполняемые файлы.
О Каталоги — списки файлов.
О Символьные и блочные устройства — файлы, которые могут рассматриваться
как промежуточные точки между ядром и драйверами устройств — напри-
мер, /dev/hda (жесткий диск IDE), /dev/ttySl (модем для последовательного
порта) и т. д. Они используются ядром для перенаправления запросов к раз-
личным устройствам системы.
140 Глава 9. Операции с файлами и разделами

О Локальные сонеты — связи между локальными процессами. Локальные соке-


ты отображаются как файлы, но запись и чтение в них возможны лишь со
стороны процессов, напрямую задействованных в передаче данных.
О Именованные каналы — также используются для локальных межпроцессных
коммуникаций. Крайне маловероятно, чтобы пользователю Linux когда-либо
пришлось иметь дело с сокетами или каналами; они используются исключи-
тельно системными функциями.
О Ссылки — ссылки представляют огромный интерес для пользователей Linux.
Они делятся на два типа: жесткие и мягкие. Ссылка представляет собой указа-
тель на файл. Жесткая ссылка в действительности может рассматриваться
как другое имя файла, поскольку она указывает на конкретный i-узел (mode).
Все жесткие ссылки, указывающие на файл, наследуют все атрибуты этого
файла — разрешения, владельца и т. д. Команда rm удаляет жесткие ссылки,
но файл остается на диске до тех пор, пока не будут уничтожены все жесткие
ссылки на него, и файл не будет освобожден всеми процессами. Жесткие ссыл-
ки не могут выходить за пределы файловой системы, поэтому вам не удастся
создать жесткую ссылку на сетевой диск. Мягкие ссылки связываются с име-
нем файла; они могут указывать на любой файл, находящийся где угодно.
В системе даже могут существовать «висячие» мягкие ссылки; они появляют-
ся после удаления файлов, на которые они указывают, или их переименования.

Внутреннее строение файловой системы


Приведу еще ряд полезных определений, относящихся к файловым системам.
Логический блок — минимальная единица хранения информации (в байтах),
которая может выделяться файловой системой. Один файл может состоять из не-
скольких блоков.
Логический том — раздел диска, диск или том, состоящий из нескольких дис-
ков или разделов, — любая единица хранения данных, воспринимаемая как еди-
ное, обособленное пространство.
Внутренняя фрагментация — неиспользуемые места, возникающие, когда файл
или его часть заполняет блок лишь частично. Например, если размер блока равен
4 Кбайт, а файл занимает 1 Кбайт, то 3 Кбайт теряются.
Внешняя фрагментация — фрагментация, возникающая в том случае, если бло-
ки, относящиеся к одному файлу, не занимают смежную область, а рассеиваются
по всему диску.
Экстент — смежные блоки, принадлежащие одному файлу. Файловая систе-
ма воспринимает экстент как единое целое, что повышает эффективность отсле-
живания больших файлов.
В+-деревъя — сначала появились b-деревья (сбалансированные деревья). После
усовершенствования они превратились в Ь+-деревья. Эти удобные структуры дан-
ных, позаимствованные из теории индексирования баз данных, заметно ускоря-
ют поиск и перебор в структурах данных. Файловые системы, использующие эту
концепцию, могут быстро просканировать дерево каталогов, сначала выбрать нуж-
ный каталог, а затем просканировать его содержимое. Файловая система ЕхГ2
выполняет последовательный поиск, который работает медленнее.
9.1. Введение 141

Метаданные — термин, объединяющий все данные, которые описывают или


управляют внутренними структурами данных. К этой категории относится вся
информация о файле, кроме его непосредственного содержимого: дата и время,
владелец, группа, разрешения, размер, ссылки, время модификации, время досту-
па, местонахождение на диске, расширенные атрибуты и т. д.
1-узел — большая часть метаданных файла содержится в i-узле, или индексном
узле. Каждому файлу ставится в соответствие уникальный номер i-узла.

Журнальные файловые системы


Старая добрая файловая система Ext2 постепенно дряхлеет. Она уже не поспева-
ет за пользователями, которым нужны терабайты дискового пространства, и не
обеспечивает быстрого восстановления в случае сбоев. Для большинства пользо-
вателей, у которых объем данных измеряется гигабайтами и менее, важнейшими
причинами для перехода на журнальную файловую систему являются быстрое
восстановление и целостность данных.
Файловые системы Linux асинхронны. Они не записывают метаданные прямо
на диск, а накапливают данные в кэше записи в памяти и осуществляют запись пери-
одически, в моменты низкой загрузки процессора. Такая схема повышает общее
быстродействие системы, но сбой питания или системы может привести к потере
метаданных. Если это произойдет, при активации драйвера файловой системы во
время перезапуска и при выполнении программы fsck (FileSystem Consistency checK)
будут обнаружены несоответствия. Поскольку Ext2 хранит несколько экземпляров
метаданных, обычно ей удается восстановить нормальное состояние системы.
Но у такого подхода есть недостаток — время восстановления. Fsck проверяет
абсолютно все биты метаданных. На это может потребоваться от нескольких минут
до получаса и более для больших файловых систем. Журнальным файловым системам
столь долгая проверка не нужна, потому что они ведут журналы изменений. Таким
образом, проверяются только изменившиеся файлы, а не вся файловая система.
В распоряжении пользователей Linux имеется немало замечательных журналь-
ных файловых систем, в том числе Ext3, ReiserFS, XFS и JFS. Ext3 — журнальная
система на базе Ext2. Системы ReiserFS, XFS и JFS способны работать с файло-
выми системами, объем которых на 64-разрядных платформах измеряется экза-
байтами. К сожалению, пользователи ia32 ограничены обычными терабайтами.
Какую файловую систему выбрать? Не существует однозначно лучшего вари-
анта; все они хороши по-своему. Далее приводится краткая сводка основных дос-
тоинств и недостатков.
Ext3 — система отличается простотой и удобством. Она прекрасно устанавли-
вается поверх Ext2, поэтому вам не придется строить систему с самого начала.
Система является расширением Ext2, поэтому она использует тот же пакет фай-
ловых утилит, e2fsprogs. Принципиальное отличие Ext3 от других файловых сис-
тем заключается в том, что она использует фиксированное количество i-узлов,
тогда как в других системах узлы создаются динамически. Кроме того, Ext3 поддер-
живает ведение журналов данных, а не только метаданных. Впрочем, за это при-
ходится расплачиваться более низкой производительностью и дополнительными
расходами дискового пространства. Ext3 работает в любой архитектуре, поддер-
живаемой системой Linux.
142 Глава 9. Операции с файлами и разделами

ReiserFS — система особенно хорошо подходит для систем с большим количе-


ством мелких файлов (например, почтовых серверов, использующих формат maildir,
или серверов новостей). ReiserFS обеспечивает высокоэффективное хранение фай-
лов; остаточные биты файлов упаковываются в листовые узлы b-дерева, что пре-
дотвращает напрасное расходование дискового пространства. Система отлично
масштабируется и так нее хорошо справляется с большими файлами. ReiserFS ра-
ботает в любой архитектуре, поддерживаемой системой Linux.
JFS — вклад IBM в Большое Соревнование Файловых Систем Linux; система
портирована из AIX и OS/2 Warp. Она поддерживает многопроцессорные систе-
мы, списки управления доступом (ACL) и даже — представьте! — динамическое
изменение размеров. Просто перемонтируйте файловую систему JFS с новым раз-
мером, и ничего больше делать не придется (правда, таким образом можно только
увеличить тома, но не уменьшить его).
XFS — разработка SGI, портированная из IRIX. XFS мыслит масштабно — за-
явлено, что она способна работать с файловыми системами объемами до 9 экза-
байт. Ее сильной стороной является обработка очень больших файлов (скажем,
гигантских баз данных). У XFS имеется одна превосходная функция, называемая
отложенным распределением. Система откладывает запись на диск и выбор блока
для записи, чтобы выбрать наибольшее возможное количество смежных блоков.
Если в системе используется большое количество временных файлов с коротким
сроком жизни, XFS может вообще никогда не выделить блоки под эти файлы.
XFS обладает интегрированной поддержкой дисковых квот, ACL, архивации и вос-
становления.

См. также
JFS (http://www-124.ibm.com/jfs/); XFS (http://oss.cgi.com/projects/xfs/); ReiserFS
(http://www.namesys.com); Ext2/3 (http://e2fsprogs.sourceforge.net/ext2.html); File-
system Hierarchy Standard (http://www.pathname.com/fhs/).

9.2. Настройка разрешений


в числовом формате chmod
Проблема
Требуется контролировать доступ к файлу. Допустим, вы хотите удержать сек-
ретный рецепт соуса подальше от посторонних, или у вас имеется конфиденци-
альная информация, нуждающаяся в защите. А может (что более вероятно), по-
требовалось разрешить исполнение некоторого файла. В любом случае потребуется
задать разрешения для файлов, но сначала нужно разобраться, как вычисляются
числовые коды разрешений.

Решение
Воспользуйтесь командой chmod (CHange MODe). Смена разрешений может вы-
полняться только суперпользователем (root) и владельцем файла.
9.3. Выполнение массовых операций командой chmod 143

Например, следующая команда предоставляет владельцу файла доступ для чте-


ния и записи к файлу /archive/datafile. Ни один другой пользователь, кроме root,
вообще не сможет обратиться к этому файлу:
$ chmod -v 600 /archive/datafile
mode of '/archive/datafile' changed to 0600 (rw )
В следующем примере владелец файла /shared/list разрешает его чтение всем
желающим, но изменения в файл могут вноситься только владельцем файла и root:
$ chmod -v 644 /shared/list
mode of '/archive/datafile' changed to 0644 (rw-r--r--)
Чтобы сценарий можно было запустить, в атрибутах файла необходимо уста-
новить бит исполнения. Следующая команда разрешает редактирование сцена-
рия только пользователю, а чтение и исполнение — всем желающим:
$ chmod 755 /shared/somescript
У каталогов бит исполнения всегда должен быть установлен, иначе они не бу-
дут работать:
$ chmod 755 /shared
Назначение разрешений каталогу со всем содержимым, включая подкаталоги,
производится с ключом -R. Ключ -v включает режим подробного вывода, чтобы
вы видели, какие действия выполняет команда:
% chmod -R -v 755 /shared

Комментарий
Файловые разрешения вычисляются по табл. 9.2. Просуммируйте нужные значения
для каждого типа пользователей, а затем перечислите их в порядке следования в та-
блице: владелец, группа, прочие. Специальные биты рассматриваются в разделе 9.7.

Таблица 9.2. Вычисление файловых разрешений


Специальные биты Разрешение Владелец Группа Прочие

setuid 4 Чтение 4 4 4

setuid 2 Запись 2 2 2
setuid 1 Исполнение 1 1 1

См. также
info chmod.

9.3. Выполнение массовых операций


командой chmod
Проблема
Требуется задать разрешения для всех файлов в каталоге или для группы файлов.
144 Глава 9. Операции с файлами и разделами

Решение
Команда chmod поддерживает операции со списками файлов. Для построения спис-
ков можно воспользоваться командой find или метасимволами командного про-
цессора.
Следующая команда делает несколько файлов доступными только для чтения
для всех пользователей:
$ chmod 444 f i l e . t x t file2.txt file3.txt
Чтобы сделать все файлы текущего каталога доступными для чтения/записи
для владельца и группы, но без изменения разрешений самого каталога, восполь-
зуйтесь командой:
$ find . -type f -exec chmod -v 660 {} \:
Назначение разрешений для каталога и всего содержимого, включая подкаталоги:
$ chmod -R -v 755 /shared
В следующем примере чтение/запись всех файлов с расширением .txt в теку-
щем каталоге разрешается владельцу, а всем остальным разрешается только чте-
ние:
$ chmod -v 644 * . t x t
Изменение всех файлов текущего каталога, начинающихся с определенного
префикса:
$ chmod -v 644 a p t *

См. также
info chmod.

9.4. Настройка разрешений


в символьном формате chmod
Проблема
Требуется установить некоторые биты разрешений, сохранив значения осталь-
ных битов. Числовые форматы chmod позволяют задавать только все биты разре-
шений одновременно.

Решение
Самым распространенным применением символических обозначений chmod яв-
ляется добавление бита исполнения в атрибуты файла без изменения остальных
разрешений:
$ chmod +x сценарий
По умолчанию используется режим а (АН), поэтому данный пример разрешит
исполнение сценария всем пользователям. Следующая команда устанавливает бит
исполнения только для владельца файла:
9.4. Настройка разрешений в символьном формате chmod 145

* chmod u+x сценарий

Также существует возможность сброса отдельных битов. Следующая команда


лишает группу и прочих пользователей права исполнения:
$ chmod go-x сценарий
Быстрая установка бита setgid для каталога с целью создания общего каталога.
Все файлы, созданные в этом каталоге, будут принадлежать той же группе, что
и сам каталог:
$ chmod +s /общий-каталог
Сброс всех разрешений для группы и прочих пользователей:
$chmod go= сценарий
Следующая команда предоставляет группе те же разрешения, которыми обла-
дает владелец файла:
$chmod g=u сценарий

Комментарий
Символическая запись chmod порой бывает довольно сложной. Следующий при-
мер стирает все существующие разрешения и приводит их в исходное состоя-
ние:
$ chmod -v a=,u-rwx,g=rx,o=r сценарий
То же самое можно сделать командой chmod 754.
Символическая форма записи также называется мнемонической:
O r — чтение (Read);
О w — запись (Write);
О х — исполнение (Execute);
О X — файл должен уже обладать разрешениям исполнения или быть ката-
логом;
О s —назначение идентификатора пользователя или группы при исполнении —
опасно! Не используйте с исполняемыми файлами (по крайней мере, если вы
не до конца представляете, что делаете);
О t — бит закрепления;
О и - владелец файла;
О д — группа, которой принадлежит файл;
О о — прочие пользователи;
О + — добавление новых разрешений к действующим;
О = — замена действующих разрешений;
О сброс разрешений.

См. также
info chmod; раздел 9.7.
146 Глава 9. Операции с файлами и разделами

9.5. Назначение владельца файла


командой chown
Проблема
Требуется сменить владельца файла или каталога. Возможно, вы скопировали
какой-нибудь файл в другой каталог, но не можете отредактировать его без смены
владельца. Многие проблемы в Linux возникают из-за неправильно заданных раз-
решений или права принадлежности. В таких случаях сообщения вида «Permission
denied» и «File is read-only» появляются там, где их быть не должно.

Решение
Воспользуйтесь командой chown и смените владельца и/или группу, которой при-
надлежит файл:
# chown пользователь файл
# chown пользователь:группа файл
# chown :группа файл
Пример:
$ chown -v carlas:share index.txt
changed ownership of 'index.txt' to carlas:share
$ chown -v :share toc.txt
changed ownership of ' t o c . t x t ' to :share

Комментарий
Рядовые пользователи могут только вносить изменения в принадлежащие им
файлы и не могут передать право владения файлом другому пользователю. Тем
не менее пользователи могут изменять принадлежность к группам (при условии,
что они принадлежат как к исходной, так и к итоговой группе).

См. также
info chown.

9.6. Выполнение массовых операций


командой chown
Проблема
Требуется сменить владельца каталога и его содержимого, или только содержи-
мого, или файлов из списка, или передать право владения файла от одного кода
UID к другому.

Решение
Команда chown позволяет выполнять некоторые массовые операции. Также мож-
но воспользоваться командой find или метасимволами командного процессора.
9.7. Создание общих каталогов с использованием setgid и бита закрепления 147

Чтобы сменить владельца сразу для нескольких файлов, передайте список фай-
лов, разделенный пробелами:
# chown carlas file.txt file2.txt file3.txt
Список файлов также можно задать при помощи метасимволов командного
процессора:
# chown carlas *.txt
Следующая команда передает все файлы пользователя другому пользователю:
# chown -R -v --from valh piglet /shared/scripts
To же самое можно сделать при помощи команды find:
# find /-user valh -exec chown -v piglet {} \;
Команда find также дает возможность находить файлы по коду UID, что не
может сделать chown:
# find / -uid 1050 -exec chown -v 1200 {} \;
Смена владельца каталога со всеми подкаталогами и файлами, с подробным
выводом:
# chown -R -v piglet /shared/scripts:
changed ownership of 'scripts/backups.tgz' to piglet
changed ownership of 'scripts/fake-spec-rpm' to piglet
В команде можно использовать как имя пользователя, так и UID. Если учет-
ная запись пользователя была удалена и в системе остались «бесхозные» файлы,
то для их поиска придется использовать UID.
• •

См. также
info chown; раздел 8.6.

9.7. Создание общих каталогов


с использованием setgid
и бита закрепления

Проблема
Пользователям нужен общий каталог для обмена файлами. Вы хотите, чтобы все
общие файлы принадлежали одной группе.

Решение
Воспользуйтесь битом setgid для автоматического назначения файлов принадлеж-
ности к общей группе.
Вот как это делается в восьмеричной записи:
# chmod -v 2775 /общий-каталог
Также можно использовать символическую запись:
# chmod -v +s /общий-каталог
148 Глава 9. Операции с файлами и разделами

Учтите, что флаг +s устанавливает оба бита, setgid и setuid, что может создать
угрозу для безопасности, если в этом каталоге хранятся исполняемые файлы или
сценарии. Команда chmod 2775 устанавливает только бит setgid.
ВНИМАНИЕ
Бит setuid пробивает большую брешь в системе безопасности. Не используйте его для исполняемых
файлов. Программы, использующие его (например, /usr/bin/passwd), содержат внутренние меры
защиты для предотвращения эскалации привилегий и других нарушений. Если в системе имеются
сценарии, которые должны запускаться пользователями, создайте для этой цели специальную группу.

Установите статический бит (sticky bit), чтобы файл не мог быть удален ни-
кем, кроме владельца:
# chmod +t /общий_каталог
или
# chmod 3775 /общий_каталог
mm Ч

Комментарии
Все файлы, создаваемые в каталоге, принадлежат той же группе, что и сам ката-
лог. Все файлы, скопированные в каталог, сохраняют принадлежность исходной
группе. Чтобы разные пользователи могли работать с одним каталогом, они долж-
ны принадлежать к одной группе. Разрешения файлов, создаваемых в каталоге,
определяются масками umask владельцев.
Каталог /tmp является классическим примером каталога, использующего ста-
тический бит:
# stat /tmp
Access: (1777/drwxrwxrwt) Uid: ( 07 root) Gid: ( 0/ root)
Каталог /tmp должен быть общедоступным для чтения и записи, но мы не хо-
тим, чтобы пользователи или процессы удаляли чужие временные файлы. Про-
блема решается при помощи статического бита.
Бит setuid позволяет пользователям выполнить команду с такими же разрешения-
ми, как у владельца файла. Именно так рядовые пользователи могут изменять свои
пароли, хотя запись в файл /etc/passwd разрешена только суперпользователю root:
$ stat /usr/bin/passwd
File: '/usr/bin/passwd'
Size: 26584 Blocks: 56 10 Block: 4096 regular file
Access: (4755/-rwsr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root)

Комментарий
У статических битов есть еще одно применение. Давным-давно установка этого
бита для исполняемого файла приводила к тому, что файл оставался в памяти
после завершения его выполнения. В доисторическую эпоху Unix с примитив-
ным управлением памятью и слабосильным оборудованием это ускоряло запуск
программ. В наши дни об этом можно не думать.

См. также
info chmod; раздел 9.2.
9.8. Назначение разрешений по умолчанию с использованием маски umask 149

9.8. Назначение разрешений по умолчанию


с использованием маски umask
Проблема
Файлы создаются с некоторым стандартным набором разрешений по умолчанию.
Как задать эти разрешения?

Решение
Разрешения по умолчанию определяются маской umask. Чтобы узнать текущее
состояние маски, введите команду:
$ umask
0022
ИЛИ
$ umask -S
u=rwx,g=rx,o=rx
Чтобы временно назначить новую маску до конца текущего сеанса, введите
команду
$ umask 0002
Долгосрочное изменение маски umask обеспечивается включением строки umask-
хххх в файл -/.bashrc. Часто используемые значения umask перечислены в табл. 9.3.

Т а б л и ц а 9 . 3 . Часто используемые значения umask

Umask Пользователь Группа Прочие

0002 Все Все Чтение и исполнение


0022 Все Чтение и исполнение Чтение и исполнение
0007 Все Все Нет
0077 Все Нет Нет

Комментарий
В табл. 9.4 показано, как составить маску umask для любой комбинации разрешений.

Таблица 9.4. Все значения umask


Umask Разрешения файлов Разрешения каталогов
7 Нет Нет
6 Нет Исполнение
5 Запись Запись
4 Запись Запись и исполнение
3 Чтение Чтение
2 Чтение Чтение и исполнение
1 Чтение и запись Чтение и запись
О Чтение и запись Чтение—запись—исполнение
150 Глава 9. Операции с файлами и разделами

Когда программа (например, текстовый редактор или компилятор) создает


файл, она жестко кодируется на задание файловых разрешений 0666 или 0777.
Если программа знает, что создаваемый файл является исполняемым, она уста-
навливает разрешения 0777. На практике чаще всего используется значение 0666;
именно поэтому для сценариев приходится выполнять команду chmod +x. Как пра-
вило, ни 0666, ни 0777 не являются идеально подходящими, поэтому маска umask
исключает ненужные биты. Например, с назначением маски umask 0002 обычным
файлам будут назначаться разрешения 0664, а исполняемым — 0775.

9.9. Монтирование и демонтирование


съемных дисков
Проблема
Как вставлять и удалять съемные диски — дискеты, компакт-диски или флэш-
диски с интерфейсом USB?

Решение
Используйте команды mount и umount.
Пример монтирования дисковода CD-ROM:
# mount -г - t iso9660 /dev/scdO /cdrom
Ключ -г означает доступ только для чтения; ключ -t определяет тип файловой сис-
темы. Строка /dev/scdO определяет имя, назначаемое устройству ядром, /cdrom —
каталог, в котором монтируется устройство. Он должен присутствовать в системе
перед монтированием диска.
Тип файловой системы определяется командой file:
$ f i l e • < /dev/scdO
/dev/stdin: ISO 9660 CD-ROM filesystem data 'Datal
При монтировании диска CD-ROM ключ -г можно не указывать. Команда вы-
даст предупреждение, но диск смонтирует:
# mount -t iso9660 /dev/scdO /cdrom
mount: block device /dev/scdO is write-protected. mounting read-only
Следующая команда монтирует дискету для чтения/записи:
# mount -w /dev/fdO /floppy
Следующая команда монтирует флэш-диск с интерфейсом USB. Ключ noatime
должен использоваться для перезаписываемых носителей с ограниченным коли-
чеством операций перезаписи (таких, как CD/DVD-RW или флэш-диски):
# mount -w -о noatime /dev/sdal /memstick
Смонтированное устройство демонтируется командой
# umount /memstick
Возможно, вы получите ответ вида
# umount /memstick
umount: /memstick: device ns busy
9.10. Настройка монтирования файловых систем в /etc/fstab 151

Это означает, что приложение (командный интепретатор, файловый менеджер)


читает данные из файловой системы. Дополнительная информация выводится
командой Lsof (LiSt Open Files):
$ lsof /memstick
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
gs 938 dawnm 128r DIR 2.0 1024 12 /memstick/may-04.pdf
bash 938 dawnm 129r DIR 2.0 1024 24 /memstick
Далее можно либо закрыть приложения, либо убить их одной командой:
# kill -9 ' l s o f -t /memstick'
Команда mount может выполняться только суперпользователем root. Чтобы
другие пользователи могли монтировать съемные диски, необходимо отредакти-
ровать /etc/fstab (см. следующий раздел).

Комментарий
Ошибка umount «Device is busy» чаще всего возникает из-за наличия открытого
окна терминала, в котором смонтированное устройство является текущим рабо-
чим каталогом:
carla@wi ndbag:/f1oppy$
Очень важно, чтобы диск был демонтирован перед отключением. Это позво-
ляет системе завершить операции записи и обеспечить корректное отключение.
В более новых версиях Linux указывать тип файловой системы не обязатель-
но, поскольку команда mount автоматически распознает типы файловых систем.

См. также
mount(8); раздел 9.10.

9.10. Настройка монтирования


файловых систем в /etc/fstab
Проблема
Пользователям нужно записывать данные на компакт-диски, работать с флэш-
дисками и другими съемными устройствами. Давать им привилегии root толь-
ко для монтирования этих устройство нельзя, но только суперпользователь
root может использовать команды mount, описанные в разделе 9.9. Также тре-
буется выбрать файловые системы, автоматически монтируемые при загрузке
системы.

Решение
Добавьте в файл /etc/fstab записи с определением точек монтирования и разре-
шений доступа.
В следующем примере показан пример /etc/fstab с разделом Linux, двумя раз-
делами Windows и съемными носителями:
154 Глава 9. Операции с файлами и разделами

# /sbin/fdisk -1
Disk /dev/hda : 20.5 GE
i. 20576747520 bytes
255 heads. 63 sectors/track. 2501 cylinders
Units = cylinders of .6065
! * 512 = 8225280 bytes

Device Boot Start End Blocks Id System


/dev/hdal * 1 893 7172991 7 HPFS/NTFS
/dev/hda2 894 1033 1124550 с W95 FAT32 (LBA)
/dev/hda3 1034 2501 11791710 f W95 Ext'd (LBA)
/dev/hda5 2437 2501 522081 82 Linux swap
/dev/hda6 1034 1670 5116639+ 83 Linux
/dev/hda7 1671 2436 6152863+ 83 Linux

Команда df (Disk Free) покажет, какие разделы уже смонтированы и какие точ-
ки подключения при этом используются:
tdf
Filesystem lK-blocks Used Available Use? Mounted on
/dev/hda6 5116472 1494584 3621888 30% /
/dev/hda7 6152668 4011652 2141016 66% /home
Команда df также может использоваться для отображения информации об од-
ном смонтированном разделе. Ключ -h выводит числовые значения в более удоб-
ном формате:
$ df -h /dev/hdc6
Filesystem Size Used Avail Use£ Mounted on
/dev/hdc6 4.9G 1.4G 3.5G 29£ /home
Раздел Windows NTFS /dev/hdal монтируется так:
# mkdir -m 755 /win2k
# mount -t ntfs -r /dev/hdal /win2k
ВНИМАНИЕ
Поддержка записи в NTFS находится на экспериментальной стадии. Разрешая ее, вы рискуете
своими данными в разделе NTFS, поэтому в команде mount присутствует ключ -г. Для организа-
ции общего доступа к файлам NTFS используйте Samba.

Демонтирование тома осуществляется командой


# umount /win2k

i ТЭЮК6
mount(8), The NTFS FAQ (http:/linux-ntfs.sourceforge.net/info/ntfs.html).

9.12. Определение имен устройств


для mount и fstab
Проблема
Требуется смонтировать дисковое устройство: жесткий диск с интерфейсом IDE
или SCSI, CD, DVD, флэш-диск USB или Zip-диск. Но вы не знаете, какое имя
устройства следует использовать — где его найти?
9.12. Определение имен устройств для mount и fstab 155

Решение
Воспользуйтесь командами dmesg и fdisk. Команда dmesg находит имена устройств,
а команда fdisk отображает нумерацию разделов на жестких дисках. Возможно, вам
также поможет официальный список имен /dev по адресу http://www.Lanana.org/
docs/device-list/devices.txt (если в вашей системе установлены исходные тексты
ядра, возможно, файл devices.txt находится в каталоге/usr/src/).
Следующая команда ищет информацию CD-устройств в выходных данных dmesg:
$ dmesg | grep -i cd
hdc: ATAPI CDROM. ATAPI CD/DVD-ROM DRIVE
hdc: ATAPI 40X CD-ROM DRIVE. 128K cache. UDMA (33)
Быстрый поиск в devices.txt дает следующий результат:
Second IDE hard disk/CD-ROM interface
0 = /dev/hdc Master: whole disk (or CD-ROM)
He обращайте внимания на 0=; имя устройства — /dev/hdc.
А вот как выглядят дисководы CD/DVD, использующие подсистему IDE/
SCSI:
$ dmesg | grep -i cd
hdb: TOSHIBA DVD-ROM SD-M1202. ATAPI CD/DVD-ROM drive
hdc: LITE-ON LTR-24102B. ATAPI CD/DVD-ROM drive
ide-cd: ignoring drive hdb
ide-cd: ignoring drive hdc
Type: CD-ROM ANSI SCSI revision: 02
Type: CD-ROM ANSI SCSI revision: 02
Attached scsi CD-ROM srO at scsiO. channel 0. id 0. lun 0
Attached scsi CD-ROM s r l at scsiO, channel 0. id 1. lun 0
scdO: scsi3-mmc drive: 32x/32x cd-rw xa/form2 cdda tray
Uniform CD-ROM driver Revision: 3.12
scdl: scsi3-mmc drive: 131x/40x writer cd/rw xa/form2 cdda tray
Итак, устройствам соответствуют имена /dev/scdO и /dev/scdl.
Для жестких дисков приходится указывать конкретные разделы, поскольку
каждый раздел является самостоятельным блочным устройством. Команда fdisk -L
выводит информацию обо всех разделах на всех обнаруженных жестких дисках:
# /sbin/fdisk -1
Disk /dev/hda: 20.5 GB. 20576747520 bytes
255 heads. 63 sectors/track. 2501 cylinders
Units - cylinders of 16065 * 512 = 8225280 bytes

Device Boot Start End Blocks Id System


/dev/hdal * 1 893 7172991 7 HPFS/NTFS
/dev/hda2 894 1033 1124550 с W95 FAT32 (LBA)
/dev/hda4 1034 2501 11791710 f W95 Exfd (LBA)
/dev/hda5 2437 2501 522081 82 Linux swap
/dev/hda6 1034 1670 5116639+ 83 Linux
/dev/hda7 1671 2436 6152863+ 83 Linux

Скопируйте имя устройства из столбца Device.


А вот как команда fdisk отображает устройства USB:
Disk /dev/sda: 65 MV. 65536000 bytes
8 heads. 32 sectors/track. 500 cylinders
156 Глава 9. Операции с файлами и разделами

Units - cylinders of 256 * 512 - 131072 bytes

Device Boot Start End Blocks Id System


/dev/sdal * 1 499 63586 6 FAT16

Комментарий
Каждому запоминающему устройству соответствует блочное устройство в ка-
талоге /dev. Имена устройств определяются способом физического подключе-
ния.
Примеры:
О /dev/hda — первичное устройство на IDE0 (весь диск);
О /dev/hdb — вторичное устройство на IDE0 (весь диск);
о /dev/fdO — флоппи-дисковод на контроллере 0, устройство 0;
О /dev/fdl — флоппи-дисковод на контроллере 0, устройство 1;
О /dev/sda — первый диск SCSI (весь диск);
о /dev/sdb — второй диск SCSI (весь диск).
Имена запоминающих устройств в Linux формируются по следующей схе-
ме:
О /dev/fd* — флоппи-дисководы;
о /dev/hd* — дисководы IDE;
О /dev/sd* — дисководы SCSI;
О /dev/sd* — запоминающие устройства USB;
О /dev/hd* - дисководы CD/DVD-ROM с интерфейсом IDE/ AT API;
О /dev/sd* - дисководы CD/DVD-R/RW с интерфейсом IDE/ AT API;
О /dev/sd*,/dev/hd* или/dev/XXXx4 — Zip-дисководы.
Устройствам IDE и USB, использующим подсистему эмуляции SCSI, иногда
присваиваются имена/dev/sr*, которые представляют собой символические ссыл-
ки на /dev/sd*.
Если в вашей системе установлены исходные тексты ядра, поищите определе-
ния имен /dev в файле devices.txt.

См. также
Глава 5; официальный список имен /dev (http://www.lanana.org/docs/device-list/
devices.txt или файл devices.txt в каталоге /usr/src/* вашей системы).

9.13. Создание файлов и каталогов


Проблема
Требуется упорядочить файлы, разместив их в каталогах. Но откуда берутся ка-
талоги? И если на то пошло, как создать файл?
9.14. Удаление файлов и каталогов 157

Решение
Воспользуйтесь командами mkdir и touch.
Команда mkdir создает каталоги. Создание нового подкаталога в текущем каталоге:
$ mkdir photos
Следующая команда создает новый каталог верхнего уровня (эта операция раз-
решена только суперпользователю):
# mkdir /local_bins
При создании каталога можно указать разрешения:
# mkdir -m 755 /shared
Чтобы создать подкаталог и все его родительские каталоги, используйте ключ -р:
$ mkdir -p photos/scanned/jpgs/thumbs
Большинство файлов создается программами (текстовыми и графическими ре-
дакторами, компиляторами и т. д.). Пустой файл также можно создать командой touch:
$ touch newfile.txt

Комментарий
Команда touch обычно используется в сценариях для создания новых файлов, а так-
же для заполнения каталогов файлами с целью тестирования.

См. также
mkdir(l), touch(l).

9.14. Удаление файлов и каталогов


Проблема
Ваша система переполнена файлами и каталогами. Как удалить те из них, кото-
рые вам больше не нужны?

Решение
Используйте команду rm (ReMove) — но будьте внимательны! Команда rm удаля-
ет файлы и каталоги без предупреждения.
Удаление одного файла с расширенным выводом:
$ rm -v game-stats.txt
removed 'game-stats.txt'
Удаление с запросом подтверждения:
$ rm -vi dpkglist
гт: remove regular f i l e 'dpkglist'?y
removed 'dpkglist'
Ключ -г (Recursive) обеспечивает удаление каталога со всеми файлами и под-
каталогами:
$ rm -rvi /home/games/stats/baseball
158 Глава 9. Операции с файлами и разделами

Команда удаляет каталог /baseball вместе со всем содержимым.


Для удаления групп файлов можно использовать метасимволы командного
процессора:
$ rm -v * . t x t
removed 'file4.txt'
removed 'file5.txt'
removed 'file6.txt'
removed 'file7.txt'
Или:
$ rm -v f i l e *
ВНИМАНИЕ
Ключ -f (Force) обеспечивает принудительное выполнение команды. Это очень опасно! Команда
ничего не сообщает пользователю, а просто удаляет все на своем пути.

Комментарий
Команда rm -rf / стирает всю корневую файловую систему. Некоторые личности
предлагают новичкам выполнить ее, считая это забавной шуткой.
Хотя обычно говорят «rm удаляет файлы», в действительности команда не уда-
ляет файлы, а только отсоединяет их от i-узлов. Файл по-настоящему удаляется
лишь после удаления всех жестких ссылок, указывающих на него, и перезаписи
данных на диске. Рядовые пользователи могут удалять командой rm любые фай-
лы в любых подкаталогах, доступных для них, но с каталогами дело обстоит ина-
че: команда rm удаляет только каталоги, принадлежащие данному пользователю.
Команда touch на самом деле предназначена для изменения временных поме-
ток файла. Ее применение для создания новых файлов может рассматриваться
как неожиданный побочный эффект.
Для удаления каталогов также существует команда rmdir. Эта команда отказы-
вается удалять каталоги, содержащие какие-либо данные. На первых порах это
помогает, но со временем начинает раздражать; многие программы создают файлы,
не отображаемые в нормальных списках (имена файлов, начинающиеся с точки,
обычно игнорируются; чтобы включить их в вывод, следует выполнить команду
Is -а). Соответственно, при попытке выполнения rmdir команда скажет, что в ката-
логе еще остались файлы. Вероятно, со временем вы перейдете на команду rm -r.

См. также
touch(l),rm(l).

9.15. Копирование, перемещение


и переименование файлов и каталогов
Проблема
В системе существуют каталоги и файлы. Как перенести файл в другой каталог?
Как сменить имя файла? И как создать его копию?
9.16. Создание дисковых разделов Linux командой fdisk 159

Решение
Воспользуйтесь командами ср и mv.
Следующая команда копирует два файла из текущего рабочего каталога в ка-
талог ~/im a 9 e s 2 :
$ ср -v navbar.gif redheart.gif ~/images2
'navbar.gif -> 7home/terri/images2/navbar.gif'
'redheart.gif -> 7home/terri/images2/redheart,gif
При перезаписи файлов можно воспользоваться ключом -Ь для создания ре-
зервных копий старых файлов в приемном каталоге:
$ ср -bv icon-zip.gif main.gif ~/data2
'icon-zip.gif -> 7home/terri/data2/icon-zip.gif (backup: '/home/terri/data2/icon-
zip.gif)
'main.gif -> '/home/terri/data2/main.gif (backup: 7home/terri/data2/main.gif~')
Для сохранения полного пути к файлу используется ключ —parents:
$ ср -v --parents -/homes/images/kitchen.jpg -7data2
1
'home/terri/homes/images/kitchen.jpg ->
' home/terri/data2/homes/images/ki tchen.jpg'
Ключ -s создает мягкие ссылки на файлы вместо копирования:
$ ср -s navbar.gif redheart.gif ~/images2
Ключ -г копирует каталог со всеми подкаталогами:
$ ср -rv -/homes/images/ /shared/archives
Операции перемещения и переименования осуществляются командой mv. Сле-
дующая команда перемещает два файла в другой каталог:
$ mv -v about.gif arrow.gif ~/data2
'about.gif -> 7home/terri/data/about.gif'
'arrow.gif -> '/home/terri/data/arrow.gif
Пример переименования файла:
$ mv -v down1oads.gif emaii.gif
'downloads.gif -> ' e m a i l . g i f

Комментарии
В графических файловых оболочках (таких, как Nautilus, Konqueror, Midnight
Commander, Gentoo File Manager, gmc и Rox Filer) операции переименования и ко-
пирования обычно выполняются быстрее и проще.

См. также

9.16. Создание дисковых разделов Linux


командой fdisk
Проблема
Требуется разбить на разделы новый жесткий диск или создать раздел на базе
свободного пространства па существующем жестком диске.
160 Глава 9. Операции с файлами и разделами

Решение
Первый способ: загрузите систему с диска Knoppix и воспользуйтесь QTParted —
замечательным графическим приложением, которое создает, удаляет, перемеща-
ет и изменяет размеры разделов без уничтожения данных. Программа даже по-
зволяет изменять размеры разделов NTFS.
Также можно воспользоваться программой fdisk. Пример создания первично-
го раздела:
# fdisk /dev/hda
The number of cylinders for this disk is set to 2501.
There is nothing wrong with that, but this is larger than 1024.
and could in certain setups cause problems with:
1) software that runs at boot time (e.g.. old versions of LILO)
2) booting and partitioning software from other OSs
(e.g.. DOS FDISK. OS/2 FDISK)
Command (m for help): n
Command action
1 logical (5 or over)
p primary partition (1-4)
P
Partition number (1-4): 3
First cylinder (511-1232. default 511): 511
Last cylinder or +size +sizeM or +sizeK (511-1232, defaultl232): +3000M
Command (m for help): w
The partition table has been altered!
Calling ioctlO to re-read the partition table
Syncing disks
#
Вот и все. Изменения можно отменить вплоть до того момента, когда нажатие w
запишет новую таблицу разделов на диск. Клавиша m выводит меню команд,
а клавиша q завершает работу программы.
Чтобы сохранить какие-либо данные в новом разделе, необходимо перезагру-
зить компьютер и разместить в разделе файловую систему (см. следующий раз-
дел).

Комментарий
Команда Linux fdisk предназначена только для создания томов Linux. Для томов
Windows следует использовать команду fdisk из MS-DOS.
Далее приводится список часто используемых команд fdisk:
О т — вывод справки;
О р — отображение текущей таблицы разделов;
О d — удаление раздела;
О п — создание нового раздела;
О w — запись таблицы разделов на диск;
О I — отображение списка типов файловых систем;
О q — завершение работы fdisk без внесения каких-либо изменений.
9.17. Создание файловой системы в новом разделе 161

См. также
fdisk(8).

9.17. Создание файловой системы


в новом разделе
Проблема
На диске был создан новый раздел. Но пользоваться им еще нельзя; сам по себе
раздел — не более чем фрагмент дискового пространства. Как разместить на нем
файловую систему?

Решение
Воспользуйтесь командой той файловой системы, которую вы собираетесь исполь-
зовать.
Ext2 #mke2fs/dev/hda3
Ext3 #mke2fs-j/dev/hda3
ReiserFS # mkreiserfs/dev/hda3
JFS #mkfs.jfs/dev/hda3
XFS # mkfs.xfs /dev/hda3

Комментарий
Команда mke2fs предназначена для создания файловых систем Ext2/3. Она явля-
ется частью пакета e2fsprogs, загружаемого с сайта http://e2fsprogs.sourceforge.net.
Команда mkreiserfs входит в поставку ReiserFS и является частью reiserfsprogs.
Ее можно загрузить по адресу http://www.namesys.com.
Команда mkfs.jfs входит в семейство jfsutils (http://www-124.ibm.com/jfs/).
Команда mkfs.xfs входит в семейство xfsprogs (http://oss.sgi.com/project/xfs).

См. также
Раздел «Введение» настоящей главы; JFS (http://www-124.ibm.com/jfs/); XFS (http://
oss.sgi.com/project/xfs); ReiserFS (http://www.namesys.com/); Ext2/3 (http://
e2fsprogs.sourceforge.net/ext2.html).
Глава 10
Заплатки,
настройка
и обновление ядра

10.1. Введение
Установка заплаток, настройка и обновления ядра Linux — весьма полезные опе-
рации, и ничего страшного в них нет. Они принадлежат к числу немногочисленных
операций администрирования, требующих перезагрузки, и это обстоятельство
может огорчить администраторов, гордящихся длительным временем непрерыв-
ной работы. В остальном эта процедура ничем не хуже, чем установка заплаток
или обновление любых других программ.
Вам потребуются исходные тексты ядра и дсс, компилятор GNU С. Исходные
тексты ядра можно получить из двух источников: на сайте вашего дистрибутива
Linux или по адресу http://kernel.org. Разные дистрибутивы Linux в разной степе-
ни модифицируют ядро. Red Hat, SuSE и Mandrake вносят значительные измене-
ния, Debian и Slackware ограничиваются минимальными модификациями. Уста-
новка «эталонного» ядра с сайта http://kernel.org может привести к нарушению
работы дистрибутивов, использующих модифицированное ядро, поэтому лучше
использовать исходные тексты ядра для вашего дистрибутива (в главах 2 и 3 рас-
сказано, где достать и как установить программное обеспечение Linux, а в разде-
ле 4.2 описан процесс сборки).
Как и в большинстве программ Linux, при установке заплатки вы не модифи-
цируете существующее ядро. Заплатка применяется к исходным текстам, по ко-
торым затем строится новый двоичный файл, поэтому в итоге вы получаете два
ядра. Это хорошо, потому что у вас остается исходное ядро на тот случай, если
новое ядро не загрузится. Вы можете установить несколько различных ядер и про-
тестировать последние версии в разных конфигурациях.
Основные причины для модификации ядра:
О оптимизация ядра для конкретного оборудования;
о использование новых возможностей;
О исключение ненужных функций;
О тестирование новых функций;
О обновление системы.
10.1. Введение 163

Настройка нового ядра


Настройка конфигурации является не только самым длительным, но и самым важ-
ным этапом сборки нового ядра. На этом этапе вы решаете, какое оборудование,
файловые системы, функции энергосбережения и т. д. будут поддерживаться яд-
ром. В вашем распоряжении более сотни разных параметров и для каждого нуж-
но принять три потенциальных решения: нужно ли включать данную возможность,
и если нужно — оформить ли ее в виде загружаемого модуля или статически от-
компилировать в ядро? Как правило, если возможно построить модуль, следует
выбрать именно этот вариант. Модули экономят память, поскольку память для
них выделяется лишь в случае их фактического использования. Кроме того, об-
новить или установить отдельный модуль проще, чем перестраивать все ядро.
Программа конфигурации ядра содержит справку почти но каждому параметру.
В справке говорится, можно ли оформить некоторую функцию в виде модуля или
ее необходимо встроить в базовое ядро. Здесь вы найдете информацию о том, для
чего нужна каждая функция, и рекомендации на случай, если вы не уверены, сле-
дует ли включать соответствующий режим. Если справки нет и вы не знаете, что
делать — включайте. В худшем случае вы получите более громоздкое ядро с неис-
пользуемыми возможностями.
Программа конфигурации ядра не позволит реализовать в виде модуля те функ-
ции, которые должны быть частью базового ядра. У этого правила есть лишь одно
важное исключение: драйвер дискового устройства, содержащего корневую фай-
ловую систему. Вообще говоря, этот драйвер должен быть встроен в базовое ядро,
чтобы система могла загрузиться, иначе возникает «порочный круг»: драйверы
необходимы для загрузки корневой файловой системы, но файловая система не
может загрузиться, потому что драйверы находятся в ней. Если драйверы не
встраиваются в ядро, вам придется создать образ initrd. Im'trd создает исходный
виртуальный диск, который загружает драйверы дисковых устройств, что позво-
ляет загрузить систему.
Бытует распространенное заблуждение, будто система с загружаемыми моду-
лями работает медленнее, чем монолитное ядро. На самом деле обращение к функ-
циям сводится к простой передаче управления по адресу памяти, так что никаких
различий в скорости не существует.
Для настройки ядра 2.4 используется программа menuconfig, а для настройки
ядра 2.6 — либо menuconfig, либо xconfig. Программа menuconfig создана на базе
ncurses, так что вам не понадобится X. Если поддержка ncurses не установлена,
либо установите ее, либо используйте исходную программу настройки ядра config,
но это просто ужасно. Процесс затягивается на целую вечность, и если вы допус-
тите хотя бы одну ошибку, все придется начинать заново.
Программа xconfig была полностью переработана для ядра 2.6. Она чрезвычай-
но эффективна и удобна, а по каждому параметру пользователь может получить
содержательную справку. Для ее запуска вам понадобится Qt, qt-devel, gtt и X. На
рис. 10.1 показан пользовательский интерфейс xconfig во всей красе.
Дерево сборки ядра содержит объемистую документацию; загляните в каталог
linux-$VERSIOn/Documentation. В каталоге Linux-$VERSION/README содержатся важ-
ные указания по поводу установки, а в каталоге linux-$VERSION/Documentation/
Changes — важная информация о версиях дсс и других используемых программах.
164 Глава 10. Заплатки, настройка и обновление ядра

ь maturity level options


General setup 0ATA/ATAPI/MFM/RLL support
:
'••-D Configure standard kernel features (Го* — й Enhanced IDE/MFM/RLL disk/cdrcm/tape/fioppy suppon
•Loadable module support У Pr*Uf set DocumentatiarVide.tttfor rifeip/info on IDE drives
Processor type and features > D Support for SATA (deprecated; conflicts with libata 3ATA driver] (NEW)
-Firmware Dnvers
;
- г О Use old disk-only driver on primary lnterrac_e
: Power management options (ACPI, АРМ) .•
j-ACPI (Advanced Configuration and Powe. e multi-mode oy default
I -АРМ (Advanced Ролег Management) Bid: ! В PCMCIA IDE support
:
- CPU Frequency scaling iSInclude IDE/ATAPI CDROM support
•Bus Options (PCI. PCMCIA. EISA, MCA, ISA). i-SlnclLidc IDE/AT API TAPE support (EXPERIMENTAL)
!••• PCMCIA/CardBus support i s Include IDE/ATAPI FLOPPY support
L
PCIHotplu_ Support h BSCSI smulation support
-••Executable file formats ; D I D E TDSkfile Access
••
:• Device Drivers
•• --Generic Driver Options
[~ Memory Technology Devices (MT D) L Include IDE/ATA-2 DISK Support (BLK_DEV_IDEDISK)

;•• Parallel port support
j Plug and Piay support This will include enhanced support for MFM/RLL/IDE hard disks. IT
;• Block devices you nave a MFM/RLUIDE disk, and tnere is no special reason to use
the old hard dish dnver instead sayY if you have an SCSl-unty
;• SCSI device support system, you can say N here.
!- Old CD-ROM dnvers (not SCSI, not IDE)

:•• Multi-device support (RAID and LVMJ To compile this driver as a module, choose M here; the
|- Fusion MPT device support module will be called ide-disk.
I IEEE 1394 (FireWire} support Do not compile this driver as a module if your root file system
(the one containing the directory/) is located an the IDE disk.
I I2O device support
IT';•Networking support
if unsure, say Y.
; hOAmateur Radio support
i %-Ш1гОА (infrared) lubsyitsn suppc

. . ••.••••iv-.-.. _ ._ _ „ _ _ „

Рис. 1 0 . 1 . Пользовательский интерфейс xconfig

10.2. Добавление новых возможностей


в ядро 2.4
Проблема
Требуется включить в ядро 2.4 новые возможности — например, поддержку ново-
го оборудования, новых файловых возможностей или сетевых функций. Допус-
тим, вы купили жесткий диск с интерфейсом USB для архивации данных, а рань-
ше в системе USB-устройства не использовались. Как узнать, поддерживает ли
система USB? И если не поддерживает — как добавить поддержку?

Решение
Загрузите свежие исходные тексты ядра и откомпилируйте ядро с использовани-
ем существующего файла .config, добавив в него новые возможности.
Предварительно сделайте следующее:
О убедитесь в том, что на диске имеется не менее 500 Мбайт свободного про-
странства для процесса сборки;
О распечатайте выходные данные dmesg, Iscpi, cat/proc/cpuinfo и Lsusb (за допол-
нительной информацией обращайтесь к главе 5);
о создайте резервную копию всех данных и держите под рукой загрузочный
диск аварийного восстановления;
О найдите файл .config ядра.
10.2. Добавление новых возможностей в ядро 2.4 165

Чтобы добавить новые возможности в существующее ядро, загрузите но-


вые исходные тексты той лее версии ядра. Версия ядра выводится командой
uname:
$ uname -r
2.4.22
Распакуйте новые исходные тексты ядра в подкаталог, находящийся в вашем
домашнем каталоге, — например, ~/ s r c :
$ tar xvjf 1inux-2.4.22.tar.bz2
Отредактируйте make-файл нового ядра (~/src/linux-2.4.22/Makefile) и при-
свойте новое значение параметру EXTRAVERSION — например, EXTRAVERSION=-new-
kernel.
Выполните следующие команды из каталога /~/src/linux-2.4.22:
$ make mrproper
Скопируйте файл .config в каталог/~/src/linux-2.4.22.
Переходите к настройке нового ядра. Программа конфигурации задаст много-
численные вопросы; на этом этапе выбираются новые возможности:
$ make oldconfig
Выполните следующие команды:
$ make dep
$ make bzlmage
$ make modules
$ su
# make modules_install
# cp ~/src/linux-2.4.22/arch/i386/boot/bzImage /boot/vmlinuz-2.4.22-new-kernel
# cp ~/src/linux-2.4.22/System.map /boot/System.map-2.4.22-new-kernel
Наконец, чтобы использовать новое ядро, включите его в загрузчик и пере-
загрузите компьютер. В GRUB соответствующая запись выглядит примерно
так:
title Kernel 2.4.22. new kernel
root (hdO.O)
kernel /boot/vmlinuz-2.4.22-new-kernel rooWdev/hdal ro
Пользователи LILO делают следующее:
image=boot/vmlinuz-2.4.22-new-kernel
labe1=Kernel 2.4.22. new kernel
root=/dev/hdal
read-only
И не забудьте перезапустить LILO, чтобы новая конфигурация была записана
в загрузочную запись:
# /sbin/1-По
Сохраните копию нового файла .config в каталоге за пределами дерева сборки,
чтобы файл не был случайно удален или заменен. Присвойте ему новое, содержа-
тельное имя:
$ cp ~/src/linux-2.4.22/.config -/kernel-configs/.config-2.4.22-jan-04
Если вы убедились в том, что новое ядро работает нормально, можно удалить
старое ядро, его каталог/lib/modules/$VERSION, дерево сборки и записи загрузчика
(а если не хотите, оставьте их в системе).
166 Глава 10. Заплатки, настройка и обновление ядра

Комментарий
В документации часто рекомендуется разместить исходные тексты ядра и дерево сбор-
ки в каталоге /usr/src/linux, но делать этого не следует. В файле README ядра прямо
сказано: «НЕ ИСПОЛЬЗУЙТЕ область /usr/src/linux! Она содержит (обычно непол-
ный) набор заголовков, используемых библиотечными заголовками ядра. Заголовки
должны соответствовать библиотеке и не зависеть от текущей версии ядра». Также
не стоит злоупотреблять правами root и использовать каталог, требующий доступа
root. Ядро может строиться где угодно, даже на полностью изолированном компьютере.
Поиск файла .config
Если ранее вы строили ядро в своей системе, файл .config будет находиться на
верхнем уровне старого дерева сборки. Если сборка ядра не выполнялась, поищи-
те в каталоге /boot, куда этот файл помещается большинством дистрибутивов.
Файл в каталоге /usr/src/linux, скорее всего, является обобщенным и бесполез-
ным для вашей конкретной конфигурации.
Если в системе нет файла .config, перейдите к разделу 10.3, потому что вам
придется настраивать конфигурацию ядра «с нуля». Команда make oldconfig будет
работать, но она использует конфигурацию по умолчанию из дерева сборки, со-
вершенно не соответствующую вашей системе. Команда make oldconfig сообщает,
какой файл она использует:
$ make oldconfig

# Using defaults found in arch/i386/defconfig


Этот файл вам не подходит! В выходных данных должно быть сказано:
# Using defaults found in .config
Прервите выполнение команды клавишами Ctrl+C и начните заново.

См. также
Раздел «Введение» настоящей главы; электронная справка в программе настрой-
ки ядра.

10.3. Усечение типового ядра 2.4


Проблема
Требуется переделать ядро, входящее в ваш дистрибутив, и убрать из него все
лишние драйверы, а также избавиться от поддержки ненужного оборудования
и функций.

Решение
Загрузите новые исходные тексты той же версии ядра, откомпилируйте новое ядро
и настройте его конфигурацию «с нуля». Версия ядра выводится командой uname:
$ uname -r
2 4 22
10.3. Усечение типового ядра 2.4 167

Предварительно сделайте следующее:


О убедитесь в том, что на диске имеется не менее 500 Мбайт свободного про-
странства для процесса сборки;
О распечатайте выходные данные dmesg, Lscpi, cat/proc/cpuinfo и Isusb (за допол-
нительной информацией обращайтесь к главе 5);
О создайте резервную копию всех данных и держите под рукой загрузочный
диск аварийного восстановления.
Распакуйте новые исходные тексты ядра в подкаталог, находящийся в домаш-
src:
нем каталоге, — например, ~ /
$ tar cvjf Iinux-2.4.22.tar.bz2
src
Отредактируйте make-файл нового ядра (~/ /unux-2.4.22/Makefile) и присвойте
новое значение параметру EXTRAVERSION — например, EXTRAVERSION=-slim-kemel.
Выполните следующие команды из каталога /~/src/linux-2.4.22:
$ make mrproper
$ make menuconfig
$ make dep
$ make bzlmage
$ make modules
$ su
$ make modulesinstali
# cp ~/src/linux-2.4.22/arch/i386/boot/bzImage /boot/vmlinuz-2.4.22-new-kernel
# cp -/src/1inux-2.4.22/System.map /boot/System.map-2.4.22-new-kernel
В процессе настройки ядра следует помнить, что вы начинаете «с пустого мес-
та», поэтому необходимо включить каждую используемую функцию. Также про-
следите за тем, чтобы ненужные функции не включались. Некоторые базовые воз-
можности, которые вам наверняка понадобятся:
О поддержка загружаемых модулей, встроенная в ядро;
О поддержка двоичных форматов a.out, ELF и MISC (в меню General Setup);
О поддержка всех загрузочных устройств (дисков IDE, CD-ROM, флоппи-дис-
ководов, дисков SCSI и USB), встроенная в ядро. Если не включать эти функ-
ции или оформить их в виде модулей, для загрузки системе понадобится
ramdisk (образ initrd).
После завершения настройки включите новое ядро в загрузчик, перезагрузите
компьютер и радуйтесь жизни. Не забудьте скопировать новый файл .config в ка-
талог, находящийся за пределами дерева сборки, чтобы защитить его от случай-
ного удаления или замены.

Комментарий
Описанная процедура настраивает новое ядро «с нуля». Команда make oldconfig
не подходит, потому что она не изменяет старую конфигурацию, а позволяет только
добавить в нее новые возможности.
Типичное базовое ядро занимает около 1-3 Мбайт (в сжатом виде). Некото-
рые администраторы предпочитают усекать свое ядро до абсолютного минимума.
На сервере, особенно доступном из Интернета, по соображениям безопасности
стоит использовать как можно более компактное ядро. Впрочем, на настольных
168 Глава 10. Заплатки, настройка и обновление ядра

системах и рабочих станциях небольшая избыточность не столь существенна и мо-


жет быть даже удобной для внесения будущих изменений.

См. также
Раздел «Введение» настоящей главы; электронная справка в программе настрой-
ки ядра; раздел 10.2.

10.4. Обновление до последней


стабильной версии ядра 2.4
Проблема
Вы слышали, что к ядру вышло много обновлений и заплаток. Вам хотелось бы
обновить старое ядро до последней стабильной версии (например, с 2.4.22 на
2.4.25), потому что это самый быстрый способ установки всех обновлений и за-
платок.

Решение
Создайте резервную копию всех данных и держите под рукой диск аварийного
восстановления.
Распечатайте выходные данные dmesg, Lscpi, cat/proc/cpuinfo и Isusb.
Распакуйте новые исходные тексты ядра в подкаталог, находящийся в домаш-
нем каталоге, — например, ~/src:
$ tar xvjf Iinux-2.4.25.tar.bz2
Отредактируйте make-файл нового ядра (~/src/linux-2.4.25/Makefile) и при-
свойте новое значение параметру EXTRAVERSION — например, EXTRAVERSION=-new-
kernel.
Выполните следующие команды из каталога /~/src/linux-2.4.25:
$ make mrproper
Чтобы использовать существующий файл .config, скопируйте его в ~/src/linux-2.4.25
и продолжайте выполнять приведенные инструкции. В противном случае верни-
тесь к разделу 10.3.
Выполните следующие команды:
$ make oldconfig
$ make dep
$ make bzlmage
$ make modules
$ su
# make modules-install
# cp -/src/linux-2.4.25/arch/i386/boot/bzImage /boot/vmlinuz-2.4.25-new-kernel
# cp -7src/linux-2.4.25/System.map /boot/System.map-2.4.25-new-kernel
Включите новое ядро в загрузчик и перезагрузите компьютер.
10.5. Построение ядра 2.6 169

Комментарий
На сайтах http://Lwn.net и http://kernetlrap.org публикуется самая свежая информа-
ция о новостях, изменениях, усовершенствованиях и проблемах в области ядра
Linux.

См. также
Раздел «Введение» настоящей главы; электронная справка в программе настрой-
ки ядра; раздел 10.2.

10.5. Построение ядра 2.6


Проблема
Вы хотите опробовать ядро 2.6, но для этого нужно знать новые команды сборки,
отличающиеся от команд ядра 2.4.

Решение
В данном примере будет использоваться ядро версии 2.6.3. Создайте резервную
копию всех данных и держите под рукой загрузочный диск аварийного восста-
новления.
Распечатайте выходные данные dmesg, Iscpi, cat/proc/cpuinfo и Isusb.
Загрузите и распакуйте новые исходные тексты ядра в подкаталог, находящий-
ся в домашнем каталоге, — например, ~/src. Перейдите в каталог верхнего уровня
нового дерева исходных текстов (~/src/linux-2.6.3).
Отредактируйте make-файл нового ядра (~/src/linux-2.6.3/MakefHe) и присвой-
те новое значение параметру EXTRAVERSION — например, EXTRAVERSION=-test. Вы-
полните следующие команды:
$ make шгргорег
$ make xconfig
$ make

#make moduiesjnstail
# cp ~/src/linux-2.6.3/arch/i386/boot/bzImage /boot/vmlinuz-2.6.3-test
# cp ~/src/linux-2.6.3/System.map /boot/System.map-2.6.3-test
Сохраните копию нового файла .config в каталоге за пределами дерева сборки.
Включите новое ядро в загрузчик и перезагрузите компьютер.

Комментарий
Для запуска xconfig вам понадобится Qt, qt-devel и X. Также можно использовать
программу menuconfig.
Команда make без параметров заменяет make dep, make bzlmage и make mo-
dules.
170 Глава 10. Заплатки, настройка и обновление ядра

См. также
Раздел «Введение» настоящей главы; электронная справка в программе настрой-
ки ядра; раздел 10.2.

10.6. Добавление новых возможностей


в ядро 2.6
Проблема
Требуется добавить новые возможности в ядро 2.6.

Решение
Выполните инструкции из раздела 10.5, но вместо xconfig используйте old-
conficr
$ make mrproper
Скопируйте существующий файл .config в каталог/~/src/linux-2.6.3. Выполни-
те следующие команды:
$ make oldconfig
$ make
$ su
# make modulesinstall
# cp ~/src/linux-2.6.3/arch/i386/boot/bzImage /boot/vmlinuz-2.6.3-test
# cp ~/src/1inux-2.4.22/System.map /boot/System.map-2.4.22-test
Включите новое ядро в загрузчик и перезагрузите компьютер.

Комментарий
Не пытайтесь использовать старый файл .config от версии 2.4 — ядра сильно раз-
личаются, и у вас будет много проблем.
Команда make без параметров заменяет make dep, make bzlmage и make modules.

См. также
Документация в дереве сборки ядра; раздел «Введение» настоящей главы; раз-
дел 10.2.

10.7. Добавление нового загружаемого


модуля ядра
Проблема
В системе было установлено новое оборудование (сетевая или звуковая карта,
устройство USB). Требуется установить новый модуль ядра (драйвер) для этого
устройства.
10.8. Установка заплаток ядра 171

Решение
В ядрах 2.4 и 2.6 используется одна и та же процедура. Перейдите в каталог с дере-
вом сборки (например, ~/src/linux-2.4.25). Вам потребуется актуальный файл .config;
скопируйте его на верхний уровень дерева сборки и выполните следующую команду:
# make oldconfig
В процессе настройки конфигурации найдите нужный драйвер и выберите его
оформление в виде модуля (например, модуль tulip является универсальным драй-
вером для многих карт Ethernet). Затем выполните команды:
$ make dep
$ make modules
# make modules install
# depmod -av
Загрузите модуль командой modprobe:
# modprobe tulip
Процесс не требует перезагрузки системы.

Комментзрии
Если использовать oldconfig почему-либо не удастся, используйте make menuconfig.
Правда, это займет больше времени, и вам придется следить за тем, чтобы не упу-
стить что-нибудь важное.
При установке сторонних модулей; не входящих в дерево ядра, следует руковод-
ствоваться инструкциями производителя. Стандартная процедура включает загруз-
ку исходных текстов, сборку модуля и его загрузку командой modprobe. Некоторые
производители (например, nVidia) включают сценарий, который делает все за вас.
Как правило, дистрибутивы проверяют оборудование при загрузке и автомати-
чески загружают нужные модули. Если этого не происходит, вам придется внести
изменения в стартовые файлы. В Red Hat и SuSE модуль включается в файл /etc/
modules.conf; в Debian используется файл/etc/modules, а в Slackware — файл re.modules.
Еще более простой способ — включить в ядро поддержку kmod, автоматичес-
кого загрузчика модулей. В большинстве дистрибутивов она включается по умол-
чанию. В программах настройки конфигурации ядра для этой цели используется
пункт «Automatic kernel module loading» (ядро 2.6) или «Kernel module loader» (2.4)
в категории «Loadable module support».
He используйте программу kerneld; начиная с ядра 2.2, вместо нее используется kmod.

См. также
Раздел «Введение» настоящей главы; раздел 10.2.

10.8. Установка заплаток ядра


11рООЛсМа
Требуется установить заплатку ядра, чтобы добавить поддержку новых возмож-
ностей, исправить ошибку, протестировать новые функции и т. д.
172 Глава 10. Заплатки, настройка и обновление ядра

Решение
Загрузите заплатку и примените ее к исходным текстам ядра. Затем откомпилируйте
и постройте новое ядро. В нашем примере ядро 2.6.3 будет обновлено до версии 2.6.4.
Заплатка должна находиться в каталоге второго уровня дерева сборки:
$ Is ~/src
linux-2.6.3 patch-2.6.4.bz2
Перейдите в каталог верхнего уровня дерева сборки, распакуйте и примените
заплатку:
$ cd linux-2.6.3
$ bzip2 -de ../patch-2.6.4.bz2 | patch -s -pi
Ключ -dry-run позволяет протестировать команду:
$ bzip2 -de ../patch-2.6.4.bz2 | patch -s -pi --dry-run
Настройте конфигурацию и проведите сборку ядра.
В дерево сборки предусмотрительно включен сценарий/scripts/patch-kernel для
применения заплаток. Этот сценарий особенно полезен при установке несколь-
ких заплаток, поскольку он автоматически применяет их в нужном порядке. Вы-
полните в каталоге верхнего уровня команду
$ scripts/patch-kernel
Заплатки должны применяться по очереди, и все они должны находиться в сис-
теме. Например, для использования заплатки patch-2.6.5-rc6 вам также понадо-
бятся первые пять заплаток в серии (rcl-rc5).

Комментарий
Заплатки ядра существуют в нескольких разновидностях. Заплатки re (Release Candi-
dates) находятся в одном шаге от включения в стабильное ядро, а кандидаты рге (Рге-
Release) — в двух шагах. Если вам не терпится использовать новую возможность, но
вы не хотите ждать новой стабильной версии, устанавливайте заплатки гс и рге.
Официальные версии ядра на сайте KerneL.org хорошо протестированы и гото-
вы к эксплуатации. Версии с четными номерами являются стабильными, а вер-
сии с нечетными номерами находятся в процессе разработки. Ядро Linux активно
поддерживается вплоть до версии 2.0, а в архивах можно найти все версии ядра до
первых версий Linux.

См. также
patch(l); Kernel Newbies (http://kernelnewbies.org); Kernel.org (http://kernel.org).

10.9. Удаление заплатки ядра


Проблема
Вы установили заплатку ядра, но теперь хотите избавиться от нее. Возможно, ядро
стало работать нестабильно, а может, вы допустили ошибку и хотите начать все
заново.
10.10. Создание образа initrd 173

Решение
Воспользуйтесь той же командой, которая применялась для распаковки заплат-
ки, и добавьте и нее ключ -R:
$ bzip2 -de ../patch-2.6.4.bz2 | patch -s -pi -R

См. также
patxh(l); kernel Newbies (http://kernelnewbies.org); kernel.org (http://kernel.org).

10.10. Создание образа initrd


Проблема
В системе используются диски SCSI. Из-за разнообразия драйверов SCSI вы хо-
тите, чтобы драйверы загружались в виде модулей. В этом случае диски или кон-
троллеры можно будет менять без повторной сборки ядра, а вам не хотелось бы
отягощать ядро включением всех возможных драйверов. Но как перезагрузить
систему без встраивания драйвера SCSI в базовое ядро?

Решение
Постройте образ initrd (виртуальный диск) командой mkinitrd после сборки ядра.
Затем включите в загрузчик запись для загрузки образа.
В ядрах 2.4 и 2.6 команда mkinitrd выполняется после команды make mo-
dulesjnstall:
# mkinitrd -o /boot/initrd-2.4.25-new.kernel.img
Команда строит образ и устанавливает его в каталог /boot; остается лишь со-
здать записи в загрузчике. В GRUB:
title Kernel 2.4.25. new kernel
root (hdO.O)
kernel /boot/bzImage-2.4.25-new-kernel rooWdev/hdal ro
initrd /boot/initrd-2.4.25-new-kernel.img
Пользователи LILO делают следующее:
image=/boot/bzIrnage-2.4.22- new-kernel
initrd=/boot/initrd-2.4.25-new-kernel.img
label=Kernel 2.4.22. new kernel
root=/dev/hdal
read-only
He забудьте выполнить /sbin/lilo, чтобы активировать изменения.

Комментарий
Обязательно прочитайте man-страницу mkinitrd, поскольку состав параметров
может зависеть от дистрибутива.
Ничто не мешает вам встроить драйвер SCSI в базовое ядро; использование
initrd не является обязательным.
174 Глава 10. Заплатки, настройка и обновление ядра

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

См. также
mkirritrd(8).

10.11. Создание загрузочного диска в Debian


Проблема
Вы забыли создать загрузочную дискету при установке системы Linux и хотите
создать ее сейчас. Вы умеете создавать загрузочные дискеты для G RUB или LILO,
а также знаете, что вы можете бесплатно загрузить и записать диск Knoppix. Но все,
что вам нужно, — это обычная загрузочная дискета для системы Debian.

Решение
Вам потребуется утилита mkboot и чистая дискета. По умолчанию загрузочный
диск создается с использованием vmlinuz и текущего корневого раздела:
$ mkboot
Создание загрузочного диска с указанием ядра:
$ mkboot vmlinuz-2.4.21
Также можно указать другой корневой раздел и ядро:
$ mkboot /dev/hda2 vmlinuz-2.4.21
Если флоппи-дисковод имеет нестандартное расположение, укажите его с клю-
чом -d:
$ mkboot -d /dev/fdl

Комментарий
Программа mkboot входит в пакет debianutils.
Не забудьте защитить дискету от записи, сдвинув вверх небольшую защелку.
Всегда проверяйте загрузочные диски, прежде чем откладывать их для хранения.
Диск должен храниться вместе с той системой, для которой он был создан.

См. также
mkboot(8).

10.12. Создание загрузочного диска в Red Hat


Проблема
Вы забыли создать загрузочную дискету при установке системы Linux и хотите
создать ее сейчас. Вы умеете создавать загрузочные дискеты для GRUB или LILO,
10.12. Создание загрузочного диска в Red Hat 175

а также знаете, что вы можете бесплатно загрузить и записать диск Knoppix. Но все,
что вам нужно, — это обычная загрузочная дискета для системы Red Hat/Fedora.

Решение
Вам потребуется утилита mkbootdisk и чистая дискета. Создание загрузочного диска
с указанием ядра:
$ mkbootdisk vmiinuz-2.6.5-1.358
По умолчанию команда mkbootdisk не выводит данных. Ключ —verbose включа-
ет режим расширенного вывода:
$ mkbootdisk --verbose vmiinuz-2.6.5-1.358
Если имя флоппи-дисковода отлично от /dev/fdO, укажите его в командной стро-
ке mkbootdisk:
$ mkbootdisk --device /dev/fdl vmlinuz-2.6.5-1.358

Комментарий
He забудьте защитить дискету от записи, сдвинув вверх небольшую защелку. Все-
гда проверяйте загрузочные диски, прежде чем откладывать их для хранения. Диск
должен храниться вместе с той системой, для которой он был создан.

см. также
mkbootdisk(8).
Глава 11
Запись CD и DVD

11.1. Введение
Для системы Linux написано немало программ создания и записи CD/DVD. В на-
стоящее время эта область стремительно развивается, и стандарты CD/DVD еще
находятся в хаотическом состоянии. Существует несколько конкурирующих не-
совместимых стандартов, и на горизонте маячат новые стандарты — крупные ком-
пании все стремятся создать «волшебный диск», который можно было бы воспро-
изводить, по нельзя скопировать. Однако в настоящей главе наше внимание будет
сосредоточено не на этой волнующей истории, а на базовых приемах записи дис-
ков CD и DVD с данными. Вам потребуются пакеты cdrtools и dvd+rw-tools.
Для простого создания дисков используйте КЗЬ — графический интерфейс
для cdrtools, cdrdao, mkisofs, growisofs и других утилит командной строки. КЗЬ уп-
рощает подготовку дисков и предоставление пользователям привилегий root,
необходимых для работы cdrecord и cdrdao. Программа логична и проста в ра-
боте; лично я считаю ее лучшим средством записи CD/DVD на всех платфор-
мах. Конечно, в мире Linux существует много других альтернатив, в том числе
GCombust, X-CD-Roast и Gnome Toaster. Все эти программы просты в исполь-
зовании, поэтому в настоящей главе будут использоваться средства командной
строки. Хорошее владение ими также упростит работу с графическими про-
граммами, потому что вы будете понимать их команды и экзотическую терми-
нологию.
Главное новшество ядра 2.6 заключается в том, что для дисков CD/DVD боль-
ше не требуется эмуляция SCSI. Вместо того чтобы определять адреса шины SCSI
командой cdrecord scanbus, просто укажите имя устройства:
# cdrecord dev=/dev/hdc <команды>

ВНИМАНИЕ
Если вы обновили ядро 2.4 до ядра 2.6, а для работы с дисководами CD/DVD ранее использовал-
ся интерфейс IDE-SCSI, проследите за тем, чтобы записи IDE-SCSI были удалены из загрузчика.
В противном случае загрузка будет сопровождаться странными ошибками.
11.1. Введение 177

Форматы и стандарты
Далее перечислены основные аппаратные стандарты.
О CD-R— записываемый компакт-диск; также встречается термин WORM
(Write Once, Read Many). Диски CD-R универсальны и должны читаться
в любом дисководе CD-ROM.
О CD-RW — перезаписываемый компакт-диск, или WMRM (Write Many, Read
Many). Диски CD-RW читаются всеми современными дисководами.
О CD-ROM — Compact Disc Read-Only Memory. Коммерческие диски произ-
водятся штамповкой, а не записываются лазерным лучом, поэтому запись на
них невозможна.
О Mount Rainier Re Write — электроника, необходимая дисководу для поддерж-
ки UDF.
О DVD-Video — стандарт коммерческих видеодисков, воспроизводимый на всех
устройствах DVD.
О DVD-R и DVD+R — формат WORM; воспроизводится всеми проигрывате-
лями DVD. DVD-R существует в двух разных несовместимых типах дисков:
DVD-R(A) и DVD-R(G). Диски А не могут использоваться в устройствах
записи G, и наоборот.
О DVD-RAM — перезаписываемые диски, предназначенные для хранения дан-
ных. Теоретически один диск способен выдержать до 100 000 операций пере-
записи. Диск также может использоваться для записи и воспроизведения
фильмов на PC, но, скорее всего, обычный проигрыватель DVD не сможет
прочитать диск в формате DVD-RAM.
О DVD-R/RW — формат, разработанный для записи фильмов и поддерживае-
мый DVD Forum (http://www.dvdforum.com).
о DVD+R/RW — конкурирующий стандарт, несовместимый с DVD-R/RW
и поддерживаемый DVD+RW Allianec (http://www.dvdrw.com). Только DVD+R/
RW поддерживает UDF.
Дисководы DVD нового поколения поддерживают все форматы. Автономные
проигрыватели DVD все еще участвуют в войне стандартов между форматами
DVD+ и DVD-.
Стандарты файловых систем CD и DVD.
О El Torito — спецификация формата загружаемого диска.
О UDF (Universal Disk Format) — стандарт файловой системы с инкрсментной
записью пакетов. Позволяет переносить файлы прямо на диск, как на диске-
ту 3,5". Предполагалось, что в ядре Linux 2.6 будет реализована полноценная
поддержка UDF, но этого не произошло.
О ISO-9660 — старый стандарт с поддержкой имен файлов в формате 8.3 (из
доисторической эпохи MS-DOS, когда имена файлов содержали до 8 симво-
лов и файл имел расширение из 3 символов).
178 Глава 11. Запись CD и DVD

О Rock Ridge — расширение ISO-9660 с поддержкой длинных имен и символи-


ческих ссылок в стиле Unix. Сохраняет все атрибуты файла, в том числе
владельца и разрешения. При чтении дисков в системе Windows файловые
атрибуты Unix не отображаются.
О Joliet — расширение ISO-9660 компании Microsoft. Позволяет использовать
в именах файлов символы Юникода, а также поддерживает длинные имена.
Кроме того, создает усеченные имена файлов с целью совместимости с MS-
DOS (странные имена вида FILENA~1.TXT). Имена файлов содержат до 64 сим-
волов, могут включать пробелы и читаются на компьютерах с системой Win-
dows 95 и выше, а также на компьютерах Macintosh с расширением Joliet
Volume Access. На Mac не читаются имена файлов joliet длиной более 31 сим-
вола.
Документация по стандартам CD:
О Yellow Book — физический формат компакт-дисков с данными;
О Orange Book — физический формат записываемых компакт-дисков с поддерж-
кой многосеансовой записи;
о Red Book — стандарт CD Audio, описывающий физические свойства диска
и кодировку оцифрованного звука.
Если вас интересуют технические подробности, перечисленные книги можно
приобрести на сайте http://www.licensing.pholips.com.
Важные термины из области записи дисков:
О сеанс — сегмент диска, записанный за один раз и содержащий файлы данных
или музыкальные дорожки. Диск может содержать несколько сеансов;
О дорожка — программная область компакт-диска делится на дорожки; каждая
дорожка может содержать данные только одного диска. Диск (даже DVD)
может содержать не более 99 дорожек;
О многосеансовая запись — позволяет постепенно добавлять файлы на диск
(вместо того, чтобы записывать их все за один раз). Чтобы диск мог быть про-
читан, его необходимо «закрыть», то есть зафиксировать, однако в этом слу-
чае добавить на него новые файлы уже не удастся;
О SAO (Session-At-Once) — один полный сеанс: вводная запись (lead-in), про-
грамма и выводная запись (lead-out) на диске CD-R или CD-RW, записанная
одной непрерывной операцией;
О DAO (Disk-At-Once) — запись всего компакт-диска за один проход, или се-
анс. Процесс записи должен завершиться без перебоев, и добавить к нему но-
вые сеансы невозможно. Это самый надежный способ записи звуковых доро-
жек;
О ТАО (Track-At-Once) — возможность выполнения записи за несколько про-
ходов. Максимальное количество дорожек на диске равно 99.
Дополнительная информация о DVD приведена в DVD FAQ.no адресу http://
www. dvddemysti fied.com/dvdfaq. html.
Дополнительная информация о CD приведена в CD Recordable FAQ по адре-
су http://www.cdrfaq.org.
11.2. Определение адресов SCSI для записывающих дисководов CD и DVD 179

11.2. Определение адресов SCSI


для записывающих дисководов CD и DVD
Проблема
В вашей системе используется ядро 2.4. Чтобы записать диск CD или DVD, необ-
ходимо знать адрес шины SCSI (параметр dev=) для вашего устройства записи.

Решение
Команда cdrecord -scanbus вернет необходимую информацию. Конфигурация отдель-
ной системы с CD/DVD-ROM и устройством записи CD может выглядеть так:
$ cdrecord -scanbus
Cdrecord 1.10 (i686-pc-1inux-gnu) Copyright (C) 1995-2001 J r g S c h i l l i n g
Linux sg d r i v e r v e r s i o n : 3.1.24
Using l i b s c g version ' s c h i l y - 0 . 5 '
scsibusO:
0.0.0 0) 'TOSHIBA' 'DVD-ROM SD-M1202'. '1020' Removable CD-ROM
0.1,0 1) 'LITE-ON ' 'LTR-24102B ' '5S54' Removable CD-ROM
0.2,0 2) *
0.3.0 3) *
0.4.0 4) *
0.5,0 5) *
0.6.0 6) *
'
Устройства записи DVD выглядят так:
1.2,0 2) 'PIONEER ' 'DVD-ROM DVD-303 ' ' 1 . 0 9 ' Removable CD-ROM
Первые три числа задают шину SCSI, код устройства и код LUN (Logical Unit
Number) соответственно. Четвертое число снова повторяет код устройства. В па-
раметре cdrecord нужно передать три первых числа в следующем формате:
dev=0.1,0

Комментарий
Для выполнения команды cdrecord необходимы привилегии root. Чаще всего для
того, чтобы пользователи могли использовать cdrecord, в системе создается груп-
па cdrecord.
В документации иногда встречается запись вида
dev=1.0
Начальный 0 для нулевой шины SCSI часто не указывается. И все же проще
ввести лишнюю цифру и не оставить ни малейшей неоднозначности.
В ядре 2.6 отдельно задавать код устройства не нужно. В командной строке
достаточно передать имя /dev:
$ cdrecord dev=/dev/hdc <командьр>

См. также
cdrecord(l).
180 Глава 11. Запись CD и DVD

11.3. Включение эмуляции SCSI


для устройства записи CD и DVD
с интерфейсом IDE/ATAPI
Проблема
Программа записи CD (будь то cdrecord или графическая программа вроде X-CD-
Roast или КЗЬ) сообщает, что она не может найти в системе устройство записи.
А может быть, программа видит дисковод CD-R/RW, но не воспринимает диско-
вод CD-ROM, и из-за этого вы не можете копировать диски напрямую.

Решение
Убедитесь в том, что система эмуляции IDE-SCSI включена, а дисководы настро-
ены для ее использования. Это относится только к ядру Linux 2.4, поскольку в яд-
ре 2.6 дисководы IDE/ATAPI поддерживаются напрямую, с использованием стан-
дартных обозначений/dev/hd*.
Сначала убедитесь в том, что в системе доступен драйвер псевдоустройства
ide-scsi:
$ locate ide-scsi.o
/lib/modules/2.4.21/kernel/drivers/scsi/ide-scsi.0
Затем отредактируйте два текстовых файла: /etc/moduLes.conf и конфигураци-
онный файл загрузчика (пользователям Debian следует обращаться к подразделу
«Комментарий», так как в этой системе используются другие файлы). Сначала
определите имена дисковых устройств в своей системе:
$ dmesg | grep 'Ahd.:'
hda: IBM-DTLA-305020. ATA DISK drive
hdb: TOSHIBA DVD-ROM SD-M1202. ATAPI CD/DVD-ROM drive
hdc: LITE-ON LTR-24102B. ATAPI CD/DVD-ROM drive
Имена нужных устройств — hdb и hdc. Включите следующие строки в файл
/etc/modules.conf:
alias scsijiostadapter ide-scsi
options ide-cd ignore="hdb hdc"
alias scdO srjnod
pre-install sg modprobe ide-scsi
pre-install sr-mod modprobe ide-scsi
pre-install ide-scsi modprobe ide-sd
Затем пользователи LILO добавляют следующий фрагмент в конец файла lilo.conf,
используя обозначения hd* для своих устройств:
append="hdb=ide-scsi"
append="hdc=ide-scsi"
Пользователи GRUB включают следующий фрагмент в файл /etc/grub.conf,
в конец строки kernel, используя обозначения hd* для своих устройств:
hdb=scsi hdc=scsi
Полная строка должна выглядеть так:
kernel /boot/vmlinuz-2.4.21 root=/dev/hdal ro hdb=scsi hdc=scsi
11.4. Создание компакт-диска с данными для распространения 181

Перезагрузите систему и убедитесь в том, что модуль ide-scsi загружен:


$S lsmod | grep ide-scsi
ide-scsi 9456 1
scsi mod 55124 2 [ide-scsi sr mod]
Теперь команда cdrecord -scanbus должна выводить имена устройств SCSI для
всех дисководов, настроенных па использование IDE-SCSI.
Обратите внимание: имена устройств изменились, поэтому при монтировании
дисков вместо имен/dev/hd* будут использоваться имена/dev/scd*. Вероятно, сто-
ит обновить файл /etc/fstab новыми именами /dev.

Комментарий
В Debian данные конфигурации модулей хранятся в файлах /etc/modules и /etc/
modutils/idecd_opts. Включите в/etc/modules строку
ide-scsi
Затем включите в /etc/modutils/idecd_opts строку
options ide-cd ignore="hdb hdc
Для ядра 2.6 никакие особые действия не нужны, достаточно указать в команд-
ной строке имя /dev:
$ cdrecord dev=/dev/hdc <команды>

ч*м> также
grub(8), lilo(8).

11.4. Создание компакт-диска с данными


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

Решение
Воспользуйтесь командами mkisofs, mount и cdrecord. Сначала упакуйте все файлы
в единый файл .iso командой mkisofs, затем смонтируйте .iso для проверки пра-
вильности файловой системы. Затем запишите данные на диск командой cdrecord.
В нашем примере файл .iso называется data.iso, компакт-диску присвоено
имя data_disk, а все файлы копируются из каталога /disk_data. Точка монтирова-
ния для .iso — /test-iso.
Выполните следующие команды:
# mkisofs -J -г -v -V data disk -о data.iso /diskdata
# mkdir /test-iso
# mount -t iso9660 -o ro.loop data.iso /test-iso
182 Глава 11. Запись CD и DVD

# Is /test-iso
# umount /test-iso
# cdrecord -v eject dev=0,l,0 data.iso

Комментарий
В представленном решении все команды выполняются пользователем root. Это
сделано для простоты, потому что команды mount, mkisofs и cdrecord требуют при-
вилегий root. Чтобы пользователи могли выполнять команду mount, используй-
те sudo. Для выполнения команд mkisofs и cdrecord создайте группу cdrecord. На-
значьте ее владельцем mkisofs и cdrecord и включите пользователей в группу
cdrecord.
Помните, что в ядре 2.6 эмуляция IDE-SCSI не нужна, поэтому в командной
строке cdrecord можно просто указать имя /dev:
# cdrecord dev=7dev/hdc <номанды>
В этих нескольких командах выполняется довольно большая работа. Команда
mkisofs берет все файлы и упаковывает их в один большой файл .iso. Если вам
когда-либо доводилось загружать дистрибутив Linux для записи на компакт-диск,
он был упакован в виде файла .iso. Это часто создает проблемы для новичков,
которые не понимают, почему они получили один гигантский файл вместо дерева
каталогов с файлами Linux.
Рассмотрим командную строку mkisofs более подробно:
# mkisofs -J -r -v -V data disk -о data.iso /diskdata
Ключи:
О -J — использование схемы имен Joliet для совместимости с Windows;
О -г — использование схемы имен Rock Ridge для совместимости с Unix/Linux.
Все файлы доступны для чтения для всех пользователей;
О -v — расширенный вывод;
О -V data_disk — определение идентификатора тома (data_disk). Это то самое имя
диска, которое отображается в Проводнике Windows и в команде file - </dev/
scd* (о том, как определить имена/dev, рассказано в разделе 9.12);
О -о data.iso /disk.data — имя нового образа .iso и файлы, выбранные для упаков-
ки в .iso (в данном случае все содержимое /disk_data). Обратите внимание:
корневой каталог /disk-data не копируется, только его содержимое.
Монтирование .iso перед записью диска является простейшей страховкой. Если
вы видите все свои файлы — можно переходить к записи. Если нет, значит, при
формировании файла .iso была допущена ошибка и его придется построить зано-
во. Проверка .iso осуществляется так:
# mkdir /test-iso
# mount -t iso9660 -o ro.loop data.iso /test-iso
Откройте каталог/test-iso и проверьте свои файлы.
Параметры команды mount:
О -t iso9660 — тип файловой системы. Компакт-диски с данными всегда отно-
сятся к типу iso9660 (кроме udf, но в этом случае вам не придется создавать
образ .iso);
11.5. Формирование файловых деревьев на компакт-дисках с данными 183

О -о гоДоор data.iso — параметры монтирования data.iso: доступ только для чте-


ния, с использованием файловой системы, внедренной в файл;
О /test-iso — каталог, созданный как точка монтирования.
После завершения проверки .iso можно записать файл на диск.
# cdrecord -v -eject dev=0.1.0 data.iso
Параметры команды:
О -v — расширенный вывод;
О -eject — извлечение диска после записи (не обязательно);
О -dev=0,l,0 — адрес SCSI устройства записи компакт-дисков;
О data.iso — имя файла .iso, который содержит файлы, записываемые на диск.
Команда cdrecord по умолчанию записывает данные на максимальной скорос-
ти, поддерживаемой устройством и диском. При возникновении ошибок попро-
буйте снизить скорость записи:
# cdrecord -v -eject speed=4 dev=0,l,0 data.iso
Современные записывающие устройства поддерживают высокую скорость за-
писи (20Х и выше), но многие диски CD-R/CD-RW ограничиваются гораздо бо-
лее низкими скоростями. Как правило, команда cdrecord автоматически подбира-
ет оптимальную скорость записи.
•XI
См. также
cdrecord(l), mount(8), mkisofs(8); раздел 9.12; раздел 11.2.

11.5. Формирование файловых деревьев


на компакт-дисках с данными
Проблема
При выборе каталогов, записываемых на компакт-диск, команда mkisofs отбрасы-
вает корневые каталоги и сохраняет только файлы и подкаталоги. Но вам хоте-
лось бы сохранить существующие файловые деревья (или создать новые).

Решение
Включите параметр -graft-points в вызов mkisofs. В следующем примере сохраня-
ется существующая структура каталогов scripts и finances:
$ Is
finances scripts
$ mkisofs -r -J -v -o cdimgl.iso -graft-points scripts/=scripts finance/=finances

Результат легко проверить — достаточно смонтировать образ и просмотреть


структуру каталогов командой tree -d:
$ sudo mount -t iso9660 -o ro.loop cdimgl.iso /mnt /iso
$ tree -d /mnt/iso
184 Глава 11. Запись CD и DVD

mnt
|-- finances
'-- scripts
Допустим, вы хотите переместить эти два каталога в каталог /files/archive/june
на компакт-диске. Прежде всего проследите за тем, чтобы каталог /files/archive/
June присутствовал на жестком диске. Затем выполните команду:
$ mkisofs -r -J -v -о cdimgl.iso -graft-points \
fi1es/archive/june/finances/=finances fi1es/archive/june/scripts/=scripts
Как и в предыдущем случае, результат проверяется монтированием:
$ tree -dL 4 /mnt/iso
mnt
'-- files
-- archive
'-- june
|-- finances
'-- scripts

См. также
Tree(l), mkisofs(8).

11.6. Копирование диска CD или DVD


Проблема
Требуется создать копию диска CD или DVD, содержащего данные, аудио- и ви-
деоинформацию и т. д.

Решение
Чтобы напрямую скопировать содержимое исходного диска на записываемый
диск, выполните следующую команду:
$ cdrecord -v dev=0,1.0 -isosize /dev/scdO
Способ быстрый, но рискованный, потому что любой перебой в потоке данных
приведет к порче всей копии. Лучше сначала кэшировать оригинал на жестком
диске. В следующем примере сначала проводится проверка записи:
$ dd if=/dev/scdO of=/tmp/diskfi 1 е.iso
$ cdrecord dev=0.1,0 fs=8m -v -eject -dummy /tmp/diskfile.iso
Чтобы записать данные на диск, удалите ключ -dummy.

Решение
Как говорилось выше, ядро 2.6 не нуждается в эмуляции IDE-SCSI — просто ис-
пользуйте имя /dev:
# cdrecord dev=/dev/hdc <команды>
Не забудьте, что объем созданного временного файла равен объему копируе-
мого диска.
11.7. Стирание диска CD-RW 185

Команда dd производит побайтовое копирование файла. Ее параметры:


О if — входной файл (источник);
О /dev/scdO — имя устройства (см. раздел 11.3). Монтирование диска не обяза-
тельно;
О of - выходной файл (приемник);
О /tmp/diskfile.iso — временная копия исходного файла на жестком диске. При-
свойте ей любое имя по своему усмотрению, но сохраните расширение .iso.
Параметры cdrecord остаются теми же, что и в разделе 11.4, но к ним добавля-
ются два новых параметра:
О fs=8m — размер циклического буфера: чем больше, тем лучше... до определен-
ной степени. Помните, что перебои приводят к фатальным последствиям;
параметр fs=8m создает буфер, объем которого достаточен для продолжения
записи даже в том случае, если пересылка данных по каким-то причинам за-
медлится. Если 8 Мбайт недостаточно, вероятно, вам стоит подумать о мо-
дернизации своего компьютера. С другой стороны, значение больше 8 Мбайт
не обязательно лучше, потому что операционная система может тратить вре-
мя на перезагрузку таблиц MMU (Memory Management Unit). Значение по
умолчанию равно 4 Мбайт.
О -dummy — замечательная функция тестового прогона перед записью на диск. Ди-
сковод выполняет все операции с выключенным лазером, что дает пользовате-
лю возможность обнаружить ошибки до того, как они будут перенесены на диск.

См. также
cdrecord(l), dd(l); раздел 11.4.

11.7. Стирание диска CD-RW


Проблема
Требуется стереть содержимое перезаписываемого диска, чтобы подготовить его
к записи нового материала.

Решение
Воспользуйтесь параметром blank команды cdrecord. Значение blank=fast стирает
только оглавление диска (ТОС), область памяти программы (РМА) и pregap:
$ cdrecord -v t>1ank=fast dev=0,l,0
Более полное стирание производится с параметром all:
$ cdrecord -v Ыапк=а11 dev-0.1.0
He рассчитывайте, что стирание полностью уничтожит информацию; при же-
лании данные все равно удастся восстановить. Параметр blank=fast прекрасно под-
ходит для повседневного использования, а работает намного быстрее — и к тому
же продлевает жизнь диска CD-RW.
186 Глава 11. Запись CD и DVD

Последний сеанс многосеансового диска стирается командой


$ cdrecord b1ank=session
А в маловероятном случае, если ваш диск поддерживает стирание на уровне до-
рожек, вы можете стирать дорожки точно так же, как сеансы, начиная с последней:
$ cdrecord blank=track

Комментарий
Стирание на уровне дорожек не поддерживается большинством дисководов. Сти-
рание дорожек или сеансов в произвольной последовательности также невозмож-
но — необходимо начать с конца и постепенно продвигаться к началу. Если при
использовании какого-либо значения параметра blank будет получено сообщение
об ошибке, попробуйте добавить ключ -force:
$ cdrecord blank=track -force
Но скорее всего, диск был поврежден и его лучше выбросить.
Чтобы получить список всех режимов стирания, выполните команду
$ cdrecord blank=help
Помните, что CD-RW имеет ограниченный цикл жизни, а количество опера-
ций перезаписи не бесконечно. Точное значение зависит от производителя и ка-
чества диска, но диск должен выдержать как минимум 100 операций перезаписи,
прежде чем он станет ненадежным.

См. также
Cdrecord(l).

11.8. Запись многосеансового


компакт-диска с данными
Проблема
Требуется постепенно добавлять файлы на диск (в отличие от одноразовой запи-
си). Команда cdrecord закрывает (фиксирует) диск, и добавить на него дополни-
тельные файлы уже не удастся. Как обойти это ограничение?

Решение
Процесс состоит из двух шагов. Обе команды, cdrecord и mkisofs, поддерживают
специальные параметры для создания многосеансовых дисков. При первоначаль-
ной записи файлов на CD создайте файл .iso обычным способом, а затем включи-
те в командную строку cdrecord ключ -multi:
$ cdrecord -v eject dev=0,l,0 -multi first-image.iso
Затем создайте дополнительные образы .iso при помощи ключей -С и -М:
$ mkisofs -о second-image.iso -J -r -V Session2 -С 'cdrecord dev=0.1.0 -msinfo' \
-M 0,1,0 /path-to-new-files
11.9. Создание загрузочного компакт-диска 187

Затем запишите новый файл .iso на диск, снова используя ключ -multi:
$ cdrecord -v -eject dev=0.1.0 -multi second-image.iso
Операцию можно повторять сколько угодно раз. Добравшись до последнего сеан-
са, опустите ключ -multi. Диск необходимо закрыть и зафиксировать, в противном
случае он не будет читаться большинством дисководов. Другой способ закрыть
диск без записи дополнительного сеанса основан на использовании ключа -fix:
$ cdrecord -v -fix -eject dev=0.1,0

Комментарий
Компакт-диски записываются по сеансам. В каждом сеансе задействовано опреде-
ленное количество секторов диска, f la односеансовом диске присутствует вводная
запись, одно оглавление, данные и выводная запись, присутствие которой фикси-
рует диск и не позволяет записать на него что-либо еще. Команда mkisofs позволяет
связать несколько сеансов на многосеансовом диске. Для этого нужно знать номера
начального и конечного секторов каждого сеанса. Рассмотрим параметры команды:
$ mkisofs -о second-image.iso -J -г -V Session2 -С "cdrecord dev=0.1.0 -msinfo' \
•M 0,1,0 /path-to-new-files
О -о second-image.iso — имя нового файла .iso (выбирается произвольно);
О -J — схема имен Joliet для совместимости с Windows (не обязательно);
О -г — схема имен Rock Ridge для совместимости с Unix/Linux, с открытием
общего доступа к файлам для чтения. Параметр обязателен для создания мно-
госеансовых дисков;
О -С "cdrecord dev=0,l,0 -msinfo" — ключ -С существует под несколькими имена-
ми: CD+, CDExtra, tast_sess_start, next_sess_start. Он указывает mkisofs на конеч-
ную точку последнего сеанса и начальную точку следующего сеанса. Обрат-
ные апострофы приказывают командному процессору найти и использовать
значения автоматически. Их также молено сгенерировать вручную:
cdrecord dev=0,l,0 -msinfo
12968.20172
О -М 0,1,0 — параметр -М должен использоваться с -С. Он определяет адрес шины
SCSI устройства записи CD;
О /путъ_к_новъш_файлам — список файлов (или каталог), включаемых в но-
вый файл .iso.

См. также
cdrecord(l), mkisofs(8).

11.9. Создание загрузочного компакт-диска


Проблема
Требуется записать загрузочный компакт-диск.
188 Глава 11. Запись CD и DVD

Решение
Образ загрузочной информации включается в файл .iso командой mkisofs.
Если загрузочный образ находится на дискете, сначала создайте каталог boot/
в файловом дереве, записываемом па диск, и скопируйте его туда:
% dd if=/dev/fdO of=~/cd-files/boot/boot.img bs=10k count=144
Или скопируйте его из другого каталога на жестком диске:
$ ср boot.img ~/cd-files/boot/boot/img
Затем упакуйте .iso:
$ mkisofs -г -b boot/boot.img -с boot/boot.catalog -o bootable-cd.iso ~/cd-files
Запишите диск командой cdrecord, как это обычно делается. Вы получаете за-
грузочный диск.

Комментарий
mkisofs использует спецификацию El Torito для создания загрузочного образа,
который «обманывает» PC и заставляет его думать, что он видит загрузочную
дискету.

См. также
mkisofs(8).

11.10. Разбиение больших файлов


на несколько дисков
Проблема
Вы работаете с очень большим файлом — скажем, архивом .tar или огромным гра-
фическим изображением. Файл требуется сохранить на компакт-диске, но его
объем превышает объем одного диска.

Решение
Разбейте файл утилитой split, а затем преобразуйте новые файлы в образы .iso
и запишите их на диски. Сборка исходного файла осуществляется командой cat
Допустим, имеется 2-гигабайтный архив tar с именем big-backup. В следующем
примере он разбивается на 650-мегабайтные фрагменты. Емкость компакт-диска
составляет 700 Мбайт, но нужно оставить место для служебных данных:
$ split -b 650m big-backup.tar.gz
creating f i l e 'xaa'
creating f i l e 'xab'
creating f i l e 'xac'
Каждый файл теперь занимает около 682 Мбайт. Преобразуйте каждый файл
в образ .iso:
$ for i in xa*; do echo -e "$i"; mkisofs -o $i.iso $i; done
11.11. Запись дисков DVD с данными 189

После завершения обработки команда Is выведет следующий результат:


$ Is
хаа xaa.iso xab xab.iso хае хае.iso
Теперь запишите каждый файл .iso на отдельный компакт-диск:
$ cdrecord -v -eject dev=0,l,0 xaa.iso
$ cdrecord -v -eject dev=0.1.0 xab.iso
$ cdrecord -v -eject dev=0.1.0 xac.iso
Чтобы восстановить разбитый архив, скопируйте файлы .iso с компакт-диска
на жесткий диск и воспользуйтесь командой cat:
$ cat хаа xab xac > big-backup.tar.gz
Или последовательно присоединяйте содержимое каждого компакт-диска к ар-
хиву на жестком диске без предварительного копирования:
$ cat /cdrom/xaa > big-backup.tar.gz
$ cat /cdrom/xab » big-backup.tar.gz
$ cat /cdrom/xac » big-backup.tar.gz
Собранному файлу можно присвоить любое имя. Главное — сохранить расши-
рение tar.gz. После этого архив можно распаковать:
$ tar xzvf big-backup.tar.gz

Комментарий
Описанный способ хорошо подходит для проведения архивации «на скорую руку»
или перемещения большого количества файлов, но не используйте его для регу-
лярной архивации. Если хотя бы один фрагмент будет испорчен, восстановить
данные будет довольно трудно (особенно из сжатых файлов).
О проведении масштабной архивации рассказано в главе 16.

split(l), tar(l), cat(l); глава 16.

11.11. Запись дисков DVD с данными


Проблема
Требуется записать на DVD данные — резервную копию системы, коллекцию гра-
фики или установочные диски Linux — из образов .iso.

Решение
Используйте утилиту growisofs из пакета dvd+rw-tools. Но прежде чем что-нибудь
делать, убедитесь в том, что для устройства записи DVD не включена поддержка
supermount/automount, поскольку это приведет к порче диска.
Копирование файлов с жесткого диска на DVD осуществляется за одну опе-
рацию:
# growisofs -Z <имя устройства> <команды mkisofs> <файлы>
190 Глава 11. Запись CD и DVD

Пример:
# growisofs -Z dev=l,2,0 -dvd-compat -udf -R -J -v /home/carla
Ha DVD легко скопировать дополнительные файлы. Всегда указывайте ключ -Z
для первой группы файлов, записываемых на DVD, а затем используйте ключ -М
для дополнительных файлов:
# growisofs -Z dev=1.2.0 -dvd-compat -udf -R -J -v /etc
# growisofs -M dev=l,2.0 -dvd-compat -udf -R -J -v /shared/projectfiles
# growisofs -M dev=l,2,0 -dvd-compat -udf -R -J -v /var/www/pubiicsite
Закрывать и фиксировать диск отдельной командой не обязательно.

Комментарий
В последнее время появляется все больше дистрибутивов Linux в виде файлов
.iso, размеры которых предназначены для записи на DVD, и это вполне естествен-
но — некоторые дистрибутивы занимают 8 и более компакт-дисков.
Команда growisofs заменяет cdrecord и обеспечивает интерфейс к mkisofs, так
что вы сможете использовать знакомые параметры mkisofs с двумя исключе-
ниями:
О не используйте параметр -о для указания выходного файла, потому что growisofs
пишет непосредственно на DVD;
О не используйте параметр -С, так как growisofs определяет начальную и конеч-
ную точки дорожек самостоятельно.
Ключ -dvd-compat обеспечивает совместимость с большинством существующих
дисководов DVD.
Ключ -udf добавляет ограниченную поддержку UDF. На момент написания
книги пакетная запись еще не была надежно реализована в ядре Linux. В принци-
пе ее можно исключить, хотя ее включение «на всякий случай» обойдется всего
в несколько битов метаданных,
Утилиты dvd+rw-tools существуют в виде пакетов RPM, пакетов Debian и в фор-
мате .tar. В архиве .tar также имеется файл spec на тот случай, если вам захочется
создать собственный пакет RPM.
Форматировать новые диски DVD-RW не обязательно, потому что, начиная
с версии 5.10, growisofs делает это автоматически при добавлении файлов на DVD.
Чтобы узнать номер версии, выполните команду
$ growisofs --version
Программа supermount должна обеспечивать возможность вставки и извлечения
дисков (например, дискет) без ввода команд mount и unmount. Она появилась в Red
Hat, SuSE и других дистрибутивах, где обычно включается по умолчанию.
Чтобы временно отключить supermount, выполните команду
# /usr/sbin/supermount -1 disable
Повторное включение производится с параметром -1 enable. К сожалению,
supermount работает не очень надежно, поэтому, возможно, ее лучше отключить
вообще. Для этого удалите записи supermount и /etc/fstab. Если вы предпочитаете
перестраховаться, удалите пакет magicdev:
# rpm -q magicdev
11.12. Запись аудиодиска для стандартных проигрывателей 191

В Debian это делается командой


# apt-get remove magic-dev

См. также
Домашняя страница dvd+rw-tools (http://fly.chalmers.se/~appro/linux/DVD+RW).

11.12. Запись аудиодиска


для стандартных проигрывателей
Проблема
Требуется узнать, как записать аудиодиск для воспроизведения в бытовом проиг-
рывателе (скажем, в машине). Также нужно уметь преобразовывать различные
аудиоформаты (скажем, ogg-vorbis, mp3, .wav и .cdr), поскольку они не воспроизво-
дятся на стандартных проигрывателях компакт-дисков, только на компьютерах.

Решение
Используйте sox, normalize и cdrecord, а также «болванки», предназначенные для
записи аудио.
На первом этапе программа sox преобразует звуковые файлы в формат .cdr,
после чего формат .cdr преобразуется в формат .wav.
Затем ключ -audio команды cdrecord преобразует файлы .wav в формат CD-DA
(Compact Disk Digital Audio), поддерживаемый стандартными проигрывателями.
$ sox soundfile fi1ename.cdr
$ sox filename.cdr filename.wav
$ cdrecord -v nofix -eject dev-0,1.0 -audio -pad filename.wav
Ключ -pad гарантирует правильное заполнение секторов диска, a -nofix остав-
ляет диск открытым для добавления новых дорожек. Чтобы закрыть и зафикси-
ровать диск, выполните следующую команду:
$ cdrecord -v -fix -eject dev-0,1,0
Преобразовывать файлы один за другим утомительно. Следующая команда
Bash преобразует группу файлов .одд в формат .cdr:
$ for i in *.одд; do echo $i; sox $i ${iK.ogg}.cdr ; echo ${i££.ogg}.cdr; done
Замените одд расширениями тех файлов, которые требуется преобразовать.
Если коллекция дорожек собирается из разных источников, воспользуйтесь
утилитой normalize и уравняйте громкость звука с ключом -m (Mixed mode):
S normalize -m /soundfiles/*.wav
Выбор дорожек для записи может осуществляться разными способами. Сле-
дующая команда записывает все дорожки в формате .wav в каталог/home/songs
в определенном порядке: сначала цифры, затем алфавитные символы в верхнем
регистре, затем алфавитные символы в нижнем регистре:
$ cdrecord -v -nofix -eject dev=0,1.0 -audio -pad /home/songs/*.wav
192 Глава 11. Запись CD и DVD

Или перейдите в каталог /songs и перечислите отдельные песни:


$ cdrecord -v -nofix -eject dev=0.1,0 -audio -pad songl.wav song3.wav song7.wav
Обязательно используйте диски CD-R, рассчитанные на воспроизведение в бы-
товых проигрывателях.

Комментарий
Новые версии sox вроде бы должны поддерживать формат .трЗ, но на практике
это не всегда так. Выполните команду sox -h и посмотрите, какие форматы под-
держивает команда. Если ваша конкретная версия sox не поддерживает .трЗ, ис-
пользуйте mpgl23 и sox:
$ mpgl23 -b 10000 -s filename.трЗ | sox -t raw -r 44100 -s -w -c 2 -filename.wav
Параметры:
О -b 10000 — размер буфера в байтах;
О -s — перенаправление результата в стандартный вывод (вместо попытки вос-
произведения файла);
О sox -t raw -r 44100 -s -w -с 2 — описание формата .cdr с явным указанием специ-
фикаций.
Диск не может содержать более 99 дорожек. Впрочем, чтобы па одном диске
поместилось 99 песен, эти песни должны быть совсем короткими.
Если музыкальные файлы уже хранятся в формате .wav, вероятно, вам не при-
дется преобразовывать их. Тем не менее не все файлы .wav имеют правильную
структуру для записи на диск; в таких случаях команда cdrecord остановится и
выдаст сообщение об ошибке. Преобразуйте неправильный файл .wav в .cdr при
помощи sox, а затем снова преобразуйте .cdr в .wav.
Форматы .wav и .flac обеспечивают наивысшее качество из всех форматов циф-
рового аудио. Всегда начинайте с них, если существует такая возможность, а по-
том преобразуйте их в другие форматы по мере необходимости. Чаще всего это
делается для экономии места, поскольку файлы .wav и .flac очень велики. Файл
.ogg обычно занимает около 1/10 объема файла .wav.
Ogg Vorbis — открытая и не защищенная патентами технология кодирования
аудиоинформации. Она не связана с лицензионными отчислениями или другими
ограничениями, присущими запатентованным, закрытым форматам типа МРЗ.
Формат .одд обеспечивает хорошее качество звука при сжатии данных с потеря-
ми. Под «потерями» имеется в виду, что часть информации пропадает для умень-
шения размера файла.
МРЗ — другой качественный формат сжатия с потерями. Это запатентован-
ный, закрытый формат, поэтому его использование ограничено, код закрыт, а ис-
полнители и распространители должны платить лицензионные отчисления. Ком-
пания «Thomson and Fraunhofer», которой принадлежат права на формат МРЗ,
включают в него поддержку DRM (Digital Rights Management, а проще говоря,
ограничение копирования).

См. также
cdrecord(l), sox(l), normalize(l).
Глава 12
Системный
загрузчик
и альтернативная
загрузка

12.1. Введение
В системе Linux существует два отличных загрузчика, GRUB (GRand Unified
Bootloader) и LILO (Linux LOader). GRUB новее LILO и обладает большими воз-
можностями. Оба загрузчика отличаются гибкостью и большим потенциалом на-
стройки; кроме того, они способны реализовывать сложные сценарии настрой-
ки — такие, как альтернативная загрузка нескольких операционных систем или
ядер Linux или передача параметров ядру во время загрузки.
Если вы все еще используете LILO, возможно, настало время подумать о пере-
ходе на GRUB. Хотя загрузчики в целом похожи друг на друга, GRUB обладает
рядом дополнительных возможностей, которые выводят его на первое место:
О командная консоль GRUB позволяет находить загрузочные образы, ядра
и корневые файловые системы;
О GRUB хранит загрузочную информацию в файловой системе, а не в главной
загрузочной записи (MBR);
О GRUB читает файловые системы и исполняемые файлы ядра, не заставляя
пользователя ограничиваться геометрией диска;
О и что самое лучшее, загрузчик GRUB абсолютно независим от операционной
системы. Если установить GRUB в отдельный загрузочный раздел, вы смо-
жете удалять и переустанавливать операционные системы по своему усмот-
рению, и вам не придется каждый раз заново устанавливать загрузчик.
И GRUB, и LILO позволяют загружать операционные системы, не входящие
в семейство Linux (например, Windows, OS/2, BSD Unix и т. д.). Для операцион-
ных систем, которые они не могут загружать напрямую (таких, как Windows),
GRUB и LILO применяют цепную загрузку, то есть передают управление собствен-
ному загрузчику Windows.
Главная загрузочная запись занимает первые 512 байт первого сектора перво-
го раздела диска. В ней находится таблица разделов и первичный загрузчик —
небольшая программа, хранящаяся в первых 446 байтах MBR, которая передает
194 Глава 12. Системный загрузчик и альтернативная загрузка

управление вторичному загрузчику, хранящемуся в каталоге /boot. Остальные


66 байт MBR занимает таблица разделов.
Linux позволяет создать на диске IDE до 63 разделов: 3 первичных раздела
и 4 раздел, содержащий до 60 логических разделов в одном расширенном разделе.
Диски SCSI ограничиваются 15 разделами: 3 первичных и 12 логических в од-
ном расширенном разделе.

12.2. Переход с LILO на GRUB


Проблема
Вы ознакомились с преимуществами GRUB, описанными в предыдущем разделе.
Сейчас вы используете LILO, но хотите перейти на GRUB, причем так, чтобы не
переделывать всю систему.

Решение
Переход на GRUB не нарушает работоспособности системы.
Прежде всего установите GRUB или обновите программу до последней вер-
сии. Номер версии определяется командой
$ grub --version
g r u b (GNU GRUB 0 . 9 4 )
Затем выполните ряд подготовительных действий:
1. Распечатайте таблицу разделов (fdisk -I | Ipr).
2. Распечатайте файл lilo.conf.
3. Создайте резервную копию данных и держите под рукой диск аварийного вос-
становления (загрузочную дискету LILO или диск Knoppix).
4. Оставьте установку LILO на случай, если вы захотите вернуться к ней.
Затем выполните следующие действия:
1. Создайте загрузочную дискету GRUB.
2. Установите GRUB в MBR.
3. Загрузите систему.
4. Отредактируйте конфигурационный файл GRUB, menu.1st.
Чтобы создать загрузочную дискету, найдите каталог/grub/i386. Его «офици-
альное» местонахождение — /urs/lib/grub/i386-pc, но в Red Hat используется ка-
талог/usr/share/grub/i386-pc. В других дистрибутивах также могут существовать
различия. Скопируйте файлы stagel и stage2 на дискету командой dd:
$ dd if-stagel of=/dev/fdO bs=512 count=l
1+0 records in
1+0 records out
512 bytes transferred in 0.550740 seconds (930 bytes/sec)
$ dd if=stage2 of=/dev/fd0 bs=512 seek=l
209+1 records in
12.2. Переход с LILO на GRUB 195

209+1 records out


107250 bytes transferred in 6.889581 seconds (15567 bytes/sec)
Загрузите систему с дискеты. Теперь необходимо найти корневое устройство,
то есть раздел с загрузочными фаршами GRUB первой и второй стадии загрузки:
grub> find /boot/grub/stagel
(hdO.O)
Задайте корневое устройство:
grub> root (hdO.O)
Обратите внимание: в GRUB используется собственная схема нумерации раз-
делов. Запись hdO,O соответствует/dev/hdal (см. подраздел «Комментарий»),
Теперь установите GRUB в MBR (первый сектор первого диска):
grub> setup (hdO)
Пора завершить загрузку. Снова задайте корневое устройство:
grub> root (hdO.O)
Введите путь к ядру и корневой файловой системе. Данные берутся из файла
lilo.conf. Обязательно присоедините ключ го, чтобы ядро и корневая файловая
система монтировались только для чтения:
grub> kernel /boot/vmlinuz-2.4.21 root=/dev/hdal ro
He путайте root в строке kernel с корневым устройством. Root в строке kernel
идентифицирует корневую файловую систему, тогда как корневым устройством
называется раздел, содержащий каталог /boot.
Вероятно, теперь стоит создать меню загрузки GRUB. За подробностями об-
ращайтесь к рецепту 12.9.

Комментарий
Всегда проверяйте диски аварийного восстановления перед тем, как их использо-
вать.
GRUB использует собственную схему нумерации разделов; отсчет начинается
с 0, а не с 1. Диски IDE и SCSI обозначаются hd, а флоппи-дисководы обознача-
ются fd.
Таблица разделов Linux:
О 1-4-первичныеразделы;
О 5 и выше — расширенные разделы.
В GRUB она принимает следующий вид:
О 0-3 — первичные разделы;
О 4 и выше — расширенные разделы
Дополнительные диски обозначаются hdl, hd2 и т. д. Таким образом, hdO,3 —
то же самое, что /dev/hda4, a hdl,5 соответствует /dev/hdb6.

также
Раздел «Введение» настоящей главы; раздел 12.7; раздел 12.9; The Grub Manual
(http://www.gnu.org/software/manual/grub.html); info grub.
196 Глава 12. Системный загрузчик и альтернативная загрузка

12.3. Установка GRUB без дискеты


Проблема
Требуется установить GRUB, но в вашей системе нет флоппи-дисковода. Л мо-
жет, дисковод есть, но вы не можете найти ни одной рабочей дискеты.

Решение
Воспользуйтесь командной консолью GRUB.
Прежде всего установите GRUB или обновите программу до последней вер-
сии. Номер версии определяется командой
$ grub --version
grub (GNU GRUB 0.94)
Затем выполните ряд подготовительных действий:
1. Распечатайте таблицу разделов (fdisk -L | Ipr).
2. Распечатайте файл lilo.conf.
3. Создайте резервную копию данных и держите под рукой диск аварийного вос-
становления (загрузочную дискету LILO или диск Knoppix).
4. Оставьте установку LILO на случай, если вы захотите вернуться к ней.
Затем запустите консоль GRUB:
# grub
Probing devices to guess BIOS drivers. This may take a long time.

GNU GRUB version 0.94 (640K lower / 3072 upper memory)


[ Minimal BASH-like line editing is supported. For the f i r s t word. TAB l i s t s
possible command completions. Anywhere else TAB l i s t s the possible
completions of a device/filename. ]

grub>
Найдите загрузчик stagel:
grub> find /boot/grub/stagel
(hdO.O)
атем выполните три команды:
1
grub> root (hdO.O)
grub> setup (hdO)
grub> quit
Перезагрузите систему; вас приветствует командная консоль GRUB.
В разделах 12.7 и 12.9 рассказано о том, как создать меню загрузки GRUB.

Комментарий
При выполнении трех команд, о которых говорилось ранее, происходит следующее:
grut» root (hdO,O) Назначение корневого устройства
grub> setup (hdO) Установка GRUB в MBR
grut» quit Выход из GRUB
12.4. Установка GRUB сценарием grub-install 197

См. также
Раздел 12.7; раздел 12.9; The Grub Manual (http://www.gnu.org/software/manual/
grub.html); info grub.

12.4. Установка GRUB


сценарием grub-install
Проблема
Рецепт из раздела 12.3 не работает в вашей системе Debian, Gentoo или другой
системе, потомучто файлы GRUB устанавливаются в/usr/Lib/grub. Аможетбыть,
вы хотите использовать более простой способ установки GRUB без использова-
ния дискет.

Решение
Воспользуйтесь встроенным сценарием установки GRUB grub-install.
Прежде всего установите GRUB или обновите программу до последней вер-
сии. Номер версии определяется командой
$ grub - -version
grub (GNU GRUB 0.94)
Затем запустите сценарий grub-install. Если для/boot используется собствен-
ный раздел, укажите его:
# grub-install --root-directory=/boot /dev/hda
В противном случае достаточно имени устройства:
# grub-install /dev/hda
Затем выполните команду
# update-grub
Команда создает новый файл menu.1st. При перезагрузке появится меню GRUB,
и система загрузится, как обычно.

Комментарий
Вероятно, update-grub не создаст полный файл menu.1st в системе с альтернатив-
ной загрузкой, но по крайней мере вы сможете загрузить операционную систему
Linux. После этого в menu.1st можно будет добавить записи других операционных
систем.

См. также
grub-instalL(S); info grub; The Grub Manual (http://www.gnu.org/software/manual/
grub.html).
198 Глава 12. Системный загрузчик и альтернативная загрузка

12.5. Подготовка системы


для альтернативной загрузки Linux
Проблема
Вы собираетесь организовать альтернативную загрузку нескольких разных дист-
рибутивов Linux и хотите подготовить к ней свою систему. При этом вы собирае-
тесь использовать автономный раздел /boot и общие разделы /home и /swap.

Решение
Многие дистрибутивы Linux позволяют настраивать разделы во время установ-
ки. Создавайте новые разделы только в том случае, если они необходимы, и ос-
тавляйте свободной место для других установок.
Для примера рассмотрим «чистую» установку Fedora на диске IDE объемом
20 Гбайт со следующей схемой разбиения:
/dev/hdal Первичный 100 Мбайт /boot
/dev/hda2 Первичный 2500 Мбайт /
/dev/hda3 Первичный 3000 Мбайт /home
/dev/hda4 Расширенный
/dev/hda5 256 Мбайт /swap
Свободно 14144 Мбайт
Процедура выглядит так:
1. Загрузите первый установочный компакт-диск. Выберите клавиатуру, мышь
и монитор. Когда появится окно Disk Partitioning Setup, выберите Manually partition
with Disk Druid. На экране появляется графическое изображение жесткого диска.
2. Удалите все существующие разделы. Для этого поочередно выделите их
и щелкните на кнопке Delete.
3. Затем выделите Free Space и щелкните на кнопке New. Точка монтирования —
/boot. Выберите файловую систему Ext2 и введите размер раздела. Минимум,
который Fedora примет для /boot, составляет 100 Мбайт.
4. Снова выделите Free Space и щелкните на кнопке New. Точка монтирования —
/. Выберите файловую систему Ext3 и введите размер раздела 2500 Мбайт.
Щелкните на кнопке ОК.
5. Снова выделите Free Space и щелкните на кнопке New. Точка монтирования —
/home. Выберите файловую систему Ext3 и введите размер раздела 3000 Мбайт.
Щелкните на кнопке ОК.
6. Снова выделите Free Space и щелкните на кнопке New. Прокрутите список
filesystem options и найдите в нем строку swap. Точка монтирования отсутствует;
задайте размер 256 Мбайт. Щелкните на кнопке ОК.
7. На этой стадии еще можно вернуться и внести изменения, потому что новая
таблица разделов еще не была записана на диске. Завершив настройку, запи-
шите таблицу на диск кнопкой 0К в главном меню Disk Druid.
12.6. Установка экземпляров Linux в системе с альтернативной загрузкой 199

Продолжайте установку. Проследите за тем, чтобы был установлен именно за-


грузчик GRUB, а не LILO. Другие экземпляры Linux будут использовать те же разде-
лы /home и /swap. Вы можете установить сколько угодно экземпляров Linux, пока не
кончится свободное место на диске или не будут использованы все доступные разделы.

Комментарий
В большинстве современных дистрибутивов Linux GRUB устанавливается по
умолчанию. Проследите за тем, чтобы ваши дистрибутивы не установили LILO.
QTParted — превосходная графическая утилита для создания, удаления, пере-
мещения и изменения размеров дисковых разделов. Программа QTParted вклю-
чена в Knoppix, поэтому при желании вы можете настроить разделы перед уста-
новкой Linux. Изменения также можно внести после установки, даже если раздел
уже содержит данные. Разумеется, сначала необходимо создать резервную копию
всех данных. QTParted хорошо справляется со своей работой, но изменение табли-
цы разделов чревато неприятностями.
Размещение /swap в автономном разделе повышает быстродействие системы;
кроме того, такой раздел может использоваться совместно разными системами
при альтернативной загрузке. Выделение /home в автономный раздел позволит
вам использовать содержимое в разных экземплярах Linux, а также проводить
установку и удаление систем без восстановления данных из архива.
Linux позволяет создать на диске IDE до 63 разделов: 3 первичных раздела
и 4 раздел, содержащий до 60 логических разделов в одном расширенном разделе.
Диски SCSI ограничиваются 15 разделами: 3 первичных и 12 логических в од-
ном расширенном разделе.

См. также
fdisk(8); глава 13; домашняя страница QTParted (http://qtparted.sourceforge.net).

12.6. Установка дополнительных


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

Решение
Установите дополнительные экземпляры Linux в логические разделы. Затем для
каждого экземпляра системы создается запись в меню загрузки GRUB.
Сначала подготовьте систему по инструкциям, приведенным в разделе 12.5.
Загрузите установочный компакт-диск второго экземпляра Linux (в нашем при-
мере вторым экземпляром будет дистрибутив Libranet Debian). В меню определения
200 Глава 12. Системный загрузчик и альтернативная загрузка

дисковых разделов выберите пункт Partition & Layout drives. На экраие появляется
меню с информацией о существующих разделах. Выделите Free и щелкните на
кнопке New. Введите размер раздела 2500 Мбайт (точка монтирования — /). Вы-
берите тип файловой системы и проследите за тем, чтобы флажок Initialize? был
установлен. Это будет раздел /dev/hda6.
Выделите раздел /dev/hda3 и щелкните на кнопке Modify. Выберите точку монти-
рования/home и файловую систему Ext3, но не устанавливайте флажок Initialize?.
На этой стадии вы можете либо вернуться и внести изменения в разделы, либо
записать новую таблицу разделов на диск. При выборе команды Write появляется
предупреждение: «ALL EXISTING DATA ON THESE PARTITIONS WILL BE
DESTROYED» со списком разделов, которые будут отформатированы («инициа-
лизированы»). В списке должен присутствовать только раздел /.
Продолжайте установку. Когда дойдет до меню установки загрузчика, не пере-
записывайте MBR. На вопрос «Do you want Linux to handle booting your system?»
ответьте отрицательно. Мы хотим, чтобы загрузочные файлы устанавливались
в первый сектор загрузочного раздела, то есть /dev/hda6.
Когда Libranet потребует перезагрузить систему, вызовите командную консоль
GRUB и загрузите Libranet вручную:
grub> root (hdO.O)
grub> kernel /boot/vmiinuz-2.4.21 root=/dev/hda6 ro
grub> boot
(определение параметров загрузки в GRUB рассматривается в разделе 12.7).
Когда система начнет нормально работать, отредактируйте файл menu.1st и вклю-
чите новую систему в меню загрузки GRUB (см. раздел 12.9).
Запишите информацию разделов, созданных в процессе установки; это помо-
жет вам в редактировании menu.1st.

Комментарий
Программа установки Libranet автоматически находит существующие разделы
виртуальной памяти, поэтому выбирать их во время установки не нужно.
Вы можете отредактировать файл menu.1st в любом из новых экземпляров Linux.
Просто смонтируйте загрузочный раздел:
# mkdir /bootpartition
# mount /dev/hdal /bootpartition
# vim /bootpartition/boot/grub/menu.lst
В этом проявляются некоторые преимущества использования загрузочного
раздела — вы всегда знаете, где он находится, а его содержимое надежно изолиро-
вано от корневых файловых систем.
Вероятно, разбиение диска на разделы является самой важной частью построе-
ния системы с альтернативной загрузкой. На физическом жестком диске могут су-
ществовать только четыре первичных раздела, поэтому старайтесь по возможности
использовать логические разделы; в противном случае разделы быстро кончатся.

См. также
The Grub Manual (http://www.gnu.org/software/manual/grub.html); info grub.
12.7. Определение параметров загрузки в командной консоли GRUB 201

12.7. Определение параметров


загрузки в командной
консоли GRUB
Проблема
Местонахождение ядер Linux и корневых устройств вам неизвестно, но эта ин-
формация необходима для загрузки системы.

Решение
Воспользуйтесь средствами GRUB для поиска корневых устройств и образов ядер.
Загрузите командную консоль GRUB нажатием клавиши «с» во время запус-
ка GRUB.
Чтобы найти корневое устройство (раздел, содержащий /boot), введите строку
root (hdO и нажимайте клавишу Tab до тех пор, пока на экране не появится инфор-
мация о разделах:
grub> root (hdO,<tab>
Possible partitions are:
Partition num: 0. Filesystem type is ext2fs. partition type 0x83
Partition num: 1, Filesystem type is ext2fs. partition type 0x83
Если вы не уверены в том, какой именно раздел вам нужен, опробуйте их по-
очередно, это не повредит. Начните с (hdO,O):
grub> root (hdO.O)
Filesystem type is ext2fs, partition type 0x83
Затем попробуйте найти образ ядра. Введите /boot/vmtinuz и нажмите клави-
шу Tab. Если найти образ/boot/linuz не удалось, GRUB сообщит вам об этом:
grub> kernel /boot/vmlinuz<tab>
Error 15: File not found
В этом случае назначьте корневым устройством другой раздел и проведите по-
иск образа ядра на нем:
grub> root (hdO.l)
Filesystem type is ext2fs, partition type 0x83
grut» kernel /boot/vmlinuz<tab>
possible f i l e s are: vmlinuz vmlinuz-2.4.21
Ядро найдено. Введите путь к ядру и корневой файловой системе:
grub> kernel /boot/vmlinuz-2.4.21 ro root=/dev/hda2
Помните, что нумерация разделов в GRUB начинается с 0, поэтому hdO,l=/
dev/hda2.
Следующие два используются только в системах, при загрузке которых исполь-
зуется ramdisk. Сначала найдите initrd:

55 f?"d Щ
ШЖЩя^
Загрузите образ initrd:
grub> initrd /boot/imtrd-2.4.22-l.img
202 Глава 12. Системный загрузчик и альтернативная загрузка

Теперь можно переходить к загрузке:


grub> boot
Система запускается стандартным образом.

Комментарий
Если вы не уверены в том, что в системе использовались стандартные схемы вы-
бора имен ядра, запросите у GRUB все содержимое /boot. Введите строку kernel/
boot и нажмите клавишу Tab:
grub> kernel /boot/<tab>
System.map System.map-2.4.21 System.map-2.6.3 boot grub config-2.4.21
config-2.6.3 splash.xpm.gz vmlinuz vmlinuz-2.4.21 kernel-of-truth-2.6.3
Похоже, мы обнаружили ядро 2.6 со странным именем kemel-of-truth-2.6.3. Не-
смотря на глупое имя, оно может работать точно так же, как его родственники
с более вменяемыми именами.
Автоматическое расширение имен клавишей Tab позволяет легко проводить
поиск в целых файловых системах. Эта возможность особенно полезна для иссле-
дования незнакомых систем, потому что вы можете начать с корня:
grub> root (hdO,6)
grub> find/<tab>
Possible f i l e s are bin dev etc l i b mnt opt titip sys var usr boot home proc
sbin root cdrom floppy i n i t r d
Однако это открывает большую брешь в системе безопасности, так как любой
пользователь, имеющий доступ к консоли GRUB, сможет прочитать любой файл
в системе командой cat:
grub> cat /root/secretpersonalstuff.txt
grub> cat /etc/shadow
В разделе 12.14 рассказано, как закрыть эту брешь посредством парольной за-
щиты GRUB.
Команда GRUB находит корневые устройства и ядра независимо от того, где они
находятся. Допустим, в системе установлены два жестких диска IDE. На втором
диске корневая файловая система Linux установлена в каталоге/dev/hdb5. Загрузка
производится следующим образом:
grub> root (hdl.4)
grub> kernel /boot/vmlinuz-2.4.21 ro root=/dev/hdb5
grub> boot
В незнакомой системе можно поручить GRUB поиск всех установленных же-
стких дисков:
grub> root (hd <tab>
Possible disks are: hdO hdl

См. также
The Grub Manual (http://www.gnu.org/software/manuaL/grub.html); info grub.
12.8. Настройка загрузочного раздела 203

12.8. Настройка загрузочного раздела


Проблема
Вы используете загрузочный раздел вместо каталога /boot корневой файловой
системы и не уверены в правильности путей к файловым системам.

Решение
Чтобы узнать, в каких разделах находятся файловые системы, воспользуйтесь ко-
мандой df. Перед этим проследите за тем, чтобы все проверяемые разделы были
смонтированы.
Сначала необходимо убедиться в том, что файловые системы установлены
в правильных разделах, при помощи команды df:
$ df -h
Filesystem Size Used Available Use* Mounted on
/dev/hda2 2.5G 1.5G 1G 60& /
/dev/hdal 100M 30M 70M 303; /boot
Чтобы убедиться в правильности файлового дерева загрузочного раздела, за-
просите содержимое /boot/boot:
$ Is /boot
System.map-2.4.21 boot grub config splash.xpm.gz vmlinuz vmlinuz-2.4.21
Некоторые дистрибутивы (скажем, Debian) создают мягкую ссылку /boot на
родительский каталог:
....
$ cd /boot
$ Is -al boot
Irwxrwxrwx 1 root root 1 Apr 16 08:50 /boot/boot -> .
Вы можете оставить все как есть и не создавать новый каталог/boot, хотя ссылка
создаст зацикливание в файловом дереве. Это еще один способ обеспечить при-
сутствие каталога /boot в загрузочном разделе.

Комментарий
Запутались? Помните, что и имя раздела не является именем каталога, потому
что раздел — не каталог, а точке монтирования можно присвоить любое имя. GRUB
ничего не знает о точках монтирования — загрузчик читает файловые системы до
того, как они будут смонтированы-. Таким образом, если в загрузочном разделе не
существует каталога/boot, GRUB не увидит/boot/grub, а только/grub. Хотя нали-
чие каталога /boot не является строго обязательным, соблюдение этих правил су-
щественно упростит вашу жизнь.

См. также
The Grub Manual (http://www.gnu.org/software/manuaL/grub.html); info grub.
204 Глава 12. Системный загрузчик и альтернативная загрузка

12.9. Создание меню загрузки в GRUB


Проблема
Конечно, искать корневые устройства и ядро в командной консоли GRU В весьма
увлекательно, и все же вы бы предпочли сохранить параметры загрузки в конфи-
гурационном файле и использовать меню загрузки при запуске системы. В этом
меню задаются параметры по умолчанию, а также содержится список всех уста-
новленных операционных систем.

Решение
Включите загрузочные записи в конфигурационный файл GRUB, /boot/grub/
menu.1st (в Red Hat используется файл grub.conf с мягкой ссылкой menu.1st).
Загрузочная запись GRUB называется строфой (stanza). Ее базовая конфигу-
рация выглядит так:
title Fedora I core
root (hdO.O)
kernel /boot/vmlinuz-2.4.22-1 root=/dev/hdal ro
initrd /boot/initrd-2.4.22-l.img
Название (title) выбирается произвольно, а его присутствие обязательно —
оно сообщает GRUB, где начинается каждая строфа, а также определяет содер-
жимое пункта меню загрузки. Две другие строки содержат информацию, кото-
рая вводилась в командной строке GRUB. Использовать команду boot в menu.Lst
не нужно.
В меню можно включить сколько угодно операционных систем; каждая систе-
ма представляется отдельной строфой вроде приведенной ранее. Проследите за
тем, чтобы строка kernel указывала на правильный раздел и образ ядра. В одном
корневом разделе часто размещаются несколько загружаемых ядер, и все загру-
зочные конфигурации часто используют один и тот же загрузочный раздел (бо-
лее того, это даже рекомендуется).

Комментарии
Запомните, что корневое устройство, заданное строкой
root (hdO.O)
определяет местонахождение каталога/boot, а в обозначении hdO,O используется
собственная система нумерации разделов GRUB. В строке
kernel /boot/vmlinuz-2.4.22-1 root=/dev/hda2 го
параметр root определяет корневую файловую систему с использованием dev-имени
ядра.

См. также
The Grub Manual (http://www.gnu.org/software/manual/grub.html); info grub.
12.10. Настройка menu.1st 205

12.10. Настройка menu.1st


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

Решение
Внесите изменения в файл /boot/grub/menu. 1st (в некоторых системах использу-
ется grub.conf).
Содержимое файла делится на две секции: глобальные параметры и загрузоч-
ные записи (строфы). Цвета, тайм-аут и пункт меню по умолчанию определяются
в секции глобальных параметров.
Далее приводится пример полного файла menu.1st с глобальными парамет-
рами:
## Файл конфигурации GRUB для пользователя windbag, создан 22-10-2003
## Глобальные параметры
# Пункт по умолчанию
default О
# Тайм-аут в секундах
timeout 5
# Цвета
color cyan/blue white/blue
# Отображение заставки
splashimage (hdO.0)/boot/splash.xpm.gz
foreground bbbbbb
background 000000
# Меню загрузки
## Пункт по умолчанию
title Libranet GNU/Linux, kernel 2.4.21
root (hdO.O)
kernel /boot/vmlinuz-2.4.21 root=/dev/hdal ro hdb=scsi hdc=scsi
# Новое тестовое ядро 2.6
title Ubranet GNU/Linux. kernel 2.6.3-testl
root (hdO.O)
kernel /boot/bzImage-2.6.3-testl root=/dev/hdal ro
# Red Hat 9
title Red Hat 9
root (hdO.4)
kernel /boot/vmlinuz-2.4.22-1 root=/dev/hda5 ro
initrd /boot/initrd-2.4.22-l.img
206 Глава 12. Системный загрузчик и альтернативная загрузка

Комментарий
Определения глобальных параметров конфигурации:
О default 0 — определение загрузочной строфы по умолчанию. Строфы нумеру-
ются последовательно, начиная с 0, поэтому обозначение default 0 соответ-
ствует первой строфе;
О timeout 5 — промежуток времени, по истечении которого загружается запись
по умолчанию;
О color cyan/blue white/blue — цветовая схема загрузочного меню GRUB. Пер-
вая часть (cyan/blue) определяет цвет текста и фона, а вторая (white/blue) —
цвета выделенных строк текста. Список цветов приведен в руководстве GRUB
и в описании info grub;
О splashimage(hdO,0)/boot/splash.xpm.gz; foreground bbbbbb; background 000000 — за-
ставку, входящую в ваш дистрибутив, можно заменить любым изображением
по вашему выбору (см. раздел 12.16). Параметр splashimage задает путь к изоб-
ражению. Также необходимо задать цвет текста и фона для отображения
шрифтов с использованием стандартных шестнадцатеричных цветовых ко-
дов HTML.
Параметру default также можно присвоить значение saved. При использовании
default saved также необходимо включить в загрузочные строфы строку savedefault:
title Libranet GNU/Linux, kernel 2.4.21
root (hdO.O)
kernel /boot/vmlinuz-2.4.21 root=/dev/hdal
savedefault
В этом случае последняя строфа, использованная при загрузке, по умолчанию
будет использоваться при следующей загрузке. Во многих дистрибутивах строка
savedefault включается в загрузочные строфы, но параметр default saved отсутству-
ет, поэтому механизм не работает.

См. также
The Grub Manual (http://www.gnu.org/software/manual/grub.html); info grub; раздел 12.6.

12.11. Добавление Windows 95/98/ME


в систему Linux
Проблема
Требуется организовать на одном компьютере альтернативную загрузку Linux
и Windows 95/98/ME. Допустим, вы работаете с приложениями на обеих плат-
формах или администрируете небольшую тестовую сеть и хотите установить как
можно больше разных операционных систем, чтобы использовать разные комби-
нации операционных систем без использования множества компьютеров. А мо-
жет быть, вы уже пытались установить Windows 95/98/ME в системе Linux,
но у вас ничего не получилось — программа установки заявила, что не может
12.11. Добавление Windows 95/98/ME в систему Linux 207

отформатировать диск С: (и хорошо, а то бы она стерла установленные экземпля-


ры Linux). Вы не хотите использовать эмуляторы типа VMWare, позволяющие
работать с двумя системами одновременно без перезагрузки, потому что они сто-
ят слишком дорого или ваше оборудование не справится с такой нагрузкой.

Решение
Известно несколько хитроумных приемов для добавления Windows 95/98/ME
в систему Linux. Вам придется скрыть разделы и восстановить GRUB в записи
MBR после установки Windows, потому что Windows заменяет системный за-
грузчик. Для установки Windows 95/98/ME необходимо заранее подготовить пер-
вичный раздел. К сожалению, GRUB не поддерживает загрузку с CD-ROM, по-
этому вам потребуется загрузочная дискета Windows. Если у вас еще нет такой
дискеты, создайте ее в Windows.
Установка Windows 95/98/ME в раздел /dev/hda4 производится так.
1. Загрузите командную консоль GRUB.
2. Вставьте загрузочную дискету Windows.
3. Скройте все существующие разделы в командной строке GRUB:
grub> hide(hdO.O)
grub> hidethdO.l)
grub> hide(hdO,2)
4. Загрузите W i n d o w s с дискеты:
grub> chainioader (fdO) +1
grub> boot
He забудьте включить поддержку CD-ROM в загрузочную дискету.
5. Создайте первичный раздел DOS для установки Windows, используя коман-
ду MS-DOS fdisk. Когда создание разделов будет завершено и вы вернетесь
к приглашению А:\>, вставьте компакт-диск Windows и запустите программу
установки:

D:\> setup
6. Windows заменяет MBR, но это лишь упростит последующие перезагрузки.
После того, как система будет установлена, восстановите GRUB в MBR. За-
грузитесь с дискеты GRUB и выполните следующие команды:
grub> root (hdO.O)
grub> setup (hdO)
7. Извлеките дискету GRUB и перезагрузите компьютер. На экране снова по-
является меню GRUB. Загрузите Linux и отредактируйте menu.1st:
title Windows 98 on /dev/hda4
hide (hdO.O)
hide (hdO.l)
hide (hd0.2)
unhide (hd0.3)
rootnoverify(hdO,3)
makeactive
chainloader +1
208 Глава 12. Системный загрузчик и альтернативная загрузка

Комментарий
Последние три параметра строки стоит рассмотреть подробнее:
О rootnotverify — не пытаться читать или монтировать раздел;
О makeactive — установить флаг загрузочного раздела (необходимо для Windows);
О chainloader +1 — ссылка на загрузчик операционных систем, не поддерживае-
мых GRUB напрямую (Windows относится к их числу).
Существует более простой способ организации совместной работы Windows
95/98/ ME с Linux: сначала установите Windows 95/98/ME, а затем добавьте Linux.
В этом случае программа установки автоматически запишет GRUB в MBR и со-
здаст запись для Windows в меню GRUB.

См. также
Microsoft Knowledge Base Article 217210: «How to Multiple Boot Windows XP,
Windows 2000, Windows NT, Windows 95, Windows 98, Windows ME, and MS-
DOS»; раздел 9.16; The Grub Manual (http://www.gnu.org/software/manual/grub.htmL).

12.12. Добавление Windows NT/2000/XP


в систему с альтернативной загрузкой
Проблема
Требуется организовать на одном компьютере альтернативную загрузку Linux
и Windows NT/2000/XP. Допустим, вы работаете с приложениями на обеих плат-
формах или администрируете небольшую тестовую сеть и хотите установить как
можно больше разных операционных систем, чтобы использовать разные комби-
нации операционных систем без использования множества компьютеров. Вы не
хотите использовать эмуляторы типа VMWare, позволяющие работать с двумя
системами одновременно без перезагрузки, потому что они стоят слишком доро-
го, или ваше оборудование не справится с такой нагрузкой... и надеетесь, что хло-
пот будет меньше, чем при установке Windows 95/98/ME.

Решение
С Windows NT/2000/XP дело обстоит намного проще. Программа установки ве-
дет себя более разумно — она позволяет вам выбрать существующий или создать
новый раздел. Систему даже можно установить на компьютере с уже установлен-
ным экземпляром Linux (при условии, что на диске имеется достаточно свобод-
ного места и неиспользованный первичный раздел).
Запишите содержимое таблицы разделов и отметьте, что установлено в каж-
дом разделе. Windows не распознает разделы Linux, а только выводит их размеры,
поэтому наличие записанной информации поможет лучше разобраться в проис-
ходящем.
12.13. Восстановление GRUB в MBR с использованием диска Knoppix 209

Загрузочная дискета на этот раз не понадобится; загрузите систему с компакт-


диска. После того как система будет установлена, восстановите GRUB в MBR —
загрузите компьютер с дискеты GRUB и выполните следующие команды:
grub> root (hdO.O)
grut» setup (hdO)
grub> reboot
Извлеките дискету GRUB и перезагрузите компьютер. На экране снова
появляется меню GRUB. Загрузите Linux и создайте в menu.1st запись для
Windows:
title Windows XP on /dev/hda4
• rootnovenfy(hd0.3)
makeactive
chainloader +1
Скрывать разделы от Windows NT/2000/XP не нужно.

Комментарий •

Если потребуется организовать альтернативную загрузку нескольких версий Win-


dows, начните с самой старой и устанавливайте их по порядку, вплоть до самой
новой. При этом вы можете установить только один экземпляр Windows 95/98/
ME, потому что эти системы, в отличие от Windows NT/2000/XP, не поддержи-
вают альтернативную загрузку.
Для всех версий Windows можно использовать один первичный раздел, разде-
лив его на несколько логических разделов. Для создания разделов и их форма-
тирования следует использовать программу установки Windows NT/2000/XP;
не используйте программу Linux fdisk.

См. также
Microsoft Knowledge Base Article 217210: «How to Multiple Boot Windows XP,
Windows 2000, Windows NT, Windows 95, Windows 98, Windows ME, and MS-
DOS»; The Grub Manual (http://www.gnu.org/software/manual/grub.html); info grub;
раздел 12.13.

12.13. Восстановление GRUB в MBR


с использованием диска Knoppix
Проблема
При установке Windows на компьютере с альтернативной загрузкой Linux/Win-
dows содержимое MBR (главной загрузочной записи) было заменено, а меню
GRUB заменилось меню загрузки Windows, поэтому вы не можете загрузить Linux.
В документации GRUB сказано, как восстановить GRUB в MBR, но описанная
процедура предполагает использование дискеты, а на вашем компьютере нет флоп-
пи-дисковода. Как восстановить GRUB в MBR в подобной ситуации?
210 Глава 12. Системный загрузчик и альтернативная загрузка

Решение
Воспользуйтесь компакт-диском Knoppix. Загрузите систему и откройте окно
командного процессора. Переключитесь на учетную запись root командой su и за-
пустите консоль GRUB. Выполните следующие три команды:
grub> root (hdO.O)
grub> setup (hdO)
grub> quit
После перезагрузки появляется меню GRUB.

Комментарий
Флоппи-дисководы постепенно исчезают с компьютеров, особенно с портатив-
ных. Даже в ноутбуках, заменяющих настольные компьютеры, вместо флоппи-
дисковода часто устанавливается комбинированный дисковод CD-ROM/DVD-
ROM/CD-R/RW.

См. также
Домашняя страница Knoppix (http://www.knopper.net); The Grub Manual (http://
www.gnu.org/software/manual/grub.html); info grub.

12.14. Защита системных файлов


паролем GRUB
Проблема
Вы не хотите, чтобы пользователи могли работать с командной консолью GRUB,
потому что они получат доступ ко всем системным файлам независимо от разре-
шений и привилегий.

Решение
Задайте пароль в menu.1st, чтобы ограничить использование командной консоли
GRUB.
Сначала в Bash сгенерируйте хешированный пароль командой grub-md5-crypt:
# grub-md5-crypt
Password:
Retype password:
$l$RiAfJO$QTuAlS/BGqlkYHQADZejsl
Вставьте зашифрованный пароль в секцию глобальных параметров menu.1st
перед загрузочными строфами:
password --md5 $l$RiAfJO$QTuAlS/BGql kYHQADZejsl
Т а к ж е м о ж н о и с п о л ь з о в а т ь п р о с т о й т е к с т о в ы й пароль:
password bigsecretpassword
12.15. Защита отдельных пунктов меню GRUB 211

Конечно, этот вариант менее надежен. Если вы используете простой тексто-


вый пароль, ограничьте доступ к файлу и разрешите его только root:
# chmod 600 menu.1st
Когда во время загрузки системы появится меню GRUB, нажмите клавишу р,
чтобы ввести пароль и получить доступ к командной консоли. Пользователи, не
знающие пароля, смогут только выбрать один из пунктов меню загрузки; команд-
ная консоль GRUB останется для них недоступной.

Комментарий
Разрешения на доступ к файлам являются атрибутами файловой системы. GRUB
работает вне файловых систем, поэтому каждый, кто имеет доступ к командной
консоли GRUB, сможет прочитать любой файл в системе.
Даже если вы потеряете пароль GRUB, это еще не катастрофа. Загрузите сис-
тему с диска аварийного восстановления и отредактируйте файл menu.Lst. В этом
проявляется старый принцип безопасности в Unix: «При наличии физического
доступа к компьютеру с ним можно делать все, что угодно».

См. также
The Grub Manual (http://www.gnu.org/software/manual/grub.html); info grub.

12.15. Защита отдельных пунктов


меню GRUB
Проблема
Меню GRUB состоит из нескольких пунктов. Вы не хотите, чтобы каждый пользо-
ватель мог выбрать любой пункт; некоторые пункты меню должны оставаться
недоступными для пользователей.

решение
Установите пароль GRUB (см. раздел 12.14), а затем включите команду lock в menu. 1st:
title Libranet GNU/Linux, kernel 2.4.21. single user mode
lock
root (hdO.O)
kernel /boot/vmlinuz-2.4.21 root=/dev/hdal ro single
GRUB читает menu.Lst последовательно, поэтому все строки после lock становят-
ся недоступными для пользователей, не знающих пароля. При попытке загрузить
заблокированный пункт меню будет выдано следующее сообщение об ошибке:
Error 32: Must be authenticated
Желательно сообщить пользователям, к каким командам меню ограничен
доступ:
Libranet GNU/Linux, kernel 2.4.21. single user mode, AUTHENTICATION REQUIRED
212 Глава 12. Системный загрузчик и альтернативная загрузка

Комментарий
Пароли GRUB и строка Lock особенно полезны на общих рабочих станциях — на-
пример, в учебных залах, лабораториях и на рабочих местах. Тем не менее любой
пользователь, обладающий физическим доступом к компьютеру, сможет исполь-
зовать загрузочный диск аварийного восстановления и получить неограниченный
доступ. Чтобы этого не произошло, можно запретить использование аварийных
дисков в программе настройки BIOS, но не забывайте, сколько существует раз-
личных загрузочных устройств: дискеты, компакт-диски, устройства USB, Jaz/
Zip, Ethernet Wake-on-LAN, SuperDisk... и наверное, это еще не все. Завершив на-
стройку, установите пароль на вход в BIOS.

См. также
• The Grub Manual (http://www.gnu.org/software/manual/grub.html); info grub.

12.16. Создание заставки GRUB


Проблема
Вам надоела стандартная заставка GRUB из вашего дистрибутива Linux и вы хо-
тите заменить ее другим изображением, созданным вами.

Решение
Заставку GRUB можно создать на базе любого графического файла. Преобразуй-
те изображение к определенному формату и размеру, а затем включите в menu.Lst
ссылку на созданный файл.
Графические заставки GRUB должны удовлетворять следующим требованиям:
О тип файла — xpm.gz;
О размеры — 640 х 480;
О 14 цветов.
Начните с создания изображения размером не менее 640x480 в любом графи-
ческом формате. Остальное делается программами ImageMagick и gzip. В следую-
щем примере мы преобразуем файл .jpg:
$ convert -depth 14 -resize 640x480 image.jpg newimage.xpm && gzip newimage.xpm
Переместите новый файл newimage.xpm.gz. Откройте файл menu.1st и добавьте
(или измените) строку с определением заставки:
# Отображение заставки
splashimage (hdO.5)/boot/newimage.xpm.gz

Комментарий
Семейство ImageMagick состоит из нескольких утилит командной строки:
animate
composite
12.17. Загрузка Linux с использованием LILO 213

conjure
convert
display
identify
import
mogrify
montage
Отдельной команды imagemagick не существует. За подробностями обращай-
тесь к imagemagick(l).
Попробуйте провести поиск в Google по словам «grub splashimage». Вы найде-
те всевозможные галереи графических изображений, а также рекомендации и по-
лезные приемы по их созданию.

См. также
imagemagick(l), gzip(l), info grub; The Grub Manual (http://www.gnu.org/software/
manual/grub, html).

12.17. Загрузка Linux с использованием LILO


Проблема
Вы используете загрузчик LILO и хотите знать, как настроить его для загрузки
системы Linux.

Решение
Сгенерируйте базовый файл liloconf командой liloconfig. Отредактируйте файл,
включите в него комментарии, названия и любые дополнительные параметры по
вашему усмотрению.
Убедитесь в том, что вы загрузили новейшую версию LILO. Как обычно, создайте
резервную копию данных и держите под рукой загрузочный диск. Выполните команду:
# /sbin/1-ilo -V
LILO version 2 2 . 4 . 1
После установки/обновления запустите liloconfig. Программа задает много во-
просов и предлагает выполнить многочисленные инструкции. Допустим, корне-
вая файловая система находится в разделе /dev/hda3. Ответьте положительно на
четыре вопроса:
Install a partition boot record to boot Linux from /dev/hda3?
Use LBA32 for addressing big disks using new BIOS features?
Install a master boot record on /dev/hda?
Make /dev/hda3 the active partition?
Запустите lilo, чтобы записать изменения в MBR:
# /sbin/lilo -v
Перезагрузите компьютер. Вероятно, файл /etc/lilo.conf стоит отредактировать,
потому что он содержит минимальный набор записей.
214 Глава 12. Системный загрузчик и альтернативная загрузка

Комментарий
Команда liloconfig хорошо подходит для создания базового файла lilo.conf; после
этого файл проще и удобнее редактировать вручную. При каждом изменении
/etc/lilo.conf необходимо запускать LILO, чтобы внести изменения в MBR:
# /sbin/lilo -v
Параметр -V определяет уровень детализации вывода, а его значения лежат в ин-
тервале от 1 до 5:
# /sbin/lilo -v5

См. также
lilo(8), lilo.conf(5);/usr/doc/lilo или/usr/share/doc/LHo; «The Large Disk Howto» на tldp.org.

12.18. Альтернативная загрузка Linux


с использованием LILO
Проблема
Требуется установить несколько экземпляров Linux на одном компьютере с ис-
пользованием загрузчика LILO.

Решение
Первый установленный экземпляр Linux является «основным». Сохраните его,
чтобы обеспечить работу LILO. Проследите за тем, чтобы корневая файловая си-
стема, содержащая каталог /boot, находилась в первичном разделе, в противном
случае LILO работать не будет.
Запишите местонахождение раздела, в котором будет устанавливаться корневая
файловая система следующего экземпляра Linux. Если вы также знаете точное
имя ядра и образа initrd (если он используется), вы можете немного опередить
события. Оставаясь в основном экземпляре Linux, создайте запись lilo.conf для
второго экземпляра:
# Red Hat 9
image=/boot/vmlinuz-2.4.22-l
1nitrd=/boot/i nitrd-2.4.22-1.img
label="Red Hat 9"
root=/dev/hda6
read-only
Запишите изменения в MBR:
# /sbin/lilo -v
Переходите к установке второго экземпляра. Присутствие записи в меню за-
грузки LILO ускорит перезагрузки, необходимые для завершения установки.
Когда программа установки перейдет к установке загрузчика, обязательно вы-
берите вариант «install to the first sector of the root partition» (возможно, в вашей
программе установки формулировка будет выглядеть несколько иначе). Не пере-
записывайте MBR.
12.19. Альтернативная загрузка Windows и Linux с использованием LJLO 215

Если точные имена ядра и образа initrd неизвестны, вам придется узнать их
в основном экземпляре Linux. Переходите к установке второго экземпляра Linux.
Когда дело дойдет до первой перезагрузки, вы снова окажетесь в основном экзем-
пляре Linux. Смонтируйте файловую систему второго экземпляра Linux и прочи-
тайте содержимое каталога/boot:
# mount /dev/hda6 /mnt/tmp
# cd /mnt/tmp
# Is boot
System.map initrd-2.4.22-1.img System.map-2.4.22-1 vmlinuz v m l i n u z - 2 . 4 . 2 2 . 1
Имена ядра и образа initrd известны. Создайте запись в lilo.conf, перезапустите
/sbin/LiLo и перезагрузите компьютер. Теперь вы можете выбрать новую версию
Linux в меню загрузчика и завершить установку программы.

См. также
1Но(8), Li"Lo.conf(5); /usr/doc/lilo или/usr/share/doc/lilo.

12.19. Альтернативная загрузка Windows


и Linux с использованием LILO
Проблема
Требуется организовать альтернативную загрузку Linux и Windows (или несколь-
ких экземпляров каждой из систем).

Решение
Самый простой способ — установить все версии Windows, которые должны рабо-
тать в системе. Всегда устанавливайте их по порядку, начиная с самой старой.
Сохраните четвертый первичный раздел для Linux.
В системе может быть установлен только один экземпляр Windows 95/98/ME,
потому что эти системы не поддерживают альтернативную загрузку. Windows NT/
2000/ХР поддерживают альтернативную загрузку и создают записи для каждого
установленного экземпляра в загрузчике Windows.
Установите Linux в последнюю очередь. Сделайте четвертый первичный
раздел расширенным и создайте логический раздел для Linux. Во время уста-
новки Linux установите LILO в MBR, a LILO автоматически создаст запись для
Windows.
# Стабильное ядро 2.4
image=/boot/vmlinuz-2.4.21
label="Libranet-hd3"

!£.£!
root=/dev/hda5
read-only
# Windows
other = /dev/hdal
label="Windowses"
table = /dev/hda
216 Глава 12. Системный загрузчик и альтернативная загрузка

Для Windows достаточно одной записи, потому что LILO передает управле-
ние загрузочному меню Windows.

Комментарий
Когда в системе установлено несколько версий Windows, загрузчик Windows все-
гда относится к первой из них. Таким образом, если в /dev/hdal установлена сис-
тема Windows 95, а в /dev/hda2 — Windows 2000, в LILO все равно включается
ссылка на/dev/hdal.

См. также
Lilo(8), lilo.conf(5); /usr/doc/lilo или /usr/share/doc/lilo; Microsoft Knowledge Base
Article 217210: «How to Multiple Boot Windows XP, Windows 2000, Windows NT,
Windows 95, Windows 98, Windows ME, and MS-DOS».

12.20. Создание загрузочной дискеты LILO


Проблема
Требуется создать загрузочную дискету LILO на случай, если возникнут проблемы.

Решение
Воспользуйтесь встроенной функцией создания загрузочных дискет:
# cd /usr/iib/iilo
# make -f Makefile.floppy
He забудьте защитить дискету от записи.

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

См. также
И1о(8), lilo.conf(5); /usr/doc/lilo или/usr/share/doc/lilo.

12.21. Защита LILO паролем


Проблема
Вы не хотите, чтобы пользователи испортили тщательно настроенную конфигу-
рацию загрузчика. Также стоит сделать так, чтобы они не могли использовать
12.22. Создание резервной копии MBR 217

возможности LILO по получению доступа root без пароля, что легко делается вво-
дом команды
linux single
или
linux init=/bin/sh
в приглашении LILO.

Решение
Ограничьте доступ к liLo.conf и разрешите его только суперпользователю root:
# chmod 600 l i l o . c o n f
Затем защитите LILO паролем. Внесите в секцию глобальных параметров
lilo.conf следующие записи:
password-""
restricted
Перезапустите LILO, чтобы изменения вступили в силу:
# /sbin/lilo
В ответ на запрос введите пароль root. Программа создает файл/etc/lilo.conf.shs
с паролем, доступным только для root.
Теперь при перезагрузке системы LILO будет запрашивать пароль у каждого,
кто попытается ввести команду linux single или linux init=/bin/sh.

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

См. также
lilo(8), lilo.conf(5); /usr/doc/lilo или/usr/share/doc/lilo,.

12.22. Создание резервной копии MBR


Проблема
Требуется создать резервную копию главной загрузочной записи. Но какая польза
от резервной копии, если вы не знаете, как ее восстанавливать?

Решение
Запишите резервную копию MBR на дискету. Смонтируйте диск, а затем восполь-
зуйтесь командой dd:
# dd if=/dev/hda of=/floppy/mbr bs=512 count=l
218 Глава 12. Системный загрузчик и альтернативная загрузка

Восстановление производится следующим образом:


# dd if=/floppy/mbr of=/dev/hda bs=512 count=l
Имя файла с резервной копией может быть произвольным: например, имя
/mbr-serverOl указывает, какому компьютеру принадлежит копия. На одной дис-
кете можно сохранить несколько резервных копий MBR:
# Is /floppy
lost+found mbr-serverOl mbr-workstation04 mbr-hostl5
Если дискету нужно предварительно отформатировать, сделайте это:
$ mke2fs /dev/fdO
Команда создает диск, отформатированный для Linux с файловой системой
Ext2.

Комментарий
Команда dd выполняет побайтовое копирование. Поддержка файловых систем ей
не нужна, поэтому она может использоваться для копирования блочных устройств
(например, /dev/hda).
Если в вашей системе отсутствует флоппи-дисковод, испорченную запись MBR
можно восстановить при помощи диска Knoppix (см. раздел 12.13).

См. также
dd(l), mke2fs(8); раздел 12.13.
Глава 13
Восстановление
работоспособности
системы на примере
Knoppix

13.1. Введение
Крайне неприятно, когда ваш компьютер вдруг отказывается загружаться. Knoppix,
полноценный дистрибутив Linux на базе Debian на загрузочном компакт-диске,
является первоклассным средством восстановления. В вашем распоряжении ока-
зываются свыше 2 Гбайт утилит и драйверов Linux, сжатых в один 700-мегабайт-
ный компакт-диск. Knoppix прекрасно справляется с идентификацией оборудо-
вания, поддерживает все основные файловые системы, автоматически находит
существующие разделы, создает точки монтирования и ищет сервер DHCP. Для
ручной настройки сети имеется удобная утилита netcardconfig. По простоте ис-
пользования Knoppix не имеет себе равных. Достаточно вставить диск, загрузить
систему — и все работает.
Knoppix можно установить в виде 700-мегабайтного файла .iso или приобрес-
ти компакт-диск (последнее удобно для пользователей с медленным или дорогим
подключением к Интернету).
У Knoppix появилось целое сообщество пользователей. На сайте Knoppix.net мож-
но найти большое количество специализированных проектов, вдохновленных Knop-
pix, а также информации о создании собственных загружаемых компакт-дисков.

13.2. Загрузка Knoppix

Требуется настроить процесс загрузки Knoppix. Для начала нужно разобраться,


какие изменения можно внести в него.

Решение
Чтобы получить список всех параметров загрузки, нажмите F2 при выводе при-
глашения.
220 Глава 13. Восстановление работоспособности системы на примере Knoppix

В принципе можно просто вставить диск Knoppix в дисковод и предоставить


ему загрузиться самостоятельно, но в вашем распоряжении имеются многочис-
ленные параметры загрузки. По умолчанию используется немецкая раскладка кла-
виатуры; вероятно, вы предпочтете сменить ее с учетом своего локального кон-
текста:
knoppix lang=ru
По умолчанию Knoppix загружает рабочий стол KDE. Выбор другой програм-
мы осуществляется командой
knoppix desktop=icewm
Загрузка в консольном режиме без запуска X:
knoppix 2
Процесс загрузки можно немного ускорить, отключив идентификацию отсут-
ствующего оборудования:
knoppix nopcmcia noscsi
Загрузка с минимальной идентификацией оборудования:
failsafe
В одной строке можно объединить несколько параметров:
knoppix lang=ru desktop=icewm nopcmcia noscsi

Комментарий
Для загрузки Knoppix в консольной версии потребуется около 20 Мбайт памяти,
а для удовлетворительной работы сеанса X необходимо не менее 96 Мбайт. Для
запуска KDE желательно иметь 256 Мбайт памяти. Knoppix найдет и использует
раздел виртуальной памяти на жестком диске, если он существует.
Если вам не понравится, как прошла загрузка Knoppix, или вы хотите опробо-
вать другой режим, вам не придется возиться с корректным завершением работы —
просто выключите питание и начните заново.
Проблемы с Knoppix
Запуск программ с компакт-диска сопряжен со специфическими проблемами,
особенно на ноутбуках. Системы управления питанием нередко нарушают рабо-
ту сеанса Knoppix: при выходе из спящего режима Knoppix перестает реагировать
на команды. Попробуйте отключить систему управления энергопотребления или
нажмите кнопку питания и начните заново.
Иногда Knoppix «зависает» во время загрузки в процессе запуска KDE (или
любого сеанса X). Переключитесь на первую виртуальную консоль (Ctrl+Alt+Fl)
и проверьте список системных сообщений; так можно определить источник про-
блем. Например, Knoppix может зависнуть при идентификации устройств SCSI.
В таком случае перезагрузите компьютер и отключите идентификацию SCSI:
knoppix noscsi

См. также
Документация на компакт-диске Knoppix; Knoppix.net (http://www.knoppix.net);
домашняя страница Клауса Кноппера (http://www.knopper.net).
13.4. Сохранение конфигурации Knoppix на флэш-диске 221

13.3. Создание загрузочной дискеты Knoppix


Проблема
Система не загружается с компакт-диска, но вам все равно хочется использовать
Knoppix. Как создать загрузочную дискету Knoppix?

Решение
На диске Knoppix имеется загрузочный образ, готовый к копированию на диске-
ты. Загрузите и смонтируйте компакт-диск Knoppix на любом компьютере с Linux,
вставьте чистую дискету и выполните команду
# dd if=/cdrom/KNOPPIX/boot.img of=/dev/fdO bs=1440k
Загрузочную дискету также можно создать в Windows. Откройте окно DOS,
затем откройте каталог KNOPPIX на компакт-диске:
с:> d:
d:> cd \KNOPPIX
Затем создайте дискету:
d:> mkfloppy.bat
Загрузите систему с дискеты, вставьте диск Knoppix, когда вам будет предло-
жено это сделать, и приступайте к работе.

Комментарий
Включение пакетного файла DOS для создания загрузочной дискеты Knoppix
стоит отметить особо — это еще один полезный инструмент в вашем арсенале ава-
рийного восстановления системы.

См. также
Документация на компакт-диске Knoppix; Knoppix.net (http://www.knoppix.net);
домашняя страница Клауса Кноппера, создателя Knoppix (http://www.knopper.net).

13.4. Сохранение конфигурации Knoppix


на флэш-диске
Проблема
Хорошо бы сохранить конфигурацию Knoppix (параметры сети и рабочего стола
и т. д.), чтобы вам не приходилось каждый раз начинать заново.

Решение
Для этой цели идеально подойдет флэш-диск с интерфейсом USB. Загрузите Knop-
pix с вставленным флэш-диском. Откройте меню Knoppix и выберите команду
222 Глава 13. Восстановление работоспособности системы на примере Knoppix

Configuration • Save Knoppix Configuration. Выберите для сохранения устройство


/dev/sdal.
Во время загрузки Knoppix убедитесь в том, что флэш-диск вставлен в разъем
USB, и введите следующую команду:
knoppix myconfig=/dev/sdal
Также можно приказать Knoppix обнаружить сохраненную конфигурацию ав-
томатически:
knoppix myconfig=scan

Комментарий
Флэш-диски USB объемом 256 и 512 Мбайт стали до смешного дешевыми. Носите
с собой такое устройство и диск Knoppix, и вы сможете работать почти где угодно.

См. также
Документация на компакт-диске Knoppix; Knoppix.net (http://www.knoppix.net);
домашняя страница Клауса Кноипера (http://www.knopper.net).

13.5. Создание зашифрованного


домашнего каталога Knoppix
Проблема
Вам хотелось бы запускать Knoppix с компакт-диска, потому что его содержимое
не может быть заражено вирусами и троянами. Но при этом возникает проблема:
где хранить личную информацию, электронную почту и другие персональные дан-
ные? Требуется создать защищенный домашний каталог для хранения электрон-
ной почты и других файлов данных.

Решение
Выполните команду Knoppix • Configure • Create, чтобы создать домашний каталог
Knoppix на жестком диске или съемном носителе (скажем, флэш-диске USB, кар-
те памяти или Zip-диске). Команда создает файл с именем knoppix.img.
Когда программа спросит, нужно ли применять шифрование AES при созда-
нии каталога, ответьте положительно. Каталог шифруется с 256-разрядным клю-
чом, а вам будет предложено ввести пароль длиной не менее 20 символов. Ис-
пользуйте хорошо запоминающуюся фразу (например, «thisismylongpassword»),
потому что вам придется вводить ее при каждой загрузке системы.
Чтобы загрузить Knoppix с использованием зашифрованного каталога /home,
вставьте съемный носитель и введите команду
boot: knoppix home=/dev/sdal
Если ранее вы сохранили рабочую конфигурацию Knoppix, укажите и ее:
boot: knoppix home=/dev/sdal myconfig=/dev/sdal
13.6. Копирование файлов на другой PC с системой Linux 223

Новый каталог /home появляется в Knoppix в виде /home/knoppix и автомати-


чески монтируется при загрузке. Если зашифрованный каталог /home хранится
в существующем разделе Linux на жестком диске, монтируется весь раздел.

Комментарий
По умолчанию объем каталога /home/knoppix составляет 30 Мбайт. Увеличьте его
до нужных размеров.

См. также
Документация на компакт-диске Knoppix; Knoppix.net (http://www.knoppix.net);
домашняя страница Клауса Кноппера (http://www.knopper.net).

13.6. Копирование файлов на другой PC


с системой Linux
Проблема
Требуется скопировать файлы с проблемного PC на другой компьютер в сети.
Например, компьютер «умирает» или странно ведет себя, и вы хотите создать ре-
зервную копию нужных файлов.

Решение
Загрузите Knoppix. Проблемный PC должен быть подключен к локальной сети;
если в сети имеется сервер DHCP, Knoppix свяжется с ним автоматически.
Чтобы настроить статический IP-адрес, запустите утилиту netcardconfig в кон-
сольном режиме или выполните команду Knoppix • Network/Internet.
На компьютере-приемнике должен быть настроен сервер SSH (см. подраздел
«Комментарий»).
Сначала смонтируйте файловую систему, содержащую копируемые файлы.
Knoppix создает /etc/fstab, помещает все точки монтирования в каталог/mnt и соз-
дает на рабочем столе значки для всех файловых систем. Самый простой способ
смонтировать файловую систему — щелкнуть на значке рабочего стола. Также
можно заглянуть в /etc/fstab и использовать командную строку. Сначала получи-
те привилегии root (пароль не нужен):
knoppix@ttyO[knoppix]$ su
root@ttypO[knoppix]# mount /mnt/hda5
Затем выполните команду scp (Secure CoPy):
# scp -rp /mnt/hda5/home/kmarfin 192.168.1.5:/home/kmartin/tmp
На экране появляется предупреждение:
Could not create directory '/home/kmartin/.ssh'.
The authenticity of host 492.168.1.5 (192.168.1.5)' can't be established.
RSA key fingerprint is a2"c6:77:2e:63:b2:ed:90:b2:9b:bc:e7:d4:22:ba
Are you sure you want to continue connecting? (yes/no)?
224 Глава 13. Восстановление работоспособности системы на примере Knoppix

Подтвердите подключение. Вам будет предложено ввести пароль root для сер-
вера SSH. Введите пароль, и файлы будут скопированы.
То же самое можно сделать в качестве обычного пользователя, для собственной
учетной записи пользователя. Создайте нового пользователя в приглашении Knoppix:
root@ttypO[knoppix]# useradd kmartin
Пароль назначать не нужно — вам потребуется только пароль пользователя
для сервера SSH. Теперь пользователь kmartin может копировать файлы в свою
учетную запись на сервер SSH. Только суперпользователь root может копировать
файлы в учетные записи других пользователей.

Комментарий
Ключ -г команды scp осуществляет рекурсивное копирование каталогов. Ключ -р
сохраняет разрешения.
А вот как настроить сервер SSH «на скорую руку»: установите OpenSSH на
компьютере с системой Linux, на который вы собираетесь копировать файлы. Если
программа уже установлена, обновите ее до последней версии, чтобы включить
новейшие заплатки системы безопасности. Затем выполните команду
# /etc/init.d/ssh start
Компьютер готов к приему файлов. Если вы собираетесь постоянно использо-
вать SSH для удаленного администрирования, не останавливайтесь на этом и про-
делайте еще ряд действий по защите подключения. Дополнительная информация
об использовании SSH приведена в главе 17.
Так как Knoppix работает в памяти, сохранить данные хостов и ключи SSH не
удастся, поэтому вы будете каждый раз получать одни и те же предупреждения. Ес-
ли вы собираетесь часто копировать файлы командой scp, обратитесь к разделу 13.5.

См. также
scp(l), ssh(l); раздел 13.5.

13.7. Копирование файлов


в общий каталог Samba
Проблема
Требуется скопировать файлы с Linux PC на Windows PC по локальной сети
с использованием Knoppix.

Решение
Предварительно необходимо установить и настроить Samba (см. главу 23). Пере-
ключитесь на привилегии root:
knoppix@ttypO[knoppix]$ su
rootPttypO[knoppi x]#
13.8. Копирование файлов на диск CD-R/RW 225

Создайте локальный каталог для монтирования сетевого общего каталога.


Смонтируйте удаленный каталог:
root@ttypO[knoppix]# mkdir /mnt/samba
root@ttypO[knoppix]# mount -t smbfs -о \
uid=knoppix,workgroup=local,username=helix,passworcM:ehsecuar \
//windbag/1an_share/mnt/samba
Используйте соответствующие имена рабочей группы и пользователя, пароль,
имя хоста и общего каталога. Если в Windows 95/98/ME в настройках общего
доступа к файлам не был указан пароль, используйте имя пользователя guest,
а поле пароля оставьте пустым.
Теперь вы можете открыть окна Konqueror для копирования файлов или вос-
пользоваться командой ср:
root@ttypO[knoppix]# cp -av /home/helix /mnt/samba

Комментарий
Если вы предпочитаете графический интерфейс, существуют и другие вариан-
ты. Если имя хоста и общего каталога известны, введите их на панели адреса
Konqueror:
smb://HOST/SHARE
В Knoppix также входит программа LinNeighborhood для обзора сети. Она за-
пускается командой Internet • LinNeighborhood.

См. также
The Official Samba-3 Howto and Reference Guide for Samba 3.x (http://samba.org/);
глава 23.

13.8. Копирование файлов на диск CD-R/RW


Проблема
На компьютере установлен записывающий CD-дисковод. Требуется записать
файлы на диск CD-R/RW.

Решение
Проще всего воспользоваться КЗЬ. Запустите Knoppix и выполните команду Sys-
tem • КЗЬ Setup. K3b автоматически обнаруживает CD-дисководы; проверьте ре-
зультаты на этапе 3 мастера настройки. На этапе 6 включите всех пользователей,
отличных от root, которым разрешено использование КЗЬ (помните, что пользо-
вателей нужно создать заранее).
Завершив настройку, закройте мастера и запустите программу System • КЗЬ.
Выберите команду File • New Project. Перетащите нужные файлы мышью и щелк-
ните на кнопке Burn.
226 Глава 13. Восстановление работоспособности системы на примере Knoppix

Комментарий
КЗЬ — замечательный интерфейс записи CD/DVD, один из лучших инструмен-
тов на всех платформах. Программа логично устроена и скрывает все техничес-
кие подробности записи от пользователя, избавляя его от необходимости переби-
рать многочисленные окна или разбираться в технических терминах «Joliet», «Rock
Ridge» или «El Torito».

См. также
Глава 11; домашняя страница КЗЬ (http://www.k3b.org/).

13.9. Редактирование конфигурационных


файлов в Knoppix
Проблема
Кто-то (может быть, и вы) слегка «подправил» содержимое конфигурационного
файла, и система перестала загружаться. Нужно вернуть ее в рабочее состояние.
Но как отредактировать файл на компьютере, который не загружается?

Решение
Knoppix позволяет открыть и отредактировать любой файл на компьютере.
Загрузите диск Knoppix с оболочкой KDE. Щелкните правой кнопкой мыши на
значке файловой системы, выберите Mount, а затем выберите Change read/write mode.
Получите права root, перейдите в каталог с редактируемым файлом и открой-
те файл в редакторе по своему усмотрению:
knoppix@ttypO[knoppix]$ su
root@ttypO[knoppix]# cd /mnt/hda3/etc
root@ttypO[etc]# kate inittab &
Переходите к редактированию файла.

Комментарий
В Knoppix входит ряд других оконных менеджеров: larswm, IceWM, XFce, Window-
maker, Fluxbox и TWM, но только KDE включает меню Knoppix и создает на ра-
бочем столе значки для всех разделов.
Эти операции, как и все остальные операции Linux, могут выполняться из кон-
соли. Например, монтирование файловой системы чтения/записи выполнится сле-
дующей командой:
root@ttypO[knoppix]# mount -о rw /mnt/hda3
Открытие файла для редактирования:
rootPttypO[knoppix]# vim /mnt/hda3/etc/inittab

См. также
mount(8); раздел 9.11.
13.11. Восстановление потерянного пароля root 227

13.10. Установка программ из Knoppix


Проблема
Требуется запустить apt-get, apt-rpm, up2date или другую утилиту обновления,
которая должна запускаться из своей корневой файловой системы.

Решение
Knoppix позволяет переключиться на корневую файловую систему, находящую-
ся на жестком диске, командой chroot:
root@ttypO[knoppix]# mount -о rw /mnt/hda6
root@ttypO[knoppix]# chroot /mnt/hda6
root@Knoppix:/
Вместо каталога/mnt в Knoppix вы оказываетесь в файловой системе на жест-
ком диске так, словно система была загружена непосредственно из нее. Далее мож-
но выполнить любую команду так, словно система была загружена обычным об-
разом — в том числе и команду apt-get.

Комментарий
В обычном сеансе Knoppix все файловые системы на жестком диске монтируются
в каталоге/mnt, но после выполнения chroot файлы Knoppix становятся невидимыми.

См. также
chroot(8).

13.11. Восстановление потерянного


пароля root
Проблема '
Какая неприятность... Вы потеряли пароль root.

Решение
Ничего страшного — запустите Knoppix и откройте консоль root. Смонтируйте
файловую систему, содержащую файл /etc/shadow, и разрешите доступ для записи
(см. раздел 9.10). Откройте файл /etc/shadow в своем любимом редакторе, найди-
те запись root:
root:$l$7nMNZYci $E.U6ftxnAZU0rk29qvYpk0:12460:0:99999:7:::
Удалите хеш-код пароля между первыми двоеточиями:
root::12460:0:99999:7:::
Теперь при запуске системы и входе в нее под именем root вам не придется
вводить пароль.
228 Глава 13. Восстановление работоспособности системы на примере Knoppix

Комментарий
Не забудьте поскорее назначить новый пароль root.
Это еще одно проявление принципа «При наличии физического доступа к ком-
пьютеру с ним можно делать все, что угодно». В главе 12 приведены некоторые
рекомендации по защите процесса загрузки.

См. также
Shadow(5); разделы 12.14, 12.15 и 12.21.

13.12. Установка Knoppix на жесткий диск


Проблема
Вам нравится Knoppix и вы хотите установить его на жесткий диск, как «настоя-
щую» версию Linux.

Решение
Загрузите Knoppix и откройте консоль root. Введите команду knoppix-instatler и вы-
полните дальнейшие инструкции. Когда установка будет завершена, на жестком
диске появится вполне современная система на базе Debian.

Комментарий
Установка Knoppix мало чем отличается от любой другой установки Linux. Озна-
комьтесь с документацией по своей версии Knoppix, потому что до версии 3.2
сценарий установки назывался knx-hdinstaU, а в версии 3.3 он был переименован
в knoppix-installer. Возможно, в будущем он снова изменится — мир Linux не стоит
на месте.

См. также
The Knoppix Wiki (http://www.knoppix.net/docs/).

13.13. Запуск антивирусных программ


на WindowsPC
Проблема
Нужен быстрый, недорогой способ проведения антивирусного сканирования в Win-
dows без привязки к операционной системе. Вы знаете, что установочные диски
коммерческих антивирусных продуктов (например, от Symantec и McAfee) спо-
собны проводить сканирование перед установкой программы, но базы данных на
таких дисках быстро устаревают.
13.13. Запуск антивирусных программ на Windows PC 229

Решение
Достаньте копию Knoppix 3.4 или более новую версию. Также потребуется под-
ключение к Интернету для загрузки обновленных баз данных с определениями
вирусов. В разделах Windows с файловой системой FATI6/32 можно провести
как сканирование, так и сканирование с обезвреживанием вирусов. В файловых
системах NTFS возможно только сканирование, поскольку поддержка записи
в разделы NTFS в Linux все еще недостаточно надежна.
Загрузите Knoppix, выполните команду KNOPPIX • Utilities • Install Software. На
экране появляется перечень пакетов, доступных для установки; выберите f-prot.
После того как программа f-prot будет установлена, выберите команду KNOPPIX •
Extra Software • f-prot. Выберите в меню f-prot пункт 4, Online Update.
Когда обновления вирусных баз данных будут успешно загружены, выберите
разделы или каталоги для сканирования. Knoppix автоматически монтирует все
разделы вашей системы, поэтому вы можете легко выбрать разделы для провер-
ки. Чтобы ограничиться только сканированием, щелкните на кнопке Scan — и зай-
митесь чем-нибудь другим, потому что это потребует немалого времени. После
завершения на экране выводится отчет с результатами сканирования.
Чтобы провести сканирование с обезвреживанием вирусов, запустите f-prot
в режиме командной строки (вместо графического меню). Убедитесь в том, что
раздел смонтирован для чтения/записи; просто щелкните правой кнопкой мыши
на значке диска, находящемся на рабочем столе Knoppix, и выберите команду
Actions • Change read/write mode.
Введите в командном процессоре следующую команду (укажите раздел, под-
лежащий сканированию):
$ f -prot -disinf -list /mnt/hdal
Ключ -list выводит информацию о ходе сканирования, а ключ -disinf включает
режим обезвреживания вирусов.

Комментарий
У такого решения имеется ряд преимуществ:
О вы работаете в заведомо чистой операционной системе — а поскольку диск
защищен от записи, ее невозможно испортить;
О загрузка Knoppix требует перезапуска компьютера, поэтому все резидентные
вирусы, находящиеся в памяти, будут уничтожены;
О Knoppix распространяется бесплатно, поэтому никто не мешает вам записать
несколько дисков и проводить сканирование сразу на множестве компью-
теров.

См. также
Knoppix.net (http://www.knoppix.net); домашняя страница f-prot (http://www.f-prot.com).
Глава 14
CUPS щ
liiii
14.1. Введение
Система CUPS (Common Unix Printing System) — современная подсистема печа-
ти для Linux и Unix, заменяющая древние протоколы построчной печати Unix.
CUPS работает в Unix, Linux, Mac OS и Mac OS X, а также обслуживает клиентов
на практически любых платформах, включая Windows.
CUPS идет в ногу со временем и поддерживает лазерные и струйные принте-
ры, а также матричные и другие старые модели принтеров.
CUPS существует в двух версиях: бесплатной версии GPL, которая по умол-
чанию используется в большинстве серьезных дистрибутивов Linux, и в коммер-
ческой версии. Коммерческая версия обеспечивает техническую поддержку, бо-
лее широкий ассортимент драйверов и более удобный управляющий интерфейс.
Драйверы принтеров CUPS состоят из одного или нескольких фильтров, упако-
ванных в формате PPD (PostScript Printer Description). Все принтеры в CUPS —
даже не поддерживающие PostScript — должны иметь файл PPD с описанием
принтеров, специфических команд и фильтров.
Фильтры занимают центральное место в CUPS. Они преобразуют задания пе-
чати в формат, понятный для принтера (PDF, HP-PCL, растровый формат и т. д.),
а также передают команды для выполнения таких операций, как выбор страницы
и сортировка. Файлы PPD являются текстовыми — если вас интересует, как они
выглядят, посмотрите в каталоге/usr/share/cups/model/. Файлы PPD установлен-
ных принтеров хранятся в каталоге/etc/cups/ppd.

Поиск драйверов
В комплект поставки CUPS входят универсальные файлы PPD для 9- и 24-иголь-
чатых матричных принтеров Epson, принтеров Epson Stylus и Color Stylus Photo,
LaserJet и HP DeskJet и даже экзотических устройств печати этикеток Dymo. Они
работают на сотнях моделей принтеров, но в некоторых случаях не поддержива-
ют полный набор функций конкретного принтера вроде двусторонней печати,
чистки головок или выбора лотка.
14.1. Введение 231

Если производитель вашего принтера не предоставляет драйвер для Linux, су-


ществуют четыре хороших ресурса:
О Foomatic (http://linuxprinting.org);
О Gimp-Print (http://gimp-print.sourceforge.net);
О сайт коммерческой версии CUPS (http://www.easysw.com/cups/);
О драйверы PostScript для Windows.
Foomatic — бесплатный проект, объединяющий все распространенные систе-
мы печати Linux (CUPS, LPRng, LPD, GNUlpr, PPR, PDQ, CPS).
Проект Gimp-Print изначально был задуман как модуль печати для Gimp, но
позднее его рамки были расширены до общей поддержки печати в Linux. Драйверы
Gimp-Print отличаются высочайшим качеством. Если для вашего цветного прин-
тера существует такой драйвер, скорее всего, этот выбор окажется оптимальным.
Перед тем как приобретать принтер, обязательно сверьтесь со списком совме-
стимости оборудования вашего дистрибутива Linux или с базой данных принте-
ров linuxprinting.org.
Gimp-Print и Foomatic существуют в виде пакетов, которые можно установить
в системе (если они не были включены в дистрибутив). Установка гарантирует
полноту набора драйверов и наличие всех обязательных подсистем.
На странице http://www.cups.org/testppd.php можно проверить файл PPD. Про-
верка сводится к поиску синтаксических ошибок в файлах PPD — как правило,
такие ошибки легко исправляются (опечатки или неверные команды).

Сетевые принтеры
Существует четыре основных способа организации совместного доступа к прин-
терам в сети:
О совместное использование принтеров, подключенных к компьютерам пользо-
вателей;
О создание выделенного сервера печати Linux;
О приобретение сетевых принтеров (таких, как принтеры серии HP JetDi-
rect);
О приобретение аппаратных серверов печати (например, Linksys EPSX3), по-
зволяющих напрямую подключить любой принтер к локальной сети.
В этой главе рассматриваются первые два способа. Два других слишком раз-
нообразны, а количество вариантов слишком велико. Приведу некоторые реко-
мендации, которые стоит учитывать при выборе.
О Использование компьютера с системой Linux в качестве сервера печати обес-
печивает максимальную гибкость и полноту настройки.
О Сетевые принтеры, содержащие встроенное сетевое оборудование, обычно до-
рого стоят.
О Сетевые принтеры обычно предназначаются для интенсивной загрузки.
О Аппаратный сервер печати позволяет организовать сетевой доступ к любому
принтеру.
232 Глава 14. CUPS

Сетевые принтеры и аппаратные серверы печати расходуют меньше энергии


и занимают меньше места, чем компьютер, используемый в качестве выделенно-
го сервера печати. Тем не менее при покупке следует внимательно изучить во-
прос поддержки в Linux, потому что некоторые устройства комплектуются только
управляющими программами для Windows. Все, что управляется через веб-ин-
терфейс, должно работать нормально.

14.2. Подключение принтера к автономному


компьютеру с системой Linux
Проблема
Требуется подключить принтер к компьютеру с системой Linux.

Решение
Если принтер подключается к порту USB, он должен быть подключен (с подачей
питания) во время загрузки системы.
Сначала убедитесь в том, что в системе работает демон CUPS:
$ lpstat -t
scheduler is running

Location'£3rt View Qn Bookmarks Tools Settings Window Help

*„<-* M I i . •* *<>v с «
E» Location: p|^Ilitlp.Vlocalhost63I/printers _ а.?» Э
-;-"rir,-.ir mioiainosf-CUPS . (
те

Administralion Classes Help Jobs Printers Software

1Printer
:
Default Oettln-tion: ;; '•:

р
Location,

Devic« UR narajlnl .;ijev/lpa

. . • • . • • • • • . • 4i;;ll«*iO

Copyl Bhl М&Ъ-УЯЪЪ, Еаь. SoUnsi e Prn J_cl5 A» R i y U R e 5 . r « a Trie Common IJHIA Pi inting System CUP5 6inTe O,r',
logo иге Bib Imdelrieli. uui.ud. of -.a-., Jc •••.^ e_Pi .•.•.._. ; 4 OSlir 1г_авПЯГИ J»9 !•,_ prowrt, ol С я (ewecuve

Рис. 1 4 . 1 . Страница конфигурации CUPS


14.2. Подключение принтера к автономному компьютеру с системой Linux 233

Если демон не работает, то команда выдаст следующее сообщение:


lpstat: Unable t o connect to server: Connection refused
В этом случае запустите демона CUPS:
# /etc/init.d/cupsys start
В Red Hat и Fedora используются следующие команды:
# /sbin/service cups restart
Проще всего новые принтеры устанавливаются при помощи веб-интерфейса
CUPS. Введите следующий адрес в любом браузере:
http://local host:631
Вам потребуется пароль root. Перейдите на вкладку Printers и щелкните на ссыл-
ке Add printer, открывающей меню Admin. Здесь следует ввести три значения:
Name: hp6L
Location: room-202
Description: bw-laser
Тщательно выбирайте имя — его изменение вызовет проблемы в работе CUPS.
Имя принтера будет использоваться на нескольких следующих страницах кон-
фигурации.
На рис. 14.1 показано, как должна выглядеть страница конфигурации CUPS.

Комментарий
Если вы предпочитаете командную строку, конфигурацию принтера можно за-
дать следующей длинной командой:
# lpadmin -p hp6L -L room-202 -D bw-laser -E -v parallel:/dev/lpO \
-m HP-LaserJet_6-hpijs.ppd
Параметры:
О -р — имя принтера;
о -L — местонахождение принтера;
о -D — описание принтера;
О -Е — перевод принтера в режим готовности к приему заданий;
О -v — назначение URI;
О -го — выбор драйвера (файл PPD). Обратите внимание: каталог жестко фикси-
руется; при попытке использовать путь вида/usr/share/cups/model/laserjet.ppd
будет выдано сообщение об ошибке. Используйте имя PPD и проследите за
тем, чтобы файл находился в каталоге /usr/share/cups/model/.
Если в системе установлены пакеты Gimp-Print и Foomatic (а если не установ-
лены, их стоит установить), вы найдете дополнительные файлы PPD в каталогах
/usr/share/cups/model/gimp-print и /usr/share/cups/model/foomatic. Они хранятся
в сжатом виде:
HP - LaserJet_6-hpi js.ppd. gz
Содержимое файлов необходимо распаковать и переместить в каталог /usr/
share/cups/model:
# gunzip HP-LaserJet_6-hpijs.pp.gz && mv HP-LaserJet_6-hpijs.ppd \
/usr/share/cups/model/
234 Глава 14. CUPS

При установке принтера через веб-интерфейс CUPS распаковывать и переме-


щать файлы PPD не обязательно.

См. также
Раздел «Введение» настоящей главы; CUPS Software Administrators Manual (http://
localhost:631/docurnentation.html).

14.3. Обслуживание клиентов Linux


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

Решение
Сначала убедитесь в том, что на всех компьютерах с подключенными принтерами
установлена система CUPS. Эти компьютеры должны иметь статические IP-ад-
реса, а в системе должен работать механизм разрешения имен (/etc/hosts или ло-
кальный сервер DNS).
Затем на компьютерах с подключенными принтерами отредактируйте файл
/etc/cupsd.conf. Следующий пример cupsd.conf показывает, как открыть доступ
к принтерам из локальной подсети. Вы можете использовать пример в том виде,
в котором он представлен, используя свои сетевые параметры:
LogLevel info
Port 631
<Location />
Order Deny,Allow
Deny from Al1
Allow From 127.0.0.1
</Location>
Перезапустите cupsd после правки cupsd.conf:
# /etc/init.d/cupsys restart
В Red Hat и Fedora следует использовать команду
# /sbin/service cups restart
Напечатайте тестовую страницу. Если вы получите печально известную ошибку
«Client-error-not-found», остановите и перезапустите принтер из веб-интерфейса
CUPS.
Принтеры CUPS автоматически рассылают информацию о себе по сети. Убе-
дитесь в том, что порт TCP с номером 631 не заблокирован ни на сервере, ни на
клиентских компьютерах.
Откройте веб-интерфейс CUPS (http://Localhost:631) на любом клиентском ком-
пьютере с системой Linux; все принтеры CUPS должны автоматически отобра-
жаться на странице Printers. Теперь попробуйте напечатать тестовую страницу
и выполнить печать из приложений.
f

14.4. Совместный доступ к принтеру без разрешения имен 235

Комментарий
Если в системе имеется пример файла cupsd.conf, пусть его размеры вас не пуга-
ют. Скорее всего, большинство из его директив вам никогда не понадобятся;
возьмите его за образец и создайте свой новый файл cupsd.conf «с нуля».
Директивы cupsd.conf описаны в документе «CUPS Software Administrators
Manual» (http://localhost:631/documentation.htrril).

См. также
Раздел «Printing System Management» документа CUPS Software Administrators
Manual (http://[ocalhost:631/documentation.html).

14.4. Совместный доступ к принтеру


без разрешения имен
П DOблема
Вы не создали файл /hosts и не запустили локальный сервер DNS в своей сети,
потому что особой необходимости в разрешении имен нет — компьютеры сети
находятся за брандмауэром NAT для совместного использования подключения
к Интернету и ничего большего им, в сущности, не требуется. Как организовать
совместный доступ к принтеру в таких условиях?

Решение
Назначьте серверу печати статический IP-адрес. Включите директиву ServerName
вфайл/etc/cupsd.conf:
ServerName 192.168.1.5
Перезапустите cupsd. В Debian используйте команду
# /etc/init.d/cupsys restart
В Red Hat и Fedora команда выглядит так:
# /sbin/service cups restart
На клиентских компьютерах ничего делать не нужно — просто подождите не-
сколько секунд, пока CUPS разошлет информацию о принтере.

Комментарий
По умолчанию CUPS использует имя хоста в качестве имени сервера. Если в сети
не используется никакая разновидность разрешения имен, клиентские компью-
теры не увидят принтеры CUPS. Проблема решается указанием IP-адреса в ди-
рективе ServerName. У такого решения есть побочный эффект: возможно, вам не
удастся напечатать тестовую страницу с сервера. Вместо этого вы увидите окно,
показанное на рис. 14.2.
Тем не менее печать из приложений на сервере и на клиентских компьютерах
будет производиться нормально.
236 Глава 14. CUPS

©Г ?4. К«ЩШ*
..-•lit •• Г. !• •-. 6 ' ! • ' • '• » "•"••• S-«ing« '.',*И1

Unknown

Рис. 14.2. Страница с сообщением об отсутствии CUPS

Если вам не нужно настраивать сетевую файловую систему (такую, как NFS
или Samba) или использовать DNS, такого решения будет вполне достаточно, даже
если другие администраторы будут смеяться над вами. Главное правило безопас-
ности гласит: «Не запускай то, без чего можешь обойтись».

См. также
CUPS Software Administrators Manual (http://localhost:631/documentation.html).

14.5. Обслуживание клиентов Windows


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

Решение
CUPS справится с этой задачей без Samba. Потребуется установочный компакт-
диск Windows или диск с драйверами принтера, а на клиентских компьютерах
Windows должна быть установлена служба печати Интернета — аналог IPP (Internet
Printing Protocol) в Linux. Пользователи Windows 95/98 могут загрузить по адре-
су http://www.microsoft.com/windows98/downloads/ файл с именем wpnpins.exe.
В Windows ME программная поддержка службы печати Интернета находится
в папке Add-on на установочном компакт-диске.
В Windows 2000/XP откройте приложение Сетевые подключения, выполните
команду Дополнительно •Дополнительные сетевые компоненты и выберите в категории
Другие службы доступа к файлам и принтерам в сети строку Службы печати для Unix.
Запустите мастера установки принтера. Выберите Сетевой принтер и введите
URI-адрес принтера, состоящий из IP-адреса или имени сервера, номера порта
и суффикса /prir\ters/<uMM_npuHmepa>. Каталога /printers не существует; это все-
го лишь условное обозначение, используемое CUPS.
При первом подключении к серверу CUPS система Windows устанавливает
свои локальные драйверы принтера и печатает свою тестовую страницу (вместо
тестовой страницы CUPS). Возможно, вам потребуется компакт-диск Windows
или диск с драйверами.
14.7. Создание выделенного сервера печати CUPS 237

Комментарий
Если в локальной сети работает механизм разрешения имен, вместо IP-адреса
можно использовать имя сервера:
http://windbag:631/printers/hp6L

См. также
Раздел «Введение» настоящей главы.

14.6. Совместный доступ к принтерам


в смешанной сети с использованием Samba
Проблема
В локальной сети принтеры установлены на компьютерах с системами Linux
и Windows. Требуется обеспечить доступ к ним для клиентов обоих типов (Linux
и Windows).

Решение
Чтобы это стало возможным, вам потребуются Samba и CUPS. Обращайтесь к раз-
делам 23.22 и 23.23.
р

The Official Samba-3 Howto and Reference Guide (http://samba.org).

14.7 Создание выделенного сервера


печати CUPS
Проблема
Совместный доступ к принтерам, подключенным к компьютерам, работает нор-
мально, но он создает лишнюю нагрузку на компьютеры. Кроме того, компьютер,
к которому подключен принтер, должен постоянно работать. Требуется создать
выделенный сервер печати для упрощения централизованного управления прин-
терами.

Решение
Из простейшего PC с процессором Pentium и несколькими подключенными прин-
терами выйдет отличный сервер печати. Существует два способа подключения
нескольких принтеров к одному компьютеру:
О установка дополнительных карт LPT/PCI для подключения принтеров с па-
раллельным портом;
о установка концентраторов USB для подключения принтеров USB.
238 Глава 14. CUPS

Установите на сервере печати минимальную версию Linux с CUPS. Установи-


те все пакеты и драйверы Foomatic и Gimp-Prin (они доступны как в виде RPM,
так и в архивах Debian).
После этого остается лишь установить принтеры и настроить CUPS. В первых
четырех разделах этой главы описана процедура установки принтеров и органи-
зация совместного доступа к принтерам со стороны клиентов Windows и Linux.

Комментарий
Выделенный сервер печати обладает рядом преимуществ: все принтеры на-
ходятся в одном месте, расходные материалы удобно хранить поблизости от него,
а пользователи не зависят от того, что кто-то другой хочет воспользоваться их
принтерами. А если на сервере печати используются Linux и CUPS, вам не при-
дется устанавливать Samba для организации совместного доступа со стороны
клиентов Windows.

См. также
Раздел «Printing System Management» документа CUPS Software Administrators
Manual (http://locaLhost:631/d°curnentation.html).

14.8. Распределенная печать


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

Решение
Воспользуйтесь классами — фактически они создают одну очередь печати, состо-
ящую из нескольких принтеров. На странице Admin веб-интерфейса CUPS щелк-
ните на ссылке Add Class и выберите из списка принтеры, входящие в класс. Те-
перь пользователи могут направлять задания печати в класс вместо конкретного
принтера; задание будет обработано первым свободным принтером. В меню вы-
полняются операции добавления и исключения принтеров и даже создания под-
классов.
Операции с классами также могут выполняться в командной строке. Создание
класса с включением принтеров:
# lpadmin -p printerl -p printer2 -p printer3 -с art-dept
Включение нового принтера в класс:
# lpadmin -p printer4 -с art-dept
Удаление принтера из класса (ключ -г):
# Ipadmin -p printer4 -r art-dept
14.9. Ограничение доступа к принтерам и классам 239

Удаление всего класса:


# lpadmin -x art-dept

Комментарии
Разумеется, не стоит объединять в один класс принтеры, расположенные далеко
друг от друга, — эти принтеры должны находиться в одной комнате. Использова-
ние классов создает некоторые проблемы, потому что пользователь не знает, на
каком именно принтере было выведено его задание. С другой стороны, если на
принтере произойдет сбой и он станет недоступным, задание все равно будет ус-
пешно выведено без вмешательства пользователя. Кроме того, классы отлично
подходят для печати в больших объемах, так как нагрузка автоматически пере-
распределяется на свободные принтеры.

См. также
Раздел «Printing System Management» документа CUPS Software Administrators
Manual (http://localhost:631/documentation.html).

14.9. Ограничение доступа


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

Решение
Воспользуйтесь командой Lpadmin:
# lpadmin -p hp6L -u allow:carl a,jenn,dancer
Ограничения также могут устанавливаться для классов:
# lpadmin -p art-dept -u alIow:carl a,jenn,dancer
Также возможно ограничение доступа со стороны отдельных пользователей:
# lpadmin -p hp6L -u deny:daryl,larry,otherlarry

Комментарий
Не пытайтесь редактировать файлы classes.conf и printers.conf напрямую; измене-
ния будут потеряны. Используйте команду lpadmin.

См. также
Раздел «Managing Printers» документа CUPS Software Administrators Manual
(http://localhost:631/documentation.html).
240 Глава 14. CUPS

14.10. Диагностика
Проблема
Печать (и особенно сетевая печать) обычно считается самым сложным и беспо-
койным аспектом системного администрирования. Какие существуют средства
диагностики и исправления ошибок?

Решение
Начните с файла /var/log/cups/error_Log. По умолчанию в cupsd.conf выставлен
уровень детализации LogLevel info, при котором в журнале фиксируются ошибки
и обычные операции. Если параметр LogLevel info не обеспечивает достаточно под-
робной информации, воспользуйтесь более высокими уровнями debug и debug2.
Многие проблемы с печатью решаются переходом на другой драйвер.
Если тестовая страница не печатается, попробуйте напечатать другой доку-
мент. Конечно, ошибки с печатью тестовых страниц говорят о наличии каких-то
неполадок, но если основной документ будет успешно напечатан, то без тестовой
страницы как-нибудь можно обойтись.
Что касается сетевой печати, убедитесь в правильности подключений. Про-
верьте связь утилитой ping как по IP-адресу, так и по имени хоста. Попробуйте
вручную подключиться к общему каталогу Samba; попробуйте провести печать
с компьютера, к которому подключен принтер.
Проверьте файл PPD принтера на странице http://www.cups.org/testppd.php; воз-
можно, он содержит синтаксические ошибки.
Если вам не удается самостоятельно определить причину проблем, отправьте
содержимое журнала и описание выполняемых действий на форум соответству-
ющей тематики. Приведу список наиболее полезных форумов:
О http://printing.kde.org — форум специализируется на печати в KDE, но при
этом содержит подробную информацию по многим аспектам печати в CUPS;
О http://gimp-print.sourceforge.net/p_Mailing_Lists.php3 — информация о драйве-
рах Gimp-Print;
О http://www.linuxprinting.org/forums.cgi — форумы, посвященные принтерам HP,
Epson, Alps, а также моделям других производителей;
О http://www.cups.org/newsgroups.php — конференции, посвященные CUPS.
И как всегда, прежде чем отправлять запрос, проведите поиск в архивах. Нет
ничего нового под солнцем.

См. также
The Troubleshooting-CUPS-and-Asking-for-Help Howto (http://www.cups.org/cups-
help.html).

Глава 15
Настройка видео
и X Window

15.1. Введение
X Window System является основой графического интерфейса Windows. Все
оконные менеджеры и графические среды — XFce, Enlightenment, KDE, Gnome
и т. д. — работают на базе X.
X Window System — воистину удивительная система. Вы можете работать в гра-
фической среде, одновременно открывать текстовые консоли и легко переклю-
чаться между ними. Функции X Window System не ограничиваются графичес-
ким выводом; система также является сетевым протоколом. Через нее даже можно
подключаться к удаленным системам (см. главу 17).
Хотя X Window System всегда считалась стандартом графики Linux, в последнее
время растет число сторонников новой оконной системы X.org. Это ответвление
проекта XFree86™, которое внезапно завоевало популярность, когда в XFree86
версии 4.4 были приняты лицензионные изменения, потенциально несовмести-
мые с GPL. Fedora и Mandrake первыми перешли на X.org. Возможно, к моменту,
когда вы будете читать эту книгу, все остальные последуют их примеру. А может
быть, в этой области будет царить неразбериха, и появится еще одно различие
между дистрибутивами на беду неосведомленным. Чтобы узнать номер версии
XFree86 для вашей системы, введите команду
$ XFree86 -version
То же самое для X.org:
$ X.org -version
Система X.org в настоящее время очень близка по функциональности к XFree86;
различаются в основном имена и местонахождение конфигурационных файлов.
Вероятно, со временем появятся и более существенные различия.
С X Window System связано немало запутанных терминов и неудобных сокра-
щений. Приведу несколько определений:
О XFree86 Project, Inc. — организация, выпускающая XFree86, свободно рас-
пространяемую реализацию X Window System с открытыми текстами;
О XFree86 4.x — текущая версия XFree86 для Linux;
242 Глава 15. Настройка видео и X Window

О X Window System — исходная оконная среда с сетевой поддержкой для Unix;


О XI1 — одиннадцатая версия X Window System;
О XI1 R6 — спецификация X Window System;
О X.Org Foundation — ответвление XFree86 Project.
Чтобы не усложнять себе жизнь, будем просто называть ее «X».

Оборудование
Любой видеоадаптер работает в Linux; даже самая экзотическая карта сможет рабо-
тать в универсальном режиме VGA (640x480, 16 цветов). В большинстве основ-
ных дистрибутивов Linux имеются хорошие средства конфигурации видеосисте-
мы, которые идентифицируют оборудование и автоматически находят драйверы.
Крайне маловероятно, чтобы вам когда-либо пришлось редактировать X86Config
(разве что для включения аппаратного ускорения или для настройки многоэк-
ранного вывода).
Многие видеоадаптеры комплектуются драйверами для Linux и обеспечивают
хорошую скорость выполнения 20-операций. Таким образом, для повседневных
задач (электронная почта, веб, электронные таблицы, набор текстов и т. д.) подой-
дет практически любой адаптер. С аппаратными ЗВ-ускорителями потребуется
чуть больше усилий, но для компьютерных игр, систем автоматизированного про-
ектирования или трехмерного моделирования аппаратное ускорение абсолютно
необходимо.
Современные видеокарты превосходят по мощности компьютеры недавнего
прошлого: высокопроизводительная модель имеет 256 Мбайт памяти, 256-разряд-
ную шину, графический процессор с частотой 256 МГц, а нередко и собственный
охлаждающий вентилятор.
Производительность видеокарты ограничивается типом слота, в который она
вставляется. Карты PCI работают медленнее всего. Разъем AGP работает гораздо
быстрее и присутствует на всех современных платах. Существует несколько раз-
новидностей AGP:
О AGP 1.0:
• IX = 266 Мбайт/с;
• 2Х = 533 Мбайт/с.
О AGP2.0:
• IX = 266 Мбайт/с;
• 2Х = 533 Мбайт/с;
• 4Х= 1,066 Гбайт/с.
О AGP3.0:
• IX = 266 Мбайт/с;
• 2Х = 533 Мбайт/с;
• 4Х= 1,066 Гбайт/с;
• 8Х = 2 Гбайт/с.
15.2. Одновременное использование X и консолей 243

Стандарты AGP обладают прямой и обратной совместимостью; новые карты


можно устанавливать на старых материнских платах, и наоборот. Тем не менее
установка новой, высокопроизводительной карты на старой плате означает, что
вы не получите всего быстродействия, за которое заплатили.
Драйверы
Для обеспечения аппаратного ускорения графики в Linux можно воспользо-
ваться DRI (Direct Rendering Infrastructure) и видеокартой, поддерживаемой
в Linux. В XFree 86 имеется встроенная поддержка DRI. В настоящее время под-
держка XFree86/DRI имеется для следующих чипсетов: 3dfx, Gamma, Intel i8xO,
Matrox, ATI Rage, ATI Radeon, Mach64 и Sis300. Обновленную информацию
о поддерживаемых чипсетах можно найти на сайтах http://xfree.org и http://
dri.sourceforge.net.
Другой способ основан на использовании драйверов, предоставленных произ-
водителем. Например, nVidia поставляет собственные драйверы и модули ядра,
распространяемые только в двоичном виде; в настоящее время это единственный
способ обеспечения аппаратного ускорения для адаптеров nVidia. Для работы
в 2Б-режиме без ускорения можно воспользоваться драйвером nv с открытыми
текстами.
Некоторые карты ATI и Matrox полностью поддерживаются драйверами с от-
крытыми текстами, в других случаях для полноценной работы карты требуются
двоичные драйверы. Как обычно, информацию стоит поискать перед покупкой.

15.2. Одновременное использование


X и консолей
Проблема
Требуется одновременно работать как с консольными сеансами, так и с сеансами X.

Решение
Чтобы переключиться на сеанс X с одной из консолей, достаточно нажать Ctrl+Alt+Fn,
где Fn — F1-F6. Переключение между консолями осуществляется клавишами
Alt+Fn, а возврат в X — клавишами Alt+F7. Первый сеанс X всегда обозначается :0.
Чтобы открыть второй сеанс X, введите следующую команду в консоли:
$ startx •• :1
Проследите за тем, чтобы двойной дефис — был окружен пробелами. Только
что созданный сеанс X связывается с клавишей F8. Не входите в два сеанса X под
одним именем, это может привести к странным и весьма неприятным конфлик-
там.
При запуске X из консоли выводятся всевозможные диагностические и слу-
жебные сообщения. KDE отличается особенной «разговорчивостью». Большин-
ство сообщений не содержит полезной информации, но иногда сообщения могут
пригодиться для диагностики.
244 Глава 15. Настройка видео и X Window

Комментарий
Как правило, дистрибутивы Linux устанавливаются с семью виртуальными кон-
солями. Загляните в файл /etc/inittab:
l:2345:respawn:/sbin/getty 38400 ttyl
2:23:respawn:/sbin/getty 38400 tty 2
3:23:respawn:/sbin/getty 38400 tty3
4:23:respawn:/sbin/getty 38400 tty4
5:23:respawn:/sbin/getty 38400 tty5
6:23:respawn:/sbin/getty 38400 tty6
Сеанс X по умолчанию чаще всего связывается с консолью tty7. Исключение
составляет система Knoppix, использующая только пять виртуальных терми-
налов.
Что делать с таким количеством консолей? Проявите творческие способнос-
ти. Войдите в систему под разными именами. Переключитесь на другую консоль,
чтобы исправить допущенную ошибку. Наконец, просто наслаждайтесь сознани-
ем гибкости и широты возможностей Linux.
Getty и tty
Названия getty и tty, как и многие термины Linux, унаследованы от Unix. Getty
означает «get tty», a «tty» — это телетайп. Таким образом, с точки зрения Linux
ваш новый монитор с высоким разрешением и миллионами цветов, со встро-
енными звуковыми разъемами и портами FireWire является обычным теле-
тайпом.
Программа getty управляет входом в систему по последовательному подключе-
нию. Она открывает последовательное устройство (текстовый терминал, вирту-
альный терминал или модем) и ожидает подключения. Программа выводит пригла-
шение, а затем, после ввода имени пользователя, передает управление программе
Login. Существует много разновидностей getty: mgetty, mingetty, ugetty, agetty, getty-
ps, fbgetty и т. д. Mingetty — минимальная версия getty, рассчитанная только на
виртуальные консоли и не работающая с модемами. Вероятно, лучшей модемной
версией getty является mgetty. Как определить, какая версия getty используется
в вашей системе?
$ ps ах | grep getty
456 tty2 S 0:00 /sbin/getty 38400 tty2
457 tty3 S 0:00 /sbin/getty 38400 tty3
458 tty4 S 0:00 /sbin/getty 38400 tty4
459 tty5 S 0:00 /sbin/getty 38400 tty5
460 tty6 S 0:00 /sbin/getty 38400 tty6
Tty — это программа. Попробуйте запустить ее в консоли:
$ tty
/dev/tty3
Теперь в терминале X:
$ tty
/dev/pts/2
Tty сообщает, в каком виртуальном терминале вы находитесь («виртуальном»,
потому что старые терминалы не имели собственных вычислительных мощнос-
тей — они всего лишь предоставляли интерфейс к большим ЭВМ).
15.3. Установка нового видеоадаптера 245

Имена tty* обозначают виртуальные консоли: ttyl, tty2 и т. д. Хотя в большин-


стве систем Linux используется 7 виртуальных консолей, теоретически их коли-
чество может достигать 63.
Сокращение pts означает «псевдотерминал». Речь идет о терминалах X вроде
xterm, gnome-terminal, wterm, powershelln Konsole.

См. также
tty(l), tty(4), pts(4), console(4), getty(8), mingetty(8), mgetty(8).

15.3. Установка нового видеоадаптера


Проблема
В системе устанавливается второй видеоадаптер (а может быть, заменяется ста-
рый видеоадаптер). Как настроить его и привести в рабочее состояние?

Решение
Лучше всего воспользоваться графической программой настройки конфигурации,
входящей в дистрибутив. В SuSE это SaX, в Red Наг — redhat-config-xf гее, в Fedora —
system-соnfig-xfree, а в Mandrake — XFdrake.
Второй способ заключается в ручном редактировании XF86Config и изменении толь-
ко тех частей, которые относятся к новому адаптеру. Редактирование XF86Config
рассматривается в следующем разделе.

Комментарий
Возможно, вам также пригодятся следующие утилиты X:
О XFree96 -configure;
О /usr/XlIR6/bin/xf86config;
О /usr/sbin/ddcprobe.
Все они должны запускаться суперпользователем root.
XFree86 -configure проверяет оборудование и автоматически генерирует новый
файл XF86Config. Файл предусмотрительно сохраняется отдельно, без замены ис-
ходного файла XF86Config, чтобы его можно было сначала протестировать.
Программа xf86config требует ввести информацию о мыши, клавиатуре, видео-
адаптере и мониторе. Она задает столько вопросов, что в конце концов вы начи-
наете выходить из себя.
Программа/usr/sbin/ddcprobe собирает необходимую информацию о видеокар-
те. Программа также может опросить монитор, но, скорее всего, делать это не бу-
дет, так что держите под рукой документацию по монитору.
Если новая конфигурация не работает, проверьте файл /var/Log/Xfree86.0.log
и посмотрите, с чем возникли проблемы. Если вам не удается выйти из «зависше-
го» сеанса X, нажмите клавиши Ctrl+Alt+Backspace.
246 Глава 15. Настройка видео и X Window

См. также
Документация XFree86 (http://www.xfree86.org/resources.htmL).

15.4. Редактирование файла XF86Config


Проблема
В системе был установлен новый видеоадаптер, и вы предпочитаете внести измене-
ния в конфигурацию вручную. Возможно, утилита из вашего дистрибутива не де-
лает того, что нужно, или вы просто предпочитаете отредактировать текстовый
файл.

Решение
Конфигурация X хранится в файле XF86Config, который может находиться в раз-
ных местах:
О /etc/Xll/XF86Config-4;
О /etc/XF86Config;
О /usr/XllR6/etc/Xll/XF86Config-4;
О /usr/XllR6/etc/Xll/XF86Config.
Установка нового драйвера сводится к изменению в одной секции. В сле-
дующем примере адаптер Voodoo 3 заменяется картой nVidia. Просто измените
параметры Driver и Identifier (закомментируйте старые строки и введите новые
значения):
Section "Device"
# Identifier "3dfx"
# Driver "tdfx"
Identifier "nVidia"
Driver "nv"
EndSection
Значение параметра Identifier задается произвольно, а параметр Driver должен
содержать фактическое имя драйвера. Список имен находится по адресу http://
www.xfree86.org/resources.html.

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

См. также
Документация XFree86 (http://www.xfree86.org/resources.html).
15.5. Включение аппаратного ускорения в XFree86/DRI 247

15.5. Включение аппаратного ускорения


в XFree86/DRI
Проблема
Вы хотите поиграть в Tux Racer, TuxKart ИЛИ Quake 3, заняться трехмерным мо-
делированием или другой работой, требующей интенсивного обсчета трехмерных
объектов. Видеокарта обладает соответствующими функциями, вы установили
драйверы, но включить аппаратное ускорение все равно не удается.

гсШсНИс
Для правильной работы аппаратного ускорения трехмерной графики необходим
поддерживаемый видеоадаптер и изменения в файле XF86Config, обеспечивающие
загрузку модулей ядра.
Сначала проверьте, работает ли расширение DRI:
$ glxinfo | grep rendering
Xlib: extension "XFree86-DRI" missing on display ".0.0"
direct rendering: no
Если расширение на работает, включите в XF86Config следующие строки:
Section "Module"
Load "dri"
Load "glx" •

EndSection
Section "dri"
Mode 0666
EndSection
Сохраните изменения и перезапустите X.
Проверьте новую конфигурацию, запустив glxgears, Tux Racer, TuxKart или
любую другую игру, требующую аппаратного ускорения.
Как правило, редактирование XF86Config решает проблему. Если этого не про-
изошло, воспользуйтесь рекомендациями по диагностике, приведенными в сле-
дующем разделе.

Комментарий
Помните, что местонахождение файла XF86Config зависит от дистрибутива. Начи-
ная с версии 4.0, XFree86 включает встроенную поддержку DRI и библиотек Mesa,
поэтому устанавливать дополнительные пакеты не придется. Проверка версии осу-
ществляется командой
$ XFree86 -version
Если окажется, что в вашей системе используется XFree86 3.x, проведите об-
новление. Не стоит пытаться включать DRI и Mesa в версии 3.
248 Глава 15. Настройка видео и X Window

См. также
XF86Config(7); The DRI User Guide (http://xfree.org/); страница Resources на сай-
те http://xfree.org/.
. ;

15.6. Диагностика проблем


с ускорением трехмерной графики
Проблема
Вы сделали все, о чем говорилось в разделе 15.5, но аппаратное ускорение так и не
заработало.

Решение
Начните с начала и убедитесь в том, что в системе выполняются все необходимые
условия.
Поддерживается ли ваша видеокарта? В разделе «Введение» настоящей главы
перечислены поддерживаемые модели. На сайтах