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

Файл взят с сайта - http://www.natahaus.

ru/

где есть ещё множество интересных и редких книг,


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

Все авторские права сохраняются за правообладателем.


Если Вы являетесь автором данного документа и хотите
дополнить его или изменить, уточнить реквизиты автора
или опубликовать другие документы, пожалуйста,
свяжитесь с нами по e-mail - мы будем рады услышать ваши
пожелания.
Red Hat
Linux 6 Server

Управление пользователями, процессами и сетями


Запуск служб Интранет и Интернет
Настройка ядра Linux на максимальную производительность

Мохаммед Дж. Кабир


Red Hat® Linux® 6
Server
Мохаммед Дж. Кабир

Издательство «ЛОРИ»

www.books-shop.com
Red Hat® Linux* 6 Server
Mohammed J. Kabir

Published by M&T Books


An imprint of IDG Books Worldwide, Inc.
919 E. Hillsdale Blvd., Suite 400
Foster City, CA 94404
www.idgbooks.com (IDG Books Worldwide Web Site)

Copyright © 1999 IDG Books Worldwide, Inc. All rights reserved.

ISBN 0764533371

Red Hat* Linux* 6 Server


Мохаммед Дж. Кабир

Переводчик О. Д. Труфанов
Научный редактор М. А. Кузьмин
Корректор Н. Литвинова
Верстка Е. Самбу

© Издательство «Лори», 2001

Изд. № : OAI (03)


ЛР № : 070612 30.09.97 г.
ISBN 5855821226

Подписано в печать 20.05.01 Формат 84 х 110/16


Бумага офсет № 1 Гарнитура Ныо Баскервиль Печать офсетная
Печ. л. 35 Тираж 3200 Заказ № 436
Цена договорная

Издательство «Лори», Москва, Б. Тишинский пер., д. 40, корп. 2


Телефон для оптовых покупателей: (095) 2560283
Размещение рекламы: (095) 2590162

WWW.LORYPRESS.RU

Отпечатано в типографии ИПО Профиздат.


109044, Москва, ул. Крутицкий вал, д. 18

www.books-shop.com
Моим преподавателям из Калифорнийского университета Сакраменто

www.books-shop.com
VI
О

Предисловие

Благодаря усилиям компании Red Hat операционная система Linux при


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

Подходит ли эта книга вам?


Многие книги, посвященные Linux и Red Hat Linux рассматривают Linux
как персональную операционную систему и обсуждают возможность исполь
зования Linux на настольном компьютере. Для некоторых Linux одновремен
но платформа рабочей станции и серверная платформа, но при этом
забываются важные подробности. Эта книга написана в помощь тем, кто за
интересован в создании сервера на основе Linux. В книге проверенная прак
тикой информация о том, как управлять пользователями, дисковыми
квотами, процессами, сетью, как настроить сервер DNS, сервер электронной
почты SMTP/POP3, сервер Web, сервер FTP, сервер NFS, файловый сервер
и сервер печати на базе Samba, сервер IRC, сервер SQL и многое другое.
В книге рассказывается, как улучшить'серверную и сетевую защиту с помо
щью различных программных инструментов и технологий, а также о компи
лировании модифицированного ядра Linux, позволяющего провести точную
настройку сервера для повышения его производительности.
Хотя существует много дистрибутивов Linux, я выбрал Red Hat Linux.
Компания Red Hat придала операционной системе Linux профессиональный
вид и помогла ей завоевать признание специалистов во всем мире.
Эта книга не о том, как использовать Linux в качестве настольной опера
ционной системы. Она посвящена серьезной работе по поддержанию в рабо
чем состоянии сервера организации с помощью одного из технологических
чудес тысячелетия. Книга не предполагает никакого предварительного зна
ния Linux, любой другой версии UNIX или похожей на Unix операционной
системы. Если вам необходима стабильная серверная операционная система,
которая может месяцами работать без перезагрузки и вы уже заинтересова
лись — тогда добро пожаловать.

www.books-shop.com
Предисловие vii

Сообщите нам свое мнение


Издательство IDG Books Worldwide и автор книги очень заинтересованы в
том, чтобы узнать ваше мнение о ней. Зарегистрируйте, пожалуйста, эту кни
гу на Webсайте IDG Books Worldwide (http://www.idgbooks.com) и сообщите
нам ваше мнение. Если вы заинтересованы в прямом контакте с автором, по
шлите сообщение электронной почты по адресу kabir@integrationlogic.com.
Я постараюсь ответить побыстрее.

Благодарности
Прежде всего я хочу поблагодарить Лору Левин за предложение написать
эту книгу. Она была всегда очень любезна и внимательна ко мне.
Эрик Ньюман, мой редактор, показал себя добрым другом во время разра
ботки этой книги. Я не знаю, как бы я смог закончить ее без его терпения, се
рьезной поддержки и понимания. Спасибо, Эрик.
Специальная благодарность Рэндольфу Кэмпбеллу, который убедил меня,
что книга получилась удачной. Проницательные комментарии Рэндольфа,
предложения и советы сделали значительно больше, чем простое исправле
ние моих технических оплошностей. Спасибо, Рэндольф.
Огромная благодарность литературным редакторам Роберту Кэмпбеллу и
Тиму Бореку. Они регулярно переводили мои формулировки с «машинного
языка» на ясный и понятный английский язык.
Терри Эвинг помог написать две главы этой книги. Он работает систем
ным администратором широко известного Интернетпровайдера в районе
Сакраменто, поэтому помог мне глубже понять многие вопросы, которые об
суждаются в книге. Я очень признателен ему за помощь. Спасибо, Терри.
Мой хороший друг Берт Каридад оказал незаменимую помощь в создании
справочника команд этой книги. С ним я познакомился, когда пошел путем
Linux. Последние несколько лет мы оба с огромным удовольствием работали
над созданием условнобесплатного программного обеспечения для Web в
масштабах предприятия. Берт сейчас работает в хорошо известной техноло
гической компании в Сакраменто. Спасибо, Берт.
Шейла Кабир, моя жена, терпит мои попытки одновременно работать в
подающей надежды начинающей Интернеткомпании и одновременно пи
сать о технологиях с открытым исходным кодом. Ее терпение и великолеп
ная улыбка каждый день заставляют меня продолжать работу. Спасибо,
Шейла.
Наконец я благодарю всех сотрудников IDG Books Worldwide, которые
способствовали выходу этой книги. Эти люди превратили несколько компью
терных файлов в прекрасное издание.

Об авторе
Мохаммед Дж. Кабир  один из основателей компании Integrated Logic.
Inc., которая специализируется в области разработки программного обеспе
чения на основе Web. Он4 также возглавляет технологическое подразделение
компании. Эксперт по многосерверным сетям Web, операционным системам
UNIX и микропроцессорам, Мохаммед Дж. Кабир является автором книг
«Библия сервера Apache» и «Справочник администратора сервера Apache».

www.books-shop.com
www.books-shop.com
Содержание

Часть 1 Первое знакомство 1

Глава 1 Почему Red Hat Linux? 3


История Linux 3
Основные дистрибутивы Linux 4
Caldera OpenLinux 5
Slackware Linux 5
Debian GNU/Linux 6
S.U.S.E. 6
Другие дистрибутивы Linux 6
Почему Red Hat является лучшим дистрибутивом 7
Red Hat Linux в качестве серверной ОС S
Как приобрести Red Hat Linux 10

I Г л а в а 2 Установка и базовая конфигурация 1 1


Требования к оборудованию 11
Подготовка к установке Red Hat Linux 13
Создание загрузочного диска в MS Windows 9х/2000 14
Создание загрузочного диска Linux 14
Установка Red Hat Linux 15
Как работает программа установки 15
Выбор языка, раскладки клавиатуры и метода установки 16
Новая установка или обновление 16
Выбор класса установки 16
Деление дисков на разделы 18
Активизация раздела свопинга 23
Форматирование разделов 24
Выбор устанавливаемого программного обеспечения 24
Выбор мыши 26
Конфигурирование сети TCP/IP 26
Конфигурирование часового пояса 29
Конфигурирование действующих служб или демонов 29
Конфигурирование принтеров 30
Задание пароля root 31
Создание загрузочного диска 32
Выбор варианта установки LILO 33
Первый запуск Red Hat Linux 35

Часть 2 Работа суперпользователя 39

Глава 3 Процессы начальной загрузки и выключения


системы 41
Конфигурирование init 43

www.books-shop.com
X

Сценарий /etc/re.d/rc.sysinit 46
Каталог /etc/re.d/init.d 46
Сценарий /etc/re.d/rc 46
Каталоги /etc/re.d/rc[06].d 48
Сценарий /etc/re.d/rc.local 49
Сценарий /etc/rc.d/rc.serial 49
Загрузка системы 49
Выключение системы 50
Отмена выключения системы 50
Перезагрузка сервера 50
Перезагрузка с помощью Ctrl+Alt+Delete 51
Автоматическое выключение при отказе питания 51
Управление файлами ink 52
Использование chkconfig для управления уровнями выполнения 52
Использование ntsysv для управления уровнями выполнения 53
Использование linuxconf для управления уровнями выполнения 53
Создание новой службы для уровня выполнения 54

Глава 4 Файлы и устройства UNIX 57


Общие представления о полномочиях файлов/каталогов 57
Изменение владельца файлов/каталогов с помощью chown 58
Изменение группы файлов/каталогов с помощью chgrp 59
Представление полномочий доступа с помощью
восьмеричных чисел 59
Представление полномочий доступа с помощью строк доступа 61
Изменение полномочий доступа файлов/каталогов с помощью
chmod 61
Специальные замечания о полномочиях каталогов 62
Управление полномочиями для связей 62
Изменение полномочий или владельца жесткой связи 62
Изменение полномочий или владельца мягкой ссылки 63
Создание политики полномочий для многопользовательского
сервера 63
Задание полномочий конфигурационных файлов пользователей 64
Задание для пользователей используемых по умолчанию файлов
полномочий 64
Задание полномочий выполняемых файлов 64
Задание используемых по умолчанию полномочий файлов для FTP 65
Работа с файлами и каталогами . 66
Просмотр файлов и каталогов 66
Навигация и перемещение в каталогах 66
Определение типа файла 66
Просмотр статистики доступа к файлу или каталогу 67
Копирование файлов и каталогов 67
Перемещение файлов и каталогов 67
Удаление файлов и каталогов 67
Поиск файлов 68
Переопределение используемой по умолчанию маски полномочий 68
Использование специальных полномочий
файловой системы ext2 68

Глава 5 Повседневные команды 71


Общее представление о командной строке UNIX 71
Основы использования метасимволов 72
Основы использования регулярных выражений 73
Использование оперативного справочного руководства 74
Команды для работы с файлами и каталогами 75
Команды сжатия файлов и архивации 89
Специальные команды файловых систем 92

www.books-shop.com
Содержание xi

Команды, совместимые с DOS 95


Специальные команды системного статуса 96
Команды управления пользователями 97
Пользовательские команды доступа к сетевым службам 99
Команды администратора сети 102
Команды управления процессами 107
Команды автоматизации задач 108
Команды повышения эффективности работы 108
Команды оболочки 109
Специальные команды печати 110

Часть 3 Управление пользователями,


процессами и сетями 113

Глава 6 Использование Linuxconf 115


Что такое Linuxconf 116
Установка Linuxconf 117
Конфигурирование Linuxconf 117
Настройка удаленного доступа к Linuxconf на основе Web 120
Конфигурирование модулей Linuxconf 122
Определение привилегий пользователей 123
Использование множества профилей конфигурации системы 125
Использование Linuxconf при запуске системы 128
Использование Linuxconf 129

Глава 7 Управление пользователями 131


Как стать суперпользователем 131
Присвоение привилегий обыкновенным пользователям 133
Управление пользователями с помощью утилит
командной строки 136
Создание учетной записи нового пользователя 136
Создание новой группы 137
Модификация существующей учетной записи пользователя 138
Модификация существующей группы 140
Удаление или отключение учетной записи пользователя 140
Создание используемых по умолчанию параметров пользователя 141
Управление пользователями с помощью linuxconf 143
Добавление новой учетной записи пользователя 143
Модификация существующей учетной записи пользователя 145
Удаление или отключение существующей учетной записи
пользователя 145
Добавление, модификация и удаление группы 145
Дисковые квоты пользователей 146
Установка программного обеспечения дисковых квот 146
Конфигурирование поддержки дисковых квот 147
Присвоение пользователям дисковых квот 147
Мониторинг использования диска 149

Глава 8 Управление процессами 151


Запуск процессов 151
Управление и мониторинг процессов 152
Использование ps для получения статуса процесса 152
Передача сигналов выполняющемуся процессу 154
Управление приоритетом процесса 158
Мониторинг процессов и системной нагрузки 160
Использование top 160
Использование vmstat 161

Ⱦɚɧɧɚɹɜɟɪɫɢɹɤɧɢɝɢɜɵɩɭɳɟɧɚɷɥɟɤɬɪɨɧɧɵɦɢɡɞɚɬɟɥɶɫɬɜɨɦ%RRNVVKRS
ɊɚɫɩɪɨɫɬɪɚɧɟɧɢɟɩɪɨɞɚɠɚɩɟɪɟɡɚɩɢɫɶɞɚɧɧɨɣɤɧɢɝɢɢɥɢɟɟɱɚɫɬɟɣɁȺɉɊȿɓȿɇɕ
Ɉɜɫɟɯɧɚɪɭɲɟɧɢɹɯɩɪɨɫɶɛɚɫɨɨɛɳɚɬɶɩɨɚɞɪɟɫɭpiracy@books-shop.com
xii
О

Использование uptime 161


Ведение журналов процессов 161
Мониторинг журналов с помощью tail 162
Планирование процессов 163
Использование at 163
Использование сron 164

Глава 9 Управление сетями 167


Основы создания сетей TCP/IP 167
Классификация IP<сетей 169
Сети класса А 169
Сети класса В 170
Сети класса С 170
Конфигурирование сетевого интерфейса 171
Использование традиционных методов конфигурирования
сетевых адаптеров 172
Использование netcfg для конфигурирования сетевого адаптера 176
Зачем нужен используемый по умолчанию шлюз 179
Деление сети на подсети 180
Конфигурирование компьютерашлюза 183
Конфигурирование хосткомпьютера 184

Часть 4 Организация работы служб


Интранет/Интернет 187

Глава 10 Служба DNS 189


Как работает DNS 189
Конфигурирование клиента DNS (Resolver) 191
Настройка сервера DNS 193
Основы конфигурирования DNS 193
Master/первичный сервер DNS 199
Slave/вторичный сервер DNS 200
Сервер DNS обратного разрешения 200
Вторичный сервер DNS режима «только кэширование» 201
Управление сервером DNS 202
Тестирование сервера DNS 203
Управление виртуальными доменами DNS 203
Выравнивание нагрузки с помощью сервера DNS 209

Глава 11 Служба электронной почты 211


Работа почты SMTP 212
Настройка почтовой службы DNS 214
Настройка почтовой службы SMTP 215
Установка sendmail 215
Запуск и остановка sendmail 215
Описание и конфигурация /etc/sendmail.cf 217
Конфигурирование файлов /etc/mail/* 223
Тестирование конфигурации sendmail 229
Тестирование правил перезаписи адресов sendmail 229
Тестирование файлов базы данных /etc/mail/* 231
Использование sendmail для просмотра транзакции SMTP
в режиме расширенного вывода 231
Использование флага отладки sendmail 232
Использование тестового конфигурационного файла 232
Безопасность sendmail  233
Защита конфигурационных файлов 233
Обеспечение более строгого режима деятельности и секретности 234

www.books-shop.com
Содержание xiii

Борьба со спамом 234


Как справиться с уязвимостью пересылки почты
третьей стороной 235
Пересылка спаммеров в черную дыру 236
Настройка службы почты POP 238
Работа подобной системы 238
Установка сервера РОРЗ 239
Конфигурирование службы РОРЗ 239
Конфигурирование почтовых клиентов SMTP/POP 239
Коммерческие утилиты 240
Sendmail Pro 240
qmail 240

Глава 12 Web'служба 241


Системные требования к Apache 242
Компилятор ANSI С 242
Дисковое пространство 242
Оперативная память 242
Другие требования 243
Получение Apache из сети 243
Создание пользовательского сервера Apache 244
Конфигурирование исходного кода Apache с помощью APACI 244
Конфигурационные параметры для makefile 246
Параметры конфигурации строк Rule 247
Параметры конфигурации модулей 247
Компиляция и установка Apache 248
Компиляция и установка инструментов технической поддержки
Apache 248
Модификация Apache с помощью дополнительных модулей 250
Запуск и выполнение сервера Apache 252
Конфигурирование httpd.cohf 253
Конфигурирование srm.conf 259
Конфигурирование access.conf 265
Управление сервером Apache 266
Тестирование сервера Apache 268
Управление сервером Apache 269
Конфигурирование Apache для сценариев CGI 269
Конфигурирование Apache для серверных дополнительных
модулей 272
Хостинг виртуальных Webсайтов 279
Использование Apache в качестве проксисервера 281
Аутентификация Webпользователей 288
Мониторинг статуса сервера 293
Ведение журналов посещений и ошибок 294
Усиление безопасности Webсервера 299
Использование SSL для проведения безопасных транзакций 306

Глава 13 Служба FTP 313


Wu<ftpd: используемый по умолчанию сервер FTP 313
Установка сервера wuftpd 314
Конфигурирование службы FTP 315
Создание анонимного FTPсайта 326
Создание гостевой учетной записи FTP 328
Создание виртуальных FTPсайтов 331
Использование коммерческого сервера FTP 334
Использование сервера с TFTP 334

www.books-shop.com
xiv

Глава 14 Другие популярные службы 337


Настройка службы IRC 337
Установка сервера IRC 338
Конфигурирование сервера IRC 338
Выполнение сервера IRC 348
Установка и использование клиента IRC 348
Настройка службы новостей Usenet • 350
Конфигурирование сервера INN 351
Получение доступа к серверу INN 352

Часть 5 Настройка офисных служб 353

Глава 15 Совместное использование файлов


и принтеров с помощью Samba 355
Установка Samba 356
Конфигурирование Samba 356
Конфигурация [global] 362
Конфигурация [homes] 365
Конфигурация [printers] 365
Использование графических утилит конфигурирования 366
Тестирование конфигурации /etc/smb.conf 366
Запуск, остановка и повторный запуск службы Samba 366
Практическое использование Samba . 367
Использование файлового сервера Linux в Windows 367
Использование файлового сервера Windows в системе Linux 367
Совместное использование принтеров системами Linux
и Windows 369
Использование интерактивного клиента Samba 372
Безопасность сервера Samba 373

Глава 16 Использование файловых серверов NFS 377


Установка сервера NFS 378
Конфигурирование сервера NFS 378
Предоставление доступа к экспортируемому каталогу
только для чтения 379
Предоставление доступа к экспортируемому каталогу
для чтения и записи 379
Запрещение доступа к определенному каталогу 379
Отображение пользователей между сервером NFS и клиентами 379
Установка клиента NFS 381
Конфигурирование клиента NFS 381
Безопасность сервера NFS 382
Распространение файлов с помощью rdist 383

Глава 17 Служба базы данных SQL 387


Понятие SQL 387
Установка и конфигурирование сервера SQL: MySQL 389
Где найти MySQL 389
Установка пакетов RPM MySQL 389
Доступ к серверу SQL 390
Первоначальный запуск клиента MySQL 390
Создание базы данных 390
Взаимодействие с сервером SQL с помощью сценариев 391
Взаимодействие с SQL из командной строки UNIX 392
Использование сценариев CGI для доступа к базе данных SQL
с помощью Webбраузера 398

www.books-shop.com
Содержание XV

Часть 6 Безопасность и мониторинг 403

Глава 18 Безопасность 405


Безопасный доступ пользователей 405
Ограничение физического доступа 406
Ограничение доступа обычных пользователей 407
Ограничение доступа суперпользователей 408
Ограничение любого доступа во время чрезвычайного
происшествия или атаки 409
Безопасность процесса аутентификации пользователей 409
Использование теневых паролей 410
Использование РАМ 413
Безопасность служб 417
Удаление ненужных служб во время установки операционной
системы 417
Безопасность служб, выполняемых inetd 418
Защита файлов и файловой системы 426
Монтирование файловой системы только для чтения 426
Использование преимуществ файловой системы ext2 427
Использование Tripwire для обеспечения целостности файлов 428
Проверка защиты системы (роль адвоката дьявола) 432
Вскрытие собственного пароля 432
COPS повсюду 434
Делайте резервные копии и обратную трассировку 436
Следите за последними новостями в области безопасности 436
CERT 436
BUGTRAQ@NETSPACE.ORG 436

Глава 19 Сетевая безопасность 437


Понимание проблемы безопасности 437
Анализатор Ethernet 438
Подделка IPадреса 438
Проектирование защищенной сети 439
Использование немаршрутизируемых IPадресов 439
Подмена IPадресов 439
Понятие брандмауэра 441
Фильтры пакетов 441
Использование простого брандмауэра фильтрации пакетов:
ipchains 442
Использование брандмауэра уровня приложения 443
Использование проксисервера Squid 444
Получение и установка Squid 444
Первоначальное выполнение Squid 445
Точная настройка Squid " 445
Получение помощи от SATAN 447
Установка SATAN  ' 448
Работа с SATAN 448

Часть 7 Настройка производительности 453

Глава 20 Конфигурирование ядра 455


Необходимость модернизации ядра 455
Установка ядра Linux 456
Подготовка к модернизации ядра 456
Установка нового ядра 458
Создание начального ramdisk 458
Конфигурирование LILO 458

www.books-shop.com
xvi

Загрузка с новым ядром 459


Модификация ядра 459
Установка исходного кода ядра Linux 459
Конфигурирование ядра постарому 460
Конфигурирование ядра с помощью make menuconfig 472
Конфигурирование ядра с помощью make xconfig 473
Компиляция, установка и начальная загрузка нового ядра 474
Внесение изменений в ядро 474
Использование kernelcfg 475

Глава 21 Создание многосерверной Web'сети 477


Требования к Web<сети 478
Проектирование Web<сети 478
Циклическая конфигурация DNS 479
Аппаратное решение выравнивания нагрузки 480
Выбор правильного решения для выравнивания нагрузки 481
Выделение IP<адресов 485
Конфигурирование сети 486
Настройка сети для компьютера сервера имен 486
Настройка сетевых интерфейсов каждого Webсервера 487
Настройка сетевых интерфейсов директора WSD Pro 488
Тестирование сетевой конфигурации 490
Настройка сервера DNS 491
Настройка сервера NFS 493
Настройка почтового сервера (SMTP/POPS) 494
Настройка сервера FTP 494
Настройка rdist на сервере имен 494
Настройка каждого Web<сервера 496
Настройка конфигурации клиента NFS 496
Настройка sendmail для пересылки на интеллектуальный хост 496
Настройка rdist для распространения файлов
из ns.aminewslanc.com 497
Настройка WSD Pro 497
Создание фермы Webслужб . 497
Создание фермы связанных сетевых служб 500
Управление сетью 500
Изъятие сервера из службы 500
Задание приоритетов выбора серверов 501
Мониторинг серверной нагрузки и вывод статистики 501
Добавление нового Webсервера в ферму Webсерверов 501
Добавление клиентских Web<сайтов 502

Часть 8 Использование X Window 503

Глава 22 Конфигурирование X Window 505


Выбор сервера X Window 506
XFree86 506
MetroX 506
AcceleratedX для Linux 506
Подготовка к установке XFree86 506
Требования к оперативной памяти 506
Требования к видеоадаптеру 507
Требования к монитору 507
Требования к дисковому пространству 507
Установка XFree86 507
Конфигурирование XFree86 507
Использование Xconfigurator для создания файла XF86Config 508
Общее представление о файле XF86Config 511

www.books-shop.com
Содержание xvii

Использование X Window 518


Конфигурирование .xinitrc 519
Модификация внешнего вида менеджеров окон 520
Модификация вида клиентских приложений 520
Использование xdm или менеджера дисплея X 521
Использование ХFгее86 в Windows 9х/2000 522
Micro XWin32 522

Глава 23 Использование системы X Window 525


Использование AnotherLevel 525
Использование среды рабочего стола GNOME 529
Использование X Window для администрирования 531
Использование glint 531
Использование панели управления 533

ПРИЛОЖЕНИЕ А Ресурсы Linux 537


Группы новостей Usenet 537
Иерархия COMP.OS.LINUX 537
Различные группы новостей Linux 538
Списки почтовой рассылки . 539
Общие списки 539
Списки почтовой рассылки, посвященные вопросам безопасности 540
Специальные списки рассылки  540
Web<сайты 540
Общие ресурсы 540
Публикации 540
Хранилища программного обеспечения 540
Ресурсы, посвященные безопасности 541
Группы пользователей 541

www.books-shop.com
www.books-shop.com
Часть 1

Первое знакомство

www.books-shop.com
www.books-shop.com
Глава 1
Почему Red Hat Linux?

В этой главе:
• Краткая история Linux
" Дистрибутивы Linux
• Почему Red Hat Linux лучше остальных дистрибутивов
• Преимущества Red Hat Linux в качестве серверной операционной
системы
• Как получить Red Hat Linux

с уществует два мира серверных операционных систем (ОС): UNIX и Win


dows 2000, пришедшая на смену Windows NT. Другие операционные системы
серверного класса нельзя считать доминирующими на рынке. Любой разго
вор о серверах приводит к сравнению UNIX и Windows 2000/NT. Под опреде
ление «UNIX» попадает множество операционных систем, в том числе и
Linux, хотя, строго говоря, Linux не является версией UNIX. Выбор UNIX
или Windows NT частчЗ зависит от различных факторов: возможностей поку
пателя, квалификации специалистов подразделения информационных тех
нологий (ИТ) организации, а также политики и структуры этого
подразделения. Надеюсь, читатели этой книги решили выбрать путь UNIX.
В этой главе представлены доказательства того, что Red Hat Linux — правиль
ный выбор для серверной системы. Но сначала рассмотрим историю разви
тия Linux.

История Linux
5 октября 1991 г. Линус Бенедикт Торвальдс, аспирант Хельсинкского
университета (Финляндия), опубликовал в группе новостей Usenet
(comp.os.minix) сообщение о созданной им маленькой UNIXподобной

Ⱦɚɧɧɚɹɜɟɪɫɢɹɤɧɢɝɢɜɵɩɭɳɟɧɚɷɥɟɤɬɪɨɧɧɵɦɢɡɞɚɬɟɥɶɫɬɜɨɦ%RRNVVKRS
ɊɚɫɩɪɨɫɬɪɚɧɟɧɢɟɩɪɨɞɚɠɚɩɟɪɟɡɚɩɢɫɶɞɚɧɧɨɣɤɧɢɝɢɢɥɢɟɟɱɚɫɬɟɣɁȺɉɊȿɓȿɇɕ
Ɉɜɫɟɯɧɚɪɭɲɟɧɢɹɯɩɪɨɫɶɛɚɫɨɨɛɳɚɬɶɩɨɚɞɪɟɫɭpiracy@books-shop.com
4 .', o.$:... l

операционной системе, названной Linux. На создание новой операционной


системы Линуса вдохновила другая маленькая операционная система UNIX,
названная Minix и разработанная Энди Таненбаумом. Можно было бы пред
положить, что в сообщении объявлялось о версии Linux 0.01, но это не так.
Фактически Linux 0.01 никогда не выходила! Версия 0.01 не была исполняе
мой; Линус представил только ее исходный код на первом узле FTP системы
Linux по адресу f t p : //nic. f u n e t . f i .
В сделанном 5 октября сообщении Торвальдса речь шла о версии 0.02, ко
торая могла выполнять оболочку GNU Bourne Again Shell (bash) и компиля
тор С GNU (gcc), но больше почти ничего (GNU — GNU's Not Unix, «GNU
это вам не UNIX» — соглашение и проект Free Software Foundation, препятст
вующий коммерциализации свободно распространяемого программного
обеспечения, a Bourne Again Shell — оболочка «опять Борн» является широко
распространенной командной оболочкой в Linux и UNIX.  Прим. ред.). Тор
вальдс не предполагал, что новая операционная система для любителей поко
паться в ядре и хакеров превратится в то, что известно сейчас под именем
Linux.
Linux началась с версии 0.02, перешла к версии 0.03, а затем подпрыгнула
до версии 0.10. По мере того, как все больше программистов во всем мире на
чали разрабатывать Linux, система достигла версии 0.95. Официальная вер
сия 1.0 появилась в марте 1992 г. На момент выхода этой книги последней
стабильной версией ядра Linux была версия 2.2.3.
Сегодня Linux является полноценной операционной системой типа
UNIX, оказавшейся в центре всеобщего внимания. Системе Linux посвящено
огромное количество публикаций в средствах массовой информации во всем
мире. Операционная система стала свежим ветром,в замкнутом мире ОС. Это
уже не крошечный любительский проект, основанный Торвальдсом. Linux
стала не просто претендентом за звание «основной операционной системы»;
фактически она — одна из победивших в соревновании.
Linux выполняет практически все заслуживающее внимания бесплатное
программное обеспечение, созданное такими организациями как GNU. Она
имеет более высокую производительность, чем многие дорогие коммерче
ские операционные системы. Хотя основной целевой платформой являются
машины Intel х86, Linux была перенесена на другие аппаратные платформы,
включая Spare, Alpha и Macintosh. Короче говоря, нельзя больше думать о
ней, как о мечте программиста, который любит копаться в коде ядра и хочет
иметь дешевую операционную систему с открытым кодом для занятий дома.
Все изменилось. Linux теперь повсюду.
Компания International Data Corporation of Framingham (штат Массачу
сетс, США) недавно предсказала, что Linux скорее всего превысит планку в
17.2% рынка, которую она удерживала в 1998 г.
Действительно, большинство крупных организаций уже имеют неодно
родную (гетерогенную) серверную среду. Поэтому становится очевидным до
бавление Linux к такой среде в связи с низкой стоимостью и открытостью
кода.
Сейчас многие компании или независимые специалисты берут ядро Linux
и формируют бесплатное или коммерческое программное обеспечение для
создания полезных дистрибутивов Linux. Все эти дистрибутивы используют
один и тот же код ядра, но предоставляют дополнительные возможности
установки, конфигурирования и дополнительные приложения. Рассмотрим
широко доступные дистрибутивы Linux.

Основные дистрибутивы Linux


Существует много различных дистрибутивов Linux. Red Hat Linux является
моим фаворитом, а, возможно, и вашим. Основные различия дистрибутивов:
• Установка Процедура установки варьируется от полностью ручной до
полуавтоматической. Один дистрибутив требует от пользователя созда
ния загрузочных дисков, а другой (например, Red Hat) — предоставляет
готовые диски или разрешает загрузку прямо с CDROM. Один

www.books-shop.com
Почему Red Hat Linux? 5
v/

дистрибутив имеет программу установки с минимальными возможно


стями, а другой (например, Red Hat) предоставляет пользователю дру
жественный интерфейс управления установкой на основе меню.
• Простота конфигурирования Дистрибутив может не предоставлять
никаких средств конфигурирования и основываться на ручном редак
тировании файлов системы, либо будут предложены инструменталь
ные средства на основе графического пользовательского интерфейса
(GUI), упрощающие создание конфигурации.
• Объединенное в дистрибутиве программное обеспечение Один
дистрибутив может содержать сотни программных пакетов, а другой
только ограниченное количество программ, предполагая загрузку
остальных пакетов через FTP или иным путем.
я Система X Window Один дистрибутив поддерживает автоматиче
ское определение видеооборудования компьютера, чтобы облегчить
создание конфигурации системы X Window, в то время как другой мо
жет потребовать изменения конфигурационных файлов системы
X Window вручную.
• Поддержка Очень важна для пользователей коммерческих версий.
Техническая поддержка многих дистрибутивов весьма ограничена.
Хотя эта книга посвящена дистрибутиву Red Hat Linux, будет интересно
узнать, чем отличаются от него другие дистрибутивы Linux.

Caldera OpenLinux ,
После Red Hat Linux лучшим выбором будет дистрибутив OpenLinux ком
пании Caldera. Я считаю его вторым среди достойных дистрибутивов Linux
для новых пользователей и компаний. Первоначальный дистрибутив Caldera
был создан немецкой группой Linux Support Team (LST), которая позже ста
ла частью Caldera.
Этот дистрибутив Linux использует для распространения пакетов техно
логию управления пакетами (RPM, Red Hat Package Management) компании
Red Hat. Установка OpenLinux похожа на установку Red Hat Linux, но Open
Linux дополнительно позволяет сохранить и восстановить параметры кон
фигурации. Этот дистрибутив предназначен для компаний и предлагает
множество коммерческих пакетов, таких как защищенный Webсервер или
офисный пакет StarOffice (текстовый процессор, программа электронных
таблиц, графический редактор и т.д.), DRDOS (похожая на DOS операцион
ная система, которая может выполняться с помощью программного эмулято
ра DOSEMU), утилиты администрирования NetWare 3.x & 4.x (Administration
Utility) и многое другое. Можно считать этот дистрибутив одной из самых
успешных коммерческих версий Linux.
Так как основными заказчиками Caldera являются компании основных от
раслей промышленности, организация предоставляет широкие возможности
технической поддержки и имеет наиболее мощную сеть реселлеров. Допол
нительную информацию об этом дистрибутиве можно найти в Интернете по
адресу http://www.calderasystems.com/products/openlinux/.
Slackware Linux
Slackware — один из самых старых дистрибутивов Linux. Хотя я начал свое
знакомство с Linux именно с дистрибутива Slackware, сейчас я не рекомендую
его новым пользователям, так как по сравнению с Red Hat Linux он требует
больше ручного редактирования текстовых файлов конфигурации.
Однако Slackware может быть прекрасным дистрибутивом для того, кто
хочет поиграть с изменением ядра или любит подход «сделай сам». Вкратце
можно сказать, что это не для слабых духом. Slack — сокращенное имя, данное
дистрибутиву его приверженцами, — не использует никакой схемы пакетиро
вания, поэтому все пакеты поступают в виде файлов tar. Это создает пробле
мы для новых пользователей и еще большие неудобства, когда дело доходит
до модернизации операционной системы или других частей дистрибутива.

www.books-shop.com
6 Глава 1
О ;

Но существует программа pkgtool, отслеживающая tar, tar.gz и связанные с


ними файлы. Дистрибутив Slackware еще не модернизирован для использова
ния библиотек glibc2, поэтому не может исполнять многие двоичные файлы
Red Hat.
Slackware распространяется Walnut Creek CDROM. Дополнительную ин
формация — в Интернете по адресу http: //www. slackware. com/.
Debian GNU/Linux
Red Hat Linux — коммерческий дистрибутив свободно распространяемого
Linux. Дистрибутив Debian GNU/Linux также является свободно распро
страняемым. Хотя Linux разрабатывался программистами всего мира, боль
шинство дистрибутивов созданы тесно связанными группами людей.
Например, Red Hat имеет собственный персонал, отслеживающий все вопро
сы, связанные с дистрибутивом. В то же время Debian GNU/Linux полагает
ся только на команду добровольцев. Основной дистрибутив больше чем Red
Hat, поскольку содержит пакеты, которые Red Hat считает пожертвованным
программным обеспечением и не включает в официальный дистрибутив Red
Hat.
Этот дистрибутив использует свою собственную схему пакетирования.
Debian GNU/Linux поставляется с менеджером пакетов dpkg, поддерживаю
щим формат .dev вместе с dselect и apt в качестве инструментальных средств
управления пакетами. Хотя технология RPM, разработанная Red Hat, стала
основным решением пакетирования для многих дистрибутивов Linux и дру
гого программного обеспечения UNIX, схема пакетирования Debian имеет
некоторые интересные свойства, например автоматическую загрузку пакетов
Debian GNU/Linux, модернизацию дистрибутива и оперативное обновление
программных пакетов.
Я рассматриваю его, как наиболее гибкий и идеологически мотивирован
ный дистрибутив Linux. Так как все разработчики являются добровольцами,
на них не осуществляется давления и они имеют время и возможности довес
ти версию до совершенства. Новый выпуск публикуется после выполнения
всех требований, сформулированных командой разработчиков. Он может
быть задержан, если доброволец занят другими делами. Но при выходе но
вый выпуск Debian GNU/Linux имеет меньше всего проблем, если вообще
имеет.
Некоммерческой Debian Organization не предоставляет никакой официа
льной поддержки. Дополнительная информация об этом дистрибутиве пуб
ликуется в Интернете по адресу http: //www.debian.org/.
S.u.S.E.
Дистрибутив S.u.S.E., созданный в Германии, поставляется с универсаль
ным средством установки и администрирования — YaST (Yet another Setup
Tool, Еще один инструмент настройки). Вместе с основным дистрибутивом
поставляется множество пакетов. Многие из них доступны для Red Hat в виде
пожертвованного программного обеспечения на f t p : / / c o n t r i b . r e d h a t . c o m .
Этот дистрибутив содержит криптографическое программное обеспечение,
такое как ssh, ApacheSSL и PGP, которое имеет юридические ограничения на
экспорт из США. Это означает, что дистрибутив S.u.S.E., доступный в США,
отличается от версии, доступной вне США. Дистрибутив использует схему
пакетирования RPM.
Дополнительную информация об этом дистрибутиве можно найти по ад
ресу http^ //www. suse.com/.
Другие дистрибутивы Linux
Распространенными дистрибутивами Linux являются Eonova Linux,
LinuxMandrake, Stampede GNU/Linux, TurboLinux и Xi Graphics maXimum
cde/OS. Ряд специализированных дистрибутивов miniLinux предназначен
для специфического оборудования и ограниченного набора служб. Они инте
ресны тем, что они часто предоставляют быстрый способ выполнить боль
шую часть административной работы. В следующем разделе мы вкратце
рассмотрим некоторые из них.

www.books-shop.com
Почему Red Hat Linux? ^ 7
: ^> —

Trinux
Trinux загружается с нескольких (23) гибких дисков (или из раздела
MSDOS/Windows 9x) и целиком выполняется в оперативной памяти. Он по
ставляется с самыми последними версиями многих сетевых инструменталь
ных средств защиты, таких как NETWATCH, tcpdump и netmon, которые
являются очень полезными утилитами сканирования портов TCP/IP и мони
торинга сетей. Дистрибутив Linux превращает старый персональный компь
ютер (ПК) класса лвб в мощную рабочую станцию управления сетевой
безопасностью. Дополнительную информацию о Trinux можно найти по ад
ресу h t t p : / / w w w . t r i n u x . o r g .
Linux на „гибких дисках (LOAF)
LOAF умещается на одном гибком диске (1.44 МБ) и действует как простая
система сетевого клиента. Дополнительную информацию об этом дистрибу
тиве можно найти по URL: http://www.ecks.org/loaf/.
Linux Router Project
Linux Router Project является еще одним дистрибутивом Linux, умещаю
щимся на одном гибком диске (1.44 МБ). Эта система превращает обычную
старую систему лйб в маршрутизатор, используя демон (фоновый процесс)
шлюза. Дистрибутив находится на узле FTP: f t p : //sunsite. u n c . edu/pub/Linux/
distributions/linuxrouter/.
Существуют дистрибутивы Linux для других процессорных архитектур.
Фактически Red Hat Linux поддерживает Alpha и SPARC, a Debian GNU/Linux
имеет стабильные версии для архитектур Alpha и Motorola 68K. Версии Linux
для машин PowerPC, таких как PowerMac, доступны от MkLinux и LinuxPPC.,
Системы Linux для компьютеров UltraSPARC поставляет UltraPenguin.
Информацию обо всех доступных дистрибутивах Linux можно получить
по URLадресам:
ч
• http://www.linuxhq.com/distindex.html
• http://www.linux.org/dist/index.html

Почему Red Hat является лучшим дистрибутивом


На вопрос: «Почему Red Hat является лучшим?» есть простой ответ — по
тому что ее использует сам Линус Торвальдс! Действительно, Линус пользует
ся Red Hat Linux, но можно привести и другие доказательства.
Практически один и тот же код ядра Linux используется в различных ди
стрибутивах. Поэтому основные дистрибутивы отличаются простотой уста
новки, конфигурирования и объемом приложений пользовательского
уровня. Преимущества системы Red Hat Linux в этих областях делают ее наи
более популярным дистрибутивом Linux.
Компания Red Hat поставила перед собой цель сделать Linux доступной
самым широким слоям пользователей компьютеров. Для этого система Linux
должна иметь определенную степень дружественности пользователю. Red
Hat серьезно и последовательно работает над тем, чтобы сделать Linux при
вычной пользователям операционной системой. Пока все указывает на то,
что компания преуспела в достижении этих целей.
Иногда серьезные пользователи Linux отвергают Red Hat Linux, предпо
читая другой дистрибутив (например Slackware), только потому, что Red Hat
пытается упростить операции установки и конфигурирования. Система не
ограничивает компиляцию ядра или ручное конфигурирование сети. Поэто
му необоснованно утверждение о том, что Red Hat скрывает от пользователя
конфигурацию. Система упрощает установку настолько, что ее сможет прове
сти любой пользователь, но после установки можно применить разнообраз
ные графические утилиты конфигурирования или изменить параметры
вручную.
Схема пакетирования Red Hat Package Management (RPM), созданная са
мой компанией, сейчас одна из наиболее интересных современных схем

www.books-shop.com
8 '' Глава 1
О •

формирования пакетов распространения программного обеспечения. Эта


схема используется в других дистрибутивах Linux.
Red Hat предоставляет простой и элегантный метод установки для всех
слоев потенциальных пользователей Linux, в то время как другие дистрибути
вы ориентируются на определенные классы. Например, дистрибутив Caldera
OpenLinux предназначен прежде всего для различных компаний, от неболь
ших до крупных, a Slackware Linux ориентирован на ветеранов, экспертов по
UNIX и специалистов по операционным системам, подобным UNIX. Однако
дистрибутив Red Hat Linux предназначен как для индивидуальных пользова
телей, так и для организаций.
Red Hat преуспела в совершенствовании самой системы Linux. Учитывая
простоту установки, конфигурирования и коммерческую техническую под
держку, многие люди используют или планируют переход именно на этот ди
стрибутив Linux. Даже противники Red Hat хвалят компанию за эти
достижения.
Предпринимаются усилия по укреплению положения Red Hat Linux на
всех фронтах. Недавно Red Hat преобразовала свой официальный Webузел
(http: //www. redhat. com) в портал Linux, чтобы централизовать в одном месте
Интернета всю информацию о событиях мира Linux. Преобразование прове
дено совместно с другими популярными Webузлами, посвященными Linux,
поэтому новый портал должен стать единым источником информации о Linux
и программном обеспечении этой ОС для миллионов пользователей Linux во
всем мире.
Деятельность Red Hat усилена вовлечением различных крупных компа
ний программного и аппаратного обеспечения, таких как IBM, HP, Informix
Corporation, Oracle, Corel Corporation, SAP AG, Computer Associates International,
Inc. и Intel. По сути дела, Compaq, IBM, Nowell и Oracle приобрели акции Red
Hat, чтобы помочь донести Red Hat до своих заказчиков. Все это хорошо де
монстрирует цели компании Red Hat.
Рассмотрим состав дистрибутива Red Hat Linux. Прежде всего, пользова
тель получает самую стабильную версию ядра Linux вместе с множеством
приложений GNU. Сама компания Red Hat предоставляет различные инстру
ментальные средства конфигурирования как для системы X Window, так и
для текстовых оболочек. Официальный CDROM компании Red Hat содер
жит различные коммерческие приложения, которые являются бесплатными
для личного использования либо поставляются в виде демонстрационных
версий для коммерческого использования. Кроме прочего, на диске находят
ся приложения ApplixWare 4.4.1,WordPerfect 7, Sybase ASE и Ardi Executor
(эмулятор Macintosh).
В программном обеспечении коммерческим организациям необходима
качественная техническая поддержка. Зная об этом, Red Hat предоставляет
Response Link — расположенную в центральном офисе компании службу тех
нической поддержки в режиме 24 часа в сутки семь дней в неделю (24x7).
Услуги сопровождения операционной системы включают бесплатные теле
фонные консультации из любого места США и приоритетную техническую
поддержку.
Итак, компания Red Hat всерьез и надолго взялась за Linux. Она предлага
ет, очевидно, самый надежный, ценный и доступный дистрибутив из имею
щихся сегодня на рынке.

Red Hat Linux в качестве серверной ОС


В идеале лучшая операционная система должна завоевать весь рынок.
К сожалению, мы живем реальном мире, где маркетинг важнее настоящего
товара. Многие из нас покупают то, о чем узнали из средств массовой инфор
мации или какимто другим способом. Большинство людей колеблются, когда
предстоит испытать или поддержать новые идеи, особенно если работу нуж
но выполнить в сжатые сроки. Это позволяет нескольким гигантским компа
ниямразработчикам операционных систем (все знают, о ком идет речь)
полностью контролировать рынок серверов. Большинство менеджеров ИТ
не желают рисковать, даже когда риск минимален. Это главное препятствие,

www.books-shop.com
Почему Red Hat Linux? 9
—: ^>

которое необходимо преодолеть системе Linux, чтобы завоевать рынок сер


верных операционных систем. Однако благодаря компании Red Hat положе
ние быстро меняется. Многие компьютерные гиганты продемонстрировали
большой интерес к Red Hat Linux, поэтому профессионалам ИТ стало легче
включать Linux в свои проекты и даже реализовывать их на практике.
Те, кто испытал Linux в качестве сервера, знают, что это идеальная сер
верная платформа. Мы в течение рядз лет использовали Linux на серверах с
очень высокой степенью нагрузки. Многие используют серверы Linux, кото
рые ни разу не перезагружались в течение года! Низкая стоимость, высокая
надежность и поддержка режима 24x7 делают Red Hat Linux идеальной сер
верной платформой.
Red Hat Linux превосходит отличные от UNIX серверные платформы, та
кие как Windows 2000 (ранее известную как Windows NT), еще и потому, что
эта система получает все преимущества проверенного и подтвержденного
временем программного обеспечения платформы UNIX. Например, Red Hat
Linux выполняет самый популярный Webсервер Apache, хотя Apache перво
начально был создан не для Linux. Сильные связи Linux с операционной сис
темой UNIX облегчают перенос лучших приложений UNIX на Red Hat Linux
по сравнению с переносом в Windows 2000 (Windows NT). Дедушка почтового
сервера SMTP, служба sendmail, была очень давно перенесена в Red Hat Linux.
Запустив в Linux старый добрый сервер BIND DNS, мы знаем, что на это про
веренное временем программное обеспечение с длинным послужным спис
ком вполне можно положиться. Так как Red Hat Linux выполняет
практически все лучшие серверные приложения UNIX, эта система автома
тически наследует множество достоинств программного обеспечения, что
вряд ли можно сказать о Windows 2000. Кроме того, Linux выполняет свойст
венные платформе Windows файловые службы (8MB) лучше, чем сама плат
форма Windows! Другими словами, мы получим на Red Hat Linux надежный
файловый сервер с лучшим временем отклика, чем на альтернативной плат
форме Windows.
Существуют экономические предпосылки выбора серверной платформы.
Обратимся в Web или Usenet и найдем рекомендации специалистов (но не
разработчиков) о требованиях к оборудованию для иных операционных сис
тем, чем Linux. Советы об оборудовании для Windows 2000 могут вызвать па
нику. Оперативная память исчисляется трехзначным числом Мегабайт (МБ),
а частота центрального процессора — сотнями МегаГерц (МГц). Стоимость
оборудования еще не стала такой низкой, чтобы эти числа не напугали мно
гие компании. Хорошо еще если нужен один сервер, но что делать, если тре
буется несколько серверов для создания инфраструктуры ИТ? Причем с
каждой новой версией ОС требования увеличиваются вместе с затратами на
оборудование. Не забудем, что многие коммерческие серверные операцион
ные системы имеют жесткие ограничения на количество пользователей (и
даже сетевые соединения), определяемые приобретенной лицензией, а так
же о стоимости сопровождения и обязательных дорогостоящих услугах тех
нической поддержки. Если сложить все вместе, то Red Hat Linux выглядит
более выгодно.
Кроме снижения требований к оборудованию, мы получим большую отда
чу от вложений в аппаратную часть системы. Поскольку система Linux разра
батывается специалистами всего мира, которые не всегда имеют самое
последнее и самое лучшее оборудование, она очень хорошо выполняется
даже на слабых системах. Значит, аппаратура не устареет так быстро, как это
го хотят его производители. На каждый вложенный доллар мы получим боль
ший доход. Вряд ли то же самое можно сказать о коммерческих серверных
операционных системах.
Надеемся, уже достаточно доказательств того, что Red Hat Linux — пре
красная серверная платформа, поэтому возникает естественное желание по
пробовать ее на практике. Важнейшей обязанностью будущего системного
администратора Red Hat Linux является отслеживание всех событий в мире
Linux. Адреса наиболее интересных ресурсов Linux в Интернете приведены
в приложении А.

www.books-shop.com
10 Глава 1
О :

Как приобрести Red Hat Linux


Можно загрузить Red Hat Linux с официального FTPсервера Red Hat Linux
или любого зеркального узла (сайта) FTP.

РЕКОМЕНДАЦИЯ I ТРУДНО получить доступ к FTP'серверу Red Hat (ftp://ftp. redhat.com),


' поскольку он постоянно перегружен. Рекомендую найти на узле
http://www. redhat. com/mirrors, html список ближайших зеркальных
FTP'узлов.

Имея быстрое соединение с Интернетом (т.е. не модемное соединение),


можно загрузить самую последнюю версию Red Hat Linux с Webсайта этой
компании.
Когда нет быстрого соединения с Интернетом, закажите официальный
CDROM диск Red Hat в Web, по телефону или факсу. Правила и порядок за
каза описаны на Webсайте компании Red Hat.
Получив копию дистрибутива Red Hat Linux, можно начинать установку
операционной системы.

www.books-shop.com
Глава 2

Установка и базовая
конфигурация

В этой главе:

" Аппаратные требования системы Red Hat Linux


• Как подготовиться к установке
• Как установить Red Hat Linux

X отя Red Hat Linux работает на многих аппаратных платформах, напри


мер на клонах ПК х86, Alpha и Spare, мы обсудим установку на компьютерах
х86 — доминирующей платформе Linux. Операции установки на другие плат
формы немного отличаются, поэтому обратитесь на Webсайт компании Red
Hat.

Требования к оборудованию
С самого начала и до сего времени Linux не выдвигала повышенных тре
бований к оборудованию. Red Hat Linux требует для исполнения не слиш
ком многого, однако требования клиентской версии Linux отличаются от
требований к выполнению операций серверного класса. Определить, под
держивается ли оборудование системой Red Hat Linux, поможет Webсайт:
http://www.redhat.com/support/docs/rhl.
Чем лучше оборудование, тем выше будет производительность системы
Red Hat Linux. Однако надо быть осторожным, поскольку поддерживаться
может не все новое оборудование! Например, если видеокарта с необыкно
венными свойствами появилась вчера, не следует ожидать, что она завтра
будет поддерживаться Red Hat Linux. Иногда производители оборудования

www.books-shop.com
12 2

затрудняют разработчикам Linux доступ к определенной информации, необ


ходимой для создания модулей драйверов, следовательно, разработчикам не
обходимо время для реализации поддержки новых устройств. Linux
разрабатывается тесно связанными группами людей по всему миру, и не каж
дый из них имеет время и финансовые возможности для проверки самых по
следних аппаратных игрушек. Компания Red Hat делает все возможное для
поддержки самых новых изделий, но для этого нужно время. Необходимо
знать, какое оборудование используется с Linux и насколько хорошо оно ра
ботает. Чтобы выяснить, насколько хорошо работает определенное оборудо
вание с Red Hat Linux, посетите страницы совместимости оборудования,
находящиеся на указанном выше URL, либо пошлите запрос соответствую
щей группе новостей Linux в Usenet. Сообщите предполагаемый состав
основного оборудования и посмотрите, расскажет ли ктонибудь о нем ужас
ные истории. Наша книга посвящена созданию системы Red Hat Linux сер
верного класса, поэтому приведем некоторые общие рекомендации. ,
• Центральный процессор Чем быстрее, тем лучше. Однако не всегда
оправдана покупка самого быстрого из доступных процессоров. На
пример, если нужно создать Webсервер, выполняющий Apache на Red
Hat Linux, достаточно среднего по производительности процессора
Pentium Pro или Pentium II небольшой мощности. Нет необходимости
приобретать Pentium III с частотой 400+ МГц. Конечно, если планиру
ется запускать на Webсервере сценарии CGI или другие приложения,
требующие большой вычислительной мощности, лучше использовать
очень быстрый процессор. Для большинства систем подойдет средний
по производительности процессор.
• Оперативная память Чем больше, тем быстрее. Это та часть обору
дования, которой должно быть как можно больше. Оперативная па
мять является одной из наиболее важных составляющих
производительности. Предположим, нужно оценить объем оператив
ной памяти Webсервера. Сначала решаем, сколько запросов требуется
обслужить в секунду. Иногда трудно оценить это значение, но есть
предположения о количестве запросов за день. Предположим, что
Webсервер должен обслужить 3 456 000 запросов/день. Преобразуем
его в запросы/с: 3 456 000 запросов/ день х 1 день/24 часа х
1 час/3600 с.
Получаем 40 запросов/с. Теперь известно, что потребуется 40 демо
нов Apache, одновременно обслуживающих 40 запросов. В таком слу
чае требования к памяти только для одного сервера Apache будут в
40 раз превышать память, необходимую для одного процесса Apache.
Приблизительно потребуется 40 МБ или больше, в зависимости от
того, как сконфигурирован сервер Apache. Например, если он содер
жит интерпретатор Perl (mod_perl) или добавлена поддержка FastCGI
(mod_fastcgi), либо присутствуют другие дополнительные модули, то
каждому процессу Apache может потребоваться больше памяти. Чем
больше сведений о требованиях к памяти отдельных модулей, тем луч
ше будут обоснованы требования к общему объему оперативной памя
ти. Для большинства задач типичного развертывания Webсервера
рекомендуем 256 МБ быстрых 100 МГц (10 наносекунд) модулей
DRAM.
• Жесткий диск Объем дискового пространства сервера диктуется за
дачами, которые должен выполнять этот сервер. Если нужно, чтобы
он содержал большое число файлов для Web или локальной вычисли
тельной сети (ЛВС), определите требования к объему данных и купите
жесткий диск соответствующего размера. Размер в действительности
не является серьезной проблемой, поскольку стоимость больших жест
ких дисков регулярно снижается. Однако важен тип жесткого диска
сервера. Существуют два варианта: IDE/EIDE или SCSI. Если сервер
критически важен для ЛВС или операций Интернета, таких как Web,

www.books-shop.com
Установка и базовая конфигурация 13
О

FTP или почтовых служб, используйте несколько дисков SCSI. Диски


SCSI обеспечивают лучшую пропускную способность, чем их аналоги
IDE/EIDE. Я рекомендую использовать жесткие диски Wide SCSI, ко
торые предоставят производительность порядка 20МБ/С. Используя
несколько дисков Wide SCSI, можно минимизировать время ожидания
дисковой подсистемы. Другими словами, несколько дисков SCSI сни
жают влияние дисковых ограничений, связанных с вводом/выводом,
что очень полезно для серверов. Осторожно: соблазнившись UltraWide
SCSI дисками и контроллерами, можно оказаться без соответствующих
драйверов, еще не созданных для приобретенного высокоскоростного
оборудования SCSI. Другим важным моментом является быстрый на
грев высокопроизводительных жестких дисков. Не забудьте включить
соответствующее охлаждающее оборудование, например дополнитель
ные вентиляторы в неиспользуемом дисковом отсеке.
• Адаптер сетевого интерфейса Хороший сервер нуждается в хоро
шем сетевом адаптере (NIC — Network Interface Card). Убедитесь, что
покупаете высокопроизводительный NIC хорошо известного постав
щика, такого как 3COM или Intel. В идеале нужен адаптер, позволяю
щий переключателем блокировать режим Plug and Play (PNP), так как
PNP все еще не вполне корректно работает в Red Hat Linux.
• Другое оборудование Оно включает достаточно быстрое устройст
во чтения CDROM дисков и устройство чтения гибких дисков (дис
кет). Большинство современных материнских плат поставляются со
встроенными контроллерами IDE и позволяет присоединить четыре
устройства IDE. Так как CDROM редко используется на сервере, не
нужно очень быстрое устройство — достаточно 1020кратной скоро
сти. Последнее, но не менее важное, это корпус. Убедитесь, что для си
стемы приобретен корпус и источник питания серверного класса.
Существуют корпуса с дополнительным источником питания и высо
кой мощностью (300 Ватт или выше);

Подготовка к установке Red Hat Linux


Вопервых, выберите версию Red Hat Linux. С книгой поставляется вер
сия 6.x Red Hat Linux — можно использовать ее или получить самую послед
нюю версию в компании Red Hat (в сентябре 2000 г. опубликована версия 7 —
Прим. ред.). Для этого следует обратиться на Webсайт компании.
Можно установить Red Hat Linux через службы FTP, NFS или 8MB (Samba),
если CDROM диск Red Hat расположен на удаленном компьютере. Этот ме
тод не всегда работает успешно. Я настоятельно рекомендую использовать
локальное устройство чтения CDROM и проводить установку без обращения
к сети.
Если необходимо установить систему через службы FTP, NFS или 8MB,
убедитесь, что локальный компьютер настроен на исполнение требуемой
службы, смонтирован CDROM диск Red Hat и выполнен его экспорт на
компьютер, выбранный сервером Red Hat. Рекомендуем сделать копию всего
CDROM диска Red Hat на жесткий диск, чтобы ускорить установку.
Можно установить Red Hat из раздела DOS локального жесткого диска.
Это рекомендуется в том случае, если локальная система не имеет устройства
чтения CDROM даже на время проведения установки. Предполагая, что су
ществует доступ к удаленному компьютеру ЛВС через NFS, SMB, FTP или с
помощью других средств, сделайте следующее:
1. Создайте каталог RedHat в дисковом разделе, который не будет исполь
зоваться для установки Red Hat Linux. Другими словами, если есть раз
дел MSDOS, который нужно сохранить без изменений, используйте
именно этот раздел.
2. Создайте подкаталог base каталога RedHat и скопируйте содержимое
каталога RedHat/base с CDROM диска Red'Hat удаленного компьютера.

Ⱦɚɧɧɚɹɜɟɪɫɢɹɤɧɢɝɢɜɵɩɭɳɟɧɚɷɥɟɤɬɪɨɧɧɵɦɢɡɞɚɬɟɥɶɫɬɜɨɦ%RRNVVKRS
ɊɚɫɩɪɨɫɬɪɚɧɟɧɢɟɩɪɨɞɚɠɚɩɟɪɟɡɚɩɢɫɶɞɚɧɧɨɣɤɧɢɝɢɢɥɢɟɟɱɚɫɬɟɣɁȺɉɊȿɓȿɇɕ
Ɉɜɫɟɯɧɚɪɭɲɟɧɢɹɯɩɪɨɫɶɛɚɫɨɨɛɳɚɬɶɩɨɚɞɪɟɫɭpiracy@books-shop.com
14 Глава 2
О : $

3. Создайте другой подкаталог RPMS каталога RedHat и скопируйте в него


содержимое каталога RedHat/RPMS с CDROM диска Red Hat удаленно
го компьютера!
Можно избежать множества проблем, выполнив установку с локального
устройства чтения CDROM, поэтому в оставшейся части главы будем предпо
лагать именно такой способ установки.
Следующий шаг в подготовке к установке Red Hat Linux состоит в опреде
лении, нужен ли загрузочный диск. Вместе с официальным CDROM диском
Red Hat поставляются загрузочный диск и дополнительный диск Red Hat.
Если материнская плата имеет BIOS, поддерживающий загрузку системы с
устройства чтения CDROM, то загрузочный диск не нужен. В этом случае
следует настроить BIOS на загрузку системы с CDROM. После завершения
установки придется изменить этот режим (т.е. загрузку с CDROM), восстано
вив режим запуска с жесткого диска. Большинство новых версий BIOS позво
ляют указать последовательность устройств, с которых компьютер
попытается загрузить систему. Например, в BIOS можно указать последовате
льность CDROM, С, А, означающую, что компьютер попытается загрузить
систему сначала с устройства чтения CDROM, затем с жесткого диска, и на
конец с гибкого диска в накопителе А:. Такая последовательность позволит
не менять параметры BIOS, но для загрузки с жесткого диска придется уда
лить любой диск из устройства чтения CDROM.
С другой стороны, если в качестве дистрибутива использовать CDROM,
нужно сделать загрузочный диск с самого начала.
Создание загрузочного диска в MS Windows 9x/2000
Создание загрузочного диска в операционной системе Windows 9x/2000:
1. Предполагая, что устройству чтения CDROM присвоена буква D: и
смонтирован CDROM диск Red Hat, выполните в окне оболочки
MSDOS:
d:/dosutils/rewrite
2. Утилита rawrite выведет приглашение:
Enter disk image source file name: (Введите имя файла образа диска:)
Please insert a formatted diskette into drive A:
and press the enter key
(Вставьте, пожалуйста, форматированную дискету в устройство А:
и нажмите клавишу enter)
3. Введите \images\boot.img в качестве файла источника образа. Теперь
rawrite выведет следующее приглашение
Enter target diskette drive: (Вставьте в устройство целевую дискету:)
4. Введите букву устройства гибких дисков. Например, если дискета нахо
дится в устройстве А:, введите а: в качестве целевого устройства.
5. Вставьте пустую форматированную дискету в устройство гибких дисков
и нажмите клавишу Enter.
6. Утилита rawrite запишет образ boot.img на дискету, которая станет за
грузочной.

Если для установки Red Hat Linux нужно использовать устройство


CD$ROM на шине PCMCIA, придется создать дополнительную
дискету, выполнив описанные выше операции, но на шаге 3 в
качестве имени файла образа img ввести \image\supp.img

Создание загрузочного диска Linux


Не имея системы MS Windows, для создания загрузочного диска можно ис
пользовать другую систему Linux:

www.books-shop.com
Установка и базовая конфигурация 15

1. Смонтируйте обычным порядком CDROM диск Red Hat. Будем предпо


лагать монтирование в каталоге /mnt/cdrom. Перейдите из текущего
каталога в каталог /mnt/cdrom/images (там хранится образ загрузоч
ного диска).
2. Пусть устройством гибких дисков является /dev/fdO {используемое по
умолчанию устройство) и применяются дискеты 1.44 МБ (3.5 дюйма,
HD). Тогда выполните команду:
dd if=boot.img of=/dev/fdO bs=1440K
Эта команда должна создать необходимый загрузочный диск. Сформиро
вать образ дополнительного диска позволит замена в предыдущей команде
аргумента if=boot.img на if=supp.img. Дополнительная дискета необходима
только для устройств на шине PCMCIA, которые обычно используются в пе
реносных компьютерах.
После создания загрузочного диска (дискеты) можно начинать установку
Red Hat Linux с CDROM диска.

Установка Red Hat Linux


Чтобы загрузить систему с устройства CDROM, вставьте в это устройство
компактдиск Red Hat CD и перезагрузите или включите компьютер, который
должен стать сервером. Если используется загрузочная дискета, вставьте ее в
устройство и перезагрузите или включите компьютер.
После загрузки система выведет начальный экран Red Hat с приглашением:
boot:
Существуют три варианта дальнейших действий. Если нажать клавишу Enter,
то запустится обычная установка или обновление. Если же в приглашении
boot: ввести expert, то стартует установка или обновление в режиме опытно
го пользователя. Тогда программа установки Red Hat не будет автоматически
определять оборудование, предполагая его выбор вручную. Установку в ре
жиме expert рекомендуем специалистам Linux или в том случае, когда возни
кают проблемы с автоматическим определением компонентов оборудования.
Третий вариант предполагает ввод rescue в приглашении boot:. Он предназ
начен для восстановления после неисправности. В таком случае дополнитель
но к стандартной загрузочной дискете понадобится аварийный (rescue) диск.
Аварийный диск создается так же, как загрузочный и дополнительный диски.
Замените имя файла образа на rescue.img и проведите обычный процесс со
здания загрузочного образа (см. выше).

I Если планируется несопровождаемая установка (не требует


' взаимодействия с пользователем), введите в приглашении boot:
команду linux ks. Это укажет программе установки на режим
Kickstart, когда на загрузочном диске находится специальный
конфигурационный файл ks либо на сервере bootp присутствует
файл с именем <IP aдpec_ycтaнaвливaeмoй_мauJины> kickstart.

Во время первой установки Red Hat лучше нажать клавишу Enter, чтобы
запустить процесс обычной установки.
После запуска программа установки выводит следующий начальный эк
ран. Нажмите Enter, чтобы продолжить установку.
Как работает программа установки
Программа установки использует для перемещения по экрану несколько
клавиш — «стрелка вверх», «стрелка вниз», Tab (табуляция), пробел и Enter.
Четыре виртуальные консоли можно выбирать клавишами от Alt+Fl до
Alt+F4. Используемая по умолчанию консоль (Alt+Fl) показывает диалоговые
окна процесса установки, вторая консоль (A11+F2) — приглашение оболочки,
где при необходимости можно вводить команды, третья консоль (Alt+F3)

2 Зак. 436

www.books-shop.com
16 ' 2
— о •• —
выводит сообщения журнала установки, а четвертая консоль (AU+F4) показы
вает сообщения ядра.
Выбор языка, раскладки клавиатуры
и метода установки
После знакомства с начальной страницей приветствия нужно выбрать ис
пользуемый язык (по умолчанию применяется английский  English). Укажи
те нужный язык и нажмите Enter. Следующий экран предлагает выбрать тип
клавиатуры. По умолчанию используется English. Можно нажать Enter или
выбрать иной тип клавиатуры. Затем следует выбрать метод установки: Local
CDROM, NFS Image, hard drive, FTP и 8MB image. Поскольку мы проводим
установку с устройства CDROM, нажмите клавишу Enter, чтобы начать про
цесс установки.
Новая установка или обновление
Экран (см. рис. 2.1) предлагает выбрать новую установку или обновление.
Рис. 2.1.
Выбор новой
установки или
обновления системы

Если проводится первоначальная установка Red Hat Linux, выберите ва


риант Install, а если обновление существующей системы Red Hat, — Upgrade.
Отличие обновления от установки состоит в том, что будут модернизирова
ны только существующее ядро и пакеты программного обеспечения, но не бу
дут добавлены новые пакеты. Предположим, проводится первоначальная
установка ОС, поэтому выберем вариант Install.
Выбор класса установки
Программа установки (см. рис. 2.2) предлагает три варианта (класса) систе
мы: Workstation (рабочая станция), Server (сервер) и Custom (пользователь
ский, иногда называется гибкой установкой).
Для системы Red Hat Linux на персональной рабочей станции выберите
класс Workstation. Этот вариант позволит программе установки для создания
предварительной конфигурации системы удалить все существующие разделы
Linux и использовать все дисковое пространство без деления на разделы. Си
стема класса Workstation будет иметь небольшой раздел свопинга (32 МБ) и
раздел в 16 МБ, называемый /boot, для ядра и родственных файлов. Остав
шаяся часть дискового пространства будет использоваться для создания одно
го раздела /(root, корневого). Обычно для установки рабочей станции нужно
не менее 600 МБ дискового пространства.
Второй вариант — это класс Server, предназначенный для создания сервер
ных систем. Будут выделены 64 МБ на раздел свопинга (подкачки), 16 МБ

www.books-shop.com
Установка и базовая конфигурация 17
V/

Выбор класса
установки

разделу /boot для ядра и родственных файлов, 256 МБ разделу /(root),


512 МБ (или более) раздел /usr для хранения пользовательских приложений
и утилит, 512 МБ (или более) разделу /home для домашних каталогов пользо
вателей и 256 МБ разделу /var для системных журналов и очередей. Всего
для системы этого класса потребуется приблизительно 1.6 ГБ дискового про
странства.
Третий вариант, класс Custom, позволяет выбрать произвольное разбие
ние на разделы с помощью специальной утилиты, поэтому является наиболее
гибким. Воспользуемся именно этим вариантом.
После указания класса Custom программа установки автоматически прове
рит наличие в системе адаптера SCSI. Если он будет обнаружен, появится со
общение, содержащее имя производителя адаптера. Например, на рис. 2.3
показано сообщение о контроллере NCR 53С8хх PCI SCSI.

Автоматическое
определение
адаптера(ов) SCSI

Если не удастся автоматически определить адаптеры SCSI, то программа


установки выведет экран, показанный на рис. 2.4.

www.books-shop.com
18 Глава 2
О

Выбор адаптера
SCSI вручную

Либо в системе нет адаптера SCSI, либо адаптер невозможно опознать в


режиме автоматического определения. В последнем случае щелкните Yes
(Да), чтобы вручную выбрать адаптер SCSI в списке. Если же в системе нет
адаптера SCSI, укажите No (Нет), чтобы перейти к следующему этапу установки.

Деление дисков на разделы


Разбиение (деление на разделы) дисков является очень важным шагом,
поскольку нельзя изменить разделы диска без потери данных. Поэтому будь
те очень внимательны в этой операции. Программа установки выведет следу
ющий экран (см. рис. 2.5).

Выбор утилиты
разбиения дисков

Здесь нужно выбрать утилиту разбиения диска: Disk Druid или программу
fdisk.
Утилита разбиения Disk Druid проще для пользователя, чем программа
fdisk, поэтому рекомендуем ее начинающим. После выбора в меню этой ути
литы, на экран выводятся сведения о текущих разделах дисков. На рис. 2.6 по
казан пример структуры разделов дисков моей системы.

www.books-shop.com
Установка и базовая конфигурация • . 19
__ _ ^j>

Просмотр
существующих
разделов дисков

Если на диске есть разделы старой операционной системы, например


MS Windows 9x/NT, можно удалить их либо использовать свободные разде
лы, чтобы создать систему Red Hat с двухпутевой загрузкой. Наша книга по
священа серверной ОС, поэтому будем считать, что на диске присутствуют
только разделы Linux. На рис. 2.6 видно, что в моей системе существуют два
диска — hda и sda. Red Hat Linux использует hdx (где х — буква из диапазона
az) для дисков IDE и sdx (где х — буква из диапазона az) для дисков SCSI. Так
как наша система имеет жесткий диск IDE, он назван hda, а диск SCSI назван
sda. Если в системе два диска IDE, они получат имена hda и hdb.
Red Hat Linux позволяет создать разделы на каждом диске, причем каждое
разбиение именуется с помощью схемы hd[az][N] для дисков IDE и схемы
sd[az][N] для дисков SCSI, где N— номер раздела. Например, hdal является
разделом 1 на первом диске IDE (hda), a sdal является первым разделом на
первом диске SCSI. Нужно заранее выбрать схему разбиения на разделы. При
ведем несколько рекомендаций.
Нужен раздел / (корневой) для хранения ядра и связанных с ним файлов.
Он не должен быть слишком большим (достаточно 256 МБ, согласно рассмот
ренной ранее спецификации класса сервера Red Hat). Проверьте, что для
корневого раздела выбран тип Linux native.
Указав размер раздела /, следует определить размер раздела /usr. Имен
но здесь будут располагаться все пользовательские приложения, поэтому убе
дитесь, что раздел достаточно большой. Раздел /usr должен занимать как
минимум 512 МБ. Проверьте, что для него указан тип Linux native.
Затем необходимо создать раздел /home для домашних каталогов пользо
вателей. Если в системе много пользователей, нужно решить, сколько про
странства придется предоставить каждому пользователю. Умножаем его на
общее число ожидаемых пользователей и создаем подходящий раздел. Разре
шено ограничить дисковое пространство каждого пользователя за счет уста
новки дисковых квот (см. главу 7). Кроме того, в отличие от / или /usr для
домашнего раздела пользователей можно выбрать произвольное название.
Например, если формируется Webсервер, где необходим раздел с названием
/www для всех пользовательских Webузлов, в этот же раздел можно помес
тить домашние каталоги пользователей. Другими словами, разрешено произ
вольное именование раздела /home. Если указано иное имя домашнего
раздела пользователей (не /home), убедитесь, что изменены необходимые
конфигурационные файлы для useradd, userdel, usermod и связанных с этими
утилитами программ (см. главу 7). Для раздела домашних каталогов должен
быть указан тип Linux native.

www.books-shop.com
20 Глава 2

Теперь следует создать раздел свопинга (тип — Linux swap) так, чтобы раз
мер раздела не превышал удвоенного размера вашей физической оператив
ной памяти или 128 МБ (нужно выбрать наименьшее из этих двух значений).
Например, если в системе 32 МБ оперативной памяти, подойдет раздел сво
пинга размером 64 МБ.
В оставшихся свободными дисках или разделах можно добавить дополни
тельные разделы по собственному усмотрению. На рис. 2.7 показаны разделы
моей двухдисковой системы.

Пример таблицы
разделов

Создав разделы и назначив точки монтирования, щелкните ОК, чтобы пе


рейти к следующему этапу установки.
Я не рекомендую программу fdisk для начинающих, но если пользоваться
этой утилитой, экран сведений о доступных жестких дисках системы будет
иной (см. рис. 2.8).

Выбор жесткого
диска для
дальнейшего
разбиения на
разделы

На экране можно выбрать жесткий диск, который будет разбит на разде


лы программой fdisk. Указав жесткий диск и щелкнув кнопку Edit, мы увидим
командное приглашение утилиты fdisk (см. рис. 2.9).

www.books-shop.com
Установка и базовая конфигурация 21

Рис. 2.9.
Разбиение дисков
утилитой (disk

Программа fdisk в каждый момент времени работает только с одним дис<


ком. Имея несовершенный интерфейс, fdisk все же обладает большей гибко<
стью, чем Disk Druid. Мы не рекомендуем fdisk начинающим пользователям,
но следует познакомится с возможностями этой утилиты.. Поскольку нашей
основной целью является установка ОС, пока можно пропустить оставшуюся
часть раздела, посвященную работе с fdisk.
На рис. 2.9 видно, что fdisk имеет простой интерфейс командной строки.
Эта утилита позволяет разбивать диски и после установки Red Hat Linux. За<
пуск fdisk из командной строки:
fdisk <жесткий_диск>
Например:
fdisk /dev/sda
Мы указали в утилите fdisk, что собираемся работать с разделами первого
диска SCSI. Утилита fdisk выведет свое приглашение ввода команд «Command
(m for help):», йричем команда т позволяет получить справочный экран ути<
литы:
Command action
a toggle a bootable flag (переключить флаг загрузки)
b edit bsd disklabel (редактировать метку bsd)
с toggle the dos compatibility flag
(переключить флаг совместимости с DOS)
d delete a partition (удалить раздел)
1 list known partition types (вывести известные типы разделов)
m print this menu (вывести это меню)
n add a new partition (добавить новый раздел)
о create a new empty DOS partition table
(создать новую пустую таблицу разделов DOS)
р print the partition table (вывести таблицу разделов)
q quit without saving changes
(завершить работу без сохранения изменений)
t change a partition's system id
(изменить системный идентификатор раздела)
u change display/entry units (изменить единицы изображения/ввода)
v verify the .partition table (проверить таблицу разделов)
w write table to disk and exit (записать таблицу на диск и выйти)

www.books-shop.com
22 Глава 2

х extra functionality (experts only)


(дополнительные возможности $ только для профессионалов)
Для ознакомления с существующими разделами выбранного диска введите
команду р, которая покажет результат в табличном формате:
Disk /dev/sda: 33 heads, 63 sectors, 1014 cylinders
Units = cylinders of 2079 * 512 bytes
Device Boot Start End Blocks Id System
/dev/sda1 1 505 524916 83 Linux native
/dev/sda2 506 1014 529105+ 5 Extended
/dev/sda5 506 886 396018 83 Linux native
/dev/sda6 887 1011 129906 82 Linux swap
На диске /dev/sda создано четыре раздела, причем первый раздел
/dev/sdal начинается с блока 1 и заканчивается блоком 505. Каждый блок
имеет размер 1 024 байта (1 КБ). Поэтому первый раздел состоит из
524 916 блоков (524 916 КБ) или примерно 512 МБ.
Для последовательного удаления всех существующих разделов используй<
те команду d и вводите номера удаляемых разделов. После устранения одного
или нескольких разделов создадим новые разделы.
Сначала введите команду п, чтобы добавить новый раздел:
Command (m for help): n
Command action
e extended
p primary partition. (1$4)
Существуют два варианта дальнейших действий: создать дополнительный
раздел (extended) или первичный раздел (primary). Дополнительные разделы
нужны только тогда, когда на диске должно быть более четырех разделов.
Для запуска Linux нам нужны только разделы /, /usr, /home и раздел сво<
пинга, поэтому дополнительные не потребуются. Создайте первичный раз<
дел, указав в приглашении команду р. Следующее приглашение запрашивает
ввод номера раздела:
Partition number (1$4): 1
Введите 1 для первого раздела, 2 — для второго и т.д. Следующее пригла<
шение предлагает указать номер начального блока. Показанный в скобках
диапазон определяет допустимые значения в блоках. Создавая первый раз<
дел, выберите 1 в качестве начального блока:
First cylinder (1$1014): 1 "'
Чтобы создать раздел объемом 512 МБ, можете указать его размер в бай<
тах, килобайтах или мегабайтах. Проще вводить размер в мегабайтах, поэто<
му для последнего цилиндра (last cylinder) введем +512М:
Last cylinder or +size or +sizeM or +sizeK ([1] $ 1014): +512M
Для проверки создания раздела используйте команду р, которая покажет
сведения о разделе:
i
Disk /dev/sda: 33 heads, 63 sectors, 1014 cylinders
Units = cylinders of 2079 * 512 bytes
Device Boot Start End Blocks Id System
/dev/sda1 1 505 524916 83 Linux native
Видно, что появился первый раздел с указанными нами параметрами. По
умолчанию используется тип раздела Linux native. Изменить тип раздела по<
зволит команда t, переключающая флаг системного идентификатора раздела.
Например, установить флаг системного идентификатора раздела в значение
Linux swap позволит команда:

www.books-shop.com
Установка и базовая конфигурация 23

Command (m for help): t


Partition number (14): 1
Hex code (type L to list codes): 82
Changed system type of partition 1 to 82 (Linux swap)
Command (m for help): p
Disk /dev/sda: 33 heads, 63 sectors, 1014 cylinders
Units = cylinders of 2079 * 512 bytes
Device Boot Start End Blocks Id System
/dev/sda1 1 505 524916 82 Linux swap
Сначала введена команда t, чтобы переключить системный идентифика<
тор раздела, затем указан номер раздела и введен код 82, специфицирующий
тип раздела свопинга. Список всех кодов доступных типов разделов выводит<
ся командой L.
Обратите внимание, что создание разделов утилитой fdisk предполагает
установку загружаемого раздела Linux native. Например, чтобы превратить в
загружаемый раздел /dev/sdal, потребуется переключить флаг загрузки.
В командном приглашении введем:
Command (m for help): a
Partition number (1$6): 1
Теперь выведенная командой p таблица существующих разделов примет вид:
Disk /dev/sda: 33 heads, 63 sectors, 1014 cylinders
Units = cylinders of 2079 * 512 bytes
Device Boot Start End Blocks Id System
/dev/sdal * 1 505 524916 83 Linux native
/dev/sda2 506 1014 529105+ 5 Extended
/dev/sda5 506 886 396018 83 Linux native
/dev/sda6 887 1011 129906 82 Linux swap
Раздел /dev/sdal имеет «*» в столбце Boot, т.е. является загрузочным.
Активизация раздела свопинга
На предыдущем этапе с помощью Disk Druid или fdisk создан раздел сво<
пинга, который необходимо активировать до продолжения операций по уста<
новке ОС. Программа установки выведет экран (см. рис. 2.10).

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

Ⱦɚɧɧɚɹɜɟɪɫɢɹɤɧɢɝɢɜɵɩɭɳɟɧɚɷɥɟɤɬɪɨɧɧɵɦɢɡɞɚɬɟɥɶɫɬɜɨɦ%RRNVVKRS
ɊɚɫɩɪɨɫɬɪɚɧɟɧɢɟɩɪɨɞɚɠɚɩɟɪɟɡɚɩɢɫɶɞɚɧɧɨɣɤɧɢɝɢɢɥɢɟɟɱɚɫɬɟɣɁȺɉɊȿɓȿɇɕ
Ɉɜɫɟɯɧɚɪɭɲɟɧɢɹɯɩɪɨɫɶɛɚɫɨɨɛɳɚɬɶɩɨɚɞɪɟɫɭpiracy@books-shop.com
24 Глава 2

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


местным, если в системе только один раздел свопинга. Однако раздел сво
пинга должен быть форматирован, причем старые данные будут потеряны.
Ни одна инсталляционная программа не начнет форматирования без под
тверждения пользователем. Если захочется выявить плохие (сбойные) бло
ки, выберите соответствующую командную строку, воспользовавшись
клавишей «пробел». Выбранный ранее раздел свопинга будет отформатиро
ван и активирован, поскольку это необходимо для продолжения установки.

Форматирование разделов
На следующем этапе программа установки запросит подтверждение фор
матирования всех доступных разделов, кроме раздела свопинга. На рис. 2.11
для форматирования доступен только один раздел.
Рис. 2.11.
Выбор
форматируемых
разделов

Помните, что каждый форматируемый раздел теряет все существующие


данные. Если необходима проверка жесткого диска на плохие (сбойные) сек
торы, установите флажок в строке «Check for bad blocks during format», а за
тем щелкните кнопку ОК.
Время на форматирование зависит от размера жесткого диска. Пока фор
матируется большой (810 ГБ) диск, можно выпить чашечку кофе.

Выбор устанавливаемого программного обеспечения


Завершив форматирование разделов диска, программа установки предло
жит выбрать пакеты (см. рис. 2.12).
Устанавливая сервер, следует выбрать только необходимые пакеты — чем
больше программ установлено на сервере, тем больше появляется лазеек в
системе защиты. Мы рекомендуем установить только те компоненты, кото
рые действительно необходимы. Позднее всегда можно добавить или удалить
компоненты командой rpm или утилитой glint среды X Window (см. главу 23).

I Серверу не нужна система X Window, поэтому компоненты


программного обеспечения X Window устанавливаются только из
любопытства, чтобы посмотреть на внешний вид и работу этой
графической системы. Пока мы не будем устанавливать X Window,
но эту систему можно добавить позже (см. главу 22).

Установкой флажка Select individual packages осуществляется выбор отде


льных пакетов в пределах определенной категории компонентов. Если затем
щелкнуть кнопку ОК, появится экран (см. рис. 2.13).

www.books-shop.com
Установка и базовая конфигурация 2S

Рис. 2.12.
Выбор
устанавливаемых
компонентов

Рис. 2.13.
Выбор
устанавливаемых
пакетов

Чтобы выбрать пакеты отдельной категории компонентов, например Ne


tworking/Daemons (Работа в сети/Демоны), укажите эту категорию и щелк
ните кнопку Edit — появится диалоговое окно Select Packages (Выбор
пакетов), показанное на рис. 2.13. Выберите в нем нужные компоненты. Ука
зав все устанавливаемые пакеты и запретив установку ненужных пакетов,
щелкните кнопку ОК. Программа установки выведет экран о журнале регист
рации (см. рис. 2.14).
Полный журнал установки будет создан в файле /tmp/install.log. Щелкни
те кнопку ОК, чтобы продолжить установку. Программа установки покажет
экран состояния (см. рис. 2.15).
Если недостаточно сведений на этом экране, воспользуйтесь клавиатурны
ми комбинациями Alt+Fl — Alt+F4, чтобы увидеть действия программы уста
новки, переключаясь между виртуальными консолями. Завершив установку
пакетов, программа попробует найти в системе мышь.

www.books-shop.com
26 Глава 2

Рис. 2.14.
Запуск процесса
установки

Рис. 2.15.
Выполнение
установки

Выбор мыши
Если программа установки автоматически определит мышь, появится диа
логовое окно с информацией о порте мыши. Если программа не сможет это
го сделать, будет выведено иное окно (см. рис. 2.16), предлагающее выбрать
мышь вручную.
Установка пакетов X Window предполагает конфигурирование системы X,
по мы пока не будем обсуждать эти операции и сразу перейдем к конфигури
рованию сети.
Конфигурирование сети TCP/IP
Конфигурация сети по сути дела определяет основные параметры стека
TCP/IP. Экран конфигурирования сети показан на рис. 2.17.
Мы проводим установку сервера, поэтому щелкните Yes (Да). Придется
выбрать способ, которым конфигурируются IPадреса сервера (см. рис. 2.18).
Варианты конфигурирования ВООТР и DHCP подходят для установки ра
бочей станции, которая получает IPадрес от сервера ВООТР или DHCP

www.books-shop.com
Установка и базовая конфигурация 27
О

Рис. 2.16.
Выбор мыши

Рис. 2.17.
Конфигурирование
сети

локальной сети. Для сервера пригоден только вариант Static IP address (Ста
тический IPадрес). Выберите этот вариант и перейдите на следующий экран
(см. рис. 2.19).
Нужно ввести IPадрес сервера и маску подсети, используемый по умолча
нию шлюз и первичный сервер имен. Если сервер предназначен для собст
венной локальной сети, то значения этих параметров должны быть
известны. Если же создается локальный сервер сети Интернетпровайдера,
то все сведения об IPадресах нужно получить у провайдера. Рекомендации по
выбору параметров собственной локальной сети приведены в главе 9, посвя
щенной созданию сетей IP.
Используемый по умолчанию шлюз обычно является маршрутизатором,
связывающим локальную сеть с Интернетом. IPадрес используемого по умол
чанию1 шлюза должен принадлежать этой локальной сети. Другими словами,
если сервер имеет IPадрес 206.171.50.50, то шлюз по умолчанию должен
иметь адрес 206.171.50.х, где х может быть любым подходящим числом. Пер
вичный сервер имен может быть где угодно, но лучше если он не слишком

www.books-shop.com
28 Глава 2

Рис. 2.18.
Выбор варианта
конфигурирования
IP$адреса

Рис. 2.19.
Конфигурирование
параметров TCP/IP

удален в сети от устанавливаемого нами сервера. Для реализации собствен


ной службы DNS можно задействовать любой сервер имен Интернета, но это
не очень вежливо и, вероятно, незаконно. Поэтому убедитесь, что пользуе
тесь сервером DNS, на который есть полномочия. Если планируется устано
вить в системе собственный сервер DNS, можно использовать тот же самый
IPадрес.
После экрана ввода IPадресов появится следующий экран (см. рис. 2.20),
где предстоит указать имя домена, имя хоста, IPадрес вторичного сервера
имен (необязательно) и IPадрес третичного сервера имен (необязательно).
В качестве имени домена используется имя домена Интернета нашей
сети. Если сервер принадлежит частной локальной сети, которая не соедине
на с Интернетом, разрешено использовать произвольное имя домена. Обыч
но им становится название организации. Например, если организация
называется Form Track, то хорошим именем домена станет formtrack.com.
Однако для использования системы в Интернете следует выбрать имя реаль
ного домена. Имя хоста может быть произвольным, если только оно не

www.books-shop.com
Установка и базовая конфигурация 29

Настройка
параметров DNS и
хоста

совпадает с именем другого хоста в этой же сети. IPадреса для вторичного и


третичного серверов имен не требуются, но их наличие улучшает поддержку
DNS устанавливаемого сервера.

Конфигурирование часового пояса


Приступим к конфигурированию часового пояса (см. рис. 2.21).

Конфигурирование
часового пояса

Если аппаратные часы CMOS настроены на GMT (Greenwich Mean Time 


Среднее время по Гринвичу), укажите пункт «Hardware clock set to GMT». За
тем выберите подходящий часовой пояс, в котором будет располагаться сер
вер.
Следующий шаг состоит в конфигурировании сетевых служб и демонов,
которые будет выполнять сервер.

Конфигурирование действующих служб или демонов


Экран выбора автоматически запускаемых служб и демонов показан на
рис. 2.22.

www.books-shop.com
30 Глава 2

Рис. 2.22.
Выбор запускаемых
служб или демонов

Укажите только действительно необходимые службы и демоны. Всегда


можно добавить новые службы, используя /etc/re.d/.
Следующий этап установки состоит в конфигурировании принтеров.
Конфигурирование принтеров
Диалоговое окно (см. рис. 2.23) предлагает сконфигурировать принтер.
Если в системе нет такого устройства, выберите просто No (Нет) и пропусти
те этот раздел книги. Однако если компьютер станет сервером печати или
вам нужен удаленный принтер, придется заняться конфигурированием.
Рис. 2.23.
Конфигурирование
принтера

В начале конфигурирования принтера предстоит выбрать локальное или


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

www.books-shop.com
Установка и базовая конфигурация 34

Рис 2.24.
Выбор типа
соединения принтера

Рис. 2.25.
Выбор информации
об очереди печати
и спулинге

Нужно выбрать тип принтера из списка поддерживаемых устройств. Ука


жите наиболее подходящие параметры команды make и модель из списка
(см. рис. 2.26), а затем перейдите в следующее диалоговое окно.
Если указан принтер PostScript, потребуется дополнительная информа
ция: размер бумаги, разрешение и т.д. (см. рис. 2.27).
На экране выводится итоговая информация об указанных ранее парамет
рах принтера (см. рис. 2 28).
Обнаружив ошибку, воспользуйтесь кнопкой Back, чтобы вернуться назад
и исправить проблему. Убедившись, что указана правильная информация о
принтере, можно перейти к установке пароля root.
Задание пароля root
Учетная запись root используется по умолчанию суперпользователем сис
темы Red Hat Linux. Она необходима для регистрации в новой системе. Диа
логовое окно ввода пароля root показано на рис. 2.29.

www.books-shop.com
32 Глава 2

Рис. 2.26.
Выбор параметров и
модели принтера

Рис. 2.27.
Выбор конфигурации
принтера

Выберите пароль учетной записи суперпользователя. Этот пароль вводит


ся дважды, он не будет виден на экране, что связано с защитой системы. Поэ
тому убедитесь, что твердо запомнили выбранный пароль! Нужно выбрать
«хороший» пароль, который трудно угадать или взломать. Никогда не поль
зуйтесь словами из словаря — в пароле должен быть один или несколько сим
волов пунктуации и цифр. Лучше длинный пароль (будет достаточно от пяти
до восьми символов).
На следующем этапе установки формируется пользовательский загрузоч
ный диск.

Создание загрузочного диска


Экран (см. рис. 2.30) предлагает создать специальный загрузочный диск.
Это обязательная процедура. Загрузочный диск позволит запустить систе
му даже при неисправности дискового загрузчика (например, LILO). Тут не
чего думать — выберите Yes (Да) и вставьте гибкий диск в устройство
/dev/fdO (см. рис. 2.31).

www.books-shop.com
Установка и базовая конфигурация 33

Рис. 2.28. I
Проверка
параметров принтера

Рис. 2.29.
Ввод пароля
пользователя root

На чистую дискету записывается образ загрузочного диска. Созданная дис


кета используется совместно с ранее записанным аварийным диском (файл
образа rescue.img). Если под рукой нет чистой дискеты, можно отказаться от
создания загрузочного диска, но впоследствии сделать это при первой воз
можности с помощью программы mkbootdisk.
Затем следует выбрать место для установки LILO (Linux Install boot Loa
der — Начальный загрузчик установки Linux).
Выбор варианта установки LILO
Экран выбора (см. рис. 2.32) позволяет установить начальный загрузчик
Red Hat Linux либо в загрузочную мастерзапись (MBR — master boor record),
либо в первый сектор загрузочного раздела. Если на компьютере не установ
лены другие операционные системы, выберите MBR. Если уже есть другая
операционная система и вы хотите продолжить ее использование, укажите
первый сектор загрузочного раздела.

Ⱦɚɧɧɚɹɜɟɪɫɢɹɤɧɢɝɢɜɵɩɭɳɟɧɚɷɥɟɤɬɪɨɧɧɵɦɢɡɞɚɬɟɥɶɫɬɜɨɦ%RRNVVKRS
ɊɚɫɩɪɨɫɬɪɚɧɟɧɢɟɩɪɨɞɚɠɚɩɟɪɟɡɚɩɢɫɶɞɚɧɧɨɣɤɧɢɝɢɢɥɢɟɟɱɚɫɬɟɣɁȺɉɊȿɓȿɇɕ
Ɉɜɫɟɯɧɚɪɭɲɟɧɢɹɯɩɪɨɫɶɛɚɫɨɨɛɳɚɬɶɩɨɚɞɪɟɫɭpiracy@books-shop.com
34 Глава 2

Рис. 2.30.
Предложение о
создании
пользовательского
загрузочного диска

Рис. 2.31.
Создание
специального
загрузочного диска

Размещение LILO в MBR полностью передает LILO управление процес


сом начальной загрузки компьютера. Если нужна многопутевая загрузка со
вместно с другой операционной системой, то скорее всего эта ОС уже
установила собственный загрузчик в MBR. Поэтому будьте внимательны во
время выбора места для LILO.
Дальше можно предоставить ядру дополнительную информацию о началь
ной загрузке (см. рис. 2.33).
В большинстве случаев не требуется никакой дополнительной информа
ции, поэтому достаточно указать загрузочные разделы, которыми будет
управлять LILO. Диалоговое окно (см. рис. 2.34) покажет все разделы систе
мы (за исключением раздела свопинга), пригодные для загрузки операцион
ных систем (включая Linux).
Используемый по умолчанию загрузочный раздел Red Hat Linux отмечен
символом «*». Этому разделу присвоена используемая по умолчанию метка за
грузки «linux». Другими словами, стартовавший во время начальной загрузки
LILO позволит ввести linux в приглашении boot:, чтобы загрузить Red Hat

www.books-shop.com
Установка и базовая конфигурация 35

Рис. 2.32.
Выбор места
размещения LJLO

Рис. 2.33.
Добавление
конфигурационных
параметров ядра

Linux. Если на компьютере есть другая операционная система, можно будет


указать иной раздел и создать для него метку загрузки. Выберите раздел и
щелкните кнопку Edit, чтобы перейти в следующее диалоговое окно
(см. рис. 2.35).
Введите подходящее имя метки загрузки, позволяющее легко идентифи
цировать операционную систему. Закончив редактирование меток загрузки,
щелкните ОК. Программа установки завершит свою работу выводом послед
него диалогового окна (см. рис. 2.36).
Мы готовы к первому запуску системы. Удалите из устройств компьютера
диск CDROM и дискеты, а затем щелкните ОК, чтобы перезагрузить систему.

Первый запуск Red Hat Linux


Произойдет перезагрузка системы, а на экране появится приглашение
boot:. Можно ввести linux либо нажать клавишу Enter, чтобы первый раз за
пустить Red Hat Linux. Если ничего не предпринимать, то LILO немного

www.books-shop.com
36 Глава 2

Рис. 2.34.
Конфигурирование
загрузочных
разделов

Рис. 2.35.
Конфигурирование
меток загрузки ULO

подождет и запустит операционную систему по умолчанию — старую добрую


Linux!
Во время загрузки ядра Linux на экран выводится разнообразная инфор
мация. Не отчаивайтесь, что она быстро исчезает с экрана. Скоро мы опять
получим к ней доступ. Будьте терпеливы и позвольте системе вывести консо
льное приглашение регистрации.
Зарегистрируйтесь в качестве пользователя «root», используя пароль, ука
занный во время установки ОС. Регистрация в системе должна пройти успеш
но. Поздравляю! Вы только что стали суперпользователем своего
собственного сервера Red Hat Linux. Система Linux ожидает ваших команд.
Чтобы увидеть пролетевшую мимо информацию о загрузке системы, вы
полните команду dmesg, которая покажет все сообщения процесса загрузки.
Если экран прокручивается слишком быстро, введите dmesg | more, чтобы
перейти в режим постраничного просмотра.

www.books-shop.com
Установка и базовая конфигурация 37

Рис. 2.36.
Сообщение о
завершении
установки

Linux позволяет (и этого нет в системах Windows) прокручивать


назад историю (журнал) консоли. Shift+PageUp еще раз покажет то,
что промелькнуло на экране. Однако содержимое журнала теряется
при переходе на другую виртуальную консоль. Плохо, что окно
регистрации «очищает экран», удаляя последние строки сообщений
о загрузке. Рекомендуем изменить /etc/inittab, чтобы воздержаться
от выполнения getty на первой виртуальной консоли (см. главу 3).

Сейчас наиболее подходящее время, чтобы убедиться в правильности вы


явления оборудования ядром ОС (ознакомьтесь с результатом команды
dmesg). Теперь мы полностью готовы к преобразованию нового сервера Red
Hat Linux в полнофункциональный сервер Интернета.

www.books-shop.com
www.books-shop.com
Часть 2

Работа
суперпользователя

www.books-shop.com
www.books-shop.com
Глава 3
Процессы начальной загрузки
и выключения системы

В этой главе:
Как загружается Linux
Как конфигурировать ink
Как остановить Linux

п режде всего мне понравился в Linux процесс начальной загрузки. Я устал


от ожидания, пока мои компьютеры под управлением Windows пройдут через
все разноцветные фирменные экраны, не говоря мне при этом ничего о том,
что происходит. Когда компьютер Windows отказывается загружаться, вы
должны надевать шляпу Шерлока Холмса и исследовать случай с самого нача
ла. Однако когда отказывается загружаться компьютер Linux, вы обычно зна
ете, где он застрял, так как операционная система изображает на консоли
практически все задачи, которые она выполняет при загрузке. То же самое
справедливо для процесса выключения. В главе 2 вы узнали о том, как ядро Li
nux загружается с дискеты или с жесткого диска. Здесь вы узнаете о том, как
настроить процессы начальной загрузки и выключения.
Ядро Red Hat Linux (т.е. базовая часть операционной системы) обычно
хранится в сжатом файле. Когда ядро запускается программой начальной за
грузки, такой как LILO, оно распаковывает себя, инициализирует устройст
во отображения и запускает проверку другого оборудования,
присоединенного к компьютеру. Когда оно находит жесткие диски, диске
ты, сетевые адаптеры и т.д., оно загружает соответствующие модули драйве
ров устройств. Во время этого процесса оно выводит текстовые сообщения

www.books-shop.com
42 Глава 3

на экране консоли. Листинг 3.1 — сокращенная версия того, что система Red
Hat 5.3 показывает во время начальной загрузки.
Листинг 3.1. Консольные сообщения во время процесса начальной загрузки
Memory: sized by int13 Oe801h
Console: 16 point font, 400 scans
Console: colour VGA+ 80x25, 1 virtual console (max 63)
Probing PCI hardware.
Calibrating delay loop., ok $ 53.04 BogoMIPS
Memory: 127584k/131072k available (748 kernel code, 384k reserved,
2164k data)
Swansea University Computer Society NETS.035 for Linux 2.0
NETS: Unix domain sockets 0.13 for Linux NETS.035.
Swansea University Computer Society TCP/IP for NETS.034.
IP Protocols: IGMP, ICMP, UDP, TCP
Linux IP multicast router 0.07.
VFS: Diskquotas version dquot_5.6.0 initialized'M
Checking 386/387 coupling... Ok, fpu using exception 16 error reporting.
Checking 'hit' instruction ... Ok.
Intel Pentium with FO OF bug  workaround enabled.
alias mapping IDT readonly done
Linux version 2.0.36 (rootfporky.redhat.com) (gcc version 2.7.2.3)
#1 Tue Oct 13 22:17:11 EOT 1998
Starting kswapd v 1.4.2.2
Serial driver version 4.13 with no serial options enabled
ttyOO at Ox03f8 (irq = 4) is a 16550A
Real Time Clock Driver v1.09
Ramdisk driver initialized: 16 ramdisks of 4096K size
ide: i82371 PIIX (Triton) on PCI bus 0 function 57
ideO: BMDMA at OxfOOOOxf007
idel: BMDMA at OxfOOSOxfOOf
hda: IBMDTTA351010, 9671MB w/466kB Cache, CHS=1232/255/63, DMA
hdc: CD920E, ATAPI CDROM drive
ideO at Ox1fOOx1f7, Ox3f6 on irq 14
idel at 0x1700x177,0x376 on irq 15
Floppy drive(s): fdO is 1.44M
FDC 0 is a post1991 82077
md driver 0.36.3 MAX_MD_DEV=4, MAX_REAL=8
scsi: 0 hosts,
scsi: detected total.
Partition check:
hda: hdal hda2 < hda5 hda6 hda7 >
RAMDISK: Compressed image found at block 0
VFS: Mounted root (ext2 filesystem).
ncr53c8xx: at PCI bus 0, device 9, function 0
ncr53c8xx: 53c825 detected
scsiO : ncr53c8xx  revision 2.5f.1
Detected scsi disk sda ad scsiO, channel 0, id 0, lun 0
ncr53c8250<0,0>: FAST5 SCSI 5.0 MB/s (200 ns, offset 8)
SCSI device sda: hdwr sector= 512 bytes. Sectors= 2109840 [1030 MB]
[1.0 GB]
sda: sdal sda2 < sda5 sda6 >
VFS: Mounted root (ext2 filesystem) readonly.
Trying to unmount old root ... okay
Adding Swap: 129900k swapspace (priority  1)

www.books-shop.com
Процессы начальной загрузки и выключения системы 43

I Если вы находитесь у консоли при загрузке системы, можете


' нажать Shift+PageUp для прокрутки изображения назад и
просмотреть сообщения загрузки. Можно также просмотреть их в
любое время с помощью выполнения программы dmesg. Файлы
/var/log/messages также будут иметь множество сообщений
загрузки.

В этом месте ядро монтирует корневую файловую систему (/) только для
чтения и выполняет проверку файловой системы. Если оно найдет, что все в
порядке, то корневая файловая система будет обычно смонтирована в режи
ме чтения/записи.

1 Если возникает проблема и ядро не может смонтировать корневой


' раздел или найдет в нем серьезные проблемы, ядро перейдет в
режим паники (panic) и система будет остановлена. Если диск
повреждается по каким$то причинам, ядро может предоставить
возможность выполнить программу проверки файловой системы,
такую как fsck.ext2 из оболочки с ограниченными возможностями.

Когда корневая файловая система смонтирована, ядро запускает програм


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

Конфигурирование init
Как ранее упоминалось, init является самой первой программой, которую
выполняет ядро в конце последовательности загрузки. Программа init доступ
на в двух вариантах — init из системы UNIX System V и init из BSD. Дистрибу
тив Red Hat поставляется с init из системы UNIX System V. Различие между
двумя вариантами в том, что init из System V использует уровни выполнения
(run levels, обсуждаемые ниже), a init из BSD не использует. Следовательно,
рассмотрение init будет ограничено версией init из системы UNIX System V.
Так как init является первой программой, выполняемой ядром, ее иденти
фикатор процесса (PID) равен 1. Когда она запускается, init считывает кон
фигурационный файл, называемый /etc/inittab. Файл /etc/inittab в
типичной системе Red Hat Linux показан на листинге 3.2.
Листинг 3.2. Типичный файл /etc/inittab
п
tt inittab  Этот файл описывает, как процесс INIT должен
# настраивать систему для определенного уровня выполнения.
#
В Автор: Miguel van Smoorenburg,
# <miquels@drinkel.nl.mugnet.org>
ft
tf Модифицирована для RHS Linux Марком Ивингом и Денни Барнсом

# Используемые по умолчанию уровни выполнения. RRS использует


# следующие уровни выполнения:
Я 0  остановка (НЕ задавайте это значение для init по умолчанию)
# 1  Режим одного пользователя
и 2  Многопользовательский, без NFS (To же самое, что и 3,
п если у вас нет сети)
# 3  Полный многопользовательский режим
# 4  не используется

Ⱦɚɧɧɚɹɜɟɪɫɢɹɤɧɢɝɢɜɵɩɭɳɟɧɚɷɥɟɤɬɪɨɧɧɵɦɢɡɞɚɬɟɥɶɫɬɜɨɦ%RRNVVKRS
ɊɚɫɩɪɨɫɬɪɚɧɟɧɢɟɩɪɨɞɚɠɚɩɟɪɟɡɚɩɢɫɶɞɚɧɧɨɣɤɧɢɝɢɢɥɢɟɟɱɚɫɬɟɣɁȺɉɊȿɓȿɇɕ
Ɉɜɫɟɯɧɚɪɭɲɟɧɢɹɯɩɪɨɫɶɛɚɫɨɨɛɳɚɬɶɩɨɚɞɪɟɫɭpiracy@books-shop.com
44 Глава 3

и 5  Х11
п 6  перезагрузка (НЕ задавайте это значение для init по умолчанию)
#
id:3:initdefault:
п Инициализация системы,
si: :sysinit:/etc/rc.d/rc.sysinit
10:0:wait:/etc/rc.d/rc 0
11:1:wait:/etc/rc.d/rc 1
12:2:wait:/etc/rc.d/rc 2
13:3:wait:/etc/rc.d/rc 3
14:4:wait:/etc/re.d/rc 4
15:5:wait:/etc/rc.d/rc 5
16:6:wait:/etc/rc.d/rc 6
# Те вещи, которые выполняются на каждом уровне выполнения,
ud::once:/sbin/update
» Перехват CTRLALTDELETE
са::ctrlaltdel:/sbin/shutdown t3 r now
П Когда источник бесперебойного питания сообщает нам, что произошел отказ
# питания, будем считать, что мы имеем еще несколько минут работы
П с питанием.Спланируйте выключение системы в течение 2 мин с денного
и момента.
я
п Предполагается, что у вас установлен powerd и ваш
п источник бесперебойного питания присоединен и работает правильно.
#
pf: :powerfail:/sbin/shutdown $f $h +2 "Power Failure; \
System Shutting Down"
# Если питание восстановлено, прежде чем начнется выключение, отмените его.
pr:12345:powerokwait:/sbin/shutdown $с ."Power Restored; \
Shutdown Cancelled"
ft Выполнить getty на стандартных уровнях выполнения
1:12345:respawn:/sbin/mingetty ttyl
2:2345:respawn:/sbin/mingetty tty2
3:2345:respawn:/sbin/mingetty tty3
4:2345:respawn:/sbin/mingetty tty4
5:2345:respawn:/sbin/mingetty tty5
6:2345:respawn:/sbin/mingetty tty6
п Выполните xdm на уровне 5
x:5:respawn:/usr/bin/X11/xdm $nodaemon
Этот файл определяет, как init ведет себя во время событий запуска и вы<
ключения сервера. Давайте внимательно рассмотрим этот файл.
Программа init игнорирует все пустые и закомментированные строки (т.е.
строки, которые начинаются со знака «#») в файле /etc/mittab. Строки с по<
лями, разделенными двоеточиями, являются конфигурационными строками
init. Синтаксис для такой строки:
идентификатор:уровень_выполнения:действие:процесс [аргументы]
Первое поле является полем уникальной метки для идентификации запи<
си в файле. Это поле (id) может иметь длину 2<4 символа. Второе поле ( r u n l e <
vels) определяет, к каким уровням выполнения применима эта строка.
Третье поле определяет, какое действие необходимо сделать. Последнее
поле (process) определяет, какой процесс необходимо выполнять. Вы можете
также дополнительно (при желании) определить аргументы командной стро<
ки для процесса в четвертом поле.

www.books-shop.com
Процессы начальной загрузки и выключения системы 45

Как ранее упоминалось, уровень выполнения определяет состояние систе


мы. Девять уровней выполнения показаны в таблице 3.1.
Таблица 3.1.
Уровни выполнения Уровень Описание
init выполнения
О Остановка $ завершение работы системы
1 Один пользователь $ используется для настройки системы в минималь$
ной конфигурации, подходящей для одного пользователя
2 Не используется
3 Многопользовательский режим $ применяется для настройки системы в
конфигурации, которая поддерживает несколько пользователей
4 Не используется
5 Используется для запуска системы X Window и программы xdm
6 Перезагрузка $ используется для перезагрузки системы
S или s Используется для внутренних операций сценариями, которые выполня$
ются на уровне 1
а, Ь, с Уровни выполнения по требованию; обычно не используются

Можно определить множество уровней выполнения в одной конфигура


ционной строке init. Например, если желательно, чтобы init выполняла про
цесс как в однопользовательском, так и в многопользовательских режимах,
можно определить строку следующим образом:
идентификатор:13:действие:процесс [аргументы]
Таблица 3.2. I
Возможные действия Действие Описание
для определенного respawn Процесс перезапускается всякий раз, когда заканчивается
уровня выполнения
wait Процесс выполняется один раз, init будет ожидать, пока он закончится
once Процесс выполняется один раз
boot Процесс выполняется во время загрузки системы, init будет игнорировать
поле уровня выполнения
bootwait Процесс выполняется во время загрузки системы, init будет ждать окончания
процесса
off Не выполняется никакого действия. Может использоваться для отключения
конфигурационной строки без ее удаления. Можно вместо этого просто за$
комментировать строку с помощью первого символа «#»
ondemand Применимо, только когда уровень выполнения равен a, b или с. Процесс вы$
полняется всякий раз, когда init вызывается с любым из трех уровней выпол$
нения по требованию. Обычно не используется
initdefault Задает для системы используемый по умолчанию уровень выполнения
sysinit Процесс выполняется один раз во время системной загрузки. Действие sysinit
имеет приоритет по отношению к действиям boot или bootwait
powerwait Процесс выполняется, когда init получает сигнал SIGPWR. Обычно програм$
мное обеспечение мониторинга UPS (источник бесперебойного питания) об$
наруживает проблему с питанием и посылает такой сигнал для init. В таком
случае init будет ожидать, пока процесс не прекратится
powerfail То же самое, что и powerwait, но init не ожидает завершения процесса
powerokwait Процесс выполняется, когда init получает сигнал SIGPWD, а текстовый файл
/etc/powerstatus содержит строку «ОК». Обычно программа мониторинга UPS
создает этот файл и посылает сигнал SIGPWR для init, чтобы указать, что
проблема с питанием исправлена
ctrlaltdel Процесс выполняется, когда init получает сигнал SIGINT
kbrequest Процесс выполняется, когда init получает KeyboardSignal от драйвера клавиа$
туры

www.books-shop.com
46 Глава 3

Init в стиле System V, каким является ink Red Hat Linux, использует следу
ющую структуру каталога:
/etc
+$rc.d
+$init.d (каталог)
+$rc0.d (каталог)
+$rc1.d (каталог)
+$rc2.d (каталог)
+$rc3.d (каталог)
+$rc4.d (каталог)
+$rc5.d (каталог)
+$rc6.d (каталог)
+rc.sysinit (сценарий)
+rc. local (необязательный сценарий, поставляемый с Red Hat Linux)
+гс. serial (необязательный сценарий)
+гс (сценарий)
Сценарий /etc/re. d/rc.sysinit
Когда система Red Hat Linux загружается, ядро выполняет программу init,
которая в свою очередь выполняет сценарий /etc/re. d/rc.sysinit прежде чем
обрабатывать любые другие сценарии для желаемого уровня выполнения.
Система выполняет этот сценарий прежде всего в связи со следующей стро
кой в файле /etc/inittab.
si: :sysinit:/etc/rc. d/rc.sysinit
Обратите внимание, что поле уровня выполнения является пустым, так
как init распознает sysinit как действие по инициализации системы. Сценарий
rc.sysinit делает много вещей, включая задание имени хоста, разрешение раз
дела свопинга, проверку файловых систем, загрузку модулей ядра и другие.
Обычно вам не нужно модифицировать этот сценарий.
Каталог /etc/rc.d/init.d
Подкаталог init.d используется для хранения сценариев, необходимых для
всех уровней выполнения. Хранение всех сценариев в одном месте облегчает
управление ими. Каждый сценарий используется для запуска/остановки
определенной службы — службы имен доменов (DNS), службы Web и т.д. Все
эти сценарии следуют специальному синтаксису аргументов командной стро
ки. Например, чтобы запустить службу NFS (сетевая файловая система), вы
можете выполнить такой сценарий:
/etc/re. d/init.d/nfs start
Чтобы остановить ту же самую службу, вы можете выполнить тот же сце
нарий следующим образом:
/etc/гс. d/init.d/nfs stop
Сценарий nfs получает start и stop в качестве аргументов. Это справедливо
для всех сценариев в каталоге, который имеет символьную ссылку на каталог
гс [06] .d.
Сценарий /etc/rc.d/rc
Когда init приказывают изменить уровень выполнения на один из возмож
ных уровней выполнения, этот демон выполняет сценарий, определенный в
одной из следующих строк в файле /etc/inittab:
10:0:wait:/etc/rc.d/rc О
11 :1 :wait: /etc/rc.d/rc 1
12:2: wait : /etc/rc.d/rc 2
13:3:wait:/etc/rc.d/rc 3
14:4:wait:/etc/rc.d/rc 4

www.books-shop.com
Процессы начальной загрузки и выключения системы 47

15:5:wait:/etc/re.d/rc 5
16:6:wait:/etc/rc.d/rc 6
Для каждого уровня выполнения (06) сценарий /etc/re.d/rc выполняет
ся с уровнем выполнения в качестве аргумента для сценария. Этот сценарий
отвечает за запуск и остановку всех служб для желательного уровня выполне
ния. Например, пусть init приказано изменить уровень выполнение на 3. Он
будет выполнять сценарий /etc/rc.d/rc с аргументом 3 в командной строке
аналогично строке:
/etc/rc.d/rc 3
Сценарий /etc/rc.d/rc показан на листинге 3.3.
Листинг 3.3. Сценарий /etc/rc.d/rc
#!/bin/bash
»
» re Этот файл отвечает за запуск/остановку
» служб, когда изменяется уровень выполнения. Он также
# отвечает за самую первую настройку базовых параметров, таких
# как имя хоста.
Я
# Первоначальный автор: Мигель ван Смууренберг (Miguel van Smoorenburg),
ff . <miquels@drinkel.nl.mygnet.org>
»
# Библиотека исходного кода функций.
. /etc/re.d/init.d/functions
# Теперь найдем, каким является текущий и каким был предыдущий
# уровень выполнения.
argv1="$1"
set '/sbin/runlevel'
runlevel=$2
previous=$"l
export runlevel previous
# Получить первый аргумент. Задать новый уровень выполнения
Я равным этому аргументу.
[ "$1" != "" ] && runlevel ="$argv1"
и Сообщите linuxconf, на каком уровне выполнения мы находимся
[ d /var/run ] && echo "/etc/rc.d/rc$runlevel.d" >
/var/run/runlevel.dir
# Существует ли каталог гс для этого нового уровня выполнения?
if [ d /etc/re.d/rc$runleve!1.d ]; then
9 Сначала выполните сценарий KILL.
for i in /etc/rc.d/rc&runlevel.d/K*; do
ff Проверьте, существует ли сценарий.
[ ! f $i ] && continue
# He выполняйте сценарий [KS]??foo.{rpmsave,rpmorig}
[ "${1%.rpmsave}" != "${1}" ] && continue
[ "${1%.rpmorig}" != "${1}" ] && continue
и Проверьте, включена ли уже подсистема.
subsys=$U»/etc/rc.d/rc$runlevel.d/K??}
[ ! f /var/lock/subsys/$subsys ] && \
[ ! f /yar/lock/subsys/${subsys>.init ] && continue
# Выключите подсистему.
$i stop

www.books-shop.com
48 Глава 3

done
tt Теперь выполните сценарии START.
for i in /etc/re.d/rc$runlevel.d/S*; do
№ Проверьте, существуют ли сценарии.
[ ! f $i ] && continue
tt He выполняйте сценарии [KS]??foo. {rpmsave, rpmorig}
[ "${1%.rpmsave}" != "${1}" ] && continue
[ "${1%.rpmorig}" != "${1}" ] && continue
# Проверьте, включена ли уже подсистема.
subsys=${i(f/etc/rc.d/rc$runlevel.d/S??}
[ ! f /var/lock/subsys/$subsys ] | | \
[ ! f /var/lock/subsys/${subsys}.init ] && continue
tt Включите подсистему.
$i start
done
fi
Этот сценарий прежде всего делает следующее:
1. Проверяет, существует ли каталог для уровня выполнения, специфици<
рованного аргументом. Другими словами, если сценарий выполняется с
аргументом равным, 3, он будет проверять, существует или нет каталог
/etc/rc.d/rc3.d/. Если он существует, сценарий перейдет к следующе<
му шагу.
2. На этом шаге сценарий определит, работает или нет какая<либо из про<
грамм (часто называемых службами), которые предполагается выпол<
нять на новом уровне выполнения. Если служба уже выполняется,
сценарий прекратит работу службы (kill), чтобы он мог перезапустить
ее на следующем шаге. Чтобы прекратить выполнение службы, сцена<
рий выполнит необходимый сценарий «К» с аргументом «stop».
3. На этом конечном шаге сценарий гс будет выполнять все сценарии «S»
с аргументом «start».

Каталоги /etc/rc.d/rc(0'6).d
Подкаталоги от rcO.d до rc6.d используются для уровней выполнения от О
до 6. Эти каталоги содержат символические связи со сценариями в каталоге
/etc/re.d/init.d. Каталог rcS.d в моей системе Red Hat Linux 5.2 содержит
символьные ссылки, показанные в листинге 3.4.
Листинг 3.4. Список каталога /etc/re.d/rc3.d моей системы Red Hat Linux
Irwxrwxrwx root root 14 K05innd > . . /init.d/innd
Irwxrwxrwx root root 15 KlOxntpd > .../init.d/xntpd
Irwxrwxrwx root root 13 K15gpm > ..//init.d/gpm
Irwxrwxrwx root root 15 K15httpd > ..,/init.d/httpd
Irwxrwxrwx root root 20 K15postgresql $> ../init.d/postgresql
Irwxrwxrwx root root 20 K20bootparamd $> . ./init.d/bootparamd
1 rwx rwx rwx root root 17 K20rusersd > .,/init.d/rusersd
Irwxrwxrwx root root 16 K20rwalld > .,/init.d/rwalld
Irwxrwxrwx root root 15 K20rwhod > .../init.d/rwhod
Irwxrwxrwx root root 15 K25squid > .../init.d/squid
Irwxrwxrwx root root 19 K34yppasswdd $> .,/init.d/yppasswdd
Irwxrwxrwx root root 15 K35dhcpd > . ./init.d/dhcpd
Irwxrwxrwx root root 16 K35ypserv > ,./init.d/ypserv
Irwxrwxrwx root root 18 K45arpwatch :> ../init.d/arpwatch
Irwxrwxrwx root root 15 K5Osnmpd > .../init.d/snmpd
Irwxrwxrwx root root 16 K55routed > ./init.d/routed

www.books-shop.com
Процессы начальной загрузки и выключения системы 49

Irwxrwxrwx root root 15 K75gated > .,/init.d/gated


Irwxrwxrwx root root 16 K87ypbind > ../init.d/ypbind
Irwxrwxrwx root root 16 K96pcmcia > . ./init.d/pcmcia
Irwxrwxrwx root root 17 SOlkerneld > . ./Шt.d/kerneld
Irwxrwxrwx root root 17 SlOnetwork > ../init.d/network
Irwxrwxrwx root root 17 S11portmap > ../init.d/portmap
Irwxrwxrwx root root 15 S15nfsfs > ../init.d/nfsfs
Irwxrwxrwx root root 16 S20random > ../init.d/random
Irwxrwxrwx root root 16 SSOsyslog > ../init.d/syslog
Irwxrwxrwx root root 13 S40atd > ../init.d/atd
Irwxrwxrwx root root 15 S40crond > ../init.d/crond
Irwxrwxrwx root root 14 SSOinet > ../init.d/inet
Irwxrwxrwx root root 15 S55named > ../init.d/named
Irwxrwxrwx root root 13 S601pd. > .../init.d/lpd
Irwxrwxrwx root root 13 S60nfs > ../init.d/nfs
Irwxrwxrwx root root 18 S75keytable > .,/init.d/keytable
Irwxrwxrwx root root 18 SSOsendmail > ../init.d/sendmail
Irwxrwxrwx root root 13 S91smb > ../init.d/smb
Irwxrwxrwx root root 19 S991inuxconf > .,/init.d/linuxconf
Irwxrwxrwx root root 11 S991ocal > ../init.d/local
Сценарии из каталога /etc/rc.d/init.d связаны двумя способами.
Например:
1. К{двузначное_число}{имя сценария}
2. 3{двузначное_число}{имя сценария}
Все сценарии, которые имеют в качестве префикса букву «К», выполняют<
ся с аргументом «stop», а другой вид выполняется с аргументом «start». Дву<
значное число используется для задания порядка выполнения. Так сценарий
с именем SOlfoo будет выполняться перед SlObar. Эти сценарии «S» и «К» вы<
полняются сценарием /etc/re.d/rc.
Когда сценарий гс закончится, обработка, выполняемая ink, также закан<
чивается, система становится доступной на новом уровне выполнения.

Сценарий /etc/rc.d/rc.local
Сценарий rc.local обычно выполняется один раз в конце уровней выпол<
нения 2, 3, и 5. Вы можете добавить сюда то, что необходимо выполнить
один раз во время загрузки в этот файл.

Сценарий /etc/rc.d/rc.serial
Подобно сценарию re.local, rc.serial обычно выполняется один раз в конце
уровня выполнения 1 или 3, чтобы инициализировать последовательные
( порты.

Загрузка системы
Во время процесса начальной загрузки ink будет сначала выполнять сце<
нарий rc.sysink, а затем выполнять сценарий для используемого по умолча<
нию уровня выполнения. Он задается в /etc/inittab с помощью такой строки:
идентификатор: 3: 1л1т._по_умолчанию:
Здесь используемый по умолчанию уровень выполнения задан как 3. Это
означает, что ink будет выполнять сценарий, необходимый для перевода сис<
темы в многопользовательский режим.
Следующая строка определяет, что необходимо выполнять для уровня вы<
полнения 3.
13:3:wait:/etc/rc.d/rc 3
Сценарий гс выполняется с аргументом 3. Этот сценарий будет выполнять
все сценарии, чьи имена начинаются с «S» в каталоге /etc/rc.d/rc3.d. Он

www.books-shop.com
50 Глава 3

будет также подставлять «start» в качестве аргумента для каждого из сценари


ев с префиксом «S». Когда все сценарии типа «S» выполнены, сценарий гс за
кончится и система станет доступна в используемом по умолчанию режиме
выполнения.

I Можно переопределить используемый по умолчанию уровень


выполнения в приглашении LILO. Например, при желании загрузить
систему в однопользовательском режиме, можно определить linux
single. Если для загрузки Linux используется метка, отличная от
«linux», нужно будет ввести выбранная _метка single, где
выбранная _метка является именем соответствующей метки.

Выключение системы
Можно выполнить ink вручную и приказать системе изменить уровень вы
полнения, указав его в командной строке. Например:
init 1
прикажет init изменить текущий уровень выполнения на 1. Другими словами,
это остановит систему. Если вы работаете в многопользовательском режиме
(уровень выполнения 3), предыдущая команда не очень удачна, так как она не
сообщает пользователям системы о предстоящем выключении.
Обычно для выключения системы используется команда shutdown. Она
посылает широковещательное предупреждающее сообщение всем зарегист
рированным пользователям о том, что система изменяет уровень выполне
ния. Она также предоставляет возможность спланировать операции
выключения системы.
Команда shutdown работает, приказывая init изменить текущий уровень
выполнения системы либо на остановку (halt — 0), либо на перезагрузку
(reboot — 6). Например:
shutdown $h now

Эта команда будет сигнализировать init о немедленном изменении уровня


выполнения на 0 (остановка). v

!
Отмена выключения системы
Команда shutdown позволяет вам запланировать выключение системы на
более поздний срок. Например:
shutdown +10

задает выключение системы ровно через 10 мин после ввода команды в при
глашение оболочки. Теперь может возникнуть необходимость отменить со
бытие выключения системы; в этом случае можно выполнить другую команду
shutdown с параметром с. Например:
shutdown $с

отменит любое запланированное выключение системы.

Перезагрузка сервера
Можно также выполнить init вручную, чтобы перезагрузить ваш сервер.
Например:
init 6
При работе в многопользовательском режиме (уровень выполнения 3),
эта команда не является лучшим подходом, так как она не информирует поль
зователей системы, что система собирается перезагружаться. Вместо этого вы
можете использовать команду shutdown для перезагрузки сервера. Например:
shutdown г +10

www.books-shop.com
Процессы начальной загрузки и выключения системы 51

Эта команда перезагрузит сервер через 10 мин. Все пользователи получат


сообщение о том, что система собирается вскоре перезагрузиться. Это позво
лит им закончить и сохранить свою работу.

Когда используется команда shutdown с задержкой, как только что


было описано, пользователи, которые зарегистрированы в системе,
увидят предупреждающее сообщение, но shutdown не препятствует
кому$либо регистрироваться в системе во время периода обратного
отсчета выключения системы. Чтобы запретить новые регистрации в
системе, вы можете создать текстовый файл, называемый
/etc/nologin с сообщением о том, что уже было спланировано
выключение системы, и пользователи должны попробовать
зарегистрироваться позже. Не забудьте переименовать или удалить
файл после того как вы перезагрузитесь. Если вы перезагружаете
сервер удаленно, будьте абсолютно уверены, что вы стерли или
переименовали этот файл до реального выключения. Ни одной
учетной записи обычного пользователя не разрешается
регистрироваться, когда присутствует этот файл. Можно добавить
rm $f /etc/nologin в конце сценария /etc/re.local и убедиться, что он
выполняется init в конце уровня выполнения 3.

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


shutdown г now

Перезагрузка с помощью Ctrl+Alt+Delete


Если вы находитесь у системной консоли, можете использовать для пере
загрузки сервера традиционную комбинацию клавиш Ctrl+Alt+Del. Это воз
можно в связи с наличием следующей строки в /etc/inittab:
са::ctrlaltdel:/sbin/shutdown $t3 r now
Эта строка позволяет init поймать комбинацию клавиш Ctrl+Alt+Del и вы
звать сценарий shutdown для немедленной перезагрузки.

Любой, кто имеет физический доступ к вашей системной консоли,


может выключить систему нажимая клавиши Ctrl+Alt+Del. Чтобы
защитить себя от такого выключения, можно создать файл с
именем /etc/shutdown.allow, содержащий список пользователей
(одно имя пользователя в строке), которым разрешено выключать
систему. Учетную запись root не нужно вносить в этот файл.

Автоматическое выключение при отказе питания


ЕСЛИ вы используете источник бесперебойного питания (UPS) для обеспе
чения резервного источника питания системы, можно использовать init, что
бы аккуратно выключить систему, когда энергия UPS почти иссякла.
Используемый по умолчанию /etc/inittab содержит следующую строку:
pf::powerfail:/sbin/shutdown $f $h +2 "Power Failure; \
System Shutting Down"
Эта строка приказывает init выполнить shutdown в случае отказа питания.
Действие powerfail активируется, когда программа UPS или powerd (демон
мониторинга питания) посылает init сигнал SIGPWR. Используемая по умол
чанию конфигурация позволяет системе работать на питании от UPS в тече
ние двух минут, прежде чем она остановится. Если UPS способен
поддерживать питание больше или меньше времени, надо изменить это зна
чение.
Поскольку вполне возможно, что питание восстановится, прежде чем
энергия UPS иссякнет, init может быть вызван для отмены ранее спланирован
ного выключения системы. Это делается с помощью строки в /etc/inittab:
рг:12345:powerokwait:/sbin/shutdown $с "Power Restored; \

www.books-shop.com
52 Глава 3

Shutdown Cancelled"
Когда init получает сигнал SIGPWR и файл с именем /etc/powerstatus со
держит в себе строку «ОК», активируется действие powerokwait.

Управление файлами init


Программа init из System V использует множество файлов, символьных
ссылок и каталогов. Чтобы упростить управление файлами init, существует
несколько инструментальных средств. Рассмотрим два таких часто используе
мых средства.

Использование chkconfig для управления


уровнями выполнения
Утилита chkconfig позволяет поддерживать различные символьные ссыл
ки, необходимые для служб запуска/остановки на уровне выполнения. Она
может управлять конфигурацией уровня выполнения для всех сценариев в ка
талоге /etc/re.d/init.d.
Перечисление управляемых служб
Чтобы увидеть, какие службы будут запускаться или останавливаться на
разных уровнях выполнения, выполните:
chkconfig $$list
Она перечислит все управляемые chkconfig службы и сообщит вам, какие
службы собираются запускаться (on) или останавливаться (off) для каждого
уровня выполнения. Можно также проверить конфигурацию уровня выпол
нения для определенной службы, указывая имя службы (т.е. имя сценария в
/etc/re.d/init.d) в командной строке, Например:
chkconfig $$list httpd
Предыдущая команда выводит результат на моем сервере Red Hat Linux:
httpd 0:off 1:off 2:off 3:on 4:on 5:on 6:off
Служба httpd включена для уровней выполнения 2, 3, 4 и 5 и выключена
для О, 1 и 6.
Добавление новой службы
ЕСЛИ вы только что добавили новый сценарий в каталог /etc/re.d/init.d и
хотите сделать службу, которую он предлагает, доступной для определенного
уровня выполнения, можно выполнить команду chkconfig следующим обра
зом:
chkconfig $$add имя_службы [— level уровень выполнения]
Например:
chkconfig $$add named
Эта команда добавит службу, называемую named, к текущему уровню вы
полнения. Другими словами, она создаст символьную ссылку с префиксом
$>{двузначное_число} в каталоге текущего уровня выполнения, что указывает на
сценарий /etc/rc.d/init.d/named. При желании добавить службу к уровню
выполнения, отличному от текущего, вы можете определить уровень выпол
нения с помощью параметра —level. Например:
chkconfig $$level 4 $$add named
Эта команда добавит службу named к уровню выполнения 4.
Удаление существующей службы
Чтобы удалить существующую службу из уровня выполнения, используйте
следующую команду:
chkconfig $$del имя_службы [$$level уровень выполнения]

www.books-shop.com
Процессы начальной загрузки и выключения системы 53

Например:
chkconfig $$del named
Эта команда удалит службу named из текущего уровня выполнения. Чтобы
удалить службу из уровня выполнения, отличного от текущего, используйте
параметр —level. Например:
chkconfig $$del named $$level 5
Эта команда удалит службу named из уровня выполнения 5.
Использование ntsysv для управления
уровнями выполнения
Утилита ntsysv позволяет включить/выключить различные службы в лю
бом уровне выполнения, используя простой интерфейс с меню. Когда вы вы
полняете эту команду без аргументов, она покажет экран (см. рис. 3.1).

|Рис. 3.1.
Экран ntsysv

Прокручиваемый экран показывает состояние всех служб в текущем уров


не выполнения. Чтобы включить службу, необходимо ее выбрать; чтобы вы
ключить службу, надо просто отменить ее выделение. Сделав все изменения,
можете их сохранить при помощи кнопки ОК, а отменить изменения можно,
щелкнув кнопку Cancel. Если вы хотите работать с конфигурацией другого
уровня выполнения, просто укажите уровень выполнения с помощью пара
метра —level. Например:
ntsysv $level 1
Эта команда позволит вам работать с конфигурацией уровня выполнения 1.

Использование linuxconf для управления


уровнями выполнения
Вы можете также использовать инструментальное средство linuxconf для
конфигурирования уровней выполнения. Следуйте инструкциям: '.
1. Выполните Control —> Control Panel —> Control Service activity
2. Включите или выключите одну или несколько служб
3. Сохраните изменения
4. Активируйте изменения, прежде чем выйдете из linuxconf

Ⱦɚɧɧɚɹɜɟɪɫɢɹɤɧɢɝɢɜɵɩɭɳɟɧɚɷɥɟɤɬɪɨɧɧɵɦɢɡɞɚɬɟɥɶɫɬɜɨɦ%RRNVVKRS
ɊɚɫɩɪɨɫɬɪɚɧɟɧɢɟɩɪɨɞɚɠɚɩɟɪɟɡɚɩɢɫɶɞɚɧɧɨɣɤɧɢɝɢɢɥɢɟɟɱɚɫɬɟɣɁȺɉɊȿɓȿɇɕ
Ɉɜɫɟɯɧɚɪɭɲɟɧɢɹɯɩɪɨɫɶɛɚɫɨɨɛɳɚɬɶɩɨɚɞɪɟɫɭpiracy@books-shop.com
54 Глава 3

Создание новой службы для уровня выполнения


ЕСЛИ вы устанавливаете пакеты серверного программного обеспечения
известных поставщиков, скорее всего они предоставят прекрасный пакет
RPM, который также содержит необходимый сценарий службы переноса в
/etc/rc.d/init.d. Иногда полезное программное обеспечение поставляется
не со всеми принадлежностями, и вам придется модифицировать его, чтобы
оно работало на вашей системе. В таком случае может понадобиться сцена<
рий службы для вашего нового программного обеспечения. Здесь я покажу,
как легко создать новый сценарий службы, который помещается в каталог
/etc/rc.d/init.d.
Прежде всего посмотрим на существующий сценарий службы из каталога
/etc/rc.d/init.d. Листинг 3.5 показывает один такой сценарий с именем
httpd.
Этот сценарий используется для запуска/останова Web<сервера Apache.
Листинг 3.5. /etc/re.d/init.d/httpd
#!/bin/sh
#
# Сценарий запуска для Wedсервера Apache
#
# chkconfig: 345 85 15
# описание: Apache является сервером Web. \
# Он используется для обслуживания файлов HTML и CGI.
# processname: httpd
# pidfile: /var/run/httpd.pid
# config: /etc/httpd/conf/access.conf
# config: /etc/httpd/conf/httpd.conf
# config: /etc/httpd/conf/srm.conf
# Библиотека исходных функций.
. /etc/re.d/init.d/functions
# Посмотрим, каково наше название,
case "$1" in
start)
echo n "Starting httpd: "
daemon httpd
echo
touch /var/lock/subsys/httpd

stop)
echo n "Shutting down http: "
[ f /var/run/httpd.pid ] && {
kill 'cat /var/run/httpd.pid'
echo n httpd
}
echo
rm f /var/lock/subsys/httpd
rm f /var/run/httpd.pid

status)
status httpd

restart)
$0 stop
$0 start

reload)

www.books-shop.com
Процессы начальной загрузки и выключения системы 55

echo n "Reloading httpd: "


[ f /var/run/httpd.pid ] && {
kill HUP 'cat /var/run/httpd.pid'
echo n httpd
>
echo

*)
echo "Usage: $0 {start | stop | restart | reload | status}"
exit 1
esac
exit 0
Этот сценарий для sh является простым оператором case (переход по
условию). А вот как вы можете создать новый сценарий службы из существую
щего сценария службы. Предположим, что ваша новая служба называется
webmonitor и выполняемый файл хранится в /usr/sbin/webmonitor.

Согласно договоренности используют одно и то же имя для


сценария и выполняемой программы.

Здесь представлена последовательность действий для создания сценария


/etc/rc.d/init.d/webmonitor:
1. Скопируйте существующий сценарий из /etc/rc.d/init.d, изменив имя
на /etc/rc.d/init.d/webmonitor. Для простоты и облегчения понимания
предположим, что вы скопировали сценарий /etc/rc.d/init.d/httpd, по
казанный на листинге 3.5.
2. Используя текстовый редактор (такой как vi), найдите и замените все
экземпляры "httpd" строкой "webmonitor".
3. Если вы держите исполняемый файл в каталогах, отличных от /sbin,
/usr/sbin, /bin или /usr/bin, нужно будет изменить строку daemon web
monitor, чтобы отразить путь исполняемого файла webmonitor. Напри
мер, если вы храните выполняемый файл в каталоге /usr/local/
. web/bin, измените строку daemon webmonitor на daemon /usr/local/
web/bin/webmonitor.
4. Если /usr/sbin/webmonitor не создает файл PID (/var/run/webmoni
tor.pid), замените строку kill 'cat /var/run/webmonitor.pid' на killproc
webmonitor и удалите строку rm f /var/run/webmonitor.pid.
5. Выполните chmod 750 /etc/rc.d/init.d/webmonitor для изменения
полномочий файла, чтобы пользователь root мог читать, писать и вы
полнять сценарий.
Это все вам нужно сделать для создания новой службы webmonitor. Те
перь, используя chkconf, ntsysv или утилиту linuxconf, можно добавить эту но
вую службу в желаемый уровень выполнения.

www.books-shop.com
www.books-shop.com
Глава 4
Файлы и устройства UNIX

В этой главе:

• Полномочия и владельцы файлов, каталогов и связей


• Политика полномочий в многопользовательской системе

дна из основных причин неприятия UNIX и похожих на нее операцион


ных систем состоит в том, что пользователи не могут разобраться с управле
нием файлами и каталогами. Работая системным администратором, я
обнаружил, что почти девяносто процентов проблем пользователей связаны
с полномочиями файлов и каталогов и вопросами владения. Многие пользо
ватели просто не понимают концепцию владения файлами и полномочий до
ступа. Однако они не виноваты, поскольку большинство из них перешли на
операционную систему, такую как Linux из Microsoft Windows З.хили 9.x (или
подобной системы), где концепция владения файлом и полномочий доступа
неизвестна (исключением является Windows NT/2000). Поэтому вполне ве
роятно, что системному администратору Интернетсервера придется решать
много пользовательских проблем, связанных с файлами.

Общие представления
о полномочиях файлов/каталогов
Подобно всем операционным системам UNIX, Linux ассоциирует файл
или каталог с пользователем и группой. Рассмотрим пример:
$rw$rw$r$ 1 sheila intranet 512 Feb 6 21:11 milkyweb.txt
Эта строка получена с помощью команды Is I milkyweb.txt на системе Red
Hat Linux. Программа Is показывает список файлов и каталогов. Параметр 1
задает вывод полного описания файла milkyweb.txt. Рассмотрим теперь эту
же информацию в виде таблицы 4.1.

www.books-shop.com
58 Глава4

Пример исполнения Тип информации Результат вывода


команды Is $I Полномочия доступа к файлу $rw$rw$r$
Число связей 1
Пользователь (владелец файла) sheila
Группа intranet
Размер файла (в байтах) 512
Дата последнего изменения Feb6
Время последнего изменения 21:11
Имя файла milkyweb.txt

Файл milkyweb.txt принадлежит пользователю с именем sheila. Она являет


ся единственным обычным пользователем, который может изменить полно
мочия доступа этого файла. Другой пользователь, который может изменить
эти полномочия, — это суперпользователь. Группой файла является intranet.
Любой пользователь, принадлежащий к группе intranet, может получить до
ступ (для чтения, записи или выполнения) к файлу на основе того, какие зада
ны (владельцем) текущие полномочия группы.
Чтобы стать владельцем файла, нужно его создать. В системе Red Hat Linux,
когда пользователь создает файл или каталог, его группа задается как исполь
зуемая по умолчанию группа пользователя, она может быть частной группой
с тем же именем, что и пользователь. Предположим, я зарегистрировался в
системе Red Hat Linux как kabir и, используя текстовый редактор типа vi, со
здал файл todo.txt. Если выполнить команду Is I todo.txt, то на экране появится:
$rw$rw$r$ 1 kabir kabir 4848 Feb 6 21:37 todo.txt
Здесь имя владельца файла и имя группы совпадают. Это связано с тем,
что в Red Hat Linux используемая по умолчанию (частная) группа пользовате
ля kabir также называется kabir. Это может немного запутать, но позволяет
избежать некоторых проблем, к тому же название легко изменить. Однако
важно, что при создании нового файла его владельцем является создатель, а
группой является используемая по умолчанию группа владельца. Посмотрим,
как можно изменить владельца файла.
Обычный пользователь не может изменить владельца файла или каталога.
Например, я не могу создать файл как пользователь kabir и сделать его владе
льцем пользователя с именем sheila. Почему это так? Причина в безопасно
сти. Если обычному пользователю разрешить переопределение владельца
файлов, ктото мог бы создать вредоносную программу, которая удаляет фай
лы, изменяет своего владельца на суперпользователя и стирает всю файло
вую систему. Только суперпользователь может переопределить владельца
файла или каталога.
Изменение владельца файлов/каталогов
с помощью chown
Суперпользователь может изменить владельца файла/каталога, используя
команду chown. Для этого следует выполнить команду:
chown <новый_пользователь> <файл> или <каталог>
Например:
chown sheila kabirs_plans.txt
Эта команда делает пользователя sheila новым владельцем файла kabirs_
plans.txt.
Если суперпользователь захочет изменить группу для файла или каталога,
он может использовать команду chown таким образом:
chown <новый_пользователь.новая_группа> <файл> или <каталст>

www.books-shop.com
Файлы и устройства UNIX 59

Например:
chown sheila.admin kabirs_plans.txt
Предыдущая команда не только делает sheila новым владельцем, но также
изменяет группу файла на admin.
Если суперпользователь захочет изменить владельца файла и/или группу
всех файлов либо каталогов в данном каталоге, он может использовать пара
метр R команды chown в рекурсивном режиме. Например:
chown $R sheila.admin /home/kabir/plans/
Эта команда изменяет владельца и группу всех файлов и подкаталогов из
каталога /home/kabir/plans.
Хотя необходимо быть суперпользователем, чтобы изменить владельца
файла, обычный пользователь может изменить группу файла или каталога с
помощью команды chgrp.
Изменение группы файлов/каталогов
с помощью chgrp
Команда chgrp позволяет обычному пользователю изменить принадлеж
ность файла или каталога к группе, если этот пользователь также является
членом новой группы. Другими словами, пользователь может изменять груп
пы, только если принадлежит как к старой, так и к новой группам. Например:
chgrp httpd «.html
Чтобы выполнить предыдущую команду об изменении группы для всех
файлов HTML в каталоге, необходимо быть членом группы httpd. Можно уз
нать, к каким группам принадлежит пользователь, используя команду groups
без аргументов, chgrp, как и команда chown, тоже использует R, чтобы рекур
сивно изменять имена групп одного или нескольких файлов или каталогов.
Посмотрим теперь, как к файлам и каталогам применяются полномочия
доступа. Существует два способа представления полномочий файлов/каталогов.
Представление полномочий доступа
с помощью восьмеричных чисел
Использование восьмеричных чисел для объяснения полномочий доступа
файлов/каталогов предполагает анализ каждого бита. Если такой подход по
какимлибо причинам не устраивает, можно пропустить этот раздел и перей
ти к следующему, который объясняет применение тех же самых полномочий
с помощью более простой строки доступа.
Поскольку для объяснения полномочий доступа будет использоваться не
так часто используемая восьмеричная система счисления, вспомним о вось
меричных числах. Восьмеричная система счисления использует восемь цифр
вместо обычно используемых десяти. Восьмеричными цифрами являются
0—7 и каждая цифра может быть представлена тремя битами (в двоичной сис
теме). Таблица 4.2 показывает двоичные эквиваленты для каждой восьмерич
ной цифры.

Преобразование Восьмеричное число Двоичное число


восьмеричных чисел О 000
в двоичные
1 001
2 010
3 011
4 100
5 101
6 110
_7 111

www.books-shop.com
60 Глава 4

Эта таблица будет полезна для анализа полномочий файла/каталога.


Рис. 4.1 показывает, как представить полномочия в виде четырех восьмерич
ных цифр. Здесь первая восьмеричная цифра является самой левой или са
мой значимой.

Рис. 4.1. • Первая Вторая Третья Четвертая


Диаграмма восьмеричная восьмеричная восьмеричная восьмеричная
полномочий, цифра цифра цифра цифра
использующая
четыре 4 set$UID r r r
восьмеричных цифры
Восьмеричное 2 s e t $ G I

1 sticky$bit * х х

Специальные Пользователь Группа Другие

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


стройки специальных полномочий, вторая — для задания полномочий владе
льца файла, третья — для задания полномочий для группы, четвертая цифра
используется для задания полномочий для всех остальных пользователей.
Когда любая из этих цифр опущена, она считается нулем. Таблица 4.3 показы
вает несколько примеров указания полномочий.
Таблица 4.3. I
Примеры значений Значение Объяснение
полномочий полномочий
0400 Полномочие только для чтения (г) для владельца файла. Это эквивалентно
400, где пропущенная восьмеричная цифра интерпретируется нулем
0440 Полномочия на чтение (г) как для владельца файла, так и для пользователей
в группе. Это эквивалентно 440
0444 Полномочия на чтение (г) для всех. Это эквивалентно 444
0644 Полномочия на чтение (г) и запись (w) для владельца файла. Все остальные
имеют доступ к файлу только для чтения. Это эквивалентно 644; число 6 по$
лучается при сложении 4 (г) и 2 (w)
0755 Полномочия на чтение (г), запись (w) и выполнение (х) для владельца файла
и полномочия на чтение (г) и выполнение (х) файла для всэх остальных. Это
эквивалентно 755; число 7 получается при сложении 4 (г) + 2 (w) + 1 (х),
число 5 получается при сложении 4 (г) + 1 (х)
4755 То же самое, что и 755 в предыдущем примере, за исключением того, что
для этого файла задан бит set$UID. Когда выполняется файл с полномочием
set$UID, процесс выполняется с полномочиями владельца этого файла. Други$
ми словами, если для файла задан бит set$UID и его владельцем является
пользователь gunchy, то когда файл выполняется, исполняющаяся программа
будет иметь полномочия пользователя gunchy. Поэтому, если файл принадле$
жит root и задан с битом set$UID, то любой, кто сможет выполнить этот
файл, получит привилегии суперпользователя. Одной из основных проблем
безопасности является ситуация, когда файл пользователя root с заданным
битом set$UID может быть изменен кем$то отличным от root. Поэтому будьте
очень осторожны при задании бита set$UID
2755 Подобно 755, но также задает бит set$GID. Когда такой файл выполняется, он
имеет все полномочия группы файла
1755 Подобно 755, но также задает бит sticky$bit. Sticky$bit официально известен
как режим сохранения текста. Это редко используемое свойство приказывает
ОС сохранить образ исполняемой программы в памяти даже после того, как
она завершится. Оно направлено извне на сокращение времени запуска бо$
льшой программы. Вместо задания sticky$bit, лучше попробовать перекодиро$
вать приложение, чтобы улучшить общую производительность (если это
возможно) ^_^

www.books-shop.com
Файлы и устройства UNIX 61

Принимая решение о подходящем задании полномочий, необходимо


определить, какой тип доступа должны иметь пользователь, группа и все
остальные, а также рассмотреть вопрос о том, необходимо ли задавать биты
setUID, setGID или stickybit. Когда потребности определены, можно
выявить каждую восьмеричную цифру, используя 4 (читать), 2 (писать) и
1 (выполнять), либо иные значения, полученные сложением любых из этих
трех чисел. Хотя исчисление полномочий восьмеричными числами может
показаться немного трудным, частое использование на практике сделает этот
способ вполне привычным.

Представление полномочий доступа


с помощью строк доступа
Теперь рассмотрим метод строк доступа, который проще (предположитель
но) рассмотренного ранее числового метода. На рис. 4.2  второй вариант
предыдущей диаграммы, но уже для строк доступа.
Рис, 4.2.
Диаграмма set$UID(s) read (г) read(r) read(r)
полномочий,
использующая write (w) write (w) write (w)
строки доступа set$GID(s)

sticky$bit (t) execute (x) execute (x) execute (x)

Специальные Пользователь Группа Другие


(u) (9) (о)

Все (а)

Каждый тип полномочий представлен с помощью одной буквы (в скоб


ках). Чтобы создать строку полномочий, необходимо указать следующее:
• На кого воздействует? Варианты: и (пользователь), g (группа),
о (другие) или а (все).
• Какой тип полномочий необходимо задать? Варианты: г (чтение),
w (запись), х (исполнение), s (setUID либо setGID) или t (sticky bit).
• Какой тип действия? Другими словами, устанавливаются полномочия
или удаляются? При задании полномочий необходимо использовать
«+» для добавления, либо «» для удаления.
• Например, чтобы предоставить владельцу файла доступ к файлу для
чтения, необходимо определить строку полномочий u+r; а чтобы раз
решить всем читать и выполнять файл, будет нужна строка полномо
чий а+rx. Аналогично, чтобы задать для файла бит setUID, нужно
использовать u+s, а чтобы задать для файла бит setGID — g+s.
Теперь, когда мы познакомились с различными способами задания полно
мочий файлов и каталогов, посмотрим, как можно применить эти знания
с помощью команды chmod.

Изменение полномочий доступа файлов/каталогов


с помощью chmod
Утилита chmod позволяет изменять режимы (полномочий), поэтому она
называется chmode. В этой утилите можно использовать восьмеричный или
строковый метод. Например:
chmod 755 *.pl
Эта команда изменяет полномочия для файлов, оканчивающихся расши
рением .pi. Каждый из файлов .р! определен для владельца как читаемый, за
писываемый и выполняемый (7 = 4 [чтение] + 2 [запись] + 1 [исполнение]).

www.books-shop.com
62 Глава 4

Файлы будут также читаемыми и выполняемыми (5 = 4 [чтение] + 1 [исполне


ние]) для группы и всех остальных пользователей.
Можно сделать то же самое, используя строковый метод:
chmod a+rx,u+w *.pl

Здесь а+гх используется, чтобы разрешить полномочия читать (г) и вы


полнять (х) для всех (a), a u+w позволяет разрешить владельцу (и) запись (w)
в файл. Обратите внимание, что при необходимости использования множе
ства строк доступа каждую пару строк необходимо разделить запятой и что
запрещены пробелы между строками полномочий.
Если необходимо изменить полномочия для всех файлов и подкаталогов
внутри каталога, можно использовать параметр R для выполнения рекурсив
ной операции задания полномочий. Например:
chmod $R 750 /www/mysite

Здесь восьмеричное значение полномочий 750 задается для всех файлов и


подкаталогов каталога /www/mysite.
Специальные замечания о полномочиях каталогов
Задание полномочий для каталога похоже, но не идентично установке
полномочий обычных файлов. Существует ряд специальных замечаний о
полномочиях каталогов:
• Доступ к каталогу только для чтения запрещает команду cd (переход) в
этот каталог. Чтобы это сделать, необходимо иметь полномочия для
выполнения.
• Полномочия только для выполнения позволят получить доступ к фай
лам внутри каталога, если известны их имена и разрешено читать эти
файлы.
• Чтобы иметь возможность вывести список содержимого каталога, ис
пользуя программу типа Is, а также возможность выполнить cd (пере
ход) в этот каталог, нужны полномочия как для чтения, так и для
выполнения.
• Если имеются полномочия для записи в каталог, можно создать, уда
лить или изменить любые файлы или подкаталоги внутри этого ката
лога, даже когда файл или подкаталог принадлежит комуто другому.
Теперь рассмотрим специальный тип файла, называемый символьной
ссылкой и связанные с ним полномочия.

Управление полномочиями для связей


Помимо обычных файлов и каталогов, достаточно часто будут встречать
ся файлы другого типа — связи (ссылки).
Связи являются файламиуказателями, которые ссылаются на другие фай
лы. Связь позволяет создать множество имен для одного файла или каталога.
Существуют два типа связей: жесткие и мягкие (символьные) связи (см. следу
ющую главу). Здесь будут рассмотрены полномочия, используемые для ссылок.
Изменение полномочий или владельца жесткой связи
ЕСЛИ изменяются полномочия или владелец жесткой связи, это также из
меняет полномочия первоначального файла. Например, рассмотрим следую
щую команду Is 1:
$rw$r$r$ 1 root 21 Feb 7 11:41 todo.txt
Теперь, если пользователь root создает жесткую связь (используя коман
дную строку Len todo.txt plan) с именем plan для todo.txt, то команда Is 1 пока
жет:
$rw$r$r$ 2 root 21 Feb 7 11:41 plan
$rw$r$r$ 2 root 21 Feb 7 11:41 todo.txt

www.books-shop.com
Файлы и устройства UNIX 63

Жесткая связь plan и первоначальный файл todo.txt имеют один и тот же


размер файла (показанный в четвертом столбце), а также одинаковые значе
ния полномочий и владельца. Теперь, если пользователь root выполняет
команду:
chown Sheila plan
чтобы сделать владельцем жесткой связи пользователя с именем Sheila, то
что изменится? Посмотрим на вывод Is 1 после выполнения этой команды:
rwrr 2 Sheila root 21 Feb 7 11:41 plan
rwrr 2 Sheila root 21 Feb 7 11:41 todo.txt
Команда chown изменяет владельца plan, но изменился и владелец todo.txt
(исходного файла). Поэтому, когда меняется владелец или полномочия жест
кой связи, изменение распространяется и на первоначальный файл.
Изменение полномочий или владельца мягкой ссылки
Изменение владельца символьной или мягкой связи работает не так. По
смотрим на следующий вывод Is 1:
Irwxrwxrwx 1 sheila root 8 Feb 7 11:49 plan $> todo.txt
$rw$r$r$ 1 sheila root 21 Feb 7 11:41 todo.txt
Здесь можно видеть, что файл plan является символьной (мягкой) связью
для todo.txt. Предположим теперь, что пользователь root изменит владельца
символьной связи следующим образом:
chown kabir plan
Вывод Is 1 выглядит так:
Irwxrwxrwx 1 kabir root 8 Feb 7 11:49 plan > todo.txt
rwrr 1 sheila root 21 Feb 7 11:41 todo.txt
Теперь возникает вопрос, может ли пользователь kabir писать в todo.txt,
используя символьную связь (plan)? Ответ будет отрицательным, если ката
лог, где хранятся эти файлы, не принадлежит kabir. Поэтому изменение вла
дельца мягкой связи работает не так, как при жестких связях. Однако
изменение полномочий мягкой связи приведет к тому, что файл, на который
указывает ссылка, получит новые параметры. Например:
chmod 666 plan
Это изменит полномочия файла todo.txt, как показано в листинге Is 1 :
rwrwrw 1 kabir kabir 25 Feb 7 11:52 plan
rwrr 1 sheila root 21 Feb 7 11:41 todo.txt
Будьте внимательны со связями, так как задание полномочий и владельца
для этих специальных файлов не является очевидным.

Создание политики полномочий


для многопользовательского сервера
Как упоминалось ранее, большинство проблем пользователей на UNIX и
подобных ей системах связано с полномочиями файлов. Если чтото работа
ло вчера и позавчера, но внезапно прекращает действовать сегодня, прежде
всего необходимо проверить полномочия. Одной из наиболее
распространенных причин ошибочных полномочий является учетная запись
root. Многие неопытные системные администраторы часто получают доступ
к файлам и программам через учетную запись суперпользователя (root). Ког
да программа выполняется с помощью учетной записи пользователя root,
файлы, которые создает такая программа, могут иметь владельцем пользова
теля root. В этом разделе будут рассмотрены несколько политик полномочий,
которые полезны в многопользовательских системах.

Ⱦɚɧɧɚɹɜɟɪɫɢɹɤɧɢɝɢɜɵɩɭɳɟɧɚɷɥɟɤɬɪɨɧɧɵɦɢɡɞɚɬɟɥɶɫɬɜɨɦ%RRNVVKRS
ɊɚɫɩɪɨɫɬɪɚɧɟɧɢɟɩɪɨɞɚɠɚɩɟɪɟɡɚɩɢɫɶɞɚɧɧɨɣɤɧɢɝɢɢɥɢɟɟɱɚɫɬɟɣɁȺɉɊȿɓȿɇɕ
Ɉɜɫɟɯɧɚɪɭɲɟɧɢɹɯɩɪɨɫɶɛɚɫɨɨɛɳɚɬɶɩɨɚɞɪɟɫɭpiracy@books-shop.com
64 Глава 4

Задание полномочий конфигурационных


файлов пользователей
Домашний каталог каждого пользователя содержит несколько полускры
тых файлов, имена которых начинаются с точки. Эти файлы часто использу
ются для выполнения команд при регистрации пользователя в системе.
Например, все доступные для пользователя оболочки (csh, tcsh, bash и т.д.)
считывают свои параметры из файла с точкой, такого как .cshrc или .bashrc.
Если пользователь неаккуратно поддерживает правильное задание полномо
чий файлов, другой не очень дружественный пользователь может создать для
этого наивного пользователя серьезные проблемы. Например, если файл
.cshrc одного пользователя доступен для записи другому пользователю, то
этот пользователь может сыграть глупую шутку, например, помещая команду
logout в начале файла .cshrc, так что первый пользователь будет выходить из
системы, как только в ней зарегистрируется. Конечно, глупая шутка может
привести к нарушению секретности файлов пользователя в системе. Поэтому
за такими ситуациями необходимо внимательно наблюдать, особенно в мно
гопользовательской системе. Можно, например, использовать программу
COPS (см. главу 18), чтобы выявить проблемы, связанные с полномочиями.
Если в системе существует не очень много пользователей, можно быстро вы
полнить простую проверку:
find /home type, f name ".*rc" exec Is 1 \;
Эта команда покажет полномочия всех файлов с точкой в начале (заканчи
вающихся на «гс», чтобы перечислить только .cshrc, .bashrc и т.д.) в иерархии
каталога home. Если домашние каталоги пользователей находятся в /home,
эта команда быстро покажет, какие пользователи могут столкнуться с пробле
мами некорректности полномочий.
Задание для пользователей используемых
по умолчанию файлов полномочий
Системный администратор может определить используемые по умолча
нию полномочия для всех файлов пользователей, которые находятся в систе
ме. Чтобы задать полномочия по умолчанию для новых файлов, можно
применить команду umask:
umask <маска>

Для того чтобы понять, как работает umask, рассмотрим пример:


Предположим, что umask имеет значение 022. Когда создается новый
файл, функция создания файла (open) обычно запрашивает полномочия
0666. Однако в таком случае окончательная настройка полномочий файла вы
полняется системой (см. рис. 4.3).
Как видно на рисунке, запрошенные полномочия 0666 объединяются опе
рацией логического «И» с дополнением текущей маски (т.е. 022 становится
755), чтобы результат стал равен 0644, что предоставляет владельцу файла до
ступ для чтения и записи, но всем остальным дает доступ только для чтения.
Чтобы создать используемую по умолчанию маску для полномочий фай
лов, можно вставить команду umask в глобальный файл ресурсов оболочки
/etc, который выполняется после регистрации пользователя в системе и за
пуска оболочки. Это приведет к выполнению команды umask и предоставит
сеансу пользователя используемую по умолчанию маску. Например, если по
льзователи используют оболочку /bin/csh или /bin/tcsh, можно поместить
подходящую команду umask в файл /etc/csh.cshrc.
Задание полномочий выполняемых файлов
Полномочия записи должен иметь только владелец файла программы, ко
торая может выполняться обычными пользователями. Например, файлы
программ в /usr/bin должны иметь, такие полномочия, что только root мо
жет читать, записывать и выполнять эти файлы, а все остальные могут толь
ко читать и выполнять их. Разрешение другим писать в файл программы
может создать серьезные проблемы с безопасностью. Например, если

www.books-shop.com
Файлы и устройства UNIX 65

Рис. 4.3.
Как система Полномочия, запрошенные Unmask
использует umask функцией открытия файла
ореп()
Восьмеричное
представление о 6 6 0 2 2

'
000 010 010 1

1 1' 1 1
Двоичное Преобразованное
представление 000 110 110 no i 000 110 110 110 1
значение unmask

000 110 100 100

полномочия 0 6 4 4 1 (rw$r$r$)

комуто, кроме root, разрешается писать в программу, такую как


/usr/bin/zip, то злоумышленник может заменить настоящую программу zip
на троянскую программу, которая нарушит защиту системы и повредит фай
лы и каталоги. Поэтому необходимо проверять, имеют ли файлы программ в
системе надлежащие полномочия. Необходимо регулярно запускать утилиту
COPS, чтобы выявлять нарушения защиты (подробнее о COPS см. в главе 18).
*
Задание используемых по умолчанию
полномочий файлов для FTP
Если для пересылки файлов на сервер многие пользователи используют
FTP, то можно контролировать используемое по умолчанию значение umask
для сервера FTP, чтобы файлы одного пользователя были недоступны друго
му. Например, если нужно так указать полномочия, чтобы читать загружен
ный на Webсервер с помощью FTP файл смогли только пользователь и его
группа, то следует изменить строку in.ftpd в файле /etc/inetd.conf. Эта стро
ка по умолчанию выглядит так:
ftp stream tcp nowait root /usr/sbin/tcpd in.ftpd 1 a
Чтобы задать используемое по умолчанию значение umask для всех фай
лов, загружаемых на сервер с помощью FTP, необходимо добавить аргумент
и с соответствующим значением umask. Например, чтобы задать полномо
чия 640 (rwr—) для каждого загружаемого на сервер файла, можно присво
ить umask значение 026. Поэтому измените предыдущую строку следующим
образом:
ftp stream tcp nowait root /usr/sbin/tcpd in.ftpd $1 $a $u026
Перезапустите сервер inetd (killall HUP inetd) и перешлите файл с помо
щью FTP, используя учетную запись пользователя, а затем проверьте прави
льность установки полномочий.
Это полезно в системах, которые действуют как Webсерверы для множе
ства разных клиентов. Если один клиент не должен видеть файлы другого
клиента, используйте эту возможность вместе со специальным заданием вла
дельца. Предположим, что все файлы Webклиентов хранятся в разделе или
каталоге /www, где каждый клиентский узел имеет свой собственный каталог

www.books-shop.com
66 Глава 4

(например, /www/myclientl, /www/myclient2 и т.д.). Для каждого клиента,


вероятно, уже выделена учетная запись FTP для загрузки файлов в эти катало
ги. Теперь, чтобы запретить клиенту просмотр файлов другого клиента, ис
пользуйте umask, как описано для сервера FTP, и измените также владельца
каждого клиентского сайта следующим образом:
chown $R <клиент.пользователь_Web$сервера> </www/каталог_клиента>
Например, если Webсервер выполняется как «httpd» и присутствует поль
зовательклиент с именем myclient, тогда предыдущая команда будет выгля
деть следующим образом:
chown $R myclient.httpd /www/myclient
Эта команда изменит владельца каталога /www/myclient вместе со всеми
его подкаталогами и файлами на myclient (пользователь) и httpd (группа).
Это делается, чтобы разрешить пользователюклиенту владеть, модифициро
вать и удалять свои файлы, а также позволит Webсерверу читать файлы в ка
талоге. Однако, чтобы запретить это всем остальным, необходимо изменить
полномочия следующим образом:
chmod $R 2770 <www/каталог_клиента>
Для текущего примера реальная команда выглядит таким образом:
chmod $R 2770 /www/myclient
Эта команда задает полномочия всех файлов и каталогов для /www/inycli
ent равными 2770, что позволяет владельцу (myclient) и пользователю
Webсервера (httpd) читать, писать и выполнять данные файлы/каталоги.
Она также гарантирует, что после создания новые файлы получат такие пол
номочия, которые позволят Webсерверу читать эти файлы. Это делается с
помощью разряда setGID (2).

Работа с файлами и каталогами


В этом разделе будет показано, как работать с файлами, используя различ
ные служебные программы системы Red Hat Linux.

Просмотр файлов и каталогов


Команда Is широко используется на любой UNIX или UNIXподобной
платформе. Наиболее часто используемыми параметрами для Is являются 1
(длинный список), а (все файлы, включая имена файлов, начинающиеся с
точки), 1 (список в один столбец только из имен файлов) и R (рекурсивный
список).

Навигация и перемещение в каталогах


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

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


В отличие от операционной системы Microsoft Windows, Linux не полага
ется на расширения файлов для определения типа файла. Чтобы определить
тип файла, можно воспользоваться утилитой file. Например:
file /usr/bin/file
Эта команда покажет, каким типом файла является (сам) файл
/usr/bin/file. Вот пример результата выполнения команды:
/usr/bin/file: ELF 32$bit LSB executable, Intel 80386, \
version 1, dynamically linked, not stripped

www.books-shop.com
Файлы и устройства UNIX 67

Просмотр статистики доступа к файлу или каталогу


Можно использовать программу stat, чтобы получить статистику о файле
или каталоге. Например:
stat /tmp
покажет статистику доступа к каталогу /tmp. Вот пример вывода результата:
File: "/tmp"
Size: 2048 Filetype: Directory
Mode: (1777/drwxrwxrwt) Uid: ( 0/ root) Gid: (
0/ root)
Device: 3,0 Inode: 16321 Links: 22
Access: Sun Feb 7 02:00:35 1999(00000.00:01:11)
Modify: Sun Feb 7 02:01:01 1999(00000.00:00:45)
Change: Sun Feb 7 02:01:01 1999(00000.00:00:45)
Копирование файлов и каталогов
Для копирования файлов из одного места в другое используется команда ср.
Например:
ср /some/important.txt /new/place/
Эта команда копирует файл important.txt из каталога /some в каталог
/new/place. Можно также указать имя файла в новом месте. Обычно для ср
используется параметр f, который позволяет принудительно скопировать
файл в то место, где существует другой файл с таким же именем. Например:
р $f /some/important.txt /new/place
Эта команда копирует файл important.txt, даже если файл с таким же име
нем уже существует в каталоге /new/place.
Чтобы скопировать каталог вместе со всеми его файлами и подкаталога
ми, используйте:
ср $г <каталог$источник> <каталог$получатель>
Например:
ср г /tmp/foo /zoo/foo
Перемещение файлов и каталогов
Чтобы переместить файлы и каталоги, используйте команду mv. Например:
mv /filel /tmp/file2
Эта команда перемещает /filel в /tmp/file2. Аналогично можно перемес
тить каталог вместе со всем его содержимым. Обратите внимание, что mv не
перемещает каталоги между различными файловыми системами. Чтобы это
сделать, используйте для копирования каталога в новую файловую систему
команду ср с параметром г, а затем удалите каталог (см. ниже) в текущем месте.
Удаление файлов и каталогов
Чтобы удалить файл или каталог, используйте команду rm. Например:
rm filename
Эта команда удаляет файл. Если используется оболочка /bin/tcsh, можно
взять псевдоним rm, заданный следующим образом:
alias rm rm $i
В этом случае параметр i заставляет команду вывести предупреждение,
прежде чем действительно чтото удалить. Можно явно использовать пара
метр i. С другой стороны, можно применить параметр f, чтобы выполнить
принудительное удаление.
Для удаления каталога, необходимо указать параметр г. Например:

www.books-shop.com
68 Глава 4

rm $rf directory
Эта команда удаляет все файлы и подкаталоги внутри указанного каталога.
Поиск файлов
Для того чтобы найти файл, можно использовать различные команды.
Чтобы найти точный путь доступа программы, можно использовать команду
which. Например:
which httpd
Эта команда покажет полностью определенное (специфицированное)
имя пути доступа программы httpd, если она вообще доступна. Некоторые
оболочки имеют встроенную команду which, а другие используют
/usr/sbin/which.
Можно также найти файл или каталог программой locate по частичному
или полному имени. Например:
locate netpr.pl
Эта команда будет запрашивать базу данных имен файлов updatedb и воз
вращать все записи, где встретится файл netpr.pl. Чтобы locate работала пра
вильно, необходимо иметь задание сгоп, настроенное на ежедневное или
еженедельное выполнение утилитой updatedb.
Другой очень мощной программой, которую можно использовать для по
иска файлов или каталогов, является find (см. главу 5).
Переопределение используемой по умолчанию
маски полномочий
Системный администратор может задать маску полномочий по умолча
нию в глобальном файле ресурсов для используемой оболочки. Например,
для оболочки /bin/tcsh системный администратор командой umask может
задать в файле /etc/csh.cshrc используемые по умолчанию полномочия фай
лов. Если необходимо переопределить маску используемых по умолчанию
полномочий, можно выполнить umask из командной строки, чтобы изменить
используемую по умолчанию маску. Например:
umask 222

Эта команда задает используемую по умолчанию маску полномочий, разре


шающую только чтение. Другими словами, она отключает полномочия запи
си у пользователя, группы и всех остальных. Она будет также переопределять
системные параметры, используемые по умолчанию для оболочки. Однако
это изменение является временным: если пользователь выйдет из системы и
вновь зарегистрируется в ней, то восстановятся используемые по умолчанию
системные параметры. Если вас не устраивает маска полномочий системы,
сообщите об этом системному администратору и поместите подходящую
команду umask в файл ресурсов оболочки. Например, если необходимо, что
бы маска была равна 222, причем используется оболочка /bin/tcsh, то можно
поместить эту команду в файл /.cshrc, чтобы при каждом входе в систему
umask переопределяла используемые по умолчанию системные параметры.

Использование специальных полномочий


файловой системы ext2
Файловая система ext2, используемая в Red Hat Linux, предоставляет не
которые уникальные свойства. Одно из этих свойств запрещает изменение
файла даже пользователю root. Например:
chattr +i filename
Эта команда задает атрибут «i» файла в файловой системе ext2. Когда за
дан этот атрибут, никто не может изменить, удалить или переименовать
файл. Невозможно также добавить никакие связи для указания на этот файл.
Данный атрибут может быть задан или сброшен только пользователем root и

www.books-shop.com
Файлы и устройства UNIX 69

его можно использовать для защиты от случайных искажений файла. Когда


нужно очистить этот атрибут, выполняется:
chattr $i filename
Другие интересные свойства системы ext2, такие как атрибут undelete,
еще не реализованы, но станут доступны в будущей версии файловой систе
мы ext2. При использовании команды chattr, иногда возникают ситуации,
когда невозможно изменить или удалить файл, хотя полномочия для этого
есть. Это происходит, если ранее с помощью команды chattr был задан атри
бут неизменяемости файла. Так как команда Is этот атрибут не показывает,
возникают странные ошибки. Чтобы увидеть, какие атрибуты ext2 имеют
файлы, можно использовать программу Isattr.

www.books-shop.com
www.books-shop.com
Глава 5

Повседневные команды

В этой главе:

* Командная строка Linux


• Оперативные справочные manстраницы
« Как работают различные команды Linux

перационная система Linux, как и любая другая система UNIX, имеет


сотни команд. Так как практически невозможно запомнить особенности ра
боты каждой команды, в системе существует оперативное справочное руко
водство (известное как manстраницы). Пользователь всегда может увидеть
подробное описание команды на ее manстранице. Однако manстраницы ча
сто бывают не очень понятны и слишком длинны. Большинство из них не со
держит хороших примеров использования. Подробность изложения может
иногда ошеломить. Кроме того, не зная названия команды, невозможно най
ти о ней информацию. Именно поэтому в данной главе собраны команды, ко
торые используются ежедневно. Глава состоит из разделов, чтобы похожие
команды можно было найти под общим заголовком. Например, если нужно
найти команду, которая работает с файлами и каталогами, можно перейти к
разделу «Общие команды для файлов и каталогов», а если нужна команда, ко
торая сжимает файлы, можно посмотреть команды, перечисленные в разде
ле «Команды сжатия и архивации файлов».

Общее представление о командной строке UNIX


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

www.books-shop.com
72 Глава 5

Когда с клавиатуры вводится команда, вся строка называется командной.


Наиболее часто команды используются по одной. Однако командная строка
может содержать несколько команд, если они разделены символом «точка с
запятой». Можно сначала очистить экран, а затем вывести оглавление теку
щего каталога с помощью одной командной строки, вводя:
clear; Is
Сначала дается имя команды, за ним может следовать другая информация.
Объекты, которые следуют за именем программы, называются аргументами.
Например, вводится командная строка:
we $1 doc.txt
В этом примере присутствуют два аргумента, 1 и doc.txt. Программа само
стоятельно определяет, как будут использоваться эти аргументы.
Существуют два типа аргументов: задающие режим работы команды и па
раметры. Режимы команды следуют сразу после имени программы и обычно
имеют в качестве префикса тире (символ «минус»). Параметры идут после ре
жимов команды. В предыдущем примере 1 является режимом, приказываю
щим we подсчитать число строк, a doc.txt — параметром, указывающим, какой
файл будет использован.
При вводе команд в командной строке помните, что аргументы зависят от
регистра символов, так же как и имена файлов в UNIX. Общий синтаксис
команды UNIX:
<имя_команды> <режимы> <параметры>
Основы использования метасимволов
Когда используются команды для работы с файлами и каталогами, можно
использовать специальные символы, называемые метасимволами (wildcards),
для определения шаблонов имен файлов. Например, чтобы перечислить все
файлы в текущем каталоге, которые заканчиваются на .с, используйте:
Is *.с
Символ звездочки является метасимволом. Оболочка интерпретирует
шаблон и заменяет его всеми именами файлов, которые заканчиваются на .с.
Таблица 5.1 демонстрирует наиболее распространенные метасимволы.

•Таблица 5.1.
Широко Метасимвол Значение
используемые * Соответствует любой последовательности из одного или нескольких
метасимволы символов
? Соответствует любому одиночному символу [ ]
[ ] Соответствует одному из заключенных в скобки символов или симво$
лу из указанного диапазона

В таблице 5.2 показано несколько примеров использования метасимво


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

Примеры Пример Значение


использования Jo* Файлы, имена которых начинаются с Jo
метасимволов
Jo*y Файлы, имена которых начинаются с Jo и заканчиваются на у
Ut*l*s.c Файлы, имена которых начинаются с Ut, содержат 1, а заканчиваются на
S.C

?.п Все файлы с именами из одной буквы, за которой следует . h


Doc[0$9].txt Файлы с именами Doc0.txt, Doc1.txt, ... , Doc9.txt
DocO[A$Z]. txt Файлы с именами DocQA.txt, DocOB.txt DocOZ.M

Использование метасимволов упрощает выбор нескольких объектов.

www.books-shop.com
Повседневные команды 73

Основы использования регулярных выражений


Регулярные выражения используются различными командами UNIX. Они
предоставляют удобный и единообразный способ описания шаблонов соот
ветствия. Регулярные выражения похожи на метасимволы, за исключением
тех, которые предоставляют больше возможностей. Они используются неско
лькими командами UNIX, включая ed, sed, awk, grep и в ограниченных преде
лах vi или emacs.
Специальные символы, перечисленные в таблице 5.3, являются типичны
ми для регулярных выражений в целом. Если разобраться с ними, то останет
ся изучить только несколько дополнительных вариантов, кргда понадобится.
Габлица 5.3.
Специальные Символ Значение
символы регулярных Соответствует любому одиночному символу, кроме символа новой строки
выражений Соответствует нескольким предыдущим символам или ни одному из них
Соответствует началу строки
$ Соответствует концу строки
\< Соответствует началу слова
\> Соответствует концу слова
[ ] Соответствует одному из заключенных в скобки символов или диапазона сим$
волов
["] Соответствует любому символу, который не заключен в скобки
Явно взять следующий символ
_^
Внутри регулярного выражения любой символ, не имеющий специально
го значения, изображает сам себя. Например, чтобы найти строки, которые
содержат «foo» в файле data.txt, используйте:
grep foo data.txt
Чтобы найти только те строки в data.txt, которые начинаются со слова
«foo», используйте:
grep "foo' data.txt
Использование одиночных кавычек приказывает оболочке оставить толь
ко символы в кавычках и передать их программе. Одиночные кавычки необ
ходимы при использовании любого из специальных символов.
Знак доллара указывает, что нужно найти соответствие шаблону в конце
строки:
grep 'hello$' data.txt
Результатом поиска соответствия по предыдущему регулярному выраже
нию станут любые строки, заканчивающиеся на «hello».
Чтобы искать по шаблону, который начинается с указанного слова, исполь
зуйте \<.
grep '\<ki' data.txt
Предыдущее выражение будет искать в файле data.txt слова, которые на
чинаются с «ki». Чтобы найти образец «wee», но только в конце слова, исполь
зуйте:
grep 'wee\>' data.txt
В таблице 5.3 обратите внимание, что точка будет соответствовать любо
му одиночному символу за исключением символа новой строки. Это удобно,
когда нужно найти все строки, содержащие букву «С», за которой следуют два
символа и заканчиваются на «s». В данном случае регулярное выражение та
ково:
grep 'С..s' data.txt

Ⱦɚɧɧɚɹɜɟɪɫɢɹɤɧɢɝɢɜɵɩɭɳɟɧɚɷɥɟɤɬɪɨɧɧɵɦɢɡɞɚɬɟɥɶɫɬɜɨɦ%RRNVVKRS
ɊɚɫɩɪɨɫɬɪɚɧɟɧɢɟɩɪɨɞɚɠɚɩɟɪɟɡɚɩɢɫɶɞɚɧɧɨɣɤɧɢɝɢɢɥɢɟɟɱɚɫɬɟɣɁȺɉɊȿɓȿɇɕ
Ɉɜɫɟɯɧɚɪɭɲɟɧɢɹɯɩɪɨɫɶɛɚɫɨɨɛɳɚɬɶɩɨɚɞɪɟɫɭpiracy@books-shop.com
74 Глава 5

Это выражение будет соответствовать образцам: «Cats», «Cars» и «Cris»,


если они содержатся в файле data.txt.
Если нужно определить диапазон символов, используйте дефис для разде
ления начала и конца диапазона. При определении диапазона порядок дол
жен быть тот же самый, что и в коде ASCII. Например, чтобы найти все
строки, содержащие «В», за которой следует любая одиночная буква нижнего
регистра, используйте:
grep 'B[a$z]' data.txt
Можно определить в одном шаблоне несколько диапазонов символов.
grep 'B[A$Za$z]' data.txt
Предыдущий пример будет выбирать все строки, содержащие букву «В»,
за которой следует буква верхнего или нижнего регистра.

Использование оперативного
справочного руководства
Оперативные manстраницы (man сокращение от manual — справочник)
разбиты на восемь основных разделов, как показано в таблице 5.4. Эти разде
лы содержат большинство версий UNIX. Раздел 1 специфицирует большую
часть команд UNIX. Многим пользователям достаточно только этого раздела
справочника. Разделы 2, 3, 4 и 5 из справочника UNIX представляют интерес
только для программистов. Раздел 8 предназначен только для системных ад
министраторов.

Разделы справочного Раздел Тема


руководства 1 Исполняемые программы или команды оболочки
2 Системные вызовы (функции, предоставляемые ядром)
3 Библиотечные вызовы (функции системных библиотек)
4 Специальные файлы (обычно находящиеся в /dev)
5 Форматы файлов (т.е. /etc/passd)
6 Игры
7 Различная информация
8 Команды сопровождения

Современные системы UNIX содержат значительно больше справочной


информации, чем их предшественники. Стали привычными разделы, разде
ленные на подразделы. Например, раздел 6 предоставляет справку об играх.
Однако существует раздел 6а (о приключенческих играх), раздел 6с (о класси
ческих играх) и т.д.
Команда man позволяет просматривать оперативные справочники. Син
таксис этой команды:
man [$k] [секция] <ключевое_слово>
<Ключевое_слово> обычно является именем программы, утилиты или функ
ции. По умолчанию выполняется поиск во всех доступных разделах по предо
пределенному порядку, причем выводится только первая найденная
страница, даже если ключевое слово присутствует в нескольких разделах.
Так как команды могут появляться в нескольких разделах, первая найден
ная страница может оказаться не той manстраницей, которая нужна. Приме
ром является команда printf.
Предположим, что мы пишем программу и хотели бы больше узнать о биб
лиотечной функции ANSI С printf(). Вводя просто
man printf

www.books-shop.com
Повседневные команды 75

получим информацию о printf. Однако manстраница для функции printf опи


сывает команду оболочки printf. Очевидно, что это не та информация, кото
рая нужна. Разумным решением было бы перечисление всех разделов, ,
содержащих функцию printf (если она существует в нескольких разделах), и
выбор подходящей. Можно искать ключевые слова на manстраницах с помо
щью параметра k:
man $k printf
fprintf printf (3b) $ formatted output conversion
fprintf printf (3s) $ print formatted output
printf printf (1) $ write formatted output
printf printf (3b) $ formatted output conversion
printf printf (3s) $ print formatted output
В скобках указан номер раздела, в котором можно найти представленное
справа описание. Функция printf, интересующая нас, является библиотечной.
Она может находиться в разделе 3 (из таблицы 5.4) или в специальной сек
ции ЗЬ или 3s, как видно из вывода команды. Чтобы задать конкретный раз
дел manстраницы, мы указываем ее в командной строке man:
man 3b printf
Теперь мы получим правильную информацию, которую ищем!

Команды для работы с файлами и каталогами


В этом разделе речь идет о командах для работы с файлами и каталогами,
которые, скорее всего, будут использоваться ежедневно.
cat
Синтаксис:
cat <файл> [>|>] [файл$получатель]
Команда cat выводит содержимое файла на stdout (поток стандартного вы
вода. — Прим. ред.). Полезно проверить содержимое файла, используя коман
ду cat. Аргумент, передаваемый в cat, является файлом, который необходимо
просмотреть. Чтобы увидеть содержимое файла name, выполним:
cat name
Kiwee
Joe
Ricardo
Charmaine
Команда cat может соединить в один несколько существующих файлов:
cat name"! name2 патеЗ > allnames
Этот пример соединяет файлы с именами namel, name2 и патеЗ, чтобы
создать файл allnames. Порядок соединения устанавливается порядком фай
лов, вводимых в командной строке.
Используя cat, можно добавлять файл к другому существующему файлу.
Например, если в предыдущей команде не добавлен names4, то можно устра
нить ошибку и получить нужный результат, выполнив
cat names4 » allnames
что добавит names4 в allnames.
chmod
Синтаксис:
chmod [R] <режим_полномочий> <файл или каталог>
Эта команда используется для изменения режима полномочий файла или
каталога. Режим полномочий определяется как трех или четырехзначное во
сьмеричное число. Например:

www.books-shop.com
76 Глава 5

chmod 755 myscript.pl


Команда изменяет полномочия сценария myscript.pl на 755 (rwxrxrx), что
позволяет владельцу файла читать, записывать и выполнять, но всем осталь
ным — только читать и выполнять. Вот другой пример:
chmod $R 744 public_html
Эта команда будет изменять полномочия каталога public_html и всего его
содержимого (файлов и подкаталогов) на 744 (nvxr—г—), что относится к ти
пичным полномочиям для личных каталогов Web, к которым можно полу
чить доступ на рервере Apache, используя URL http://server/~username.
Параметр R приказывает chmod рекурсивно изменять полномочия для всех
! файлов и каталогов в упомянутом каталоге.
chown
Синтаксис:
chown [ $fhR ] <Владелец> [ : Группа ] { Файл . . | Каталог . . . }
Команда chown изменяет владельца файла, указанного параметром
«Файл», на пользователя, указанного параметром «Владелец». Значением па
раметра «Владелец» может быть идентификатор (ID) пользователя или имя
регистрации, находящееся в файле /etc/passwd. При желании можно также
определить группу. Значением параметра «Группа» может быть идентифика
тор (ID) группы или имя группы, которое находится в файле /etc/group.
Только пользователь root может изменить владельца файла. Изменить
группу файла может пользователь root или владелец этого файла. Владелец
файла, не являющийся пользователем root, может изменить группу только на
ту группу, членом которой он является. Таблица 5.5 содержит параметры
команды chown.

Параметр Описание
$f Подавляет все сообщения об ошибках, кроме сообщений об использовании
$л Изменяет владельца встретившейся символьной ссылки, но не владельца фай$
ла или каталога, на которые она указывает
$В Спускается рекурсивно по каталогам, изменяя владельца для каждого файла.
Когда встречается символьная ссылка, которая указывает на каталог, изменяет$
ся владелец этого каталога, но блокируется дальнейшее распространение из$
менения

Следующий пример изменяет существующего владельца файла на другого


пользователя:
chown bert hisfile.txt
clear
Синтаксис:
clear
Команда clear очищает терминал и возвращает приглашение командной
строки в верхнюю часть экрана.
стр
Синтаксис:
cmp [Is] filel file2
Эта команда будет сравнивать содержимое двух файлов. Если различий
между ними нет, стр по умолчанию ничего не выводит.
Чтобы продемонстрировать это, пусть файл filel.txt содержит:
this is file 1
the quick brown fox jumps over the lazy dog.

www.books-shop.com
Повседневные команды 77

и файл file2.txt содержит:


this is file 2
the quick brown fox jumps over the lazy dog.
Единственное различие между двумя файлами заключено в последнем
символе первой строки. В одном файле символом является «1», а в другом
файле — «2».
стр file1.txt file2.txt
file1.txt file2.txt differ: char 14, line 1
стр правильно идентифицировала символ 14, строки 1 как несовпадаю
щий символ двух файлов. Параметр 1 будет печатать номер байта и различаю
щиеся значения байтов файлов.
стр 1 file1.txt file2.txt
14 61 62
Результаты этого примера показывают, что в байте 14 есть различие, при
этом первый файл имеет восьмеричное 61, а второй файл имеет в этом месте
восьмеричное 62.
Наконец, команда с параметром s не будет ничего показывать. Параметр
s будет возвращать только статус выхода, указывающий на сходство между
файлами. Если файлы одинаковы, то возвращается 0 (ноль). Если файлы раз
личны, то возвращается 1. Наконец, когда происходит ошибка, возвращается
число > 1 (больше чем 1).
ср
Синтаксис:
ср [R] <исходный файл или каталог> <файл или каталог>
1
Используйте команду ср, чтобы сделать точную копию файла. Команда ср
требует по крайней мере два аргумента. Первым является'файл, который
нужно скопировать, а второй аргумент — это место или имя файла. Если вто
рой аргумент определяет существующий каталог, ср скопирует исходный
файл в этот каталог с именем файла приемника.
ср main.с main.c.bak
Этот пример копирует существующий файл main.с и создает новый файл,
называемый main.c.bak в том же каталоге. Эти два документа будут идентич
ными, бит в бит.
cut
Синтаксис:
cut [$cdf список] <файл>
Команда cut извлекает столбцы данных. Данные могут быть в байтах, сим
волах или полях из каждой строки файла. Например, файл с именем names
содержит информацию о группе людей. Каждая строка содержит данные об
одном человеке:
Fast Freddy:Sacramento:СА:111$111$1111
Joe Some:Los Angeles:CA:222$222$2222 '
Drake Snake:San Francisco:CA:333$333$3333
Bill Steal:New York:NY:444$444$4444
Чтобы перечислить имена и телефонные номера всех людей из файла, до
статочно указать параметры f и d:
cut $f 1,4 $d : names
Fast Freddy:1111111111
Joe Some:2222222222
Drake Snake:3333333333

www.books-shop.com
78 Глава 5

Bill Steal: 4444444444


Параметр «f список» определяет поля, которые выбираются для вывода.
Поля указываются параметром d. В последнем примере d : означает, что
каждое поле отделено двоеточием. Использование : в качестве ограничителя
поля делает поля 1 и 4 полями «имя» и «номер телефона».
Для показа содержимого определенного столбца используйте параметр
«с список».
cut с 15 names
Fast
Joe
Drake
Bill
Последний пример показывает, как вывести только столбцы символов с 1
по 5 в файле с именем names.
diff
Синтаксис:
diff [iqb] <file1> <file2>
Команда diff используется для определения различий между файлами
и/или каталогами. По умолчанию diff не создает никакого вывода, если фай
лы идентичны.
Команда diff отличается от команды стр способом, которым сравнивают
ся файлы, diff сообщает о различиях между двумя файлами построчно, а стр
сообщает о различиях между двумя файлами посимвольно. В результате diff
лучше подходит для сравнения двоичных файлов. Для текстовых файлов стр
в основном используется, когда необходимо знать, одинаковы файлы или
нет.
Чтобы проиллюстрировать различие между посимвольным и построчным
сравнением, представьте, что произойдет, если в начало файла будет добав
лен единственный символ новой строки. Если этот файл затем сравнивается
с другим во всех отношениях идентичным файлом за исключением отсутст
вия символа новой строки в начале, diff сообщит, что к файлу была добавлена
пустая строка, в то время как стр укажет, что два файла различаются практи
чески всеми символами.
Обычный формат вывода состоит из одного или нескольких фрагментов
различий; каждый фрагмент показывает одну область различий между файла
ми. Типичный формат фрагмента выглядит так:
Команда изменения (change$command)
< от строки файла
< от строки файла.

> до строки файла


> до строки файла.
Существуют три типа команд изменения. Каждая команда состоит из но
мера строки или разделенного запятыми диапазона строк в первом файле,
одной буквы, указывающей вид выполняемого изменения и номера строки
или разделенного запятыми диапазона строк во втором файле. Все номера
строк являются первоначальными номерами строк в каждом файле. Типы
команд изменения:
• 'lar' Добавляет строки в диапазоне г второго файла после строки 1
первого файла. Например, '8а12Д5' означает добавить строки 1215
второго файла после строки 8 первого файла; или, если преобразовы
вать второй файл в первый, — удалить строки 1215 второго файла.
• ' f ct ' Заменяет строки в диапазоне f первого файла строками в диа
пазоне t второго файла. Это похоже на объединенное добавление и

www.books-shop.com
Повседневные команды 79

удаление, но более компактно. Например, '5,7с8,10' означает изме


нить строки 57 первого файла на строки 810 второго файла; или, если
преобразовывать второй файл в первый, — изменить строки 810 вто
рого файла на строки 57 первого файла.
• ' rdl' Удаляет строки в диапазоне г из первого файла; строка 1 соот
ветствует месту, где они должны были бы появиться во втором файле,
если бы они не были удалены. Например, '5,7d3' означает удалить
строки 57 первого файла; или, если преобразовывать второй файл в
• первый файл, — добавить строки 57 первого файла после строки 3 вто
рого файла.
Пусть a.txt содержит
а
b
с
d ,
е ,

и b.txt содержит
с
d
е
f
g
Команда diff выведет:
1,2dO
< а
< b
5а4,5
> f
> g
Команда diff формирует результат, показывающий, как различаются фай
лы и что необходимо сделать, чтобы файлы стали идентичными. Обратите
внимание, что 'с' является первым общим символом двух файлов. Первая
строка равна l,2dO. Это интерпретируется как удаление строк 1 и 2 первого
файла (строки а и Ь). Четвертая строка показывает 5а4,6. Здесь 'а' означает
«добавить». Если строки с 4 по б второго файла добавить после строки 5 пер
вого файла, то файлы станут идентичны.
Команда diff имеет несколько часто используемых параметров. Пара
метр i игнорирует изменения регистра символов. Команда diff i рассматри
вает символы верхнего и нижнего регистров как эквивалентные. Параметр q
сообщает, различаются ли вообще файлы.
diff $q a.txt b.txt
Files a.txt and b.txt differ
Параметр b игнорирует изменения в пробелах. Фраза «the foo» будет эк
вивалентна «the foo», если используется параметр Ь.
du
Синтаксис:
du [$ask] <имена файлов>

Эта команда предоставляет итоговую информацию об использовании дис


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

www.books-shop.com
80 Главе .

итоговое значение. Другим полезным параметром является k. Этот параметр


приводит к выводу размеров всех файлов в килобайтах. Далее представлены
несколько примеров использования различных параметров:
du $a
247 ./util$linux_2.9e$0.1.deb
130 ./Iibncurses4_4.2$2.deb
114 ./slangl_1.2.2$2.deb
492
du $s
492 .
emacs
Программа emacs, полноэкранный текстовый редактор, является одним
из лучших текстовых редакторов. Он известен своей гибкостью и мощно
стью, а также неумеренным использованием ресурсов. Мощность emacs до
стигается не простой ценой. Существует необходимая процедура обучения,
которая Требует терпения и еще раз терпения. Для выполнения некоторых
действий могут использоваться комбинации, состоящие из четырех последо
вательных клавиш.
Однако emacs может делать почти все. Помимо основных операций редак
тирования, emacs поддерживает выделение синтаксиса, макросы, одновре
менное редактирование множества файлов, проверку правописания, почту,
FTP и многие другие свойства.
При чтении документации по emacs часто встречаются такие слова как
metaKey и Сх. Metakey является метаклавишей (если она есть на клавиатуре),
В других случаях обычно используется клавиша Esc. Сх определяет синтаксис
для совместного нажатия Ctrl с клавишей х. Любая комбинация «С» имеет от
ношение к клавише Ctrl.
Для нового пользователя важнее всего две комбинации клавиш emacs —
Сх Сс и Ch Ch. Первая комбинация служит для выхода из emacs. Многие
люди отказалось от emacs просто потому, что в первый раз не смогли выйти
из программы. Ch Ch дает оперативную справку, объясняющую операции
редактора и предоставляющую подробную информацию о его командах. Таб
лица 5.6 показывает наиболее часто используемые команды emacs.
fgrep
Команда fgrep была создана, чтобы ускорить поиск по сравнению с про
граммой grep. Однако она может искать только точно указанные символы, а
не общие спецификации. Имя fgrep означает «fixed character grep» (grep для
определенных символов). В настоящее время компьютеры и память работа
ют достаточно быстро, поэтому необходимость в fgrep возникает редко.
file
Синтаксис:
file <имя файла>
Команда file определяет тип файла. Если файл не является стандартным,
его тип файла не определен. Именно так определены типы файлов — каталог,
FIFO, блочный специальный и символьный специальный. Если файл являет
ся стандартным и его длина равна нулю, он считается пустым.
Если файл является текстовым, file проверяет первые 512 байт и пытается
определить язык программирования. Если файл является выполняемым
a.out, file печатает номер версии при условии, что он больше 0.
file main. С
main. С: с program text
find
Синтаксис:
find [путь] [$type fdl] [$name шаблон] [$atime [+$] число дней]

www.books-shop.com
Повседневные команды ... .**'

Наиболее часто Команда Результат


используемью Cv Переместиться вперед на один полный экран
команды emacs
M$v Переместиться назад на один полный экран
С$р Переместить курсор на предыдущую строку
С$п Переместить курсор на следующую строку
C$f Переместить курсор вправо на одну позицию
C$b Переместить курсор влево на одну позицию
M$f Переместиться на одно слово вперед
M$b Переместиться на одно слово назад
C$a Переместиться к началу строки
C$e Переместиться к концу строки
M$a Переместиться назад к началу предложения
M$e Переместиться вперед к концу предложения
<0etete> Удалить символ перед курсором
C$d Удалить следующий символ после курсора
M$<Detete> Удалить слово непосредственно перед курсором
M$d Удалить слово, следующее после курсора
Ck Удалить от позиции курсора до конца строки
M$k Удалить до конца текущего предложения
C$x Отменить предыдущую команду
C$xC$f Открыть другой файл
Cx Cs Сохранить текущий файл
C$x C$w Сохранить текущий файл под другим именем
Cxs Сохранить все буферы, которые были недавно изменены
Cx Cc Выход из emacs

[$exec команда {} \ ;] [$empty]


Команда find ищет файлы и каталоги. Например:
find . $type d
Команда find возвращает имена всех подкаталогов текущего каталога. Па
раметр type равен d (для каталогов), f (для файлов) и 1 (для связей).
find . $type f $name "*.txt"
Эта команда найдет в текущем каталоге (включая подкаталоги) все тексто
вые файлы, заканчивающиеся расширением .txt.
find . $type f $name "*.txt" $exec grep $1 'magic' {} \;
Эта команда будет искать во всех текстовых файлах с расширением .txt в
текущем каталоге, включая все его подкаталоги, ключевое слово «magic» и
возвращать имена таких файлов (так как 1 используется с командой grep).
find . $name "*.gif" $atime $1 $exec Is $1 {> \;
Эта команда будет искать все файлы GIF, к которым был доступ за послед
ние 24 часа, и покажет информацию о них с помощью команды Is I.
find . $type f $empty
Эта команда покажет все пустые файлы в иерархии текущего каталога.
grep
Синтаксис:
grep [$viw] <шаблон> <файл(ы)>

www.books-shop.com
82 • Глава 5

Команда grep позволяет искать в одном или нескольких файлах опреде


ленную комбинацию символов. На экран терминала выводится каждая строка
каждого файла, которая содержит эту комбинацию. Команда grep полезна,
когда в нескольких файлах необходимо найти определенные слова или фразы.
Используя параметр v, можно выполнить обратное действие. Например,
если нужно выбрать строки в data.txt, которые не содержат слово «the»:
grep $vw 'the' data.txt
Если бы не было параметра w, то подошло бы любое слово, содержащее
«the», такое как «toge[the]r». Параметр w определяет, что комбинация дол
жна быть целым словом. Параметр i игнорирует при Поиске различия между
символами верхнего и нижнего регистров.
Большая часть гибкости grep проистекает из того факта, что можно опре
делять не только точные символы, но более общие комбинации для поиска.
Для этого необходимо использовать «регулярные выражения».
head
Синтаксис:
head [$счетчик | $п число] имя файла
Эта команда покажет первые несколько строк файла. По умолчанию выво
дятся первые 10 строк файла. Однако можно использовать специальный па
раметр для определения иного значения.
head $2 doc.txt
и Outline of future projects
» Last modified: 02/02/99
Этот пример показывает, как увидеть первые две строки текстового фай
ла doc.txt.
In
Синтаксис:
In [$s] <исходный_файл> <место_назначения>
In создает два типа связей (ссылок), жесткие и мягкие. Связь можно счи
тать дополнительным именем файла. Когда связь создана, она неотличима от
первоначального файла. Файл, который имеет жесткие связи, невозможно
удалить с жесткого диска, пока не удалены все связи. Жесткие связи создают
ся без параметра s.
In ./www . /public_html
Однако жесткая связь имеет ограничения. Жесткая связь не может соеди
няться с другим каталогом и с файлом в другой файловой системе. Используя
параметр s, можно создать мягкую связь, которая снимает эти ограничения.
In $s /dev/fs02/jack/www /dev/fs01/foo/public_html
Здесь создается мягкая связь между каталогом www файловой системы fs02
и вновь созданным в файловой системе fsOl файлом public_html .
locate
Синтаксис:
locate <ключевое_слово>
Команда locate устанавливает путь доступа к определенному файлу или
команде и находит точное соответствие или подстроку. Например:
locate foo
/usr/lib/texmf/tex/latex/misc/footnpag. sty
/usr/share/automake/footer. am
/us r/sha re/games/ fоrtunes/f ood
/usr/share/games/fortunes/food,dat

www.books-shop.com
Повседневные команды 83

/usr/share/gimp/patterns/moonfoot.pat ;
Результат работы locate будет содержать ключевое слово «foo» в абсолют
ных путях доступа или вообще ничего не покажет.
Is
Синтаксис:
Is [$laR1] <файл или каталог>
Команда Is позволяет выводить список файлов и подкаталогов указанного
каталога. Это одна из наиболее часто используемых программ. Когда она ис
пользуется с параметром 1, выводятся только имена файлов и каталогов в те
кущем каталоге; когда используется параметр 1, выводится длинный список,
содержащий информацию о полномочиях файлов/каталогов, размер, дату
изменения и т.д.; параметр а позволяет увидеть все файлы и каталоги (вклю
чая те, которые имеют ведущую точку в своих именах) в текущем каталоге; па
раметр R позволяет команде рекурсивно выводить содержимое
подкаталогов, если они существуют.
mkdir
Синтаксис:
mkdir <каталог . . $ . > '
При создании каталога используется команда mkdir. Существуют только
два ограничения на выбор имени каталога: (1) имена файлов могут быть дли
ной до 255 символов и (2) имена каталогов могут содержать любые символы,
кроме /.
fflkdir dirl dir2 dir3
Этот пример создаст три каталога, все в текущем каталоге, при условии,
что в текущем каталоге предоставлены полномочия для записи.
mv
Синтаксис:
mv [$if] <исходный_файл> <файл_получатель>
Используйте команду mv для перемещения или переименования катало
гов и файлов. Команда будет выполнять перемещение или переименование в
зависимости от того, является <файл_получателъ> существующим каталогом
или нет. Чтобы проиллюстрировать это, переименуем существующий ката
лог с именем foo в foobar.
mv foo foobar
Так как foobar еще не существует как каталог, foo будет переименован в
foobar. Если выполняется команда: ,, 
mv doc.txt foobar
и foobar является существующим каталогом, будет выполнено перемещение.
Файл doc.txt будет теперь располагаться в каталоге foobar.
Параметр f будет удалять существующие файлы в месте назначения без
предупреждения пользователя. Параметр i будет спрашивать у пользователя,
нужно ли перезаписать каждый файл в месте назначения, когда такой файл
уже существует. Если ответ не начинается с «у» или «Y», файл будет пропу
щен.
pico
Синтаксис:
pico [имя файла]
Это полноэкранный текстовый редактор, который хорошо подходит для
пользователей, переходящих на Linux из среды DOS или Windows.

Ⱦɚɧɧɚɹɜɟɪɫɢɹɤɧɢɝɢɜɵɩɭɳɟɧɚɷɥɟɤɬɪɨɧɧɵɦɢɡɞɚɬɟɥɶɫɬɜɨɦ%RRNVVKRS
ɊɚɫɩɪɨɫɬɪɚɧɟɧɢɟɩɪɨɞɚɠɚɩɟɪɟɡɚɩɢɫɶɞɚɧɧɨɣɤɧɢɝɢɢɥɢɟɟɱɚɫɬɟɣɁȺɉɊȿɓȿɇɕ
Ɉɜɫɟɯɧɚɪɭɲɟɧɢɹɯɩɪɨɫɶɛɚɫɨɨɛɳɚɬɶɩɨɚɞɪɟɫɭpiracy@books-shop.com
84 Глава 5

pwd
Синтаксис:
pwd
Эта команда выводит текущий рабочий каталог. Для каталогов выводятся
абсолютные пути. Ни один из показанных каталогов не будет жесткой или
мягкой символьной связью.
pwd /home/usr/charmaine
rm
Синтаксис:
rm [$rif] <каталог/файл>
При удалении файла или каталога используется команда rm. Здесь пред
ставлены некоторые примеры:
rm doc.txt
rm "/doc.txt
rm /tmp/f oobar.txt
Чтобы удалить с помощью rm несколько файлов, можно использовать ме
тасимволы или вводить каждый файл отдельно. Например:
rm doc1.txt 'doc2.txt doc3.txt
эквивалентна:
rm doc[l$3].txt
rm — мощная команда, которая при неправильном использовании может
вызвать полный хаос. Например, на диске записана диссертация, над кото
рой пользователь старательно работал в течение последних шести месяцев.
Он решил удалить с помощью rm все файлы типа doc, считая, что находится
в другом каталоге. После того как обнаружится, что не существует файла ре
зервной копии и станет ясно, что нет никаких путей для его восстановления,
пользователю захочется узнать, как избежать таких ошибок в будущем.
Команда rm имеет параметр i, который делает rm интерактивной. Перед
удалением любого файла пользователю выводится приглашение на подтверж
дение операции. Например:
rm $i * . doc
rm: remove thesis.doc (yes/no)? n
Параметр i обеспечивает пользователю средство спасения. На его усмот
рение оставлено право сохранить файл (ответ по) или пострадать от послед
ствий (ответ yes). Параметр (f является полной противоположностью.
Параметр f (force — заставить) приказывает rm удалить все файлы, которые
определены, несмотря на их полномочия. Используйте параметр f только
когда на 100% уверены, что удаляются ненужные файлы.
Чтобы удалить каталог и все файлы/каталоги внутри него, используйте
параметр г. Команда rm r удалит все поддерево.
rm г documents
Можно объединить параметры г и i:
rm $ri documents
Эта команда будет спрашивать разрешения, прежде чем удалять каждый
файл и каталог.
sort
Синтаксис:
sort t.$rndu] [$о файл_вывода] [файл_ввода/сортированный_файл]

www.books-shop.com
Повседневные команды 85

Назначение этой команды — сортировка. Однакоjsort также объединяет


файлы. Команда sort будет читать файлы, которые содержат ранее отсорти
рованные данные, и сливать их в один большой отсортированный файл.
Простейший способ использования sort состоит в сортировке одного фай
ла и выводе результата на экран. Пусть a.txt содержит:
Ь
С
а
d
Чтобы отсортировать a.txt и показать результаты на экране, выполните:
sort a.txt
а
b
С
d
Для сохранения отсортированных результатов используйте параметр о:
sort (о sorted.txt a.txt будет сохранять отсортированный файл a.txt в файле sor
ted, txt. Чтобы использовать sort для слияния существующих отсортирован
ных файлов в один файл и сохранить вывод в sorted.txt, можно было бы
использовать:
sort $о sorted.txt a.txt b.txt. с.txt
Параметр г позволит изменять порядок сортировки на обратный. Поэто
му файл, который содержит в строках буквы алфавита, будет отсортирован
от z до а. ., . ....
Параметр d будет сортировать файлы на основе лексикографического по
рядка. Команда sort будет рассматривать только буквы, цифры и пробелы и
игнорировать другие символы.
Параметр и будет искать идентичные строки и подавлять все кроме од
ной. Поэтому sort создаст только уникальные строки.
stcit
Синтаксис:
stat <файл>
Эта программа показывает разнообразную статистику о файле или катало
ге. Например:
stat foo.txt
Результат выполнения этой команды:
File: "foo.txt" ,
Size: 4447232 Filetype: Regular File
Mode: (0644/$rw$r$r$) Uid: (0/root) Gid: (0/root)
Device: 3,0 "Inode: 16332 Links: 1
Access: Mon Mar 1 21:39:43 1999(00000.02:32:30)
Modify: Mon Mar 1 22:14:26 1999(00000.01:57:47)
Change: Mon Mar 1 22:14:26 1999(00000.01:57:47)
Показаны даты доступа, модификации, изменения файла, информация о
размере, владельце и группе, режим полномочий и т.д.
strings
Синтаксис:
strings <имя_файла>
Команда strings выводит символьные последовательности, которые состо
ят по крайней мере из четырех символов. Эта утилита используется в основ
ном для описания содержимого нетекстовых файлов.

www.books-shop.com
86 Глава 5

tail
Синтаксис:
tail [$счетчик | _fr] <имя_файла>
Команда tail покажет конец файла. По умолчанию tail будет выводить по
следние 10 строк файла. Чтобы увидеть последние 50 строк файла doc.txt, не
обходимо выполнить команду:
tail $50 doc.txt
Параметр г выводит результат в обратном порядке. По умолчанию (г пока
зывает все строки в файле, а не просто 10 последних. Например, чтобы выве
сти все содержимое файла doc.txt в обратном порядке, используйте:
tail $г doc.txt
Чтобы показать последние 10 строк файла doc.txt в обратном порядке, ис
пользуйте:
tail $Юг doc.txt
Наконец, параметр f полезен для мониторинга файла. С помощью этого
параметра tail будет Ожидать, когда в файл будут записаны новые данные. Как
только новые данные добавляются к файлу, tail будет выводить их на экран.
Чтобы отменить мониторинг файла, нажмите Ctrl+C (клавишу intr), посколь
ку сама команда tail не остановится.
touch
Синтаксис:
touch <файл или каталоо

Эта команда обновляет метку времени файла или каталога. Если указан
ный файл не существует, будет создан пустой файл.
umask
См. главу 4, раздел об используемых по умолчанию полномочиях файлов.
uniq
Синтаксис:
uniq [$с] <имя_файла>

Команда uniq сравнивает соседние строки и выводить только одну уника


льную строку. Когда используется параметр с, uniq будет подсчитывать чис
ло вхождений. Файл, который содержит:
а
. а
а
ь
а
обрабатывается uniq следующим образом:
uniq test.txt
а
b
а
Обратите внимание, что были удалены соседние «а», но не все «а» в фай
ле. Эту важную особенность надо помнить при использовании uniq. Если нуж
но найти все уникальные строки в файле text.txt, выполните команду:
sort test.txt I uniq
Эта команда будет сортировать файл text.txt и поместит все похожие стро
ки рядом друг с другом, позволяя uniq вывести только уникальные строки.

www.books-shop.com
Повседневные команды 87
'

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


сетителей зашло на Webсайт. Тогда можно выполнить команду:
awk '{print $1}' access.log | sort | uniq
Эта команда выведет уникальные IPадреса в файл журнала CLF, который
использует Webсервер Apache.
vi
Программа vi является мощным полноэкранным текстовым редактором,
который почти наверняка можно найти в любой системе UNIX. Редактор
(команда) vi не требует много ресурсов для работы. В дополнение к базовым
функциям редактирования, vi может искать, заменять и объединять файлы.
Редактор имеет свой собственный макроязык, а также ряд других дополните
льных свойств.
Для vi существуют два режима работы. Знание и понимание этих режимов
существенно облегчит работу.
Первый режим называется режимом ввода. При нем в документ можно
вводить или добавлять текст.
Второй режим называется командным. Когда vi находится в командном
режиме, можно перемещаться внутри документа, объединять строки, искать
и т.д. Можно выполнять все функции vi из командного режима за исключени
ем ввода текста.
Обычно новички предполагают, что находятся в режиме ввода и начина
ют печатать текст. Но вместо ожидаемого текста видят искалеченный теку
щий документ, поскольку работали в командном режиме.
После запуска vi переходит в командный режим. Можно перейти в режим
ввода, используя одну из следующих команд: [aAiloOcCsSR]. Чтобы вернуться
в командный режим, нажмите клавишу Esc для обычного выхода или нажми
те Interrupt (последовательность клавиш Ctrl+C), чтобы аварийно завершить
работу.
Таблица 5.7 представляет наиболее часто используемые команды vi и их
действие в командном режиме.
WC
Синтаксис:
we [$Iwc] <имя_файла>
Команда we (word count — подсчет слов) считает строки, символы и слова.
Если команда we используется без параметров, вывод покажет всю статисти
ческую информацию о файле. Пусть файл test.txt содержит следующий текст:
the quick brown fox jumps over the lazy dog
we test.txt
1 9 44 test.txt
Результаты сообщают, что существует одна строка с девятью словами, со
держащими 44 символа в файле test.txt. Чтобы показать только число строк,
используется параметр 1. Параметр w выводит только число слов. Параметр
с представит общее число символов.
whatis
Синтаксис:
whatis <ключевое_слово>
Эта команда выводит однострочное описание указанного ключевого сло
ва. Команда whatis идентична вводу команды man f. Например, если нужно
узнать время, но неизвестно, использовать команду time или date, введите:
whatis time date
time time (l) I$ time a simple command
date date (1) $ print the date and time

www.books-shop.com
88 Глава 5

Сводка наиболее Команда Результат


часто используемых Ctrt+D Перемещает окно вниз на половину полного экрана
комакдм Перемещает окно вверх на половину полного экрана
Ctrt+U
Ctrt+F Перемещает окно, вперед на полный экран
СМ+В Перемещает окно назад на полный экран
k или стрелка вверх Перемещает курсор вверх на одну строку
j или стрелка вниз Перемещает курсор вниз на одну строку
I или стрелка вправо Перемещает курсор вправо на один символ
h или стрелка влево Перемещает курсор влево на один символ
Return Перемещает курсор в начало следующей строки
$(минус) Перемещает курсор в начало предыдущей 'строки
w Перемещает курсор в начало следующего слова
b Перемещает курсор в начало предыдущего слова
"или О Перемещает курсор в начало текущей строки
$ Перемещает курсор в конец текущей строки
А Вставляет текст сразу после курсора '
о Открывает новую строку сразу после текущей строки
О Открывает новую строку сразу перед текущей строкой (буква о в верхнем
регистре, а не нуль
х Удаляет символ над курсором
dw Удаляет слово (включая пробел после него)
D или d Удаляет, начиная с курсора и до конца строки
d" (d каре) Удаляет с начала строки до пробела или символа слева
от курсора
dd Удаляет текущую строку
U Отменяет последнее изменение; обратите внимание, что две операции от$
мены будут отменять отмену (ничего не изменилось)
:w Записывает изменения текущего файла и продолжает редактирование
:q! Выходит из vi без сохранения каких$либо изменений
:ZZ Сохраняет текущий файл и выходит из vi

Просматривая результаты, можно увидеть, что нужно использовать


команду date. Команда time в действительности измеряет, сколько времени
потребуется программе или команде для выполнения.
whereis
Команда whereis находит исходный/двоичный код и разделы справочни
ка для указанных файлов. Подставленные имена сначала освобождаются от
ведущих компонентов имени пути доступа и любых (в единственном числе)
символьных расширений файла, таких как .с, .h и т.д. Удаляются префиксы s.,
появляющиеся при использовании системы контроля исходного кода.
whereis Is
Is: /bin/Is /usr/man/man1/ls.l.gz
Этот пример указывает местоположение разыскиваемой команды. Is рас
полагается в каталоге /bin, а соответствующие ей та\пстраницы находятся в
/usr/man/manl/ls.l.gz.
which
Синтаксис:
which <команда>

www.books-shop.com
Повседневные команды 89

Команда which будет показывать путь доступа и любые псевдонимы любой


действительно выполняемой команды.
which df
/usr/bin/df
Этот пример показывает, что команда df распложена в каталоге /usr/bin.
Дополнительно выводится информация о командах оболочки.
which setenv
setenv: shell built$in command.

Команды сжатия файлов и архивации


Команды из этого раздела сжимают, архивируют и пакетируют файлы.
compress .
Синтаксис:
compress [$v] <файл(ы)>
Команда compress будет пытаться уменьшить размер файла, используя
адаптивный алгоритм кодирования LempelZiv. Сжимаемые файлы будут за
меняться файлами с расширением .Z. Использование любого типа сжатия
файлов является важной операцией, так как уменьшение размеров файлов
увеличивает объем доступного дискового пространства. Пересылка файлов
меньшего размера сокращает нагрузку на сеть.
Параметр v (verbose — подробная) покажет сокращение размера каждого
сжатого файла в процентах и сообщит имя нового файла. Здесь представлен
типичный сеанс использования команды compress:
Is $alF inbox
rw  1 username cscstd 194261 Feb 23 20:12 inbox
compress v inbox
inbox: Compression: 37.20%  replaced with inbox. Z
Is alF inbox. Z
$rw $$$$ 1 username cscstd 121983 Feb 23 20:12 inbox. Z
gunzip
Синтаксис:
gunzip [$v] <файл(ы)>
Чтобы восстановить файлы в их первоначальном виде, используйте
команду gunzip. gunzip попытается распаковать файлы, оканчивающиеся рас
ширениями: .gz, gz, .z, z, _z, .Z или tgz.
Параметр v указывает на подробный вывод информации о распаковке
файла.
gunzip $v README. txt.gz
README. txt.gz: 65.0% $ replaced with README.txt
gzip
Синтаксис:
gzip f$rv9] <файл(ы)>
Команда gzip является еще одной программой сжатия. Она известна тем,
что имеет одну из лучших степеней сжатия, но за эту утилиту надо платить.
Иногда она работает медленнее. Файлы, сжатые с помощью gzip, будут заме
няться файлами с расширением .gz.
Параметр 9 обеспечит улучшение сжатия за счет скорости. Параметр v
задает подробный вывод. Размер, общее значение .и степень сжатия указыва
ются для каждого файла. Параметр г будет рекурсивно преобразовывать каж
дый каталог, сжимая все файлы.
Is $alF README.txt

www.books-shop.com
90 Глава 5

rwrr 1 root root 16213 Oct 14 13:55 README.txt


' gzip 9v README.txt
README.txt: 65.0%  replaced with README.txt.gz
Is alF README.txt.gz
rwrr 1 root root 5691 Oct 14 13:55 README, txt.gz
rpm
Синтаксис:
rpm $[ivhqladefUV] [$force] [$nodeps] [oldpackage] <список_пакетов>
Это программадиспетчер пакетов Red Hat. Она позволяет управлять паке
тами RPM, облегчая установку и удаление программного обеспечения.
Чтобы установить новый пакет RPM с именем precioussoftware
1.0.i386.rpm, выполните:
rpm $i precious$software$2.0.i386.rpm
Можно заставить команду rpm стать более многословной, используя ivh
вместо параметра i. Если пакет уже установлен и по какойто причине нужно
сделать повторную установку поверх существующей, необходимо использо
вать параметр—force.
Если программный пакет обновляется, нужно использовать параметр U.
Например:
rpm $Uvh precious$software$1.0.i386.rpm
Команда будет обновлять предыдущую версию пакета precioussoftware до
версии 2.0. Однако если новая версия уже была установлена и необходимо
вернуться назад к предыдущей, rpm выведет сообщение об ошибке. В этом
случае, если все равно нужно продолжать установку, используется пара
метр —oldpackage вместе с параметром U. Это заставит rpm снизить номер
версии программного обеспечения.
Чтобы найти список всех доступных пакетов, установленных в системе,
выполните:
rpm $qa
Чтобы найти, какому пакету принадлежит программа sendmail, выполните:
rpm $q sendmail

Эта команда вернет имя пакета RPM, который использовался для установ
ки sendmail. Чтобы найти, какому пакету принадлежит определенный файл,
такой как /bin/tcsh, выполните:
rpm $qf /bin/tcsh
Данная команда выведет имя пакета упомянутого файла. Если нужно най
ти документацию, которая пришла вместе с файлом, используйте параметр d
вместе с параметром qf. Чтобы перечислить все файлы, связанные с про
граммой или пакетом (например, sendmail), используйте параметр 1, как по
казано здесь:
rpm $ql sendmail
Чтобы убедиться, что установленный пакет никаким образом не был изме
нен, можно использовать параметр V. Например, для проверки, все ли уста
новленные пакеты находятся в исходном состоянии, выполните:
rpm $Va
Этот параметр очень полезен, если стало известно, что один или несколь
ко пакетов могли быть повреждены.
Чтобы удалить пакет, такой как sendmail, выполните:
rpm $e sendmail

www.books-shop.com
Повседневные команды 91

Если окажется, что удаление пакета или программы повлияет на другие


программы, так как они зависят от пакета и его файлов, необходимо опреде
лить, насколько существенно это влияние. Если пакет или программа в любом
случае удаляются, можно использовать параметр —nodeps с параметром е, что
бы заставить команду prm удалить этот пакет.
tar
Синтаксис: .•;••
tar [с] [х] [v] [z] [f имя_файла] <имена файлов или каталогов>
Команда tar позволяет создать архив множества файлов и каталогов в од
ном файле с расширением .tar. Она также позволяет извлекать файлы и ката
логи из такого архивного файла. Например;
tar cf source.tar ».c
Эта команда создаст tarфайл с именем source.tar, который будет содер
жать все файлы текущего каталога с исходным кодом на языке С (заканчиваю
щиеся расширением .с).
tar cvf source.tar *.c
Здесь параметр v позволяет увидеть, какие будут архивироваться файлы.
tar cvzf backup.tar.gz important_dir
Здесь все файлы и подкаталоги каталога important_dir архивируются в
файл с именем backup.tar.gz. Обратите внимание, что этот файл также сжи
мается, поскольку указан параметр z, и создаваемому файлу должно быть при
своено расширение .gz. Часто расширение .tar.gz сокращают до .tgz.
Для того чтобы извлечь архивный файл backup, tar, можно выполнить:
tar xf backup.tar •
Чтобы извлечь сжатый tarфайл (такой как backup.tgz или backup.tar.gz),
можно выполнить: .
tar xzf backup.tgz
uncompress
Синтаксис: ,
uncompress [$v] <файл(ы)>
Когда файл сжат с помощью команды compress, он более не существует в
своей исходной форме. Чтобы преобразовать сжатый файл в его исходную
форму, используйте команду uncompress.
Команда uncompress ожидает получить файл с расширением .Z, поэтому
командная строка «uncompress inbox» эквивалентна «uncompress inbox.Z».
Параметр v выводит подробный отчет:
uncompress $v inbox.Z
inbox.Z: $ replaced with inbox
unzip
Синтаксис:
unzip <файл(ы)>
Эта команда восстановит сжатые файлы с расширением .zip. Эти файлы
могут быть сжаты с помощью команды unzip, работающей на основе програм
мы PKZIP Фила Катца, или любой другой совместимой с PKZIP программы.
uudecode
Синтаксис:
uudecode <файл>

www.books-shop.com
92

Команда uudecode трансформирует преобразованный командой uucnco


de файл в его исходную форму, uudecode создает файл, используя «имя_полу
чателя», определенное командой uuencode, которое можно определить по
первой строке файла, преобразованного командой uuencode.
Чтобы восстановить преобразованный командой uuencode файл в его ис
ходную форму, выполните:
uuencode a.out.txt
В результате из текстового файла a.out.txt получается исполняемый файл
a.out.txt.
uuencode
Синтаксис:
uuencode <входящий_файл> <имя_получателя>
Команда uuencode преобразует двоичный файл в текстовый формат. Это
осуществляется преобразованием двоичного файла в печатные символы
ASCII. Одним из многих применений uuencode является передача двоичного
файла по электронной почте. Файл, преобразованный командой uuencode,
становится большим почтовым сообщением. Получатель сможет сохранить
сообщение и использовать команду uudecode для восстановления двоичного
файла в первоначальном виде.
<Имя_получатеяя> является именем двоичного файла, создаваемого при
применении утилиты uudecode.
uuencode a. out b.out > a.out.txt
Эта команда будет выполнять операцию uuencode над исполняемой про
граммой a.out. <Има_получателя>, которое будет использовать uudecode,
определим как b.out. Версия файла a.out, преобразованного командой uuen
code, будет сохранена в файле a.out.txt.
zip
Синтаксис:
zip [$ACDe9] <файл(ы)>
Эта утилита сжатия будет архивировать файлы в популярный формат, со
вместимый с системами VMS, MSDOS, OS/2, Windows NT, Minix, Atari, Ma
cintosh, Amiga и Acorn RISC OS. Это в основном связано с совместимостью
zip с программой PKZIP Фила Катца. Файлы, сжатые с помощью zip, имеют
расширение .zip.
Команда zip имеет набор параметров, которые изменяются ключами про
граммы. Эта команда может создавать самораспаковывающиеся файлы, до
бавлять комментарии в файлы ZIP, удалять файлы из архива и защищать
архив с помощью пароля.
Это только некоторые из свойств, поддерживаемых zip. Подробное описа
ние можно найти на соответствующей manстранице.

Специальные команды файловых систем


Команды в этом разделе имеют дело с файловыми системами.
dd
Синтаксис:
dd if = <файл_ввода> [conv = тип_преобразования] of = <файл_вывода>
[obs = размер выходного блока]
Программа позволяет преобразовывать формат файла. Например:
dd if=/tmp/uppercase.txt conv=lcase of =/tmp/lowe rcase.txt
Эта команда получит файл /tmp/uppercase.txt и запишет новый файл
/tmp/lowercase.txt, преобразовав все символы в нижний регистр (lease). Что
бы сделать обратное преобразование, можно использовать параметр

www.books-shop.com
Повседневные команды 93

conv=ucase. Однако dd широко используется для записи на гибкий диск фай<


ла образа boot, который уже имеет файловую систему, созданную rnkfs. На<
пример:
dd if=/some/boot.img conv=lcase of=/dev/fdO obs=16k
Эта команда запишет файл /some/boot.img на первом устройстве гибких
дисков (/dev/fdO) блоками размером 16КБ.
df
Синтаксис:
df [$k] <Файловая_система> / <Файл>
Команда df выводит информацию о свободном пространстве смонтиро<
ванных в системе дисковых устройств. Пространство жесткого диска являет<
ся важным ресурсом компьютера и должно тщательно контролироваться.
Неправильное управление пространством жесткого диска может вызвать су<
щественное снижение производительности компьютера.
df
Filesystem 512blocks Free %Used fused %Iused Mounted on
/dev/hd4 49152 25872 48% 2257 19% /
/dev/hd2 1351680 243936 82% 19091 12% /usr
/dev/hd9var 49152 12224 .76% 2917 48% /var
/dev/hd3 57344 52272 9% 125 2% /trap
/dev/lvOO 57344 55176 4% 19 1% /tftpboot
/dev/hd1 163840 16976 90% 1140 6% /home
/dev/fsOl 8192000 6381920 23% 20963 3% /home/fsOl
/dev/fs02 8192000 1873432 78% 72 1% /home/fs02
Чтобы увидеть итоговые данные об использовании дискового пространст<
ва текущей файловой системы, выполните:
df . $ • $ •
Filesystem 512$blocks Free %Used lused %Iused Mounted on
/dev/fs01 8192000 6381920 23% 20963 3% /home/fs01
Обратите внимание, что результаты представлены в 512<байтных блоках.
Параметр <k будет показывать итоговые данные в блоках размером 1024 байта.
df $k .
Filesystem 1024blocks Free %UsecJ lused %Iused Mounted on
/dev/fs01 4096000 3190960 23% 20963 3% /nome/fs01
При использовании параметра <k результаты выглядят совершенно по<дру<
гому. Если вьюод интерпретируется неправильно, можно выйти за пределы
дискового пространства раньше, чем предполагалось.
edquota
См. главу 7, раздел о назначении пользователям дисковых квот.
fdformat
Синтаксис:
fdformat <устройство_гибких_дисков>
Эта программа выполняет низкоуровневое форматирование на устройст<
ве гибких дисков. Например:
fdformat /dev/fdOH1440
Эта команда отформатирует первый гибкий диск (/dev/fdO), используя
формат 1.44МБ.

Ⱦɚɧɧɚɹɜɟɪɫɢɹɤɧɢɝɢɜɵɩɭɳɟɧɚɷɥɟɤɬɪɨɧɧɵɦɢɡɞɚɬɟɥɶɫɬɜɨɦ%RRNVVKRS
ɊɚɫɩɪɨɫɬɪɚɧɟɧɢɟɩɪɨɞɚɠɚɩɟɪɟɡɚɩɢɫɶɞɚɧɧɨɣɤɧɢɝɢɢɥɢɟɟɱɚɫɬɟɣɁȺɉɊȿɓȿɇɕ
Ɉɜɫɟɯɧɚɪɭɲɟɧɢɹɯɩɪɨɫɶɛɚɫɨɨɛɳɚɬɶɩɨɚɞɪɟɫɭpiracy@books-shop.com
94 Глава S

fdisk
См. главу 2.
mkfs
Синтаксис:
mkfs [$t тип_файловой_системы] [$cv] <устройство_или_точка_монтирования>
[блоки]
Эта команда создает новую файловую систему. Например:
mkfs $t ext2 /dev/hda3
Эта команда создает файловую систему типа ext2 в разделе /dev/hda3
первого жесткого диска IDE. Параметр (с заставляет mkfs выполнить провер
ку на наличие плохих блоков прежде чем создавать файловую систему; пара
метр v указывает на подробный вывод результатов.
mkswap
См. главу 2.
mount
Синтаксис:
mount $а [$t тип_файловой_системы] [$о параметр] <устройство> <каталог>
Эта команда монтирует файловую систему. Как правило, параметры мон
тирования для обычно используемых файловых систем хранятся в
/etc/fstab. Например:
/dev/hda6 /intranet ext2 defaults 12
Если эта строка находится в /etc/fstab, можно смонтировать файловую
систему раздела /dev/hda6 следующим образом:
mount /intranet
Та же самая файловая система может монтироваться иначе:
mount $t ext2 /dev/hda6 /intranet
Параметр t используется для определения файловой системы. Чтобы
смонтировать все файловые системы, определенные в /etc/fstab, использу
ется параметр а. Например:
mount $a $t ext2
Эта команда монтирует все файловые системы ext2. Обычно используемы
ми параметрами для ключа о являются го (readonly — только для чтения) и
rw (read/write — чтение/запись). Например:
mount t ext2 о го /dev/hda6 /secured
Эта команда монтирует /dev/hda6 в /secured как файловую систему толь
ко для чтения.
quota
См. главу 7, раздел о мониторинге использования диска.
quotaon
См. главу 7, раздел о конфигурировании системы для поддержки дисковых
квот.
swapoff
Синтаксис:
swapoff $a
Эта команда позволяет отключить устройства свопинга. Параметр а по
зволяет отключить все разделы свопинга, определенные в /etc/fstab.

www.books-shop.com
Повседневные команды 95

swapon
Синтаксис:
swapon $a •
Эта команда позволяет включить устройства свопинга. Параметр а позво
ляет включить все разделы свопинга, определенные в /etc/fstab.
umount
Синтаксис:
.umount $a [$t тип_файловой_системы]
Эта команда демонтирует в текущей системе файловую систему. Например:
umount /cdrom
Эта команда будет демонтировать файловую систему с точкой монтирова
ния /cdrom, параметры которой определены в /etc/fstab.
Параметр а позволяет демонтировать все файловые системы (за исключе
нием файловой системы ргос), определенные в файле /etc/fstab. Можно так
же использовать параметр t для указания определенного типа файловой
системы для демонтирования. Например:
umount a t iso9660
Эта команда демонтирует все файловые системы типа iso9660, которые
обычно являются дисками CDROM.

Команды, совместимые с DOS


Если из системы Linux нужен доступ к файлам MSDOS, нужно установить
пакет Mtools. Mtools поставляется с Red Hat Linux как пакет RPM, поэтому
его установка Является простой задачей. Смотрите в описании команды rpm,
как установить пакет RPM.
Mtools является набором утилит, которые позволяют читать, писать и пе
ремещать файлы MSDOS. Пакет поддерживает длинные имена файлов в сти
ле Windows 95, диски Xdf OS/2 и диски 2т. Далее описываются обычно
используемые утилиты, находящиеся в пакете Mtools.
mcopy
Синтаксис:
mcopy [$tin] <исходный_файл_или_каталог> <файл_или_каталог_получатель>
Утилита mcopy используется для копирования файлов MSDOS в/из Linux.
Например:
mcopy /tmp/readme.txt b:
Эта команда копирует файл readme.txt из каталога /tmp на диск b:. Пара
метр t позволяет автоматически преобразовывать пару возврат каретки/пе
ревод строки (cr/lf) в текстовых файлах MSDOS в перевод строки. Параметр
т позволяет сохранить время модификации файла.
mdel
Синтаксис:
mdel <файл_МSDOS>
Эта утилита позволяет удалять файлы в файловой системе MSDOS.
mdir
Синтаксис:
mdir [$/] <файл_или_каталог_МS$DOS>
Эта утилита позволяет просматривать каталог MSDOS. Параметр / по
зволяет увидеть все подкаталоги.

www.books-shop.com
96

mformat
Синтаксис:
mformat [$t цилиндры] [$h головки] [$s секторы]
Эта утилита позволяет форматировать гибкие диски для хранения мини
мальной файловой системы MSDOS. Считается, что значительно проще
взять диск, отформатированный на компьютере MSDOS, чем определять ци
линдры, головки, секторы и т.д.
mlabel
Синтаксис:
mlabel [$vcs] <дисковое_устройство>:[новая_метка]
Эта утилита показывает текущую метку тома (если она существует) указан
ного дискового устройства и предлагает ввести новую метку если она не вве
дена в командной строке. Параметр v выводит шестнадцатеричный дамп
загрузочного сектора указанного дискового устройства; параметр с очищает
существующую метку тома, a s показывает существующую метку дискового
устройства.
$: • ^

Специальные команды системного статуса


Команды, рассматриваемые в этой секции, имеют дело с информацией о
статусе системных ресурсов.
dmesg
Синтаксис:
dmesg
Эта программа показывает сообщения о статусе, выводимые ядром во вре
мя начальной загрузки.
free
Синтаксис:
free
Эта программа выводит статистику использования оперативной памяти.
Пример вывода выглядит следующим образом:
total used free shared buffers cached
Mem: 127776 124596 3180 30740 2904 107504
/+ buffers/cache: 14188 113588
Swap: 129900 84 129816
shutdown
Синтаксис:
shutdown [ r] [$h] [$c] [$k] [$t секунды] <время> [сообщение]

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


указанному в файле /etc/shutdown.allow, выключить систему для перезагруз
ки или остановки. Чтобы перезагрузить компьютер в данный момент, выпол
ните:
shutdown r now
Чтобы остановить систему после выключения, замените г на h. Пара
метр k позволяет имитировать событие выключения, не делая его в действи
тельности. Например:
shutdown $r $k now System going down for maintenance "

Эта команда будет посылать фальшивое сообщение о закрытии всем поль


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

www.books-shop.com
Повседневные команды 97

предупреждающим сообщением и реальным событием выключения. Если


нужно отменить выключение, выполните shutdown еще раз, но с парамет
ром с.
Обратите внимание, что для определения времени можно использовать
формат <НН:ММ>. Например:
shutdown г 12:55
Эта команда перезагрузит систему в 12:55. Для указания времени можно
использовать +<минуты.>.
Например:
shutdown $r +5 i
Эта команда запустит процесс выключения через пять минут после вывода
предупреждающего сообщения.
uname
Синтаксис:
uname [$т] [$п.] [$г] [$s] [$у] [ а]
Эта команда выводит информацию о текущей системе. Например:
ипате а
Эта команда выводит строку такого вида:
Linux picaso.nitec.com 2.0.36 »1 Tue Oct 13 22:17:11 EOT 1998 1586 unknown
Параметр m выводит информацию о системной архитектуре (например,
1586); параметр п выводит имя хоста (например, picaso.nitec.com); пара
метр г выводит версию выпуска операционной системы (например, 2.0.36);
параметр s выводит название операционной системы (например, Linux); a
параметр v выводит версию локальной сборки операционной системы (на
пример, #1 Tue Oct 13 22:17:11 EDT 1998).
uptime
Синтаксис:
uptime
Эта команда покажет текущее время, как долго система была включена с
момента последней перезагрузки, сколько пользователей соединено с серве
ром, системную загрузку в последние 1, 5 и 15 минут.

Команды управления пользователями


Команды этого раздела предназначены для управления пользователями.
chfn
См. главу 7, раздел об'изменении существующей учетной записи пользова
теля.
chsh
См. главе 7, раздел об изменении существующей учетной записи пользова
теля.
groupadd
См. главу 7, раздел о создании новой группы.
groupmod
См. главу 7, раздел об изменении существующей группы.
groups
Синтаксис:
groups [имя_пользователя]

www.books-shop.com
98 Глава 5

Эта команда выводит список групп, к которым в настоящее время принад


лежит упомянутый пользователь. Если пользователь не определен, выводятся
группы текущего пользователя.
last
Синтаксис:
last [$число] [имя_пользователя] [reboot]
Эта команда выводит список пользователей, которые.зарегистрировались
в системе с момента создания /var/log/wtmp. Например:
last j u l i e
Эта команда показывает количество регистрации в системе пользователя
julie с момента создания /var/log/wtmp.
last 10 j u l i e
Эта команда покажет только последние 10 регистрации пользователя julie
в системе.
last reboot
Эта команда покажет, сколько раз система перезагружалась с момента со
здания файла /var/log/wtmp.
passwd
Синтаксис:
passwd <имя_пользователя>

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


зователь может указывать имя пользователя, все остальные должны вводить
команду passwd без аргументов, что позволит пользователю изменить свой
собственный пароль. Суперпользователь может с помощью этой команды из
менить пароль любого пользователя.
SU
Синтаксис:
su [$] [имя пользователя]
Команда su может использоваться для превращения в другого пользовате
ля. Например:
su john
Эта команда позволяет стать пользователем John, если известен пароль
John и учетная запись существует на сервере, на котором выполняется команда.
Наиболее распространенное использование этой команды состоит в пре
вращении в root. Когда мы выполняем эту команду, не указывая никакого
имени пользователя, она предполагает, что необходимо стать пользователем
root, и предлагает ввести его пароль. Если вводится правильный пароль для
root, su будет выполнять оболочку, используя UID (0) и GID (0) для root. Это
позволяет успешно стать пользователем root и выполнить административные
задачи. Команда очень полезна, когда сервер доступен только по протоколу
Telnet. Можно войти в сервер с помощью Telnet как обыкновенный пользова
тель и использовать команду su, чтобы стать root для выполнения системных
административных задач. Если используется параметр , новая оболочка от
мечается как оболочка регистрации в системе. Пользователь root с помощью
команды su может превращаться в других пользователей без введения како
голибо пароля.
useradd
См. главу 7, раздел о создании новой учетной записи пользователя.

www.books-shop.com
Повседневные команды 99

userdel
См. главу 7 раздел об удалении или отключении учетной записи пользова
теля.
usermod
См. главу 7, раздел о модификации существующей учетной записи пользо
вателя.
who
Синтаксис:
who
Эта команда выводит информацию о пользователях, которые в настоящее
время зарегистрированы в системе. Можно использовать для той же цели
команду w.
whoami
Синтаксис:
whoami
Эта команда выводит текущее имя пользователя.

Пользовательские команды доступа


к сетевым службам
Команды, рассматриваемые в этом разделе, позволяют получить доступ к
различным сетевым службам.
finger
Синтаксис:
finger пользователь@хост
Программа позволяет запросить соединение с демоном finger на указан
ном хосте. Например:
finger kabir@blackhole.integrationlogic.com
Эта команда будет запрашивать соединение finger с демоном finger, вы
полняющимся на сервере blackhole.integrationlogic.com. Если упомянутый
хост не разрешает соединения finger, попытка будет неудачной. Успешный
запрос finger выведет информацию об упомянутом пользователе. Если поль
зователь имеет в домашнем каталоге файл с расширением .plan, этот файл
обычно выводится большинством традиционных демонов finger. Так как finger
иногда используется для нарушения систем защиты, системные администра
торы отключают службу finger вне своих доменов.
ftp
Синтаксис:
ftp <имя_xocra_ftp или 1Р_адрес>
Используемую по умолчанию клиентскую программу FTP можно приме
нять для выполнения соединения FTP с сервером FTP. Например:
ftp ftp.cdrom.com
Эта команда откроет соединение FTP с f t p . cdrom. com и предложит ввести
имя пользователя и пароль. Если знать имя пользователя и пароль, можно за
регистрироваться на сервере FTP и обмениваться с ним файлами. В пригла
шении FTP можно ввести «help» или «?», чтобы получить справку о командах
FTP.
lynx
Синтаксис:
lynx [dump] [head] [URL]

www.books-shop.com
100 Глава 5

Это наиболее популярный интерактивный текстовый Webбраузер. На


пример:
lynx http://www.integrationlogic.com/
Эта команда выведет заглавную страницу узла. Это очень удобная програм
ма быстрого просмотра. Предположим, что необходимо быстро найти, какой
Webсервер использует сайт, не запрашивая об этом Webмастер. Выполним
следующую команду:
lynx $head http://www.integrationlogic.com/
Команда выведет заголовок HTTP, который браузер lynx получает от
Webсервера. Пример вывода см. ниже:
НТТР/1.1 302 Moved
Date: Tue, 02 Mar 1999 06:47:27 GMT
Server: Apache/1.3.3 (Unix)
Location: http://www.integrationlogic.com/index.shtml
Connection: close
Content$Type: text/html
Как можно видеть, заголовок показывает, что www. integrationlogic. com вы
полняется на сервере Apache и платформе UNIX. Обратите внимание, что не
все Webсайты выдают информацию о платформе своего Webсервера, но
многие — будут. Если необходимо избежать использования интерактивного
режима, можно применить параметр dump для вывода страницы на экран
(STDOUT). Например:
lynx $dump $head http://www.integrationlogic.com/
Эта команда выводит заголовок в поток stdout. Свойство dump может ока
заться очень удобным. Например:
lynx $dump $head http://webserver/new.gif > new.gif
Эта команда позволит сохранить new.gif с хоста Webсервера в локальном
файле с именем new.gif.
Интерактивный режим позволит удобно просматривать дружественный
по отношению к текстовому браузеру сайт.
mail
Синтаксис:
mail пользователь@хост [$s тема] [< имя_файла]
Это используемая по умолчанию программа почтового клиента SMTP. Ее
можно использовать для отправки или получения почты на вашей системе.
Например, если выполнить эту программу без аргументов, она выведет при
. глашение «@» и покажет не прочитанные в настоящее время почтовые сооб
щения, перечисляя их в нумерованном списке. Чтобы прочитать сообщение,
введите номер сообщения, и оно будет показано. Чтобы получить дополните
льную информацию о mail, воспользуйтесь командой «?» в приглашении «@».
Можно послать сообщение пользователю с адресом kabi^integrationlo
gic. com с заголовком темы «About your Red Hat book», выполнив команду:
mail kabir@integrationlogic.com $s "About your Red Hat book"
Затем можно ввести почтовое сообщение и, нажав Ctrl+D, закончить его.
Находясь в режиме создания сообщения, переключитесь в используемый по
умолчанию текстовый редактор, вводя v в начале строки.
Если почтовое сообщение уже подготовлено в файле, можно послать его,
используя команду:
mail kabir@nitec.com $s "About your Red Hat book" « feedback.txt
Эта команда пошлет сообщение с заданной строкой темы. Сообщение бу
дет состоять из содержимого файла feedback.txt.

www.books-shop.com
Повседневные команды 1Ш

pine
Синтаксис:
pine
Это полноэкранный почтовый клиент SMTP. Благодаря удобному пользо
вательскому интерфейсу программа хорошо подходит для тех пользователей
Linux, которые еще не очень хорошо в нем разбираются.
rlogin
Синтаксис:
rlogin [$1 имя_пользователя] <хост>
Команда позволяет удаленно зарегистрироваться на хосте. Например,
чтобы зарегистрироваться на хосте shell.myhost.com, выполните:
rlogin shell.myhost.com
Так как утилита rlogin не считается безопасной, ее рекомендуют использо
вать только в замкнутой среде локальной сети. Параметр 1 позволяет опреде
лить имя пользователя, которое будет использоваться для аутентификации.
Если необходимо удаленно регистрироваться на хосте, не вводя пароль, со
здайте файл .rhosts в домашнем каталоге пользователя. Добавьте имя хоста
или IPадрес компьютера, который будет использоваться для отправки запро
сов rlogin. Еще раз подчеркнем, что широко использовать эту утилиту не ре
комендуется, так как считается, что она нарушает защиту системы.
talk
Синтаксис:
talk <имя_пользователя> tty
Если надо послать сообщение другому пользователю, с этим прекрасно
справится электронная почта. Но если необходимо пообщаться с другим по
льзователем в реальном времени, как при телефонном разговоре, используй
те команду talk. '
Для того чтобы поговорить с другим зарегистрировавшимся пользовате
лем, введите:
talk ronak@csus.edu
Пользователь, которого запрашивают, должен будет принять запрос talk.
Когда пользователь примет запрос talk, можно начинать общаться друг с дру
гом, печатая текстовые сообщения. Программа talk будет остановлена, когда
любая из сторон нажмет Ctrl+C (клавишу intr).
telnet
Синтаксис:
telnet <имя_хоста или 1Р_адрес> [порт]
Используемую по умолчанию клиентскую программу Telnet можно приме
нять для соединения с сервером Telnet. Например:
telnet shell.myportal.com
Откроется соединение Telnet с системой shell.myportal.com, если упомя
нутый хост выполняет сервер Telnet. Когда соединение открыто, будут запро
шены имя пользователя и пароль, а после успешной регистрации будет
разрешен доступ по учетной записи локального пользователя на сервере Telnet.
wall
Синтаксис:
wall
Эта команда позволяет послать текстовое сообщение на терминал любого
пользователя, который не отключил доступ для записи на своем tty с

www.books-shop.com
102 Глава 5

помощью команды mesg n. В команде wall можно ввести однострочное или


многострочное сообщение и послать его, нажав Ctrl+D.

Команды администратора сети


Команды, рассмотренные в этом разделе, позволяют получать информа
цию о сетевых службах и самой сети.
host
Синтаксис:
host [$а] <1Р_адрес_хоста>
По умолчанию эта программа позволит быстро проверить IPадрес хоста.
Если используется параметр а, будет возвращаться различная информация
DNS об указанном хосте или IPадресе.
hostname
Синтаксис:
hostname .
Данная программа выводит имя хоста системы.
ifconfig
Синтаксис: .
ifconfig [интерфейс] [up | down] [netmask маска]
Программа позволяет сконфигурировать сетевой интерфейс. С помощью
этой программы можно увидеть состояние интерфейса. Например, если ра
нее система Red Hat Linux была сконфигурирована для работы в сети и име
ется предварительно сконфигурированное устройство сетевого интерфейса
ethO, можно выполнить:
ifconfig ethO '
Должен появиться вывод, подобный этому:
ethO Link encap: Ethernet HWaddr 00:CO:F6:98:37:37
inet addr:206.171.50.50 Beast: 206. 171.50.63 Mask: 255. 255. 255. 240
UP BROADCAST RUNNING MULTICAST MTU: 1500 Metric :1
RX packets:9470 errors:0 dropped:0 overruns:0 frame:0
TX packets:7578 errors:0 dropped:0 overruns:0 carrier:0 collisions:0
Interrupt^ Base address:0x340
Здесь ifconfig сообщает, что устройство сетевого интерфейса ethO имеет
адрес Интернета (inet addr) 206.171.50.50, адрес широковещательной рассыл
ки (Beast) 206.171.50.63 и сетевую маску 255.255.255.240. Остальная информа
ция показывает, сколько пакетов получил этот интерфейс (пакеты RX),
сколько пакетов этот интерфейс передал (пакеты ТХ), сколько ошибок раз
личных типов произошло до сих пор, какая адресная линия прерывания ис
пользуется устройством, какой установлен базовый адрес ввода/ вывода и т.д.
Можно выполнить ifconfig без аргументов, чтобы получить полный спи
сок всех включенных сетевых устройств.
Используя ifconfig, можно подключить интерфейс. Например:
ifconfig ethO 206.171.50.50 netmask 255.255.255.240 \
broadcast 206,171.50.63
Команда запустит ethO с IPадресом 206. 17 1 .50.50. Можно также быстро от
ключить интерфейс, используя команду ifconfig. Например:
ifconfig ethO down '
выполнит отключение интерфейса ethO.

www.books-shop.com
Повседневные команды 1Ш

netcfg
См. главу 9, раздел об использовании netcfg для конфигурирования сетево
го адаптера.
netstot
Синтаксис:
netstat t$r] [$а] [$с] [$1]
Эта программа выводит статус сетевых соединений, как входящих в локаль
ную систему, так и выходящих из нее. Например:
netstat $a
Команда выводит все сетевые соединения локальной системы. Чтобы уви
деть таблицу маршрутизации, используйте параметр г. Чтобы непрерывно
выводить статус сетевых соединений, используйте параметр с. Чтобы вывес
ти информацию обо всех сетевых интерфейсах, используйте параметр i.
nslookup
Синтаксис:
nslookup [$query=Tnn_3anHCM_DNS] Гимя_хоста или IP] [сервер_имен]
Эта команда позволяет выполнять запросы DNS. Можно запрашивать сер
вер DNS интерактивным образом или сразу искать информацию.
Например:
nslookup $query=mx iptegratipnlogic.com
Эта команда будет сразу возвращать запись MX для домена integrationlo
gic.com.
nslookup $query=mx integrationlogic.com ns.nitec.com
Эта команда будет делать то же самое, но вместо используемого по умолча
нию сервера имен, который определен в файле /etc/resolv.conf, она обра
тится к серверу имен ns.nitec.com. Можно также использовать q вместо
query. Например:
nslookup $q=a www.formtrack.com
Эта команда возвращает IPадрес (запись Address) для указанного имени
хоста. Можно также выполнять nslookup в интерактивном режиме. Выполни
те команду без параметров — появится приглашение nslookup. В строке при
глашения nslookup можно ввести «?», чтобы получить справку. Если в
будущем планируется выполнение нескольких запросов DNS, интерактивный
режим может быть очень полезным. Например, чтобы запросить записи NS
Для множества доменов, таких как adengine, com и classifiedworks. com, введи
те следующую команду:
set query=ns
Когда тип запроса задан как ns, можно просто ввести adengine.com и
ждать ответа, а когда он будет получен т проверить имя следующего домена и
т.д. Если необходимо изменить сервер имен, находясь в режиме приглаше
ния nslookup, используйте команду server. Например:
server ns.ad$engine.com
Это заставит nslookup использовать ns.adengine.com в качестве сервера
имен. Чтобы завершить интерактивный режим и вернуться к приглашению
оболочки, введите exit в строке приглашения nslookup.
ping
Синтаксис:
ping [с счетчик] [s размер_пакета] [1 интерфейс]

Ⱦɚɧɧɚɹɜɟɪɫɢɹɤɧɢɝɢɜɵɩɭɳɟɧɚɷɥɟɤɬɪɨɧɧɵɦɢɡɞɚɬɟɥɶɫɬɜɨɦ%RRNVVKRS
ɊɚɫɩɪɨɫɬɪɚɧɟɧɢɟɩɪɨɞɚɠɚɩɟɪɟɡɚɩɢɫɶɞɚɧɧɨɣɤɧɢɝɢɢɥɢɟɟɱɚɫɬɟɣɁȺɉɊȿɓȿɇɕ
Ɉɜɫɟɯɧɚɪɭɲɟɧɢɹɯɩɪɨɫɶɛɚɫɨɨɛɳɚɬɶɩɨɚɞɪɟɫɭpiracy@books-shop.com
104 , Глава б

Это одна из широко используемых сетевыми администраторами про<


грамм. Она используется для того чтобы определить, доступен ли удаленный
компьютер, с помощью протокола TCP/IP. Технически эта программа посы<
лает на удаленный хост эхо<запрос ICMP (Internet Control Message Protocol —
Протокол управляющих сообщений Интернета). Так как протокол требует
ответа на эхо<запрос, то удаленный хост обязан послать его назад. Это позво<
ляет программе ping вычислить время, которое требуется для пересылки па<
кета на удаленный хост. Например:
ping blacktiole.nitec.com
Эта команда непрерывно посылает сообщения ping на хост blackhole. ni<
tec.com. Чтобы остановить программу ping, необходимо нажать Ctrl+C, что
заставляет программу вывести статистику. Вот пример вывода запросов ping,
созданных предыдущей командой:
PING blackhole.nitec.com (209.63.178.15): 56" data bytes
64 bytes from 209.63.178.15: icmp_seq=0 ttl=53 time=141.5 ms
64 bytes from 209.63.178.15: icmp_seq=1 ttl=53 time=162.6 ms
64 bytes from 209.63.178.15: icmp_seq=2 ttl=53 time=121.4 ms
64 bytes from 209.63.178.15: icmp_seq=3 ttl=53 time=156.0 ms
64 bytes . from 209.63.178.15: icmp_seq=4 ttl=53 time=126.4 ms
64 bytes from 209.63.178.15: icmp_seq=5 ttl=53 time=101.5 ms
64 bytes from 209.63.178.15: icmp_seq=6 ttl=53 time=98.7 ms
64 bytes from 209.63.178.15: icmp_seq=7 ttl=53 time=180.9 ms
64 bytes from 209.63.178.15: icmp_seq=8 ttl=53 time=126.2 ms
64 bytes from 209.63.178.15: icmp_seq=9 ttl=53 time=122.3 ms
64 bytes from 209.63.178.15: icmp_seq=10 ttl=53 time=127.1 ms
$ blackhole.nitec.com ping statistics $
11 packets transmitted, 11 packets received, 0% packet loss
round$trip min/avg/max =98.7/133.1/180.9 ms
Мы видим 10 запросов ping к хосту blackhole . nitec . com. Так как программа
была прервана после 11<го запроса, статистика показывает, что ping передала
11 пакетов и получила все пакеты, поэтому потери пакетов не произошло.
Потеря пакетов была бы сигналом о плохой работе сети между инициатором
запроса ping и отвечающим на ping хостом. Другой интересной статистикой
является минимальное (min), среднее (avg) и максимальное время пересылки
пакета туда и обратно. Чем меньше эти значения, тем лучше маршрутизация
между хостами. Например, если запрос ping посылается в локальной сети,
значения времени пересылки пакета туда и обратно будут в диапазоне одной
миллисекунды.
Если требуется, чтобы программа ping автоматически остановилась после
передачи некоторого числа пакетов, используйте параметр <с. Например:
ping $с 10 blackhole.nltec.com
Эта команда пошлет упомянутому хосту 10 запросов ping. По умолчанию
ping посылает 64<байтовые (56 байт данных + 8 байт заголовка) пакеты. Если
требуется изменить размер посылаемого пакета, используйте параметр <s. На<
пример:
ping $с 1024 $s 1016 re.boot.nitec.com
Команда будет посылать на удаленный хост пакет длиной 1024 (1016 + 8)
байта.

www.books-shop.com
Повседневные команды 105

"1 Посылая на удаленный хост большие пакеты при слабой


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

route
Синтаксис:
route add $net <сетевой_адрес> <сетевая_маска> dev <устройство>
route add $host <имя_хоста или 1Р$адрес> dev <устройство>
route add default gw <имя_хоста или 1Р$адрес>
Эта команда позволяет контролировать маршрутизацию компьютера. На<
пример, чтобы создать используемый по умолчанию маршрут для сети, исполь<
зуйте команду route следующим образом:
route add $net <сетевой_адрес> <сетевая_маска> <устройство>
Например, чтобы создать используемый по умолчанию маршрут для сети
206.171.50.48 с сетевой маской 255.255.255.240 и ethO в качестве интерфейса,
можно выполнить:
route add net 206.171.50.48 255.255.255.240 ethO
Для того чтобы задать используемый по умолчанию шлюз, выполните
команду route:
route add default gw <имя_хоста> <устройство>
Например, чтобы задать адрес используемого по умолчанию шлюза
206.171.50.49, можно выполнить такую команду:
route add default gw 206.171.50.49 ethO
С помощью следующей команды можно проверить, что маршрут сети и ис<
пользуемый по умолчанию шлюз в таблице маршрутизации заданы правильно:
route $n
Вот пример вывода предыдущей команды:
Kernel IP routing table
Destination Gateway Genmask, Flags Metric Ref Use Iface
206.171.50.48 0.0.0.0 255.255.255.240 U 0 0 6 ethO
127.0.0.0 0.0.0.0 255.0.0.0 U 0 0 5 lo
0.0.0.0 206.171.50.49 0.0.0.0 UG Q 0 17 ethO

| Проверьте, что в файле /etc/sysconfig/network и ядре включена


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

tcpdump
Синтаксис:
tcpdump <выражение>
Это замечательный инструмент отлаживания сети. Например, чтобы про<
следить все пакеты между двумя хостами brat, nitec.com и reboot.nitec.com, ис<
пользуйте команду:
tcpdump host brat.nitec.com and reboot.nitec.com

www.books-shop.com
106 Глава Б

Эта команда заставит tcpdump прослушивать пакеты между этими двумя


компьютерами. Если reboot.nitec.com начинает посылать запросы ping для
brat.nitec.com, вывод выглядит следующим образом:
tcpdump: listening on ethO
09:21:14.720000 reboot. nitec.com>brat. nitec.com: icmp: echo request
09:21:14.720000 brat. nitec.com>reboot. nitec.com: icmp: echo reply
09:21:15.720000 reboot. nitec.com>brat. nitec.com: icmp: echo request
09:21:15.720000 brat. nitec.com> reboot. nitec.com: icmp: echo reply
09:21:16.720000 reboot. nitec.com>brat. nitec.com: icmp: echo request
09:21:16.720000 brat. nitec.com>reboot. nitec.com: icmp: echo reply
09:21:17.730000 reboot. nitec.com>brat. nitec.com: icmp: echo request
09:21:17.730000 brat. nitec.com>reboot. nitec.com: icmp: echo reply
Если существует проблема при соединении с сервером FTP, можно исполь<
зовать tcpdump на системе<шлюзе локальной сети, чтобы увидеть происходя<
щее. Например:
tcpdump port ftp or ftp$data
Эта команда покажет имеющие отношение к FTP пакеты, которые выхо<
дят из сети и в нее приходят.
Как можно видеть, это позволяет на низком уровне исследовать сетевые
проблемы. Если существует проблема с использованием службы между двумя
хостами, можно применить tcpdump для идентификации причины.
traceroute
Синтаксис:
traceroute <хост или 1Р$адрес>
Программа позволяет локализовать проблемы сетевой маршрутизации.
Она будет показывать маршруты между двумя хостами, прослеживая шлюзы
между хостами, заставляя их отвечать на запрос ICMP TIME_EXCEEDED. Вот
пример трассировки маршрута между моей локальной системой и хостом
blackhole.nitec.com:
traceroute to blackhole.nitec.com (209.63.178.15), 30 hops max, 40
byte packets
1 router (206.171.50.49) 4.137 ms 3.995 ms 4.738 ms
2 PM3$001.v1.NET (206.171.48.10) 32.683 ms 33.295 ms 33.255 ms
3 HQ$CS001.v1.NET (206.171.48.1) 42.263 ms 44.237 ms 36.784 ms
4 ix.pxbi.net (206.13.15.97) 106.785 ms 63.585 ms 101.277 ms
5 ix.pxbi.net (206.13.31.8) 86.283 ms ,64.246 ms 69.749 ms
6 ca.us.ixbm.net (165.87.22.10) 71.415 ms 72.319 ms 85.183 ms
7 mae.elxi.net (198.32.136.128) 101.863 ms 80.257 ms 67.323 ms
8 y. exli.net (207.173.113.146) 71.323 ms 104.685 ms 110.935 ms
9 z. exli.net (207.173.113.217) 69.964 ms 137.858 ms 85.326 ms
10 z1.exli.net (207.173.112.251) 81.257 ms 107.575 ms 78.453 ms
11 209.210.249.50 (209.210.249.50) 90.701 ms 91.116 ms 109.491 ms
12 209.63.178.15 (209.63.178.15) 83.052 ms 76.604 ms 85.406 ms
Каждая строка представляет одну пересылку. Чем больше пересылок, тем
хуже обычно бывает маршрут. Другими словами, если между источником и
местом назначения находится не много шлюзов, то существует вероятность,
что пакеты между этими двумя хостами будут пересылаться достаточно быст<
ро. Однако это не всегда так, поскольку будет достаточно только одного мед<
ленного шлюза, чтобы испортить время доставки. Используя traceroute,
можно определить, куда направляются пакеты и где они, возможно, попада<
ют в пробку. Когда определен источник проблемы, можно обратится в соот<
ветствующую организацию и решить проблему плохой маршрутизации.

www.books-shop.com
Повседневные команды 107

Команды управления процессами


Рассматриваемые в этом разделе команды позволяют управлять процесса
ми — выполняющимися в системе программами.
bg
Синтаксис:
bg
Это встроенная команда оболочки, которая имеется во многих популяр
ных средах. Данная команда позволяет поместить приостановленный про
цесс в фоновый режим. Например, нужно выполнить команду du <a / | sort
<rn > /tmp/du.sorted, чтобы перечислить все файлы и каталоги в системе,
упорядочивая по используемому дисковому пространству (размеру), и помес
тить результат в файл с именем /tmp/du.sorted. В зависимости от числа фай
лов в системе для этого может потребоваться какоето время. В таком случае
можно просто приостановить командную строку, используя Ctrl+Z и ввести
.bg, чтобы переместить выполнение командной строки в фоновый режим,
освобождая приглашение оболочки для других целей.

I Если с самого начала требуется выполнять команду в фоновом


' режиме, можно просто добавить «&» в конце командной строки.

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


jobs — появится список выполняющихся ,в фоновом режиме командных
строк.
Чтобы извлечь командную строку из фонового режима, используйте
команду fg.
fg
Синтаксис:
fg [%номер_задания]
Эта встроенная команда оболочки, существующая во многих популярных
оболочках, позволяет поместить фоновый процесс в основной режим. Если
выполнить эту команду без аргументов, она извлечет последнюю команду, ко
торая была помещена в фоновый режим. Когда несколько команд выполняет
ся в фоновом режиме, можно использовать команду jobs, чтобы найти номер
задания и использовать этот номер как аргумент для fg при переводе задания
в основной режим. Например, если jobs показывает, что есть две команды
фонового режима, можно извлечь первую из них, используя:
fg %1
jobs
Синтаксис:
jobs
Это встроенная команда оболочки, которая существует в популярных обо
лочках. Она позволяет увидеть список процессов, выполняющихся в фоно
вом режиме или приостановленных в настоящее время.
kill
См. главу 8, раздел о Передаче сигналов выполняющемуся процессу.
killall
См. главу 8, раздел о передаче сигналов выполняющемуся процессу.
PS
См. главу 8, раздел об использовании ps для получения статуса процесса.
top
См. главу 8, раздел о мониторинге процессов и загрузке системы.

www.books-shop.com
108 Глава 5.

Команды автоматизации задач


Команды, рассматриваемые в этом разделе, используются для выполне
ния необслуживаемых задач.
at
См. главу 8, раздел о планировании выполнения процессов.
atq
См. главу 8, раздел о планировании выполнения процессов.
atrm
См. главу 8, раздел о «планировании выполнения процессов.
crontab
См. главу 8, раздел о планировании выполнения процессов.

Команды повышения эффективности работы


Команды, рассматриваемые в этом разделе, помогут повысить производи
тельность работы пользователя.
be
Синтаксис:
be

Это интерактивный калькулятор, который реализует специальный язык.


Лично я не так уж заинтересован в изучении языка, но нахожу эту утилиту
очень полезной для выполнения быстрых вычислений. Когда команда выпол
няется без аргументов, она берет вводимые данные и интерпретирует их как
операторы для программирования калькулятора. Например, чтобы умно
жить 1024 на 4, можно просто ввести 1024*4 и получить результат, а текущий
результат — использовать, подставляя символ точки.
Cdl
Синтаксис:
cal [месяц] [год}
Эта отличная программа выводит прекрасно отформатированный кален
дарь для месяца или года, указанных в командной строке. Если не указывать
никаких аргументов, будет выведен календарь текущего месяца. Чтобы уви
деть календарь для всего года, введите год в диапазоне 19999.
Например:
cal 2000
Эта команда выводит следующий календарь 2000 г.

www.books-shop.com
дневные команды 10$,
'

ispell
:
Синтаксис: ' .. •. •• * •• • • ••••••'> ••*•.• '••
ispell <имя_файла^
Это программа проверки в интерактивном режиме правописания в тек
стовых файлах. Если в файле есть грамматические ошибки, программа пред
ложит правильное написание и предоставит возможность заменить ошибку
правильно написанным словом. ?;,
mesg
7
Синтаксис:
mesg [у | п]
Эта программа разрешает или запрещает открытый доступ для записи на
терминал пользователя. Например:
mesg у
Эта команда разрешит доступ для записи на терминал, чтобы другой поль
зователь в этой же системе мог использовать команду write для отправки тек
стовых сообщений. Параметр п запрещает доступ для записи. Если
пользователь не хочет, чтобы его ктолибо беспокоил, он может добавить
mesg n к своему файлу сценария регистрации в системе (.login).
write
Синтаксис:
write <имя_пользователя> tty
Программа позволяет посылать текстовые сообщения указанному пользо
вателю, если он не запретил доступ для записи к своему tty.
Например:
write shoeman
Эта команда позволит вывести текстовое сообщение на экране и, когда со
общение будет закончено нажатием Ctrl+D, оно появится на терминале поль
зователя shoeman. Если пользователь зарегистрировался более одного раза,
нужно будет дополнительно указать имя терминала. Например:
write shoeman ttypO
Команда позволяет написать пользователю shoeman и вывести сообщение
на терминале ttypO. Если ктото имеет несколько открытых терминалов, мож
но выполнить команду w или who, чтобы увидеть, какой выбрать tty (терми
нал).

Команды оболочки
Здесь представлено несколько часто используемых команд оболочки.
alias
Синтаксис:
alias <имя_алиаса> = <команда>
Эта встроенная команда'оболочки, существующая в большинстве популяр
ных оболочек,,позволяет создавать псевдонимы (алиасы) команд. Например:
alias dir Is $1
Команда создает псевдоним dir для команды Is 1. Чтобы увидеть весь спи
сок доступных псевдонимов, выполните команду alias без аргументов.
history
Синтаксис:
history

www.books-shop.com
110 Глава 5

Эта встроенная команда оболочки, существующая в большинстве популяр


ных оболочек, выводит список последних введенных команд. Число команд,
которое будет выводить history, определяется переменной окружения «history».
Например, если в файл .login пользователя добавить set history = 100, то по
сле регистрации в системе команде history будет разрешено запомнить до
100 командных строк. Команды, которые присутствуют в списке, созданном
командой history, легко выполнить заново, вводя их порядковый номер со
знаком «!». Предположим, что с помощью команды history получен следую
щий список:
1 10:25 vi ircbot.h
2 10:25 vi ircbot.c
3 10:26 which make
Чтобы снова выполнить команду vi ircbot.c, можно просто ввести в коман
дной строке !2.
set
Синтаксис:
set <переменная> = <значение>
Встроенная команда оболочки, существующая в большинстве популярных
оболочек, позволяет присвоить переменной окружения определенное значе
ние. Например:
set foo = bar
Здесь новой переменной окружения foo присвоено значение «bar». Чтобы
увидеть список всех переменных окружения, выполните команду set без пара
метров. Чтобы увидеть значение определенной переменной окружения, та
кой как path, выполните:
echo $path
Эта команда покажет значение упомянутой переменной окружения. Если
команда используется достаточно часто для задания значения нескольким
специальным переменным окружения, можно добавить ее в .login или .profile
либо в файл «с точкой» оболочки пользователя, чтобы при регистрации в си
стеме автоматически устанавливать значения специальных переменных окру
жения.
source
Синтаксис:
source <имя_файла>

Эта встроенная команда оболочки, которая существует в большинстве по


пулярных оболочек, позволяет читать и выполнять команды из указанного
файла в окружении текущей оболочки.
unalias
Синтаксис:
unalias <имя_псевдонима>
Эта встроенная команда оболочки, которая существует в большинстве по
пулярных оболочек, позволяет удалить псевдоним команды.
Например:
unalias dir
Команда удаляет псевдоним dir. Чтобы удалить все псевдонимы, исполь
зуйте в качестве аргумента «*».

Специальные команды печати


Этот раздел посвящен командам вывода на печать в системе Linux.

www.books-shop.com
Повседневные команды 111

Ipq
Синтаксис:
Ipq [$al] [$P принтер]
Команда Ipq показывает статус принтеров. Если Ipq вводится без аргументов,
то предоставляется информация об используемом по умолчанию принтере.
Ipq
Printer: lp@rembrandt 'Generic dot$matrix printer entry'
Queue: no printer jobs in queue
Status: server finished at 21:11:33
Параметр Р указывает информацию об определенном принтере. Пара
метр а будет возвращать статус всех принтеров.
С помощью параметра 1 Ipq будет сообщать идентификационный номер
задания, имя пользователя, который запросил задание печати, создавший за
дание сервер, положение в очереди, описание задания и размер задания.
Ipr
Синтаксис:
Ipr [$1 размер отступа в столбцах] [$Р принтер] [имя_файла]
Эта команда будет посылать файл в спулер (буфер подкачки) печати. Если
имя файла не задано, предполагаются данные из стандартного ввода.
Параметр i позволяет начать печатать в определенном столбце. Чтобы за
дать определенный принтер, можно использовать параметр Р <принтер>.
Ipr main.с
Эта команда попытаться напечатать файл main.с.
Iprm
Синтаксис:
Iprm [$а] [идентификатор_задания] [all]
Команда Iprm посылает запрос команде Ipd, чтобы удалить некоторый
элемент из очереди печати. Задания печати для удаления могут быть опреде
лены с помощью идентификатора (ID) задания или имени пользователя,
либо можно указать все элементы очереди.
Чтобы удалить все задания во всех очередях печати:
Iprm $a all
Чтобы удалить все задания для пользователя «kiwee» на принтере «pi»:
Iprm $Pp1 kiwee

www.books-shop.com
www.books-shop.com
Часть 3

Управление
пользователями,
процессами и сетями

Ⱦɚɧɧɚɹɜɟɪɫɢɹɤɧɢɝɢɜɵɩɭɳɟɧɚɷɥɟɤɬɪɨɧɧɵɦɢɡɞɚɬɟɥɶɫɬɜɨɦ%RRNVVKRS
ɊɚɫɩɪɨɫɬɪɚɧɟɧɢɟɩɪɨɞɚɠɚɩɟɪɟɡɚɩɢɫɶɞɚɧɧɨɣɤɧɢɝɢɢɥɢɟɟɱɚɫɬɟɣɁȺɉɊȿɓȿɇɕ
Ɉɜɫɟɯɧɚɪɭɲɟɧɢɹɯɩɪɨɫɶɛɚɫɨɨɛɳɚɬɶɩɨɚɞɪɟɫɭpiracy@books-shop.com
www.books-shop.com
Глава 6
Использование Linuxconf

В этой главе:

• Что такое Linuxconf


" Установка и конфигурирование Linuxconf
• Использование Linuxconf
Прежде чем рассматривать особенности утилиты Linuxconf, необходимо
понять причину ее создания. Почему в течение длительного времени боль
шинство людей считали UNIX и операционные системы наподобие Linux
сложными? Дело в том, что практически все они используют для управле
ния системой командную строку и не очень понятные конфигурационные
файлы. Здесь не существует общего и простого интерфейса администриро
вания. Поэтому нужно долго изучать операции использования и управления
такими операционными системами. Люди, сумевшие преодолеть трудности
командной строки и конфигурационных файлов управления этими опера
ционными системами, в конце концов начинают получать удовольствие от
такого способа работы. Они часто заявляют, что одним из самых сильных
свойств UNIX и подобных UNIX операционных систем является то, что эти
системы позволяют дойти до такого уровня управления, какого никогда не
предлагали конкурирующие системы (например, Microsoft Windows и Mac
OS). Поэтому многим нравится система Linux такой, какая она есть. К сожа
лению, эти же люди занимаются дальнейшим развитием Linux. Они иногда
добавляют к своим почтовым сообщениям фразы примерно следующего со
держания: «Система UNIX не является недружественной; она просто раз
борчива в вопросе, с кем нужно дружить». Если такие люди считают, что
простой интерфейс пользователя для управления не нужен, то откуда же он
тогда возьмется? Именно так обстояли дела еще несколько лет назад.
В конце концов энтузиасты и компания Red Hat решили изменить суще
ствующее положение вещей, создав систему Linux, способную конкуриро
вать на рынке. Если системой Linux будет легко управлять средний
пользователь, то ее конкурентоспособность существенно возрастет. Проект

www.books-shop.com
116 Глава 6

Linuxconf имел целью создание гибкого, легкого в использовании админист


ративного средства для Linux, которое обеспечивает знакомое внешнее пред
ставление и поставляется с полноценной документацией в форме
справочных файлов. Поскольку к системе Linux можно получить доступ раз
ными способами, такими как консоль/ оболочка или X Window, проекту Li
nuxconf требовалось обеспечить несколько способов доступа для интерфейса
управления пользователя. Сейчас Linuxconf предлагает управление системой
с помощью консоли/оболочки, X Window и даже Web!
Утилита Linuxconf может существенно помочь продажам Linux, потому
что это прекрасная операционная система для массового использования. Она
позволит преодолеть широко распространенное мнение, что UNIX или похо
жие на нее операционные системы, такие как Red Hat Linux, слишком труд
ны для управления или использования. Однако верно и то, что в обозримом
будущем не исчезнет традиционный способ выполнения административных
задач с помощью командной строки; если ктото и освоился с командной
строкой, то полюбить программное обеспечение, подобное Linuxconf, прак
тически невозможно.
Сейчас в компьютерном мире популярны как командная строка, так и бо
лее дружественные административные интерфейсы, в этой книге представ
лены оба типа управления системой. В этой главе обсуждается утилита
Linuxconf. Специальные конфигурационные процедуры Linuxconf при необ
ходимости будут рассмотрены в других главах вместе с традиционным спосо
бом выполнения необходимых операций.

Что такое Linuxconf


Утилита Linuxconf является не просто удобным интерфейсом пользовате
ля для управления системой Linux. Вопервых, так как доступ к Linux можно
получить различными способами (например, через Telnet, консоль, X Window
или Web), то существует три интерфейса Linuxconf. Вовторых, Linuxconf по
зволяет активизировать конфигурацию, которая создается для системы Linux.
И последнее — когда чтото конфигурируется с помощью Linuxconf, утилита
выполняет проверку корректности вносимых изменений. Это дает гарантии,
что не возникнет никаких проблем.
Linuxconf является приложением на языке C++, которое предоставляет
базовое множество операций, доступных для внешних модулей через API
(Application Programming Interface — интерфейс прикладного программиро
вания). Каждый модуль обеспечивает множество функций определенной
службы. Например, управление Webсервером Apache реализуется в модуле
Apache. Модули хранятся в каталоге /usr/lib/linuxconf/ module. В настоя
щее время многие модули распространяются вместе с версией Linuxconf в па
кете RPM. Например, в таблице 6.1 показаны все модули, поставляемые с
Linuxconf версии 1.1.3.
Можно было бы задать вопрос о том, как конфигурировать и чем может
управлять Linuxconf. Управлять можно всем. Так как для управления различ
ными функциями используются внешние модули, разработчики во всем мире
легко могут создавать модули Linuxconf для своего собственного програм
много обеспечения. Если Linuxconf станет (в связи с массовым применени
ем) основным программным обеспечением управления, то модуль Linuxconf
будет содержать практически все, что может конфигурироваться. В настоя
щее время Linuxconf управляет следующим: системным временем, часовым
поясом, часами CMOS, LILO, базовой конфигурацией сети, файловой систе
мой, учетными записями пользователей, конфигурацией дисковых квот, кон
фигурацией коммутируемого доступа, маршрутизацией, сервером DNS,
сервером NFS, сервером SMTP (sendmail), трассировкой маршрутизаторов,
конфигурацией клиента NIS, конфигурацией RARP, UUCP, брандмауэрами и
т.д. Однако пока управляется не все. Например, Linuxconf может управлять
скрытыми (теневыми) паролями, но в настоящее время не поддерживает под
ключаемые модули аутентификации (РАМ).
Достойна восхищения идея, лежащая в основе Linuxconf, но не вполне
удовлетворительно текущее состояние приложения. Существует ряд досадных

www.books-shop.com
Использование Linuxconf 117

Таблица 6.1.
Модули, Модуль Описание ^___
поставляемые Apache Модуль конфигурации Web$сервера Apache
с Linuxconf Dhcpd Модуль конфигурации сервера протокола динамического конфигурирования
версии 1.1.3 хоста (DHCP)
Dialout Модуль конфигурирования исходящего соединения РРР (не требуется, если
используется модуль redhatppp)
Dnscnf Модуль конфигурирования DNS для сервера имен BIND версий 4 и 8
Rrewall Модуль конфигурирования брандмауэра, который позволяет фильтровать паке$
ты на уровне ядра, IP$подстановку, переадресацию портов и учет IP$адресов
Mailconf Конфигурирование сервера SMTP Sendmail
Mold Модуль конфигурирования файла сообщения дня (/etc/mold)
Mrtg Модуль конфигурирования Mrtg (Multi$router Traffic Grapher, многопутевой по$
строитель графиков трафика)
Netadm Модуль конфигурирования сети
Pppdialin Модуль конфигурирования РРР
Rarp Модуль конфигурирования таблицы RARP ядра Linux
Модуль конфигурирования служб коммутируемого доступа (PPP/SLJP/PUP) для
Red Hat Linux
Samba Модуль конфигурирования Samba
Squid Модуль конфигурирования прокси Squid
Status Модуль статуса системы
Treemenu Внутренний модуль LJnuxconf
Usermenu Внутренний модуль Linuxconf
Wuftpd Конфигурационный модуль FTP$сервера (wu$ftpd)
Xterminals Модуль конфигурирования X$терминала

проблем, которые скорее всего будут исправлены в будущих версиях. Напри


мер, многие из важных справочных страниц отсутствуют или еще не сдела
ны, а сообщения об ошибках, создаваемые самой утилитой Linuxconf, не
вполне понятны по своей сути. Несмотря на некоторые проблемы, Linuxconf
функционирует как и ожидалось. Следует рассматривать Linuxconf как проект,
находящийся в стадии разработки, который очень близок к завершению.
Попытаемся установить и использовать административное инструменталь
ное средство Linuxconf.

Установка Linuxconf
Установка Linuxconf выполняется достаточно просто. Если Linuxconf не
был установлен во время установки Red Hat Linux, можно установить его в
любое время из пакета RPM, поставляемого на официальном компактдиске
Red Hat или на компактдиске, содержащемся в этой книге. Можно также за
грузить пакет RPM с официального узла FTP Linuxconf по адресу f t p : / / f t p .
solucorp.qc.ca/pub/linuxconf/devel/.
Проверьте, загружен ли пакет RPM, предназначенный для вашей версии
Red Hat Linux. Пакет RPM можно установить, выполняя команду rpm  ivh
<пакет>, где <пакет> является именем реального пакета.
Теперь посмотрим, как сконфигурировать Linuxconf для работы в системе.

Конфигурирование Linuxconf
Linuxconf можно использовать различными способами. Linuxconf автома
тически выбирает текстовый (для консоли или удаленной оболочки) или гра
фический режим (для X Window). Например, если пользователь
зарегистрировался на системной консоли и выполнил /bin/linuxconf из
командной строки, то появится экран, как на рис. 6.1.

www.books-shop.com
118 Глава 6

Рис. 6.1. Интерфейс Linuxconf использует


Текстовый интерфейс древовидную структуру меню. Рис. 6.1
LJnuxconf демонстрирует два пункта меню верхне
го уровня — Config и Control.
Чтобы раскрыть определенный
пункт меню, выберите его, используя
клавиши стрелок, и нажмите клавишу
Enter. Например, чтобы раскрыть меню
Config, можно выбрать Config и нажать
Enter. Результат показан на рис. 6.2.
В разделе Config существует много
ветвей (Networking, Users accounts, File
systems, boot mode). Чтобы закрыть
ветвь, выберите ее и снова нажмите En
ter. Чтобы выйти из приложения, испо
Рис. 6.2. льзуйте клавишу Tab для выделения
Раскрытие меню кнопки Quit, а затем нажмите Enter. Li
Config в LJnuxconf nuxconf проверит выполняющиеся сер
веры и конфигурацию и определит,
нужно ли чтото активизировать. В этом
случае появится экран с вариантами вы
бора, показанный на рис. 6.3.
Если пользователь захочет увидеть,
что Linuxconf будет делать для синхро
низации выполняющейся системы с те
кущей конфигурацией, он может
выбрать вариант «Preview what has to be
done» и нажать Enter. Появится другой
экран со списком того, что будет выпол
Рис. 6.3. нено (см. рис. 6.4).
Чтобы разрешить Linuxconf активи
Варианты выбора
для LJnuxconf при зировать перечисленные изменения,
выходе выйдите из экрана предварительного
просмотра, выберите пункт меню Acti
vate the changes и нажмите Enter. Linux
conf активирует все что нужно и
закончит работу.
Если Linuxconf будет использовать
ся с графическим интерфейсом пользо
вателя (GUI) из X Window, выполните
/usr/bin/gnome<linuxconf или /bin/
linuxconf из окна Xтерминала или с по
мощью менеджера окон. Дерево меню
выглядит в графической версии значи
Рис. 6.4. тельно удобнее (см. рис. 6.5).
Список действий, Любая ветвь, которая может быть
которые собирается раскрыта, имеет значок «+» перед име
выполнить LJnuxconf нем ветви, а уже раскрытая ветвь — зна
чок «». Например, на рис. 6.5 показана
полностью раскрытая ветвь Viewing system state (Просмотр состояния систе
мы), а все остальные ветви свернуты. Двойной щелчок по значку «+» или «»
раскрывает или закрывает ветвь.
Очень интересное свойство графического интерфейса Linuxconf состоит
в том, что каждый пункт, который выбран в дереве меню, появляется на пра
вой стороне экрана как отдельное окно с закладками (вкладками). Работая с
одним пунктом, можно одновременно обращаться к другому пункту. В таком
случае на правой стороне экрана будет несколько окон с закладками
(см. рис. 6.6). Здесь пользователь решил посмотреть пункт меню Feature, a
также параметры даты и времени. На правой стороне экрана можно увидеть
два окна с закладками. Разрешено добавить дополнительные окна с

www.books-shop.com
Использование Linuxсonf 119

Рис. 6.5.
Графический
интерфейс Linuxconf

Рис. 6.6.
Окна с закладками
в графическом
интерфейсе Linuxconf

закладками щелчком других пунктов меню дерева. Это очень гибкий и удоб
ный способ одновременной работы с несколькими пунктами меню.
Когда пользователь закрывает программу, Linuxeonf попросит его приме
нить все изменения, которые были сделаны ранее. Пользователю разрешен
предварительный просмотр изменений или выход без активации текущей
конфигурации.
К сожалению, интерфейс Linuxeonf на основе Web оказался самым неудач
ным среди всех трех вариантов, хотя он должен был быть самым живым и не
традиционным. В этой книге при обсуждении вопросов, связанных с Linuxeonf,
будет использоваться графический интерфейс, как наиболее удобный.
По умолчанию можно получить доступ к интерфейсу Linuxeonf на основе
Web только на локальном хосте. Другими словами, необходимо использовать
Webбраузер на той же машине, на которой запущена Linuxeonf. На рис. 6.7 —
основная страница Linuxeonf для этого интерфейса.
Обратите внимание на URL ( h t t p : //localhost: 98/). Здесь требуется «local
host», так как по умолчанию в связи с защитой запрещен удаленный

www.books-shop.com
120 Глава 6

Рис. 6.7.
Основная
Webстраница
Unuxconf

административный доступ через Web. В следующем разделе будет показано,


как можно его активизировать.
Настройка удаленного доступа к Linuxconf
на основе Web
Удаленное управление системой не является для Linux чемто новым. Сис
темные администраторы давно управляют удаленными серверами с помощью
Telnet или SSH. Удаленное управление на основе Web может предоставить
для той же цели более удобный интерфейс. Знакомое и согласованное внеш
нее представление, возможно, облегчит администраторамновичкам управле
ние удаленными системами. Управление на основе Web — это современная
тенденция практически для всего основного программного обеспечения, и
Linux не является исключением.
Возможности управления с помощью Webбраузера с любой платформы в
любое время безграничны. Это особенно полезно для управления большим
числом систем Linux отдельной организации. Но если имеется возможность
управлять системой откуда угодно, создается большая угроза для защиты сис
темы — ктонибудь может попытаться проникнуть в систему через Webинтер
фейс Linuxconf. Именно поэтому необходимо ограничить доступ к Linuxconf
на основе Web только защищенной сетью.
Linuxconf на основе Web является службой, выполняемой inetd. Когда
устанавливается пакет RPM для Linuxconf, к файлу /etc/inetd.conf добавля
ется строка следующего вида:
linuxconf stream tcp wait root /bin/linuxconf linuxconf http
Другая строка (см. ниже) добавляется к файлу /etc/services.
linuxconf 98/tcp
Это позволяет inetd выполнять Linuxconf в режиме HTTP, когда делается
запрос на соединение с портом 98 протокола TCP/IP. Другими словами, ког
да в системе Linux используется браузер для доступа к http://localhost:98/,
демон inetd запускает /bin/linuxconf с помощью параметра hup.

www.books-shop.com
Использование Linuxconf 121

I Linuxconf выполняется как root$процесс setuid. Поэтому дыра в ее


защите, скорее всего, предоставит привилегии root каждому, кто
пожелает. Linuxconf имеет более 80 000 строк кода C++.
Откровенно говоря, чувствуешь себя не очень уютно при
выполнении большой программы setuid через Web. Пользователь в
такой ситуации должен сделать собственный выбор.

По умолчанию Linuxconf разрешает Webдоступ только из локального хос


та. Если нужно разрешить доступ к Linuxconf через Web для удаленного
управления, выполните следующее:
1. Запустите linuxconf с консоли или из X Window.
2. Выберите пункт меню Config и раскройте его ветви, либо нажимая
Enter для текстового режима, либо делая двойной щелчок на нем для
запуска графического режима. Выберите пункт меню Misc. и раскройте
его. Теперь выберите пункт Linuxconf network access (Сетевой доступ
Linuxconf); должно появится окно с закладками, такое как показано на
рис. 6.8.
3. Установите флажок «Enable network access» (Разрешить сетевой
доступ). ,
4. Установите флажок «Log accessin /var/log/htmlaccess.log» (Журнал до
ступа в /var/log/htmlaccess.log), чтобы разрешить запись журнала за
просов доступа Linuxconf через сеть.
5. В поле ввода «network or host», введите имя хоста, которому необходи
мо разрешить доступ через Web. Можно также ввести здесь IPадрес
или адрес сети. Если нужно разрешить удаленное управление любому
хосту локальной сети (ЛВС), можно использовать адрес сети. Рис. 6.8
показывает, что был указан адрес сети 206.171.50.48. Чтобы разрешить
управление всем машинам в сети, была использована сетевая маска
255.255.255.240 в необязательном поле ввода «netmask». Сетевая маска
является необязательной, так как Linuxconf может вычислить сетевую
маску по адресу сети. Если планируется добавить несколько хостов, но
не всю сеть, можно указать только их IPадреса. По умолчанию можно
ввести два IPадреса и две необязательных сетевых маски. Если нужно
добавить большее количество хостов, щелкните кнопку Add, чтобы по
лучить дополнительные поля ввода.

Рис. 6.8.
Конфигурирование
сетевого доступа
Linuxconf

www.books-shop.com
122 Глава 6

6. Когда введены имена хостов или IPадреса или пары сеть/сетевая мас
ка, щелкните кнопку Activate.
7. Щелкните кнопку Quit для выхода из Lmuxconf и активизации текущей
конфигурации (когда это будет предложено).
Это позволит именованным хостам (или IPадресам) получить доступ к
Lmuxconf через Web.
Как уже упоминалось, Linuxconf использует для создания реальной конфи
гурации как функции внутреннего кода, так и внешние модули. В настоящее
время пакет RPM для Linuxconf поставляется практически со всеми доступ
ными модулями. Это, скорее всего, временно, так как модули Linuxconf, в
действительности, должны поставляться с отдельными пакетами. Например,
пакет Apache для Red Hat Linux должен содержать модуль Linuxconf. Если
Webсервер Apache не используется, то модуль Apache в вашей конфигурации
Linuxconf не нужен. Чем больше модулей используется, тем более захламля
ется интерфейс Linuxconf. Если разработчики приложений будут поставлять
модули самостоятельно, тогда пользователь будете иметь только то, что ему
нужно. Будем надеяться, что Linuxconf пойдет по этому пути уже в ближай
шем будущем. Пока этого не произошло, можно вручную сконфигурировать в
Linuxconf требуемые модули.

Конфигурирование модулей Linuxconf


В Linuxconf можно добавлять новые модули или деактивировать существу
ющие модули. Модули хранятся в каталоге /usr/lib/linuxconf/modules. Что
бы добавить новый модуль, загрузите нужный пакет RPM с FTP узла
Linuxconf. Список узлов FTP, содержащих файлы Linuxconf, доступен по ад
ресу h t t p : / / d n s . s o l u c o r p . q c . c a / l i n u x c o n f / a v a i l a b l e . h t m l .
Когда новый модуль Linuxconf загружен, используйте для его установки
команду rpm <ivh <пакет_модуля>. Когда модуль установлен, он автоматически
появляется в списке модулей в Linuxconf. Кроме того, он также автоматиче
ски активизируется.
Чтобы деактивировать модуль, сделайте следующее:
1. Запустите Linuxconf.
2. В меню Control выберите пункт Configure Linuxconf modules. На экра
не появится окно (см. рис. 6.9).
Рис. 6.9.
Конфигурирование
модулей Linuxconf

www.books-shop.com
Использование Linuxconf 123

3. Просмотрите список модулей и найдите тот, который нужно деактиви


ровать. Удалите флажок «This module is active», чтобы модуль стал неак
тивным.
4. Щелкните кнопку Accept.
5. Щелкните кнопку Quit, если больше ничего не собираетесь делать
в Linuxconf. Программа попросит активизировать изменения. Щелкни
те «Activate the changes», чтобы завершить процесс.
В следующий раз при запуске Linuxconf, программа выведет диалоговое
окно, показанное на рис. 6.10.
Рис. 6.10.
Диалоговое окно
[сконфигурирован ия
U'nuxconf

Это означает, что Linuxconf удаляет пункты меню, связанные с неактив


ными модулями. Linuxconf позволяет также создавать привилегированные
учетные записи пользователей, которые могут использоваться для управле
ния определенными аспектами системы Linux. Это свойство должно сущест
венно помочь, когда в организации работают несколько системных
администраторов. Можно переложить некоторые простые административ
ные задачи на младших администраторов, для чего создать учетные записи
обычных пользователей с ограниченными наборами привилегий (см. следую
щий раздел).
Определение привилегий пользователей
Linuxconf позволяет присвоить некоторые административные привиле
гии обычным пользователям. Рассмотрим такой пример: предположим, что
существует учетная запись обычного пользователя piked и для нее нужно за
дать некоторые административные привилегии.
Выполните следующее:
1. Запустите Linuxconf по учетной записи root.
2. Выберите в меню Config пункт «User accounts».
3. Выберите в пункте Normal (раздела меню Users accounts) подпункт
«User accounts». Появится список всех обычных пользователей систе
мы. Найдите нужного пользователя (piked в данном примере) и дважды
щелкните строку записи пользователя. Появится экран, такой как на
рис. 6.11.
4. Как можно видеть на рис. 6.11, окно с закладкой «Base Info» будет пока
зано первым. Щелкните закладку «Privileges», чтобы сконфигурировать
доступные параметры привилегий. Рис. 6.12 показывает окна с заклад
ками с доступными привилегиями пользователя.
5. Как можно видеть на рисунке, внутри окна «Privileges» существует четыре
окна с закладками. Первым из них является окно с закладкой «General
system control». Это окно предоставляет привилегии, показанные в таб
лице 6.2.
Чтобы предоставить любую из привилегий, показанных в таблице 6.2,
необходимо щелкнуть по подходящему варианту «Granted» или «Granted/
silent». Различие между ними состоит в том, что последняя не требует, чтобы
пользователь аутентифицировался с помощью пароля. Вообще такой режим
использовать не рекомендуется.
Если необходимо, чтобы пользователь управлял одной или несколькими
службами, щелкните закладку «Services», чтобы увидеть окно параметров

Ⱦɚɧɧɚɹɜɟɪɫɢɹɤɧɢɝɢɜɵɩɭɳɟɧɚɷɥɟɤɬɪɨɧɧɵɦɢɡɞɚɬɟɥɶɫɬɜɨɦ%RRNVVKRS
ɊɚɫɩɪɨɫɬɪɚɧɟɧɢɟɩɪɨɞɚɠɚɩɟɪɟɡɚɩɢɫɶɞɚɧɧɨɣɤɧɢɝɢɢɥɢɟɟɱɚɫɬɟɣɁȺɉɊȿɓȿɇɕ
Ɉɜɫɟɯɧɚɪɭɲɟɧɢɹɯɩɪɨɫɶɛɚɫɨɨɛɳɚɬɶɩɨɚɞɪɟɫɭpiracy@books-shop.com
124 Глава 6

Базовые Тип привилегии Пояснение


возможности May use linuxconf Если требуется, чтобы пользователь мог выполнять Linuxconf, не$
управления системой (Может использовать обходимо предоставить пользователю эту привилегию
linuxconf)
May activate config changes Предоставьте эту привилегию, если требуется, чтобы пользователь
(Может активизировать мог активизировать любые изменения в текущей конфигурации
изменения конфигурации) системы
May shutdown Предоставьте эту привилегию, если требуется, чтобы пользователь
(Может выключать) имел возможность выключить систему
May switch network mode (Мо$ Предоставьте эту привилегию, если требуется, чтобы пользователь
жет переключать режим сети) включал/выключал сетевое соединение
May view system logs Предоставьте эту привилегию, если требуется, чтобы пользователь
(Может просматривать мог просматривать файлы системных журналов
системные журналы)
SuperUser equivalence Предоставьте эту привилегию только тем пользователям, которым
(Эквивалентность необходимо иметь доступ с полномочиями суперпользователя
суперпользователю) (root)

Информация об
учетной записи
пользователя

служб. Набор доступных в системе служб зависит от того, что было установ
,лено. Рис. 6.13 иллюстрирует доступные службы в системе.
1. Если необходимо, чтобы пользователь стал менеджером учетных запи
сей пользователей POP/PPP/UCCP, щелкните закладку «User acco
unts» и предоставьте соответствующие привилегии. Можно также
щелкнуть закладку «Miscellaneous» и предоставить пользователю указан
ные там привилегии.
2. Щелкните кнопку Accept и выйдите из Linuxconf, щелкнув кнопку Quit
и активизируя тем самым сделанные изменения.
После выхода из Linuxconf зарегистрируйтесь в системе по учетной запи
си указанного в утилите пользователя и запустите Linuxconf. Проверьте свои
новые привилегии. Убедитесь, что они именно те, которые требовалось при
своить. Если данный пользователь, имеет все необходимые привилегии, мож
но считать работу законченной.
Теперь рассмотрим интересное свойство Linuxconf, которое позволяет
создавать в системе Red Hat Linux множество системных профилей.

www.books-shop.com
Использование Linuxconf 125
О

Рис. 6.12.
Параметры
привилегий
пользователя

Рис. 6.13.
Службы,
управляемые
с помощью Linuxconf

Использование множества профилей


конфигурации системы
Много лет назад компания Microsoft выпустила MSDOS б.хх с обновлен
ным синтаксисом AUTOEXEC.BAT и CONFIG.SYS, который позволял созда
вать модифицируемые загрузочные конфигурации. Создавая несколько
конфигураций для одной системы, пользователи MSDOS могли лучше испо
льзовать системные ресурсы. Возможность создания множества системных
профилей Linuxconf в чемто похожа на ту, что Microsoft предложила для
своей ОС. Единственное отличие состоит в том, что в Linuxconf более разви
тая версия системных профилей.
Linuxconf определяет системный профиль как набор подсистем. Подсис
тема является специальной группой конфигурационных файлов. Например,
почта является подсистемой, которая имеет такие конфигурационные файлы,
как /etc/aliases, /etc/mail/virusertable, /var/lib/mailertable и т.д. Linuxconf
хранит каждую определенную подсистему в подкаталоге /etc/linuxconf/archive.
Если подсистема определена, то ей дано имя семейства, такое же как и у

www.books-shop.com
126 Глава 6

создаваемого подкаталога. Например, если mail является именем семейства


подсистемы в конфигурации, то /etc/lmuxconf/archive/mail будет содер
жать конфигурационные файлы для этого системного профиля, относящие
ся к mail. Этот метод оказывается очень удобным, когда необходимо
использовать одни и те же конфигурационные файлы для двух или несколь
ких системных профилей. Скажем, если одинаковы подсистемы mail двух си
стемных профилей, можно просто указать Linuxconf на использование того
же профиля.
По умолчанию Lunuxconf предлагает два системных профиля: Office и
Ноте. В Linuxconf можно просмотреть список доступных системных профи
лей. Щелкните меню Control, выберите пункт «Control files and systems» и за
тем выберите пункт «Configure system profiles». Будет показан список
доступных конфигураций (см. рис. 6.14).

Доступные
(по умолчанию)
системные профили

Чтобы узнать, какой системный профиль использует в настоящее время


Linuxconf, щелкните пункт меню «Control», выберите подпункт «Control pa
nel» и затем выберите «Switch system profile». Появится список доступных
конфигураций, как показано на рис. 6.15.
Можно создать свой собственный системный профиль. Вот каким образом:
1. Щелкните пункт меню «Control», выберите подпункт «Control files and
systems» и выберите «Configure system profiles». Появится окно, как на
рис. 6.14.
2. Щелкните по кнопке «Add» и добавьте новый системный профиль. За
тем нужно будет ввести имя для нового системного профиля, как пока
зано на рис. 6.16. Имя является одним словом и не может иметь
внутри ни одного пробела. Введите произвольное имя и нажмите
кнопку «Accept».
3. Теперь необходимо ввести название нового профиля. Им может быть
все, что угодно, поскольку название используется только для того, что
бы помочь различать профили. Введите чтонибудь имеющее смысл.
4. Затем необходимо будет определить архивные имена семейств (т.е.
/etc/linuxconf/ archive/ <имя_семейства_подсистемы>) кия различных
подсистем, таких как crond, PPP/SLIP/PLIP, сервер DNS, правила
брандмауэра, сервер wuftpd, gated, inet, httpd, Ipd и т.д. Можно также
определить используемое по умолчанию архивное имя семейства, кото
рое будет использоваться, если для определенной подсистемы явно не
определяется архивное имя семейства. Если не задавать используемое

www.books-shop.com
Использование Linuxconf 127

Рис. 6.15.
Определение
текущего системного
профиля

Рис. 6.16.
Добавление имени
нового системного
профиля

по умолчанию имя семейства или явное имя семейства, то подсистемы со


храняются в файле /etc/conf.linuxconf. Если необходимо использовать су
ществующую подсистему из другого профиля, можно просто ввести имя
семейства этого профиля. Обратите внимание, что если подсистема ис
пользуется несколькими архивами, любые изменения в конфигурацион
ных файлах подсистемы будут применены во всех системных
профилях, использующих эту подсистему.
5. Когда все архивные имена семейств определены, нажмите кнопку Accept.
Новый профиль будет добавлен к списку доступных профилей. Еще раз
нажмите кнопку Accept.
6. Чтобы использовать вновь созданный профиль, щелкните пункт меню
Control, выберите подпункт «Control panel» и затем выберите «Switch
system profile». Теперь щелкните профиль, чтобы переключиться на
него. После переключения на новый профиль он будет автоматически
архивироваться при переключении на другой профиль. Чтобы

www.books-shop.com
128 Глава 6

архивировать его вручную, щелкните пункт меню Control, выберите


подпункт «Control panel» и затем выберите «Archive configuration».
Как можно видеть, Linuxconf предоставляет очень удобные средства экс
периментирования с различными конфигурациями без потери существую
щей конфигурации^ Если необходимо загружать систему в различных
конфигурациях, в этом поможет Linuxconf (см. следующий раздел).
Использование Linuxconf при запуске системы
При установке Linuxconf изменяет файл /etc/rc.d/rc.sysinit за счет встав
ки строки:
/sbin/askrunlevel
Так как /etc/rc.d/rc.sysinit выполняется прежде чем чтолибо иное про
граммой init (которая выполняется ядром, как первый процесс пользовате
ля), программа askrunlevel выполняется еще до того, как init переключит
систему в используемый по умолчанию уровень выполнения. Программа ask
runlevel выводит на системную консоль меню; подобное меню (в графиче
ском режиме) показано на рис. 6.17.
Рис. 6.17.
Меню загрузки
Unuxconf

Это меню позволяет выбрать операционный режим. Оно разрешает вы


брать одну из трех созданных ранее конфигураций: Graphics & Network (гра
фика и сеть), Text mode & Network (текстовый режим и сеть) и Maintenance
mode (Режим технического обслуживания). Первый режим подходит для ра
бочей станции X Window, соединенной с сетью; второй вариант подходит
для сервера; третий вариант необходим при техническом обслуживании для
поддержания системы в рабочем состоянии, например при выполнении ска
нирования файловой системы (fsck) или исправлении возникших проблем.
Если ни один вариант не выбран в течение заданного периода времени, вы
бирается операционный режим по умолчанию.
Можно также выбрать запуск системы с помощью одного из системных
конфигурационных профилей. Чтобы запустить систему с помощью сущест
вующего системного профиля, необходимо выбрать пункт меню «Select» или
пункт меню «configuration version». Затем надо будет ввести пароль пользова
теля root. После успешной аутентификации в качестве пользователя root
надо выбрать системную конфигурацию запуска. Можно также просмотреть
загрузочные журналы для выяснения ошибок загрузки.
С помощью Linuxconf можно пропустить это меню или изменить исполь
зуемый по умолчанию операционный режим, либо значение задержки таким
образом:
1. Запустите Linuxconf.
2. В меню Config выберите пункт «boot mode», а затем выберите подпункт
«default boot mode». Появится экран (см. рис. 6.18).
3. Если необходимо отключить загрузочное меню, снимите отметку в
поле «Boot time menu enabled».

www.books-shop.com
Использование Linuxconf 129

Рис. 6.18.
Окно конфигурации
режима загрузки

4. Чтобы изменить используемый по умолчанию операционный режим,


выберите вариант «Graphics & Network» или вариант «Text mode &
Network».
5. Чтобы изменить задержку вывода приглашения или задержку активиза
ции, введите подходящее время в секундах в полях «Prompt timeout»
или «Delay to activate».
6. Когда все изменения сделаны, нажмите кнопку Accept и примените из
менения, прежде чем выйти из Linuxconf.

Использование Linuxconf
Linuxconf может использоваться для конфигурирования и активизации
различных системных операций. Однако пока еще не все может быть полно
стью сконфигурировано. Одним из основных недостатков текущей версии
Linuxconf является отсутствие необходимой документации. Так как нет уве
ренности в том, что утилита Linuxconf готова для широкой эксплуатации, бу
дем рассматривать специальные конфигурационные параметры Linuxconf
там, где это уместно. Другими словами, вместо обсуждения различных вопро
сов о том, как конфигурировать sendmail или NFS с помощью Linuxconf, рас
смотрим нужные специальные параметры конфигурации Linuxconf в главах о
sendmail или NFS, где также обсуждаются традиционные средства конфигу
рирования этих служб.

www.books-shop.com
www.books-shop.com
Глава 7
Управление пользователями

В этой главе:
• Суперпользователи или привилегированные учетные записи
• Создание, изменение и удаление пользователей и групп
• Дисковые квоты для пользователей

правление пользователями является существенной частью повседнев


ной работы системного администратора. В этой главе будут представлены
различные операции управления пользователями.

Как стать суперпользователем


Вы уже знаете, что root — это учетная запись суперпользователя в любой
системе UNIX. При установке системы Red Hat Linux эта учетная запись ис
пользуется для первоначальной регистрации в системе. Так как учетная за
пись root предоставляет права (привилегии) суперпользователя, она
открывает доступ ко всей системе. Пользователь root может запускать и
останавливать любую программу, а также создавать и удалять любые файлы.
• Многие системные администраторыновички считают, что пользователь
root является единственным суперпользователем в системе. Это совершен
но неправильно. Имя пользователя «root» не превращает учетную запись в
суперпользователя. Посмотрим на строки из примера файла /etc/passwd.
root:dcwl2Y6bSUfyo:0:0:root:/root:/bin/tosh
bin:*:1:1:bin:/bin:
daemon:*:2:2:daemon:/sbin:
kabir:.HoiviYBP4/8U:0:0:Mohammed Kabi r:/home/kabi r:/bin/tcsh
sheila:gTwO/qLMFM9M.:501:501::/home/sheila:/bin/tcsh
apache:!!:502:502::/usr/local/apache:/bin/false

www.books-shop.com
132 Глава 7

Две учетные записи суперпользователей находится в этом файле паролей:


root и kabir. Чтобы понять суть, необходимо вспомнить, что файл
/etc/passwd имеет следующий формат:
<имя_пользователя>:<пароль>:<UIO>:<GID>:<полное_имя>: \
<домашний_каталог>:<оболочка>

Теперь обратите внимание на поля UID (идентификатор пользователя) и


GID (идентификатор группы) учетной записи root. Они оба содержат О
(ноль). Если посмотреть на строку записи kabir (похож на обычного пользо
вателя), можно увидеть, что его UID и GID также равны нулю. Именно это
превращает пользователя в суперпользователя. Другими словами, любой по
льзователь с UID и GID, равными нулю, эквивалентен суперпользователю,
в частности root.
Итак, учетную запись любого обыкновенного пользователя можно превра
тить в учетную запись суперпользователя. В большинстве случаев этого де
лать не надо, так как наличие большого числа учетных записей
суперпользователей может означать дополнительные проблемы с безопасно
стью. Но может существовать несколько учетных записей суперпользовате
лей, которые применяются в организациях, имеющих несколько системных
администраторов в одной системе. Это нужно для обеспечения хорошего уче
та в средах с несколькими администраторами. Например, если только что
описанные учетные записи kabir и root в файле паролей существуют для двух
различных системных администраторов, тогда, просматривая различные
файлы журналов, будет легче выяснить, кто сделал чтолибо как суперпользо
ватель, чем если бы два системных администратора должны были совместно
использовать учетную запись root. Но несколько учетных записей суперполь
зователей могут привести к другой нежелательной ситуации — когда система
кемто используется нелегально. В этом случае хакер создает учетную запись
суперпользователя, которая выглядит как обычная учетная запись, задавая
значения UID и GID, равными нулю. Это позволяет хакеру зарегистрировать
ся в системе и стать суперпользователем, не зная пароля пользователя root.
Этот прием сработает на системах, где системным администратором работа
ет новичок или он слишком занят, чтобы отследить такие изменения.
Посмотрим правде в глаза — ни один системный администратор не имеет
времени (работая в реальной коммерческой организации) ежедневно сле
дить за хакерами, поэтому необходимо использовать какойто сценарий в ка
честве средства контроля. Например:
/bin/grep/ '0:0' /etc/passwd | awk 'BEGIN {FS=":"> {print $1}' | mail
s "'date +" %D %T root
Это небольшой сценарий, который использует несколько стандартных
команд для проверки файла /etc/passwd на наличие пользователей со значе
ниями UID и GID, равными нулю. Он может послать почтовое сообщение по
льзователю root со списком таких учетных записей. Если этот сценарий
выполняется с помощью сгоп при размещении его файла в каталоге
/etc/cron.daily, то он будет ежедневно посылать почтовые сообщения со
списком суперпользователей. Регулярно проверяя сообщения, можно быстро
узнать, какие учетные записи имеют привилегии суперпользователя. Конечно,
искусный хакер может узнать об этом и изменить сценарий, чтобы предостав
лять ложную информацию. Но большая часть нелегального проникновения в
систему осуществляется дрожащими искателями, которые вряд ли тратят
время на исследование таких тонкостей. Большинство так называемых хаке
ров просто находят программу в Интернете, компилируют и выполняют ее,
чтобы получить доступ; у них часто отсутствуют знания, необходимые для
проведения проверок, которые мог бы создать аккуратный системный адми
нистратор.
Зная, что любая учетная запись пользователя может быть превращена в
учетную запись суперпользователя, можно предположить, что любой такой
пользователь может достаточно легко зарегистрироваться в системе Red Hat
Linux, но это не так. Система Red Hat Linux по умолчанию использует

www.books-shop.com
Управление пользователями 133

подключаемый модуль аутентификации (РАМ — Pluggable Authentification


Module), реализующий аутентификацию регистрации в системе, причем мо
дуль требует, чтобы доступ суперпользователя осуществлялся только с терми
налов, которые считаются безопасными. По умолчанию файл конфигурации
РАМ для регистрации в системе, /etc/pam.d/login, содержит строку следую
щего вида:
auth required /lib/security/pam_securetty.so
Данная строка утверждает, что необходимо обеспечить защитные меры,
требуемые модулем pam_securetty.so, прежде чем может быть разрешена ре
гистрация в системе. Этот специальный модуль считает попытку регистра
ции суперпользователя в системе удовлетворительной, только если она
осуществляется с TTY (терминала), указанного в файле /etc/securetty. Поэ
тому если обыкновенный пользователь превратится в суперпользователя и
попробует зарегистрироваться в системе через протокол Telnet (который ис
пользует устройство псевдоTTY), то он не сможет зарегистрироваться в сис
теме. Это можно легко изменить, добавляя в файл /etc/securetty устройства
псевдоTTY (обычно от ttypl до ttyp12). Этого делать не рекомендуется, так
как создается дополнительный риск нарушения защиты. Когда необходимо
использовать множество учетных записей суперпользователей, если на это
есть реальные причины администрирования и учета, сделайте следующее:
1. Создайте несколько у четых описей суперпользователей.
2. Создайте по одной учетной записи обыкновенного пользователя для
каждого суперпользователя.
3. Проинструктируйте каждого суперпользователя, чтобы они регистри
ровались в системе как обыкновенные пользователи и переходили в
учетную запись суперпользователя с помощью команды su (см. ниже).
Команда su может использоваться для подстановки UID и GID. Например,
можно зарегистрироваться в системе как обыкновенный пользователь и пе
рейти в учетную запись root, выполняя su без аргументов. Будет предложено
ввести пароль пользователя root. Если пароль пользователя root указан пра
вильно, su запустит новую оболочку и зарегистрирует пользователя в системе
как пользователь root.
Помните, что суперпользователи (UID = О, GID = 0) имеют полный доступ
ко всем ресурсам системы и именно поэтому являются очень важными учет
ными записями. В следующем разделе будет показано, как можно делегиро
вать привилегии суперпользователя учетным записям обыкновенных
пользователей, не превращая их в полномасштабных суперпользователей.

Присвоение привилегий
обыкновенным пользователям
Используя команду sudo, можно разрешить обыкновенным пользователям
выполнять команды, которые обычно выполняет суперпользователь. Пред
положим, что в организации работают главный системный администратор и
два новых системных администраторапомощника. Можно передать этим
двум помощникам некоторые рутинные административные задачи главного
администратора. Нужно ли создавать две дополнительные учетные записи су
перпользователя с UID и GID, равными нулю, чтобы эти два администратора
могли иметь полный доступ ко всем ресурсам системы? Это зависит от того,
насколько им можно доверять. Будьте крайне осторожны, работая в качестве
суперпользователя. Поскольку появление доверия требует некоторого време
ни, можно предположить, что новым администраторам будет предоставлен
доступ только к тому, в чем у них есть необходимость. Для этого нужно так
сконфигурировать sudo, чтобы позволить этим сотрудникам как обыкновен
ным пользователям выполнять привилегированные команды. Вот каким об
разом.
Команда sudo разрешает пользователям, определенным в файле /etc/su
doers, выполнять команды суперпользователя. Например, обыкновенный

Ⱦɚɧɧɚɹɜɟɪɫɢɹɤɧɢɝɢɜɵɩɭɳɟɧɚɷɥɟɤɬɪɨɧɧɵɦɢɡɞɚɬɟɥɶɫɬɜɨɦ%RRNVVKRS
ɊɚɫɩɪɨɫɬɪɚɧɟɧɢɟɩɪɨɞɚɠɚɩɟɪɟɡɚɩɢɫɶɞɚɧɧɨɣɤɧɢɝɢɢɥɢɟɟɱɚɫɬɟɣɁȺɉɊȿɓȿɇɕ
Ɉɜɫɟɯɧɚɪɭɲɟɧɢɹɯɩɪɨɫɶɛɚɫɨɨɛɳɚɬɶɩɨɚɞɪɟɫɭpiracy@books-shop.com
134 Глава 7

пользователь, которому позволено выполнять команды суперпользователя, с


помощью sudo может выполнить:
sudo vi /etc/passwd
Это позволит пользователю изменить файл /etc/passwd. Программа sudo
легко конфигурируется, поэтому можно точно определить, что может или не
может делать обыкновенный пользователь, перечисленный в файле /etc/
sudoers. Файл /etc/sudoers имеет следующие типы строк:
• Игнорируются пустые строки и строки комментариев (начинающиеся
с символа «#»).
• Необязательные строки псевдонимов хостов используются для созда
ния коротких имен в списке хостов. Строка псевдонима хоста должна
начинаться с ключевого слова Host_Alias, а хосты в списке должны
быть разделены запятыми. Например:
Host_Alias REDHAT=wormhole,blackhole
Здесь wormhole и blackhole — это два хоста, которые могут называться
REDHAT.
• Необязательные строки псевдонимов пользователей используются для
создания коротких имен в списке пользователей. Строка псевдонима
пользователя должна начинаться с ключевого слова User_Alias, а поль
зователи в списке должны быть разделены запятыми. Например:
User_Alias ASSISTANTS=mike,brian
• Необязательные строки псевдонимов команд должны использоваться
для создания коротких имен в списке команд. Псевдонимы команд дол
жны начинаться с ключевого слова Cmnd_Alias, а команды в списке
должны быть разделены запятыми. Например:
Cmnd_Alias CMDS=/bin/rm,/bin/chmod,/bin/chown
• Необязательные псевдонимы runas (выполнятькак) используются для
создания коротких имен в списке пользователей. Такой псевдоним мо
жет использоваться для указания sudo о выполнении команды от име
ни одного из пользователей списка псевдонимов. Например:
Runas_Alias OP=root,operator
• Строки спецификаций доступа для пользователей. Синтаксис специ
фикации доступа пользователя следующий:
<пользователь> <хост>=[выполнять как пользователь] <список_команд>
Чтобы определить список, можно определить реальное имя пользова
теля или использовать User_Alias. Аналогично применяется реальное
имя хоста или Host_Alias. По умолчанию все команды, выполняемые с
помощью sudo, выполняются с правом root. Если нужно выполнить
команду от имени другого пользователя, можно определить имя поль
зователя (или Runas_Alias). Можно специфицировать команду (или
Cmnd_Alias), например:
kabir wormhole= /sbin/shutdown
Здесь пользователю kabir разрешается выполнять команду /sbin/shut
down на хосте wormhole. Обратите внимание, что можно вставить сим
вол «!» перед командой или ее псевдонимом, чтобы запретить
использование команды или псевдонима команды.
Можно определить несколько псевдонимов в одной строке, например:
User_Alias ASSISTANT=mike,brian:INTERNS=monika,paula,jones

www.books-shop.com
Управление пользователями 135

Здесь два разделенных символом двоеточия псевдонима (ASSISTANT и


INTERNS) определены в одной строке. Такой же синтаксис применим и к
другим типам псевдонимов.
Существует два специальных ключевых слова: ALL и NOPASSWD. Ключе
вое слово ALL должно означать «все», a NOPASSWD используется для указа
ния того, что не нужен ввод пароля. Листинг 7.1 показывает пример файла
/etc/sudoers.
Листинг 7.1. Пример файла /etc/sudoers
# Файл sudoers.
#
# Этот файл ДОЛЖЕН редактироваться с помощью команды
# 'visudo' пользователем root.
#
# Смотрите на manстраницах подробное описание того, как
# создается файл sudoers.
#
# Спецификация псевдонимов хостов
# Спецификация псевдонимов пользователей
User_Alias SENIORADMIN=kabir
User_Alias ASSISTANTS=mike,John
# Спецификация привилегий пользователей
SENIORADMIN ALL=ALL
ASSISTANTS ALL=ALL
Этот файл /etc/sudoers определяет два псевдонима пользователей,
SENIORADMIN и ASSISTANTS, где первый из них имеет только одного поль
зователя (kabir), а второй имеет двух пользователей (mike и John). Специфи
кация привилегий пользователей утверждает:
Пользователи, перечисленные в псевдониме SENIORADMIN, могут вы
полнять sudo на всех (ALL) хостах как root (по умолчанию) и эти пользовате
ли могут также выполнять все (ALL) команды. Так как пользователь kabir
является единственным членом этой группы, он может выполнять все коман
ды с помощью sudo. Другими словами, пользователь kabir может делать все,
что может делать пользователь root.
Вторая спецификация пользователей утверждает, что пользователям, пе
речисленным в псевдониме ASSISTANTS, будут разрешены в точности те же
привилегии доступа, что и в первой спецификации.
Теперь вернемся назад к сценарию первого примера, где находятся два
помощника, которым пока еще не нужно иметь полного доступа суперпользо
вателя. Предположим, что главный системный администратор (идентифика
тор пользователя = yourid) хочет, чтобы эти два пользователя (sysadl, sysad2)
имели привилегии только для выполнения команды shutdown. В таком случае
файл /etc/sudoers может выглядеть таким образом:
# Спецификация псевдонимов пользователей
User_Alias SENIORADMIN=yourid
User_Alias ASSISTANTS=sysad1,sysad2
# Спецификация привилегий пользователей
SENIORADMIN ALL=ALL
ASSISTANTS ALL=/sbin/shutdown
Предположим, что через некоторое время главный системный админист
ратор удостоверился, что эти два пользователя могут использовать другие
привилегии суперпользователя разумным образом, поэтому можно предоста
вить им полный доступ, за исключением привилегии выполнять команду su.
Файл /etc/sudoers выглядит теперь так:
# Спецификация псевдонимов пользователей

www.books-shop.com
136 Глава 7

User_Alias SENIORADMIN=yourid
User_Alias ASSISTANTS=sysad1,sysad2

ft Спецификация привилегий пользователей


SENIORAOMIN ALL=ALL
ASSISTANTS ALL=ALL,!/bin/su

Из спецификации пользователей для ASSISTANTS видно, что им разреша


ется выполнять все (ALL) команды с помощью sudo, за исключением коман
ды /bin/su. Команда sudo может быть полезной при создании пользователей
с частичными привилегиями суперпользователя. Теперь, когда было расска
зано о том, как создавать и управлять учетными записями суперпользовате
лей, рассмотрим вопросы управления, связанные с обыкновенными
пользователями.
При создании, изменении и удалении учетных записей пользователей су
ществуют две возможности: управлять пользователями с помощью утилит
командной строки или использовать linuxconf. Так как первый метод являет
ся традиционным, а второй метод — многообещающим, рассмотрим оба вари
анта.

Управление пользователями
с помощью утилит командной строки
По мере того как система Linux становится все более популярной, компа
ния Red Hat и сообщество Linux в целом стараются максимально упростить
ее использование. Проект linuxconf является тому хорошим примером. Одна
ко традиционный способ управления системой UNIX попрежнему нужен,
чтобы пользователи других операционных систем UNIX могли легко управ
лять системами Linux. В этом разделе будет показан традиционный способ
реализации управления пользователями с помощью различных утилит коман
дной строки.

Команды, рассматриваемые в последующих разделах, работают


также и.с теневыми паролями. Теневые пароли описаны в главе 18.

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


Создание учетной записи нового пользователя выполняется достаточно
просто. Например, чтобы создать пользователя с именем newuser, можно вы
полнить команду useradd:
useradd newuser

Эта команда добавит новую запись в /etc/passwd (и в /etc/shadow —


см. главу 18), используя системные параметры по умолчанию. Например, ког
да предыдущая команда выполняется в системе Red Hat Linux, в /etc/passwd
появится новая строка, подобная этой:
newuser:!!:506:506::/home/newuser:/bin/bash
Если вспомнить содержимое полей записей в /etc/passwd из предыдуще
го примера, можно обнаружить, что поле пароля (второе поле) задано как !!.
Это означает, что этот пароль не задан и пользователь не может сейчас заре
гистрироваться в системе. Поэтому необходимо создать пароль для этого поль
зователя, выполняя команду passwd следующим образом:
passwd newuser

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


будет зашифрован и добавлен к записи пользователя в файле /etc/passwd.
Значения UID и GID будут автоматически выбраны командой useradd.
Обычно для создания UID и GID нового пользователя команда просто увели
чивает на единицу последний использованный UID в /etc/passwd и последний
GID в /etc/group. Домашний каталог пользователя создается в используемом

www.books-shop.com
Управление пользователями 137

по умолчанию домашнем каталоге верхнего уровня. Аналогично, оболочка


для регистрации в системе также выбирается из системных значений по
умолчанию. В дальнейшем будет показано, как задавать эти значения по умол
чанию. Если необходимо переопределить системное значение по умолчанию,
можно указать в командной строке соответствующий параметр. Чтобы пере
определить используемый по умолчанию домашний каталог, введите пара
метр d newdirectary (где newdirectory является именем каталога). Например:
useradd newuser $d /www/newuser
Будет создан новый пользователь newuser, а его домашний каталог попа
дет в /www/newuser. Обратите внимание, что useradd будет создавать только
конечный каталог, а не весь путь доступа. Например, если в качестве пара
метра указано <d /some/new/dir/myuser, useradd будет создавать myself то
лько если /some/new/dir/ уже существует.
Когда создается новый домашний каталог, файлы, содержащиеся в катало
ге /etc/skel копируются в новый домашний каталог. Эти файлы обычно явля
ются конфигурационными файлами используемой по умолчанию оболочки,
имеющими в качестве первого символа имени точку. Например, если по
умолчанию используется оболочка /bin/bash, должны существовать исполь
зуемые по умолчанию версии .bashrc, .bash_profile, .bash_login в каталоге
/etc/skel, чтобы можно было автоматически настроить с помощью этих фай
лов домашний каталог нового пользователя. Ниже мы подробно обсудим этот
процесс.
• Команда useradd, которая поставляется с системой Red Hat Linux, создает
личную группу для пользователя с тем же именем, что и имя пользователя.
Например, если выполняется команда useradd kabir, тогда в файле
/etc/passwd будет создан новый пользователь с именем kabir и новая группа
с именем kabir в файле /etc/group. Этот метод позволяет полностью изоли
ровать новогб пользователя от остальных и поэтому обеспечивает высокий
уровень секретности. Если пользователь создает новый файл, то файл досту
пен только ему изза принадлежности к личной группе. Пользователь должен
будет явно изменить полномочия файла, чтобы позволить комуто еще уви
деть этот файл.
Однако если политика учетных записей новых пользователей противоре
чит идее личной группы, можно переопределить группу, используя параметр
g group (где group является именем группы). Например:
useradd mjkabir $g users
Это заставит useradd создать нового пользователя (mjkabir) с используе
мой по умолчанию группой users.

1 Можно воспользоваться командой groups <имя_пользователя>,


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

Если нужно сделать нового пользователя членом других групп системы,


можно использовать параметр G <розделенный_запятыми_сгшсок_групп>. На
пример:
useradd mjkabir $G wheel,admins
Здесь новый пользователь (mjkabir) будет добавлен к группам wheel и ad
mins в файле /etc/group.

Создание новой группы


Чтобы создать новую группу, используйте команду groupadd. Например:
groupadd mygroup
Эта команда добавит новую группу с именем mygroup в файл /etc/group и
в файл /etc/gshadow, если используются теневые пароли. По умолчанию
программа groupadd будет создавать группу с GID больше 499, так как 0499
являются зарезервированными для учетных записей системного уровня,

www.books-shop.com
138 Глава 7

таких как root, bin и mail. Поэтому если файл /etc/group имеет последнее за
данное значение GID для группы равным 511, вновь созданная с помощью
этой программы группа будет иметь GID, равный 512, и т.д. Если нужно за
дать GID новой группы особым образом, используйте параметр g GID. Также,
если потребуется создать группу с GID в диапазоне 0499, используйте пара
метр г вместе с параметром g GID, чтобы заставить groupadd создать новую
группу в виде системной. Обратите внимание, что если GID или группа, кото
рая задается в программе groupadd, уже используется в /etc/group, возник
нет сообщение об ошибке.
Модификация существующей
учетной записи пользователя
Весьма распространены проблемы, возникающие в связи с забытыми па
ролями пользователей, причем решать их приходится системному админист
ратору. Как можно изменить различные параметры учетной записи
пользователя?
Изменение пароля
Чтобы изменить или указать пароль пользователя, используйте команду
passwd. Например:
passwd kabir
Команда позволит изменить пароль пользователя kabir. Чтобы подтвер
дить пароль, будет предложено ввести его дважды. Убедитесь, что для поль
зователей задаются хорошие пароли. Не используйте легко запоминающиеся
пароли на основе слов из словаря. Обратите внимание, что программа passwd
может выполняться самим пользователем для изменения своего собственно
го пароля. Когда рядовой пользователь использует программу passwd, ему не
нужно задавать аргумент с именем пользователя, так как утилита разрешает
пользователю изменить только его собственный пароль.
Изменение оболочки
ЕСЛИ пользователю не подходит используемая по умолчанию оболочка,
можно изменить ее на любую из тех, что перечислены в файле /etc/shells.
Используйте команду chsh для изменения оболочки пользователя. Например:
chsh brian
Эта команда позволяет изменить текущую оболочку пользователя brian.
Если определить оболочку или имя программы, которые не присутствуют в
файле /etc/shells, пользователь не сможет зарегистрироваться в системе.
Этой командой пользователь может изменить свою собственную оболочку.
Обыкновенному пользователю не нужно указывать в качестве аргумента имя
пользователя, так как он может изменить только свою собственную оболочку.
Обратите внимание, что можно использовать команду usermod для изме
нения информации об оболочке следующим образом:
usermod $s <путь_новой_оболочки> <имя_пользователя>

где <путь_новой_обалочки> и <имя_палъзователя> являются допустимыми значе


ниями.
Изменение домашнего каталога
Чтобы изменить домашний каталог существующего пользователя, выпол
ните команду usermod:
usermod $d <новый_домашний_каталог> <имя_пользователя>

где <новый_домашний_каталог> и <имя_полъзователя> являются допустимыми


значениями.
Например, если пользователь с именем keller имеет домашний каталог
/home/keller и хочет изменить его на /home2/keller, можно выполнить
команду:
usermod $d /home2/keller keller

www.books-shop.com
Управление пользователями 139

Эта команда определяет новый каталог в качестве домашнего каталога по


льзователя. Однако если необходимо переместить содержимое его домашне
го каталога в новое место, используйте параметр т:
usermod $d $m /home2/keller keller
Изменение UID
Чтобы изменить UID (уникальный идентификатор) пользователя, исполь
зуйте команду usermod:
usermod u <UID> <имя_пользователя>
где <UID> и <имя_полъзователя> являются допустимыми значениями.
Например:
usermod $g 500 myfrog
Эта команда присвоит UID пользователя myfrog значение 500. Обратите
внимание, что все файлы и каталоги, которые принадлежат пользователю в
его домашнем каталоге, автоматически отразят изменение UID. Однако если
пользователь владеет файлами вне своего домашнего каталога, необходимо
будет вручную изменить владельца, используя команду chown (см. главу 5).
Изменение используемой по умолчанию группы
Чтобы изменить используемую по умолчанию группу пользователя, вы
полните команду usermod:
, usermod $g <имя_группы или GID> <имя_пользователя>
где <имя_группы или СЮ> и <имя_палъзователя> являются допустимыми значе
ниями.
Например:
usermod $g 777 myfrog
Эта команда сделает для пользователя myfrog группу по умолчанию 777.
Изменение даты окончания действия учетной записи
Если используются теневые пароли, можно изменить дату окончания дей
ствия учетной записи пользователя с помощью команды usermod следующим
образом:
usermod e <ММ/ДД/ГГ> <имя_пользователя>
где <ММ/ДД/ГГ> и <имя_полъзователя> являются допустимыми значениями.
Например: .
usermod $e 12/31/99 kabir
Эта команда установит дату окончания действия учетной записи пользова
теля kabir в значение 12/31/99.
Изменение информации для finger
ЕСЛИ пользователям разрешено посылать запросы finger друг о друге или
демон finger выполняется для внешних пользователей, чтобы дать им воз
можность посылать запросы finger об учетных записях пользователей систе
мы, то можно также изменять информацию для finger, такую как полное имя
и номер телефона. Выполните команду chfn, чтобы изменить информацию
finger о пользователе. Например:
chfn Jennifer
Это позволит изменить информацию finger пользователя Jennifer, кото
рая хранится в файле /etc/passwd. С помощью этой программы пользова
тель может самостоятельно изменить свою информацию finger. Кроме того
пользователь может создать файл .plan в своем домашнем каталоге, который
будет добавлен к информации, выводимой программой finger.

www.books-shop.com
140 Глава 1

Модификация существующей группы


Чтобы изменить имя или GID (глобальный идентификатор) существую
щей группы, используйте команду groupmod. Чтобы переименовать группу,
используется синтаксис:
groupmod $n <новая_группа> <текущая_группа>
Например:
groupmod $n experts novices
Здесь существующая группа novices переименовывается в experts. Чтобы
изменить GID, используйте параметр g СЮ. Например:
groupmod $g 666 troublemakers
Эта команда изменит текущий GID группы troublemakers на 666.

Удаление или отключение учетной записи


пользователя
Чтобы удалить существующего пользователя, используйте команду userdel.
Например:
userdel snake
Эта команда удаляет пользователя с именем snake. Если необходимо уда
лить домашний каталог пользователя и все содержимое внутри каталога, ис
пользуйте параметр г. Обратите внимание, что userdel не удаляет
пользователя, если пользователь в данное время зарегистрирован в системе.
Попросите пользователя выйти из системы, отправив ему сообщение (write
<имя_полъзователя>), а если попросить об этом невозможно, используйте
команду killall, чтобы завершить все процессы, связанные с этим пользовате
лем. Затем выполните команду userdel.
Если необходимо временно отключить учетную запись пользователя, мож
но выбрать один из вариантов:
• Используйте команду usermod s <новая_оболочка> <имя_полъзователя>,
чтобы изменить оболочку на /bin/false (убедитесь, что она находится
в вашем файле /etc/shell). Это не позволяет пользователю регистри
роваться в системе.
" Если используются теневые пароли, можно воспользоваться командой
usermod e <ММ/ДД/ГГ> <имя_полъзователя>, чтобы сократить срок
действия учетной записи.
Если необходимо отключить доступ для учетных записей всех пользовате
лей в связи с временным отключением, можно создать файл с именем
/etc/nologin с поясняющим сообщением, почему доступ будет запрещен.
Программа login не разрешит никому, кроме root, регистрироваться в систе
ме до тех пор пока существует этот файл.

Если управление сервером выполняется с помощью Telnet или


таких средств, как доступ с помощью защищенной оболочки (ssh),
не создавайте файл /etc/nologin, поскольку вы не сможете
зарегистрироваться в системе. Это связано с тем фактом, что по
умолчанию учетным записям root или другого суперпользователя не
разрешается регистрироваться в системе непосредственно с
незащищенного TTY (т.е. терминала, не определенного в
/etc/securetty) и поэтому вы не сможете зарегистрироваться
сначала как обыкновенный пользователь, а затем с помощью
команды su перейти в учетную запись привилегированного
пользователя.

www.books-shop.com
Управление пользователями 141

Создание используемых по умолчанию


параметров пользователя
Используемые по умолчанию командой useradd параметры для создания
новых пользователей находятся в файле /etc/default/useradd. Пример этого
файла показан на листинге 7.2.
Листинг 7.2. Пример файла /etc/default/useradd
# файл используемых по умолчанию параметров useradd
GROUP=100
HOME=/home
INACTIVE=$1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
Строка GROUP=100 определяет, что по умолчанию используется группа
100. Это значение применяется, только когда отключается (с помощью пара
метра п) используемая по умолчанию личная группа (т.е. группа с таким же
именем, как у нового пользователя). Можно также определить имя группы
вместо цифрового значения. Значение, которое указано в этой строке должно
существовать в /etc/group. Можно изменить это значение таким образом:
useradd $D $д <имя_новой_группы> или <GID>
где <имя_новой_группы> и <GID> являются допустимыми значениями.
Строка HOME=/home определяет используемый по умолчанию домаш
ний каталог верхнего уровня для новых пользователей. Например, при созда
нии нового пользователя с именем joe, по умолчанию будет использоваться
каталог /home/joe. Если по какимто причинам это не подходит, можно из
менить каталог по своему усмотрению. Убедитесь только, что он уже сущест
вует. Измените это значение следующим образом:
useradd $D $d <каталог>
Строка INACTIVE—1 определяет, когда после окончания срока действия
пароля (в днях) учетная запись станет неактивной. Это будет иметь смысл,
только если используются теневые пароли. Используемое по умолчанию зна
чение 1 определяет, что учетные записи никогда не становятся неактивны
ми. Можно изменить это значение так:
useradd $D $d <число_дней>
Строка EXPIRE= определяет, когда учетная запись должна быть отключе
на. Это имеет смысл, только если используются теневые пароли. По умолча
нию учетные записи никогда не отключаются. Можно изменить это значение
следующим образом:
useradd $D$ $е <ММ/ДД/ГГ>
Значения, используемые по умолчанию при создании новых пользовате
лей, находятся в файле /etc/login.def. Листинг 7.3 показывает пример тако
го файла.
Строка SHELL=/bin/bash определяет путь доступа используемой по умол
чанию оболочки регистрации в системе. Можно изменить это значение та
ким образом:
useradd $D $s /bin/tcsh
Обратите внимание, что программа useradd не проверяет, является ли
указанный путь действительной оболочкой и существует ли она вообще. Поэ
тому убедитесь, что определяемый путь является действительной оболочкой
и перечислен в файле /etc/shells.
Строка SKEL=/etc/skel определяет каталог, где хранятся различные кон
фигурационные файлы пользователей, такие как файлы с точкой для оболо
чек, X Window и т.д. Файлы из этого каталога копируются в новый домашний

www.books-shop.com
142 Глава 7

каталог новой учетной записи пользователя. Обычно нет необходимости из<


менять этот путь на другой каталог. Но если потребуется это сделать, нужно
будет изменить файл /etc/default/useradd, используя текстовый редактор,
или просто создать символьную связь /etc/skel, которая указывает на требуе<
мый каталог.
Если используются теневые пароли, то для создания учетных записей по<
льзователей используется другой конфигурационный файл с именем /etc/lo<
gin.def. См. листинг 7.3.
Листинг 7.3. Пример файла /etc/login.def
# «ТРЕБУЕТСЯ*
# Каталог, где находятся почтовые ящики, _или_ имя файла,
# относительно домашнего каталога.
# Если вы _определили_ и то и другое, приоритет получает MAIL_DIR.
# QMAII__DIR существует для Qmail
t#
#QMAIL_DIR Maildir MAILJHR /var/spool/mail
MAIL_FILE .mail
## Параметры контроля за старением пароля:
#
t PASS_MAX_OAYS Максимальное число дней,
# в течение которых может использоваться пароль.
#
# PASS_MIN_OAYS Минимальное число дней, допустимое
# между изменениями пароля.
#
# PASS_MIN_LEN Минимально допустимая длина пароля,
#
# PASS_WARN_AGE За сколько дней до окончания действия
# пароля выдается предупреждение.
#
PASS_MAX_OAYS 99999
PASS_MIN_DAYS О
PASS_MIN_LEN 5
PASS_WARN_AGE 7
#
tt Min/max значения для автоматического выбора uid
# в useradd
#
UID_MIN 500
UID_MAX 60000
#
# Min/max значения для автоматического выбора gid
# в groupadd
#
GIO_MIN 500
GID_MAX 60000
#
# Требовать пароль, прежде чем chfn/chsh сможет сделать
п какиелибо изменения.
#
CHFN_AUTH yes
t#
# He разрешать пользователям изменять свое "действительное имя"
# с помощью chfn.

www.books-shop.com
Управление пользователями 143

CHFN_RESTRICT yes

# Если определена эта команда, она выполняется при удалении пользователя.


# Она должна удалять все задания at/cron/print и т.д.,
# которыми владеет удаляемый пользователь (вводится первым аргументом).
#
#USERDEL_CMD /usr/sbin/userdel_local

tt Если команда useradd должна создавать домашние каталоги для


# пользователей по умолчанию, то задаем Yes (Да). Так поступают в системах
# Red Hat.
# Этот параметр
# используется совместно с флагом $т в командной строке useradd.
#
CREATE_HOME yes
Для объяснения работы вполне достаточно комментариев (т.е. строк, ко
торые начинаются с символа «#») этого файла.

Управление пользователями с помощью linuxconf


Теперь давайте посмотрим, как все только что рассмотренные операции
можно выполнить с помощью linuxconf. Будем пользоваться интерфейсом на
основе X Window.
Добавление новой учетной записи пользователя
Чтобы получить доступ к интерфейсу управления пользователями и linux
conf, сделайте следующее:
Выберите пункт меню Config > User accounts > Normal •> User па левой
стороне окна. На экране появится окно с закладкой (см. рис. 71).
Рис. 7.1.
Окно linuxconf
для управления
пользователями

Чтобы добавить нового пользователя, щелкните кнопку Add на правой


стороне окна. Появится новое окно (см. рис. 7.2).
Окно имеет несколько закладок. Первой из них является закладка Base
info (базовая информация). Здесь необходимо ввести имя пользователя (Login
name), полное имя (Full name), необязательное имя группы (group), необяза
тельные дополнительные группы (Supplementary groups), необязательный

Ⱦɚɧɧɚɹɜɟɪɫɢɹɤɧɢɝɢɜɵɩɭɳɟɧɚɷɥɟɤɬɪɨɧɧɵɦɢɡɞɚɬɟɥɶɫɬɜɨɦ%RRNVVKRS
ɊɚɫɩɪɨɫɬɪɚɧɟɧɢɟɩɪɨɞɚɠɚɩɟɪɟɡɚɩɢɫɶɞɚɧɧɨɣɤɧɢɝɢɢɥɢɟɟɱɚɫɬɟɣɁȺɉɊȿɓȿɇɕ
Ɉɜɫɟɯɧɚɪɭɲɟɧɢɹɯɩɪɨɫɶɛɚɫɨɨɛɳɚɬɶɩɨɚɞɪɟɫɭpiracy@books-shop.com
144

Добавление новой
учетной записи
пользователя

домашний каталог (Home directory), необязательную командную оболочку


(Command interpreter) и необязательный идентификатор пользователя (User
ID). Можно создать эту учетную запись, но не инициировать ее в данный мо
мент, если не указывать флажок «This account is enabled».
Можно использовать другие закладки (Extra, Mail aliases и Privileges), что
бы задать дополнительные данные этой учетной записи. Параметры приви
легий, находящиеся в окне с закладкой Privileges применимы только к
linuxconf. Другими словами, когда привилегии задаются для обыкновенной
учетной записи, привилегия применима, только если пользователь может вы
полнить linuxconf.
Например, если требуется, чтобы пользователь мог выполнять linuxconf,
можно разрешить ему эту операцию в окне с закладкой Privileges (см.
рис. 7.3).
Когда выбраны необходимые привилегии (если это вообще сделано), щел
кните Accept, чтобы добавить пользователя. Обратите внимание, что пользо
ватель не будет добавлен, пока конфигурация не станет активированной, что

Добавление
привилегий новой
учетной записи
пользователя

www.books-shop.com
Управление пользователями 145

можно сделать с помощью пункта меню Control > Control Panel > Activate
или при выходе из linuxconf.
Модификация существующей
учетной записи пользователя
Чтобы модифицировать учетную запись пользователя в linuxconf, выберите
пункт меню Config > User accounts > Normal > User accounts из левой полови
ны окна. Вы увидите окно с закладкой, показанное на рис. 7.1. Теперь щелк
ните имя учетной записи на правой половине окна — появится окно с
закладкой, как на рис. 7.2, но содержащее всю информацию об учетной запи
си. Можно изменить все, что потребуется, и воспользоваться пунктом меню
Control > Control Panel > Activate configuration, чтобы активизировать изме
нения немедленно или при выходе из linuxconf.
Удаление или отключение существующей
учетной записи пользователя
Чтобы удалить или отключить учетную запись пользователя, выберите в
левой половине окна пункт меню Config > User account > Normal > User acco
unts. Появится окно с закладкой, как на рис. 7.1. Теперь щелкните имя учет
ной записи на правой стороне — появится окно с закладкой, как на рис. 7.2,
но содержащее всю информацию о данной учетной записи. Чтобы удалить
эту учетную запись, щелкните кнопку Del. Чтобы отключить эту учетную за
пись, снимите флажок в поле «This account is enabled».

Добавление, модификация и удаление группы


Чтобы добавить, модифицировать или удалить группу, сделайте следующее:
• Выберите пункт меню Config > User accounts > Normal > Group
definitions на ~чой стороне окна. Появится окно с закладкой, как
на рис. 7.4.
Рис. 7.4.
Добавление,
модификация или
удаление группы

• Чтобы добавить новую группу, щелкните Add. Это вызовет новое


окно, как на рис. 7.5. Введите имя группы (Group name) и необязатель
ные GID (Group ID), членов (Alternate members) и т.д. Затем щелкните
Accept. Новая группа начнет действовать после активизации измене
ний в linuxconf.
• Чтобы модифицировать существующую группу, щелкните имя группы
в окне, показанном на рис. 7.4. Появится новое окно с данными о вы
бранной группе. Сделайте необходимые изменения и щелкните

www.books-shop.com
146 Глава 7

Добавление новой
группы

Accept. Изменения данных о группе начнут действовать после активи


зации изменений в linuxconf.
• Чтобы удалить существующую группу, щелкните ее имя в окне, изобра
женном на рис. 7.4. Появится новое окно с закладкой и информацией
о выбранной группе. Щелкните кнопку Del. Удаление производится
после активизации изменений в linuxconf.
Хотя linuxconf пытается упростить управление пользователями, эта ути
лита часто дает сбои, когда в системе чтото изменяется. Например, когда я
обновил своего агента транспорта почты SMTP (sendmail), управление поль
зователями в linuxconf перестало работать корректно. Утилита не смогла
найти программу (makemap), которая пришла вместе с sendmail и поэтому
продолжала повторно спрашивать (даже после того, как был определен путь
доступа к программе) о ней всякий раз, когда я хотел добавить, модифициро
вать или удалить пользователя.
Теперь посмотрим, как можно контролировать дисковое пространство
каждого пользователя.

Дисковые квоты пользователей


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

Установка программного обеспечения дисковых квот


Официальный компактдиск Red,Hat Linux поставляется с программным
обеспечением дисковых квот. Например, чтобы установить на компьютере
х86 программное обеспечение квот, можно выполнить следующую команду
из каталога /RedHat/RPMS компактдиска:
rpm $ivh quota$version.1386,rpm
Когда программное обеспечение дисковых квот установлено, его можно
конфигурировать.

www.books-shop.com
Управление пользователями 147

Конфигурирование поддержки дисковых квот


Прежде всего надо решить какой раздел выделить под дисковые квоты.
Обычно им становится раздел домашних каталогов пользователей и про
странства Web. Определите также, будут ли реализованы квоты для каждого
пользователя, для каждой группы либо то и другое одновременно. Здесь пред
полагается, что будут реализованы дисковые квоты для разделов /home и
/www, причем для раздела /home будут использоваться дисковые квоты толь
ко для пользователей, а для раздела /www — дисковые квоты только для
групп. Также предположим, что существует файл /etc/fstab, который содер
жит:
/dev/sda1 /home ext2 defaults 1 2
/dev/sda5 /www ext2 defaults 1 2
Теперь, чтобы реализовать дисковые квоты в /home на уровне пользова
теля, необходимо изменить первую строку следующим образом:
/dev/sda~l /home ext2 defaults, usrquota 1 2
Новое значение в поле параметров монтирования предыдущей строки
fstab необходимо для того, чтобы включить для пользователей дисковые кво
ты. Аналогично, чтобы включить в /www дисковые квоты на уровне групп,
вторая строка fstab должна быть изменена таким образом:
/dev/sda5 /www ext2 defaults.grpquota 1 2

Можно также использовать usrquota и grpquota для одного раздела,


если планируется реализовать квоты как для пользователей, так и
для групп.

Когда эти изменения сделаны, измените сценарий /etc/re.d/rc.local так:


# Проверка и включение квот.
if [ х /sbin/quotacheck ]; then
echo "Checking quotas. This may take some time ..."
sbin/quotacheck avug
echo "Done."
fi
if [ x /sbin/quotaon ]; then
echo "Enabling disk quota ..."
/sbin/quotaon avug
echo "Done. "
fi
При выполнении этого сценария после загрузки файловой системы будет
задан режим проверки квот, а затем включена система поддержки дисковых
квот.
Теперь необходимо создать файл квот для каждой файловой системы, для
которой определен контроль квот:
touch /home/quota.user
touch /www/quota.group
Убедитесь, что эти два файла имеют полномочия чтения/записи только
для пользователя root. Теперь конфигурация квот завершена на системном
уровне, но прежде чем перейти к выделению квот пользователям и группам,
необходимо перезагрузить систему. Это приведет к исполнению программы
quotacheck, которая создаст информацию об использовании дискового про
странства в файлах квот.
Присвоение пользователям дисковых квот
После перезагрузки системы с новой конфигурацией квот можно выде
лить дисковые квоты для каждого пользователя. Для этого примените

www.books-shop.com
148 Глава 7

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


ля kabir, выполните:
edquota $u kabir
Эта команда вызовет используемый по умолчанию текстовый редактор
(такой, как vi или тот, который задан в переменной окружения $EDITOR) с
содержимым, похожим на показанное ниже:
Quotas for user kabir:
/dev/sda5: blocks in use: 0, limits (soft = 0, hard = 0)
inodes in use: 0, limits (soft = 0, hard = 0)
Здесь сообщается, что пользователь kabir использовал до сих пор 0 блоков
(в КБ) в дисковом разделе /dev/sda5 (под управлением usrquota) и что огра
ничения (мягкие или жесткие) еще не заданы. Кроме того, этот пользователь
еще не владеет никакими файлами (inodes) и никаких ограничений для фай
лов (мягких или жестких) еще не указано.
Можно задавать ограничения как на объем пространства (в блоках), выде
ленное пользователю, и одновременно контролировать количество файлов,
принадлежащих ему. Мягкое (soft) ограничение определяет максимальный
объем дискового пространства (blocks) или количество файлов (inodes), ко
торые может иметь пользователь. Жесткое ограничение показывает абсо
лютный объем дискового пространства (blocks) или количество файлов
(inodes), которые может занять пользователь.
Например, необходимо задать дисковое пространство для пользователя
kabir с мягким ограничением в 1 МБ (1024 КБ) и жестким ограничением 4 МБ
(4096 КБ). Предположим, что необходимо указать для этого пользователя
мягкое ограничение в 128 файлов/каталогов (inodes) и жесткое ограничение
в 512 файлов/каталогов. Так можно задать лимит квоты с помощью команды
edquota u kabir:
Quotas for user kabir:
/dev/sda5: blocks in use: 0, limits (soft = 1024, hard = 4096)
inodes in use: 0, limits (soft = 128, hard = 512)
После сохранения конфигурации пользователь больше не сможет превы
сить жесткие ограничения. Если пользователь попробует превысить любое
из этих двух значений (дисковое пространство и счетчик inode), будет выве
дено сообщение об ошибке. Например:
[kabir@picaso /home]$ mkdir eat_space
mkdir: cannot make directory 'eat_space': Disc quota exceeded
Здесь пользователь kabir попытался создать новый каталог в /home, но
лимит квоты уже превышен, поэтому выведено сообщение об ошибке.
Если в системе много пользователей, которым необходимо присвоить
квоты, то предыдущий метод будет слишком трудоемким. Чтобы упростить
работу, программа edquota имеет параметр р <полъзователъ_прототип>, кото
рый позволяет копировать конфигурацию дисковой квоты пользователяпро
тотипа другим пользователям. Предположим, требуется использовать
конфигурацию квоты, которая только что была создана для пользователя
kabir, для трех других пользователей (sheila, Jennifer и mrfrog). Можно вы
полнить команду:
edquota $p kabir $u sheila Jennifer mrfrog
Теперь все три пользователя будут иметь конфигурацию дисковой квоты,
как у пользователя kabir.
Контроль дисковых квот групп очень похож на управление квотами поль
зователей. Синтаксис edquota для конфигурирования групповых квот:
edquota $g <имя_группы>

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


групп, необходимо сконфигурировать период отсрочки (grace period) с

www.books-shop.com
Управление пользователями 149

помощью команды edquota <t. При выполнении этой команды в редакторе по<
явится что<то подобное:
Time units may be: days, hours, minutes, or seconds
Grace period before enforcing soft limits for users:
/dev/sda5: block grace period:. 7 days, file grace period: 5 days
(Единицами измерения времени могут быть дни, часы, минуты или секунды.
Период отсрочки перед применением к пользователю мягких ограничений:
/dev/sda5: период отсрочки в блоках: 7 дней, период отсрочки в файлах:
5 часов)
Здесь период отсрочки на ограничение дискового пространства (в бло<
ках) равен 7 дням, а период отсрочки на количество файлов (inodes) равен
только 5 часам.

Мониторинг использования диска


Чтобы узнать, как пользователи занимают дисковое пространство, можно
выполнить команду quota:
quota $u <имя_пользователя>
Например:
quota $u kabir
Disk quotas for user kabir (uid 500):
Filesystem blocks quota limit grace files quota limit grace
/dev/sda5 0 1024 4096 1 128 512
Можно проводить этой командой мониторинг использования диска груп<
пой. Синтаксис будет такой:
quota $g <группа>
Когда найдены пользователи или группы, которые превысили ограниче<
ние, можно послать им почтовое сообщение о том, чтобы они сократили за<
нятое дисковое пространство до приемлемых границ.

www.books-shop.com
www.books-shop.com
Глава 8
Управление процессами

В этой главе:
• Запуск процессов
• Посылка сигналов выполняющемуся процессу
• Выполнение процессов в основном или фоновом разделе
• Задание приоритета процесса с помощью nice
• Контроль за процессами системы
• Запись в журнал сообщения процессов с помощью syslog
• Автоматизация выполнения процесса с помощью at и сгоп

истема Red Hat Linux является в действительности репозиторием про


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

Запуск процессов
Как известно из главы 3, когда запускается компьютер, его встроенное
программное обеспечение (BIOS) выполняет программу начальной загруз
ки (обычно находящуюся на загрузочном диске). Программа начальной за
грузки стартует ядро. Ядро в свою очередь выполняет программу ink.

www.books-shop.com
152 Глава 8

Поэтому самым первым процессом в системе становится экземпляр програм


мы init. Она запускает другие процессы согласно уровню выполнении систе
мы, который определен в файле /etc/re.d/rc.sysinit. Так как для каждого
процесса должен быть указан идентификатор процесса (РШ), то процесс init
получает PID, равный 1. Номер РШ используется для управления процессами
в системе. Процесс init обычно один раз выполняет программы инициализа
ции системы, такие как swapon, mount и setserial, а затем запускает один или
несколько процессовдемонов. Процесс демон (daemon process) является экзем
пляром программы, которая выполняется все время или существует, только
когда возникает определенный сигнал. Например, почтовый сервер STMP
sendmail выполняется как процессдемон. Он будет действовать постоянно и
обслуживать почтовые запросы по мере их поступления; в идеале он должен
существовать только когда поступает сигнал от ядра.
Когда компьютер с системой Red Hat Linux сконфигурирован для работы
в качестве сервера, процесс init запускает процессдемон, называемый inetd.
Этот процесс отвечает за работу многих широко используемых сетевых
служб, таких как Telnet и FTP. Он известен как суперсервер Интернета (Inter
net Super Server). Он выполняется и ожидает запросы соединения на различ
ных портах, определенных в /etc/services. Когда приходит запрос к
определенной службе, процесс запускает соответствующий демон из пере
численных для этой службы в файле /etc/inetd.conf. Например, когда с уда
ленного компьютера запрашивается подключение telnet к серверу Red Hat
Linux, процесс inetd получает запрос на порт TCP с номером 23. Затем он за
пускает процессдемон telnet (/usr/sbin/in.telnetd). Демон telnet запускает
процесс /bin/login и использует псевдотерминальное устройство для обмена
информацией между процессом login и удаленным клиентом telnet. Процесс
login запускает процесс оболочки (такой как /bin/bash, /bin/tcsh, /bin/csh
или /bin/sh), если пользователь пройдет аутентификацию. Затем процесс
оболочки позволяет пользователю выполнить другие процессы. Как можно
видеть, речь все время идет о процессах. Фактически, состояние системы в
любой момент времени определяется процессами, которые она выполняет.
Поэтому для системного администратора жизненно важным является знание
того, как управлять процессами.

Управление и мониторинг процессов


Как ранее упоминалось, процессыдемоны обычно запускаются процессом
init во время начальной загрузки. Можно контролировать, какие демоны вы
полняются во время загрузки, изменяя конфигурационные файлы и сценарии
init (см. главу 3). Помимо процессовдемонов, существуют другие виды испол
няемых процессов, которые называются пользовательскими или интерактив
ными. Интерактивный процесс выполняется с помощью оболочки. Каждая
стандартная оболочка предоставляет командную строку, где пользователь вво
дит имя программы. Когда пользователь вводит в командной строке имя реаль
ной программы, оболочка создает свою копию в виде нового процесса и
заменяет новый процесс программой, указанной в командной строке. Другими
словами, оболочка выполняет указанную программу как отдельный процесс.
Для получения информации обо всех выполняющихся в системе процес
сах можно запустить утилиту ps.

Использование ps для получения статуса процесса


Эта утилита предоставляет отчет обо всех процессах в системе. Напри
мер, если выполнить команду ps из оболочки регистрации, мы получим:
PID TTY STAT TIME COMMAND
31795 р7 S 0:00 $tcsh
31811 р7 R 0:00 ps

Как можно видеть, ps предоставляет отчет в виде таблицы. Здесь ps показы


вает, что выполняются два процесса: оболочка tcsh, которая в действительно
сти является оболочкой /bin/tcsh (действует как оболочка регистрации) и сам
процесс ps. Таблица 8.1 объясняет значения полей вывода ps.

www.books-shop.com
Управление процессами 153

Поля вывода Поле Пояснение


утилиты ps USER или UID Имя пользователя, который является владельцем процесса
PID Идентификатор (ID) процесса
%CPU Процент использования процессом центрального процессора. Так как масштаб
времени, на основе которого вычисляется это значение, изменяется, то воз$
можно превышение 100%
%МЕМ Процент использования процессом памяти (в килобайтах)
SIZE Размер (в килобайтах) виртуальной памяти, используемой процессом
RSS Размер резидентной части или размер реальной памяти (в килобайтах), испо$
льзуемый процессом
TTY Терминал (try), ассоциированный с процессом. Обычно имя tty сокращается.
Например, р7 выводится вместо /dev/ttyp7
STAT Состояние процесса. Представлено символами, такими как R (выполняющийся
или готовый к выполнению), S (спящий), I (неиспользуемый), Z (зомби), D
(ожидающий диск), Р (ожидающий страницу), W (выгруженный), N (с приори$
тетом, пониженным командой nice), Т (прекращенный), < (приоритет выполне$
ния повышен суперпользователем) и т.д.
START Время или дата запуска процесса
TIME Общее время процессора, использованное процессом
COMMAND Выполняемая командная строка
N1 Номер приоритета nice
PRI Номер приоритета процесса
PPID Идентификатор (PID) родительского процесс;
WCHAN Имя функции ядра, где процесс перешв) идания. Имя функции
извлекается из файла /boot/System.map
RAGS Числовой флаг, ассоциированный с процессом

Утилита ps имеет также несколько аргументов командной строки. Табли


ца 8.2 показывает обычно используемые параметры.

Используемые Параметр Описание


параметры ps а Показать процессы, принадлежащие всем пользователям
е Показать переменные окружения процесса после выполнения командной
строки
I Показать вывод в длинном формате
и Показать имя пользователя и время запуска процесса
w Показать вывод в широком формате. Обычно вывод усекается, если он не мо$
жет уместиться в строке. Этот параметр позволяет получить всю информацию
о процессе
txx Показать процессы, которые ассоциированы с устройством tty xx
_х Показать процессы без управляющих терминалов tty

Рассмотрим теперь несколько примеров.


Чтобы увидеть все процессы, которые исполняются в данный момент, вы
полните:
ps и
Пример результата этой команды показан ниже:
USER PID %CPU %MEM SIZE RSS TTY STAT START TIME COMMAND
kabir 18 0.0 0 . 8 1556 1040 p5 S 08:41 0:00 $tcsh
kabir 135 0.0 0.8 1560 1040 p7 S 09:03 0:00 $tcsh
kabir 852 53.8 0.6 1604 788 p5 R 09:33 0:04 perl /eatcpu.pl
kabir 855 0.0 0.3 848 484 p7 R 09:34 0:00 ps u

Ⱦɚɧɧɚɹɜɟɪɫɢɹɤɧɢɝɢɜɵɩɭɳɟɧɚɷɥɟɤɬɪɨɧɧɵɦɢɡɞɚɬɟɥɶɫɬɜɨɦ%RRNVVKRS
ɊɚɫɩɪɨɫɬɪɚɧɟɧɢɟɩɪɨɞɚɠɚɩɟɪɟɡɚɩɢɫɶɞɚɧɧɨɣɤɧɢɝɢɢɥɢɟɟɱɚɫɬɟɣɁȺɉɊȿɓȿɇɕ
Ɉɜɫɟɯɧɚɪɭɲɟɧɢɹɯɩɪɨɫɶɛɚɫɨɨɛɳɚɬɶɩɨɚɞɪɟɫɭpiracy@books-shop.com
154 Глава 8

Таблица показывает все процессы, которые выполняются для пользовате


ля kabir. Обратите внимание, что в таблицу попал и процесс ps. Первые две
строки показывают, что kabir выполняет два сеанса оболочки tcsh. Интерес
на третья строка, так как она показывает, что сценарий Perl с именем eatc
pu.pl использует примерно 53.8% времени работы процессора. Обратите
внимание на флаги STAT. Сценарий Perl и ps являются здесь единственными
выполняющимися (или выполняемыми) процессами. Просматривая поле
TTY, можно сказать, какой процесс соединен с каким tty.
Рассмотрим теперь другой пример:
ps аи
Здесь ps должен показать все процессы (исключая те, которые не ассоции
рованы с какимто управляющим tty). Чтобы узнать, какими процессами вла
деет определенный пользователь, можно выполнить:
ps аи | grep username
где username является именем реального пользователя.
Например, ps аи | grep sheila покажет все интерактивные процессы (т.е.
процессы, ассоциированные с tty), выполняемые пользователем sheila. Как
правило, обычным пользователям не разрешается выполнять процессыдемо
ны или процессы, которые не ассоциированы с tty. Однако если нужно про
сто узнать, не существуют ли определенные процессы для какогонибудь
пользователя, можно выполнить:
ps aux
Параметр х приказывает ps перечислить процессы, которые не связаны с
терминалами. Можно идентифицировать эти процессы, просматривая поле
TTY, которое будет соответствовать символу «?» вместо сокращенного имени
устройства tty, такого как р7 (/dev/ttyp7).
Чтобы найти PID родителя процесса, можно выполнить:
ps I PID
где PID является идентификатором процесса.
Например, если нужно найти родительский процесс для PID, равного 123,
можно выполнить ps 1123 — PID родительского процесса будет указан в поле
PID таблицы.
Чтобы определить, какие исходные переменные окружения доступны
процессам, можно выполнить:
ps e
Информация об окружении присоединяется к полю COMMAND.

ПРИМЕЧАНИЕ Обычный пользователь не может использовать параметр е, чтобы


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

Итак, ps позволяет узнать различную информацию о процессах в системе.


Теперь можно использовать полученную информацию для управления про
цессами.

Передача сигналов выполняющемуся процессу


Система Linux и все системы UNIX в целом имеют способ пересылки про
цессам различных сигналов. Сигнал является исключением, которое обычно
используется для приказания процессу выполнить чтото, отличное от обыч
ного действия. Например, если нужно уничтожить процесс, можно послать
ему сигнал о прекращении работы. Команда отправки процессу сигналов на
зывается kill. Это имя вносит путаницу, так как kill может использоваться для

www.books-shop.com
Управление процессами 155

отправки любого действительного сигнала, а не только сигнала о прекраще<


нии процесса.
Использование kill
Команда kill может быть встроенной командой оболочки для многих попу<
лярных оболочек, таких как csh и tcsh. Однако существует внешняя програм<
ма kill, которая обычно находится в каталоге /bin. Обе версии программы
работают одинаково. Чтобы узнать, какие сигналы можно посылать процес<
сам с помощью kill, выполните:
kill 1
Должен появиться список, похожий на следующий:
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL
5) SIGTRAP 6). SIGIOT 7) SIGBUS 8) SIGFPE
9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR2
13) SIGPIPE 14) SIGALRM 15) SIGTERM 17) SIGCHLD
18) SIGCONT 19) SIGSTOP 20) SIGTSTP 21) SIGTTIN
22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ
26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO
30) SIGPWR
Такой вывод создается встроенной командой kill оболочки bash
(/bin/bash). Другие оболочки или /bin/kill выводят результат немного иначе.
Например, /bin/kill <1 покажет:
HUP INT QUIT ILL TRAP IOT UNUSED FPE KILL USR1 SEGV USR2
PIPE ALRM TERM STKFLT CHLD CONT STOP TSTP TTIN TTOU 10
XCPU XFSZ VTALRM PROF WINCH
Внимательный читатель заметит, что эти две команды kill различаются
форматом вывода, который они создают. Если использовать оболочку
/bin/csh (С<оболочку) или оболочку /bin/tcsh (улучшенную С<оболочку)
вместе со встроенной командой kill с параметром <1, будет получен еще один
список, который не совпадет ни с одним из уже полученных. Хотелось бы
знать наверняка, какие сигналы действительно доступны в Red Hat Linux, a
также предоставить пример интерактивного использования утилиты kill для
отправки различных сигналов процессу. Поэтому написан сценарий Perl, на<
зываемый gen_signal_demo.pl (см. листинг 8.1). Сценарий позволяет иденти<
фицировать сигналы, доступные в системе Red Hat Linux.
Листинг 8.1. gen_signal_demo.pl
#!/usr/bin/perl
#
# Глава 8
#
# Написан kabir@integrationlogic.com
#
# Назначение: Создать сценарий Perl, который устанавливает
# программы обработки сигналов для всех возможных сигналов.
# Этот сценарий используется для интерактивной демонстрации
# того, как ловятся сигналы.
#
# Примечания: Я не пытаюсь предотвратить в сценарии установку
бесполезных обработчиков сигналов для непрерываемых сигналов
(KILL, STOP).

Синтаксис: gen_signal_demo.pi > signal_demo.pi

# Сначала создадим строку #!/usr/bin/perl для

www.books-shop.com
156 Глава i

»
print «SBANG;
ttl/usr/bin/perl
SBANG
foreach Ssignal (keys %SIG) {
print «SIG;
\$SIG{$signal> = sub { print "Caught a Ssignal signal.\\n"; } ;
SIG
}
print « MAIN;
print "Hello, my PID is \$\$.\\n";
print "Use kill signal \$\$ command to experiment on me.\\n";
# Задать 10c событие тревоги.
alarm (10);
# Бесконечный цикл
while(1) {
sleep(1); tt Остановиться на 1 с.
}
MAIN
Этот относительно небольшой сценарий Perl создает другой сценарий
Perl. Выполните сценарий:
gen_signal_demo. pi > signal_demo.pl
Просмотрев созданный сценарий, можно заметить, что он определяет
программы обработки сигналов с помощью следующей конструкции:
$SIG{.сокращенное имя сигнала} = sub { it код обработчика };
Например:
$SJG{INT} = sub { print "Caught a INT signal. \n"; > ;
Здесь определен обработчик SIGINT. Он печатает «Caught a INT sig
nal.\n», когда сценарий посылает сигнал SIGINT. Выполните сценарий sig
nal_demo.pl таким образом:
./signal_demo. pi
Вывод будет подобен этому:
Hello, my PID is XXXX
Use kill $$signal XXXX command to experiment on me.
Строка XXXX будет заменена реальным PID процесса. Прежде чем можно
будет использовать команду kill для отправки различных сигналов этой про
грамме, просмотрите таблицу 8.3, чтобы найти дополнительную информа
цию по каждому сигналу.
Когда начнет выполняться сценарий signal_demo.pl, воспользуйтесь дру
гой виртуальной консолью и загрузите оболочку или xterm (если вы в X Win
dows), чтобы посылать сигналы процессу. При выполнении сценария он
выводит PID, поэтому нет необходимости выполнять ps, чтобы найти PID
этого процесса. Посылайте процессу любые сигналы из только что перечис
ленных и наблюдайте за сообщениями, которые он выводит. Например, если
PID этого процесса равен 12345 и выполняется:
kill HUP 12345
будет получено:
Caught a HUP signal.

www.books-shop.com
Управление процессами 157

Доступные сигналы
Номер Имя (корот$ Описание
кое имя)
1 SIGHUP (HUP) Прекратить. Этот сигнал часто используется для приказа про$
цессу перезагрузить конфигурационные файлы
2 SIGINT (INT) Прервать
3 SIGQUIT (QUIT) Завершить
4 SIGILL (ILL) Незаконная инструкция
5 SIGTRAP (TRAP) Выявить ловушку
6 SIGIOT (ЮТ) Инструкция ЮТ
7 SIGBUS (BUS) Ошибка шины
8 SIGFPE (FPE) Исключение с плавающей точкой
9 SIGKILL (KILL) Уничтожить. Этот сигнал нельзя перехватить (т.е. обработать в
процессе), заблокировать или проигнорировать
10 SIGUSR1 (USR1) Определенный пользователем сигнал 1
11 SIGSEGV (SEGV) Нарушение сегментации
12 SIGL/SR2 (USR2) Определенный пользователем сигнал 2
13 SIGPIPE (PIPE) Запись в канал, который никто не сможет прочитать
14 SIGALRM (ALRM) Тревога (будильник)
15 SIGTERM (TERM) Сигнал прекращения программы. Он часто посылается перед от$
правкой сигнала KILL, что позволяет процессу перехватить этот
сигнал и подготовиться к выходу ^
16 SIGSTKFLT Ошибка стека сопроцессора
17 SIGCHLD (CHLD) Изменился статус потомка
18 SIGCONT (CONT) Продолжить после сигнала STOP. Этот сигнал не может быть
блокирован
19 SIGSTOP (STOP) Остановить. Сигнал не может быть перехвачен (т.е. обработан в
процессе), блокирован или игнорирован
20 SIGTSTP (TSTP) Сигнал остановки, созданный на клавиатуре, обычно с помощью
Ctrl+Z
21 SIGTTIN Чтение в фоновом режиме, предпринятое с терминала управле$
ния
22 SIGTTOU Запись в фоновом режиме, произведенная на терминал управле$
ния
23 SIGURG В сокете установлено условие срочности
24 SIGXCPU Превышено ограничение на время процессора.
См. man setrlimit (2)
25 SIGXFSZ Превышено ограничение на размер файла. См. man setrlimit (2)
26 SIGVTALRM Аварийный сигнал виртуального времени. См. man setrtimer (2)
27 SIGPROF Аварийный сигнал профилирующего таймера.
См. man setitimer (2)
28 SIGWINCH Изменение размера окна
29 SIGIO Возможен ввод/вывод в дескриптор. См. man fcntl (2)
30 SIGPWR Отказ питания
31 UNUSED He используется

Обратите внимание: сценарий планирует, чтобы событие аварийного сиг


нала (с помощью функции alarm) возникло после 10 с выполнения. Это при
ведет к появлению на экране:
Caught a ALRM signal.

www.books-shop.com
158 8

Когда посылается сигнал KILL, с помощью kill KILL 12345, процесс завер
шается, так как этот сигнал не может быть перехвачен обработчиком сигна
лов. Аналогично, если послать процессу сигнал STOP, процесс будет
приостановлен, после чего появится сообщение:
Suspended (signal)
Можно выполнить команду ps и увидеть, что поле STAT показывает
флаг Т. Это означает окончание процесса. Но в действительности процесс
остановлен, а не закончен. Чтобы вернуть процесс в режим выполнения,
можно послать ему сигнал CONT. Интересное свойство режима остановки
состоит в том, что процесс попрежнему может получить все ожидающие сиг
налы, которые были посланы во время периода его остановки. Другими сло
вами, если процесс был приостановлен с помощью сигнала STOP, а затем
был послан сигнал HUP во время приостановки процесса, этот сигнал посы
лается процессу, когда он снова начинает выполняться после получения сиг
нала CONT.
Большинство сигналов, перечисленных в таблице 8.3, редко используются
вне системных программ. Системный администратор скорее всего будет ис
пользовать только HUP, INT, TERM, STOP и KILL. Вместо указания имен сиг
налов в команде kill можно использовать номера сигналов. Например, чтобы
послать сигнал KILL, можно либо выполнить kill KILL PID или kill 9 PID.
А еще лучше уничтожить процесс по имени, используя утилиту killall.
Использование killall
Эта утилита позволяет уничтожить процесс, указав его имя. Например,
если существует процесс с именем signal_demo.pl и нужно его уничтожить, не
вводя PID, можно выполнить команду:
killall —KILL signal_demo. pi
Если имя сигнала не задано, killall автоматически посылает сигнал
SIGTERM. Однако будьте очень осторожны при использовании killall, так как
утилита уничтожает все экземпляры упомянутой команды. Иногда незнание
значения PID может обернуться неприятностью. Например, посмотрите на
вывод ps:
PID TTY STAT TIME COMMAND
1246 p8 S 0:00 tcsh
2160 p6 S 0:00 tcsh
2365 p1 S 0:00 bash
2459 p6 S 0:00 vi bar.txt
2460 p8 S 0:00 vi foo.txt
2463 p1 R 0:00 ps
Предположим, что по какимто причинам необходимо уничтожить про
цесс vi, используемый для редактирования файла foo.txt. Если для прекраще
ния выполнения только этого экземпляра vi будет выполнена команда killall
vi foo.txt, окажется что все сеансы vi прекращены. Это связано с тем, что kil
lall ожидает в качестве аргументов имена команд и посылает сигналы всем эк
земплярам упомянутой программы.

Будьте предельно внимательны при выполнении команды killall в


режиме суперпользователя, так как она удаляет все экземпляры
упомянутой команды из всей системы.

Теперь, когда мы знаем, как посылать сигналы выполняющимся процес


сам, давайте посмотрим, как можно управлять приоритетом процесса.

Управление приоритетом процесса


Linux ассоциирует с каждым процессом два номера приоритета. Напри
мер, если выполнить команду ps 1, можно увидеть два поля, PRI и N1. Поле
PRI показывает реальный приоритет процесса, который динамически

www.books-shop.com
Управление процессами 159

вычисляется операционной системой. Для вычисления номера N1 операци


онная система принимает в расчет уже полученный номер PRI. Номер N1 на
зывается niceномером или запрошенным номером приоритета выполнения
процесса. Этот номер может быть задан владельцем или суперпользователем
для воздействия на реальный номер приоритета выполнения (PRI). Можно ис
пользовать утилиту /bin/nice, чтобы изменить номер N1. Эта утилита часто
встраивается в популярные оболочки, включая /bin/csh, /bin/tcsh и другие.
Использование nice для изменения приоритета процесса
По умолчанию встроенная в оболочку версия nice или утилита /bin/nice
позволяет пользователю лишь уменьшить приоритет процесса. Только супер
пользователю разрешено увеличивать приоритет процесса. Реальный диапа
зон приоритета процесса — от 20 до 20, причем чем меньше число, тем выше
приоритет. Другими словами 20 является самым высоким приоритетом N1,
а 20 — самым низким. Прежде чем задать приоритет процесса, выполните
which nice, чтобы определить, будет ли выполняться встроенная в оболочку
версия nice или утилита /bin/nice. Это необходимо, так как различается син
таксис этих двух версий. Предположим, что требуется выполнить сценарий
Perl foo.pl с самым низким приоритетом (20), тогда версия команды nice в
оболочке будет:
nice +10 foo.pl
и версия /bin/nice той же команды будет:
nice $10 foo.pl
Если суперпользователь хочет увеличить приоритет сценария foo.pl до
10, встроенная в оболочку версия команды nice будет выглядеть так:
nice $10 foo.pl
а версия /bin/nice той же команды будет выглядеть так:
nice $10 foo.pl
Если это слишком сложно для восприятия, можно использовать другую
утилиту с именем snice, которая тоже управляет приоритетом процесса. Вот
каким образом:
1. Воспользуйтесь ps, чтобы найти PID процесса, приоритет которого не
обходимо изменить.
2. Чтобы увеличить приоритет, выполните snice <n PID, где п является
номером нового приоритета. Например, snice (5 1234 увеличивает на 5
приоритет процесса 1234 (PID). Обратите внимание: как и в случае
с nice, только суперпользователь может увеличить приоритет.
3. Чтобы уменьшить приоритет, выполните snice +n PID, где п является
номером нового приоритета. Например, snice +5 1234 уменьшает прио
ритет процесса 1234 (PID) на 5. Как и в случае с nice, любой пользова
тель может снизить приоритет процесса, которым он владеет.
Кроме утилиты snice, для изменения приоритета\процесса можно исполь
зовать утилиту renice. Предыдущие операции для snide подходят и для renice.
Для проверки, произошло ли изменение приоритета, можно выполнить
ps 1, чтобы узнать значение поля N1.
Выполнение процесса в основном или в фоновом режиме
Когда процесс запускается с консоли, из оболочки или из xterm, програм
ма обычно выполняется в основном режиме. В этом случае придется дождать
ся завершения процесса. Однако вместо ожидания окончания процесса
можно выполнить его в фоновом режиме, поместив \символ «&» в конце
командной строки. Это очень удобно, когда выполняется процесс, который
требует много времени для полного завершения, и можно сделать чтонибудь
полезное, пока он выполняется. Предположим, что командой du необходимо

www.books-shop.com
160

выяснить, какие файлы занимают больше всего дискового пространства в си


стеме. Выполним ее в фоновом режиме:
du > /tmp/du.out &
Здесь вывод направляется в файл /tmp/du.out, чтобы вывод команды du
на экран не мешал работе с чемто другим.

Если необходимо оставить выполнение программы в фоновом


режиме после того, как завершен сеанс оболочки, воспользуемся
программой nohup. Она защищает команду от получения сигналов
SIGHUP и SIGTERM, позволяя процессу продолжить работу без пу.
См. об этом на man$страницах.

Теперь посмотрим, как можно контролировать нагрузку процессов в сис


теме.

Мониторинг процессов и системной нагрузки


Возможность контролировать состояние процессов в системе в любое
время очень важна для управления системой. Системный администратор Red
Hat Linux имеет несколько инструментальных средств, которые помогут про
вести мониторинг процессов. Рассмотрим их подробнее.
Использование top
Утилита top является одним из средств мониторинга процессов. Исполь
зуя top, можно контролировать активность процессов в реальном времени
(см. рис. 8.1).
Экран автоматически обновляется, чтобы показать новый вид состояния
выполняющейся системы. Самая первая строка является строкой uptime, ко
торая показывает текущее время системы, как долго система работает со вре
мени последней перезагрузки, сколько пользователей в настоящее время в
системе и три показателя средней нагрузки. Средние значения нагрузки явля
ются усредненным числом процессов, готовых к выполнению в течение по
следних 1, 5 и 15 мин. Вторая строка показывает статистику процессов,
которая отражает общее число процессов, выполняющихся во время послед
него обновления экрана top. Эта строка также показывает число спящих, вы
полняющихся, зомби и остановленных процессов. Третья строка выводит
статистику процессора, которая содержит время работы процессора в про
центах для пользователей, системы niceпроцессов и неработающих

Сеанс top,
выполняющийся в
окне Х$терминала

www.books-shop.com
Управление процессами 161

процессов. Четвертая строка предоставляет статистику памяти: всю доступ


ную память, свободную память, используемую память, совместно используе
мую память и память, использованную под буферы. Пятая строка
предоставляет статистику виртуальной памяти или свопинга, которая содер
жит все доступное пространство подкачки, использованное пространство
подкачки, свободное пространство подкачки и кэшированное пространство
подкачки. Остальные строки аналогичны отчету, созданному утилитой ps.
Используя top, можно определить, какие процессы используют большую
часть ресурсов. Все что нужно сделать, это просмотреть несколько записей
на экране, похожем на вывод программы ps. Например, рис. 8.1 показывает,
что процесс с именем adengine потребляет 2.1% времени процессора и 0.7%
памяти, что делает его верхним процессом в списке. Вторым процессом с
наибольшим потреблением ресурсов является сама утилита top. Когда выпол
няется утилита top для контроля других процессов, сама утилита top требует
некоторых ресурсов для собственного выполнения. Однако утилита всетаки
дает хорошее представление о том, как и какие процессы потребляют ресурсы.

Использование vmstat
Утилита vmstat также предоставляет интересную информацию о деятель
ности процессов, памяти, ввода/вывода и процессора. Когда утилита выпол
няется без аргументов, вывод подобен этому:
procs memory swap io system cpu
r b w swpd free buff cache si so bi bo in cs us sy id
000 8, 8412 45956 52820 0 00 0 104 11 66  0 33
Поля procs показывают число процессов, ожидающих выполнения (г),
число блокированных процессов (Ь) и число процессов, выгруженных в об
ласть свопинга (w).
Поля memory показывают объем памяти в килобайтах для свопинга, а так
же свободной, буферизованной и кэшированной памяти.
Поля swap показывают объем (в КБ/с) памяти, подкачанной (si) с диска, и
объем памяти, выгруженной (so) на диск.
Поля io показывают число блоков в секунду, посланных (bi) на блочные
устройства и полученных (bo) с блочных устройств.
Поле system показывает число прерываний (in) и переключений контек
ста (cs) в секунду.
Поле cpu показывает процент всего времени процессора для пользовате
лей (us), системы (sy) и простоя (id).
Если необходимо, чтобы vmstat обновлял информацию автоматически,
можно выполнить эту утилиту как vmstat nsec, где nsec это число секунд, кото
рое устанавливает задержку перед следующим обновлением.

Использование uptime
Чтобы быстро получить статистику нагрузки процессов на систему, мож
но выполнить утилиту uptime. Она показывает текущее время системы, как
долго система работала с момента последней перезагрузки, сколько пользова
телей находится в настоящее время в системе и три средние значения нагруз
ки. Средние значения нагрузки являются средними значениями числа
процессов, готовых к выполнению за последние 1, 5 и 15 мин.

Ведение журналов процессов


Журнал процесса является лучшим другом системного администратора.
Файлы журналов часто предоставляют большое количество подсказок для си
стемного администратора о том, что происходит с определенным процессом.
Практически все широко используемые пакеты серверного программного
обеспечения — sendmail, Apache, named и т.д. — ведут журналы. Существует
две тенденции в записи журналов. Некоторые серверные программы записывают
собственные файлы журналов, а некоторые используют средство, называемое sys
log, которое ведет журнал под управлением демона syslogd. Обычно syslogd запус
кается программой ink на уровне выполнения 3 (многопользовательский).

www.books-shop.com
162 Глава 8

Средство syslog предоставляет централизованную среду ведения журналов


для процессов, которые хотят пользоваться журналами (см. листинг 8.2).
Листинг 8.2. Конфигурационный файл syslogd, /etc/syslog.conf
# Записывать в журнал все сообщения ядра на консоль.
# Дополнительные, сведения захламляют экран,
kern.* /dev/console
# Записывать все (кр_оме почты) от уровня информации и выше,
# Не записывать частные аутентификационные сообщения!
*.info;mail.none,authpriv.none /var/log/messages
# Файл authpriv имеет ограниченный доступ,
authpriv.* /var/log/secure
# Записывать все почтовые сообщения в одно место,
mail.* /var/ log/maillog
# Каждый получает сообщения об аварии.
*.emerg *
# Сохранить ошибки mail и news уровня err и выше
# в специальном файле.
uucp, news.crit /var/log/spooler
Конфигурационный файл достаточно прост. Пустые строки и строки, начи<
нающиеся с «#», игнорируются. Структура конфигурационной строки syslogd
следующая:
facility.priority <файл_журнала>
где facility (возможность)<— одно из ключевых слов: auth, Authpriv, cron, dae<
mon, kern, Ipr, mail, news, syslog, user, uucp и localO<local?. priority (приори<
тет) — одно из ключевых слов в убывающем порядке по значимости: debug,
info, notice, warning, err, crit, alert, emerg, none. Можно использовать «*», как
метасимвол для части строки facility или priority, чтобы указать соответствен<
но все facility или все priority. Можно использовать разделенный запятыми
список набора facility с одним значением priority в строке. Например:
uucp,news.crit /var/log/spooler
Здесь записи журнала (часто называемые сообщениями) с приоритетом
«критический» (crit) от служб uucp и news (т.е. от серверных программ uucp
и news) записываются в файл /var/log/spooler.
Можно также использовать разделенный точками с запятой список пар
facility.priority, чтобы присвоить им один файл для записи. Например:
*.info;mail.none;authpriv.none /var/log/messages
Здесь все информативные (info) записи журнала от всех средств помеща<
ются в файл /var/log/messages, исключая информационные сообщения от
mail и authpriv.
Используемая по умолчанию конфигурация syslogd заставляет записывать
файлы журналов в каталог /var/log.

Мониторинг журналов с помощью tail


ЕСЛИ возникает проблема с серверным процессом, выясните, не записыва<
ет ли он файлы журналов. Если он записывает свои собственные файлы жур<
налов или использует средство syslog, утилитой tail можно контролировать
файлы журналов во время выполнения процесса. Эта утилита позволяет выя<
вить увеличение файлов журналов, просматривая последнюю часть файла.
Например, чтобы проконтролировать файл /var/log/messages, можно вы<
полнить команду:
tail —f /var/log/messages

www.books-shop.com
Управление процессами 163

Это позволит просматривать файл по мере того, как в него дописываются


новые записи. Если необходимо ограничить число строк, которые выводятся
на экран, используйте параметр —line <число>. Например, чтобы просматри
вать только последние три строки файла из примера, можно выполнить tail
<f — line 3 /var/log/messages.
Обратите внимание, что файлы журналов, создаваемые syslogd, могут в ак
тивно используемой системе стать очень большими. Поэтому важно вовремя