/
Автор: Колисниченко Д.Н. Аллен П.В.
Теги: информатика операционные системы компьютерные технологии операционная система linux linux
ISBN: 5-94387-139-X
Год: 2006
Текст
Д,Н. Колисниченко, Питер В, Аллен
.
InUX
ПОЛНОЕ РУКОВОДСТВО
Наука и Тех""ка, Са"кт-Петербурr
2006
Колисниченко Д.Н., Аллен Питер 8,
LlNUX: полное рУКОЩJ.QСТ80. СПб; Наука и TeXН\1IG1, 2006. 784 С.; ил.
ПОД редакцией М,В. Финкова
ISBN 5.94Э87.139.Х
Серия .Полное РУКОВОДСТВО»
Данная книrапредставляет собой веЛИКОЛЕШl10е РУКОВОДСТ,ВО ПО ипих. позволяющее
получить наиболее ПОЛЖ>В представление' оБЗ1ОЙ операщ..оннйй системе. Книr.а состоит
из Трех частей, КЩ(;Ц$Я из KO'fOPbIX pa,CKPbI,T OAI,1H ИЗ тре-)( OCHOBtibl.x. aQnOkTOB работы
с Linu)(; linux для nользоваТепя, сеТtЦiЫе ОJ1:0rии Linux_ (и Методика настроики llnu)l-
сервера), проrрам.,..!ировэ.ние L\nux. В иrе.Щфачен О'1ень WИроКИЙкр1jr 8OnроСО5. начиная
с установки Н',:,С'hольо:ван", Unu.'fill об"4#РЙ }ll:ИЗНИ» (оct»l1сtf:Ы_'п-аl(еТЫj иrры. ВИДео,
Интерl1ет), и заkаl-tЧиваяописаним внутренних nроцессо",Liпuх секретами li1 трюками
настройки, особеtiностями nроrраММИроваНИЯ под Liпш. соэданием сетевых приложеНИЙ j
оптимизаЦИей ядра" др.
ИзrlOжшjие '-'Н.'.iтерlo1аnа .В'ЗА&1'СЯ в OCtt08OMa б-зе п.i,'!стриБУtJ()В Fedora Core (Red Hat)
11 Mandriva (MandraKe). однако не oCfaBl1eHbI беэ. внимаНия и .upуrие ДИtitpибутивы $и$е.
S!асkwзrе, Gentoo, Alt иnих, Кпоррiх. Дается их сравнительное описание. а по ходу изложения
Bcero материала указываются IotХ особенно'Сти.
Книrа написана известными с.пециалистам и "Kot-tСУЛhтанraмt,.t ПО ис.ПОЛЬЗ00анj.ot1О linu.x.
1.J1Qрами мноrих сrаtей и "ниr По ипих. заСЛ'УЖиеших свое признание е саМых широких
Linuxwl(pyrax. Если вы желаете разобраться в OCO!)eHHOCТ"RX Linux. и познать ее внутренний
МИР. эТа книrа. n-aш лучший. выбор.
KOHTaкrHыe телефоны издательства
(6121567-70-25,567-70.26
(0441 516-38-66
Официальный сайт www.nit.com.ru
ISBN 5.94387-1Э9.Х
@ КолисничеНI<О Д.Н., Аллен Питер В.
@ Н.....ка и Техника (ориrинал-макет), 2006
000 ..Hayr:.a и Техника.
Лl1цензи N2000З5Q ОТ 23 декабр-я 1999 rодз.
196097, (. Са.iкt.Пe-rербурr. ул. Маршэла rО80{)ОВЗ. д- 29.
Подписано е печать 10.10.05. Формат 7О)(100 1}16.
Бумаra rаз€"rная. Печать офсетная. Объем 49 п. п.
Траж 5000 ЭkЗ. 3а.;зз N2 зss
(hш:'Ia'ТaIIО с I'a11:IBbIX диашmпивов . ОАО ,(l'ехви.чсCE.lUt Dиtа»
190005. С&ЯJCТI-Петербурr, мaitn:ОJ!.'ХИЙ np. 29
Содержание
8аед-имв ..... .. .. ..... . . .., о. .... . . . . .."......... ..... ". . . . . "о.... . . ,...... 15
Об этой Книrе. . , ... . . . .. . . . ., ...... . . . .. .. , .. , , , ., ..... . . . . , , ., ..... . . . . , .. 15
ПочемуUnux?., ,..". ..,... о.. .............,.... .......... .... ..... ....... 16
истарияUпих...... ..... ........".. ,.... ,.., ,...,.. ...." .....,..,." 17
Все началось с иrры .... . . .. .... . . " . . . . ... . . .. ,. . . ..... .... . ..... . . ... .. '7
СтанозлениеUN!Хl<.аk оnераци()Нной системы ..., ............. .........., 20
Бурое развитие UNIX. , , .. . " " , " . . . , . . . . " , . . . . , , . , .. , . . . . .. . , . . , . . .. 22
Какие бывают UNIX'bI? .. , " . .. . " .. . . . . .. . .. . .. . .. . , . . . .. . . .. .. . . . .. .., 23
Происхожд.ение Unux . . . . . . , . , . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 24
ОпераЦИОНIiaЯ система Minix... . . . . . .. . . . . . . . .. . . ..... . .. . . , , . , . . ...... 24
Линус Тореалl>ДС ... . , , .. .. .... . . . ... . , .... .... . , . . . . . ... .. .. , ....... ., 24
ЛинУС новопен МJnix , , , .. , ... .. . , , , . . . . . , , . , .. ....... .. .. . .... ....... 26
При чем здесь nинrвины1 ....,......................................... 28
ПУТЬ к первой .вреии (1.0). , .. .. . .. , , . . . . .. . .. . .. .. ' .. . . .. . , . , . .. , . . .... 30
Они создавали Ипих ....... ..........,.......... ..., ................... 31
Первые ди.стриб','тины .. . , .. . . . . .. . . . . . . . . . . . ..... . . . . . . . ., . . . .. . .. 31
РаэМНj)жение дистрибутивов». , . .. .. . . . . . . ..,.. ..... " . . .. ... " .... .,. 32
Выбор дистрибутива, .... . . .. , . . . ... ... , . . . . . . . . . . . .. ...... . . . . . . . , . . . . . .. ,< 36
FedoraCore3."."." ...."., .....,........... ........... ......".... 40
SI.ckware.... . . .... . . , . , , .. . . . .. .... . . .. . ... .. ..... .. ... . . .......... .. 47
Ипих Mandrae 10.1. . , .. ..... < . . . .. .. . . .. ... . . ........ . .. . . . . ... . . . . . . < 51
РаЗНое..... ....... .,.. . ...............,......,...".................,..... 54
ДSР ипих, . . .' . , . , . . , ..... , , .. ..... , ..... ... . . . . . . , . ............ .. .. .. 54
ДLТ Unux . , ... . . . . . . , , . ... . . . . .... .. <... . .. . . , . . . .. . ........ .... . . . . .. 55
SuSEUnux,.., .. ................. ................................ <' 57
Knoppix ... , , . .. . , . , , .. .. . .. . . .. .. , . , . . . .. .. . . , . . .. . . . .. .. .. .. .. .. .. " 57
ОеЫаn ,.. 58
rЛЦВ4I 1. У'сtaИОSJ(а операционной системы .... . . .. . . .. . . . . .. . . . . . . . . . . . . . . . . . .... 59
1,1, Пoдrотовка JКeCTJCoro диска. . . . . . , _' . . . . , . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 60
1.1.1. РеКОМ8ндуемзя схема раэ-биемИRДИСка ........................... 61
'1.2. Имена разделов вое ипш ........ ... ..... ........ ......,.. ..,. 62
1.1.3. Разделы и точки монтирования. ... _..... ....... ....... ....... _... 62
1.2. Заrрузка nporpaMMbl установки. . ,., . . ... . .. .,..... . . ........ . .. . . ... т.. 63
1.2.1. С использованием з-аrpуэочноrо комnактдиска ... . . . . . . . .. . . . . . . .. 63
1.2.2. С ИСПQЛьэOSЩiием заrpуэочной дискеты. , . . . , . . .. . . . . . . . . . . . . . ., 63
1.2.3. С исnОJ1b3-OВаниеМжесi'КО;Одиск8...,...................,....".. 64
1.2,4, УСТ,,"ОВКа по сети . . . . . . . . . . . . .. . , . . . .. .. . . .. . .. .. . . . .. .. .. .. ..' 64
1,3. Установка F.dora Core ............ .., .,...,.".... , ..... "". ...... 65
\ ,3.1. Of\исание дистрибутива. . , . .. ... .,...............,.,."...."., 65
Версии F.dora Со," 1.2,3 и 4. Системные требования. , . , . , . , , , .. 66
Спвuиапьtoiая еХИОl1orия раничеИА AQG.тynaSr:Unux. . . . . . . . . . , ., 68
1 :32. Особенности усТ...о...... paэnиЧнbIX зерои;; Fedora Со.. . . . , . , . , . . , . ,. 68
Fedora Со,. 2: пoдrотовощ к совмесn<ой )о(И<щи с WndOW$. , . . . , . . . . ., 68
ОсобeJ.!ности и преимущества п""цесса устаноеки Fedora еоо. 4 . , . .. 70
1,3,3, Установка эаrpузчик. ......,...................,. , . , , .. .. . .. 70
1.3.4. Продолжение yctahobIC-И .. , , , .. ... ., . .' . . , . . . , , . 71
1.4. ОсобеНtiОСТИУСтвновки Mandrake 10.0.... ................,.."......,.. < 77
1.5. Пробl1емы при установке. . . . . . . . . . . . . . . . . . . . . . . . . . , , . . , . . . . , , . , . . . , , , ,. 82
1.5.1, Кокфликты fedora ео,е 1 и 2 с различным оборудоааfiием . . . . , . . , 82
Материнские п.nаты ASUS, . . . . . . . . . . . . . . . . . . . . . .. 82
LсD....""иторы ......".....'..'........................82
НоутбуКиsОNY........................."....,...........,..... 82
Не рабатает мышь, .... .. .. . ... . .. . . .. . ........ .. .. .. ...... . . . .. 82
з
1.5.2. Fedom Сою: не удаеТСА Born8 систему как rQot
В rрафичком режиме,'............"........."'.'. 83
1.5.3. Ошиб1щSignaI11. ..... .....'...."......... .....,'.. 83
1,5.4, Не опре-Аеl1яеТСА МЫШь. . .. . . . . . . . . . . . . . . . . . . . . . . . . 83
\ .5.5. Проблемы с переходом а rpsфичесКИЙ ражим. , . . . . . . , . . 83
1.5.6, Проблемы пр" заrрузке .. . . . . . . . . . , . . . . . . . . . . . . . . . . . , . т . < .. . . 8З
1.5.7. Проблемы с rpaфи"tecJ(ИМ экраном эаrруэчика ... >, > >.... ,. >"" >., 84
1.5.8. Н. заrpужатсясистмаХWiI)dOW .,............".,..... о........ 84
\ .5.9. Я забып паропь пользователя rool . . , . , . . , , . , . . . .. .. .. . . .. . . . .. ... 84
1.5.10. У меня больше оперативной J1lIМЯТИ! . т, , н . , . . , < .. Н.... , , , , . . , ,. 84
1.5. t 1. НараБОТают принтер ипи ЗIJ)КОВая пНата....... +.. т +....".,.,.. 84
1.6. КаК УдaJlИТЬ UnU... .. .. ... ...... ... . , . . . . . ......... ... .. . ., . . . . , . 64
1.7. СисТемы с ДВойной зsrрy3l<Ой......,....,. ........................".., 85
1.7.1. УстаН08кцWindows9хиtinux.,.. тн, ,.......... .Т..'. Т......" 85
1.7.2. Устаноака WindOWS 9х, Windows NT/2000/XP и ип"". . . . . , . . , . . . . . . . , 86
Пеpebll; способ. . .. .... .. . .. ' , . . . . . , . . .. .. .. . , .. .. . .. . .. . . .. .... 88
Второй способ. , , ... ........ . . . . .. .... ,. .... ... .... . . . . . ... 87
Использование loadtin... ., . . . . .. . . . . , , ....,. ....". " . . . . . . . . .. ... 81
1,8. Пер.ый запуск ипlJX , ...... ...... .. . . . . . . . . . .. . , , , , , .... .. .. . .. . , .. .... 89
1.9. Смндарт..... сераИСbl UnlJX. , , , .. . , , . , . . . . .. . . . . . . .. . .. . .. .. .. . . . , , ., 92
1.10. Справочная система. . . . . . . .. . , ' . , . , . . . . . ... .. .. . . . . ......... ... . . . .. .. 94
fпala 2. ФаЙnовав система Unux....... а".... ., ."."............". .... ".' 96
2.3.
Видимая сторона файловой системы ........ ..... ............ .....,..,.. 97
2.1.1. Имена файлов и КаТалorоВ.... ......... ...... ....... ........ ..... 97
2.1.2. Назкаче:ние основных системных каталоrоВ . . . , . , < . . . . . . . . . . . . . , . ., 99
2.1.3. Типы фIoйлоа, , , ... . , ..... , .. ... , ..... . . . . , , . . . . . ..... .. 100
Об"",,,,,,е фейлы и IC8тaJ\orи .. . . . .. ...... . . . . . . . .. . . . . , . ос . . 100
Файлы физических устройств, , . . . . . . . о" , . . . . , . . .. . . ... .. . . . .... 101
Жесткие и символические ССЫЛКИ. . . . . . .. . . .. .. . . . . ....., . . . .... 102
Именованные каналы ........................................... 104
rнезда .... , . . . , ... . '" ".. , . . . . . . . , . , . . . , . .. ... , . ,. . . . ... ,.. 104
2.1.4. Команды работы с Фа:йлами и каталоrами ...............,.......,. 105
Текущий ..ТМО'. , .. . . .. . .. , , .. . , . , ............. . . .. . . . . . , . ... . . 105
просмотр содержиМoroКаraлоrа........................... 105-
Создание и удаление фаЙJIа ' . . . . . ... , ..... .. .... ,.. , . . . . . 106
Копирование и перемещеliие файла , . . . " . . . . . . . . . . . . . , . . , , . . . . . 107
просмотр т"сто.",. файлое. ..... . , , . , .. . .. ... .. ... , . . , , . . 108
Редактирование текСТОВЫХ файлов. . . . . , , . . . . . . . . , . . . " . . . . , , > 109
nO;lCX файлов. . . . . . . .. ........ .. . . . . . . . . . . . . ... . , . .. . , .. . . 111
ИЭ"'iенение прав доступа к файпу . . . . . . , . . . . ' . > . . " . 112
Из,..енка фaйnoвой системЫ......'... .... , . , . , . . . . . . . .... т, , , , , , , , .. , 115
2,2.1. Файловая система ext2ts':""ПреДIJJ6стввнница еxtЗfs.. .. . 116
2.2.2. ЖурналируемыефаЙ:пosыесистемы.. .>, "... ......"'............119
ReiserFS.......,....,.,................,..,. .'.........".....'121
XFS ... . .. . . , . , , ... , . . . , . , . . . . . , , . , , . . ос .. ..... ,,' , . , , . 121
JFS ...... , . .. . , ... . . . .. , . . . ......... . .. , . .. . . . . . . 122
Extзfs........................ ..................... .122
Создамис'имоНtировnниs файловых систем'..... -,............ .... ...... 123
Соэданив ф8йлово системы «ВРУЧНУЮ", КоМанда mkfs........ .... 123
Настройка автоматическоrо монтирования
при заrрузке компьютера. Команда mou"! ........................ 125
2.1.
2.2.
rпal8 З. Работаем 8 коман,а.ной строке. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127
3.1. Как устроен unux: ядро и процессы....... .'" .............. 128
3.2. Жизкь процесса. . . . . . . . . . . . . . . . , , .... . . . . . . . . . . . . . 130
Таблица nроцессов . . . . . . . . . . . .. . , , , , ..... . . . . 130
СистеМные вызовы fork{) и е)(ес(} ИЛИ как размиожаю'ТсS1 процессы. 131
Снимок про'rекающих в системе процеССО8 команда ps 132
4
Динамика nроцеССО8 КОМднда top . . . .. ..... . . . . . . 133
l(атеrОРИIII npou.ecco8 . . ... .. . . . . . . . , . . . . ..... .. . . .. . , . . . . . . . . . .. 133
3.3. Взаимодв'Йств.ие nроцессов . ., . .' . .. . . . . . . . . . . . ...... . . . . . . . . . . . . . . . . .. 134
3,3.1. Конвейер (pipe) . . ,. ......... . .. , " . . .' . ,......' , , . 134
3.3.2. сиrналы.,......,.....,...............................,........ 135
3.4. КОМ8НДЖlR оболочка. Bash . . . . .. .......,. . . . . , . . . . . . . . . . . . . . . . . . . .. 136
3.4.1. Встроенные команды ."...'...'..'....'........................138
3.4,2, Историй ко..анд . .. .. , . .. . .. . , .. . .. .. . . , , , , . . .. .. . .. . . ... 138
3.4.3. Перем.нны.,...........,............,.................,....... 140
Описание и ИCnОJlЫование "еремвнных... .... . . .. ... . .... . .. ... .. 140
Переменные оружвния.. .........,............................. 141
Быстрая смена каtaлоrа. .' , .. . . ,. . .... , . .., ." . .. . , ....,.. 142
Настройка KOмaндн строки. Ут.илита. tput. . . .... .. ...' . ... . ....... 142-
3.4.4. ПодстановlС8 переменных и Команд"........'..............'..... 144
3.4.5. Шаблоны имен файлов. . . . . . . . . . . . . . . . . . . . . . . , , . . . . . . . . . . . . , . . .. 144
3.4.$. ПОТОКИ BBoдaaЫ80дa . . . . .... . . ., .. .... . , '.' . . ..... ..... ....... 145
3.4.7. rруппировка команд.. . . . , ..... . ... , , ...... .. .. . . . . ... . 147
3.4.8, Инициализ.ационные файлы bash . .. . . .... . '" ....... . ,. . . ... 0>" 149
rл.аа 4. Р.60чее место пользо..телR. . . . . ... . ...... . . .. ....... .. ..... . . . . .150
4.1. rрафическа. систем. Х W.ndow . . .. . , . . , . . .. .. . . . . . . . , . .. . .. . .. ' .. .... 152
4.2. Окон""" среда КОЕ. ......... ..... .............. ,.... ....154
4.2.1, Р.бочийсТолКОЕ..... ....'...........'................154
4.2.2. Запуск прorрамм и nереключение межд'i ними.. . ..... . .... ..' ..... 155
4.2.3, Файловый менеджер Konqueror ..... . .... .. . . ...,.. .. .. .... .. ,. 156
Основные возможности. . . .... . , ... .... . . , . . . . ...... . ....... .... 156
Konqueror нетолысо файловый менеджеР'...............' "..... 156
4.2.4. Центр ynраелени КОЕ. . ...... ..... .... . .... . ..... .. .... . . ...... 157
4.2.5, Р.бота со с"""ными носителями. KDE .... . . .......... . . , , .. , .. .. 158
4.2.6. Доба8Jlвние соБС1Венных команд s КоНТекстное меню KDE..... .. ,... 159
4.2.7. Ноао..КоЕ3.4................... _......... .............."... 161
4.3. Оконная среда GNOME..... .... , .. , , , . . . .. .. .. . , . , .... .. , .. , . .. , . , ..... 162
4.3.1. Общее ОПVlсание и ме.тодикара.боты . ....,.. ... .,.... ,.....,..... 162
Что з. зверь эт. GNOME. .. . .. . . . , , . .. .. . . . , .... .. . . , . . . . _.. , , . .. 162
файroаыймеНеджерNаutilus...., _.. ....',. .......,.....,........ 164
Расшмренная сисТеМа управления МIМЕтипnми .................. 165
Поддер".. службы DNS-Based ЗеМСВ Discovery......,.....,..... _ _ 166
Особенности посЛеДНИХ верс.ий . . . .. ... . . . . . , . . . .... . ,. . .. . .' . . .. 166
4.3.2. Добавление собсrвенны)( KOMa в t(OHTeI(CTHOe ""еню GNOME. . . . . . . _ 169
4.3.3. Аа:тоМат1о1ЧесlC'8ЯсМ6ffJlобоео........ __....,.....................w 169
4.4. ОФисны. пакеты. , . .... . _. _. . . . , _ .. . . . . .. .. .. . . .. .. .. ...... .. .. . . . .... 170
Ореп Offlсеи K011ic. .......,. _.........., ,.... ........'...."..170
VменьшениеSрем&низarтycкзОреnОffiае ..,....... ,............. 172
Но.ое а Оре" O11ice 2.0........ , .......... .... ......... _......... 172
4.5. Издательские системы. ,,_,.. ............... ..,.,.".... ...,.., .." .... ... 173
ЯЭЫК разметки ТеХ... ... . . . . . . . . . . . . '........ ,. "'. ...... , . ..... 173
ТекстовЫЙ "роцессор LvX, . . . . . . . . . . ...... ...... . ,.... ." , ' .... .. 175
Издательская ceмa Scribus......... н' _. н.,. .......,.......... 176
4.6. rр.фика. Unux .......... . . , .. ...... . . . . . .. .... ..... . .. . .. , .... . . . . . .. 177
4.6,1. rраФичвскивредаКТО!>bl. ......,...... .........."....."'.......177
Редактор растроВОй rpaфики GiMP обрабатываем фото. . . . . , . . _ .. 177
КРаiлt, ........ ." , . . . . .... . . . . . . . . , . , ... ..... _.. ' . .. , . , , , . . . " 178
KlconEdtt редактор ИКОНОК. .. . . . .. . .. . . .. '_" .. . . . . , . . . . .. . . 178
4.6.2. Пporpaммы ПРОСМОТРЩV1lCи изображений. . . . . . . . . . . . . . . . . . . . . Н8
GOVlew,........ .....,................... 178
Electric Еуео. ... , . . . . . . . . . .. ..............,... 179
KuickShow ............. ........."" ............... 179
КView,.". ......., _...,... ............,..., _......... 160
Kooka. .. , .. . ... .. . . . .... , , . . , , , . .. ........ . .., .. . .... . . . . . .. 180
ХSane. ......... . . .. .. . . . .... .. . . . ....... , . . . .... . . . , . . . .... 180
4.6.3. КВ1( cдe"ТЪ 0II....0к экр,,",, .. .. .. _ ........... . . .. . . . . . . . . .. ... 180
5
4.7,
К5пар5t.оl......, , , ""........."", ,.........."............, 180
полозн'::"J,;'91 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : :: : : : : : : : : : : : : : : : :: Ш
Просмотр а КОНСоли документов MS Word и PDF... ........ . . , . . . . .. 182
fлаl. S. ЗВУtIC И видео в tinux .... . .. . ..... ., .. . . . . ..... . ...... . ... .. .. . .. . ...184
5.1, Почему воспроизведение аудио в.ипих лучше, чем в Windows........ . . . .... 185
5,2, ПрослушиВаНиеМузыl<и".... ..................... ......................186
mpg123 .......,................ " ..............."",......... 186
Xmms ....... .,.......... .....""............,..... 187
Друrnо nporpзммы. . . .. . . . . . . . . . . , . , . , , , , , .. .. .. .. ' , . . . . . . . . .... 187
Сравнение Xmms и NoAtun.... . . .. . . . . . . . . . . . . .. . . . . . . .... . . . . ... 189
5.3. -Оrра6ление- Дцdiо.СD ................. .. " "........".,,,,,,.....,.. 192
5.4, Проrраммы дли просмотра 8111део ........ . . . . .. . .,. .. ... . . . . . . . .. ... .... 194
Обзор "porpaMM. .............." ..,..."................. ...... 194
Праrpамма Юпе . . . . . . . . . . . . . . . . . . . . . . . . . , . . . . . . . . . . . . . . . . . . . . .. 194
Просмоср DVD . . . . , . .. , , . .. . , , . . . . . . . . . . . . . . . . .. . . . .. .. . . , , , , ,. 196
СмОтРИМ ТеЛепередаи ПОД Un.ux . . . . , , , . . . . . . . .. . . . , . . " . , . . . . . .. 197
5,5. 6Qопроизsед&иие неnоддержи.ваемых'форматов, .. . , .. ..... . .. . . . . . . . .. . . 198
r/laa. 6. Сеть м ИttY'ернвт. .. . . . . , . ... . . . . ....... .. . . ... . .. ..... .. .... ....... . .. .. .200
6
6.1.
ОсНовнЫе СеТевые понятия.... . .. '" .. .. . . . . ... . . .. . . . . ....... .. . . . . . . > 201
6.1.1. Протокon и интерфейо ..... . ..... . , ... .... . . . .. .. , , . , . . . . .. ... .. 201
6,1.2, Уровни ВЭОИМОДеЙСТВИRО$I ...."..,., ......... ......."'.......204
ФизичеCJ<ИЙ уровень (P!1yS1c lзуе,) . . . _.. , , , , , , .. ... . . .. .. . . , , , .. 204
Канальный уроеонь (Dat!llin Layer) . . , . , .. .. , , .. .. .. .. , , , , , . . . . . . . 204
Сетовой уров.нь (Networkl,l\yor). , ,. ......."...,.... 205
Транспортный уровень (Тi'anspOr1 Lзуес) ..,....".,..,.......... 205
Сеаноовый уровень \$е5.1o" Lзуос) ..",...........,."... _. , , .. , . 206
Прадставительный УРОEИfflЬ (Presentation Layer). . . > . . . . . . . . . . . . . . .. 206
При.ладноЙ уровень (Appllcaon [ауе,) . , . . . . . . . .. . . . .. . .. . . , . , . , . . 206
Интернет i1 модель 051 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . , . , . . . . 207
Основные протоколы.. . '. ",' .. . . . . . , .. . . . . . . ....... . . . . . . . , , , , . . 207
6.1.3. Прото.олТСР/IР и IP-в,цР!ОС.ци" ...................'...........'.208
6. f .4. DNS система домеННЫХ:'им:ен >.. . . . , ......... . . .. . . . . . . , . ,. , 209
615. Порты....'...."...... :.......,......................... ....... 211
6.1.6. диНВМи'iесКоевыдеnеНиеадреса...... .......'....'..............211
Подключение к локальной. сети. . . , . . . . . . , . . . . . . .. .. . . . . . . . . . , . . .. . ..... , 21 f
6.2.1. НаСТрЙЙj(8 сети в Urщх Mandrake ..".............................212
6.2.2. Наотрой.. сети в Unux АщI На!..............'.................... 214
6.2.3. Настрой.асеrиа FedOfliG<>re ...,............,....... ......'.....215
6.2.4. Проверка р.абоrы ceTeВOto ин-терфейса. . ., ,. , , . ..... " . . . . . . . . . . . . 215
6.2.5. Настройка сеrи в старых ди:стрибути.в-.м . .... ., .... . , , . . . , . . . .. . " . 218
Подключение к Wiпdоws-сети ........,.. . , ."". ...., .. ..... ,...... 218
ПОДКЛlOЧениеКИtiтсрету. ....................., ......................221
6.4.1. Нас:тройкамодема. .. .................,..,.. ......... .......'..221
6.4.2. ПадrОТО81ЦI \( ВЫХОДУ в Инrер...еr .. . . . . . . ... .. . . . . . . . . . . . . .. . . . . . . . 223
6.4.3. Специальные 13ОЭМОЖНОСТ\А" брауэ-еров. . . . . . . . . . . . . . . . . . . . . . . . .. . 227
Konqueror .................................................... 227
Galeon .. .. . . . , . . . . . . . . . . . . . . . . . . , . . . . . . . , .0. . . . .. 228
Epipho"y. ... ........ .. ................,.. ,. ..".,. 230
Ne!scape . . . . . . . . . . . . . . . . . . . . . . .. 230
FireFox . . . . . . .. . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231
6.4.4. Текстовые браузеры . .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231
6.4.5, Полезный трюк: Что делать, если браузер -nодаисает-
на какой-то странице. . . .. . . . . . . . , . , , . , . , . . " . . . , . . . . . . . . . . . . . ' , , 232
6.4.5. Набор nporpaM"" для работы 8 Инrерt1еtе . . . . . . . . . . . . . . . . . . . . . . .. , . 233
БОflталка Ica. . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233
Менеджер закачки файпое Downloader tor Х. . . . . . , . . . . . . . . . . . . 2З3
Fтрклиенты . . . , . . , . . . . . , . . . , , . . . . . . . . . 237
6.2.
6.3.
6.4.
rлаlа 7. Осноаы адМИНистрироваииtl системы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .240
7.1, Что nонимавтся ПОД адмиНtЮТPИрОВ!JНИ'ем системы. . . . . . . . . . , . . . . . . , . , . . .. 241
7.2, Конфиrypаторы Unux ,.......,. .,.,.. .. ., ., . .. . . . .. . ... ..... ,.. .. ... .. , 242
7.3. ПОJ1ьзователи И квОТЫ...................... ............................ 244
7.3.1. Учетные заПИС\1 пользователей. . . . . . , . . . . . . , . . . . . . . . . . . . . . , . . . . . . 244
Файл /etc/passwd информация о поль-зоватвлях. . , . . . . , . . . . . , . . ., 245
ИнформаЦИА о rpynnax попьмват.мА. Файл /.tc/group , . , , . . . . . . , . , 246
7.3.2. Соэдан". и удап....... По"",оватепей. f"PYIlП.. .... . , ,... ,.. ........ 247
7.3.3. КВОТ.IJQ........................,......".,........,.,..,......... 248
Что такое квотирование. Осо6енностм J(вотирования в UnUK. . . . . . . . .. 248
Ядро и (\оддерж.ка квоtироеанViЯ.. .... . . . . .. . . . .. .. . . . . . . . . . . . . .. . 249
Назначение и активация 'Квот. . . , .. , . . ... . . ...... . . ... . ... . .... ... 251
7 .4. Подкление и r;онфиrypирование аппаратных -устройств. . . . . . . . . . . . . . . . . . 255
7.4,1. ядроиподдержt<аустройств...,.."......,......,.,..,..,....... 255
7.4.2. Утилиты для работы с модулями...... ................, .,......... 256
7.4.3. Kudzu yrилиrа ДЛА автомзмчеСl(оrо оnрэдеЛЗНИR УСтРойств. . ..... 257
7.4.4. Настройка устаНOВJ1енИЫ)l: устройств. . , , . . , . , . . . , . , . . , . , , , . . . . . . .258
7.5, Установка nporpaMMHOl"O обеспечения. .. . . . . .. . . . . ..... . . .. .. .. , . . ....., 258
7.5,1. устаНов"аиэисхОдНbiXТmсТО8..........,.....;.................. 258
7 .5.2. YcтaH081W. из бинарнbIX fla1l'.:erOB. . . . . . . . . . . . . . . . , . . . . . . . . . . . . . . . . .. 260
Как это де.nается.и ЧТО ДЛ этоrо ИУЖНQ . . , . . . , . . , , . . . . , . . , . . . . , . , , . 261J
Менеджер пакеТО9 rpm... . .. .. . .. ... ... . . . ... . . . . . ... '" ..,...., 261
rрафические менеджеры па"еrоа. . .. ...... ...................... 263
Ар!: DеЫапсовместимый МенеЩl<ер па«етов . . . . . . , , . . . . . . . . . . . . . . 264-
7.5.3. YCTaHoBt::a ИЗ пакетов. содержаших ИСХОДНЫЙ ItCOД . . , ... , .. . ... . . . . , . . 267
7.6. К1юнирован.ие и 80ССТ8НОВJIемИ8 систеМЫ. . ... . . ... . . . . . ,. . .. .. .... . . . , . . . 268
rпala8. Я3ЫlCкоманднаroмнтеpnратаТОр8.. """.,..",,,,,,,,,,,,,,,,,,,., 270
6.1. Пара".тры..".. ..'" н. ........ ....,..... .....'.........'..."...'..272
6.2. noдcт""oe"................ .. ..........,...................... 273
6.3. Мао""........'.'.'........'...............' н . . ... . . .. . . . , . . , . . . .. . . . 274
6.4. УправпяЮЩ>lВ структуры, .. , , .. . . , .. . . , , , , . , . . .. . . ., . , . . . .. . . .. . . . . н . . 275
8.4.1. Услоаные операторы. . . . , . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275
Условный onepaTopп....,............,.........,....."........ 276
Оператор test условные выраж:еН.,R ......."..........,......,. 276
8.4.2. Операторы цикла..,... ............ .'.......,.... ,.,......., .,." 278
ОпераrорцикласперечислеНиеМtоr..... н'" ,.. .. ...."......'.278
Оперэтор цикла с условием while . . . . . . , . . . . .. . , . . . . , . . . . " . . . , . , . . 279
Оператор ци.:ла с инверсным условием untll . ... . , . . . ,., ...... , . . , . 280
Операroр цикпа с выбором select. . , .. ...... .. , . ,. , .. . ,. , , , . . ". .. 280
В.5. VСПОQНая ПОДС;ТfЖО8ка параметрае ............................,'........ 281
8,6, ФунIЩИИ..,.,..,...,........"..,.................... . . .. . .. . . .. . . . 282
8.7, 06pa60r"a сиrti6l106 протокоnирое:Qние. . . . . . . .. . . ... ,.. , ... . , .. , . . , , ,. , 283
rпaaa 9. Уnра..пенке nроцессамм ...... ..... . . '.' ............................ .285
9.1. Как зш-ружаеrся U"ux................. ..... ...,.. ........ ........'...'286
9.1.1. НачалЬноязаrpy."а;LILO.ОАUВ......... ......'......""....."286
06щме механизмы.. .' .. ." ."', . ...... .'....'..'.....""...., 286
ЗаТРУЭ4И' LILO . , . .. . . . . . . . . . . . . . .. . .. . .. .... ...." . , . , . . . . . . , . . 287
Затру.чи" GAUB. . . . . . . . .. , . . , . . . . .. .... ... ..'.. ... .. , . , . . . , , . . . 291
Каж установить rpаф...ес"ий фОН заrpУЗЧИka GRUB ..,....... . . . . . . . 293
9.1.2. продолжение эаrрузки. ",...................................... 293
Демон Jnit ..... , . . . . , . . . . . . . . . . . . , . . . . . . . . . . . . . . , . . . . . . . . . . . . 293
Уровни выполнения. . . _ . . . . . , . , . . . . . . . . . , . . . , . , . . . . . . . . . . . , . . . . . 294
КоНфиryрациоННыйфайлjеtcjiпittаЬ....... ......,.. ..........296
Инициализация е СТИl1е BSD . , . . . . . . . . . . . . . . , . . . . . . . . . . , . . . . . .. 298
Иницим»зэция 8 стиле System V .. . . . . . .,.... , . . . . . . . , . , .... . . , . . 299
9_2. Команды ynравления процессами , .. .. .. .. . . . . ,.. . . .. . . . . . . . . . .. . , , . 302
7
9.2.1. Иерархия процесroе: pS"p$tree "...., о.......,..........." . н., 302
9.2.2, Информация о ресурсах .системы: ,омаНДЫ 'ree. dl. du , . . , . . . . . , , ,.. заз
9.2.3. Процессы. реал ""ом време"и: .о......да top ............... , , , .. ,.. 304
9.2.4. Приориrеr nроцесса: КОМetнд. nlce " renice . , . . . . . . .. . , . .. . . . . . . . . , ЗОб
9.2.5. Фоновый режим: .OMa>lДЫ jobs. 19. Ье . . н.... . ...... .. , , , . . , ,. . ". 307
9.3. Протоколирosане системЫ. .. .';. .'.... , . . . , ... ..... . . .. . , . . , , .. . . , . , З07
9.3,1. К<жфиryреционный феМ/е!<:/syslоg.сопf................ 309
9.3.2. сеТеаоепроrоtолиpouitнив.-,.,.,....... .>.,...._,. ........312
9.3.3. Прото.олирование SIДP8.. Демо" klogd и .o...aIЩadmesg ,.,.... "....313
9.3.4, Что делаlЬ с nротоко-лам д.альше? Утилита Logrotate. . .. . . _ . . _ . . .. 313
9.4. ВыnолНеНиеза.даН.ийпорасписаНию............. .....'._..........'....315
9.4,1. Эвl1YСК эадЗI1ИЯ В назначеНное время; комвндаа! .................. з 15
9.4.2. Ди"",",,ер раСllи""иийдемонcrоп ,".............".........,. 31б
Управпениефвйламирасцксаний... ........... ..... ..............316
Формат файла расписания.... ... . . . . . ...... ... ..... . . . . . . . . . . . .. 317
rпa8a 10. Резервное копирование ивосстаиоапеНиедаННbIX................... .318
10.1. ВоссТаНоВлеН'"'е')lда.леННоrофайпа......"........... ..... .......319
10,1.1, Midnigl1t Comm.nde: ....... " .. .. . .. .. .. . .. .. . .. .. .. . ... 320
10.1 ,2, Утилт. debugf..... , ..... ..... . ". .... .. , .... .. , 320
\0.2. Сrратorиярэзере:ноrQ t(ОПирОsзН\1я.... .................. .......321
10,3. Оборудование ДЛ. реэ.р....orо .О""РОв...... . . .... .. ..,..... '., . . 322
10.3.1. Стример,...,...,., .................. .............,.." ," .. 322
ПОдк!1ючеииестримерц..""ТерфеЙСQМ SCSI... Н.......... .....323
ПодltJlIO'leние стримераО.ИИlерфейroм FDC ... . . . . . . . . . . . . . . . . . . . . 323
10.3.2, Маrнитооm\'lчесКИЙ ДИСК... '. .., . . . . , . . . . ,... ... , . .. . . . . . . . . , , .. . З23
10.4. Проrpaммное обеспечение АЛ" ,резервноrо копирования. . . . . . . . . . . . 324
10.4.1, Простое paaepstioe I(OnРРI3щ..ие по сети. .. . .'....., .. .. . . .. ....... 324
10.4.2, 'Управление clPVlMepOM.... .' . . . . . . . . . . , . . . 325
10.4.3. команды dump и ,..1"", ." .. . ..' . . , . . .... .... . . . 326
10.4.4, Архив.тор epio , .. .. .. .... .. . . . . . . .. .. " . . . . , . . . , . . . . . , 327
10.4.5. ПроrрамМО AMANDA . ... .... . .. .. . .. . . . , ..... . . .. , ,н. . . . . . . , 329
10.5. дуб"иров...... данных: .""ДенИе в RAID . . . . . . ...... ... ..... ... . . . . . . . .... З32
10.6. Как найти, спрятать и бвэвозврапtо унИЧТоЖитЬЩ\ННые......,... .......... ЗЗ5
r.nав. 11. 6аЗCJ.вое к.онфИfYPирование сервера .......... .................. .338
11.1. Серверныеrехналоrии unux......... ....... ..... ... .................... ЗЗ9
11.2. Орrанизацияи состав unux..cepвepa........,..... ..,_..... ..,..340
11.3. eyn.pcepeepxinetd. '. .Н.Н......'...,.. .....,.. .....""'..'.....'344
11.3.1. Устаноаха суneроеРеера xlne!d . .. . . . . .. .. .. .. .. .. .. . .. .. , . , . . , , . . 344
11.3.2. Настрой.а cyn.pe.pвepa.J<inefd... . , .. ... , ..... . .. .... .... . .... ... 345
11,3,3. Заnycкхiп.td . . .. .. .. , . . . о .. . .. , , . . , , , .. .. .. . . .. .. . . .. , . . . . .. . . . 349
11,3.3.1, 3ащта xinetd . . . . .. . . . . , . . . . . .. , .. . . . . .. . . , , . , . . . . , . .. . 350
11.3.3.2. Прн",.р файла .онфиrypаЦl<И jetc{xinetd. . . . . . . . . . . 350
11.4. Удanеиный доступ: S!ih и telnet .. . ... , , . . . . . . . . ,.. . . '. . . . . , . . . , . . .... " . 354
11.4.1. Использование telr1et . . . . . . . 354
1 f .4.2. Настройка и испопьзоваuие SSI1. . . . . . . . . . . .. . . . . . . . . . 355
Что такое SSH . . . . . . . . . , . . . . . . , . . . . . . . . . . . 355
HaCТPoVlK€I SSi1 на сереере. . . , , , . , . . . . .. ... .......... . 357
запусКдеМОl-lаsshd.............. ........ 359
Использование SSН.мие1-ft8 . . . . . . . . . . . . . . , . , . . . . . . . . . . ЗБО
Аyrеttrификi':I.ЦИЯ средствами SSH..... .. ....... ........, ...... ,. .. 361
rl1.aa 12. Раздепеииересурсов: NFS иSаmЬа.............................. .363
12.1. NFS сетевая файловая система..................'...........
12. i .1. Клиент NFS: монтироsанив cereBoro катanм.а.. . . . . . .
12.1.2. Настройка сервера NFS .. ........ ...........,............ .
...3б4
...364
....'.365
в
12.2. Samba:UnuxcepBep дпя Wiпdоwsклиентов ., .. . . .. . ... .. . .. . . . . . . . . . . .. . . 367
12.2.1. Samba на серве"" ..............,,,,... .... .."..... ......... 367
12,2.2. Настрой.а 5атЬа . .. . . . ." ,. . . . . , , .. . , . .. .. . . .. .... 368
секци.[glоЬеl)...... ........... ....... ....'...................369
Секци. [homes) .......,. . . , . . . . ... ..... ... .., .. . . . . .. . . . . . .' . . . 371
Секци. [public) . . .. . . . . . . . . ... .. .. , . ... . . .. ... . . . . . . ,. .... . , , , .. 371
12.2.3. Пракmческие flримеры кастройки .... .. .. . . . . . . . .. . . . .. . .. . ... . . . 371
12.2.4. Доступ к принтеру Unu>: ДЛЯ Wiпdоws.машин ...... """""""" 372
12.2.5. Доступ к \IVi"dowsnpиt4теру с компьютера, работающerо ПОД Unux. . .. 374
12,2.6, КоНфиryp.торswАТ..........",...,.........."................ 376
12.2.7. Samba и безопасность. . . . . ... .. .. . . . .. .. .... .. . . . . . . , . ,.. ..... . 378
12.2.8. ОптимиэаЦИQ Samba................,........... ....... ...... 379
12.3. Совместное иcnолt:.ЭQванив катa.nотов 8 U"ux Mandrake , . . . .. .. . . . . . , .. .. , . 380
12.4. npor""M"'" LinNei9hbortlood прави""'ЫЙ вbt60р... . . . , . ... .. . . ., . . . .. . . . 381
fЛ8ВёJ 13_ OНS cnyж:611 МММ _' _ _' _ . .. . . . .. .. . ., .... . ..... .. . . . ..... .... . з83
13.1. Введet<ие в DNS..................,., ............................ ....., 384
13.2, Настр"".а ,,"иоlfТа DNS ...... . . . . . . .. . . . . . ...... . . , . . . .... . . .. . . . ..... . 385
13.3. Настрой.. серее"" DN5............,.............,...."............... 386
13.3.1. 06НовnеНиEtКорНеаоrоКэша................... .............. ...390
13.4. Кэширующии сер.ер DN5 ....... ,.........."..,......."......,. ...... 392
13.4.1. Н.отрой....широ.....".на DNS-cepeepe.......................... 392
13.4.2. Возможные nробnемы и их решеНIo18 . . ... . . . . . . . ...... . ... .. . . . . . . 393
13.5. Вторичный сереер DN5 ....... . . . . . .. . , , . .. , .. .. . . . . .. . .. .. .. .. . . , . , . , . 394
13.6. ПРОСМОТР DNSзоны. уТилиrВпslооkuр................................... 39S
13.7. Оnтимизаця настроек сервера DNS............... ................ ...... 397
1З.В. Защите сер.е"" DN5 ..... . .... . . .. . . . . . . .. . , ' , . ... ... . . , , .. . .... . .. , .. 398
13.8.1. Настройка... запуск DNScePB9p.a 8 chroot-окружettИи . . . < . , , о . . . " . < зgв
13.9. Использование ПОДПисей транзакций. МеханиэмТSIG... >. . . . ... . < -<.. .,. . . 399
rJlцаа 14. Почтовый с:еР8ер.. . .. . '.' . . .. ... . ... . .... . .. . " ." ... . .. . . . . . ..401
14.1. усТ8НоВКаинастройКаsепdm3il............. ... .....""""""""'" 404
14.1.1. базовая настройка sendmail. . . . . . . . . . . . . . . .. . . . . , .. . . . .. . . . .. .... 405
14.1.2. Редактирование конфиrypaционных файлов. . .' . .. . . . . . . . . . . . . . . . .. 408
14.2. АутентифихацИRвsеndmаfl. ................ .......... ....... ............412
14.2.1, Установка и нас:троЙ1са SASL .. . . . . . . . ...... . . . . . , . ., . . ... . . . .. . .. 412
14.2.2. Hacтpol!.. .ondmBII+SA5L. . . ,. . . .. .......,. . . . . . . ... .. ... . .... . . . 41З
14.'2.3. Насrpойка почтовых клиентов с использованием зyrентификзции. . . . . 414
14.3. AreHT AOC1yТI. !.tcnma!! .,... ...........,.........."............... 416
14.4. Автоматическая СQpWlр08КЗВХОДЯЩ8Й nOЧfЫ nporpaMMa proста" ......."416
14.5. Соэдание списка рассылки. . . . . . . , . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 420
14.6. Защиrа проrpаммы sendmail. Проrраммs smrsh ........ .. >, .. >. >...... 421
rnaBa 15. Настройка сереера FТP . _ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . _ . . . . . . . .423
15.1. Cep.epwu-FТPD..... ........Н' .... _.....,..........
15.1.1. Hacfpo"""WU.FТPD. Конфиrypaционныефailлы.,. ,.
OCHOBHO фаn lI""ссо... Директивы cep.epiOWU-FТРО . . . .
Файл f1phost$ параметры доступа ДI1Я поn..эоваТелей
сytcЭ3аНliЫХУЗЛСВ ...........................,... .............430
Фл. ftpusers ....... список ЛОКQI1ЬНЫХ ПОЛЬЭО13ателей.
которым запрещено nОЛЬЗ0вi1ТЬСSf WUFТPD. . ., , . . . . . . . . . . . . . . . . . 430
Файл ftpservers разНЫе ttастройхи ftp-cepe:epa
ДflЯ ра3ЛИ4НЫХ Y3J1OB . . . . . . . . . . . . .. "... ,--, .,.. . . . ... ,.. >. . . . ... 431
Файл ftpconver-sions формв-тысжаТИА ...,....... ....... >..'....431
ФОЙII ><1er109 журнал FТP-cepee"". . . . . . . . . .. . . . , . . . . . . . . . 432
15,2. Сервер P,oFТP..... .................................,.... ,..... 433
15.2.1. Установка и эапускProFТPD . ............... ..... 4ЗЗ
.. 424
.....426
.. 426
9
15,2,2, Настрой.а ProFТPD. Файл/еtc:/рroltpd.сопf.........."........... . 433
15.2.3. Раэrраничение доступа к серверу РroFТР . . . . . . . . . . . . . . . . . . . . . . .. .. 436
Орrаниззция анонимноrоfТРсер8ера . , . . . . . . . . . . . . . . . . . . . . . . , . 437
15.3. Утилиты 06CJ1У""'I1И. FТP.cepaapa . . .. . . . . . .. . . ... ..... .. .. , . . . 438
15.4. ВиртуanЬНЫй узел FТP. . . .. . . . .. . . , . . , . . , .. . . ... , .. . , , .. .. . . . . . . ,. 439
15.5. Защита FТP.. , .. . . . . . . .. .. . . . .. .. . , . , . , .. . .. .. .. .. . , , , , , , , . , , . , , . 440
r"a8a 16. НттР.сереерАрасЬе........................................ .... 442
16.1. Установ.а Apache ,.. .........................."................. .... 443
16.2. Насrрой...Драсhе. Файлы IOOНф-!I"YP'lЦии.....................,...... .....445
16.3. Осноаные настройки. Файл htjpd.conf (httpd2.conf) ,. , , . .. . . . . . . . . ... . .. . . 445
16.3.1. ОбщиедиреКТИ8Ы. ...... .............,...........,.... 446
16.3.2. Директивы прОТОКЩJиPQВаНия....................... 448
16,3.3. Директивы ynра8ле"'ИR,РОИЗРО"nYlтельносl'ЬЮ.. " . . . . . . . .. 448
16.3.4. Директивы обеспеченияпостоянноrо соединения с клиентом,. ..... 449
16.3.5. Директивы создания виртуалЫfЫХ УЗЛОВ. . ... ........ 450
16.3.6. Директивы наСТРОЙК"'"отрбраж:еНИR хаталоrов. .. . . , . . . . . . . . . , . .. 450
16.3.7. Дирактиеы обработ,и МIМЕ'ТИПО8.. . ... ........, .. , . .. .. . , ., ,... 451
16.3.8. Диf:Ц!КТИВЬ!ДЛЯ рабоТblс мноrОАзычнымидокументеми ,."", _... 452
16.3.9. ДиР8КТИ8bl nepeнanpaM",,A. .. . , . .. . .. . .. .. .. .. .. . . . . .. . . . .. . 453
16,3.10. ДиР8кти.ыобработ,иоwбо...........,....................... 453
16.3.11. Директивы ynРЗ6J1fЖJmрРступом к отдельным каталоrзм . . . . . . . .. 454
6локдиректив Umit... :"_.,. . . . , . .. . .. . ... ..... ... ...... . . . .. . 455
6по.,Qире.rиаLОCRliQn......,..,. .................. ...457
16.4. Файл роrElЦl!И ""!Рналов !elc!logtOlale.d/hltpd. ... ..... .... ,. , , , . , . , . . , . . . 457
16.5. Системный файл КОНфИl'\'рJЩиИ /atc/sjl$Cohfi9!hltpd ........ , , ,. , . . . . .. . . , 458
16.6, Сценарий запус... сереера Apache /8Ic!lnit.d{hltpd ....... .... .. . , , . . .. . . . 458
16.7. rрафичеСlG1е канфИl'\'раторы Apache, "...",........,.......,.......... 459
16.8. Каталоrи пользователей...... . .;. ... . . .. . . . . . . . . . . . . . . .. . . . . . . 460
16.9. Виртуальный НТТР.сереер ,.",.,....................,... 461
16.9.1. Виртуальные cepaep с двНтифиКацией по имени . . , . 461
16,9.2. ВиртуалЫtbt& cepBep с ментификациe+'l по ,р..адресу . ....... _ 463
\6.10. SSL и Apache .. . . , . , , ... ........... .. . . .. ..... . . .. . . 464
16.10.1. Ycraнo.<a SSL.. . . ......... ..' . . . . . , ...... . . , . , . . . 464
16.10.2. ПОДl<l1ючение SSL'ApIlche .... .........,......... 465
16.10.3. rенер;орОвание серТИфИl<атоа .. . . . . . . .. . . .. ...... .. . , . . . . , о .. . , 467
16.11. ПР;ОМ8рфаМа hltpd.cont............... ....................'..'..468
16.12. Перекодирование РУССКОЯЗЫЧНi:It)( джумектов -на лету........... . . . . .. . .. 483
16.12.1. Russjan Apache: устаНQЩ8. настройка. исполъзование. ....... ",.,484
16.12.2. Настройка пераходировкИ-русскоязычных документов,. ,. .. . . . 484
16.13. Защит, сер.ера Ap'che."............. ................. ..486
16.14. Сераер kHrIPd .еб.сеР8ер УРОIЖЯ!!дР' . . . . . . . . . . . . . . . . 487
Насrрой... kHrIPd.. , ... ...... . . , . . . , , , , ... .. . , , , . , , , , , . . . . , . . 487
r.na88 17. Установка и иастройка MySQL. СаЯ3ICа Apache+PHP+MySQL. ...... ." .489
17.1. Yc'raHoBJC8 MySQL .. . . . . ... .. , , . . . . . . . . . . . . . 490
17,1.1. Назначзние пзроля сynеРПОЛЬЗОВЗ1'ВJ1Я, . .. . . 490
17.1.2. Датoзanyс. cep8pa MySOL ..... ,. , .. ,.. 492
17.1.3. Поltb30ватели c.epfJep& MySQL и их праВа. ..'" 492
17.2, Кл..ентс,"", часть MySQl....,,,....,, .. .. " , .. . .. .. . .. .. . .. .. .. .. 494
17.3. уста"о.... РНР и наСТрОй.а сеязкИ ApaChe+PHP+MySOL. , . о . , . . . . . . . . . . . . . 494
17.3.1. П8раыйспособ,изпахТО8RРМ.,....,.,.о......."""........ 495
17.3.2. Тестируем созданную конфиryрацию. . . . . .... . .. , , . . . . . . . . . . . . . . 497
17.3.3. В1"ОРОЙ способ: "3 исходных '()(CToe . , , . , , . . . . .. . , , . . . . . . . . . .. .. 498
17.4. ЗащиrаС8Р8ера MySQL..... ....",...,.. 499
17.5. Введение в ЯЗЫК SQL , ,...,.. '" _. . ......,..,.. ., 500
17.5.1. 06щиеПОНЯТИА. ,.,..... ................. .,500
17.5.2. Краткий практический кypcSQL .........,................ ..,500
10
rnaB8 18. Провсм-сераер... SQUlD м SOCKS .. .. '" ..... ....... ... ..... ......510
18.1. Что такое ПР<>кси.серВ.р1.......... ..,... ,..,....,........,..,. " .." , 511
18.2. Устанав"" SQUID,...... ,..... ....,.............".................... 512
18.3. Настр<>йка saulD. .. . . . , . . . . . . . . . . . .. .. ... . .. ..... . " . . . ." .. , , .. . 512
18.4. Запуск saUID............ ,... ............"..........'''....'....'...513
18.5. Расширенные настройки SQUID, Конфиrypационный фвйл squid.conf ...,... 514
18.5.1. параметpы сати....' .." , ...,.. ...,.. '............."....'" 514
18.5.2. Параме",ы соседей.. . . .. . . ... .. , ... .. . . . . '" .... ........... . 515
18.5.3. УПревленив кэшем... .... ....... ....,. .............. .......... 515
18.5.4. ПР<>токопироМНие..........,...........,..................". 516
18.5.5. П.раметры внеШНИХ просрамм ,........, ....,................. . 516
18'.5.6. Парамвтры администрирования ..,..........;.........,....... 517
18.6. СПиски ACL....". .."....... ..... ... ......... .,...............,..... 517
18.6.1. Параметрыдостуna .................,....,....,......... ...518
18.7. Откаэоrрекламы. 6аннерныйфилЬТр.............,...,... ...519
18.8. РаэделениеканапвспомощьюSQUID ............,......,. .........., 519
18,9. НастрООIC8 поддержки прокси_уКnИенТОВ .................. ... 521
18.10. ТSJCнопоrия SOCKS5, ил"' tcax; "СflОпьзовать асьху 'Из Л(;lj(МЬНО сети . . 522
18.10,1, ВlW\ениев sOCКS. Прокси.серв.рSОСКS5 ...... ..........,.,. 522
18,10.2. Нвстр<>йка сер.ере SOCКS5 ,.............. ",,,,,,,,,","". 524
18.1(},3. Заnус<сер.врв восkзS ............,...,......'........... .. 525
18,10.4. D.nte еЩ. ОДИ" сер.ер SOCKS5. ,.. .' . . . . , . ,. . . , ... . '. . . . 526
18.10.5. Настройк. КJ)иенто. SOCKS5 (ICa И l;cq) , . . . , . . . . , . . . . , .. . ... 526
rлааа 19. МаршрytМаЦМАмме*Сете.ые QlкpaHbl . .... """."."."."", .528
19.1. ВВедениеsМаршрyrиз8цмю...,..... _............... ................. 529
19.2. ПpQrp8ММЫ маршрyrизации в llnux. . . . . . . . . . . . . . . . . . . .. . . . . . . 530
19.2.1, д.МоНroutеd....,....",....,. ...,........ .......'.....530
19.2.2. Демон gatBd np..Ил....ый выбор, . . . . . . . . . . . . . . . . . . 532
19.3. PapeнHыe средства маршрутизации. Комплекс iрrоще2.. .' . _ 535
19.3.1. ПакетiрrоU\.2... .......... .. 535
19,3.2. Утилита 'р . .. . . , .. . . , . . . .. .. .. . . . . . .. , " , .. . .. . .. . 535
19.3.3. ПросмоТр nаРЗМеТРо8 c;eTeeoro уcrройотв.а. . , . . . . . . . . , . , . . . . _ 536
19.3.4. Операц"" над адРесаМИ: комаНДа ip addr.s$ . . . . . , . . . . .. . . . . , . . . . 536
19.3.5. Управление таблицей маршрутизации..., ........'.0"0;.......... 537
19.3.6. Динамическая мершрyrизаЦИА . . . .. . ... , . . .. , .. ..... ..... . . , . , . 537
19.3.7. Управление лравипами маршрутизации. . . . . . . . " ... ... . . , . , . . . . 537
19.4, Что такое брандмауэр .. , . .. . . . . . . . . , . . . .. . . . . . . . . . .. .. .. . . . . . , . . . , . . . 539
19.5. Цепочки правил, . . .... .. ... . . . . . . . . . . . . .. . , . , . . . . . . . . 539
19,6. РТаЫез м.KeTHЫ фильтр дnя: ядер 2.4.)<, $12.6.х . . . . . . . . . . . . . _, 541
19.6.1. Что ИЭМеН'И1tосЬ в IPТables по сравнению с. tPChain5. '.,..,.. ... 541
19.6.2. Настройка одр. Liпux для пом.р""и IPTat>les . . . . . . . . . . , . . . . . . 541
19.6.3. ПерВИ"4най tCастройка IPTabIes. Задание политики по умолчанию. . 542
19.6.4. ДеЙС1ВИR Н8ДЦеnoЧками , .. .' ., ...., '.'.." 543
19,8.5. ПрввиneфИлыl"'""и.......,....,. ....""",...., ........ .... 543
19.6.6. Фильтрация ПО отдельным пользователям. . ' . , . . . , . . . . .. 545
r.....'" 20. Н",стройв'" IIДI)", . .. .. . .. . .. . . . . . . . . . . . . . . . . . .. .. . . . . . . . .. . . . .. .. 546
20.1. М..оrообраэив ядер ипцх . .. ......... . 547
2.8.Х .. .. .. ." . . . .. . . . . .. .. .. .. .... .. .. . . 547
2.4.х .. .. , . .. . , . . . . .. . . .. .. , . . . . .. . .. . . . . .. . . . . . . .. . . . . . . . 547
2,6.х.у, . . .. . . , .. . .. .. , . .. . . . . . . . . .. . .. .. . , . . . . . . . . .. 548
2,6.х.тт . . , , . .. , .. .. . . . . . . .. , . , , . . . . . . . , .. . .. 548
2.6.x.mm-jedi ...... .. ....... . . . . . . .. .. .,. , . . . .. . , ... , . . . .. .. 548
2.6.:x-pre и 2.6.x-rc . . . , . . . . . . . . . . . . . . . . . , . . . . . . . . . . . . . . . . . . . . . . 549
2.6.x.tiny ........ . .. , ... . . . . . . . . . . ... ." . . .. . ... . , . . .... . 549
2.6.xac .. . . . . . . . . . . . . . . . . . , . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 549
Прочие. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 549
11
20.2. Зачем ...астраивать RДPo? . . . . ,;.'. '. . . . . , . , . , . , . .-. . , . . , , . , . . . , . . . . . . . ; . . 549
20.3. Динамические параметры ящщ-, .,." , . . . ..... ., . , ,.. .. . , . . . , . . , . . 550
20.4. ЗаrpУЗ0чныепараметры ядра.._.................,." ..,....."".. "". 551
20.4.1. ПараМ8ТРЫ 1(DpHeвo фЩЬювой системы. . . . . . . . . . . . . . . , . . . . . . ., 552
20.4.2. Объем naмятК.... .......... . . . . . . . . , . "".... ..... , , ., ,. . . ..... 552
20.4.3. УПравление RAMDISK.. ... . . . . . . . . . .. . .. .. . . .. .. , , , . .. , , . .. .. . 553
20.4.4. Упра"ал&н:ие nл-анИРОВЩИКQМ ввода/вывода ......... , . . . . . . . , . . 554
20.4.5. Дpyrкe параметры ядра .. .. . . . . , , .. . .. . . .. . , , .. .. , , . . . . . . . . .. . 555
20.5. КОМПИЛЯЦКЯядРа.. ... .. . .. , ..:....... . , .. .. .. ..... . . ......... .. .. ., .. , 555
20.5.1. 3ачем оООовл.ть ядРо?... .. .. . . . . .. , , , , .. .. .. .. .. . .. .. .. __ .. . . 555
20.5,2, К<жфиrypировани. ядра. .... .. . . .. .. . . .. ' . , , . . . .. . . .. . . . . . , , , , . 556
20,5.2.1. Cod. maturi!y1eVel options , '" , . , , , ..... . ... .. .. .. .. . . . 556
20.5.2.2. Gеп.rals.щр:..;с........,. ,.,.. .....................557
20,5.2.3. LoadabIe module support. .. . . , . .. .. .. . . .. .. .. .. . , .. ... 556
20.5.2.4. ?roc.ssortype.end leetures, . .......... . , .. .. . .. . . .... . 559
20.5.2.5, ?ow.r Meneqemel1tOplions ,'..............,.......... 562
20.5,2.6. Вм Options ......... .. , .. , , , , , .. .. . . .. , .. , . . . . . . . . . . . . . , 564
20.5.2.7. ЕхесuteыIпеlormаts.,....,.......................... 564
20.5.2;8. Device driV8lll..,.................................... 564
20.5.2.9. Fil.systems ,..... .. . . . . . . . .... . .... ... . . , , .. .. .. . .. . 571
20.5.2.10. Кет.1 hac\dng. . .. . .. . . . . . . .. .. '. .. . .. . . . , . . , , . .. .... 572
20.5.2.11, Cryptograp/1icopt!ons........,................. .. ,.... 572
20.53, СБОРl<aмра.., ..............".,.......... ........... ..572
rпaaa21. Создаем IC.OHC-OlI..ное прмлCQtеНМre.............. ._................. .515
21.1. КОМПИЛJlТОР gcc. .. _. . . . .. ....., ...., .. . . . . . . .. . . .. .... ." . .. .. . . , . ,.. 576
21.1.1. В"'3009сс.,.,.,.............,.....,."................ .....577
21.1.2. Общие опции ..........................,.............. ......578
21.1.3. Опции яз"'ко .. .. . . .. .. .. . .. . .. .. .. .. . .. .. .... .. .. .. . ... 579
21.1.4. опции препроцессора .. с..'................'..." ....'..'..'.579
21.1.5. Опции кОМПQЖJвщиКа....... ...........,...... .......... ,..... 579
21.1.6. ОПЦ}о1мкзтапаrов ...... ...........,. .... ........ . ....'.579
21.1.7. опции отладки. , . . . , ..... .. . , . , . . . . ....... , ,. , , . . , , , ., .",.. 580
21.1.8. Опциио"",мизацин ..с.............. ......""".........".. 560
21.2. СбоpQЧН" yrилнта техе.. .... ,.. ,........... .. ......................., 560
21.3. ПаJ:еТ blnutils и дРyrие, nоneЗНЫепporpaммы .. .' . .............., _.. _... 58З
21.3.1, ensI2I<nr........ ...................".", ........ .........."564
21,3.2. ез..,.."..................,...,...............,...... . . 564
21.3,3, Ыsоп...,., .. ... . .. . .. .. . .. . . , . .. .. .. . . .. . . . . . . .. .. . , , . , . . . 584
21.3.4. Лек'.....................'.. . . ...... .. . . . , . . .. . . .. . . . , . , . 585
21.3.5. 9Prof....................,.... ....................'........585
21.3.6. slrip.,.., . .... .. Н' ....... . .. . . . , , .... . . .. .. . . ..... .. . . . . . 585
21.4. Пример nporpaMMbl на С .. ... .... ., ... , ........ .., . . . . . ., . .. . .. . . . . 585
fna.8 22. Отладка j ТJНIОС:ИроВJt8 м ОnТИМИЭ.ЦИ'f nporpaMM. ... .' ....,......... 588
22.1. Ошибки и ОТП8ДК8. . . . . .. . . . .. . .., .. . . . . . . . . . . . . . . . . . . . , ., . . . . . , , , . 589
22.2. ОIJЩи.ч'!I.. gdb,., _. . . . . .. . .... .., . . . . . . . . . . . . . . , , ., .... 591
22.3. При мер отладки nporpaMMbl ...... . . , , . . . . . . . . . . . , .. . . . . . . , ..... . . 593
22.4. ТраССИРQвка системных ВbJЗQВО8. . _' . . , . . . . . . . . . . .... . .. . . 598
22.5. Оптимизаци проrpамм,Прoфaйnер gprof ..... _.....,."" ,.,. _... . _ 601
22.5.1. испОлЬ308G1Ниелрофайпера..............".....,....... 602
22.5.2. Как оптимизировать I1pOrpaMMY . . . . . . , . . . , , , ..... . _ _. . . . . . . . . . . 604
rn... 23. Разрабоп:а rpафИЧ9СlCоrо приno.-еимtl; библиотека отк+. . а . . а . . . . . . .605
23.1. Введение е атк+.
23.2. Б'Аблиоr6ка G1ib.
...606
.... 607
12
23.2.1. СrЗН-Д8рrные типы данных бибJ'tIoЮТеЮ1 GHb, ... .' . . . . . .. . . . . . , . . . . 607
23.2.2. Функции для работы с ПаМЯ1ЬЮ... ...,......... .......",. 608
23.2.3. Строки и ОIiЬ. . . . . . . . . .. .. . . . . . . . . . . . . . . .. .. . " , , , " , , , , , , .... 6013
23.4.4, СПИСКИ.".. .. , . .. . . . , . , . , , .. . . , . . ., ..,..,.... 606
23.2.4. T.M"PЫ в Glib .. ... _.... . . . . . . . .. . . . . . .. . .. , . . , . . . . , " . ... .. 610
23.3, Пер.а. npOrp3.МMa «а атк+,...... . . , . . . . . ... . . . . ... . . . . . . . . . . ." . ..... 612
23.3,1. В;.щжиты, ........ ......................... ............612
23.3.2, 0.......'...'....'.........'................ , , , , , .. 613
23,3.3. Изменение размеров окна,. . .. . ......... , " . . . .. .. .. , ,. ' , .. , . . 616
23.3.4. Обработка сиrналов .. . . . . . . . . . . . . . . . . . ' , , , , . . . , , , , ' . , , . . . , , . 617
23.3.5. В;.щжИТ соt;ыrи EventBox. ........... ... ." ...,.,....".".. 619
23.4. ВИджИты.....,...........,......................".....,.",...",.. 621
23.4.1. Рождение, смвщьи СОСТОЯНИЯ виджитQ.....,.."..... .".......621
23.4.2. Упаковка sидж.итов. поля ВВода и I(JiOnКИ.. ... , , . ..... . ' , , " . .. . . . 622
Нет фала . . .. . , . .. .. .. .. .. .. .. .. . .. .. .. , .. .. , . . .. , , , . 623
23.4.3. Пеpe1<J1IО'ЧlТВJ1и.............,..........",................".. 630
23.4.4. СпИсоК......",........ . .. . .. . .. , , .. .. .. . .. .. , , , .. , , . 534
23.4.5. ВыБОр файлов.. . . .. . .. .. .. _ .. .. . .. , , . .. , , , . .. .. . , .. , .. 539
23.4.6. Ди:алоr завершеНИR работы. . . .. .. ...... ., .. , . . .., . .... " . , .. , 640
23.4.7. Меню................................"""....'.........'.. 645
23.4.8. Иерархия виджитов . . . . . . . . . . . . . . , . . , . . . . , , . . , , . . . . . . . . , . . . . .. 645
rn... 24. СтуА.... GI.de . . .. . . . . . . . . . . . . . . . . . . . . . .. . .. . . . . .. .. .. . . .. . . . .. .648
24.1. ЧТО ТаХое Glade? .. . .. .. . . .... .. . _' , . . . ....... .. _. . '.. . . ...... .. . , , ' 649
24,2, З""КОМСТ80 с Glade.. . '" . " .. .. .... . . . ...... , .. . , , .. . , . . , , , , , , . , , , . 649
24.3, Работа с ПроехтоМ .. . .. , , . ... , , .. ........ , . . . . .. .. . .. . .. _ .. . . . . 659
24.4. Создание меню. ., . , . . . . , . , . . . . . . . .. " ... . . . . ... , ..,... ... ' . . 663
24.5. Интересные ВИДЖИТЫ . . . . . . . . . . . . . . . . . . . , . , , . . . . . . ' . . , . . . , . . . , . . 664
rn... 25. Пе"т Dlelog. . . . .. .. . . . .. . . . . . . .. . . .. . . . .. . . . . . . . . .. . . .. .. .. . . .667
25.1. Что такое Dialog? . . . . . . . . . . . , . .' . . . . . . . . . . . , . . . .. . . . . . . , 666
25,2, Сообщ.ния.. ........ . . .... _..........,................ 658
25.3, В.щжит Уе.-"о . . . . . .. .. .. .. .. . . , . . . , . , . .. .. . , .. . .. 670
25.4. !ЯН" ввода текста. . . . .. . . . . . . . . .. . , .. .... . . . . . .. . . .... . . .... 671
25.5. Зависимые инезависимые переkлючатели . . , . , , , . . . . . . . . . . . , . . . . . . . . . . . 673
25.6. Орrанизация меню. . . . . . , , . , . . . . . . . . . . . . . . . . . , , , . .' 675
25.7. Календарь.......... . . . . .. . .. . .. . . , .. .. . . . . . .. .. .. .. . . .... 677
25.8, Шкала nporpecca. . . . . . . . . . . . . . . , ' . . . . . . . , , , , . . , , . . . . . , , . . .. 678
f:na8.a 26. 8заимодеЙCТllие процесСОI в Unux ......... . . . . . . . . . . . . . . . . . .679
26.1. Спос:обы взаимодеЙiстаИ1l . . . . . . . . .. ........,...,....,........,..,.... 680
26,2. Полудуплексные каналы. . , . . . , . , , . , . . , , . . . . . . . , , . . . . . . 680
26.3. Каналы типа FlFO ........ . .. , .. . . . . . . .. .. .. . .. . . . .. . . . 683
26.4. Основные принциnы System V IPC . ,. , . . . , . . . . . . , . . . . . . . . . . . . . . . . 688
26.5. Очереди сообщеt1иt:1 , . . . . , . . . . , . . . . . , , , . , . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 687
26.5.1. осн,,"",,", cIPYW;'YPbl ядра для рабо'ы с очередю..и .. . . . . . . . . . . . .. 887
26.5,2. СоздeltИеO'fflPeдIO со06щвниJ1 ....................'............690
26.5.3, Пост..."""" оообщени.. очередь. . . . . . . . . . . . . . . , , . . . .. . . . . . . . , . 691
26,5,4. Получени. соо6ще""й очереди. . .. .. . . , ... , , . , . . ... ... . . . . ..... 694
26.5.5. ПровеРКiI наличия сообщения в очереди. . . . . . . . . . . . . . . . . . . . . . . . . 695
25.5.6. тотальный ХОlflJIOль. . . . . .. .. . . . . . . . . ... .... .. .. . .. . ..... . ..... 696
26.6. Семафоры. _ . . . . . .. . . . . . . . . . . . . . .. . . . . . . . . . . . . .. . . . . .. . . . . .. .. . , .. .. 697
26,6.1, Соэдание множества семафоров. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 699
26.6.2. Выполнение операций 'Над семафорами. . . . . . . . . . . . . . . . . . . . . . , .. 700
26.6.3. Кан'рольС8Мафора.......................... ...... 702
26,7, Разделяемые сеrмеиты naмяWl ,...................... . .. . . . . . , .. . 705
13
rпaB8 27. СоЗД8ниееетевоrопркложения BUnux .............................712
27.1, Прото<ол TCP/IP , , . . . .... ".... , , " . . . , .. , .. " , ". ",,' . . . , . . . . . . . ". 713
27.1,1. Мноroуровнееая архитектура стека ТСР/IР. ". .. .,. . . . , , . . . . . ., .. 713
27.1.1.1, VpoBeHt;. 'C9TeBOr[} интерфейса, .. '......'...............714
27.1,1,2. МежсотееойуроееНЬ",..... " "".""".""... ....,714
27.1.1.3, транспортНЫЙ (осноеной) уроеонь" " . ." . . . "". ..... 715
27.1.1.4, Уроееньприложений"......, "",,,"""""'''''''' 716
27.1,2. СТруктурапакетоеlРиТСР .",......."..,.."....."."""" 716
27.2. Протокол 'СМР. , , , . . , ,". ......., , , ... , . , .. " . , , .. . " . . . . . . . . , . , . . . .. 717
27.2.1. ДляerОИСnОПhЭуеТС'ЯnpoТОКОI\ CMP.....................,.,... 117
27.2.2. Cтpyкrypa IСМР.rnllапа........................................ 718
27.2,3. Тип и код IСМР.сообщения ".. ... . , .." ..' "..'" "" . , . . .. . . . 720
27.2.4. функции для работы с протоколом 'СМР........,............... 721
Технические nодробкости .. . . . . . . . . . . . . . . , . . . . . . . . . . . . . . . . . .. 722
27.3. Проrpаммирование сокетов...".......,.....,."....,....,.........,. 726
27.3.1. Что такое соквт?.. ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,"...... 726
27.3.2. Создание" сеязы""ние оокета" . . . . .. ""." " . . . . . . . . , . . .." . 727
27.3.3. УстановлеНIA& связи с удаленным KOMnЫOTepOM .' . . . . . . . . . . . . . . . . 730
ФуllкциеlistспО ".' ...."...'...........'........."."...'..730
ФунКЦИЯ сonпе<:1() . . .... ".. . . . . . . . . . . . " . . " ... .. .".. , .. .. . . 731
Функция acceptO . .. ....'" . . . . . . . . .' . . . . .. . . . . . . . . . . 731
27,3.4. ФУНКЦИЯ gоtl10sIЬупеmе(). .. . . , , . . . , . . . , . . .. " . . . " .. . .. . .. . . .. 732
27.3.5. ФунkЦИiA сетевоrоввОдщвывода .........,......,... ,."...." 7ЗЗ
Обмен данными в реж.име5ОСКSТRЕдМ . ...",." .,. ... . , .,.,. 1ЗЗ
06менданными в РOOЮ'IМеSOCK DGRAM, _ _. .,....,. ,. ,.... .., ...734
27.3.6. Завершение сеанса свЯз-и . , , . . -:--. . . . , . . . . . . . . . .. . . . . . . . . . . . 735
27.3.7, npOTpaMMa.cepeo!>................".............,.,........, 7З6
27.3.8. nроrраММа.клиент........... . . . . . . .. .. .., н , , , , , , , , , , , .. 740
27.3.9. Устанооке опций сокота . .. . . . . . . . . . . . . . . .... ... , . . . . . . . 742
27.3.10. Сиrналы и сокеты.. ..... . . . . . . . . . . . . .. .. .... ." , , . . . . . . . . . . ... 744
27.3.11, МультиплеКC>lроване .........."'........".......'......'..745
27.3.12. Небlloкирующие оп.р.ци.. . . . . . .. . . . ....... . .. .. ... . .. , , .. . . , 749
rпa8028. ПроrpаммироааНИВАДРа... ........... .... ... ...... ......... ..750
28.1. Каркас Модуля... ,. ...",............... .. .. ......................... 751
28.2. КОМПИЛЯЦИЯ модvл:я ' . , > > , , о ' . ' . . , , . . . . . . . . . . . . . . . . . . . . , . . . . . . . . 754
28.3. Работа с: усТроЙСfВВМИ..., , .,.. .',.. . .. . . . . . ... . . .... . . . . . . . . . . . . . . . . 755
28.4. Операции над устройством, Поиск устройств. . , . . . . . '.' . . . ' _ , . . < < . . . . . . .. 760
Прм.no*ение. Табпмцы СОО1&еТС1"8И. Windows.. И Unux-проrpаММ . ._... ... . ... ..168
Работа в ИнтеРl1ет. . . . . . . . . . . . . . .. . . . . . . . . . . .' , . .' . . , , ,. . , .
Работа с файлами. . . . . . . . . . . . , . , . . . . . . . . . . . . . . . . . . . . . . . . . .
f1рикладные и С:ИiQтемные nPQrpaMMbl, ..,..., ........ ...... < .
ОфУ.сиыеn.pиложенl.I\S\ ,... ..... .............. ............. ....
Муnьти,-,едиа .................. ..'............, .......... ._.' ,О'. ,_
Раэра60ТК8проrpaММНQrо обеспе'iеНЯ............ _..,....... _...." ,..
СУБД......... ..........."..",.,...."....... н.,..., .........,..
Математические nafl:eTbl. . . .. . . . . _ . .. .. ,. . . . . . . .. . _ .. ... . .. . ..' . , " . > .
Иrрbt ...,........ _...................................._, _......,.......
.......769
.......77,
",.. 771
,.773
.774
..775
..778
...778
... 777
14
Введение
Об этой книrе
Все БО!lЬЩУЮ И большую популярность в России и по всем Мllpe зUlЮ-
евывает Linux UNIХ-подобная операционная систе1а для IВM-co-
вместимых персональных компьютеров. Растет КОЛllчество приложений,
разработанных дЛя нее. ПОСТОЯННО раСЦШРRеТСR Kpyr задач, для которых
она используется. Из операционной системы для прш'раММlIста и адми-
нистратора Иllтернет-сервера она уже преnраПlЛась в реальную альтер-
нативу ОС Windo\vs 11 сфере домашнеl"O 11 офисноrо применения.
Эта КlIиrа призвана ПОМОЧЬ читателю освщrrь ОС ипнх и научиться
полноценно работать в ней. Я предполаrаю, что читатель знает, с какой
стороны подойти к компьютеру, умеет решать свои прикладные задачи,
работая в среде Windows или хотя бы М5 ОО5, и хочет попробовать на
практике операЦИОIIНУЮ снстему совсем друrоrо класса, чтобы 11 даль-
lIеЙшем, возможно, полностью «llepececTb» на нее_ Изложение материала
ПРОИСХОДИТ последовательно, начиная с этапа установки ОС и закан-
ЧlJвая советами по разработке собственных приложеннй. ЗнакомC'l'ВО с
OIlеращlOННОЙ СИстеМОй сопершщеЙ Windows наЧинаетСя с ОПисания
прикладных проrраММ, работающих под ее управлением и предназна-
ченных для решения повседневных задач, стОЯЩИХ перед ПОЛЪЗОJlателем
домашнеrо компьютера: редактирование теКС1'а и изображений, работа
n Инreрнете, проиrрыпание музыки и пилео и Т.П. Для облеrчения пере
хода с Windows на Linux в конце IШИrи приnедена таблица соответствия
популярных Wiпdоws-приложеш,й прllJlOжения, Linux, разработанным
ДЛЯ решения тех же задач. Далее в разделе nля пользователя изложены
OClloBHble сведения о IIнутреннеЙ орrанюапии Linux ядре, файловоЙ
системе, процессах и aeMOHa.'t, их взаимодействии, необкодимые для
настроЙки и базоnоrо aдмIIlll!стрироnания системы, то eCTh обслуживания
мноrОПОЛЬЗОllательскоЙ среды, установки проrраММНОI'О обеспечения,
обеспечения сохранности данных. Собственно сетевому администриро-
ванию, то есть настрОЙке различных сетевых служб, посвящен в'юрой
раздел книrн. И для <nrrателей. знакомых с проrраммированием в среде
15
LINUX: полное РУКОВОДСТВО
Windows, предназначен последний раздел, освещающий особенности
разработки приложений n ОС Liпuхи некоторые полезные инструменты
разработчнка.
Почему Llnux?
УСПНШБлипая Linux, вы получаете множество преимушестп:
. )'ибкость. Мало тоro, 'rro практически все в Linux псщцается настроЙке в
СООТn'ТС11",и с именно пашимtt зма t l3МИ н оБОРУДОJJaнием, так вам еще и
становятся дocrупны исходные тексты ядра и ириложениii, и пы можете
МОДИФИЦИРOlIaТЪ СIIС1'ему так, IЩК вам нужно. Такое можно встретить
Лдлеко не п каждой операциоШ!ойсистеме, особенно семеЙ,,'ва Windows.
Вы вндеJDI rде-нибудь исходные тексты хотя бы Блокнота Windo\vs? Мне,
например, очень не хватает фyRКl.nПlззмены текcrз в этом редакторе. Для
решения ЭТОЙ проблемы я наnиCaJI собственныЙ редактор, в котором и
реализовал эту ФУНКIIИЮ, А ССЛliмне нужно сдела1Ъ небольuюе иэмене-
ние в ядре? Не буду же я !lOJtНotrъю nереписыва1Ъ Windows? Остается
только надеяться, что новая фунщия будет реат!JOваиа в сдедующей
версии, и ради этоЙ елинcrвеlШОЙ функпии устанавливать ,(монстра-,
пожирающеro еще больше систеМIU>lХ ресурсов.
. Дешевизи". ОС Linux аБСОЩОТJiо беСIU13тна. Конечно, компаКТ'ШfСЮl
с дистрибутивами продаются .\а деныи, но эти деныи вы платите не
за лиuензию, а за сам НОСilТt!щ", подбор проrраммноrо обеспечения
на нсМ и проrрамму.инCТЩU1I1ТОР всс. как у пиратов, с той лить
разницсЙ, что это: а) rюлностьюлеrально, б) rарантироваино работа-
ет и пользуется технической поддержкоЙ. Вы можете п не нокупать
дистрибутив, а анонимно и беcnлатно выкачать исходные тексты ИЛИ
уже собранные ПРOJ'раммы из Интернета, установив их самостоятеяь-
но и заruшТl/В только за трафик и это тоже полностью леrаяЬНQ,
Вам не прилеТеЯ ничеrо доплачивать, устанавливая Linux IIа каждый
следующий кошъютер, не НУЖlfо ,!Окупать отдедЪНУЮ л//uензию на
использоваНllе Linux /lа сервере. В любом случае стоимость Bcero
проrраммноro обеспечения составlП Bcero IIесколько долларов. Я не
буду сравнивать СТОИМОС'IЪ построения Liпuх-сервера со стоимостью
аtlaJlоrичноrо сервера IIа платформе Microsoft, /!ы сами можете это
сделать на саЙте компаН//1I Microsoft,
. Простота обслужив""и,,. Сама система и все службы насrpаиваются
путем редактирования конфиrурационных фаЙлов. Это обычные
текстовые файлы; зная их расположение и формат, вы сможете На-
строить любой дистрибутив, даже если у вас под рукой нет никаких
IfIIL-трумеНТОБ, кроме TeKcтoBoro редактора. Кроме TOro, для об-
леrчения перехода с ОС Windows NТ/2000/200З Server, rдe сервисы
иастраиваются в ОСIЮВIЮМ через rрафический интерфейс, создано
16
Введение
множество l1'афических конфиrураторов. работа с которыми IIНТУ
ИТIIВНО rтонятна и позволяет сосредоточиться на сути вьmОШlЯсмых
действиЙ, а Не способе их выполннп,.
. НетребовзтелыlOСТЬ к ресурсам. Снстемные требования зависят от
дистрибутива (конкретной реализации Linux) 11 версии ядра. Суще
C'I'вуют дистрибутивы, специально созданные для корреК11fОЙ работы
на старых и «бедных» машинах. Например, для орrанизации интернет
сервера на базе дистрибутива Red На! версии 5.2 вам вполне хватит
компьютера с процессором Intel 80486ОХ и 32 меrабаitrами ОЗУ. А
окончательно устаревшую 386 машину, на которой никакая COBpe
менная ОС Windows не запустится, ПОД yuравлением Linux можно
вернуть в строй в качестве маРШРУТllзатора или брандмауэра.
В чем же прнчина TOro, что большинство пользователей до сих пор не pac
СМатривают LinllX как полноценную настольную операЦИОШlУЮ систему?
Нет, не 11 том, что Linux так недружелюбен, как ero малюют. И не в том,
'11'0 под LinBx нет ни офисных приложениЙ, ни иrр. И не в том, что Linux
i\orюлыю долro имел проблемы с русским языком. Причина ЗПlШЮчает
сп в правнльиой маркетинrовой политике Мiсrоsoft нужно отдать ей
!toлжное. Совсем не обязательно создать лучший проrраммный продукт,
НУЖНО убедить в том, что он лучше. Это я о Windows (про DOS я вообще
молчу урезанная версия XENIX, которая, в свою очередь является
урезанной версией UNIX) эта операЦl\Онная СlIстема использовала
UNrХрешения 20 летней давности, в то время как о существоваиии
самой UNIX некоторые пользователи Windows 95 и не доrадывались.
3адача этой кииrи не только научить пользователей работать с Linux,
но и развеять мифы о том, что это сложная и неподъемная система,
предназначенная только для профессионЗдОВ. Если вы читаете эту к.IlИ
!"у, то для себя данныЙ миф вы уже почти разрушили. Осталось только
чутьqуть. Вам оctалось узна1'Ь об истории создания и развития Linux.
Ведь о развитии DOS 11 Windows знают все 06 этом н:аписано даже
!\ IIIКОЛЬН:ЫХ учебниках по информатике. А про Linux и UNtX в лучшем
случае товарат: «Есть такая система».
История Linux
Все началось с иrpы
Непойерите, но все началось с небольшой иrРf>J, нanllсанной Кеном
Томпсояом. Но чтобы вам было понятно, при чем здесь иrpа, нужно
сделать небольшой экскурс во BpeMClfa «до иrры».
В далеком 1965 roay начались работы над созданием операционной
системоЙ MULl1CS (MULTiplexed InfQrmation and Cornputing System)
17
LINUX: полное рУКОНОДСТВО
для компьютера aE-645 (об этом компьютере вы точно не прочитаете
в школьном учебнике по информатике). Инициатором была компания
ВсН LabOl"atories (подраЗделение компании АТ&Т) , а ее ПОМОШНlIками
выступали не менее извеС-Пlые орrаllизации GeneraJ Electric и MaccaQy'
сетский техиолоrllческий институт (МТИ). Что же ожидали от MULTICS?
Проuессорное время GЕ-б45 стоило очень дороr'о, поэтому нужна была
система разделения проиессорнOI'О времени, обеспечиваюшня высокую
скорость обработки даиных н их OBMeCTHoe использование. Посмотрите
на рнс. 1 это Сllс-rемз CiE-б45. Обратите lН!имание, какое помешение
она занимает. А теперь вспоМните процессор Inte\ 80386. К чему это я?
ПРОl1Зводrtтельпость GЕ-б45 чуть выше, чем у процессора 80386. До чеrо
теХlIика лошла (кстати. "шла" она к этому лет элак 20)!
Операuионная система М IIltics была запущена в 1969 rоду. но она не
оправдала uозложенных на нее надежд. Поэтому вскоре компания ВеН
LaboratOl"ies прекратила рзбо'J'У над этой системой. Коммерческоro успеха
эта система не при:несла. Правда, для справеД.JПШОСТИ нужно отметить,
что МТИ умудрился продать окОло ВО инстаЛЛЯIlИЙ ЭТОЙ сиL"темы,' причем
HeKOTopble И) НИХ «ДОЖИJlИ) 110 начала 90x rодов.
Но не бывает хула без добра. Multics послужила своеобразным толчком
для создания новой онер,шrюпной системы UNIX.
Что же ПрОlfЗошло в 1969 rоду, который С'lИтают rодом рождеlIИЯ UNIX?
Че'l'ыре сотрудника Bell l,аЬ", а нменио Руд КенедеЙ (Rudd Canaday),
Дуr Мак-Илрой (Doug Mcllroy), Дэннис РIIЧИ (Dеппis Ritchie) н Кен
Рис, 1. GE.645 @ Geпer:al EJec(tic Jllfоrтэtiоп Systeтs Еrщipтеnt Oivis;oп, 1968
18
Введение
ТОМПСОН (Кеп Thompson) попыrаJlИСЬ ВОЗРОДlпь Multics. Все OHII ранее
работали над проектом Multics и не смоrли смириться с таким попоротом
событий.
Прежде всеro был разработан проект файловой системы потом эта
фаЙЛОIlВЯ система стала фаЙловоЙ СИl'темой UNIX. Кеи Томпсон нанисал
проrраммы, эмулируюшие работу фаЙловоit системы 11 режима IIОДКВЧКИ.
Получилось что'то вроде прототипа ядра нопой системы. Это ядро было
предназначено для GE'645.
А сеЙчас на арене появляется та самая IIrpa «Космическое путеше'
СТlше», симулятор полета, написанный Кеном ТОМПСОИDМ под Multics,
Но после прекрашения работы над Multics эту иrру окаЗалОСь не на чем
.,анускать. Обнаружив в уrлу лаборатории редко используемую маШlfНУ
РОР'7, Томпсон с РИ'lи решили переПllсать иrpу для нее. Переносить
проrpамму на.перфоленте оказалось неудобно, и Тошсон разработал ДЛЯ
РОР'7 файловую систему, УU\J1И1'Ы ДМI раБОThI с фаЙлами и командную
оболочку. Все это писалось иа маШине GE и перепосилось на РОР.7 на
перфоленте, по, как только был закончен ассемблер для РОР.7, система
астала на собстпенныe ноrи. Получидась новая операцио!шая система
!{ЛЯ компьютера РОР'7, которую назпали. по аналоrnн с Multics, "UNICS"
(UNiplexed Information and Computing Service). Такое название ей дал
Пllтер Неймзн (peter Nеumапn). Кто же переименоаал ее в UNIX, до
СIIХ пор не известно.
Рис. 2. РDР.7
19
LINUX: полное рУКОВОДСТВО
в то время все rтporpaMMHoe обеещ:чеllие. том числе и ОllераЩlOнные
системы, пиеалоеь на машинно"зависимом языке (ассемблере), то есть
если проrрамма, например, наnнсана для компьютера PDP'7, ее нельзя
запустить На компьютере с друroй архитектурой, например, на ОЕ. КСН
Томпсон задался целью слелать УИlЩерсальную систему, которая моrла
бы работать на нескольких плаТФОрмах, то есть создать переносимую,
независимую от «железа» операционную систему. Для своей систеыы
он на'lаЛ разрабатывать язык В, иа котором он хотел переписатъ всю
систему. Но «до уыа» этот НJЫK довел ДЭ/lНИС Ричи, обновленная версия
языка стала называться С. Да, ЗТОТТQт саыый язык, на котороы каждый
113 нас написал не одну ПРOl'раыму.Сейчас мы подходим к созданию той
IlдеОЛОПIII UNIX'a, которая ИСПодь')уется по сей день.
О работе над новой операIlИОИНО.й системы руководство компании Bell
Labs НИ'lеro не знало. Оrш думали,.ЧТО ведущие проrpаммисты работают
иад системоЙ обработки текстов для: АТ&Т. ДеЙствительно, Томпсои иа.
нисал строковый (не текстовый!) реДIIКТОР ed, который присутствует' до
сих пор во всех современных дищрцБУТlfВВХ. а РИЧIf создал просрамму
roff. Новые разраБОТКI[ nОНРaJЩЛЦ.СЬ компании АТ&Т, которая БЬUJа
заинтересована о дальнеЙшем рвитии проекта ,и приобрела новый
компьютер PDPll. Для этоrо компьютера UNIX был полностью
переписан: ося система, включая Мро, была написана ва языке С, '11'0
позволило переносить систему на пруте ПJIатформы. На аемблере была
написана только та часть ядра, которая была непосредственно связана с
«железом." Это бьUlО 11 1971 roIIY.
Становnение UNIX КetC;О,I1,!реционной системы
Очень мною новых.функций IНID,"'9nстемы БЬUJО добавлено псеrо за
один !'Од С 1971 по 1972. Систеfl{,Зетно «возмужала» ПО сравнению
с 1969 тодом. Теперь она деЙСТDщ."о стала похожа на операционную
систему. Но система не раСПР.QСТрlitfljЩась ее использовало только
одно подразделение АТ&Т. Первщ.jщarом систёмы зв пределы ко"ша.
нии АТ&Т стала установка сцстемы в компаици New York Telephone.
Система была устаиОl\Лена на компьютере PDp'11120, обладавшем аж 56
килобайтами оперативноЙ пawrrи И двумя ЖесТКИМИ дисками по 2,4 Мб
каждый. С этоrо момента началось ра.спространение систеМЫ.
Уже в начале 1973 "ода нас'!нтьщалось 16 инсталляций системы. Это до'
вольно неплохо для времен, косда такую роскошь, как компьютер, моrла
позволить себе только крупная орrarщзация, и то не каждая. Компьютер
Torдa 1l0купался для решения промышленных задач, а не для набора
текста и просnyшивания музыки.
Вот '!то писаЛ РИ'lи о UNIX'c: "Мы хотела сохрштmь IIC только хорошую
среду IIрО2раММUрО8анuя, в котороЙ можио было реlUатьзадачи. 1/0 u
20
Введение
CllCnle.llty,. вокруе КОI7ЮРОй моело сфорМttроеuться mOBuplllЦecmeo. Мы по
опыту шали. что сущностью СQ6месmною ис//ользованuя комnьюmера
(II/e essellce о/ сотти/ш/ computing) является не толЬ/ш замена перфокар
точною ввода на термuнал. но tt предоставлеНllе средств и стимулов для
более тесною общения. реализуемою средствам" удалеюlOЮ достуna к
,маuшне, работающеЙ в режиме разделения времени,"
Летом 1974 roJIa о журнале «Communications о! the АСМ» пояпилась пер
вая статья о UNIX. Ее авторамн были, как и следовало ожидать, Томнсом
11 Ричи. Они описывали общее устройство UNIX. В той же статье roBO
рилось, что по состоянию на июль 1974 roда система была установлена
уже на 600 (!) компьютерах. Вы только вдумайтесь в цифру: кОЛИ'Iество
щ'сталшщий за rол возросло более чем в 37 раз, Самое интересно, что
система развивалась почти ПрlI полном ОТСУТСТВИII поддержки со стороны
АТ&Т,
После этой статьи операциоНl!ОЙ системой UNlX заинтересовалисъ МlIO'
Пlе научнонсслеДОllатеЛЬСКlfе орrанизаци:и. Но АТ &Т не имела права за
IIlIматься бнзнесом. следовательно, система не моrла продаваться. Чтобы
система всетаки развиnалась, Томпсон бесплатно рассылал всем желаю
ЩIШ наборы дисков с операционной системой. Такой поворот событий
повлек следующую nOJIHY раЗВIIТIIЯ ОС Например, студенты Йельскоro
университета разработали командную оболочку (shell), а cтynelITbl дpy
I'oro университета создали первую сеть иа основе UNIX. В университете
Беркли (Калифорния) ОПЯТЬтаки студеlпыI создалlI оrpомиое количество
различных утилит и ,!Овую оболочку.
ЕСJlИ вы читали какуюто литературу по UNIX, то, наверное, знаете, как
нумеровались версии UNIX Уl, У2 и т.Д. Откуда взялась именно такая
нумерация версий? В 1971 тоду р"чи и TOМnCOH написали руководство
по проrраммироваНIIЮ В UNIX. Версня, которая оп,\сывалась в перnоМ
нздаюш эrorо руководства, стала называться У1, далее У2 н Т.д. Если
бьrrь предельно точными, то вот даты выхода изданий руководства;
. 3 ноября 1971 r. (описыпалась версия У1)
. 12 июня 1972 1', (описывалась версия У2)
. Февраль 1973 r. (VЗ)
. Ноябрь 1973 1'. (У4)
. Июнь 1974 1'. (У5)
. Май 1975 1', (У6)
. Январь 1979 (V7)
. Февраль 1985 r.
. Сентябрь 1986 r.
. Октябрь 1989 r.
После 1979 rола нумерация Уп больше не использовалась чуть позже
мы с вами узнаем. почему именно.
21
LINUX: полное руководство
Бажиую роль в развитии UNIX сыrрал КаЛИфОрЮIЙСКИЙ УlшвеРСilтет в
Беркли. Как уже было сказано, CТynetlТbl (точнее, аспиранты) этою УI!И
верситета разработали НОВУЮ командную оболочку и несколько очень
важных утилит. Одной ИЗ ЭТНХ утилит мы пользуемся до сих пор это
ТеКСТОВЫй редактор vi (правда, в 1975 rоду он I1аЗЫВЦЛСЯ ех). В ТОМ же
1975 rоду Томпсон написал версию Pascal для UNIX.
Модифиuированная в университете Беркли система получила название
БSD (Беrkеlеу Software Distribution). Все мы СЛЫJ.l1а!lИ название FreeBSD,
некоторые из нас даже работали с этой системой. Так вот, сейчас мы
знаем, откуда оно произошло. Данная система содержала Pascal и peдaK
тор ех (vi). УнивеРСИ1'ет Беркли имел право заниматься коммерчеСIФЙ
деятельностью, IIОЭТОМУ Перва!! версия BSD сначала продавал аСь ПОцене
$50. Бсеrо было продано 30 КОПIlЙ системы. В 1978 rоду вышла вторая
оерсия I3SD 2I3SD. Вторая версия продавалзсь активнее было про
дано 75 КОI!ИЙ. Идеи, разработанные в БеРКJ[И, позже были ИСIюльзованы
в следующей версии UNIX от ВеН Labs.
Два rona сп уст!! Питер БэЙнер (Peter Weiner) и [еЙIЩ ЛиlШама (Hienz
Lycklama) создали коmанию Interactive Systems, которая тоже принялась
продавать UNrX. Правда, продавалась она под друrим именем Irdis
(это перныЙ O(J[OH UNIX).
Вернемся к нумерации V11, Прекратuлась она в 1979 rony в этом roAy
вышла последняя «настоящая» UN!X UNIX У7. В ее состав входили
компилятор С, протраммы awk. mзke, uucp, find, cpio и командная о6олоч
ка Bourl1e (и, разумеется, МНОI'О дрyrих проrрамм, которых здесь перечис-
шrrь нет CMblCJIa), Именно эта Сllстема была перенесен:а ДэнниCQМ РИЧII
и Crином ДжОНСОIIОМ (оба СОТРУДНИI\:И АТ &Т) на платформу Interdata,
а чуть позже несколько проrраммцстов из австралийскоrо университета
перенесли ее на платформу Iпtеrdаtа8.Лравда, после переноса на друrую
платформу пемноrо пострадала лроизводителыlстьb системы за все
нужно платить. Университет Беркли. занялся решением этой проблемы
и решил ее. В 1982 rоду выщла версия 2.8,IBSD, которая работала зна
чительно быстрее предществующей.
Бурное развитие UNIX
13 1980 rony areHTCTBY DАRРЛ ([11e Defense Л,j,'нпсеd Research Projects
Agency) потребовалось унеЛИЧИТI, мощно('Ть компьютеров, на которых ба
зировалась сеть ARPANE' (предок сети Интернет). Ресурсы стареньких
PDP-I0 были уже полностью исчерпаны, поэтому решено было переilти
IШ более мощные компьютеры УАХ. Но для этих компьютеров нужен
был стек протоколов TCP/IP. РСaJlIIЗЗЦНЯ TCP/IP сп DEC отпала (10 ряду
J1РИ'НfН, поэтому аl'ентcrиу DARPA H'tttel"O друrОI'О не оставалось, как вы-
22
Рис. 3. PDp.l0
Введение
Рис. 4. VAX
брать систему BSD. Данный факт rюложнтсльно отразился На развитии
UNIX ес выбрали основной систсмой ДЛЯ интер!lета.
Блаrоларя тому, 'lТО UNIX слелалась основой интернета, темпы ее раз-
витиЯ возросли. В Начале 80.х вЫШлО МIIО[О различиых версий UNIX. Вы'
НУСЮl..111f их разнь(е коmании, 110 ОСНОnНЫИ конкурентаМJ1 бьuН1 комла»ия
А1' &1' и у"иверситет Беркли. Первая выпустнла системы Рrоgrапнпеr's
Workbench (рабочее место проrpаммиста) и UNIX System Ш. YНlmepclfreT
Беркли тоже не отставал с октября 1980 сода по сеитябрь 1983 rOJla
6ы;o выпущено 6 версий еи('rемы 4, 4.1, 4.la, 4.1Ь, 4.1 с, 4.2. Последняя
версия отличалась !lЫСОКОПРОИЗl.lOдитеJlЬНОЙ фаЙЛОI!ОЙ систсмой и встро'
еlШОЙ поддержкой сетп (TCPfIP). До 3'1'01'0 сеть I! UNIX Ilоддерживалась,
"ЯI'КО rоворя, весьма слабо. Но после реаJlи:Jаuии стека 1'CPfIP дЛЯ UNIX
"Се изменилось. В 1983 юлу БОJlhl.ПИНСТВО ПОДКЛЮ'lенных к интернету
компьютеров составляли компьютеры VAX с ОС UNIX.
Какие бывают UNIX'bl?
Как только компаНИ/l осознали, что на UNIX можно заработать, причсм
заработать неплохо, на рынке nоявН!юсь МНОЖеСl'ВО клонов UNIX под
разными назпаНнями. Например. компания Sun Microsystems (основана 8
1982 соду, а одним из основатслеЙ был автор редактора ех Билл Джой)
перенесла BSD на платформу, разработанную в Стенфорде, чем ПОЛОЖШlа
начало новому типу рабо'III.Х станций.
Наверное, вы коша-нибудь слышали об операционных системах IRIX,
XENIX, hP-их все эти системы UNIХ-подобныс, их создали, соответ-
ственно, компании SGI, SCO, Hewlett-Packard. О XENIX можно вообше
23
LINUX: полное рУКОВОДСТВО
долro rоворить, но все, что вам нужно знать об этап Сllщеме это ТО,
что она является первым коммерческим UNIX'OM Дl!Ji ПJfатформы Intcl.
ОС lВM ИР.UХ 1.0 9\;1I08а1lа ЩlС!lстеме SуSlещJЦоrАТ&Т. Кcril'ти,,1J
1983 rоду с комцанИиАТ&Т был снят запрет заЩ:fматыт компыотеРllJЩ\l
бизнесом, [шсле чеrqJШМIIaНИЯ сразу же пршнцtасьnpодавать сllOЮ си'
стему Sys!em V от' BellLnbs (незабwваем, ЧТО этощ)дразделение АНН).
Выпускала UNIX и компания IВМ,Правда, щи нвмн.аrо оп.аздала: про-
дажи ее UNIX системы А1Х начались толi;ко в 1990 roдy.
Обилие различных BepCll\! UNJX (,-тало причиной так называеfЫХ UNIX.
войн, Koraa конкурирующие компании выпускали все новые 11 НОВЬ1е
версии UNIX'a.
Это далеко не ВС>I история UNIХ,JЮ paccMoтpeHHo{'Q мlТериала BnOJl}JC
xBaTIIT, 'побы заполнить пробел в ваших знаlfИЯХ относительно истории
развития этой операllИОНIIОЙ системы. Если вы заШlтересО!шЛlICI., n Ин'
теряете есть множсС1'М статей, ПОСJнiщенных ИС1'ориИ UNIX. ЛраnЛi\,
большая их часть написана на анrли.йском Slзыке.
Происхождение Linux
Onерационная система Mlnix
В 80x ronax мощности персональнЫI< компьютеро!\ неXllаТllЛО ДЛ>l заrrу
ска »3 пих ОС UNIX, JЮ к ШI'!алу 9О'х с»туаЦШI радикаль!!о IIЗмеllилась.
Вычислительные мощности перСОI!алЬНЫ.х комп"ютеров ДОСТИrJIИ НУЖlJО'
ro уровня, что ПОЗВОЛIIЛО зnпуска'l'Ь UNIX на обычном рс. К этому же
времени начаЛИ появдяться персии UNIX дЛЯ Рс. Одной из таких систем
БЬVlа система Minix. Система Minix была рnЗрllботана n 1987 roiIy Эндрю
Таненбаумом (Апdrсw S. ТnппепЬаum) как учебнnя nporpaMMa: ее на.
значением была демонстрnuия устроЙства и приншшn работы реальных
операционных систем.
Поскольку Minix бьuш больше демоистраЦИОНIIОЙ, нежели реальной систе
моЙ, онn была далека от совсрщеНСТllа. К тому же она была ориеНШРОllаиа
на процессор 80286, который бbIЛ более доступным в то врем». Исходные
коды (12000 строк) этой операционной системы были онуБЛНКDnаны n
книrе А.Таненбаума "Оперnционные системы", которую Mor про'штать
любой желающий. Одним нз читателей этой книrи оказался Линус Тор'
nальдс будущий создnтель Linu.x.
Линус ТОрВ8ЛЬДС
Линус Бенедикт Торвальдс (Liпus Benedict Torvnlds) родился 28 декаБР>l
1969 roiIa в r. Хельсинки, Финляндия. Первым комrrьютером Линуса был
24
Введение
Сотпюdоrе VIC20, который купил есо дед Лео Вальдемар ТёРНКI!ИСТ.
Лео Вальдемар был профессором I! Уюшерситете Хельсиики.
На "Коммодоре» Лииус 1!alt11сал первую проrрамму «Неllо, World!". Ha
верио. все мы наЧlшали именно с 31'ОЙ ПрOl'раммы. За 4 !'Ода (компьютер
был куплен в 1981 rOJlY) Линус выжал из Hero псе. что Mor, поэтому он стал
копить деньrи на новыЙ кошыотер. Основным источником ero доходов
в то время бьUlИ шкодьные стипендии. В 1.987 соду он купил компьютер
Sillclair QL. Это был очень мощный на то время компьютер. На Sinclair
QC был установлен 32разрядиый ПрОllессор Motorola 68008 11 128 Кб
оперативной памяти. Не уливляйтесь: именио 128 Кб. Это было очень
миоrо: ДЛЯ сравнения, На "Коммодоре» было установлено осе!'О 3,5 Кб. На
НОВОМ KOMtlbJotepe БЫла усtановлена О!lераl\llOиная система QDOS.
За чет'ыре ['Ода Линус Осrюватедьио освоил компьютер и заиитересовался
работоЙ операшюнноЙ системы. В своеЙ кииrе «Just for fun" он пишет:
"ОпеРUЦlЮliкаJlШ я ЗШIlШЩJeсовался так: куtшл флоlltlUконтроллер, НО к
lIeJ<Y I1рuлаi!аЛСfl такой /JОZQНЫЙ драйвер, что I1pUiuлось написать новый.
Пока писал обнаружиЛIlРОКОЛЫ в самой ОllерatиOltllОЙ системе Ш/U, по
крайней мере. несоот8етСlll8ие между тем, что обещала докумеlllпаllия,
11 lпeA. что реально происходило. Я с эти}.f Сlполк:нулся, КОЕда моя пfIO-
,'рамма отказалась работать.»
Siпсlаir QL «прожил" уЛинуса 3 fола на юл меньше, чем ero npeд
IlIсственник. За ЭТII три rona Линус написал собствеины!! ассемблер,
Iекстовый релактор и несколько компьютерных иrp.
После шкоды Линус поступид В Хелъсииский уииверситет иа факультет
КО\lI1ьютерных наук. На нервом курсе ему немиOl'О не повезло он BЫ
НУЖllен был поЙти служить в армию и ПрОСЛУЖIIЛ там 11 месяцев. После
IIOJвращения из армии он ПрОДОШIШЛ
учебу в университете. На втором курсе
он прочитал книrу Таиенбаума, 1I0
священную операциониым системам.
Потом Линус писал: ..Как только я
прочел предиСЛQ8ие, познакомился с
КОНЩ!nluей UN/X // узнал, tш что cno
еобна ЭJ1rа .АЮ1ЦfШЯ, стfJОiая II красивая
оnершионная с//стема, я захотел KY
II//mb такой ко.'о1пьютер, На котором
сможетработаl1lЬ UN/X. Яреllt//л. что
поставлю себе Mitlix едuнr,пвенную
понастояtце..&fУ поле,,'lУЮ из llзвеспl1tых
.мне веРСIlЙ.,
С зтоrа все I{ началось...
Рис. 5. Линус ТОрВ8Льдс
25
_i}
LINUX: полное руководство
Линус недоволен Minix
в январе 1991 сода Линус приобрел в кредит компьютер иа базе про
цессора 1ntel 8ОЗ86@З3М11Z с 4 меrабаЙтами оперативноЙ памяти. На
компьютер была установлена операционная система Мiпiх. Но ycтaHOB
ленная система не совсем оправдала есо ожидания. Больше Bcero ему не
нравилась просрамма змуляшш терминала, которая была для неro просто
необходима ведь С ее rюмошью 011 подключался к университетскому
MicroVAX'y. Линус писал: "БеiJц бъиш в то.м, что 11 хотел скачивапrь и
закачивать файлы. То есть мне нужно было уметь писать на диск, ДЛЯ
тою моей просра.мме Э.IlfУЛЯЦlllluужеu был драйвер дисковооа. А еще ей
был нужен драйвер файловой системы, чтобы ОНймОzлa вникать в opca
"'IЗ<lIию диска и записывать скачиваемые файлы. ... разработка драСнзеров
для дисковооа и ФайJWвой систе.41ы казалась интересным деJЮМ. И я решил
'M заняться, Написал драйвер iJucwBoiJa. А поскольку я хотел Зatlllсывать
файлы в файловую cucmeAfY Miпlx, к тому же эта систе.llfа была хорошо
iJOКYAfCHmupoвaHa, Я сделал свою файловую систему СОвместиАЮй с си'
стеАWЙ Miflix. ТакиАI обраЗЩI, Я МОС чиmать файлы, созданные в Miпix,
11 писать файлы иа тот же диск, так что Minix МОi!Ла Чllтать фаЙЛЫ,
стдй/lllые моей проi!раА/АlОЙ ЭМУ./lЯljfJl/ теРАш/шла"
Линусу ничеrо друrоrо не оставалось, как написать собственную про'
rpaMMY ЭМУЛЯЦlШ терминала, что 011 И сделал, как ВIЩио 113 прllвед{)НlЮЙ
выше U,итаТbt_
Кроме отвратительной терминальноЙ nporpaMMbl Линусу не нравилось
"1'0, '1'1'0 В Minix нельзя было перевести текущую nporpaMMY в фоновый
режим. После написания своеЙ проrpяммы ЭМУЛЯЦlI\I терминала Линус
фактически В3IШСЯ за написание своей операционноЙ системы.
Сначала он IIРИНЯЛСЯ писать различные системные вызовы, но эта работа
ему быстро надоела ведь заранее нелЬЗЯ знатЬ ,что именно Тебе пона
добится. Позтому он в.зял оболочку Boume Again 511е1l (bash) 11 попыталСЯ
запустить ее на своей системе методом научноrо «ТЫЦ» (в математц-ке
зтот метод иазьшаетсл методом Коши). Он запускал оболочку, она тре'
бовала "акоЙ-то СЩ;1'емный вызов и 3авершала свою работу с ошибкоЙ.
ЛИIlУС анализировал, какоЙ вызов был иужен оболочке, и реализовьшал
еro. В 1991 roдy оболоЧка всетаки зanyстилась. Это был очень важныЙ
момент в раЗВИТIШ новой ОС был заложен ее фундамент.
25 BIН'YC"la Линус написал в rруrшу новостей comp.os.minix первое co
общение о создании новой оперaJlИОННОЙ системы. Сохранился даже
орнrинал 31'oro сообщеllllЯ:
r'":rOI1\: torvalds@klaa'va.He1.sinki.FI (Lil:US JЗеnеdiсt Torvaldsl
NC"'$groups: comp.o5.тinix
зulJj ect: vr..'lat woulcl 'у'ОН 1 ike O аее пюst in шiп ix?
26
Введение
Summary: small pall for my пew operacing systern
Me5sageID: <19911'.\192';. 20570В. 9541@klaava.Helsinki.FI>
Date: 25 Aug 91 20:57:08 GMT
Organization:' Univer'sity of Helsinki
H9110 everybody out there using minix
1'т doing а (free) operating system (just а hobby, wan't
Ье tig and prafessianal lik.e gnu) [ау 386(4861 АТ clones.
This has Ьееп brewing sine april, and is starting to get
ready. I'd like апу feedback оп t:hings people like/diBlike
il1 minix, аВ щу OS rеsеnфlеs it somewhat (эате ppysical
layout of the filesY5tero (due to practical reasons) among
other things).
I've currehtly ported bash(l.OB) аl1д gccll.40), and things
эееm to work. This iтp1.ies tPat l' 11. get something pYac
tical within а few months, an.d I'd НКе to know what [ea
tures most people would want. Апу suggestions аУе welcome,
but 1 won' t prornise l' 11 irnp1ement them : )
LinuB !torvalds@kruuna.helsinki.fi)
PS. Уев it's [уее ое ar minix code, and it Аав а multi
ti1readed fs. It is NOT pl'otable (иэеэ 386 task switching
etc), and it руоьаы1y never will support anything other
than ATharddisks, аз t!lat' s а11 Ihave : (.
ВОТ перевод ЭТоrо сообщения:
From: tоrvаlds@klааvа.Неlsinki.П ILinlls Be!1edict Torvalds)
Newsgraups: comp.os.minix
Sllbject: Что вам не хватает :в minix?
Sammary: небольшой опрос дЛЯ НОВОЙ операционноЙ системы
Message-ID: <1991Allg25.205708.9541@klaava.HelsinkJ..FI>
Date: 25 Aug 91 20:57:08 GМТ
Оrgаnizаtiriл: Университет Хеьсинки
Привет всем пользователям minix
я разрабатываю (бесплатную) операционную систему (это
просто хобби, ничеrо «оrромноrо» И профессиональноrо вроде
GNU) ДЛЯ чипоs 386 (-486) АТ,. Я пишу ее 11:ачииая с апреля
и похоже, что скороона будет rOTOBa. Мае очень важно
узнать, что ва.нраВИТСЯ/не иравится'в щiniх, потому что
моя ОС наПОа miriix (та же самая фовая система (из
практических соображений) и миоrо ещечеr6) .
На данный момент Я перенес в нее ЬаэЬ(1.08) и gccll.40),
z7
UNUX: попное РУХО.ОДСТ80
вроде бы они работают. Похоже, ЧТО через неСКОЛi.":IJ{О месяцез
Все будетrотово и я хотел бы зна,ть какие функции вам
нужны. Принимаь'!'ся любые заявки, но их выполнение я не
rаран'rИРУЮ : )
Linus Itorvalds@kruuna.helsinki.fi)
PS. Система свободна от кода minix и обладает мноI'о
ПОТОКОВ ОЙ файловой системой Она не переносима (поскольку
использует переключение эадiiч 386 и др.. I и возможно
никоrда Не будет поддерживать ничеrо, кроме AT
винчестеров, ПОСКОЛЬКУ КрОМе них у меня НИЧеrо НеТ :.(.
Версия Linux 0.01 была выпущена 17 сентября 1991 юда. В своей Книrе
«JuS! for ftт» Линуе пишет:
«Н вот я реrиШlСIl ее вЫЛОЖlllпь. Я не делал публичных объявлений, а просто
написал пятерым-десятерым X(lКepaM На лиЧllые адреса, что она лежит
на FTP-caume. В числе 'IРОЧUХ iI наllисаЛЗlЮ.lJе,,,,тому среди фанатов
Minix Брюсу Эвансу u Ари Лемке. Я выложШl исходнuки ca..llOU Lillux 11
еще несколько бинарников. чmoбы можно было хоть чтото делать. Я
сказал, что нужно, чтобы запустить все это хозяйство. На маиите
должна была стоять М;п;х (lJерсия 386) 11 нужеn был КОМ,IIIJtятор GCc.
Причем на ca..lfO..II деле НУЖllа была АfOЯ версия GCC, nоэто.му ее 11 тоже
выложил.
Не думаю, чтобы тУlJерсuю nроверяло больше одllOю-двух человек, Для
этою нужно было вОЗИ/llЬСЯ С установкой спецuалыlюю компилятора,
выделить пустой раздел, Чl1юбы использовать ею для заJрузки, oткo!
Iшлировать мое ядро и запустить оболочку. А кроме запуска оболочки,
делать было особеюlO нечezо. Можно было распечатать исходнuкu всею
10000 строк,
Я стал распростра//юпь свою операционку прежде всею.. чтобы дОlCaзать,
что все зто не пустая болтQ8НЯ я деuствиlllелыlo что-то сделал. В
Ннтернете мною БОЛfЖlют. О че... бы ни шла речь об Onepal(IIOHKe или
о сексе ..IfНOlиe в киберnросmранстlJе просто веU/(lют лапшу на уuщ.
Поэто..l'У важно после тою каК ты растрезвонUJI, что пишешь Ollepa
l(lIOHKY. иметь возможность сказать: «Вот Я ее U правда сделал. Я не
трепло............ .можете сами rrОСМОlnрюпь».
При чем 3ДеСIo пинrвины?
Кто и Korna придумал для новой оnераЦИОIIIЮЙ системы название и ло
rотип? Линус с caмoro начала хотел !lазnзтъ свою операционную систему
FRЕЛХ. Вот и рабt)таяи бы мы сейчас на FRЕЛХ'зх. Если не верите
найдите в Интернете файл kеrп1/Маkеfilе ядра версии 0.11.
28
BeeAeHllte
А иаЗБание "Linux" получилось следующим образом, Ари Леще отпел
место на FТРсерБере ПОД 11CXOДf[ЫC КОДЫ новоЙ сиcreмы. Он назБал ката-
Jюr' с новоЙ операЦИОIIНОЙ системой pub!OSlLinux, Впоследстnии имеино
по назпание за ней н закрепилось,
А лоrотип ипнх придумали в 1996 ['ОДУ, Тоrда в раССЫJlке linuxkernel
т<lШlIg Iist прозвучала идея о выборе лШ'отипа для Linux. Сами ПОlJИЫае-
те, желающих заняться разработкой лоrотипа предостаточно, поэтому
разли'lllblX вариантов было МНОI'О. В процессе обсуждения лоroтиnа Линус
сказал, что ему нравятся ШIНШИИЫ. В ответ ШI это было предложено мно-
жество пинrnnноп u разных позах. Бьш также вариант nИНf.вина, держа.
щеrо на руках земной шар. На это Линус отвещл: «бед1lЫЙ пUнzelт не так
силен, чтобы удержать земной шар, 011. IWжалуй, будет раздавлен... Так
tt/110 если вы думаете о «1lиисвине», вы должны 1tредСl71авлять себе слека
растомтевшею сидящею lIuнzви1Ш. xnроuш поевшею и оmрЫ<If)I8ШСЮ. Он
сидит с довОJlЬНОЙ улыбн:ой мир н:tlжется Ilрен:раС1lЫМ, если вы тQЛЬН:О
что съели 1Iесн:олько ;?аJlJ/ОII06 свежей рыбы...».
Jlоrотип Linux полностj,ю соответствует пожеланию Линуса. ЛОПJТии
создал Ларрn Ивинr (Larry Ewing), ПРИ'lем он нарнсовал ето прямо в
Uпux с помощью проrраммы GlМР (Tlle GNU Image Manipulation Pro
gram). Если вы хорошо знаете зоолоrию (иml хQтя бы видели пинтвинов
110 телевизору), то, наверное, заметили, что у настоящих пинrвинов клюв
н ласты чернЬ/е, а у нашеrо пинrВИненка оранжевые. Это сделано
специально, чтобы п"нтвин был узнаваем.
Рис. 6. СИМВQП Ипих
29
LINUX: полное РУКОВОДСТВО
ПУТЬ к перВQЙ версии (1.0)
Нумерация версий Linux началась с 0.01, и путь к стабильноЙ версии 1.0
занял почти три rода.
Вврсииащ>аUпиХДОhерсииl.0
Таблица J
Версм:Я Дата выхода 0с06енностиаерсии
ТQfiЬЩ RЩJ(), 5!U1tQЧf:11OЩliВАрайвер диcm и "СICQЛЫСQ дРаЙ...,еРQВ
00,. 17,09,1991 усrроис;в. nporpaмM не было. ПрЗ1ffi'lчеСII:И Сl!lt:тема ИСПОllьзоваТЬСfI
ме мота
осз 26101991 В системе у#л aahyC8Cb kОМЗНD,Ная оболооца и компилstТОР С, C\IJ.
СТеМу уже можнобыnQ w:пОЛЬЗ0аать и писаТЬ а ней tювыв nporpaMMbl
010 12.1991 Сиснща flQДДеР)!(ИlЮJ1вДТ.жеСТКII1И ДИСК. Проrр.аммы !о\]iflIШ бbolЛО
ПОСА€' Эаrруэки ядP!l ерш." заrружзлriCЬ 'Оболочка bash.
y"# цТn.ТQ. Эт pl:IdC 1"I0IЩ"'РW:КFI::I.n!!lJ:'РD, uНQrQ....Qц!otI)Нa.n......I.IА II:nA.
0,11 12.1991 ВИ81"УРЫ. мщит"рЫVQA. ЕОА. Hercu1es. Самое rлввное, Ч"JCI сис1'емо
неЧ61!И nОl1ъаОQТЬ(:.Я ее звrрузипн и ус"JEliНQВИЛИ несКОЛЬКО чеЛОВ61t
ПОllвпасl;o noдк.ao.,!кa' СВОПИНf оперативно памти на ДИСIС СИС"J8МУ
0,12 05_01.1992 скаЧ8J\Q н6СК(;Iлы-.о,QOтенч.еЛО6&К. Это nерsaя. 6ElрСИЯ aoICTeMbl, КОТО-
раА раСПРQсtр0.Нп-ась ПО J1ИЦ9t1зии GPL
Нет, " не пропусти-д HeckOпbKO эерсий. npocto нумераЦИй была З.
0,96 04.1992 I"HIHHa е- свя:зИ: r:: ПрИ1ЩЖени:ем к С"Jабильн.QЙ ееp.r;ии. HaA 6epc
позволяла .зтtyUATh систему Х Winc;ow у Unw; ПОSl;ВМСА rpaфИ"lе-
ский интерфейс
ОЗ9.r4 12:.1993 А ЬОТ здесl;o SJ f1ponycnut оnреДеl!еиов kОЛИ"lI:1С'rво поцверСий версии
0.99 юс ОI1ИСЫseть. ПРОСУО нет смысла
1,0 16.04.1994 ПерSQ" 8ерсия! C'MQMe\'lt-а аы)(СwI версии 0.0\ прошnо 2 ro,tJiJ. и 7
меСЩ8Б
в аIlреле 1992 rona Орест Збровски перенес на Linux систему Х Window.
Это был нас'roящий ПРОРЫВ lIо.де из-за TOl'O, что у Linux появился
rрафИ'lескиЙ интерфейс, а ПОТОМ-У,,"'J:о обмеи меЖдУ X-КШlентом и Х-
серВероМ осущеСТВЛJ!ЛСЯ с 11OМОlll.ью'UDS UNIX Domain Sockets. Со-
кеты позволили использовать ceni'lI 'Linux. Система «повзрослела», что
НJЮХНОВИЛО Торнальдса на измеПеlЩенумерации версий. Вот что он сам
пишет по этому поводу: <<мы с большим воодушевлением принялись раз-
рабатывать сети для иnих JJо{ЩрХ этuх самых Doma;n SQCkets. хотя OIIИ
вовсе не были для этою предllа:тачены. я был настОЛЬ/(Q уверен. чтQ есе
'lOЛУЧllтся, ЧIfЮ даже сделал скачок в нумеР'ЩUII версий. В марте 1992 юда
я планировал еыnусnшть версию 0.13. А вместо эmою,. получив lрафиче-
ский Ilнmерфl!йс пользователя, уверuля, что мы на 95% достUlЛIl/(ели
выпуска nол1tоцетюй, 1Шдежн.ой операЦllОНlЮй CltCпleMbl, nрuодноЙ к тому
же для раБОlllЫ в сети. И 110эmо.иу 8ьтУСП1UЛ версию 0.95.»
Разработка сетевоЙ подсистемы дело довольно СЛОжиое. Именно 110-
этому у версии 0.99 так MHOro подверсиЙ. Версия 1.0 уже Моrла ИСПОЛЬ-
зоваться в СеТИ.
зо
Введени"
Они создавали Linux
ЛIIНУСУ помоrало МIIОro ЭНТУЗIIСТОВ. 110 на первых порах особеиио важен
вклад слеДУЮIIIIIХ добровольцев:
. Бернер Альмесберrер (Weтer ЛlшеsЬсrgеr) разработал драЙверы
FDD и заrpузчик LiШIХ UI.O (IJIIUX LOader);
. Теолор Тсо (Theodore Ts'o) создал файловую СIIL'Тему ext2 (у Iеня
эта файловая CIKTeMa IIСIЮJlь}овалась до коица прОlllлоrо roAa!), бн'
бтютеки, раСllредеЛlIтеJ1Ь памяти ядра;
. Дональд Беккер (Donald Вecker) заНIIМался разработкоЙ сетевых
драйверов;
. Олаф Кирч (Olaf Кirch) IIЗ/IIIСал руководство 110 сетевому админи-
СТрlfрованию Linux;
. Питер MaK-ДОНaJIЬд (Pe!er МсDопаld) разработал ПOlщержку за-
rpужnемых МОДУJlей I! I!ерсии 0.99. Правда, D совремеllНЫХ версиях
ядра этот механизм полностью веределан;
. Пол rоprмеЙкер (paul Gor!n1aker) разработал лрайвер RTC (Real
Time Clock), НеСКОЛЬКО Сетевых драЙверов (в т.... NE-2(){)(), написал
документы «Linux E!herne! HOWro" и «Воо!-Рюmр! HOWTO".
Первые дистрибутивы
Если системой ]аинтересовалис,ъ знаЧIfТ, ее нужно распространять.
СеЙчас Linux распростраияется в виде так называемых Д1lстриБУТИВОJJ.
Но первые версии распространялись по-лруrому. Версии 1.991 roда по-
мещались на двух дискетах, КOIIIШ KOTOPblX можио было скачать с серпера
униперсцтета в ХеЛЬСИНIUI. Первая дискета была заrрузочной на неЙ
было ядро. Вторая содержала корневую файловую систему и ОСНОlJные
утилиты. Установка и конфпrурнроващ!е первых версий системы было
очень сложиым занятием. Установить систему МШ' только эксперт в
UNIX. .
Чтобы упростить "POUecc установки и настройки СИL'Темы, были созданы
так Ifазываемые дпcrрибутипы. Попробую объяснить «иа пальцах", что
такое дистрибутив, Предположим, что у нас есть те две дискеты, содер'
жащие ядро и файЛовую систему, Чтобы IIревраТIIТЬ «ЭТО» В дистриБУl'1Ш,
достаточно еще одной Дl!Iскеты, на которой будет nporpaMMa у'Таиовки
системы на комньютер НОЛЬ.l0вателя. ПрorраМJ:<[а установки поможет не
только устаиопить, но 11 иаСТРОI!lТЬ основные параметры системы, Со-
временные дистрибутивы кроме самой сис'rемы If протраммы устаиовки
содержат еще и набор различных пользовательских проrpамм.
Первые дистрибутивы появились в 1992 ,оду, коrдаЛииус выпустил ядро
Liпш{ по Стандартной Обществениой лицеизии GNU (GPL). Независи-
мые разработчики (rруппы IIроrраММИСТОII) иачали выпускать сван дис-
триБУТIIВЫ Linux: оии разрабатывали ПрOl'раммы установки. nporpaMMb!
31
L1NUX: ПО11"О" руководство
управления пакетами, прикладные проrpаммы. ЯСНО, что каждыЙ ЛИС,
трибутив IIЫПУСКался под своим именем.
Первый дистрибутив, созданный в феврале 1992 roда Оуэном Ле Бданк
(Owen Le В1апс), назывался МСС lnterim Liпщ (Manchester Сощрuting
Centre Манчестерский компЬЮтерный центр). ЛlOбой желаlOЩИЙ мос
заrpузить этот дистрибутив с FTP.C!:pBepa мсс. Чуть позже сотрудиики
университета Техаса разработали дистрибутив TAМU.
А в октябре 1992 СОДа появился дистрибутив Softlanding Linux Sуstещ
(SLS), созданный Питером Мц,Дональдом (Peter McDonald). Важность
этоro дистрибутива заКЛlOчается даже не в TOf, что это первый дистри'
бутив, содержавший си'ТемуХWindow 1I поддержку ТСР/1Р. SLS ЭТО
прямой предок всемирно известноro дистрнбутива Slackware.
.РаЗМНОЖ8ниедистрибутивоа.
Можно сказать, что современные дистрибутивы распространяlOТСЯ 'raK
жс, как и первые ДllстриБУТIШЫ:
· На дискетах (только сейчас вместо лискет используются СО и
DVD);
. На FTP-j;аЙтах и досках BBS (правда, ссйчас 113.за большоrо размера
на BBS дистрибутивы ие ВblЮlIIДblIIaЮТСЯ).
С удешевлением CD-ROM диcrрибутnвы начаJlИ распространяться на
CD. Пернь,ми компаНИЯМ'I, раСПР9страt'ЯВШИМИ дистрибутивы иа CD,
были: IпfоМаgic, МorБе Telecoццnupicat!on, Nascent, Red Hat Software,
Trans- Ameritech, Walnut Creek и Yggdtasil Сощрutiпg Iпс. Один CD на.
мносо удобнее ДByxpex десятков дnскет (средний размер первых дис.
триБУП180В был ОКОЛО 50 Мб). К тому же на CD можно было записать
МНОСО дополнительной информацищ дополнительные просраммы, коды
ядра и приложений, систему Х Window, документацию и пр. Диск с дис'
трибутивом СТОИТ от 20 до 40 долларов, а дистрибутив на дискетах 20
долларов. Как видите, разиица неБQJlьшая (если не считать СТоимоСтн
олноскоростноrо CD-ROM, который ТOI'na СТОIIЛ 100 долларов).
Первое, что вы должны помlIIПЬ о всрсии дистрибутива то. что версия
дистрибутива почти никоrда flе совпадает С версней ядра. Например.
взять версию дистрибутива Maпdrake 10.1 Olia содержит нерсиlO ядра
2.6. Точно также было и с. первыми дистрибутивами: Д!1стриБУТИ8 Mor
называться ХХХ 2.0 release, но содержать версию ядра 1.0, '11'0 созлавало
определеннуlO путаницу.
О дистрибутивах можно rоворить очень долrо. Сеrодня существует три
основных дистрибутива: Red Hat, Slackware и Deblan. Все остальные дис'
трибутивы ЯВЛЯlOтся пронзводными ОТ этих трех дистрибутивов. На наших
32
Введение
просторах бмее популярны RН-совмсстимые дистрибутивы (Mandrake,
ALT Linux, ASP Linux), поэтому мы осrшювимся ТШ1ЬКО иа этих дистрибу-
тивах, точнес только на дистрибутиве Rcd На!, поскольку, если ошrсьmаTh
историю каждоro (ми более шш мсиее Ifзвестноrо) дистрибутива, можно
написать Klllrry 1t\Jlще, чеМ 1'3, которую вы держите в руках.
Компания Red На! была основана Марком Ивинroм (Marc Ewing) в 1994
rony, а в 1995 roду была куnлеиа компанией АСС Bookstores, принадле-
жавшей Бобу Яиrу (ВоЬ Young). Дистрибутивы от Red На! ПМЬЗОВaJIИСЬ
большой популярностью, поскольку ОIlИ были достаТОЧIIО надежны (щ
сме1l0.МОЖtiо было устанавливать даже на серверы), обладали удобной
проrp;n.щ:ой установки и удобными средствами конфиryрlrрования си-
стемы. Red На! это самая большая коммерческая компания, которая
занимается только ОС Linux.
Давайт;: рассмотрим этапы развития дистрибутивов Red На! (нсточником
IIsформации послужил сайт компании Red Hat IJttp://fedora.redhat.
com/aboutJhis!ory/).
ИС10Ршr днсrpибyrnВО8 Rвd Нar
Те6лии,. 2
Дата ВеРем" ОПисаНИе
Первая 6eta-ВGрс\-tя, основанная на АДРе версии 1.1.18 к
C;1i;l'(!Me Уflр<Н,!:f1,t;НVlЯ nаКli!тами АРР {разр.абrmr;аАеd "аН,
29 июля 1994 Просто Данная верt:;ия nос'rQ8ллась на СО, ",а .сатором кроме
беТЦ'8QРG\4 I!cero f1poero ПQCТQВ1!я.nась "QЛНR Докумеюация эТОЙ
CIo1CJeMS. Не nОЛУЧИlWщирокоrо раслростран.ения. Дамя
верСИR на,ывзлзс ..Яed На! Softwaf Urшь
П"рвап бёlПI.е.€oр(;",, поЛ'{Чlotвwа" широКое paCflpocтpaн8
+11i1:, ПОЛЬЭОВl)те:ли моrли'ВыбраТI:r дза ядра стalЖпЫоЮ
(1.0.9, 1'11111 з;с:сnвриментa.nьнов (! .1.54), В это" еврс;ии
31 QК'тб 1994 RHl ОЗ {HaHoween' l'Jо"'еИflС rpцфическ.ий flнтерф@ЙСl(проrрамме rpp llM
(Uhux fnstallatitт MMager). КрОМ9 LIM е З'I'{)Й версИИ nояви.
fII'\СЬ rpафСАчеСl':ив nporpaMMbl насТрDЙ'" OC ynраlEUlенИй
nощ.зоааtеqми и rРУПП(lМИ. файлом fstab 11 сетыо
П0рвыti Рвлиз(н",бвтее!)'рСИЯ). По(:троеН8IнвЯдР8 1.2.8. В
докумеQЦИИ 011<1 наЭЫ61lЛ8СЬ Не ...Red На! SQftw9.ffl UnI,j,)I:".
RHL 1,0 а ..Red Hat COn1h1erial Цnuх... ОчО81'IAНО, иэменеНllteна.зВ8.
Цil 1995 {Mothet"s ОаУI IiИ'J ПРQИЗОШЛQ поспе пoqnl(И компании Red Hat фирм
АСС BookstOfO$. Лorо1l'tП ЭтОЙ версии содерxan "lI:pScн.'V\O
tlIЛ$!ПУ" не лоrотипе (iQU'l обра)kвн мужчина, wвсущий в
ОД}jОЙ PYjI;Ej красную шляпу, а в друrой портфелъ
От1tИ'lитеЛЫША особеносТt, этой Qepcotl1 ПQддерЖКа
формаТII ИС:МПНИМЫХ фаRпаs ELF (Exe<:uta.bIe llnkage
AвfYCТ 1995 RHL 2.0 beta Formet). по эТоrо "ОПОIlb::JQ8ШtCiI формат 6.0IJt. СиctОЦВ
уПрЗВJ'lЕ'!НИЯ nвквтами RPF'6blna заМенеНа сист&мо RPM,
9 ре'3ультщ-в чеrо бым пс>лностью кв совместима с пред.
ыдуЩИМИ аерСIA$iМИ
20 сеиt1tбря RНL 2.0 То же самое, но Не 6er!нерсия. Дистрибутив ИСЛQЛЬЗует
1995 сИстеМу АРМ
:1 -!lК. .1118
33
LINUX: полное рУКОВОДСТВО
про.должение Та6л. 2
Дата f!.eJlC"" ОПИСIiIIИМе
В:nОЙ аерсим.6ыли ис:праВЛIЖЫ НеКОТорые ошибll:И пред-
ыдей.На осозе ЭТоЙ аеРСИI4 .омпеНI/IА Digital соз.да.па
23 Нdбр>1 1995 RHl ,1 ДИСj(.Red.kа 2.1 LiNUX:.o Iдлях86.'ltОМПt.ЮТАровI. КОТОРЫ'А
поtnyЖМЦОСНоеой Д1I>I создания АН ДnA Пllатформы Alphe.
(,Аo<iн.ЩnщС/Alрhа 2.1.)'
Пераая.мноrоппатформеннаR версия. Подnержиsa.nись
T. )(85" pha. Дл.R ArJь-фt.I исполt>ЭOВ8/'IСR формат
MnH 15 1996 RHL 3,.0.3 (pjcasso) иcnопничых файлов a.oJt, а ДIIЯ х86 ELF. В этОО еерсии
пОя:еилоя.:Х-i.$раер MetroX! утил.итв. нвстрщ1.к-и принтре м
аБОЛ9Ч1<a gllnt ДЛ nporpaMMbl rpm.
СистеМQ:JU:' ne.реПисанана С.(р,о зтоrо она была ПИсана
HlI, Р'в!1). поЯ:ВИIIИ(;Ь HOBbje CPACTвв t(ОНФИryрровiЭJ'(ИЯ.
M'OAynjo.PAМ (ptuggabl6 Authentfcatlon Module31. 511srоДDф
И101Iьа8ryСТ RHl3,0,4/3.95 ря переходу на ядра Верс"" 21) nUЯВ!1f1I!СЬ 8t13МОЖНQС1Ь
1996 (Rembrandtl мспопЬЗ0ватъ ",IOДУЛI4 дpa, а де roro "НI; Дlo'lсках дис
ТРИf.)У?1 АН поств.ВlIftЛОСh 12вapaН'Тa Iщер, 1013 которых
Ree.1irib ДОЛ.Q\-{ Qln 1!Ыбрат $ИБОI'lI:l ПОl1,;(ОnЧЩ$0
&rOV'"
ЯДРО. 2.0.18, Померживаются,уже три архит&ры: ){86,
3 опябр 1996 RHL 4.0 (Colgate) A'ph И SPARC. 8nep&bIQ Не д!Рhз иСПОnУ$ТСЯ формзr ELF.
Изменен tlorofl/ln дистрибyn.tоо. которыА иСnOflьэувтсSf до
сих.nор....." $$$!ntro, ttf
3 фввраЛQ 1997 RHL 4. 1 (Vndefbilt) ИспpqАЯ-ла оwибки предыдуЙ верси
Оrnаn,асЬ ис-польэоIШНИ&М стабильной, );ОПI м устарев-
19 мая 1997 RHL 4.2 {Вiltmоц! I шей. "рем" Ilbc 5.3. Иr;полоевние уст.аревшей вереи..
CtfJf anpaBД3Jlo: 8 вереи,", 5.4 06наРУЖИJIOСЬ очеНЬ MNorO
ошибок
27 D.BryCT<J RHl4N4,8.1(4.9S
16 сент'Я6р (Thvnderb\rQ) ИcnопыаОВМS;СL> библиотека gfibc 2.0.
1997
7 ! 6 Оlo:тбря RHL4.9/4.Q,1/4,96 ис'ра1lnЕны оw..бки, связаННЫQ с Переходом на Дрyryю
1997 (МU$tСЩ,g) m:i41O:,СБИ'БЛИQТ8К (с libc н3 glibc)
1 дока6рА 1997 RHL 5.0 (Huпican&J ЭтОfриБУ1'И8 8ICЛlOЧал nporpaMMY рвзере.ноrо KOn\o!po.
8ан..,я- ВFЩ2000РЕ''' И клиент ДnЯ ReaJ Audio ...
Оi:oQl$еtiQСТИ ,э"fоrо дистрибytиац; rР6фичеСК8R r.=peДQ
AHlS.1 GNPME (МО Не устанавливапесl:o ПО УМОЛl4аниlО), еШlаА
11o'1IQHfl1998 (Manhanilr'l) YrtJИ-Т« QнфиrурациJot l!nиXc()nf, брауэер N0tscape (Д!)
э;тоrО.flnоьэоеалея браузер Red Взrоn, с;одврж:аsшй
мноюощибоlf.:).
12 OIGR6ps:t 199В AHL 5.2 (Аро!lо I
17 марта 1999 RHL5.9 (Stsrbuck)
СреА3 GNoME HaKOHц.T() интitrpи:ромkЭ 8 ДИСТР\llбytИ8.
19 !)прел 1990 RHL 6.0 (H6dwig) ЯдРО 2.2, g'!bs 2,!, Это пepBblR МОЙ RН-днст-ри6yrnв. За.
помнился квк оrпИЧl--lЫЙ стабильныйднстрнбуткв. У меня ДО
j.tx пQp есть f(OMпaKT .д»с!( с .эrnМ' днr;rри6утнвом.
6 сентяБРА 1999 RHL 6.0.50 (Loraxl НОВыЙ ""HCТAпJJf'lTOp системы anaconda Mor рзботатъ как е
текстовом, так и rра.ФlolчесkCОf.4 режимах.
4 ОКНl6ря 1999 FlНlб.1 (Cartmanj
27 марта 2000 AHL 5,2 аооо ISО.06разы 9ТОЙ ВерсО1И 6Ыl1И доступны на F1P-сеРfЮре
АооНр'
В соста8е АисrриБVТI'i1!а быnа НОВ8А версиSl 6ибhищеkИ
25 сеli1'!=IбрSl glibc 2.2 и послеДНЯЯ версия g<:c 2.95. ВIUIЮl4еие aepcYl\A
2000 RHL 1.0 (Gulтle.ss) gcc 2.96 не было соrлаСQ8ано с разработчиками осе, что
еЫЭВа1l0 ..еБОlluюill ОНфЛИК"f межд)' НИМ", и КОМnЭНYiей
Red Нat
34
Введение
ПРQДQлжение rабл, 2
Дата BltpC1'lR Описание
З11Н1варА 2ОО1 RHL 7.0.90 (Fi.sher) ПfJрвая ЬеОСИQ. r.tС:ПОЛЬЗУЮI.ц&JI!tДPо 2.4
Bneps:ыe ПОSlвилась подnерЖkЗ больwоrо количества яэы
16 ;'1првля 2001 RHL 7.1 (Seawo!f) 1(00 (дистрибутив nомврживал да:*8 КИ"fэАский И ЯПОНClC:иЙ
зыки). BMeC'I'e с Nf]tscape поста9f1АПСА браузер MozJlla
По умолчанию ИСПОllьэоваJ1С.. НО8ШI версия феЙnОSQЙ
2-21 a8ryCТ8 RHL 7.1.9з,7.1.94 си:стеМЬ! вxtЗ 8Mecto ех12. Д. 8Mвcto LILO h-ачibllI'lCnQЛЬ
21)01 (AoswellJ ЗОО8.ТЬС'Я заrрузч...м:: GRUB. Хоrя при установке можно БЫЛQ
еы6рв'ть ULO, еслИ GRUB ПОllьзойвтst1ю мй tфа81'1ЛСЯ
Доаольно неплохая варсiotя, она "'прожила,. на моем kОМПЬЮ-
Hpe До В8IJ1';Иi'l1.Э. ПршlДn. 8 ней был"," Н8j(Щ'ОРЫ8 оwибiКИ,
22 QI<1'Rбря 2001 RHL 1.2 {Enlgma) которые были испра.влены в sерсии 7.3. ОсоБВННОС1jt:
, GNQME 1.4, KDE 2.2. Пor;:/'Iy,ti:ИЩJ: ОСНОI)QЙ ДI1;Я дмстрм6yr\ltDa
Red На.1 EntQrpr$e UnшI. 2.1 AS (Advanced Seмtr).
22 м8р;а 2002 AHL 7.2.91
.. (SЮРI&Сk) ....
Выход версl-'1И 7,3 не плв.НРQемся. среаэу должна бbI"а
еыити f3;ерсия 8.0. Пuзтому BSpCt110 7.з ну;.кно рассМ8три.
в.ап. lI:ax "пе>:однуlO. версию. В версии 8<0 ДОnЖЫ быть
gссЗ, атк+ 2, Pythoп 2 iot Др)lrИв нОВЫе версии ИIiС'tpуМвн-
тальных средств. НО они "опаздывали" 1( запnанироеанному
сроку выпуска В8р-СИИ 8.0, поэтому было решенО выПуск
б ма" 2002 RHL 7.3 (ValhaI18} эерсни 8.0 H0MHoro отложить, а 8место нее выпустить
ВерсиlO 7,3 бз 6сех :ЭJИХ_НQвщщедвний< Н!) 8 еер(:ии 7.3
BCfl жв бы:l'lи испраэлены некоторые Qшиб..:и ВереиИ 7.2, Я
пИЧ140 рэбо,-ал с: Эf\<lМ дистрибуТИ80llA, И оц MWr,I nQHpI)B",[lC
даЖ8 больше. eM &.0,
Это ПослДВИЙ дистриБУ,ТИII. Qдер:"ЩВWИЙ бр.ау:'llр
Nеlsсарв
RHEL 2.1 AS Red Hat Enterprie UnU)( 2.1 As J1ИС1рибутив,
6 мая 2002 (Pensacola) 1"IреДНIlзначонный ДМII(Оj;JnОрнfИЕноrо nрменеНи,
Ero ocoea дистрибутив АН 7.2
30 сенп.брg RHL 8,0 (Psyche) В ЗТQЙ 'Зерси б",1\и gcc 3.2. g!ibc 2.3. GNOME 2, КОЕ здз
2002 11 OpeпOHiceorg 1.0.1
Основзн на Rщэе 2.4.20 с nОAQерю;оt'i NPТL (Nalive POSIX
31 маРТА 2003 RHL 9 (Shnke) Thmad Ubrary). ПосnуЖИJl OCHOBO ДiliI Red Hat EnferpnJ:>e
Unux 3
Это nQСJ1едн'!я версия, «Красной Шапочки". после зтоrо
(;трибутивы СТаЛИ н.азЫВВтЬСЯ FedQ!'8. Core (АЛЯ настоль.
21 "ЮЛR 2003 RHL 9.0.93 (Seve.rn) НЫ)( С\о1стем) и RHEl (ДЛ корnоре.ТИ8110rо nР"'Elн.еНИR).
F$datn. Cote :;''1'(1 OТКPЫTЫ (""т.е.йте 6еcnлаrны) Про-
ект, 0 AHEL r.оt,«мрчесК1olЙ npoekT о. RH
25 ceHr6pR FC 0.94 (Seveml Про6Н8.iI версия Fedora Core
2003
1З QКТSl:6ря 200З FC 0.95 (Sevem) Первый дис'Триtiyrив от АН, ИСПОi1ЬЭ"уЮЩI1Й РЕIПО;)И'l'ОРИЙ
yum ДIIЯ 0-6ноелениs; СИС"fеч
Red На' Enterprise Lnux 3 пОДДерживал одноеременно
22 октябр41 2003 RI-'(EL 3 Паr)Qn) 7 аР)l.итектур: jntOII Х86. IntelltfJn\um, ДМО АМО64. leM
lSeries, leM Setes, IBM p$&nes и jBM $jЭ90. Осмомн на
IIIдpe 2:.4.21
5 tlоября 2003 FC 1 (Yarrow) Первый реnиэ Fedota сот, ИСnQJli,.эув1с "01(8 "1'()
ЙДРО 2.4 8 ПОC1lеий раз
12 февpat!я: Первые верс:IIIИ. исnoльэующее АДро 2.6, ПОдАеР)l(иваЮlеQ
Z9 марта; FC 1,90, 1,91, 1.92 арХИтQt<Т)'ры 1(86 И 1<&6.64
27 аnреЛR 2004
5 Mapta 2004 FC 1 (Yaтrow) Fedora Сше 1 ДМI хSб.б4
35
UNUX: r10лное РУКОВОДСТВО
Продолжение rа6л. 2
Aa'fQ ........ ОnмcaНиe
1E1I..1.<1g, ?Q04 r:c.:2 {Т""ttJ'w.l1gj Второй pen'A3 f&dora Core; КQЕЗ.2. GNOME 2.6
Троrий р.епиз F8dora Сот; GNOME 2.8 и КОЕ 3.3. ДОIIОIlЫiО
6 ноябр 2004 FC 3 (HeideJberg) .orЛlOlo:lioiое.. СОЗДGНYlе, до HE!ASВHerO вреМени обитавшее на
моеМ компьютере
1 З ИЮНЯ 2005 [С 4 (S1.n1Z) ,'8nt.eрц-tредI,01З Fedora Core_ GNOME 2. 10 и КОЕ 3;4,_ AQ:-
9QпыtOMMpro нововведений
Дистрибутив Red На! Linux ИМОО1\,l.1цожестпо потомков производнЬL
дистрибутивов, которые основаlш'цаRН И праК11!'1еСК11 полностью с НИМ
совместимы. Самыми изnестиымц,потомками RН JffiДЯЮТСЯ:
. I"inux Мапdl'Вkе (версия MDK 5.1. была oCHoBam на RH 5.1) а на
MDK основан ALT Linux;
. Вlack Са! (Версия ос 5.2 OCHQUaHa на RH 5.2) впоследствии ВС
перерос в ASP Linux. '
Выбор диctrрибутива
Итак. дистрибутив это ядpQ + системные утилиты + заранее под
rотопленный Ilакет nporpaMMllOI'O ббесцечеНIIЯ, снабженный удобной
проrраммойинсталлвтором.
Строro ['оворя, название Linux прицадлежит только ядру. Друrие КОМ-
поненты ОС Linux 1\ ПРllк.ладныеnроrраммы ДJlB нее разрабатываются
не какоЙто одной компаЩlей. а/аезависимыми rруппами проrрамми'
стов. работающих на условиях O;fандартной ОбщественноЙ Лицензии
(General PubIic License; ее русcкЩiперевод МОЖНО ПРО'lитать по адресу
rltt:p: i Iru81irщх. net/MyLDJ?fhistori igpl /gplrus. html). Эта
лицензия обязыnает ее держатеJiIi(:lUlатио предоставлять исходныЙ код
распространяемоro им nporpamIНQtO обеспечеИШI, так что теореТИ'lески
каждыЙ может леrально скачать С'tiуБ Щ 1ЧНОro сервера TeK"ТЫ npOl'paMM,
скомпилировать и собрать их на свОем компьютере и получить rотоnую
к установке операщюнную систему.
Если вы решитесь собрать Li!lux с иуля, то ПРО'lитать руководство МОЖНО
по адресу www.linllxfr'omscratch.org (русский перевод: !!LUltiliл-
UX. sakrl. сот). Если иет то покупайте дистрибутив. Необходимость
платить деньrи вовсе lle ПРОТlшореqитнекоммеР'lескоЙ lIдеолоrии Linux:
поставщик дистрибутива продает не код, а только услуrи по ero записи
На носитель. доставке, устаиовке, техническоЙ 110ддержке и т,п.
На сеroдпя существуют и ПОДJIерживаются разработчиками сопш раз
ных дистрибутивов. раЗЛИ'lающкхся 110 области применения. версии
36
Введение
ядра, составу включенных в НIIХ прнкладных проrрамм, требоваюrям
к аппаратному обеспечению и друrим признакам. КдассификаЩIН
3Toro мноrообразия посвящены патьи В.Костромнна и А.Федорчука
в Б'lблиотеке ЛИlIуксЦентра по адресу \;\'1W . 1 iJCuxc еС\ t er . r.\1/1 ibI
асс icles /dist:r ib.
Можно с уверениостью утверждать. что каждый начинающий пользо-
ватсль Linux столкнется или уже столкнулся с проблемой выбора среди
тако1'О изобилия. КакоЙ дистрибутив лучше? Чем отдичается Red Hat от
Мапdrаkс? Некоторых начинающих пользователеЙ этоЙ Замечательной
ОС вводят в заблуждение Itменадистрибутивов, например, LinuxXP.
ВОТ OIЩ "'ro и покупают. а потом полноt1ЪЮ разочаровываются в Linux.
Не скажу, что LinuxXP очень плохоЙ дистрибутив, но у начинающеrо
пользователя будет мсньше проблем с полноЙ, а не облеr'lеюIOЙ, версиеЙ
какоrо-нибудь «серьезнО1'О» дистрибутива, иапример, Linux Mandralcc
или Fedora Соте.
Сейчас я попытаюсь помочь читателю выбрать дистрибутив, с KOToporo
MOJl.-НО начать свое знакомство с Linux.
Прежде BCCro нужно опредеiЩТЬСЯ, для чеrо вам нужен Linux. XOТI1ТC ли
вы rлубоко изучать эту операционную систему? Или, быстро ОСВOIШ ее,
замеllИТЬ elQ Windows в своем офисе. 'IТобы избежать визитов «борцов с
компьютерным rшратстnом>,? Или, может быть, IJ..'\М нужно HacrpOtrrt> сервер
для выхода вашей JlОКальной сети в Интернст? Миоrие компании IIЪ!nyск31ОТ
ДИС1'рибyntJ!ы, адаптированные под любое из указаниыx ПРl!менений.
Следующий вопрос совмеСПIМОCTh с имсющимся у вас оборудованием:
УL.ШlQВИТСЯ ли выбранный дистрибутив на ваш компьютер? А если ycтa
новится, ТО не откажеТСЯ)IИ работать, например, с модемом? Не секрет,
что долroе время разрыв по количеству поддерживаемых УL,РОЙСТВ между
Windows и Linux был попросту вопиющим, Сеrодня ситуация значительно
выровнялась Ныиешние ДllстриБУl1fВЫ неплохо распознают современное
оборудование процсссоры, чипесты, lDE, SCSI It USВустройства.
Практически наверняка не ВОЗIIIIКНСТ проблем даже с ТVтюнерами 11
приводами CDRW,
Правда, почти у всех дистрибутивов не сложились отношеиия с Windo
wsмодемами. Ситуация обусловлена тем. что IIроизводители ие спешат
предоставить Ilиформацию по своим пролуктам для со:щания Linux
драйверов. Первая попытка поддержки Windows!OneMa бьта сделана
компанией ALT Linux, на сайте которой есть пакет hsf, обеспечивающиЙ
работу устройств на Чlше Connexant. В Интернете можно также поискать
драйверы для друrих модемов. скажем, Motorola.
Примерно то же самое относится и К GDl-принтерам. Их производители
..еохотно поддерживают Linux, во MHorlfX случаях приходится надеяться
37
UNUX: полное рУКОВОДСТВО
ИСКЛючительно на энтузиастов. ОтНОСlfl'ельно блаroполучно дела обстоят
разве '!то с оборудоnанием компании Oki.
В иелом же ситуаиию с аппаратным обеспечением можно подытожить
таким образом: со «средним» оборудованием, не слишком старым и Не ca
мым новым, сущеCПIенных проблем возникнуть не ДОЛЖIЮ. для новейших,
дороrих и «навороченных» устройств Moryт поддерживаться лишь их ба
зовые функции, то еСТЬ деныи, заплаченные Baмlf за усовершеНСТRОВaJUlЯ,
окажутся потрачены впустую. Поэтому стою' предварительно изучить
список совместимых устроЙств /1 базовую комплектацию (как минимум
версию ядра И rрафlfческоil СlIстеl,fыXFrее86) каждоro KOHKpeTHoroДlfC
трибутива. ОБЫЧНО эту информацию леrко наilти на саilте разработчика:
например, 1IЛя Red На! это hardware. redhat .cam/hcl.
Что касаетсЯ МИНllМaJlЬНЬ\Х системных требований, то малыми ресурсами
MorYT обойтись лИШь дистрибутивы, предназначенные к установке на
компьютеры, обслуживающие сеть (шлюзы, интернет-серверы), кото-
рые в rрафичеСIЮМ режиме работать не должны. Для дистрибутивов же,
ориентированных на домашнее ИЛи офисное применеНllе, официальные
данные (как н в случае с WindQws) занижаются беззастенчиво. Да, иа ма-
шине с РеnНвт 133 и 32 мв мм можно запустить Linux, но не работать.
Pen!iuт 200 ММХ и 64 мв больше похожи на правду, но если вы планиру
ете исrЮ!lыовать оконную среду КDE 3, то и 128 МВ памяти не окажутся
ЛИШниМи. В противном случае ПР}fменяйте менее ресурсоемкую среду
GNOME. ДОlIолнителыlO нужно учитываТI, потребности прикладныx
nporpaMM, которые сами по себе MOryт быть весьма немаленькими.
Одно из правил, Которое СЛедует BCerдa помнить: ОС Linux roраздо более
требовательна к объему операТИВIfОЙ памяти, чем к частоте ПРОцессора:
Pentillm 111 600 Mfцl32 Мб будет работать rоращо медленнее, чем Celeron
400 MfuJ64 Мб.
Следует позаботиться и о видеосистеме она ДЩlжна обеспечивать
(как МИНlIМУМ) комфортную работу с разрешением 1О24х768. Дело D том,
мноrие LiпuхприложеНIIЯ проеКТlfРОВались исключнтельно 1IЛЯ naHHoro
режима, поэтому при ИС,lОльзоваНIIИ 8ООх6ОО MorYT ВОЗНИКНУТЬ затрудне-
ния (часть окна просто не будет видна).
Потребности в дисковом пространстве вполне стаидартны по нынешним
временам. Минимальная конфиrурапия требует 300--500 Мбайт, однако
повичкам рекомеидуется сразу устанавливать определенный набор "ри-
кладных проrpамм, для которorо требуется около 1,5 fбайт. К тому же
нужно оставить место для документов И рабочих файлов, так что в каче-
стве отправной точки вполне подойдут два rиrабаilта.
Я перечислю НеСКОЛЬКО дистрибутивов, которые купить можно, но CHa
чала скажу о тех, которые покупвть катеrорически не советую. Не нужно
38
Введение
f!Окупать экзотические дистрибутивы вроде ипиххР и Lindows (он же
Linspire). Правда, последний дистрибутив редкость в интернет-ма-
rазине. но если вы ero все-таки найдете, то не вздумайте покупать. Не
всритс мне? Тоrда купитс cro. ВЫ поймете, что даром потратили свои
дсныи и время.
В некоторых интернет-маrаЗllНах дистрибутивы Linux ставятся в один ряд
с дистрибутивами FreeBSD. Так вот; FreeBSD иокупать не стоит 80
всяком случае, если вы не хотите купить еще одну княту, но только по
f.'reeBSD. Да, FreeBSD является дальннм родственником ипих, но начи-
нающему Liпux-иользователю лучше с FreeBSD не связываться.
Вы смело можете покупать Linux Мandriva (в прошлом Linux Mandrake)
11 Fedora Сше '4 (в проlllЛОМ Linux Red На!), а таКЖе дuстрибутивы,
так или иначе основаНные на них это ALTLinux 2.4, ASP Linux 10,
Также смело можете купить не очень новую, но проверенную версию
Linux Mandrake 10 очень хороший дистрибутив.
Вы можете купить дистриБУП1В Кnoppix, но не как основной дистрибутив,
а КаК вспомоrательный, который вы сможете использовать как средство
восстановления системы, кота в очередной раз вы переустановите Win-
(Iows или же посл-е неуда'1НОТО эксперимента с заrрузчиком Linux пере
станет заrpУЖ<lТЬСЯ. Особенность Knoppix в том, 'По он может заrpужаться
IJ нормально работа'rь с компаКТ-Дllска.
Дистрибутивы ОеЫап и Slackware Linux очень хорошие, стабильные
11 nроверениые временем, но вам их лучше не нокуnать, поскольку они
основаны на ВSDсистеме иниuиализации, которая ближе к миру BSD и
в этой Ю!ИfC подробно не рассматривается. Конечно, если вы можете себе
ПОЗВОЛillЪ еще одну книrу по Slackware то можете ero купить. Но
все-таки Slackware несколько сложнее в освоении, поэтому я рекомендую
попробовать этот дистрибутив после Toro, как вы научитесь работать с
Mandrake или Fedora Core. То же самое отиосится И к SuSe немецкому
дистрибутиву со своими, немецкими, особенностями. Лично мне больще
нравятся французский дистрибутив Mandrake.
Дистрибутив Gentoo, о котором мното rоворили определенное время
назад, хорош тем, Что позволяет настроить систему «под себя» в прямом
смысле этоro слова. Все устанавливаемые проrpаммы компилируются на
вашем компьютере, а не устанавливаются IJзRРМ.пакетов, содержащих
уже откомпилированные на чужоЙ машине двоичные файлы. Это rлвnное
достоинство этото дистрибутива, но оно же является и ero rлавным недо-
статком Gentoo начинающим пользователям противопоказан.
Покупать остальные дистрибутивы НУЖНО только в пЮА' случае, Ко<да
вы точ/Ю знаете, что это за дистрибутив и зачем 0/1 вам НУЖен.
39
lINUX: полное руководство
Теперь давайте рассмотрим дистрибутивы Linux Mandrake, Fedora Core
3 iI Slackware Linux поближе. Первые Дllа рассмаtpиваются, чтобы у вас
была возможность сравнить, aSlackware чтобы вы поняли, П09ему ero
вам не нужно покупать (110 всяком СЛУ9ае пока).
Смотреть иа дистриБУТlIllЫ я буду rлазами Iшчинающеrо ПОЛЬЗОDателя,
поэтому не УДИDляйтесь, что яне буду прнводИТЪ рекомендации по ис
правлеиию той или иной ОUlllбюr иа9инающий ПОЛЕ,ЗопатеflЬ не знает,
как ее ИСl1рашпь. Во DрСМЯ установки и работы с сиcrемоi! буду про
водить иебольшце тесты: а lIМСННQ, сколько времетtзанимает процесс
устаиовки, сколько заl'рУЗка CltcтeMbl, КОЛlrрооалие файла и т.д. Время
буду измерять не какоЙ-нибудь проrраммой, а обычным секундомером,
встроениым в мобильиик это же домашние условия. Все ДlIстрибуТlШЫ
тес1'ИрОВались иа следующей рабочей лошадке: Duron 1,6 GHz/256MB/
НОО 40 GB 7200 rpm Maxtor/128 МВ GeForceFX.
Итак, начнем наш обзор. И начнем ero с классики, то есть с дистрибутива
Fedora Core.
F"dora Core 3
Установк.
Джтрибупш Fcdora Core 3 поставляется lIа четырех компаКТJ1ИСках, 110
проrрамма установки, если не отмечать какиеШlбудь дополнительные па-
кеты, а uс,"шить все как eCI"b, требу"", "'шlькu первые три KOMl!aKT ДIfСка.
Как обычно, заrружаюсь с компакт диска, ilажимаю Enter для начала
установки и одновременно (практически одновремённо, сотые У'lитьшать
lIе буду) запускаю секундомер.
Проrpамма устацОВКJI спросила меня, хочу ли Я протестировать ycтaHO
в09ные ДIIСКИ. Как fta9l1наЮl1UrJl,и HII'ICI'O не пошшаюЩIIЙ в установке
Linux пользователь, я соrласился. Да мне 11 не хотелось «убlfВ3ТЬ» HOp
мально работающий и уже установленный Linux Mandrake в случае, еСЛIf
9ТО-ТО с компакта не скопируется, ведь FC3 должен быть установлен на
ero место.
во время устаноою\ JI ие отхожу от компьютера, 'lТобы операПlВlIO от-
вечать на запросы проrраммыинсталлятора, Проперка первоro диска
lIе заняла мноrовремени, а от проверки остальных дисков я отказался,
нажав кнопку Continue.
Прщ'рамма установки очень удобна и проста даже у начинающеro
ПоЛhЗователя не будет с ней пробле1. Выбираю Выборочную установку
,1 РУЧllое разбиеНllе дисков. Даже если вы на911нающий пользователь,
я настоятелыю рекомендую сделать то же. Ведь если выбрать друroй 'п!п
40
8ве,о,ение
установки, ваш B"H'lecTep будет перерюб"т, что приведет к потере всех
ваших ланных и установленноЙ Windows вместе с НИМИ. Здесь у меня будет
небольшая потрешность в измерениJ!X ведь у меня уже есть созданные
l.iпuх'разделы, я только изменИЛ тип файловой си'Темы С ext2Ha ext3 и
выбрал форматирование ЭТlrх разделов. Есл" у вас никоrда еще не был
уста НОl\лен Linux, вам понадобиreядополнительное время на создание
разделоп и \lЗменения rраниц уж<; J'lмеЮЩИХСJl разделоп.
Параметры ззrpУЗКlI по умолчанию, чтобы не тратить дополн"тельное
время на ИХ установку,
Следующий IJщr пыбор протраммнщо обеспечения, Ведь я начшщю.
шиЙ пользопатель, поэтому не знаю, что и для чеrо ИСПOJlьзуется. Просто
остапляю все как есть. Как пользователь нонимающиЙ, нужно заметить,
что FC3 по умолчанию использует'среду GNOME, а KDE вообше даже
Н'"' предлаrается устанавливать.
Появляется ОКНО «Запуск процессз' установки ...» 11 Я перезапуск:аю
секундомер. До этоп) весь подrотовительиый этап занял 7 минут и 31
секунду (7:31).
fedom
PackageGroup
Selection
i
.!
Selc1lhe pack (appucat!on) j,:' j
: qf'OUpS фаl you Wi1n 10 jntall. Т (1 )
. ,
! sel-еС1 о! pad:..age: gfOLlp. clid. ОП
i те chec Ьох beside it
i Опс@:! pat::kag@grouphasbeen
! Я!lеС1d. ciick оп DеtПs \о vlew
; wh;ch pa.ck.age.s;u-.e !ns.ta.lled Ьу
dfa.ukandlO.ddcrr
: DptlOna! p.tk.asf«)h1 th.1t [.
group. .,!
I
I
j' ) '
Р..
н
! iН . 1191'......""1
');":,
'''-"-''''''''.''''''''<c''"''''''''',,,,,,,,,,,--,.__.,-,-,...,,,;,;,.,,,,"',,,",о,,,,,", ' ;";,"o,_"_,;,,,_,,"'",.,",H-<.'.,,,"-,.
o..ktop.
[';'1
I
G3:";Win't'S1еП'l (31!4J) !:
' .I' 1t1i$ p d t. to LF;f!: T bnI! graphka1 tXJ
UЖЩl;К.
GNoм'(JI\llmfI""" i4ft144} i
GNQМE l . .!bl. 9fapblf;;alI,t'j'" m.flfKi!'WЫth
f! I J. р.эnel, dм;пQp. '!\';!>11"m jcOl:\'l;. and Ь9fфcal
III('тarJ.iI.
ОКDЕ(КЕПl/ilOl'lт-nt) 10(l41
.'" КОЕ is.i P\lWl!n'u!. 16 iMef!1К1! wilkh, indude!.
a. 1t1QC). s'J'sмn 'СОМ. ;шd /19f<1ophio;-,,$
M,
О XFCE 10iU}
..... Аlfg!IlWl!igtll'dP$"ti:!PtanтeJl1ttтf"",I)It$'I'IIefQ!l,ю.
':!ооmэо::hit16,
"
i\\
'''1
I
i
i
I
ДррПсаtП$ > .
!
i
OE:.dllDrS
'0/61
SfJmeiim С!ежt. e /I!! pmgI"In T
vro'IJC!Nt'1!';O\!'\de:tit,Thr!ol!inClfmM1o
and VI
.
itUl.i 1i'Щ<;3lМ
. J li..:. 11
Рис 7. Установка Fеdоп Core 3
41
UNUX: полное РУКОВОДСТВО
Началось копирование пакeroв На.МОЙ жесткий дис!\:. Таймер проrраммы-
инсталлятора при копированикБJ1ссовестно врал: показывал 15 минут до
вставки BToporo диска, а после этоro момента стал показывать 10 минут,
хотя прошло больше чем 5 мииут. Четвертый диск в моем случае (все
пакеты по умолчанию) не понадобился. Установка (до ПОllllJIения окна
перезаrрузки компьютера) заняла 15 минут и 38 секунд (15:38).
После первой перезаrpузки система попросила указать некоторые пара-
метры (дату/время, пара метры дисплея), добавить IЮВЫХ пользователей,
настроить звуковую плату и Т.д. Сразу скажу, моя встроенная звуковая
плата отказалась работать. Пл!\табыла опознаllа,.IIО звука при воспро-
ИЗВСЛСНlШ семпла я так и не услышал. Пока остаВJlЛ все как есть.
Вторая пареэаrруз/(а
Сразу перезаrpужаю систему. Запускаю секундомер (с момента начала
заrрузки ядра). Запуск системы (до окна ввода имени пользователя 11 па-
роля) занял на моей маШИlIке всеro 1 минуты и 8 секунд. Запуск GNOME
занял еше 7 секунд.
Начинаю работать с системой. Обновленный GNOME (версия 2.8.0)
мне очень понравился. ПеР!l;i>!l4делом я ПОnЫТi\лСК выяснить, что же
все-таки случилось с моеЙЗВУ:"9I1рплатой. посколr,ку: 11 IщчинаЮЩlm
пользователь, На ум мне не.ЦРЩ\1nО ничеrо IIpyroro,itppMe проверки
УРОВНЯ rpoмкости. A<ia! Та.. II.Сf1:.жеУстРОЙСТ8а выключены, вот поэтому
я и не слышал ЗВУК! Включаю, усТанавливаю максимальную rpoMKoCTb.
Запускаю проиrрыватель komnaKT-ДIlСКОВ и вставляю Extra СО. GNOМE
предложил мне или открыть ДИСК ('1тобы просмотреть дорожку данных)
илн же воспроизвести (аудио-дорожки). Мелочь, а приятно, Выбираю
воспроизведение. Все равно звуu Нет. В общем, зву:ковую карточку я
пока оставил в покое. Пока пос!>{отрю, что ЖС новотО В системе.
Во Jзремя исследования файловой си.емы, я обнаружил, что файловые
системы Windows (а у меня 4 Windоws-раздела), не подмонтированы. Под-
монтировать вручную особоrо труда не составляет, но что, если человек
впервые видит Liпuх, и еле спращfЛСЯ с установкой ОС, он ведь не знает,
что есть команда тоuпt! Но это уже друrой вопрос как rоворится,
RTFM перед установкой.
Посмотрим, сколько места осталось после установки системы. Это можно
выяснить ПрOl'раммой df. Я устаllамивал систему на раздел /dev/hda5, а
раздел (dev/hdаб использовал для Uталоrа /home. Сама система (/dev/hda5)
заняла 2446188 блоков по 1 Кб, то есть 2388 Мб. На разделе /dеv/hdаб
место практически Не ИСПОIlЬЗ0валосъ, поскольку при установке я не
создавал пользователей.
42
Введение
npOrpSMMHoe обеспеченне
По умолчанию устанавливается не все проrpаММlIое обеспечение, а только
самое необходимое. Очень понравился удобный просмотрщик изображе-
ний Photo Тооl (рис. 8).
Также понравился обновленный GIMP 2.0,5, хотя с ним делал только
скринmоты, ero интерфейс стал более красивым и удобным (рис. 9).
Хочу просмотреть видео, Пусть и без звука. Запускаю Неliх Player
именно этот ироиrрыватель используется в FСЗ дЛЯ просмотра видео.
Открываю файл, который без проблем воспроизводился в MDK, и вижу
картину "ТЬе player does "о! have (Ье capabilities (о play back this content"
Больше комментариев нет,
Далее все как оБЫ<IНО Орел Office, Project Planner, ДИаrpаммы DlA,
утилиты настройки системы, Стоп! Кажется, в rpуппе Интернет есть что.
ТО новенькое Firefox Web Browser, Запускаю, Как следует из названия,
данный браузер основан на МоzШа. Только почему'то на анrлнйском.
. '" '1'1:' ,..
.._: '. I1К1Sp..__. ИJCrР)OIIIпW._'.
....... 61 I J!I .:X!1 ii
t+uц r!>p bir1f; н...,1'IO i', _ :.,:!lJ ftмe IfI.. J:?'",.....?щ
":' ': :=.-:л l' .._...i.
;[.!,
I'..I
.
Itti,,Jt'.fJSI' ..............,.,... ............_- _ -::i:ii-- Ir,_:iif
Рис. 8. Photo 1'00/
Рис. 9. Панель инструментов The G1MP 2.0.5
"'1
..
ФО8l!1I Р&;III-, CnpUIUI
Е- Ip " 't' .
'А/РЛ+J
ЯJ;., ,!* 1Ia. iI т
6t.,Ht;1' S!J
(I,:':,i,fi! .
! .'iiij i.1
iпРIlllO'fl'OIIbИOIIWAfllНliGl ij)
ц,iJriТ[;Т ..
o A'lrAtIII'i,}JG\11r
пр.аhf"'"
r'щу.:;-:
о А.ап;с..рке.1IIД8JIetI
OC/;\!:ItIY<'i'(t>r.:(jfJfjt.;tl'! М
Сdo,AЖJll8blДlJ!НltOOl.
ШII"""I-1,,а-1, .}
...
SI,,QТD'-i.,.: ..........,::I 1'".
43
LINUX: полное рУКОВОДСТВО
Исследовав опции, я так И.llе нашелвыораa ЯЗЫJtа интерфейса, скорее
Bcero, для ero русификации нужно доустановить какойто пакет,
Тесты
ПереХОДJfМ к самому интересному,...,. тестам. TeCТhI будут следующиl\lИ;
Тест '{тения блока данных с ПОl>\оЩЬЮ hdparm, тест на время копирова-
ния большоrо фаЙла с рюдела. РАТ32 I! раздел ext3 и копирование :поrо
же фаЙла из одноro раздела ext .вдруrоЙ раЗДеЛ ext3. XOTe,'f запустить
I1рИI!ЫЧНЫЙ мне Midnight Сощmаndеr, 110 е/"о .11 не !iащел и ПОПЫ1'ался
УС1'аноnить с помощью УПЩ1fff>! «Управление naKeramt». Данная ут>!JIИ'fа
мне не понравилась. Она отлично подходит для начинающеro пользова
теля, которыЙ н сам не знает, '!то он хочет установить. Мне же лучше
было ввести имя пакета н У(,'1'аНовиn. ero. К сожалению, в этой проrpамме
данноЙ возможности не было.
Тратить Время на установку МС я не стал, а решил воспользоваться
Браузером файлов. Может это и правильнее. ведь иачинающий пользо
вателъ будет использовать именно eJ'o, а не какой--то МС, который даже
не устанавливается по умолчаЩIIQ,
",_, ,'......"..."_;..--',....,._,.."...,.,c"...',,,._''_...., ............" "'- ;0,0;'-''';.-''''- . О', 'ш,..;..... ,,,;,;,,,,""';;;,"',;,'"''.;:;.;,,.,;,;,.,..,.
o...I)HHbl1!' ыe€'Д*
С-ПН8 XWll'ltIow
YI11C*1'. 1'1)' fPVi'd'!f _е'ot.-Щ:06!111ОRY"Н
",ра,*,IIЩ«ЮIDlII'I!Нt1ofit>$(Х)
r««.'II"GN<*E
GNOМE .tlJ QЩ rрiЩ:IlIIЧвcs 1II!l.IЦlфМ:
« nOnb301i1I.Ten" "c"op.T nllw.nir. р.о.б(Jl.jЙ
tIOl\.СЖ:"'fjlll. nlilt:r<:rВIОШ м rрl!lф.....вr.:К'"
фЗ'iiIQ8.
О rР8Ф_" epRAII КШ:
{n!'Щ
141/-44]
i
i
,
10"'1
,!
,1
J!
К;DЕ. :НО мошный rj:ol&ф"Чw\ OI'lIfJфвйс,
.'ii IКnlClЧзющи" 5 ,::.:!6 rт14e ,11''''llIсжewиа. l'"абr:tЧ\о\iII
; .стол, C!ob"';'!bO ШJl"'" i'I r",а",ч@СОк\oI", 1oIР'Иe.J1)<Е'Р
....,....>"'.,.... .......... ............ """ .......,.,.
:.ечусllt1<I'I'.2,405Мet&f.!\Йt
1: "9""", j I QI,,,,,,щ. I
Рис. 10. Управление пакетами
44
Введение
. 1!iP'f.1r' ф"1I J'IIXIII aI:La
.... -..' ..-..... . ",-. ,
11;X:';;:':'";:" :... "''',
t' 'ЩФi!пР i !'H ri:,i.! Н!no,. ,,41IfI """" ,;.,'..
.. 11й q, . 1 .;p...fJpcC''::::' T
c......,.v-. .
lEПI
, .it;,
Do1,.lItl;:lp
'.
1t...!'\I.fIhII
Ej. . ... . . . .. , ... ' . ''' . . .. .. .
:.;\..... :.
-' .'
'. .".
. . ,roo.:. "
..:11,rJI!:...
'oo;'a.'МiiI:".,;'
...:с-',;:--,...._,....
SlfN"jl.
11.OII';.t:i;Qr& .
fF
':..,""
о
tQ
iN.t.\II.lDi'i
,uw-undOl....". tI 9
iIII_&Ig
. . "Jf.."'.
---
.. ' .. . . ' . ' . ' .. ' .. ...
':,
-;Р
'e
Ei.. . .. . . . . . .. ' . . . . . . . . . ' . . . . .. . .. . .. ' .. ' ..... . ... . .
._:,;;=;.i;;;- -,
. \"':""""-"..
$....:<WIn7,f"'o}
.::
tt:1fIIr!)4.PIISI
....
RI'el!n1.""'!J
r
С.1И9
,/
-<",
Рш:, 11. Браузер файлов
у нас есть уже псе необходимые nporpaMM1>I ДIIЯ пропедеНИJ\ тестов.
Начнем по порядку с hdparm. Запускаю Терминал (нодцтсл D меню
ПрнложениясистеМа). Результат чтения блока размером D 174 Мб за
3,02 сек довольно неnлохой это около 57,68 Мб/с.
Теперь буду копировать файл размером ровно 700 Мб. Это фильм, KOTO
рый мне так и не удалось просмотреть. Получил такие результаты:
. Копиропание с раздела РАТ32 (ldev/hdalO) на раздел ехtЗ (/devlhda6):
2 мин 32 сек.
. Коm!ропание с раздеЛа ext3 (ldev/hda6) на раздел еxtЗ (ldevlhdaS):
1 мии 04 сек.
Как видите, с родными» разделами РС3 работает в два раза быстрее.
Файлова.ясистема ехtЗ использоваласъ только потому, что пр\! нормаль-
НОЙ установке ОНа I1редлаrается по умолчанию ее и выберет начинаю
щиii пользователь. Он же и не 110доэревае'f о налИЧии друrих файловых
систем.
Все, обзор FC3 на этом заканчивается, и я решил выключить компьютер.
При выключении ВIIЖУ картину IIЗ серии «Не ждали»:
POW6_t" down
acpioweroff саl1еа
45
UNUX: полное РУКОВОДСТВО
и все. Так машинка простоялаМiriiYТ.nять, пока я вручную не ВblКJ!ЮЧ!1Л
питание. Лично я вспомнил BpeMena Windows 95: «А теперь питание
компьютера можно ОТКЛЮ'IИТЬ... вручную».
А"'(trноз
Лично я так и не понял, для Koro ЭТОТ разрабатывался этот дистрибутив:
для иачинающих или ДЛЯ продюшутых пользователей. Если для начи.
нающих, о чем свидетельствует дpeCTBeHHЫЦ JЩ'i'ерфейс GNOME, то
почему так МНOI'О недоработок, с'!\Рторыми IШЧНJ:IilюЩИЙ справиться не
в состоянии: неработающая звуКфlaJI плата (у мёНJI довольно распро.
страненная модель, поэтому такая неисправность будет наблюдаться не
только у меня), ошибкu при I!ОСПpQизведении ВИДео (очень актуальная
задача для домащнеrо компьютера); не ПОДlU1ючены фaйJIовые СlIсте[ы,
а nдобавок ошибка при выключении питаиця? И это при том, что я 110'
работал с системой' какой'то час. Поработай я больше, даже не мосу прел'
положить, сколько иедоработок я бы нашел в ней. Если же дистрибутив
разрабатывался для продвинутых пользователей, почему нет привычных
им nporpaMM (TOro же МС)? В.JI.IOБQм. <щучае я бы не рекомендовал этот
листрибутив начинающим пользователям. Сначала нужно поучиться на
более леrком дистрибутиве, у кот.ороro с caMoro иачала все работает, а
затем переходиться на Fedora Core 3, если, конечно, захочется.
Fedora Core 4, к сожалению, попробощт" не nОЛУЧlIЛосl" ПрllВОЖУ только
версии проrраммноro обеспече!UIЯ, ВJl:одящеro в этот дистрибутив.
ПJJ4"'мy,.цec'Alа НедOt::ТaТll.И
ДружеСiееиНЫЙ итерф&йс GNOME 2.8.0 fiPQб118МЫ с onpeдenBI'4101aM 3BYXOBO карты
Хороший выбор nporpl1MMftoro обеспечения Не'ХВ81'ает !:IIiIД&frК"одеICОе.
Удобная npOrpSMM& устанDilКИ Проблемы с ВЫIUIЮ'1&нием питания
новые IJ(;РСи GNOME и КаЕ nj;) УМQlIчаниlO» )'С18Н;:!Ie..nМЮТСI1 НJ'Ксторые
np+IBbl'tHble Профаммы
по VМОn\faНИЮ не ПОДМОНТИРУЮТСА ФEl1I0I!Ы&
системы Windows-
"tPif()Y!lT r;aМОСТQIПUIl"нg$tдQНастpQИ rкx:пe
\f6rановки
ПроrpаММНqe с>6есnе-.ение
FоdОfЗ Core 3 FedoraCora 4 ("'}
ЯдРО вврсия 2.69 ЯДРО Версия 2,6.11
GNOME 2,8,0 GNOME 2.8.3
КОЕ з.з.о КОЕ З.4.0
OPIi!l1 Office 1.1.2 Opet"l Office 1.9.104
GIMP 2.0.5 GIMP 2.2.7
Эаrрузчик GAUB Зarруэчик GЯUВ
46
Введеt-iие
Slackware
Вторым дистрибутивом я решил выбрать Slackware. Просто хотелось на
He1'o посмотреть: ведь до это1'О я видел ero в работе только неСКОЛЬКО раз.
А тут еще и последняя на данный момент версия 10.1. Дистрибутив
поставляется на двух дисках.
Установка
Как обы'lНО, заrpужаюсь с первото комrrакт-диска. Вижу экран привет'
С1'ВIiЯ:
W.?lcome to Slackware versiol1 10.1 (Linux kеrпеl 2.4.29)
Что? Неужели rrоследниЙ ДИСТРlIбутив от Slackware основан на старом
ядре? Возможно, разработ'IИКИ flОС'lИТaJlII, что напое 11М не нужно.
Так и есть: в состав Slackware и Debian включаются только старые добрые
версии ПРО1'раммно1'О обеспечения, в том числе и ядра. Так разраБОТЧИКI1
пьrrаются создать стабильный дистрибутив, 'ftобы в ([еМ не было различ-
ною рода недоработок.
Знакомая заrрузка ядра предыдущей версии. Проrpамма установки пред-
ложила выбрать раскладку клавиатуры. отличную от Us:
Enter 1 to select а keyboard тар
Неужели установка системы будет в текстовом режиме? Да еще и без
меню. Лrа, нет, меню все-таки ПОЯВlUIось, но текстовое. Меню выбора
раскладки клавиатуры содержит список файлов (!) раскладок безо встюro
описания. Доrадai!ся, мол, сам. Выбираю qwerty/ru.map "l!aЖJlмаю Enter.
Честно roворя, текстовая проrрамма установки ВЫ1'!ПIДIIТ как-то архаично.
Такое впечатление, что устанавливается одна из первых версий Red Hat.
Уже в 6.0 версии Red Hat rrporpaMMa установки была иамноro удобнее,
хотя она тоже работала в текстовом режиме. Затем система предложила
ввести ш\рOJIb Пользователя root. На данный момент нароля "ет, поэтому
можно просто t<ажатъ Enter, что я и сделал. Система сооБЩИJm, что ДЛЯ
изменения таблицы разделов можно ввеL,.И команду fdisk. Мне повезло
IjПllхразделы у меня уже есть, :1 Н;1чинаЮlцему П(}Лh'}ователю лучше
вообще отложить эту затею и попросить K01'o-нибудь более знаlOшеrо
нереразбить жесткий диск за He1'O. Только иа ИСПОЛЬЗ0ваllИе текстовой
версии fdisk может уйти минут пять это при услоНlШ, если знаешь,
что делаешь. К тому же fdisk не умеет IIЗменять размеры разделов без
уничтожения всеЙ информации. Поэтому лучше использовать для этоЙ
цели какую-нибудь друrую nporpaMMY, например, тот же Partition Magic
для Windows. Да, есть в SlackY/are более удобная nроrраммз cfdisk, но
R проrpамме установке о Ней ни слова...
47
UNUX: полное ру<оводотво
Для начала установки нужно .ввесrnКОМIlНДУ setup. Ввожу. ПOSlвляется
меню протраммы установки. КE: >1 уже выбрал, поэтому выбираю
второй пункт ADDSWAP. он ПОrJ;оJlяет установить раздел подкачки
ДЛЯ вашеЙ СИСТеiы. У !>!еня уже CIi\!(aH, ПОЭТО!>!У Qp(irраммз заПpociUlа
разрешения только активизировать .:Пот раздел. После ЭТОro ПОЯ8И!lОСЬ
текстовое ОКОШКО FORMA Т, в KOTOPQM нужно выбрать, какие Liпux'раз
делы НУЖНО форматировать, а тщок.е файловую снстему. По умолчанlUO
предлаrается Reiser FS. IЮ для.Р@еJflmJа УСЛОВИЙ ярешИJI выбрать ед3,
чтобы результаты фаЙЛОВOI'о l'еСТ)1РОllаиия были более объективными.
Проrрамма устаНО8l;:И работает тОлько на анrШIЙСКОМ языке, поэтому если
не знаете ето, лучше вам попытаться установить друroй дистрибутив.
Затем npOI'paMMa спросила, хочу ЛJИJ добавить найденные Wiпdоws'раз'
делы в /etc/fstab. Соrлашаюсь 1I дQQaI1ЛЯЮ 2 IIЗ четырех разделов для
ЭКОНОМИИ времешt. После этоro НУЖflовыбрать itСТОЧЦИК установки, BЫ
бираю Slackware CD от DVD, а ТIЩЖС ОПЦИЮ auto для автоматическоrо
Оl1релелсния диска.
Какие пакеты устанавливать? ВыБИраю СцН, то естьустаиовку всех Паке
топ, чтобы не терять премя На их выбор. До этоrо весь подroтопительный
процесс занял 6 минут н 6 секу!Щ. у Jщс, скорее всето, этот показаreлъ
будет друrим. А CClIlI у пас ещеЦет Liпuх-разделов, то можно смело
умножить это время на 2.
Время копирования пакетов с двух компактов заняло 13 минут и 10
секунд. После копирования пакетоппроrрамма установки настраивает
шрифты, докумеитацию и ВЪJПодняет лруrие лействия. На все про все
ушло 53 секунды.
Вот мы и добрались до caMoro и.щересноrо. Проrpзмма установки це
знает, откуда брать ядро. ОНа преДJ1аr(iет цескодько Вариантов: bootdisk,
Slackware CD и др. ПРИ'Iем перщ.щ по УМОЛ'raIJ1IЮ. Я cro и выбрал,
просто механически так получ"Jiось.(1роrрамма ПОIIpQСltла вставить за
rpузочную дискету в дlICКOBoJIldey/fO:.Y меня не только иет этой дискеты,
но и самою дисковода. Отказаться'"".::"никак. Прщплось, це долrо думая,
нажаТЬ Reset и повторить весь процесс заново. Правильный вариант
Slackware CD. Затем список ядер. Какое устанавливать? Я выбрал
ядро, которое использовал ось при установке:
/cdrom/kernel/bare.i/bzlmage
Следующий этап просто анекдотичеСКIIЙ. Проrрамма хочет создать
ЗaI"РУЗОЧНЫЙ диск, который ОНа ;щпрашнвала на нредЬ!Дущем этапе. ВО
как. Я отказался от этой возможности. После этот я также отказался от
IIснользования НОТРLUGустройств. ДЛЯ ЭКОНОМИИ времеFПI.
Настройку заrрузчика LICO я производил ВРУЧНУЮ. Не полаrаясь на
интеллектуальные возможности проrраммы, я выбрал expert И ввел все
48
Введение
параметры вручную. LILO YCTaHOВlfJ1 iI МВК Затем добавил две записи:
Linux (/devlhda5) If Win (ldеv/hdаl).Обы'fНО эти параметры УJ'8зьtВam-
ея аJlтомаmчески но это в нормальных проrраммах ycraSOВКII.., Для
IIНСТЗЩ1ЯЦIIИ LILO выБРaJI команду меJIЮ Install LILO.
После ЭТОfO ДУJIII.f() указать различные параметры системы тип мыши,
параыетры се'щ (sr ИХ не устанавливал);аыбор запускаемых сеРВJlСОВ
(опаВЩкакесть). Потом проrрамма спросила, хочу ли я добавить свои
собствеSl:IЫекопсольные шрифты. А откуда ж они у меня? Ясно, что я
отказался от этоro. Затем l1араметры времени (UТC или не UTC, вы-
бор реFJIона, я выбрал EuropelКiev).
После уст;uщики ареыеНI! НУЖIIО выбрать оконный менеджер по умолча-
НИЮ. Праrрамма предложила КОЕ, я соrласился.
ПоследниЙ ЭТ8II ввод пароля root. Все. Перезаrружаться сщ>ш не за.
хотели мол, уже ие маленькие, знаете, как C!rl + АН + Del нажимать.
Нажимаю зацетцую комбинацню, н система перезаrружается. С момента
выбора ядра до перезаrрузкн прошло 4 минуты и 51 секуида.
ЗШ'Ружаюсь. Система встретила меня roлой консолью. Ввожу имя польэО'
вателя root И спой пароль. Все. Дня запуска Х Window (ну и KDE) нужно
ввести startx. Некоторые пользоватеJIИ lJnux, даже которые уже ИСПаль'
Юllали зту ОС и не полозревают о существованmt такой команды.
Втора" nерезаrpузкв
Я перезаrружаю систему. чтобы вычислить время второЙ заJ'рУЗКИ. Оно
составило 22 секунды до появления приrлашения пвести имя ПОЛЬзопа
теля и пароль и еще 22 секунды на запуск XWindow и KDE. Иroro 44
секунды. После установки на разделе размером 3 fб осталось 473 Мб
свободиоrо места.
npOrpSMMHoe обеспечение
В этом дистриБУТfIве нспользуется новая версия KDE 3.3.3 If еще более
новая, чем fI FC3, версия GJMP 2.2.3.
КDE русифицировать никак НС удалось. Я установил псе пакеты, а из
доступных языков был только анrлийскl!Й. И кому Ifужен такой дистри
бутив?
Существенным недостатком. 118 мой пзrляд, ЯJIЛяется отсутствие пакета
OpenOffice. Вместо неro установлен К Office 1.3.4.
49
LlNUX: поЛное PYKOOДCТ80
PJю. 12. Рабочий стоп KDE 3.3 (S/ackwarв)
Тесты
А вот тут началось самое интересное. Результат hdparm такой же, как и
у FСЗ. 174 Мб СlюmlрОвалось За 3,01 секунды. При копировании 1'0/'0 же
самою 700МбайтНОro фильма я получил следующие результаты:
. Копирование с FАТ32раздела на ехt3раздел: 1 мин 12 сек (!)
. Конирование с ехtЗраздела на ехt3раздел: О мин З1 сек
Вот вам и ядро 2.4. Разница с РС почти в два раза: Slackware в два раза
быстрее работает с файлами, чеМ Fedora Core. Файловая система одна и
та же ех!3. Уже и не знаешь, куда отнеС11l версию ядра 2.4 к пре-
имуществам lUIи недостаткам. Никуда не буду относить. Будем счнтать
это особенностью данното ДИСТрllбутива.
Диаrноэ
Неудобная текcrовая анrЛОRзычнаJ! проrpамма установки сразу отпуПlСТ
начинающих ПО.lьзооатеЛей. Отсутствие Ореп ОШсе и поддержки русско-
ro языка тоже Не в сторону ВЬJбора дистрибутива. 3ато это КО:-fllенсируется
50
Введение
быC'l'pОЙ работой файловой систщdы1 и более быстрым запуском системы:
44 секунды против 1 МИНУТЫ и 15. секунд У РСЗ. ЭтОТ дистрибутив можио
по рекомендовать квалифиuированlJЫМ пользователям, знающим ТGЛК JI
Unux уж ОRИ"'1"О CMorYT довестlt ero «до ума,., И Jlообще, учитывая
особеинOCI'И этоro дистрибутива, ои больше подходит для устзновки на
сервере, чем нз рабочей станщш.
ПреИМУЩе.ст118 Недостаткм
Дpy=*eCТtleнKЫ ИНТ8рфес КОЕ з.э HeYAo6H8.SI, TRJ(cr08a \.'J ЦНrJ1оязt>ll4ttaя пpQrpQМ
МЗ ycraHotnC:l4:
Вые<жаJl производителt.НоС1Ъ Не. nЩlдер pyc;;i<:oro ЯЗЫlr:а. Ее обесnе4ИТЬ
фе"110ВО <:КCfeмы маЖIiО, НО начинающему ПОЛЬ308зтеf\Ю nр""д&у-
СЯ nQTpTIo1Tb joЩ зто уйму времени
Быстрая зarРУ3Кi1 системы Отсутствует пэ\(&т Оре" Office
Профаммноо обеспечение
ЯдРО ееРt:И 2_4.29
GNOME 2.6.2
KDE З. 3
Open Office отсутствует
GIMP 2.2.3
Заrру.:s'fИIC lilO
Llnux Mandrake 10.1
ЭтОТltnСтрибутивя устанавливал ПQCЛедним спеuuaльно: до ЭТQroна. моем
домаwнем'кщшыO'fере был установлен именно' он. Как обычно,. нач:нем
с установlt.И диСтрИбутива.
YCТlfHoaкa
Как и Fedora Core 3, Mandrake поставляеТСЯl1а четырех к()мпактдис-
как. Все четыре диска ну.жцы при установке......, даже если не отмечать
дополнl!телl>ныe пакеты_
ПроrРамма уctаиовiш понЯтна и иовичку, с цq't)rрактичщ;JЩ не бывает
проБЛем......,;поя.}'Наю точно, потому что ДаннЫй диctрибутив Я уста-
наВЛlШaJl неО,!l.ИI{/?v,причем на разные компьютеры.
Весь пoдrОТОJjllТфJь:I1Р(l1\ессв моем случае (цапомню, что я не созда-
вал раздещ.r ОIЩ ужебl..J.JlИ созданы) зашrл всеro 2 минуты 111 секунду.
На КОffirровiUlие пRкет()в,llырnниыыx по умолчанию, понадобилось всеro
7 минут и 2 секунды. ПОСле копирования пакетсш на указание ДОЛОЛIЩ-
тельнщ:параыетров (я()t'тJI1Iил все по УМОЛ'lnНJf1Р, только добаВllЛ одно
ПОJIЬЗОllатeJiя) понадобмось 1 МШlута 11 12 сёкунд. Итоrо на установку
системы лонадобилось 10 минут и 15 секунд (!)
51
LINUX полное рУКОН:ОДС-ТВО
После перезarpузЮ! приятно обнаруЖИть, что тволзвуКовая плата работа-
ет. консоль полностью РУСИфИЦИРОllана (а не как в случае с РСЗ), подмон-
TllpoBaHbI все Wiпdо'WS-раздеДbl (причем ПОДМОl1Тированы правильно
с русскими буквами nроблем Н61'), да и выключается компьютер без
всяких rJlЮКОВ.
Вmрая п"р"заrрузка
Вторая заrрузка (с запуском Х Windows и автоматическим входом
IЮJII.,зователя) ЗЗlUlЛа 42 секунды. После установки осталось Сlюбодиым
2,1 rб ДIlСКОВОТО пространства.
пporpaMMHOf1 обеспеченно
На четырех компакт-дисках Liпuх Мiшdrаkе вы найдете все необходи-
мое проrраммное обеспечение от офисиых приложений до простых
иrрушек. Для MeH1I наиболее важ!Щ.'Офl!СНЫЙ пакет OpenOffice 1.1.0 и
rрафичеСЮНI ре;тактор GIMP 1.2.5_ I!eРСIIЛ GIMP не о'!ею, новая, НО это
поправимо всеrда можно заrpузить новеЙшую.
U:ИЦUI>J.1iт
Ц:i)1'''''JlII
ЦC
q АII<1'IIlIlТМU".II\liI.м.iI"li.
:,;:;:;;;'i,;i\i:i('::'j;,;=,:Щ;
, n...uo t!;II"..
;; H....II.1IUТ1oI: ,,,',ILIoI.lrlli:,\" ".
I JШПJЩIТ"II"" ,',:,..' .
'!t H""".a; . ,I\a.Ж:."w
rnIf"j)Wri.N"JII'It
[):!""РIЩIП'",",JI.
I](;;"..'ti'
Рис. 13. Рабочий стоп
52
Введение
..,
<:.дв.: ,! ;,.}С ;:i,.".' :\; '"':;j
', Л ,,",:J
",, < . .
iL._".
1.1
,
....;.;:.,...,....'"".;;I
:fi::':'''
i,1In""'.I'"
1!;,
i"
iCt;Q"'I>(:,!
!MO\"Jlll'
;",.
i nrмIВ-{)""'JI"':
А!oJWр.:IIЩIIIWrIt'\hJec
i
{,,='\
;...
.
1."",flRrl..i,j
Рис. 14. WiпdQwsразделы сразу правилыю ПОДМОНТИРОВ8НЫ
CC'Ы:PR"""I:IoIмao;I!!S: ..';-1".'-.'....
lii _ '
iii;';';) I'Q';;;;;'; J
',---"',.:::" ...",.....'.;-".''''- ') ,....::
Рис. 1 s. Воспроизведение фильма
в качестве оконноЙ среды ПО умолчанию используется КDE версии 3.2
довольно удачная и быстрая версия.
С I\оспроизведеннем пидеофайлоп нет никаких проблем все фильмы,
нмеЮЩjеся у меня lIа \Viпdоwsразделах, были ВОСПРОIIЗJ!едены про.
нrрьшателем Totcm даже те, для которых я в Windows выка'!Ивал из
Иt-пернета ДОПОЛНlпельные кадеки.
53
UNUX: полое рУКОВОДСТВО
ТесТЫ
Дополнительно описывать тесты Я не буду, а приведу 'tОЛЪКО уже roтовые
результаты:
. Нdpалn: 174 Мб npoчитано за3,()2 ceкyндJ>I, скорость чтения 57,55 Мб/с;
. КоПИроВ3IПfе 700-МбаЙllюm фaйJJa с FАТЗ2раздела на е:tЗразлел: 01:26;
. Копироuаиие 7CJO..МбаЙпюrq фщiла с еxtЗ'раздела на еxtЗраздел: 0:36
Диаrноз
Linux Mandrake отличныЙ дистрибупш ДЛЯ начииающих пользователей.
После установки системы пользователь получает «roтовую К употребле-
нию» рабочую среду. Все, что ему нужно настроить (и то, только еСЛИ
011 это не сделал при установке еистемы) это настроить сеть И!IIЛИ
подключение к Интернету. НикаЮIX особых проблем ни при установке,
ни при работе с дистрибутивом не возникло.
Прекмущества HeдocТaтII.М
ПроСТ!l и БЫСтрм устеНt)8J(З ОСобы,; нeдot::ТaTlCoo НEt1.есflИ нв счи"tап. немно-
ro устаревших версий GNQME и QIMP
Хороший B!;.I60p прorРВММНotQобесп,,8ffi'I,I,
Пос.nе '!стаНОВ':И система n'QIlHOCТЫO rOТOM 1(
раООТEI и не ТQебy>JТ nо'Настрай
нет nро6цеМ ни с') заУкQМ.. И- (: ВИД8фJ(I)МQ;МI4
npoq l'lwiw'ia 06еспечекие .
Unux,Mandra.k4 10 Un"!'!andilV. 2005 (')
ядро,.Р2.М яДрО;,ерQиs:.2;в, 11 ,6
tШОМЕ;.2.4.1 GNО/,Щ2,8.З
'КDЕЭ,2 КDЕЗ..2'():;п9А'фунIЩИЙ 3.4.0
Оре,п-0ffiС(а..1.1:.Q ар"" 0Iftc:e.1.1.4
зв=1,2.5 .з.::,Р2.2.5
з ,,,,,GRUB '. \,..""ооив
ei .Jj * J"I'T'If>I:Il ' -
Unux Mandtiva limited Edition 2005 это первый выпуск JlQnyл:ярноrо Дистрибутива
после СПИЯНЯ компаний Mandll3;keSOft и Conectlva. В ЭТQмдис-три6утивеес1Ъ очень
MHoro иктерееноrо ОТ полной поддержки j(QНТРQЛЛерав Аdзptес до поддержки
иrpоеыx К:РНСОflеи ХЬох.
Разное
ASP Llnux
Если вы не достанете Mandrake (что маловероятно), установите ASP
Linux (www. asplinux. rLl) вам понравится. Своей 'отлаженностью 11
стабильностью он произнел lIа меня очень приятное впечатление.
54
Введеliие
Дистрибутив отличается хорошей СQвместимостью с видеоакселератора
ми NVidia, Аll, а также чипсетом SiS630, которыЙ часто используется В
ноутбуках"
ASP Linux также ныделяется улучшенной поддержкой украинскоrо
языка и возможностью леткой смены кодировки (koi8r, koi8-u, cp1251,
;s08859-5). Естестненно, н состав дистрибутина входят ОрепОfПсе и дpy
rие традиционные Liпuхприложения, Неожиданностью для меня стало
наличие антивируса (e5afe от компании Aladdin), а IIключеlше в дис;rри
бутив бухталтерскоro проrраммноrо обеспечения (от компании Hansa)
явление просто уникаЛЫfое. Имеется таКЖе масса вспомотательиых
средстн, наПр\lмер, система автоматическоrо обновления, автоопределе
ние приводов CDRW и DVD и т.п.
Наиболее полный дистрибутив версии 7.3 «Восток» распростраияется
на десяти (!) компактдисках, среди которых три у(.'Тановочных, два с
нсходными текстами, по одиому с докумеитацией, иrраМII и ПОЛЬ30ва
тельскими приложениями. На отдельном CDROM поставляется полная
версия Acronis 05 Selector 8.0, еще один диск содержит демонстрацион'
ные версии cepBepHblX приложениЙ.
В коробочную поставку ЛSР Linux входят печатные руководства «Бы
стрый старт», «Руководство по инсталляцни», "Руководство пользовате
ЛЯ», «Руководство администратора», которые фактически освобождают
пользователя от необходимости приобретения ДОПОЛНIIТелыюй литера-
туры по Linux.
К тому же на Documentation CD, кроме традициоиных FAQ и HOwro
от rруппы Liпuх Documentation Projecl, содержатся и их перeJюды' вы-
полнеlfные командоЙ ЛSР Linux 11 СТОРОIfНИМИ перerюдчиками. Просмотр
электроиной докумеlfтацlUl обеспечивается через удобныЙ типертексто-
вый иитерфеЙс.
На момент написания книrи уже вышла деСЯ1'aJI версия этоrо ОТJПlчното
дистрибутива. '
ALT Linux
Использовать ДЛЯ обучения дистриБУТIШ ЛLТ Junior 2 я Не рекомендую
уж слишком все там просто. Так 1Ib! уподобиrecь иным ПОльзователям
Windows, которые привычно переустанавливают ОС при малеЙших за
трудиениях. Зато этот дистрибутив прекрасно подоЙдет, если вы хотите
заменить Windows 8 офисе ИЛII дома поставьте и не мучайтесь. В нем
имеется полный КОМIIлект «cтaHnapTHblX» офис!ШХ приложений, прило
жеlШЯ для работы в Интернете, проитрыватели МР3 11 МР4, ПОЛдержи
nаются Цllфроnые камеры, USВПрИIIтеры и мноео чеrо еще. Сразу после
установкн практически все это будет уже настроено, останется ЛИШЬ
55
LINUX; полное РУКОВОДСТВО
изменить ИМЯ компьютера 11 параметры РРРсоединения. Интересно, что
при :пом ALT Junior 2 очень компактен, все необходимое по YMe"ТЦJl()CЬ
фактически на одном компактдиске, На втором размещены исходные
тексты и доnолнительныс среДС1:ва разработки.
Что еще хорошо n .этом дистрибутиве, а точиее, в ПОJШтике ком па нин
ALT [.inux (www.altlinux..ru). тах .это сопровождение обновления
ПОЯJlJIЯЮТСЯ реryлярио и оператltВIIО. скажем. версия 2.0 отличалась He
котороЙ нестабильностью работы; однако пскоре вышел доработанныЙ
Juпiоr 2.1.
Дистрибутив ALT Master предназначенДJU1 пользователеЙ, уже знакомых
с LiIIUX. Он также создает впечатление более ста6ильноrо и надежноrо,
Чем ALT Juпiоr. К тому же В коробочuой версии пы наЙдете uелых шесть
комnактдисков с различным nporpaw.lHblM обеспечением для LiШIХ, в том
числе ПОПУJlЯрНЫЙ .эмулятор VМWare, который IIОЗВОЛЯет запускать
одну ОС "'IУТРИ друrой.
rоворя о локзлизаШ/l!, зачастую ЩlДразумеuа!От только перевод интер'
фейса и IJIПМОЖНОСТЬ ввода СIIМ80ЛОВ национальноro IlJIфаВlIта н напрочь
забывают О докумеН1:ЩШII, Комлания ALT Linux JJeMOHCTpllPYCT более
нельный подход 11 В ЭТОМ вопросе: в комплект стандартной поставки
ALT Junior 2 входит ne'taTHOe руководство по установке операшюниой
СНетемы. ХОТЯ. на МОЙ nЗfЛЯД, днем "е X1Ja'tae'1' IIJ1Jностраций, с erO по
мощью новичку будет rораздо lIpоще Iшсталлировать ос Кроме Toro.
в нем содержится краткая информация 110 уста1l0вке ДО!IОJIНlпеЛЫIЫХ
проrрамм и обновлениЙ.
В состав коробочноЙ версии днстри()утвва ALT Мastеrвходят 'leThipe (!)
прекрасных печатных PYKoBoДCТlla: ло IIIlстаЛЛJЩJIII ОС, администратора
и IIОJlЬЗОlштеля, а также отдельное ПО ОрепОffiсе. Можно с уверенностью
сказать, что на первое время зтой литературы более чем достаточно. А
если У'IИ1Ыllать, что руководства срq;rавлены разра60ТЧI/КЩ..ш ALT Linux и
все описанные В иих примеры ориеmированы иа «родноЙ" дистрибутив,
ТО им и вовсе иены нет.
rоворя о IIOJштике компании ALT, невозможно не упомянуть Sisyphus
ежедневно обновляемый реПОЗIlТОрИЙ пакетоu nporpaMMHOI'o обесnе
'!сния. Все дистрибynlВЫ ALT Linux созданы на ero ОСlюuе. Для чеrо
это '.IУЖНО? Если у !Jac есть IIОСТОЯllныi! ДОСТУII к Интернету, вы можете
настроить ваш дистрибутнв на ежедневное оБНОillJеиие lIакетов Torдa
ваща снстема IIceraa будет поддерживаться 11 «актуаЛЬНО'1 состоянии"
11 вам ие иужно будет периодически устанавливать новые версии все
будет происходить аllтоматически.
Конечно, автоматическое оБНОllлеllие имеет СВОII преимущества и ие
достатки IIЫ же обновляете проrраымное обеспечение, а не нростую
56
8веАение
базу данных. Новое проrрзммное обеспечеlJие может содержать новые
фующии, что является иоложительной стороной. но 11 «ПОJ!водиые кам-
НИ»; никто не знает, скольк" ошибок было Внесено в проrpамму при ис-
правлении уже ItЗвеcrных ошибок и добавлении новых функций. Лично
" !!нкому не доверяю обиовJlЯТЬ свою систему (это даже недопустимо с
roчки зрения безопаСIIOСТИ). поэтому предпочитаю по купать и устан ав-
Лlшать новые веРСIII! дистрибутивов. Впрочем. если в ваш дистрибутив
какой-то пакет не включен. В реrюЗl1ТОрИИ Sisyphus вы. скорее всею, е,'о
пайдете.
Подробнее о Sisyphus вы сможете прочиr.l1Ъ по адресу ,,.M . а 1 с 1 inux . ru.
SuSE Unux
SuSE Linux немецкий дистрибуrив компании Novell. Это очень хора.
IШ'Й, надеЖJ'ЫЙ дистрибуrин с «немецким качеством.. Чеrо стоит только
тот факт, 'rro разработчик этоro дистриБУТlIва компания Novell раз"
работала одНУ 11З самЫХ надежных сетевых операционных систем Novell
NetWate. Р.аииие верСШ1 SuSE rpelllИЛИ недружелюбием по отношению к
русскому ЯЗЫКУ. но в последних нерснях этот недостаток искоренен. По.
следшrе версии SuSE можно порекомендовать не '!'ОЛько опыт!lым (как это
было с предыдущими версиями), но и начинЗ1QЩИМ пользоватедям Liпuх.
Последняя FЩ мом'ент написания ЭТl1Х строк (9.2) версия SuSE содержит;
. ядро версии 2.6.8;
. KDE uереии 3.3.0;
. Ореп Office 1.1.3 nOnYJUlpHbIll офисный пакет, аналоt MS Office;
. KOffice 1.3.3 еше один офисный пакет;
. The aIМP 2.0.4 МОllщейшиl! rрафическиl! редактор. aHaJ10r Phot.
oShop;
. мноro дру!'Оro полезноro nporpaMMHoro обеспечения.
Версия 9.2 цостанляется на пяти компаJ<.тдисках КаК видите, ДИс"
трибутив не маленький (дЛЯ сравнеlПlЯ; Mandrake 10 поставляется на
'leTbIpex CD).
Подробно об ЭТОМ Д}l(rpиБУТИ8е вы сможете узиа,ть по адресуwww.s"зе.
сот, а если заинтересуетесь, то можете купить ero в любом интеРНe"I'.
маrазllне.
Кnopplx
Эта разработка Кдауса Кноппера (ккк. krюрреr ."etlK11oppix) Са-
мыЙ лёrкий н быстрый сrlОсоб познаКОМIIТЬСя с ипщ. Дистрибутив по.
ставляется на одном.единственном компакт.диске и может работать
прямо с нею, без установки на компьютер. Хотяпрн желании вы можете
57
LINUX: полное руководстео
и установить ero НА жесткий диск, аД(:Jпamштелыrые проrpаммные пакеты
скачивать из архива на www . debian /org, Да. этот дистрибутив основан
на Debian. Т,е. не родствен Red Ha.t.
При таком детском размере Knoppix содержит недетское количество
npOf'paMMHoro обеспечения, ВКЛЧа>l офисиые пакеты, медиаплейеры
и средства работы 8 Интернете. Дедо в том, что nporp<IММbl уложены на
диск в сжатом виде и в процессе ;щцуска распаковываются из архивов
на лету,
Самая сuежая на момент написания этой книrи версия дистрибутива
Knoppix 3.8, 1 продается u и:итернет-маrазине knoppix, ru за 99 ру-
блеЙ,
о..Ыап
Debian это цела!! линия раЗВl!тюtJ..,iпuх, аЛЬТернаТl!!,lfIая Red На, ине
слишком совместимая с ней. Средц.ЩlДИРУЮЩИХ диcrpибутивов Debian
единственная полностью неКомМер'tесlЩЯ система. Ecщt разработкой Red
На, занимается Red На, Software, аЗа S!ackware стоит Walnut Creek, то
дистрибутив Debian/GNU Linux CQздает и по ддеРЖIIвает rруппа энту
зиастов cTporo в духе днижеНII!! за открытые IIСХОДНИКИ. Не зря ero
предпочитает Ричард СТOJшмен, лидер Фонда Свободноrо Проrpаммноrо
Обеспечения,
Debian настоящая энцнклопедllЯ свободных проrpамм; в еl'O состав
нходит более 15490 пакетов заранее скомпилированноro проrраммнorо
обеспечения, которые можно бесплатно скачать с WWW. debiah. org I
distribIpackages. Там же ПрeJ:ЩaraюТся дополнительные пакеты. KO
торые нельзя ВКJlючать в основнойдиcrpибутио, потому что их лицензии
не соответствуют принятому в ЭТ9Й rруппе определению бесплатноrо
npOl'pOMMfloro обеспечения (с праврм дД)!ьнейшеrо распространения, Ha
ли чием исходных текстов. разрешением I!Х модификаЦIIИ и использования
о качестве основы новых разрабоТоК). Система управления пакетами у
Debian собственная, похожая на Red Наt'овскую только внешне.
Debian пользуется также репутацией самоro "адежноro ДИС1'риБУПIва
БЛОl'Oдаря тому, что el'o разраБОТЧI!КИ имеют опуБЛl!кованные точные
критерии качества rrporpaMMHOI'O обеспе'lения и отлаживают ето IIC
ключителыlO тщательно. Вместе е тем поддерживается так называемая
.нестоБИЛЫI8Я» ветвь экспериментальное направление, на котором
разрабатываются новеЙшие идеи.
ronbl работы мноrщ сотен разработчиков сделали Debian самым понят'
ным, лоrичным в настроЙке н аДМlfllиcrpироваНИJl диcrpибутивом, Но для
быстроrо старта он не подходит: разработчики не ПрИНЯЛII во внимание
интересы желающих щелкать мышью и не лезть в основы системы.
58
rлава 1
УСТАНОВКА
ОПЕРАЦИОННОЙ
СИСТЕМЫ
подrОТОВКА ЖЕсткоrо ДИСКА
ЗАrРУзКА проrРАММЫ УСТАНОВКИ
УСТАНОВКА FEDORA СОАЕ
ОСОБЕННОСТИ УСТАНОВКИ
MANDRAKE 10.0
I ПРОБЛЕМЫ ПРИ УСТАНОВКЕ
КАК УДАЛИТЬ LINUX
СИСТЕМЫ С ДВОИ НОИ ЗАrРУзкои
ПЕРВЫЙ ЗАПУСК LINUX
СТАНДАРТНЫЕ СЕРВИСЫ L!NUX
СПРАВОЧНАЯ СИСТЕМА
LINUX ПОЛНОЕ РУКОВОДСТВО
1.1 . Подrотовка жесткоrо диска
Сейчас на вашем компьютере УС'fаliовлена, скорее Bcero, одна из ОС
семеЙ.ва Windows со своей файдовоli. системой. ОС Linux использует
друroй тип файловой системы, поэтоuy.n.ля ее установки вы должны осво'
бодить место на диске и отформатИровать еro (т.е. создать на нем новую
файловую систему). Если вы не намерены окончательно избавляться от
Windows, то вам придется CO:IДBTb нв диске нескодЬ){О разделов, каждый
для своей операционной систеМЫ.
er "'J ' ПI"I1J"'l:I[ .
. . СущtЮт&уеr НеСКОЛI(О оnреде-ленV\й Фоfi.О60Й си.Сl'еМЫ. ДлJt себя вы можете
" выбрать одно из НижеприВедеННbiX..... ОНИ обз вполне корректны.
Файловая система часть оneраЦиQННОЙ с-истемы, обеспеиВающая выполнение
операций над фaй.J1aМt.1.
Файловая система способ орrанизации \4 представления битов На :JКeC11(OM
диске.
Разделом назьmается участок жесткоrо диска, к которому можно обра-
титься как к отдельиому диску, что ДОСТиrается исподьзоваНllем таБJПЩЫ
разбиения жссткоrо диска (partitioп шЫе). Эта таблица записана в самом
начале диска 11 подразделяется иа 4 СекцИН, содержащие хаРIIктеРИСТИКII
4 возможных разделов: их расположение, пlП и отметку об аКТИБНОСI1l.
Отметка об активности используется заrрузчикаМII некоторых ОС, в част-
ности, Windows может быть заrружена ТОдЬКО 113 «аКl'ивноro?раздела.
Эти 4 раздела назЫВaIOт<:я первичными (priтary). Один из разд,t!JIОБ может
иметь тип «расширеIUlЫЙ" (eXleпded). Такой раздел содеРЖJI1'С06ственную
таблицу разбиения на oДlrн или неСколько разделов, называемых лоrиче
скими (logical). Та:ким()браЗQ!>I, пространство жесткоro дшж.а может быть
структурировано УДо!?иым вам способом.
60
rлвВа 1. Установка операционной СИG'fемы
Итак, на вашем диске достаточно места для установки Linux, но все
это место нахОДИТСЯ в актиВНО ИСllольуемом разделе, содержащем ОС
\Vindows и все данные. Вы можете:
. Полностью переразметить ДИСК.
При этом вы уничтожаetе один большой раздел и создаете на ero
месте несколько маленьких. Все дшшые, конечно, будут потеряны, и
Windows Т'ОЖе lIрrщется переустаиовить, ВarШI действия:
1. Убеднтесь, что у вас есть компаКТ-ЩfСК, с котороro можно пере-
установить исходную ОС;
2. СоздаЙте резервную Iюпию реех своих данных;
3. Разбейте диск на разделы с помощью утилиты f d i s к от
Windows;
4. Восстановите сван данные и возвращайтесь к установке Linux,
. УмеНЫПIlТЬ имеющийся большой раздел с сохранением дашlы..
Существует несколько nporpaMM, IЮЗВОЛтощllX это сделать. В преды-
дущие ДllстриБУ111ВЫ Red На! входшra УТИЛlrta fips, умевщая работать с
разделами РАТ и FAn2, но не NТFS. Она все еше доступна по адресу
http://ww>J.igd.fl.lg.de/aschaefe/fips. но в современные ЩIС
1'рибyrивы оБЫЧI!О I!е ВIUIЮ'lеl!а. Вместо иее лучше воспользоваться
проrраммоЙ PartitionMagic от Sуrnапtес Norton, понимающеlt все
лшы файловых систеl. Ваши деЙствия:
1. Уплотните существующие данные (дефраrментируйте ващ диск),
чтобы увеличить CIIабодное место в «I<.OHIIe» раздела.
2. Уменьпmте размер раздела, создав На диске неразмечеЮlOе про
С'l'рано::тво.
3. Создайте 1I0вые разделы. Можете отложить этот шаr до этапа
установки Linux: ш!сталляторы современных дистрибутивов (8 "acт
НОСТII, Fedora Соте и Mandrake) ВЫЗЬJваroт специальную nporpaMMY
для работы с разделами диска.
1 .1.1. Рекомендуемая схема разбиения диска
. Раздел подкаЧЮI или свопиша (SWЩJрiпg) !IСПОЛЬЗУется виртуальной
памятью. Иныьm словами, данные, ие умещаюшиеся в оперативной
памяти, перемещаются на жестк.ий диск. Например, у вас в данный
момент свободно Bcero 8 МбаЙт оперативной ПIlМЯТИ, а вы пытаетесь
открыть документ размером в 16 МбаЙт. В оперативную память при
этом будут заrружеlfЫ первые несколько метабаит, а ВСС Осl'альное
будет нахОдllться во Iщещией памяти. Korдa вам потребуется переЙти
в I<.оиец документа, операционная система подкачает в память ну-жные
даниые, а неиспользуемые будут помещены 80 внешнюю память. Раз
мер раздела подкачки должен быть не меньше 32 МбаЙт. Обычно el'o
размер равен удвоенноыу объему оnера11lвноllпамяти.
61
LINUX: Полное рУКОВОДСТВО
+ Раздел lboot содержит ядро операционной системы rt несколько
файлов, используемых при заrрузке. Необходимость этоro раздела BЫ
звана «барьером 1024 ЦИЛИНдра», то есть тем, что BIOS 60лыuинства
псрсональных компыотеРЩI «не видит» цилиндров С номерами больше
1024. Рекомендуемый раЗМер этоro раздела 100 Мбайт.
+ Корневой раздел, содержаЩlIй. файлы. неоБХОДJщые для работы си
стемы 11 прикладнЬL'( протрамм;
+ Раздел !lЮП1е для пользовательских данных.
1 .1.2. Имена разделов а ОС Linux
Linux предстаВJlяет наименования разделов как имена фаilлов, в виде
Iclcv /xxyN, rде:
+ /dev это Каталоr, в КОТОРОМ расположе9Ы псе фа.йлы, связанные
с устройствами;
+ хх две буКllЫ названия раздела, указывающие тип устройства, на
котором размещается раздел. Как правило, это либо hd (если это ЮЕ
диск), либо sd (для SCSI iUlС1Сов);
+ у буква, описывающая сам!) устройство, на KoтqpOM нахОДllТся раз
деJl. Например. !dev !hda (первый rDE жесткий диск) или ! dev / sdb
(второЙ SCSI диск);
+ N 'ШСдО, обо.знаЧaIOщее непосредственно раздел. Первичные раз'
делы нумеруются чисдами с 1 по 4. Нумерация лоruческих раздедов
начинается с 5, даже если первичных разделов меиьше четырех.
Таким образом, !dev!hda2 ;это второй пеРВIIЧНЫЙ раздел на первом
диске IDE, а Iclev/sdb5 это первыЙ лоп!ческиц раздел на втором
диске SCSI.
1.1.3. Разделы и точки монтирования
С ЛОПlческой точки эрения фаilловая система каждоro раздела представ-
ляет собоЙ отдельное дерево каталоrов. Объединение их в общую иерар-
ХИ'lескую структуру с одним корнем достиrается путем ассоциирования
раздела с одннм из каталоrов, содержашихся в корневом каталоrе. Эта
операция назЬ!вается МОНТllроваиием (тountiпg). Монтиронание раздела
дает ДОСТУН к НСМУ '!ерез указаиный каталоr, называемый точкой монти
рования (тOlтting poiJlI).
Например, если раздед !dev/sdb5 был смонтирован как !homel ivan!
дос, то все файлы и каталоrи, иаходящиеся в !home!ivan!doc, ФИЗllче
ски будут размешаться на Idev!sdb5. А файлы, находящиеся 8 Ihomel
i van I <...ioc /Rtlss.ian, па /dev /sdЬб, если назначить каталоr Hussian
точкой монтирования для раздела !clev!sdb6.
62
rлв.ва 1. 'Установка операционной системы
1.2. 3аrрузка nporpaMMbI установки
1.2.1. С использованием заrрузочноrо комnакт-диска
Самый удобный и уже самый распространенный способ. Первый диск
любоro дистрибутива заrрузочный. Вставьте ero в ДИСКОВОД, переза
!'рузите КОМпьютер, войдите В BIOS Setup " сделайте СDпр"вод первым
11 последовательности заrpузки.
Некоторые дистрибутивы (например, Mandrake 10.0) предлаrаются на
DVD, с которыми нужно поступать то'пю так же (если, конечно, у вас
есть соответствующий привод).
1.2.2. С использованием заrрузочной дискеты
Способ настолько устаревший, что в современные дистрибутивы зarру
]очный образ для дискеты 11 не ВКлЮчен. Опищу ero, опираясь на ДИС.
трибутив RedHat 7.1.
1. Скоплруйте катмоrи dosutils "iтages на жесткий диск (жела.
телыю на С: ).
2. Перезаrрузите компьютер в режиме MS DOS.
3. Введите KOMaнnyrawrite (если вы на свой страх и риск предпcr
читаете работать в Windows, то поль.зу,rreсь командой rawrir:ewin):
с: \>с = \dОЭLlt i 1a\rawrite
На запрос проrраммы
Enter disk i!l'.age SOHrce [Не пате:
введите:
с: \ images \boot. img ДЛЯ обычной установки или
С; \ images \bootnet . img ДЛЯ установки 110 сети.
А затем на предложение проrраммы nnест" дl'CK назначения вnеДlIте
ИМЯ дискеты:
Enter de&tination drive:
а:
4. Вы ПОДУЧIIЛИ заrрузочную дискету. Вставьте ее в ДИСКОВОД и переза
!'РУЗlIте компьютер,
Внимательно прочитайте INST ALL.TXT в корневом каталоrе CD, заrля
ните таюке в каталоr images и ПРОЧl!тайте файл README. ИНСТРУКЦИII
по установке обы'шо находятся там.
63
UNUX: МОНО<> руководство
1.2.3. С использоввнием ж:есткоro диска
Если вы скачали образы компактдисков дистрибутива, то можете про
жечь их на СО 11 устанаВЛlIвать так. как сказаНО,8 п,l.2.1. Koraa скорость
вашеro СО-привода слишком мала (например, 4х), IIMeeT смысл разме-
стить ISO-обраЗЬ\li8 жестком ДIIСке, а с СО только зarpужаться. Затру.ЗDЧ.
ный образ находится в каталоrе images на первом диске дистрибутива
и называется boot . iso.
Если какой-то вариант Linux у вас уже установлен, то вы можете извлечь
ЭТОТ файл из файла образа, СМОИТ1lpOвав этот образ:
$ mO\Jnt .0 loop .t isо9660<файлisо> <ТО'lкаjюнтирования>
Прожтите фаЙл boot. iso на компаКl"ДИСК и заrpУЗlпесь с 3Toro ком-
пакт-диска.
Еслн ваш BIOS поддерживаетзаrрузку С USB--УСтроilств, 1"0 ВЫ можете
скопировать на USВ-диск зarРУЗDчныli образ inlage.s/diskboot. img с
первоro диска дистрибутива. Изпод Linux это можно сделать так:
$ dd if=diskboot.img of=/dev{sdal
После чеrо заrрузитесь с USВ-Диска и слелуйте указаниям проrраммы
установки.
Если вы заrружзстесь с дистрибут.lffiНШ'О СО, но устанаВЩlвать собнрае-
тес.. с жесткою ДIIcKa, то в ответ на прнrлашение заrрузчика
boot:
введите тот вариант заrpузки, который позволяет вьiбрать устройство (в
днстрибутиве Fedora Core эта Дllреt.t;тява наЗblваетсSl askmethod). Укажите
инсталЛЯТОРУ раздел ДIIcKa и каталоr, в котором находятся образы дисков
дистрибутива.
1.2,4. Установка по сети
Для этоro вариаllта установки вам "УЖНО иметь доступ к FТP-cepBepy. !"Де
хранитс>! каталоr с. избранным вами дистрибутюlOМ. Заrру:штесь с тон)
носителя, на который вы скопировали заrрузо'lНЫЙ образ, ответьте на
вопросы инсталлятора 11 выберите в Ka'leCTlle УСТРОЙСТll3 для установкн
FTP-сервер.
64
rлава1. Устан овка операционной системы
Рнс. '. 1. YctBHoBKB RedHat (10 протоколу FtP
1.3. Установка Fedora Core
1.3.1. Описание дистрибутива
Название проекта Fedora Core не имеет НИК<ilюrо отношения к знакомому
нам с детских лет пронзведеfШЮ К.И. Чуковскоrо "Федорино торе», Fe
dora Core является наследницей линеЙки RedHat (бесплатной), а Fedore
означает фетровая шляпа (против Кр<lСIЮЙ Шапочки RedHat)
Fedora Core иlШХ это наследник кулыовоrо ди,-,,'рибутива Red На! Li
ЩJХ, созданный сообществом добровольцев Fedora Project (11t tp: //W>M.
redhat . сош/.Ееdоrа) при участии И с,юнсорской поддержке компании
Red НаС Дистрибутивы Fedora Core содержат только новейшие версии
щюrраммното обеспечения. Лучшие решения, найдеиные командоЙ
разработчиков Fedora, Red На! ВКЛЮчает в прш'раММllое обеспечение.
поставляемое в ее коммерческих дистрибутивах Enterpl'ise Lil1ux.
Несмотря на ЭТО, Fedora Core не тестовая площадка для энтузиастов,
а полноцеННI>!Й дистрибутив. прш'одиы(! для домашнеrо, офисноrо ИЛИ
серверното примеиения. Дистрибутив включает :удобную rrporpaMMY для
установки и ПОЛlIЫЙ набор ПРИJюжеllИЙ . офнсные пакеты, браузеры
и web-сервера, МУllыимедийные средства и ИНL-rpумснты разработчика
по. Fedora Core Liпuх может леrко соседствовать с MS Windows как на
одном компьютере, так и в локальноЙ сети. а ОфИСl!ыil пакет OpenOffice
позволяет без проблем открывать, редактировать и сохранять документы
I! форматах MS Word и MS Ехсе\,
3 311:){ 3118
65
UNUX: ПОJ1ное руководство
Вереи,", FedQr81 Core 1, .3", 4. Системк",. треБQвания
На момент напщ;,щuя этой КНllЩВЫШilО четыре веруlU! ди<;трибутива
Fedora Core. Первая версия работала еще HeiIocTan).O стабильно. Во
второй замечен дq1l0ЛЬНО непрuятцый ба1', меwающЩtсосуще<;твованию
Fedora Core 2 u Windows, особенно Windows ХР, на QДllщ,( жомпьютере:
после установкиFС2 на нежоторце:жестжие ДИСКИ Windows перестает
за1'ружаться. ДaHньie в разделах WindOWS при этом ие ПСiJ:IТЯТСЯ, но для
тою, чтобы Windows снова стала распознавать ЭТII ра:щелы, требуется
"РУ'IIJУЮ реI<оифщ-урировать .l!ЦjС'ЦЩЙ ДИСК. в третьей ЩJрсии этот бат
устранен, однако ПОЯВllлосьожество ДРУ1'Ilx. Так 'fI'орекомендуется
использовать вторую версию вместо третьей. В по<щеднеii, четвертой
версии FC ошибки предьщушщвr;руиЙ были исправлr;IIЫ. Так что что в
качестве реI<омеlЩации моху посоветовать имеИIIО ее'.
Третью версию устанавливать не рекомендуется ввму ее нестабильности
и большою количе<;тва возникающих КOJШИЗИII (типа неработающих драй-
веров 11 т.п.), разрешить которые может только опытный пользователь,
ио и ему зачем С этим всем ВОЗl1тьея Тоже не совсем ПОнятно. Лучше
IIЗначалыю выбрать стабильныЙ дистрибутив,
Команда разраБОТЧI1КОВ Fedora Project обещает выпускать иовые версии
дистрибутива 2 3 раза в J'OJl. Вы можете следить .за новостями иа страНllие
}-lt t: р: 11 fedora redha t . сош,
Системные требования всех веРСI1К обы'lНЫ для современных дистрибу
тивов;
. процессор класса не ниже Pentium (pentium 200 Mru для работы 8
текстовом режиме, Pentium n 400 Mru или лучше для работы с
rрафикоЙ);
. память: не менее 64 Мб для текстово1'О режима, не менее 192 Мб
(рекомендуется 256 Мб) для rpафическоrо;
. простран<;тво на диске Зal!ИСИТ от выбранноro т.ша у<;таношrn:
. 620 Мб м,шимшrьная устаноака;
. 1.1 fб серпер:
. 2.3 rб настольныЙ компьютер;
. 3,0 rб раБО'lая стющия;
. 6.9 rб полная установка.
Кроме Toro, сама ПРOl'рамма устаНОDJШ требует еще от 90 Мб (мини
мальвая установка) до 175 Мб (J101lная у<;тановка) дополнитеЛЫЮ1'О про
странства на жестком днске, которое после завершения установки будет
освобождено. И, I<онечно, нужно ме<;то для пользовательских данных и
не менее 5% ДI1СI<0801'О про<;тран<;тва для работы самой системы,
Вторая верСI1Я Fedora Core ОТJlИчается 01' первой следующими новин
ками:
66
rЛQSЗ 1. Установка операционной системы
. Ядро верСИИ 2.6 со всеми выекающимии отсюда последствиями
(лучшая масшrабируемость, производительность и под.цеРЖIGI новых
устройcrв).
. Новая версия системы Х Window XIIR6.7.0.
. Новая версия QКошlOЙ среды (1NpME (2.6), которая работает значи-
тельно быстрее предыдущей.
. Новая версия оконноЙ среды KDE (3.2.2), в которой испрauлены не-
которые проблемы, ВКJlючаядроблемы с переnодом интерфейса.
. Xfce 4: леrк:ое '! быстрое окружеияе рабочею СТОЛа.
. Поддержка технолоrии Subversion 1.0, которая должна заменить тех-
нолопоо CVS.
. РеализащUl системы безопаСIЮС'l'И SEUnux.
В третьей версии добавлены или обновлены:
. Новая версия окоиной среды GNOME 2.8.0.
· Новая вepCIUl оконной среды KDE з.з.о (к сожалеНIОО, пока тмько
на анrJ1ИЙСКОМ).
. Клиент электронной почты E'volution 2.0.
. Дополнитедьная «целеШl!!» ПОЛИТlIка безопасности SELinux, сдсдяща!f
не за nсеми операL\ИЯМИ, а только за опредслеШlЫМИ демонами.
. Динамическое управление IGlтaJI()f9M устройств (проrpамма udev), П0380-
ляющее создавать файлы устройcrв по мере ПOДКJlючеlШЯ драйверов.
В четвертой версИИ Fedora Core, пояuившейся 13 июня 2005 [, МОжно
QI'метить сдедующие особенности:
. Ядро версии 2.6.1 J .
. Fedorll Core 4 стала первым дцстрибутивом, скомпишrроuaнным с
помощью четвертоro компилятора GNU С (GCC).
. Новая версия СИl"Темы Х Wiпdow X1IR6.7.0.
. Новые версия оконных сред: G.NOME 2.1О:и l{DE 3.4.0.
. Кластерная файловая СIfстеМII.<Э.f.!' 6.J,'0.pre2Z.
. УШffiерсальныЙ просмотрщик документов Evince 0.2.1.
. СущеСТf\еияо УЛУЧШCl<llая и расuurренная щщевая ПОЛIfТИК" безопас-
ности SELinux (дополнительно сталИ llOкръrваться еще 80 демонов).
. Eclipse 3.1М6. полнофункциональная срсдаJаvа-разработок.
. Некоторые приложеНЮI оказались из дистри6yrиuа IfЗЪЯТЫ. В чет-
верТQй версии ЕС ны не найдете exim, XFce 4,меднanлеера x:mms и
даже KOffice. РазраБОТЧИlШПОIl1ЛИ, на МОЙ взrляд, впо;ще правильным
путем и стали помещать в дистриБУПIUЫ только приложения, лучшие
в своей функциональной катеrории. Например, ВОЗМОЖНОСТИ XFce 4
с лихвой покрываются возможностями КОЕ иGNОМЕ, так зачем же
из дистрибутива делать свалку проrрамм. При этом. если вам пужна
какая-то просрамма, отсуrствующая в дистрибутиве, вы Bcel'Дa смо-
жете се бесплапю скачать.
67
UNUX: полное pytc080ACTBQ
Детальную информацию о новинках и нововведениях в четвертой верСIШ
можно узнать по адресу www.rhd.ru/docs/manuals/ fedora/4/REL
E.l\SENOTESru.hti\\l.
Специальная технопоrия разrpаничения ДОС1Упа SELlnux
SEl.inux (Security Enhanced Ыпнх) это технолоrия, позволяющая
лучше защитить ваш компыоп!р от взлома Н непродуманных действий
пользователей. ТехнолЬrия SELinux работает совмеСтно с механизмом
пр'ш доступа в Linux, lIОЗВОЛЯЯ администратору ввести дополнительные
правила доступа к файлам.
Работает это так: если права доступа запрещают доступ к файлу, запрос
отклоняется сразу. Если же црава доступа разрешают доступ к фаl!лу,
настает черед SELinux. СИС:J'еМа. SELinux ЛрOl!!ряет текущие праl!ила
работы с данным файдом М,я заupосившеrо ero процесса, запустившеrо
процесс пользователя и выполняемой им «роли» (например, сам адми-
нистратор может запретить себе доступ к критически важным ресурсам,
коша он не в административщ>й роли. Тоrда даже украдениыЙ пароль
root Не слишком поможет злоумьtUJлеННliКУ). ECIIlt правила SELinux Не
разрешают доступ к этому фаму, операция. ОТ1uщняется.. Как видите,
SELinux это еще один барьер IIСlIстеме безопасностн вашеro сервера
(или просто домашнеrо компьютера).
Кроме оrраничения доступа к файлам, с помощью SELinux можно orpa-
НИЧИR3Тh )l.еЙСТRИЯ nтдеЛhНЫХ пrnrьзпня;телей, rруцп П(1JJЬ:..,10вателеПj npn
[(ессав. Подробно о SELinux на русском языке вы сможете про читать по
адресу j.,ttp: / /www.ор?лпеt.ru/Ьаsе/sес/iпtrоsеliпux. txt . htrnl.
1.3.2. Особ",ности устзttоаки
рззличныхверсий Fedora Core
Fedora Core 2: подrО'fCIаКЗ к с;оамес;тноll жи3tlи с Windows
Если вы собираетесь держать на одном компьютере ОС Windows и Fedora
Core 2, то не торошпссь устанавлltllать fC 2. Дело в том, что проrpамма
инсталлятор этой версии дистрибутива по-своему определяет параметры
физической разметки жесткою диска. После тою, как эти параметры бу-
лут занесены в таблицу разделов, Windows перестанcr распознавать диск.
Чтобы обойти эту ошибку, нуЖltо.помешать ИНС'raJIЛЯТору автоматически
определять параметры разметки диска, указав их вручную.
68
rпаВ<-l 1. Установка операционной системы
Для определения rеометрии диска (цилиндры. юловки и секторы. CHS)
CJ,ужит утилита fdisk, входяшая" любой дистрибутив Iinux, Если никако
т Ijnux у пас еще не установлено, то заrрузнтесь с первоrо компаКТiЩС
ка устанавливаемоro дистрибутива" " ответ на нриrлашение заrpузчнка
введите параметр ,щра rescue
boot: linux reSClle
Будет заrружено средство восстановления операционной системы. Bы
берите язык, раскладку клавию-уры и нажмитс кнопку Сопti.шс, В KO
мандной строке введите команду'
[,jJsk 1 /devllxla
(idev!11da 'по ваш Зal'рУЗО'lНЫЙ жесткий диск, на ко'Н)рый вы собира
етесь устанавливать Linllx).
Проrрамма fdisk выведет среди прочей информации сведения о КОЛI1'1е
стве ЦИЛI1НДРОВ, rоловок и секторов (CHS) ваше!'о диска, как показано
lIа рис. 1.2.
Затем перезаrрузитесъ спервшо KOM!laKT-Jll\ска (Ctrl+All+Del) и в ответ
на приrлаmение ззrрузt[ика введите I'еометрию дискз:
boot: linllx hda=C.H,S
!'Де С количесТIЮ ЦIIJПШДРОВ, Н КОЛИ'lеС1'ВО !'оловок и S КОПllче
СТБО секторов.
r>
('..,I\.!'C np;ll&l«!i в...д :ыф.ni,,!iщl'1'IIA.. 'i1c.м\:u:I\,
.J"''''\.H ....." ."
'+Х
Рис ., .2. ИНФОРМ<1ЦИЯ () ,-еометрии ДИGК8
69
LlNUX полное рУКО80ДСТВО
в нашем случае строка заrрузки Linux будет выrлядеть так:
liuux hdа24ЗВ.255.63
Теперь ИНСТaJlЛнтор будет руководствоваться этими параметрами вместо
Toro, чтобы пытаться определять rеометрию диска самостоятельио.
IIIJ ' 11Ы;':i:f:'i1П[ iI
Не следует пыtaТЬСЯ оnредеl1ЯТЬ rеQмеrpю ДИСка с ПОМОЩЬЮ BIOS. так как способы
. оnредвления CHS у ОС Unux и BIOS отличаются, и вы можете УКВ3аТЬ неf1равилЫfYlO
. информацию. Для определения СНЗ нужно использовать ТолькО fdlsk!
Если вы поспешили 11 уже установили Fedora Core 2, в результате чеrо
наша \VindO\vs ХР перестаяа заrpУJКаться, обратитесь к сайту Red Hat.
По адресу h[tp, / /www.redhat.com/archi ves/ fedoradevel.ligt /
2004 "Иву /msg00908 .Iltml ВЫ C"!OJКeTe прочитать рекомендаuии по
решению проблемы заrрузки Fedora + ХР.
. Особенности и преимущества процесса устаноlllOl Fedora COf'e 4
СоБСТI\СlIlIО особенностей то иикаких и нет I>ce стандартно. А среди
преимуществ, на которыс упирают ДaJКe сами разработчики это Ha
яичие подробllеfiшеrо PYKoBoДCТRa по установке Fedora Core 4.
1.3.3. УстаНОвка заrрузчика
На одном из этапов установки (в не)\'оторых дистрцб}'1'ИВах блщке к Jlа
чзлу, в друrиx к: концу) nроrpam!ll"цНСТаллятор ПО311Wntт вам выбра.ть
и установить зarpуз'П!к. Стандартными заrpузчикамп Linux СЛyJКат шо
(ит,х LOader) ИЛИ GRUB (аЛ(шd Unifie4 800110a4er). Сейчас я не буду
описывать ДОСТOIшства и неЩIЩ'/!.'!'1W ЭТИХ ЗЗl'РУЭЧдКОв, а только скажу,
что я бы выбрал LILO: он ,,!Не б9ЛЬше нравится. Пощм вы сможете t:Me
нить заrРУЗ'lИК в любой удоБЦl!!ЙМЯ вас момент. ПРOI'рамма устано)!ки
спросит вас, куда установитьзаrpу:i'П!К:
. В MBR (Ma:iter BOQI Record fлаlЩав заrруэочRая: запись);
. В первый сектор раздела LinиХ;
. Нс устаНЗIIJIивать зarpУЗЧIJХ вообще.
Если вы не n.ланируе1:е зarpУJlUlть Linих посторонним заrpузчиком, напри
мер. заrpузчиком Window NТ NТLoader, то устанавливайте заrpуз'lИК в
МВК В этом случае зnrpУЗЧI!К получит управление сразу после зarРУЗКJI
КОМllьютера, 11 вы CMOJКeтe выбрать любую из установленных на вашем
КОМl1ьютере операционных систем.
70
rЛ8ва 1. Установка операционной системы
Fedora
.."...,..,..,...,.....,...,.... ,...........,.,.,...,....,'""..... .
Настройка
начanьноrо
заrРУЗЧИК8
nQ'.I'af';......t'l1o\1Q
YCf/l..aaпlolН;tltt:A .r-popОЦо1I;
r;'Il1€rpalJМОННОЙ Ct\'CfflWbl
GRUB. Еспlol вы 1'1" X(1)1'111'
Y'D.HIII)Jt.....tf, GRUB,
НП.""IIiI'* lI;иоntу CJ88tf'lt....
:NIfJI'(3....8\:.
Вы Ьжеl'е r8!:ЖО BaTb,
J:aa:6J1 ос (iIЮJI'И V МCl i'l1I:
11еOtСi1lьцr) j:lOrl.tю
1I.I'Ifружа'-ься 110 YMOJl"lBHI'NO.
nOl:!'It1. 0'\11<811;''( ПО j :
тш_,"..___,__. ..............,,..'.......'M
ClCP.n.:, I ::.. I 'iI! J
3u'ct\G_:'IIiЮЩIf!i.. jQмla!IIТIt'"irрv)ЧOIt:j
l1w..tt.:''r.:wpy.
'I/,З,QtII.D"'ра1'.
OI'I4IPIЦ,I:r, IUсn...:Мrm-.. il;llS;l.
Д[II5".J.;д,J.п)"QOНИV;ООI:*:f, ,нпора"1'8 .
ШI!.8J."'!'Мl(t'I;..i:V
.JlDkIrin'\..,"'f1ooc. -па..-уа iю
j'',.f.:'.П!I9амOJ1i'п,оidДltt!
t,,QC;., ..' ", ' .
In01:YQtJ
{t! F-I!dor.1С NalGIOIJpOOII.. 1t,1o-
.ц."1on1>
.}!,DIIМJ
пм.mj,yr...tiJ"f1W'lll
MR.!'It. Д"",-hэй)lQ
I;)lIO:rllNilpWlV!:'4МOtMr,".
DI.(ot.;:istPJ3'01OК1I J И:)(';1"'t, rt-l""" I
ОН8IIfр:r.ItDIWI"""РРЧКЦ
L:.! =J
Р"'с. 1.3. Выбор звrрузчика
Если 8&1 nла}щруете заrружать ЫПtlХЩ>уп<м заrpузчиком, выберите уста.
tlO81{y заrрузчика в раздел жесткоro ДИСl{а.
Последний вариант Не устанаВЛlшать З31'рузчик следует использо.
вать, если ВЫ Хотите заrружать Ыпих с дискеты.
1.3.4. Продолжение установки
Выберите класс установки (рис. 1.4).
Кллсс «Персональный компьютер» подойдет для на'lИнающих пользо
вателей. Будут установлены: rрафический интерфейс, очень ПОХОЖИЙ на
ПРИ8ЫЧНЫЙ рабочий стол ОС Windows, н nporpaмMbI, необходимые ДЛЯ
домашнеrо использования компьютера или дЛЯ ортанизации домашнею
офнса. Этот набор HporpaMMHoro обеспечения будет занимать около 1.5
rбайт на жестком диске, а если вы установите сразу две оконных среды
(GNOME и KDE), то такой вариант заЙмет около 1.8 rбайт.
Класс "Рабочая станция» подоЙдет, если вы П.1lаю<руете использовать
свой компьютер 8 локальноЙ сети Imи для разработки nporpaMMHoro обе-
спечения. Класс "Рабочая станция» заннмает около 2 rбайт на жестком
71
LINUX: полное РУКОВОДС1'ВО
Fedora'
Тип установки
ВblБЩWlIТl'tff)'С:J!Нfl'Шl(",
O::OICPIolIOt H81'6at!1t1\' пcIl1!'1а
cQt:lf&ett$V.j!. /!.АШt.I
flOlpCfjOCTIt'"
УсrЗНОk8 УЮ'l'нож:иt маа
роНес ro.llHyкJ
нфаЦl"IQ на 8ыбp&;'lНbfХ
рзЭiДo:tЛ8Х.
An "'''У''$миа б(Jotlе
nIJдJ'.>\/бноlOirlНф(фt(щ»'!i'l:U
рз:!I.ЛИ'l'RJ; weJICtly "l1aC(';fIUW
Yt:J3>fOt H'I'Irn"Ao
доуwеlНRШotIII
,
i
I
I ''''' I
ir.i ёtЬкУ J
Автоматическое
раэБИl>ние
ABr(>I'IP\''leaall KI'HIR
nМ80Л.Н fI.II.'"
tонтролроsaТЬПра
1'J}lIlIOH"' Aal<kl;,ll ВRШ
СИСТI'IЫ. eCJ1 YJI':lInw"e
5)'1\"1 IIIIII"H. .ОСТ!:!.
'nll УАЗl1енl'!ioI tO'II)O(O
pa3n-/lt!СI/!о Llrщ)( !р.азсеnОIl.
CCJ)ADHNb'X лр" npc.c.L!4AY
YNaHOl!ol<e I!JlCJ, I!IoIo6ер.ите
Yдan,,",,"lceUnut. [
1 "
Чrобыv.tlаnl'!rll>puде.nVl . \'.
;-.fI,IiI.I.I,,,,,,,,.жt\l.х""I\."(:I"м........
i. : _. t (i'i\J:_
I
I
I
-'-;;',}:: р .' , _", "" """!Н';'"
": ,;'ма.oIf,АII\ЩIOI.I,WI ..
9:',:.:! ,':i,"'.IIIIU,""':I'
,.': :/,..,._"'I,IOI.,
"'м..
.",?'-',-:' ',,",-----,.,"---.,
::= 'fr8'QOT_;
!JaI18IIqтj"nOllw::t1IOI!tOIO...'IOI'" .
,-,","....,-,."",,.,.._..".
a
,,,,,,",,, '
:_, ;)'_'_ .Щ1.qj1J;IV...r
"'""tJllll"lPn,;,.";,,,:fu:_.icr)'f
pt1I-тI.,..с..:,.,j."'I'
eh1О..yc-t1N6,,,,,..:rplID\I\tIJII'.I/"'I"",
",-,."
I 4,
I ,,-,-
',_ ,-о. '.
. -;.,'
itliJ1f "" , , __'__,'__,'
_t. ..\W,,\"IIIП,,IOI.ioI'j:n._
!""yФ-iIiC8«,,,.J_6mt.u.,.."'ItoI.,,"oeJooo!I
> 1 ...u.... 1
1 ....ц.... 1
Рис. 1.4. Выбор /(/Jэсса установки
n::'ycпllН08:jI,
..i ,: _:,цoII.I!oЭoI',Ii!I!'Р!А-':,'::'-'
(м6у_':,l)itllCf(lШi:С"ТII:
:.Ща...1""ОШрм4М.w.a:
j
j
. -- "'-',
$i'.-':UМa.1_'
q"',..ЩJ.'IJi!.-оwe1
O,CCIII:JI'l'iIII,,__npoMP1
',',<
i
I"n:itW:).)ЩI>QIIDМ,-.l'iItt'Q-1-'tм111
j '.""0"''"''' М!,> V'.'I'''-'М!':-. vм..Щ' V'II S
I.щ.....
, : ==]
I ...u.. I LI"J '''N j
72
РИс. 1.5. Уточнение пара метров 8втомаТическоrо разбиения
rпав.а 1, Установка операционно сиотемы
дисltс, 8 <:CЩi)JЫ ХQ."!:!J'I'ljуСтаНОJl!fu.данEЩi!cltJIасс с !lоз!\lОЖНОСТЬЮ выбора
rрафической среды (KDE ИЛИ GNОМЕ),'Ю такойаарnаm займет около
23 rбайт.
Класс «Сервер» нужно использовать, если вы хотите устаноаить и настро-
IlТb сервер на основе ОС Linux. Будет установлено все неоБХОдИмое для
ОРI'анизации сервера nporpaMMHoe обеспечение. rрафический интерфейс
110 умолчанию не устанавливается. Минимальный размер установки
J 3 rбайт и еще около 900 Мбайт, если rpафический интерфейс вам все-
таки нужен.
Я рекомендую вам выбрать класс установки «Выборочная", даже если
вы начинающий IIОЛЬзователь. Этот класс по.зволяет более rибко на-
строить ващу систему еще на стадии установки, точно определить уста-
навливаемые паКеТЫ и их размер.
После выбора К1lacca установки проrрамма пошrтересуется, как вы будете
разбивать жесткий диск: авТОмашчески или С Ilспользованисм nporpaMMbI
Disk Druid. Если вы сомиеваетесь выберrlТе автоматическое создание
разделов.
При выборе автоматическоrо разбиения nporpaMMa попрос,1Т вас уточ-
нить параметры разбиения;
. Удалить все Liпux-разлелы (Remove аН Linux Partitions),
. Удалить нсе разделы (Remove аН Partitions).
. ОстзвllТЬ все разделы И пспользовать свободное Место (Кеер а11 par-
titions ).
В первом случае инсталлятор удалит вСе Liпux-разделы, если таКИе име-
ются на вашем диске. во втором будут удадены абсолютно нее разде-
лы, включая Wiпdоws-разделы. Последний вариант прелполаrает, что на
жестком диске Имеется неиспользуемое пространство (не относящееся ни
к одному IIЗ разделов). которое будет использоваться для установки.
Если ВЫ выберете возможность просмотра автоматически созданных раз-
делов, то следующий шаr установки вы сделаете С проrраммой разметки
ДlIска Disk Druid (pIiC. 1.6).
Кнопка Создать создает новый раздел. Для этоrо нужно освободить
пространство на жестком диске (именно пространство, Т.е. область жест-
Koro диска, не принадлежащую НИ одному из разделов, а не свободное
место).
для редактирования ш.раметров раздела предназначена функция Из-
меlIИТЬ. Она позволяет изменить точку монтирования раздела, ero тип и
размер. Если раздел уже был создан на диске, то nporpaMMa Disk Druid не
в состоянии изменить el'o размер. Для изменения размера нужно улалить
этот раздел и создать заново, но с друrими параметрамн.
73
UNUX: полное рУКОВОДСТВо.
fedora
,_.._.п....._...._M.._'__.,"_....,.-_,_,..;...-"'-.. '-0-, ;,_..o_-."o'.:.,,_o 0-: :" '-'0. __ _.__.__'-.-.'."'__ 'o-'/".-,'.-,,,,;,,, ;'o__.,. ....--.-.-.-,i;; +;:;;.,.,";,;..-,;";.;,;;.,;..-,'";O,;.",",,"""';.;,.;"';";",,',
НастройКв
разметки диска
1- 1.. .
1 '.\:..".....
' I ;'_ " ' '''''' ''
I .1 ,. ........,..ОсС,..:.;;... . ... ....
,
i,
.-f""" rP'JМWf\...VМ
"'\{
loglldQ}:
щvdOO
",.
S....6eJ)I'I'I'(t. k)'1I;8 IШ хоtloпе
усrано&ить Fecklrd. cote..
(;Сl1Иf!.blнеана"rе.J:З"
) nptoы..сr"'paJIмет..-уД"Uj}W!М 1 ;
! ММ мужна МО"сщь nCJ i
l' i
!
"'OnОnЬЭQlШjojlOi:lC
I'IHCTpyN!lfHtp"'JI ЦЛА
промден.МА разМеН.'"
lSp)"jo111O,oI:!p2l1.,re1:O 1{
ДО.У.ОНПWИИ.
,."
,
''''
IIll<t:;
J
trТ'"
ЕслО1 e.bIоы6рапи
!1 aIl10,,"iJTII'I'IIIQI;Oe разбlo!ll!!tI i
!:li\W'-,<;,...,fIo"'"W.QJ(ltt",,/) H.j..,
i l)!3.....,;,,,,II ,
i' j....)!tCffO'II-1I'I
f:it\4
........, "'"'
; ; 1 ' " . _<,<_,.,:,:,.-_ _' _"
OC;t::p",r_.)'Uf1,.R_MDt\"lZrImIl:QI;:'tJ.
е",Д
,
i
102 1;.-
E'
:;',-'-Щ';)
! <ltlu.. 1
lj ..
.
Рис. 1.6. ПроrраММ8 Disk Drиid
Для создания Liпuх-раздела на!о!RyЖllО удалить один из Wiпdоws-разле-
лов. Желательно удал>lТb тот, котор!>IЙ вы создали с помощью nporpaMMbl
Partilion Magic, поскольку он Не С(Щержит данных. После удаления раз-
дела на ero месте нужно создать ТРIl раздела:
1. Linux Native (файловая cиcтeмaext2 ют еxtЗ, точка монm:роВЗЮfя 1);
2. Linux Swap (точка монтировaJПIЯ не нужна);
3. Linux Native (файловая система ext2 шш ext3, точка МОНТllpования
/boтe .
В таблице 1.1 представлена рекомендуемая схема разбиения единствеи-
ною жесткою диска (/dev/rl<:Ja) для установки на ием двух ОС Linux
и Windows.
Далее проrрамма"lfНстаЛ1JЯТОР преДJlDЖИТ нам на,:троить сеть и бранд-
мауэр (рис. 1.7) эти шаrИ МОЖIIО пропустить, останив их настройку
на потом. Систему безопасности SELinux обязательно выключите или, в
крайнем случае. оставьте в режиме предупреждений II этом режиме
она не запрещает недопустимые с ее точки зрения действия rЮЛЬЗ0вателя,
а протоколирует их,
74
rЛ8В8 1. Установка операционной системы
C;'l(eмa разбиения диска /de-v Ihda
Таблица 1. 1
р""""" АктиВ- Т"пIФС Раэмвр, t'б koM"'E!H1'8pWA
'"""
flda1 да ПеРВИЧliыйj 1.5-2 ДЛSl самой Wjndows !ЮпЬ\.l.lе и нв НУЖ:нQ, f1рИJl()
(Дl1сt<С:) vf.t жения можно nоместиrь на диа O
На жестком ДИСКе может быть '18тыре ПерlН1Ч-
ных разДеЛа, AOnOJlHl1YeflbHble роэделы слвдует
В"" помещать 8 расшренный раздел. Некоторые
"М2 Расширенный ОС'38liJееся ОС (В частности, Windows} требуют, чтобы их
мвсто раздел был обязатеnЫ<lО перви...",ым и a!<nl8-
И;,itA. UrЩ мО)кет заrр'iП=-С как с аТИIlНt>lJ(,
ТОК и снеактивных раэдеЛОfl
tlda5 Ло;ичвскийj 2.SЗ ДЛя ,;орнееой ФаЙIlЩЮЙ системы Uпшс Нуме.
ею2 ИJlИ еxtЗ рlщt1я лоrичnс.:>tх раЭДеЛО6 нач.инаеrСА с 5!
Не Gl1I11AYI;)"f 2110Т ра..'"tдвл пOMel..Ц3Tb 9 tюt1tJц дис-
"<!аВ Unu)( swap 128-256 Мб ка, nQОJI:QЛI:rК)' операционная система испОflЬЭУ.
вт ero '" "ачесtВ8 рGЭДеllа rIОДК6.ЧКИ. МИниМaJ1Ь
ный размер дзнноrо раздела 32 Мб
hda7 лorиче(жий/ 5-10 ДЛя fJоJ1Ь3088Т81IЬСI(ИХ даННЫХ фцйпово
ext2 или еxtЗ системы jhame
hda& Лоrический/ Все ЭТО диск о: на Hl:!rO следует УСТI'fН<8.Вl1ивать
DCfi;J.!JWeeCQ
(диск О;) vfal место профамМы \lVindows
. fФG:НIlloll*УЗР o.. же 6,,1!)
H.JCOAMTCfII "'''ХА}! "IIJВ
ст.щWJ И I;:eTblO 1/1
йnpeдепЯ8Т.!I: OIrИII
pet;:ypCAM!lВW&rc
ICОlМпыотора у.цаJleнныА
rщnьs.oаа-rl!!nЬ а cett! .oe'"
ИМI!!ТЬ .о.ОС1уп. FpBMOfMO
"BcтpoeHM\oi 6ра1'tдмауэр
CМIlIoКO n<НIl>IШ4еf
6еа!)11ас:;1ОС"Н. .RlUe
C::1/I8!o1"'.
. Выбер,пl!! nOДJ(ОДRЩИ 11111\ .
i i
",.,и.UrtnII""'......,_I'"
[a",. . [ @!!c .
. Р":t.Qi_фР "JФммQ..Iitpll.1''f,:!I"'"*,,II;NJcf1"'"
Of8I*iЖW1I'16'\'_Вii"dp.allAll.O'l"wp?
'-РIifJi
.,! "c )
. ...Т.IW:I'ODIGI&1..ерl>Wiliyatt'N_JtДО;ЧПI
";,';,q:I....lt!tp-юt",*,!)rlll«\lo,Ol".Q'_rtrtlpDljЫ
T, K._,",-СОРIJolllU""ЖfJoдщry,lI
Yдa,*I" PG!1. (.SSl1j
О Веб--<:9jЭ&ВР IНТТР. НТYPS)
О Пер"''I,а Ф-МIIМ (rfpJo
О n""'f/)ll С/!!!IЩ' (SMJ'F')
. tlfМi:(УJlrl__Б-ш-I':1'II!01iclJ:r,
ута....n'f..ю,lj...fIiLifмl:с:Т..u.
...tltt;iЦSollt>J...о...Ift!/К-,"«-II,"
.,oi:'*'rII,у...т.."IJ,,'ЩIд.QllII"«I
dw-r.;1iIIp,.fIИIОlj':"nal.СQr::1.0'I,
1#1fO'IИ"LInшt?,. "....'.... ]
,...
i"';;; I
f .i!J
Рис. f. 7. Настройка безопасности
75
LINUX: полное рУКОВОДСТВО
Вы также можете выбрать дополнительные языки, установить дату и Bpe
мя и ввести пароль суперпользователя (Iюльзователя root). Задаваемый
пароЛl, должек бьrrь не короче 8 сю.mолов. При вводе символы Не будут
отображаться на экране. Катеl"{)рнчески не рекомендуется использовать
в качестве пароля что-то вроде 123456, q\verty, password и тому подобное.
Подумайте о выборе пароля: он должен быть одновременно леrким для
запомннания и трудным для подбора. Осторожно! Забыв этот пароль, вы
Не сможете Iшстраивать систему.
По<:roЯIIНО работать под учетной записью roO! катеrорически не рекомен-
дуется <fЗ соображений безоnaСНОCnI вы можете нечаянно разнести всю
систему. По.этому ИУЖ!fО добавить хотя бы одною неllривилсrированноrо
пользователя, которыЙ будет ВЫЦOJ1IП\ТЬ повседневиые задачи (набор теК-
ста, просмотр видео, проrрам>'щрщщиис), даже если этим единственным
пользователем будете вы сами. Учетную запись ЮО! нужно использовать
только для настройки системы.
Тенерь нужно выбрать пакеты прщрамм для установки (рис. 1.8). Если
вы хотите выбрать пакеты само.,.оя:rельно, установите переКJlючатель
((Уточнить наборы».
1;
Установка
пакетов по
умопчанию
! , ! ПpQтр,аМfoI8 установки
ВВtО!ll81И<l6Сk"М ПQдбереr
j'pYnnbl nnt:etOB, l(oTCPble
,
буду.,. ycral<oeneHbl 8 систеW;6.!
J: I
1, ' ,, : . 8Ь!бвРИТEt ПРИНА,.. теКУЩИЙ [1
СПМС:СС пa«eTOIII, ",тodы !
!! ПРОIlОnЖИП, ус,анов,:у м I
,: устаНО8ИТь то. чтс> !
i! предnа.rовТI;:Я п., умоftчаtiИЮ j>:
,. Выбори.. Уточн," набор i[
i' YC.....B..: j
[ , f !.:';_ f'[t; =l
76
.:"'.
-:,\"'Vd}
'МrII Й
=.. .
С!>;,,)1.ПО .' :
С'-"ТfI.рowт,,а
f1осn.ynПrtlOlfli'_JТ."l.нtllOЩ(l'ЫIllr:ry:__б\1tr_i::
..д...уд-,,",",...,.r''''f''''1'У'
ЕсItИ1W11:'t..а.... _ . -. . _Щ"., .. .:':_",...
O'toiIblefЦ(eтw. 1fC)11)(W4I 'blJ'or)o!,.yor»'OI:ib.,t.,.;"
,,:otr.O;{f,ЦfllOJ1.!oIЫrcn>o.;t,ut;II. ЛМiJtifо' .
i:"tвЖ>/:Iltt!;! ФI!.Ж.QК,пo.'IOЖUl'>I ....же'
lQlWlr l'Iаl(ет.Щl\1OnЦiWJoIС
О Y.1rb 1oU1l'iCPbl VcT8n04blx !tEIl;eTQjI
... 1 ",.11..... 1
il в. J
РИс. 1.8. Выбор rpyпп пЭКt;!ТОВ
rлаоа 1 , УстаНО8ка операционной CiIICTeMbI
При индивидуальном выоре пщ-Ф:ов будьте вн!!м<\'I'eльны; некоторые из
III\Х для своей работы уют UaJЩ'IИJI ilPуrихЩIМТОП ЭТО называется
завИСИМОЩЫО пакетов.Ec.nnЗТо первая в 1!3П1ей1ЗНИ рановка Jipux, не
JIСПQЛЬЗуЩевозмоЖ\loqЪ'i!ндивпдуальнРro вЬiW}Щпакетов; nppcтo выберите
113 спискакаreroр\щ nporpaмм,lWl'Opble вас интереi::уюr. После этоro ocraнется
l!eMfloro подождать, ПОКIIll!lcralIJlИрyюrcя выбрaюlЬtе вами naКе1Ъ1.
ОбязатеJlЫ!Q создаЙте заrрузочную дискету. E вы в очередной раз
переустащ:щнте ос Windows, Щlа поместит в МВR собственный. заrpуз-
'11\К. который и не подумаet заrружать вашу ОЦLiпuх. В таком случае
заl'рузитесь С зarpузочной ЩfСКеты, зареrИСТРllРУЙтесь как пользователь
root и ВвСдUтeКОl4аяду grцЬ(или 1.110, еCJIИ 8Ы используете ULO).
Для созцанняэаrрузочноro диска вам понадобится одна отформатиро-
ванная дискета.
Я Рelюменлую использовать rpафичеСКIIЙ вход В систему: при этом сщ;те'
ма Х Window (rpафический интерфейс) будет ЗaJ1JужаIЪСЯ автомаТllчески.
и вам не нужно булет запускать ее командой Бёаrtх.
Все, устанопка завсршена. Изплеките компакт-диск из привода И перс-
3:Irрузите компьютер.
Заrрузчик предложит вам список установленных у вас операционных
систем, ВыбеРllте из несо Linux. Если у вас двухпроцессор"ая маШlша,
ТО следует выбрать пункт не Linux, а Linux-smp это SМР-ядро, пол
деРЖlIваюшее несколько процессоров.
1.4. Особенности установки Mandrake 10.0
Относительно недавно вышла версия 10.1 этоrо замечательною лис-
трибутипа. В ее состав вошли средства для работы с WiFi и Bluetooth-
устройствами, драйверы для ноутбукоп !ntel Centrino (на этой nлатформс
IIРОIl3ВОДИТСЯ большая часть ноутбуков). Что же касае1'СЯ nporpaMMHoro
обеспечения, входяшеrо в дистрибутив, то в нем вы найдете:
. Ялро версии 2.6.8.
. Новые версии rрафнческих интерфейсов KDE 3,2.3 11 GNOME 2.6.
. Компилятор gcc версии 3.4.1.
. Web-серНер АрасЬе версии 2.0.50 и интерпретатор РНР 4.3.К
. СУБД MySQL версии 4.0.18.
. Новую версию IlOпулярноrо офисноrо пакета OpenOffice 1.1.3.
Заrрузите с компакТ"диска проrpамму-инсталлятор. Косда появится экран
Нрltветствия, вы можете нажать < Ввод> для начала установки В обыч-
ном режиме или <Fl> для выбора из списка дополнительных режимов
(РИС. 1.9).
77
LINUX: полное РУКОВОДСТВО
Рис. 1.9. Дополнительные режимы установки
Эти режимы включают:
. vgalo если у вас слабенькая видеоnлата и вам нужно лроизвести
установку системы при разрешении 640х480 (16 цветов);
. text если вы хотите, чтобы пршрамма установки работала в TeK
стовом режиме;
. linux самая обыкновенная устаnовка;
. ехреп реЖIiМ эксперта (вы ДОлжны хорошо разбирюъся в «железе",
чтобы устанаштиватъ систему в этом режиме);
. rescue если вы хотите восстановить уже установленную снстему.
Вы также можете ввести дополнительные параметры, например,
11.Пi,lХ тет=512М
После нажатия Enter будет запущена проrрамма установки в нормальном
rрафическом режиме, и система будет' знать, что у вас у<-'тановлено 512
Мб оперативной памяти.
В отличие от предыдущей версии Linux MancJ,-аkе, выбор класса установки
ш'раничен двумя пунктами:
. Установка (11\5\a11)
. Обнш!Лсние (Upgrade),
Есл!! у вас установлен Linux Mandrake псрсни 8.1 или вы1е,, вы можете
ero обновнть до версии 10.0. Если же у вас установлена версия Mandrake
древнее 8,1 или вообще друrой дистрибутив, нужио выбрать пункт «YCTa
HOBKa}.
При "ыборе пункта "Установка» старая версия ипих Mandrakc. если она
была у вас устаН()1ЩСН3. булет уничтожена. В то же время, если вы хоппе
78
rпaвa 1, Установка операционной системы
<,........,""."",-....
L*Mandrake!inux 10 () Off J O,;lll1slallot!oo
W!),"tI...1an
...........
.tx-т.
. SCUrIY
.PJWt
..'IJ'''''-n
Sfм-m18'!
. ...........
.Ad:latistt
.'II1ILf
6&tmmwy
.tМЫt;pCilll1J6
. E'JlI.lм;'I'l.!I
..........,..........,..........,....,.,.."...............ш..,,,. ш............,........."""""'"........,.,...
'.rp -;;;t!!I\8 "; -ёi'mtу '''''''о,оо,.,''"'._,,,,,,,.._..o.__,;;;O.'"--"';."
. 1 ' 51AМ1ЖI, -Т" It I' S-1:ar.:IJO:I .ОС'l.11у 'O<'''" 1"", cII"lhМ wjn 1>8 t<t<ICI (О 1"
C:QlltlllC lаlrlаlnlenчll н I (}tml. l
Iн;g. """"...1Il/rRIdy .om. rI;:!iQl1t. Ihcteal(l(:IIЩI111: (;11«:0:$ ,,",IIIII"'Qry n(pltl.. i"
Iн;n..; Wi:lrttlllJ ЦC1,J11Iy lev4l, 1J'r4ШО Cf!Т\IS 'III"'.,I" ,....., b1!:cm.. a 1h11! I
мclrrtr 1.,...Ngh iIIf>O'lQl'> 'о 11" l!nJ sylctll'll iI'.'WYllrlolot!lcllr:i:n .1WIIIVIC11!n1
' .1 : 11ОП1 m.ny 1111t1nt6. НQ(II' rOutttlllC!\N It .CIIII (a"lu..lnjI'QIIIr>.-.к.П:.I
,tI\O!)5eo'"'III.
. - .. - .
......._.."............................._. ....."..o"."."..o........""."..
..::..,. .' : '-;;"< :.;.,;.."" ,. " , Т"":::',; ; ::-::, й :;:]i х
. .'\fii.4I1\' б.or.- dltN'
Рис. 1.10. Выбор уровня безопвсносrn
измеюiТЬ разбиение диска или тип файловоЙ системы Linux, вам нужно
!Iыбрать IIMeHHo этот пункт.
После выбора раскладки клавиатуры инсталлятор Linux Mandrake (KO
торый. кстати, называется DrakeX) предложит вам установить уровень
безопасности, Помните, чем выше уровень безопасности, тем неудобнес
работать в системе пользователю. Для домзщней машины (на которой
вы будете экспериментировать) подойдет средний уровень, а для сервера
сетИ не IIIIШНИМ будет и повышеиныЙ. Не устаН3ВЛlmайте параноидальныЙ
уровень безопасности при установке системы: вам потом будет трудно ее
настроить. Данный уровень подойдет для систем, относящихся к классу
.поставил и забыл»: проrpаммных маршрутизаторов или шлюзов, адми
НlIстрирование которых не выполняется или выполняется очень редко.
Обычно такие системы таятся rденибудь в уrлу серверноЙ комнаты и
работают круrлосyrочно, например, передавая пакеты из одной локаль
иоЙ сети в друryю.
Вы сможете полностью Irастроить систему, не дожидаясь для этоrо пере
заrрузки (рис. 1.9). Настройке поддаются:
. Раскладка клавиатуры (Keyboard)
. Страна (COun1rylRegion)
. . ЧасовоЙ пояс (Timezone)
79
UNUX: попноерУКDзодс.I'!Ш
. Тип мыши (Mouse)
. Тип принтера (Printer)
. Тип звукооой платы (SoundCi!fd)
. Параметры: видео подсиСТ\:мы (Graphical interface)
. Параметры сет (Network) , ' ,
. Уровень бе:юпаС!10СТИ (Security level)
. Параметры брандмауэра (Firewall)
. Заrружаемые сервисы (Service)
. Конфиrурация начальноroзщрузчика Liпux (Вootloader)
. Параметры дрyrиx устройств, лапример, ISDN-nлатыllЛИ ТV--тюнера.
Обычно ИIIСТаллятор правильно определяет параметры видеосистемы
вашеrо компьютера, но в lIeKoTOpЬl1' ФiучаRX нужно уточнить тип вашей
видеокарты. ее мопель, тип монитора. Обязаreльно нажмите кнопку Пр
верить для проверки выбраНJ/оrовидеорежима.
Если "ы ХОТlIте запускать C<lcтeMY Х Window аuтоматически при заrpУ3l<е
Linux, lIаЖМИте кнопку Параметр.,а,(Орtiопs). Если же ваша система будет
использоваться в качестве серВёрз, аВтоматическая заrрузка Х Window
не нужна.
В пара метрах сети Ubl можете попросить инсталлятор автоматически
распознать ваши сетевые параметры, если это возмож!lO. Если же он не
(Jt-Mttndrakelinux 10 О Qf/IC"I(1} ft\ ')I!(.tQn
Syf1I!O'r1"IIH;J;\iQI'J
.liI!'9'og"
.O!tII<.
. SIICII'IIy
. P..ml(lt!!nv
.1M1nТi't'Тit
SУ51-п I:MIIg1lIiIiМ
. МoaIptIIUl1I/m!
. kEllIlJ''='
. '''!il bQcIJOII<1",
. $1,",11111'"
. J.n:l!;lltjp:fd!5
. ..nlt\wr
80
= .:O
i'
l'
:::::',:, 00.0
"1'--. .SiШdс'-Yiл f ffll"-М#'{
1:
, i.1ri1а!'ФIdiIfС:..-.-:,:
j"Im-emit.
11 NetWt'JIk._
'uж,
. StI):UriI, иwd зW:idmU
Рис. 1. 11. Настройка параметров системы
rl1ЗВЗ 1. VС1"анозка операционной системы
определил параметры вашей сетевой платы ИЛИ модема автоматически,
попробуйте настроить эти сетевые устройства в режиме эксперта. при
этом вам нужно знать СJlедующие пара метры:
. YPaдpec этоrо комttьюrера и ero имя, J({Iтopoe должно БЫТЬnpoШIСано
на серпере DNS эту информацию вы можете yrочнить у адмлнн'
еуратора вашей сепt;
. IPaдpec ПDUOза;
. IPaдpec сервера DNS.
Инсталлятор позволяет настроить традиционное соедииение по модему,
по локальной сепt, ISDN/АDSL-соединения и даже выделенное соеди
нение.
Наконец, вы сможете даже заияться администрированием системы пря
МО в процессе устаИОRКИ (рис_ 1.12), отключив не нужные пока сервисы,
чтобы система заrружалась быс-rрее.
Bы не знаете, что именно СТОИТ отключить? Думаю, в ,TOM 113М поможет
таблипа 1.3 (см. п. 1.9).
Откажитесь от автоматическоrо обновления системы, 11 установка за'
вершена. Нажав кнопку доцолlIитеJlыI,, Bbl можете создать ДИскету ДJtИ
клонирования Linux. Эта дцскеl'а может понадобиться, если у вас есть
<""*Маndrзkеlinuх 10 О Oliiciallos!tJllaI101\
t!rSЦlm1,.,.t$I)II: l «I
.LIII'9I.
a1..bм8"
.k1m:tty
. f' WiaM 9
.11'Iclflr.tem
fI'm-.Q('If>QU\1)I'I
. ..
.1iФ': ..
.II!8I:IIII.DaI1.1OA!er
ol,
. (мi'4 upfllDI
.Мllmllil
:
I ...........
Il:Y"::
I Jtm'8N:
hll'Yk'!1М
,'IIJ'hUllk1,I&".aitiwlX,_:". о..
i7 :2:=...:"'=, :;;;':_'"':"':"("'>-";: ::Z Z;::'""C"'\ _"
: Wвcm!III!;1'IQQ-llU!!J;ltiII."",tlUllcm;
)j,:.,
,...
11m."
tmi'lllg
mill
""FII..s:tц'ШI'9
....
1\J!J1U1:
I '1>- RemoIJtNlм.t_1CIn
, -.
It- p (,i zJ
Q
"
о
"
о
"
"
'"
'"
'"
"
'"
.
j ;
t\;;'''t"nфt":':
I _" I
, ]
.. -..""
, ,t;L
Рис. 1.12. Выбор служб, запускаемых при заrpузкв системы
81
LINUX: попное рУКОВОДСТВО
несколько Одl!НЗКОIIЫХ коmьютеРОIl, на Jюторые нужно установить Linux.
Я же рекомендую создать "лу диCJ«:ry, даже если у вас JlCero ОДИН КОМIlЬю"
тер дискета для клонированнясущественно облеrчит переустановку
СИстеМЫ на этом компьютере. KO!!HO, вы не будете переустанавливать
Linux так же часто, ка" Window, 8911;1'0 ero знает'?
Чтобы использовать дискету клонирования, З3rрузитесь с neplloro СО,
Korдa УlIlIдите приветствие nporpaWdbl устаНОIlКИ, нажмите <Fl> и 811е"
дите defcfg="floppy',
1.5. проблемы при установке
1.5.1. КонфпиктыFеdоrа Core 1 и 2
с различным оборудованием
МатеРИНСlt:llе ппаты ASUS
На матерllJlСКУЮ плату ASUS сер$ Р4Р800 Fedora Core 2 Не ycтaJla8
ливается. Пока данная проблема .пе решена. Остается сменить либо
материнскую плату, либо дистрибутив. Следить за ходом устранения
ошибки можно по адресу https.,t.X:j1gil1.a, r""dh"lt. com/bugzi11a/
showbug.cgi?id=121819. . .
LСD'МQlIИТОРЫ
На некоторых LCD-МQниторах не удается запустfJТЬ протрамму устанав"
ки в rрафическом режиме. В этом случае в ответ на приrлашение Ьооl
введите параметр поСЬ:
linux посЬ
НоутбукиSОNV
На некоторых моделях ноут6уков SONY VAJO возникают проблемы с
уcrаllОIlКОЙ Fedora Core 2, решить которые поможет параметр ядра:
linux pcioff idel=Ox180,Ox386
Не работает МblЩЬ
В процессе установки Fedora Соте 2 обыкновенные СОМмыши (по
следовательные) не работают. Они начнут работать носле завершения
установки, а Пока l)бходитесь клавиатурой или подключите PS/2Mbl]llb.
82
rлвва 1. Установка операционной системы
1.5.2. Fedora Core: неудается войти в систему
квк root в rрафическом режиме
Включена система безопасности SELinux. При установке некоторым
файлам в домаШНем катаЛО1'е root назначается ошибочнh!Й контекст без-
опасности. для иcnравлеиияэтой ошибочки зареrистрируЙ'l'eСЬ в консоли
как 1'001 и введите команду:
setfiles /etc/secority I selinux/ fi lecontexts /root
1.5.3. Ошибка Signal11
Возникает при сбое шины памяти вашею компьютера. Это может про-
изоЙти, если ваше аппаратное обеспечение не поддерживается Linux или
драйвер для ЭТО1'О аппаратно1'О обеспечения работает некорректно. Спи-
сок поддерживаемых аппаратных средств находится 110 l!Дpt:cy http: I f
Ьш)zillа. redhat .comfhwc.crt. а по адресу ht tp: f fwww .bitwizard.
<й f s.igll вы сможете более подробно прочитать об ошибке Signalll.
1.5.4. Не определяется мышь
Если nporpaMMa устанощщ не СМО1'ла определить МhIШЬ. вы увидите со-
ответствующее сообщение. При этом вам будет предложено ПРОД01lжить
установку в текстовом режиме, который не требует мыши. Проверьте,
работает JШ МЫШh вообще (на IIpY1'oM компьютере).
1.5.5. Проблемы с переходом в rрафический режим
Проrpамма установки Linux работает в rрафическом режиме. Если у вас
стара!! впдеокарт!,\, не поддерживающая разрещения 800хБОО, или старыЙ
монитор, вам придется запускать инсталлятор в режиме с низким разре-
шеиием. В ответ на приrлашение boot: введите lOW1"eS npo1'paMMa
установки будет использовать разрещение 64Ох480.
1.5.6. Проблемы при З<lrрузке
ос Linux может использовать разделы. которые расположеиы дальше
1024-1'0 цилиндра, но не может Зal'Ружаться с таких разделов. Поэтому,
если вы не можете создать Liпux-раздел «ближе» к началу диска, создайте
небольшоЙ раздед для ТОЧКИ монтирования fboot (не более 100 МБ),
который нужно разместить до 1024-1'0 цилиндра. ВтороЙ вариант за-
rрузка С дискеты.
83
L'N\JX: полное рУКОВОДСТВО
1.5.7. Проблемы с rрафическим экраном эаrрузчикв
1. GRUB: отредактируйте файл /boot/grubIgrub.conf. закоммен'
тироаав строку spl3Jjhimage.
2. L/l.O: отредактируйте файл letc f1 i 10. conf, удаЛlfD строку
mcsage=/boOtlтessage. Измеие!UlЯ вступят в силу после введениЯ
команды 1 i 10.
1.5.8. Не заrружается система Х Wiпdоw
Зареr'истрируйтесь в системе и 88Jl.1. команду startx. Если нри за
пуске Х Window ВОЗНIIIU1а оши(iitа, заПУСТllте конфиrуратор системы
Х Wiп(lоw.
1.5.9. Я забыл парап. пользоваТеля root
Бывает... Перезаl1>узите компьютер !II! строке приrлашения заrрузчика
1;10 ВАелнте lin\lx single. Булет заПУlllеf! ОJlнопользовательский режим. Для
IПменсния парОilЯ введите команду passwd root.
1.5.10. у меня больще рператианой памяти!
Иноrда Linnx не может точно определить объем оперативной намяти.
Например. у вас устаиовлено 12В Мбзйт, а Linux ВlЩит только 64. Для
ИСllраплеlШЯ }Тоrо 8 фаЙл /etc/lilo.conf допишите строку:
в [)ре:п\J"" "тет=.128М,"
Для '1'01'0, чтобы изменения В<''ТУПlfЛи в силу, введите комаиду 1 1.10.
1 ,5.11. Не работвют принтер или звуковая плата
в более ранних верСIIЯХ Red Hat Linux настройка принтера происходила
при уставовке операционной системы. Теперь притер 11 звуковую плату
нужво КОНфИf'урировать отдельно. В Red На! Linux для этоro служат rpa.
фические конфиrураторы redbat"f:OIJfig-рriпtеr и sDdc:onfig COOTBeTCTBeH
НО. В Fedora Core system-eonflg-printer и system-\:onfig-soundcard.
1.6. Как удалить Linux
л юбоЙ дистрибутив Linux удаляется 1< лва этапа:
1. Удаление зarруз'!ика Linux. Проще BCero восстановить ориrинальный
заrру:з'шк Windows 98, ввеля команду fdisk Imbr " командной строке
84
rлвsа 1. Уотановка операЦИОННОй системы
Windows. Если у вас Windows 2000/ХР. восстановить ориrинальныЙ
заrpУЗЧllК nOMoryr команды fixbool и fixmbr именно в таком 00'
рядке. Удалнть заrрузчик LILO можно и с помошью самою LILO: за.
реrистрируЙтесь как пользователь roo! и введите команду 1 il0 п.
2. С помощью проrраммы установки Linux удалите разделы Linux. Для
этоro выберите тип установки "У,;тановка» (lnslall). затем выберите
ручное разбиеЮlе диска, удаЛJпе Liпux'разделы, сохраните таблицу
разделов и перезаrрузю'е машину. Нажав Reset.
1 .7. Системы с ДВОЙНОЙ заrрузкой
Прежде чем у(,"Танавливать на своем компьютере вторую оперiЩИО/lНУЮ
си,"Тему, обязательно сделайте резервное копирование важных данных,
по'юму что процесс установки операционной системЫ включает в себя
переразбllеНllе жесткою диска на разделы И форматирование созданных
разделов. ПерераЗQиение Жесткоrо диска Необходимо, потому что Linux 11
Windows используют разные фаЙЛОDые системы. Хотя существуют сред'
ства установки Linux в раздел FAT/FAT32 Lin4Win, но я не рекомендую
их использовать., т.к, в этом случае t.iпuх работает краЙне нестабилыю
11 медленно.
Рассмотрим два наиболее распространенных варианта установки He
скольких операциониых систем:
1. Вы устанаllЛинаете WindQws 9х и Linux.
2. Вы устанавливаете Windows NТ. Windows 9х и Linux.
1.7.1 . Установка Windows 9х и Linux
rланное правило при такой ycraHQBKe заключается D '{'ОМ, что сначала
следует УСТ<lнаВЛlшать Windows 9х, и только посде этоrо Linux. Дело в
том, что при YCTaHQBKe \Vindows 9х пере.la!ЩСЫвает шаиную зarpузочнуlO
запись МВR (Masta Boo/Record) и заrрузить Linux с диска вы уже не
сможете. При этом очень напрашивае-1"СЯ слеДУЮЩI!Й совет: создаЙте за'
l'рУЗОЧНУЮ дискету для Linux! Если вы в очередноЙ раз переустаНОВl!те
Windows, без этой дискеты заrpузить Linux не удастся.
Что делать, если вы переустаНОВИЛ1l Windows и Ипuх больше не заrру'
жается:
.. у вас есть заrpузочна>l дискета для Linux. Заrрузитесь, используя
эту дискету. Затем зареrистрируйтесь в системе как пользователь
rool и введите команду 1 :.10. Затем перезаl'рУЗИте машину (команда
reboot).
85
UNUX: полное рУКОВОДСТВО
. у Вас нет заrpузо'шой дискеты; используйте проrpамму loadlin ее
описание будет ПРlшедено ШlЖе.
. Нет зarpузочноro Дllcкa и нет ПpQrpаммы loadlin: lIереycraновиre lJnих
lIосле уcrановки Willdows, eeтecтneHHO. При установке ипих не фор-
матируйте разделы, и ваши даюlЫе оcrанутся неnоврежденными.
Оптимальным заrрузчиком при ДВIOIОЙ схеме установки (Windows 9х +
Linux) будет LILO. Я бы не реКОhit,\ндовал использование kaKllx-либо
посторонних заrpузчиков, как бы стабильно ОНИ IIИ работали. Во время
инсталляции ипох ПРOl'рамма установки спросит, куда устанавливать
LILO выберите MBR.
В случае деИНСТМЛЯЦIШ Linux (ПОС){е 1'01'0, как вы уже удалили разделы
Linux) восстановить MBR, то есть у;цwщть LlLO, поможет кома ида fdisk
la,br. При этом нужно использовil.'!' nporpaMMY fdisk из комплекта за-
rрузочноrо диска Windo\vs.
1.7.2. УСТClщ)!,S!Са WindOWS 9х,
Windows NT/aOOOjXp и Linux
Первый способ
В этом способе используется заrpузчик NTLoader. Выполните установку
Windows 2000 в раздел NTFS, а Windows 9х в раздел FATIFAT32. Не
забудьтс приrотовить чстырс СllстеМИЫХ дисксты для восстаНОВJlСНИЯ!
Напомню, что если вы хотите установить Windows 95, то ее нужно уста-
н"вливать первой, а потом Windows 2000. При установке Windows 98 и
Windows 2000 порядок установки не имеL'Т значения.
Устанавливать Liпuxнужно после установки Windows 2000. При этом не-
обходимо учесть, что ра:здел ипнх ДOilЖен находиться до 1024 ЦJUшидра!
Это связано с «барьером 1024 ццлnидра» Linux может ИСПОllbзовать
разделы, расположенные после цилцндра 1024, но не может заrpужаться с
таких разделов. В последних версиях Linux данная проблема устранена, но
рассматриваемый способ установки rpебует, чтобы вы создали раздел lJnux
до цилиндра 1024 иначе ВаМ придется :Jаrpужаrь Linщ; с дискеты.
Еще раз напоминаю: обязательно создаЙте заrрузо'lНУЮ дискету для
LillUX. При установке LJLO выберите MBR Liпuх пере запишет rлав-
ную заrрузочную запись. Далее заrpузите с четырех заrРУЗОЧIIЫХ дискет
Windows 2000 н выберите пупкт «Recover» в меню заrрузчика и режим
"Command mode». Затем зареrистрируЙтесь в систеМе как Adminislral-
or. Выполните команды ПхЬоо! " fixmbr теперь Windows 2000 будет
нормально заrружаться.
86
rЛ8.Вд 1, Установка orlерационной системы
ei 8.l.l']II( l:fj . I:II
. Утилиты fjxboot и fixmbr исполЬЗуЮТСя в Windows 2000 дпя во(:сr.эНОВЛ9нИЯ mз8НОЙ
. заrрузочной записи (МВА). KoмвНДt3 fixmbr nраkтичесхи аНЗnOfична команде fdisk
Imbr . Windоws 9х.
Затем заrрузитесь с системной дискеты Linux и войдите в систему как
'"oot. Откройте в любом текстовом редакторе файл /etc/lilo. canf. В
начале файла есть ссылка на зarРУЗОЧНЪП1 раздел 110 умолчанию, напри
мер, /dev/hda. Вам НУЖИ!) измеНII1Ъ ЭТ!) ЗllачеЮlе на диск и раздсл, в
которыЙ была установлена ОС Linux. наl1ример / dev I!idbl.
Введите команду lilo и увидите, что заrрузочный раздел не является
первым на диске именно это вам >1 нужно. В ЭТ!)!>I случае заrрузочная
запись Windows 2000 не будет повреждена. Запишите 'JаrРУЗЧIIК Linux в
файл /bootsect .lnx:
ff dd if;;;/dev/hdbl bs=S12 СОi.шt.;;:l ot= Ibootsect .1nx
Теперь этот файл нужно скопировать на дискету:
# rnount t rnsdos /dev/fdO /rnnt
# сору /Ьооtзесt.lпх /rnnс
# urnount Imnt
Перезаrрузите Linux командой rebOQt 11 заrРУЗIIте Windows 2000. CKO
!JlIруйте фаЙл bootsect .lnx в КОрliевой J<аталоr диска с: и присвойте
ему атрибут read-oп/y. Добавьте строку в файл boot. 111 i:
с: \ bootsect .lnx ="Linш,.
в результате при перезаrpузке компьютера вы сможете заrРУЗIIТЬ Linux
с помощью NTLoader.
второй способ
Существует более простоЙ способ установки LillUX И любой операционной
системы семейства Мicrosоft Windows Windows 9х, NT, 2000. Сначала
НУЖНОУф'ановить i1ce OCWindows, а потом установить Linux. При этом
RмеСТОflачальноro зarpУ3ЧIIКa будет ИСПОЛЬЗQваться ие NТLoader, а LILO.
В этом случае вы получите двоЙное меню: сначала нужно выбрать между
заrpузкой Unux 11 Windows, а потом выбрать нужную вам ОС Windows
Wmdows 9)( IUnf NТ,I2(XЮ 11 ЭaIllIСИМocrn от тот, какую систему ВЫ устаНОВИЛИ,
кроме Windows NТ. Второе меню ЗТО как раз менЮ заrpуз<rика NTLoader.
Использование loadlin
в этой книrе я просто не мо! Не упомянуть о компактном заrрузчнке
loadlin, который позволяет заrрузить LillllX >lИЮД DOS или Windows 95.
87
UNUX: полное-РУКОВQДСТво'.
Если ВЫ ИС[lOлъзуете Windows 98,1q;ldlin работать у вас не будет нужно
[rереззrрузиться в режиме MS DOS,J<poMe этщо, следует Y'leCТb, '\то npи
использовании loadlin J\lOryT 803НЩЩУТЬ проблемы с- Рll3делами FAT32.
В этом случае СОЗ.!Iайте ззr.рузочную дискету DOS (forrnat а, / s) и
в autoexcc.bat этой дискеты ПрОIDIШИТС loadlln. Зarрузить Linux изпод
операционных системWiпdоws 98,Ме иЛИ Windows 2000/NT вам не
удатся в любом случае.
ИСПОJrьзоизтъ lоаdliп я рекомендуюmщn. в том случае, если при очередllOii
переустаИО8ке \Vii1dоws(}кюалсп «заl1тым» МВR (а вместе сним 11 LILO),
а системную дискету ипш вы не создаЛи. Вызов nporpaMMbl loadlin ..мест
слеJlуюший формат (описание параМе1ров приведеllО в таБJl. 1.2):
10ааl iп <ядро> <ro-аt=корнеБ'7i......ФС> <оrщии>
нли
lo;:i.c11 in @файдс.:....:nдраметрами
Парамеrpы nporpaMMbl loadlln
Та6пнца 1,2
Параметр Описание
ЯДРI), I(OTCpoe I'JЫ ИСnО.llЬЗУl!те, ЕСЛ\1 v C Щlданны't MoeНТ MBt ИA,lQtftiо
Я!фа Toro ядра. Кl;поров бt.!"н:) овлеtlо, .МОЖНQ практически любо'i
{ше не M()Q дPs8M\!)e), ОБI;.lЧ дpo М'QЖНQ вэяtb tU1 kо)ДпвqДИСkQ
с: дистр",бутива UпЩ;--QJ1а еам потре6уеТСА ElcefO один ра3- нужно
1011KO з-аrpУЗИТЬС '" nэапиС"аТl. lilQ (1':01IoI;;uщa li!о)
ЮQI= I:()pheflaq ФС КС)рнеi\Э;Я Ф8ЙIl06аЯ СИСтема, например root=/d8v/hФ13
Dnф'lИ Оnц.,и, i(Qтlipыe будут переданы ядрv ВО время заrрY:JКИ',
06biЧНQ испощ.ЗУЙТС$f_tfJ, vg-a=пormal
Есл пар.ам€тры; коТРрые p1;J nе-редаете toшПin ,.He ядРУl) OC
@фаЙлс..пар()МQТР-'3МИ: CJ1ИШJo:ОМ длинными, то их мо:.:.но эаписатъ в отдельный файл, азатом
УКI13SПЬ efO ИМЯ е 1(З:"fес.твв па-рэметра
СОАет: можно включить заrpузку Linux в стартовое меню DOS. Д1Iя этоro
отредактируйте спой сапЕ!;!. эуэ следующим образоМ (см. ЛИСТIIНТ 1.1).
Листинr 1.1. Фраr-мент файла conftg,sys
ИЕNН]
МЕNLjI7ЕМПОS I IJOad [YJS
fJIЕNlJIТЕИ'I,",IN!JХI i,oad Linux
rENHDEF'AULT:DOS, 5
jLINHX)
install ,;с: \ loadlin \lq q dliп. ехе. с: \loadlin\kernel \ vml.in!.lz
root/dev/hda3 ro vganormal
[иО:3]
ваш преды-дущий СОI1 f ig. sys
88
rl1aBa 1 , Установка операционной r.исrемЬt
1.8. Первый запуск Linux
Если вы выбрали для входа в систему rрафический режим (или ИJlстаk
.1ятор выбрал ero сам, ни о чем Не спросив), то иы УЩlдите rрцфнческий
:жран с полем ввода Ifмени и пароли. Зареrистрнруйтесь Ij системе (лучше
под тем именем, которое завели для обычноro пользователя; используйте
l'OOt, только если обычных учетных записей у иас еще нет), n ОЪ! уоидите
рабочий стол той окоиной среды, которую установили о качестое среды
110 умолчанию, онетне дооольно похожий на рабочий .ол WiIldows.
Как же так. вы ведь слышали, что настоящие линуксоиды работают в
среде командной строки? Сейчас найдем 11 командную строку.
Вы знаете, что КОНСОЛЬЮ, lfЛ1f термl!Налом (для персональиоrо компьютера
Эl1< понятия аlliОНlfМЫ) назьmаются устройства ввода-вывода, предназна-
ченные для общения системы с ПОЛЬЗ0вателем, то есть клаnиатура и монитор.
В UNIX-подобliЫX системах существует поняrие виртуальных консолей
консолей, по очереди занимающих физически одни и 'l'е же монитор 11
клавиатуру. На каждой из них может быть oткpьrr отдельный сеанс рабоlы
f1ОJ!Ь30вателя, запушены свои npиложения, В общем, ОНИ представляют co
бой nО'lТи независимые лрyr от лрyrа 8ычислительные системы.
В больщинстве дистрибутивов Linux по умолчанию обслуживается шесть
текстовых виртуальных консолей, сельмая rpафичеекая. На ней 8Ы и
находитесь. Чтобы переКЛIQчИТЬСИ с нее на первую текстовую консоль, нз
Ж:МИ1'е комбинauию lUIавиш Clrl+Alt+FI (на шестую СlrI+АII+Fб),
В ответ на приrлашение проrраммы login: введите roo! 11 нажмите
<ВВОД>. Потом введите пароль, И паш сеаис работы в тек<''f''воil конс"ли
начат.
Информацию О сетевом имени машины. версии ос, архитектуре можно
""лучить по команде ипате a.
Если УЧe'rflОЙ запJiСk для обычноrо Пользователя у вас еп(енет. самое
время ее завести, Введате команду
#iJse.radd < имя >
Если вам ответили «command поl found.., то, значит, в вашей си.еме эта
команда называется adduser.
Вы добавили Hoвoro пользователя. оllНЗКО ЭТО еще Не нсе, нужно указаlЪ
cro пароль:
#passwd < имя >
Теперь можно реrИСТРllроваться под новым именем на npyroi1 вирту-
алЬНОй консоли. Чтобы с текстовоЙ консоли nереключиться на друryю
89
UNUX; полное руководства
текстовую, нажмиТекомбинациЮ Alt+Fn, тде n число от 1 до 6. Вы
снова увидите приrлашение login:;
Зареl'llстрировалllСЬ? Обратите lIание на строку приrлашения. HIl
той консоли, rдe вы зареrllСТРИРОIЩЛI!СЬ как root, она оканчивается сим
волом #, а для любorо обычноrОп(lльзователя сцмволом $, Кроме
этото символа, ПРllfлашение оБЬiЧJJО состоит из цмени пользователя,
имени снстемы и текущеrо каталоra, причем вид ето можно изменить,
как только вы узнаете, как это детц'ь. В дальнейшllX примерах строки,
на'lИнаюшиеся с # или $, будут обозначать вводимую комаиду, а строки
без TaKoro СИМllола ее сообшения.
Теперь убедитесь сами, что Linux деЙСТIIИТСЛЬНО мноrозадачная и
мноrОПОЛЬЗ0вательская система, то есть, в отличие от WindoW5, несколь-
ко пользователей мотут раБОТ!lТЬОДlIовременно. Спросите, кто сейчас
работает IJ системе, ВIJедя команду who.
Вы увидите ЧТQ--ТО вроде:
root ttyl <дата и йремя. начала сеанса root>
ivan tty2 <Дата и время качала сеанса ivan>
root :0 <Дата и время nачапа сеанса root>
<на rрафической КОНСОЛИ>
ttyN это номер вцртуальной текстовой консощt.
Если вы nотерялись и хотите узнать, на какой консоли находитесь сейчас,
введите команду tty. Если вы забыли, под каким именем зареrистри-
ровались На текушей КОНСОЛИ; введите команду whoami. Команда w
покажет не только работающих сеЙчас пользователей, ио и запушенные
ими задачи.
Листать экран можно комбинациями клавиш Shift+PgUp и Shift+PgDn.
Для копирования текста в комаНДllУЮ строку ИСПОЛЬЗУЙ'rе 'мышь: прота-
СКИIJание мыши IIРll нажатоЙ левоii КНОlIке выделяет фрarмент, щеЛ'lОК
правой кнопки Вставляет сто В текущую позицию курсора на любой
виртуальной текстовой консоли.
Если вы хотите, не сходя с эТой консоли, поработать под именем ДРУfоrо
пользователя, введите su <ИМЯ>. ПО умолчанию в качестве цмени nод-
ставляется тoot. Обычно это нужно для Toro, qтобы быстро выполНить
какое-то адМИНИl-rpаторское действие. Возвращайтесь к работе под своим
именем по команде ех 1. t..
Чтобы переключиться обратно иа rрафическую консоль, наЖМ\iТС
Alt+F7.
90
rл,.:На 1. УСТШЮRка операционной системы
...... I&I:
Jt'!..........
i:...
: (f......
kt\\:и-
iф"....
1".:П.,мw.w
!,.'d.
, : ::;::'''''''''''
..,.i....ч.
· 'tI".,.,;........
i-"";'"
.. ,:'k.".:;;;,t''":'.;",,,.,,::!;jj:;.ri.l.",
",,.'..,AWIД' :,".,. \JII,,"N" k"P'lкa
..Qillt tQ "lt,l!It./кdе"Фs.,,'
..1.Y.,::,;,,__,.?,::.(]:. ..," ......
j, J Q;(I
., RflthoQI . !<:'i..,,,,,p''',i Hb!< 1$ wl\(:>
h j r;(.-.;o и.у.!.
,(JII''''*-1t!1);D)Oj.I,IouUII'b! ; t9<;' ;tv2
.j 4..1fW ! H';;' t:t:y:J
t! e-A(1II ; ;1." :с.
I m \'!6""""" "" I d;:>l' pt.l'j:
v ,........... <1..;, t;ta/2
"n;'o;$Ii\t ,-;j..n@"",-.lt.:.bl. Ji IJ
4fgp,*rp.aall; ,
,ew.r.JpтI!W
@IJ,aмr.tIiII3I"-I'Н""
Ка:: 29
.!Ir i'l
t'.. ;;:н
.;.r ;!:а
М<3 :!е
!''1r: ..iI
Рис. 1.13. Окно 8иртуальноrо терминала
в rpафическом режиме Тоже можно не только щелкать мышью по знач-
кам, но и вводнть комаfЩЫ. Для этоro запустите виртуальный терминал
(рис. 1.13) rрафичес!<ое приложение, в окне KOTOpOro можно работать
в режиме командной строки.
Количество виртуальных терминалов, в отличие ОТ количества виртуаль-
ных консолей, lIe оrраничено lIичем, даже традиuией.
Чтобы завершить ceallC работы 113 виртуальном терминале или на вирту-
альной консоли, введите команду exit (на виртуальной консоли можно
также logout) или нажмите комбинацию клавиш Ctrl+D.
Завершение работы oJllloro пользователя не ПРIIВОДИТ к остановке всей
системы. Чтобы ВЫКЛЮЧНTh машину, нужно справами супеРПОЛЬЗ0ватедя
отдать команду
# shutdоwп h 19:00 [Конец рабочеrо дня]
При этом за несколько r.rnнyт до указанноrо времени всем, кто работает в
системе, будет разослано предупреждающее сообщение «Конец рабочеro
дня», после чето систем" будет корректно остановлеи". Краткой формой
этой команды служит ha 1 t, о,.анавливающая систему сейчас же и без
nредупреждеllИЯ, Перезаrрузиться можно командой reboot .
91
UNUX: полное РУКОВОДСТВО
1.9. CTaHдapll1.e сер висы Linux
Описание стандартных cepl!ci:l%J;.j.nx приведу в виде таблш\ы (см.
табл. 1.3). .. . ........ ..
Стандартные серенсы Ипих
Таблица 1.3
СервtotC Описание Нv.eH7
Bnacron, Пnанироащиl(И эаданУ!й, ,,ПУСIШJOЩj.1е по rpафИКУ.(I!ЩWД9лен д.
crond ныв пporpaмMы
Отслеживает СОСТОRlие k,pe'" ноyrбуц. У вас стационарный
к:омпыоер?? Тоща смело: tфQ'tюч.айте этот сеРВИС"КQне'itщ, QH
Qpmd вам понадобится. если _у'щ умный иSП: ТОf'.AЭ apmd может кор-
ректно звsерWИТЬ работу 'системы, еСIIИ пJIOfшло напряжение. а
батарея IЛБП ра3Р'RЖНЦ
.'d Ещ.е один ПJ1"рОВЩК .аданий
autofs СРtЩCТ80 R8тома,"ичеСkQr() МQНТИРОвания сМQI:I.biх.'Т$1I8Й д.
,(CDAOМ t д..1lCещ)
chargan, cMrQen.up J1\o! СЩЮIIIС дeМ:o' хlпе:td, rel-lеРРylc:l,iЩ.,J1 ,С'
опреДеленным Иlтервan9М_врQМени и nОСЫЛаIOЩИЙ:еro'по сети
cpuspeed Динамичесое ynрае.ЛElт1S СКОРОС1ЬЮ процессора
cups Сиe're.Ма пти е Uпiх w подо'5't1ых ОС (C,oтmol1 Ufli1t Priпt SY$il)m).
ПрИНТQР у Ьас; sCtb? Тоrдаонэ нужна
cиpsconfig.deamon Демон дпя конфиryриром.ний cup.s
diald Аетомatическ..,й ДОЭ80Н 1( провsйдеру
opm Подцерцt,t МыШи о коНсОАI'1 I,..inux да
os$ftp fflР...;:ервис. ахОДRщийе,состав сynерсервера хфеtd (rп.11 > и
'1сtЮ1JЬЗУЮЩИЙ 8ВТОР.Шацию на КеrЬ1JП)s..сервере
irda ПЩIДерж.ха работы с инфракрас.МIМ ПОРiOм
irqbQlance ОсущеСТВnfJ:! бале.НС!l!рЩIIСУ првuываний "(ц Мliоrо'nроцссор.
НЫХ, СИСтемах
lпt$rn(llt УстаJЩвливает соединеии" с проsайnероМ при зsrрузК8 систе
МЬ! и ()брЫвает ато при зцвершонии раБQJbI
iptabIes М&жс;еТQ80Й э.:ран
nalde.mon Соби;.ще,' i'lнфор).llЗЦИIО o{j оcs.oРУДОi;1а,ни\ol
кеytзЫе Заrpyж:эет pacкnв.д I(Л8Rиа:туры, УКQзанную 8 фsАn8 /e(c/t.ytJc- д.
onfig/keyboard
'k!ogd Протоколирует сообщвНIrIЯ мрз в фаilnе !var/log/kernel Д.
Ище1 иеli(tttИR 8; аnпараТНQЙ конфиrурации Io:QМnьюТера.
Вполне МОЖО1 ЗЗnYСI(ЗТЬС;Я Вручную. ОБЫ'iНО запуск kudl:U но-
k.udl.\J обходим QA" раз после усУаНОВКОо1 I;ИСНIМЫ, ПОТОМ erQ МОJl(НО
отключить '" заnусжаТh roпbКo при устаноВКiЭ Н06ЫХ устройств В
компьютер ,(ИЛИ удалении paHt}e установленныхl
lil;a Демон, (:обttр8JOЩИЙ ИttФОРМiЩИlO о' рВ<:урCSX ceTiI1 Microsoft
linuxconf Орrанизовывает выполнен разЛИЧНЫХ задач конфиrypирова-
НИ$! при :эаrру;)l(е системы
92
rлзва 1. YCT8H08J:3 операционt'ЮЙ сис.темы
Продолжение Та61l. '.3
C<>PIНOC Описан"'. Нрс:ен?
namonltor МанlПОРИмr .управлвние npOrpaмMHblM AдID
nf;l!ned Сервер DNS
пеtfз 0бес:печИ2Щl3t МQнтироrшние YдaI!eHHЫ)( <;:(I,ee.blx фе"JЮВI:>IХ
систем (NFS. $M. NCP (N,\I\WOII
Помержкз сети. Этот cepslofC далж8Н быть SКnll)Ч.ен 8ct!rдa, по.
nelwork CkQ'nЬку'.сщж:е 1o'1Цеская С!.1стема., С"fСТВЩl В nеЧдт-1 s LJnux Д.
нуж.д.юТC1I: S нем
nfslock MeMHIoI3M БЛоt(ироваti1-l фаЙtЮВ NFS
f\UI1).1t)ck Qкn.i&ние P1;I ..лавиаt'iPЪoINum lock
oki4d:aemon поддержка ОКI 4w-прl'tlolтеРОI!I
DCmcia поддваm8?СМД
Н&обходмм'дmt nрЛОЖвний, Ш::nЫЬЗyЮщi'l)t YAiiJ1t'1tiHbltf (ibl
I3Q1map 08 npoцeJ;I АРе. Hv.«e .Q1!Я NFS 1'1 NIS (Networ Ir\fоrmцtion
S<lm:O)
psaCC1 c.nу-*ба учета ПрОЦессое
httpd, prof1pd, Web-. FТP- и noчroвые cpв-epы. ПОt<3 ВII:ЛЮЧ<ПЬ ИХ не нужо,
WiHtpd, sвndmвll, поскоI1ыcoJiJl4; Не насТровны и бvAYf ДОI"JолнИтIOIЛЬнОЙ "ДырGЙ" &
postflX еезQf1аСQСТИ "шей с.истемы
rашtQft1 YIJY"weT ОО1ЗQ r(fнервЦ!ofИ IЩУ'4'аР!ны)( ЧИСfЩ д.
rawd-evices Не &Даваясь в TeXHj.-lес.:ИО nОдРОбносrи, ПрОСтО QТК!lЮЧИ11Э этот
сервис
I Ba;::tahe8l1, С&ремс.ы. nозВОI\к'Н.цИе 8bInOnН9iТb пРIЩVI"'"ЬkУЮ эе.rруз"-у
!e8daheadear!v nporps"'.... 8 onераТК8Ную памятъ
rhhcd В днсrpиб Rlild Haf 14 FerЮrit демон, I((}ЮрЫI'+ Периоди.
чески подключается к серверу Red Hat На rlредмет оБНОl3лений
:->martd Монитормнr жеСХИk ДСI«(lВ, с: I<1СПОЛloзоознием ЩЮТQII:ОЛЭ
S.M.A,R.T
saslauthd Обраб<3тка 38ffpoC08 аутеНТИф"'I(8И
pamassasglJ\ Сервис, преднаэначеttНЫ ДШI борьбы со спамом
&:shd Сереер. nре.цнан.ачеННЫЙ для бвэопасноrо УАЗЛенноtо ЗДМИНИ.
crpИрованя с:истеUQl
"YsoIOg Cпyw;6a ведения CiolCTeMMblX ЖУРНaJlОВ
Ec 8ы nпаииру.ете рабоцlТЬ 8 сеТи МI(:П)эof1, еlo:.nlOчите :';froT
,тО cepвi;C, Но только nOCJ1e ero HaCTpoK", описанной g адмt1НИ- Да
стратИ-DНОМ разделе. А пока СПIU1ЮчИf(l'
winbincl ИCnОJ1t.ayQiCА дпя ayteh-тифИКSЦКи S-ambа.nОЛЬЗ0ваrElltеЙ В до-
мене NТ
"'. Сервер wрa.tфroв. нужеН ДЛ системы Х Window д.
oaпled Сераер DNЗ
урblщt Служба. используемай ДЛА обвcnеч(}ния ДОС1УnЭ 1( NISce>pBepy
)lUn'r Сврвкс. осущеСТ8llRЮЩИЙ обноsлени системы в а8Тома,И46
еком JlCL'lМ@
93
LINUX: полное рУКОВОДСТВО
Узнать, какие сервиcы YCTaHOMey вас в системе, можно воспользовав
IlIИСЬ системной утилитой sуstem,српflg-sеrviсеs (пуНК1' меню Системные
пара метры ..... Настройка сервера .....C;tужбы) это в Fedora Core. Кроме
Toro, можно восrЮJIь:юваться коНСОJlЬной утшщтой: ntsysv.
1.10. Справочная система
«Родной" аля UNIX справочной системой, аналоrом Справки Windows,
служат страницы интерактивиоrо руководства (тШlUаl pages, тап;;тра
иицы). Ими СНабжеНа практически каждая проrрамма, важный конфи
rурационный файл ШlИ системный вызов. Это обычные текстовые фай-
лы, содержаlllие I;ведеtlllЯ о lIаЗю'\ЧенIIИ, синтаксисе, ОПЦIIЯХ команды,
формате файла, примеры их применеНJIЯ, имена и URL разработчиков.
ОбычныЙ дистриБУТl!n содержит 1'ыячlt страниц такой докумеитаЦI!II.
ПросмаТРIllают ее командоЙ шап, Например, тап тап это вызов
справки о самой команде rn,Щ.
При установке каждоrо nporpaMMHpтo nакета вкдючеlilfые в ero состав
тап'страницы копируются в CТaJfДaJYl1f!>le катмош, так что проrрамма ш"п
леrко их находит. В этих каталоrах СТР"lпшы сrpуппированы в секции по
темам. Перечислим эти секции в пqРJЩ.Ке "росмотр" npоrpаммой шап:
1 Команды пользователя
8 Системиые команды
2 Системные вызовы
3 Библиотечиые вызовы (подпроrpаммы)
4 Устройства
5 Форматы фаЙлов
6 Иrры
7 Ра.1ное
9 Ядро (kernel inlemals)
Так что, если вас интересует справка не о консольной команде exi t. а о
CI'cтeMHOM вь(зове exilO, запраlllивaI1те ее команлой тап 2 exi. t.
Чтобы ознакомиться с содержанием раздела, введите команду
тап <НомераЗДеЛа> lпtrо.
Вот несколько самых употребительных команд управления выводом mal1-
справки на экраи:
<Ввод>
<Пробел>
<О>
</>образец<Ввод>
<N>
вывод следующей строки текста
вывод следующеro экрана текста
выход из nporpaMMbl
ноиск образна
повторение поиска.
94
rлзва 1. Установка опервци.онной системы
Альтернаrцвой команде тап служпт rипертекстовая справочная cllcтeMa
il1fo. ССЫJUЩ обозначеНЫ3Ве3110ч.IGlМИ ('), 11 перемещает по НИМ клавиша
<ТаЬ>, Чтобы пройти по ссылке, нажмите <Ввод>. Чтобы перейти на
следующую Imи предыдущую страНИIlУ, нажмите <N> или <Р> соот-
ветственно. Чтобы попасн. на один уровень иерархии страниц вверх,
"ажмите <U>. И клавиша <О> завершает работу с прот'раммой info.
Сверхкраткую (одна строка) справку о командах дает команда
whatis <ключевоеслово>
Для работы ей нужна база данных о системных командах, создаваемая
проrpаммой makewhati5.
Есля тОЧНОТо ИМеНИ командЬ! вы Не знаете, но примерно доrадываетесь,
какие фраrменты слов MoryT встретиться в ее имею' или кратком описа-
нии, вам поможет команда apropo5, про изводящая поиск в той же базе
[[о фраrмеllтам слов. Например, отдав команлу
$ apropos config
вы получите СШIСОК команд, имеющих отношение к конфиryрированню
системы и различных служб.
Команда шап с КЛЮ'lOм k тоже умеет выloлняTh поиск по ключевым
сЛоВам. Если вь! хотите узнать, какие проrраммы имеют отношение к
некоторому системному файлу (конфшурациоН!юму или журналъному,
lIаllример, letc/passwd), введите команду
$ тап .k passwd
Вы получите список тап-страниц по командам, функциям, формата
файлов и т.n., На которых встречается слово «passwd». В общем, поиск
информации В справочной системе UNIX очень похож на поиск в Ин-
тернете: находите что-то похожее If переходите по ссылкам все БЛlfже к
истине.
Есть и команда help: она выводит справку о встроенных командах ко-
мандной оболочки (о командных оболочках сказано в rл.3).
Наконец, правильно написанные команды понимают ключи ..help и
"u58!!e, с которыми выдают краткую справку о себе.
К сожалеиию, мноrие страиицы документации на русский язык пока
не переведены. Linux ОС lIекоммерческая. и переводом занимаются
добровольцы на общественных Ifачалах. Может быть, со временем к ним
присоединитесь и вы? А пока зашяните НЗ
httр:l/www.linuхshаrе.ru/рrо:iесtsltrапslindех.html.
95
rлэsС1 2
ФАЙЛОВАЯ
.СИОfЕМА LINUX
ВИДИМА$! СТОРОНА
ФАЙЛОВОЙ СИСТЕМЫ
ИЗНАНКА ФАЙЛОВОЙ СИСТЕМЫ
СОЗДАНИЕ И МОНТИРОВАНИЕ
ФАЙЛОВЫХ СИСТЕМ
LINUX ПОЛНОЕ РУI<ОВОДСТВО
2.1. Видимая сторона файловой системы
с ТОЧКИ зрения полъзоватеJШ, файловая система ЭТО лоrичесКая crpyк
тура каталоroв и файлов. В отличие от Windows, rде каждый лоrический
диск хранит отдельное дерево каталоroв, во всех UNIX подобных систе
мах эта древовид"ая структура растет из одноro корня.: она начинается
с KOpHeBoro к;lталоrа, родительскоro [\О отнощенюо кс, !!сем остальным,
а физические фаЙ!ю!!ые системы разноrо типа, нахОДJIЩиеся на разных
разделах и даже на уаленных машинах, представляются как ветви этоrQ
дерева.
2.1.1. Имена файлов и каталоrоа
Имена файлов и каталоrов MOryT иметь длину до 255 СИМВОЛQВ. Символы
«/» (слэш) и символ с кодом О запрещены. Кроме TOro, ряд символов имеет
специальное значение для KOMaHRHOro интерпретатора, IIIIX иcnользова
вие де рекомендуется. Это символы:
! @ # $ & % . ( ) [ ] [ } , . \ , ; > < ' пробел
Если вам все'такинужно УПQтребить один их этих СИМВQJlОВ В имени фай
ла, ТО прll Указании ero имени в команде этот символ нужно экранировать
знаком «\» (обратныЙ слэm) "ли заключать все имя в двойt\bfе КЗfjычки.
Напрнмер, вы хотте вывести на экран командой cat содержимое TeK
C1'OBOro файла с именем ту f i 1 е, содержащим символ пробела:
$ cat ту file # неправильно
Ci1t: щу No such file or directory
cat: file: No sиch file or direct:.ory
$cat "ту file" # правильно
I1ривет !
$cat ту\ file # лравильно
I1ривет!
311ак # ЭТО символ КОМlеllтария для команднOI'О интерпретатора bash,
о котором подробнее рассказано в rлзве 8. КОМIlНДНЫЙ интерпретатор
-4 За,,_ 3i()j
97
UNUX: полное РУКОВОДСТВО
иrнорирует осе СIIМПОЛЫ ОТ этоrо знака до конца введенной строки.
Возможность комментировать не слишком полезна при вводе команд с
консоли, \10 неОllенима при наmiсаl;lИИ командных Сl1енариев, о которш
мы еше будем rоворить.
Замстьте, что точки среди специальных символов нет, и имена вроде
this.ls.a.text.file.containing.the.famous.string.hello.world
допустимы и IIIИРОКО раСllространены. Часто последняя отделенная точ-
кой часть нмен" используется подобно "расширению имени. в \Vindows,
обозначая файл определенноrо 1'ШIR, но это обозначение несет смылл
только лля челооека. Так, человекУ имя файла i vanhorne, tar . qz под-
сказыоает, что зто домашний KaTMor пользователя ivan, упакованный
архиватором tar и сжатый компре<:СQрОМ gzip.
Если имя файла начинается с ТО'!К'f, то этот файл сЧитается скрытым:
некоторые команды 1'1'0 «не видят». Например, 08еДЛ В своем nOMalIllleM
каталоrе KOMallAY просмотра содержимоro каталоrа Is с ключом a,
означающим «rroказывать CKpьnъre фаЙЛЫ», вы увидите больше фаЙлов,
чем введя ту же команду без ключей.
LiПIlХ различает реrис1'р симоолоо в именах файлов: так, в OДJIOM каталоrе
мотут находliТЬСЯ два разНЫХ файла README и R",adrne. Кстати, файлы с
подобными ИМенами обычно содер.JlЩТ инфорьщцию, действительно до-
стойную прочтения.
Имена каталоroв строятся по точно WM же прапИд3М, что и имеll.а фаЙлов,
Полным именем фПЙJЩ (111111 l1утем.к фuйлу) называется список вложен-
ных лруr о лруrа каталоrов, заканчивающийся собствеНJIО именем фай-
ла. Начннаться он может с любою каталоrа, ПОТОМУ что о дреоовидной
структуре между любыми двумя узлами существует путь. Если этот СПИ-
сок начинается с корневото каталоrа, то путь называется абсолютным.
Если с любоrо npyroro то отиосительным (по ОТИОШению к ЭТОМУ
кзталоrу),
Корнеоой каталоr обозначзеТCJ! символом «/. (слэщ), И этим же симоо-
ЛОМ раздсляются. имена Каталоrов в СПИСКе. TaKlIM образом, абсолютным
именем фаЙла ,'ZEADNE в домашнем каталоrе пользователя den будет
/ !'iОПШ I С! (.?rl ; кЕ!\ОМЕ.
в каждом каталоrе сущсстоуют два особых «подкзталоrа» С именами
«две ТОЧКИ») И «to'-rка». Первый из них служит указанием на ОДliозиачно
определенныЙ родительский каталоr, а второй на сам даНJIЫЙ каталоr.
Для КОРllевото катзло!'3, у KOToporo нет родителя, оба эти «подкаталоrа»
указывают на корневой каталоr. С помощью этих имен образуются отно-
сительные имена файлов. Так. именем вышеупомянутоrо файла README
OTHOCliТeJlbHO домашнеrо каталоrа / hоП\е / i van ПОJlhЗователя i v аn будет
, . !r.lеп/RЕАDМЕ.
98
rлftВ8 2. Фамовая система LiтJX
2.1.2. Назначение основных системных KaTaпorOB
в системных каталоrах находятся файлы, необходимые для управления
JI сопровождения системы, а также стандартные проrpаммы. Их имена,
расположеЮlе и содержание почти одиIIaковы почти во всех ОС Linux,
fЮЭТОМУ эти каталоrи называют Также стандартными. Впрочем, на данный
момент эпитет «стандартные» отражает скорее блаrие пожелания, чем
действительность: иерархия каталоrов олинакопа только для дистрибути
пов, связанных единством происхождения, а историqески сложивщиеся
различия СОЗдают опасность несовмеСТlfМОСТИ разных дистрибутивов.
Стандарт файловой иерархии для UNIХподобнЬ!Х систем разрабатывает
rруппа добровольцев, и с ero текущей версией можно ознакомиться по
адресу httр://www.раthпаmе.соm/fhs.
Краткое описание оснОвных каталоrов линии Red На! и Fedora Core
сведено в табл. 2.1.
Стандартные К811UIoпf ТaliIIица 2. 1
KaTanor Назначение
/bin Основные nporpaM*",bl, неоБХОДll!мые ДЛJl работы в системе: командные обоЛОЧКИ.
файЛОl3ые утилитtol .., .._n.
/sbln Команды ДЛ с.иств",моrо ВДМиJ'<I4СТрlo4рОВnk\llS1, а тзхжв nporp.aMMbl, BblnOпнgaMYe в
ходе за,рузlCИ
{Ьоо! ФаRЛЫ, НеоБХCJдимые АЛА :Jо:оrруэlCИ системы (О6рвз ядра)
/hamII Домашние t:;аталоrи nолыоеателей, кроме roо[
/dвv ФаЙлы устрой(:та
/8tC ФеЙлы acrpoelC стартовые сценарии, КоНфиryр.аЦl-10н..-ые файпы rрафичеСkО"
системы и разпичмых F1рилож.НI4Й
j1ib Системмые (iill6ЛI.'.ОТЕICИ, нво(iХОд"1МЫ(l ДМI OCHQBHblX nporpaMM. .. модули ядра
jloS:l+found ВОССТlll108ЛеННЫВ после рИЙноrо раЗМОНТироВания части файловой системы
/media Сюда обы'4НО МОН'ТI4РVIOТСЯ CЫMHЫ J.lQсители: компaкr-дисt::И 1 fiа'ShtlаJ(о"ители
/пЮf ВреМеНные ;ОJ(И МОНТИрОil"R жеСТJ(И)! ДИC-kОВ. ИСПОЛЬ;lО881Ь это'!' kаrа.лоr необя-
:э:юельно: ПОДМОНТИрОооrЬ фай/юеУIQ c\llr::тeмy МО*ИQI( 1II0бому дpyrt,му КI.\ТМЩ
/01'1 ДОПОЛkитещ.ныв пакеты npOrpaMM. Если npCitpaMMIl, усТi'1Но9МНная сюда, больше
не нуж.на. ТО ДостаточнО уnt1Лl-IТъ. $е JЦJП'lлоr без обычной проц&Дуры д,еинсталЛRUlo1io!
BIo1IJJY<JJlbHall фаИJiIJiJaН 1.;и(.'IIJМ.!;f, Ai:lIU>I .l1СJl.:JУП!r; мнфрмацl'lИ дpa (наl'lрИМ,
/рroс 8ывед.пе на экран. фаЙ" /рrQс/срu)пfQ). Друrие фоIlЫ в ,ЭТОМ IQ1TMQre в каждый '"'О"
М"Н-Т QреМ8НИ содер)(8,-Т информацию о выПО/lНiOЩИ){C1I Q ЭfОТ МОМенТ nporpaMMax
ДомаwниС1!k.8Т8Jtоr cynеpnоllьзоааТQl1А. ДомаWi-lие катмorи ВсаК о-стапьных MOryr
{root Н3X1)ДМ'\'btit на ОТДМЫЮМ paaдoeJ'\e, мо /roо\ доткен БЫTh 8 ItOp...e80 фаЙЯ080Й си-
стеме, '4тобы адмнн,",стратор BcerAa Mor войти асмст&му дпq peMOH'fHblX работ
/tтp eP-(НJl8НbIе ЙЛЫ
/Var Често мен"'lOщився ДI!IHHыe системные *урнаflЫ и протоколы ПРl'lложений, ЗQМ,
почтовы/!- SlЩИkИ, ОЧ8 печати "1П.
IU$r Прак:тичеСКVI8сеоетзльное: np<lrpaMMbl, 14СХОД'-Ы$ КодЫ, ДОICумеЧТВЦI"q. Сюда по
УOJN8НИI(f ус:пt»щивf(:Я fi08blS np-urраММbl
99
UNUX: полное PYKOBOAC1lJO
Скорее всето, в BaItl дкcrрибутив включена mап-crpamща hier, подробно
описывающая назначение зтих каталоrов и их OCHOBIU>IX подкаталоroв.
2.1.3. Типы файлов
С точки зрения UN1Х-подобных ОС, файл представляет собой поток или
последовательность байтов. Такой подход позволяет распространить по-
нятие файла на множество ресурсов не только локальноrо компьютера,
но и удаленноro, связанноro с локальным сетью любоro рода. Доступ
к любому такому ресурсу осущеcrWlЯется через универсальный интер-
феЙс, блаrодаря чему. запись данных в файл, oтnpaвкa их на физическое
уеrройство ИЛИ обмен ими с дрyroй работающей проrpаммой происходит
аналor'ично. Это очень упрощает орrанизацию naнlU>lX и обмен ими.
В ОС Linux можно выделить следующие Тltпы файлов:
· обычные файлы последовательность байтов (текстовые документы,
исполняемые протраммы, библиотеки и т.п.);
. каталоrи именованные наборы ссылок На дрyrие фаЙЛЫ;
. фаЙлы фllзических устройств, подразделяющихся на:
. файлы блочных уcrроЙcrв, драйверы которых буферизуют ввод-вы-
вод с помощью ядра и
. фаЙлы байт-ориснтироваюrых' или символьных, устройств, по-
ЗВОШIЮЩIIX связанным с ними драйверам выполнять буферизацию
собственНЬ!МИ средствами;
. символические ссылки (symlink, symbolic link);
. именова»ныс каналы (патоо pipes);
. rнезда (sockets).
Обычн..... файпы м КаТало....
Свойства (атрибуты) файлов и каталоrов можно вывести lIа терминал с
помощью команды 15 с ключом l:
$1е 1 /hоmе/dеn/RЕЛDМЕ
rWХrХl"-" 1 den users О РеЬ 14 19: 08 /home/den/README
Что ЗТО за свойства'l
Первый символ выведенной строки, 11 данном случае дефис, обозначает
тип файла. Друrие значения зтоro свойства: d каталоr, Ь БJ10'!Ное
устройство, с СИМВольное устройство, I символичсская ссылка, р
именоваНIIЫЙ канал И s rнездо.
Следующие 9 символов означают права доступа к фаЙлу. Они делятся
на три тройки, обозначающие права: владельца, членов ero rруппы и
всех остальных. Внутри каждой тройки может присутствовать или от-
100
Ошва 2. Файловая система иnих
сутствовать: право чтения (r), заПИСII (w) и исполнения (х, от ехеси/е).
Отсутствие права обозначается символом дефиса. С фаЙлом README из
нашеro примера владелец (в общем случае, пользователь, создавшиЙ ero)
имеет l1рапо делаТh псе, что yrOJlHO; 'U!eHbl ero rрупnы только читать и
запускать фаЙл на выполнение; все остальные только читать.
О следующем СБойстве, количестве ссылок на файл, будет сказано в па
раrpафе о символических ссылках.
Далее указаны имя владельца файтl и IIМЯ ero rруппы; размер файла в
баЙтах; дата и время последней модификации 11 имя файла.
Для каталоrа вывод команды Is пыrлядит так же, но зна'lение некоторых
свойстп отличается.
$1в l a (home(den
drwx 3 den users
drwxrxrx 4 root root
[. ..]
409БFеЬ 14 19:02
4D9БFеЬ 02 11:32
Ключ a нужен, чтобы УВlщеть псевдоподкаталоrи «.» И «..» (их имена
начинаются с точки, поэтому эти файлы скрыты).
Бит чтения п правах доступа означает право просматривать содержание
каталоrа, записи право создавать и удалять фаЙлы в каталоrе, испол
IlеlШЯ право переходить в этот каталоr (делать ера своим текущим
каталоrом).
Файлы физкческих устройств
Все подключенные к компьютеру устройства понимаются операцнон-
ноЙ системой как файлы: вывод информалии на терминал, печать на
нринтере, отправка почты все ЗТО, С точки зрения ОС, есть запись в
фаЙл. Технически фаЙл устройства ЭТО коммytfикационмый интерфейс
драйвера, ведающеro взаимодействием с этим устройством. Больщинство
TaКllX файлов располаrается в каталorе (dev.
3аrляните в этот кзталоr, введя КОМ311ДУ Is -I/dev. Вывод зтой команды
займет несколько экранов, что создает повод для знакомства с комаМ-
дойфильтром more, выводящей поступающие к ней на вход данные по
одному экрану за раз:
$ 1е 1 Jdev I more
Чтобы увидеть следующий экран, нажмите пробел; чтобы прернать pa
боту команды Ctrl+C. О символе вертикалыюй черты, разделяющей
команды Is и more, подробнее сказано н п. 3.3.1.
Об именах устройств, соответствующих разделам жесткOI'О диска, сказано
в rлане 1. В следующеЙ таблице приведена краткая справка по именам
101
UNUX: полное руководство
друrих '!асто используемых устройств. Символ N означает номер устрой-
ства в rруппе одно'mпных с иим устройств.
Наиболее часто испол&эуемые стандартные нмвна устройств
То6лица 2,2
ФаЙл УстройСТ80
ntlll ПУСТQе У'::ТpQЙСТВD. Вседанны.е. JaЫJWАИМblе а Hero, npocro исчезаюТ.
УДClбно ИСПО.f1ьзовать еrсэ дnя вывода ненужнl:.IХ сооБЩfJt1ий
t;ОЩ;QI СИСiQМtщ.Ц комсопь, Т.в. ФYl31111.113Сl(И flOДК1lIQ'4eHHI>I& Itnцеиа.тура. и монитор
ПОЛЬЗО8аfепьскаЯ(8ирtya1Jьная} коtibDЛь. Unux ПОДЦерЖИМQТ до 61'31(1/1)1: ОНСОl1ей.
ttyN .o.nя переll1lЮЧIНИR М&ЖдIj кот-орымислуж.ит комбинация кnа.виш Alt+Fn. rae n
число D'r Al,l 6
p!$fN ВиртуапыolЫЙ fерМин&lI. ПроrРЗММ8 rрафичеСj(оrо режима, 8 окне lCоторой MO)l(I10
роБQтвн, ка!': в КОНСОЛИ
mош;еN Мышь
:;ШdiоN Эв.ук(}rш IG1pTi"I
tlySN п()слвдоs.a-юпыiйй порт. Фnйn /dev/ttVSO (:ЙOТ9TcТ&yeT порту СОМ1 в MSOOS.
/dev/nys, порту СОМ2
tpN Пар.'НJЛIIЬНЫЙ порт
cuN Сnвциа/)Ьtlое ус1РQйсreo Д(11'1 рttботы (; модемоМ
elhN Сетевая плата
tdN ДИС';О80Д МА ri'!бкиХ: Д\о1СКОВ. ПервОму, 10 @СТЬ Д:. COOfНTCT1IYBT /dev{fdO.
ДJ'I" В: И-СI1Qльзуеrс иМя IdeV/fd1
MxN Жесткий ДИСk с ИМТерфвйсом IDE. rдe)( БУК8а, 06оэначаю номер T8ICoro ДИC1l:3
(не.ине..р с «1, N I-IОмер радела на Acl(e
sdxN Жес1lCий диск с I"Iнт"рфейс:ом ОСЭ!
Вместо ра:змера файла команда Is вьщает ДМ числа. Эrо так на:зываемые
старшиЙ и .шадшиЙ номера устройства. Старший номер песет информацию
о драЙвере, к которому отnосиТСя данный файл, а младlIIllЙ помер указы
вает, к какому именно из однотиrШЫХ устройств следует обрашаться.
Жесткие и симвопические ссыпки
Жесткая ссылка является просто друrим именем для исходnоrо файла.
После создания такоЙ ссылки ее невозможно отличить от ИСХОДНОrО
имени фаЙла. "Настоящею» имеии у файла нет, точиее, все такие име
иа булут настоящими. Комаида Is показывает колнчество нменно таICИХ
жестких ССЫлок. Удмение файла по любому из ссо нмен уменьшает на
единицу количество ссылок, I{ окончательно файл будет удален только
тоща, KorAa это колнчество станет равным IУЛЮ. Поэтому удобно ис
пользовать жесткие ссылки для тоro, чтобы предотвратить случаЙное
удаленне важноrо фаЙла.
102
fлэва 2, Файловая система Unux
Создадим жесткую ссылку на фаЙл README и посмотрим, что IIЗмени
лось в ero СВойствах:
$1" /home/de"/README /hОП1е/dе"/rеаdmеtоо
$15 1 /home/den/README
rwxrxrH 2 den Users О F'eb 14 19: 08 (home(den/README
Жесткую ссылку МОЖIIО создавать в любом каталоrе, 110 обязательно lIа
том же физическом 1I0сителе (то есть в той же фаЙловоЙ системе), что 11
JfСХОднh/ЙфаЙJI О ПрИЧИllе этоro будет сказано в п. 2.2.1.
Дру'.оЙ тип ССbIЛок представляют собой СllМВOJIические ссылки. По Ha
значению они аналоrичны ярлыкам в ОС Windows: указывают на фаЙл,
расположенный rде уrОДIIО (наПРИIер, на съемном носителе), и после
удалеllJlЯ такоro файла ил!! размонтирования съемноrо носителя стано-
пятся бесполезны.
Символическая сеылка создается тоЙ же командоЙ In с ключом s:
$lп з /tюше/dеп/RЕАDМЕ /homejden/do.not..readme
$1э 1 /home(de"/do.not.readme
Irwxrwxrwx 1 den users 16 [еЬ 14 19:17 (home/den/do.not.
readme > /horne/den/README
в поле имени фаЙЛа после стрелки указано ero иастоящее имя. Права
доступа у всех символических ссылок одинаковы и не значат ничеrо:
возможность доступа к файлу определяется правами исходиоrо файла.
Заметьте, 'rro в отличие от фаЙЛаориrинала фаЙЛССblЛка имещ ненулевую
длину: в нем хранится абсолютное имя исходноrо файла. Попытайтесь
lIывести фаЙЛ.ссылку на экран с помощью команды cat, И вы увидите
содержание ИСХОlIноrо, пустоrо, фаЙла:
$ cat /home/den/do.not.reade
$
Значение самой ССblЛКИ, то есть имя фаЙла, на который она ссылается,
можно узнать с помощью команды readlink.
СJIмволичеСКl1е ССbUlКИ на каталоr создаются а nыrлядят 1."ОЧНО TaI<. же,
как символические ссылки на обычныЙ файл. Можно создать и цепочку
ссылок иа ссылки: ядро ОС проследует по всей цепочке и в итоrе под-
ставит вместо ссылки имя исходноrо фаЙла.
Можно даже закольцевать такую I1СПОЧКУ:
$ touch а1
$ 111 э аl а2; rm аl
$ 1п B а2 а1
$ 18 1 а? # ЭТО шаблон имени. Ему соответствуют все имена
из двух букв. первая «а»
103
LINUX: полное Рl'!'оводсmо
al > а2
а2 > а 1
$ cat al
cat: al: Тоо тапу levels of symbolic links
Практический смысл этоrо упражнения убедить вас в том, что Linux
корректно справляется с разрешеJUIем ссылок даже в намеренно HeKOp
ректной ситуации.
Символическая сСЫЛКа На каталот может участво1l3ТЬ в 06раЗОllаlUlИ пол
иоrо имени файла, но есть одна тонкость; по ссылке нельзя проследовать
обратно в направлении кория дерев;!. кзталоrов. Вместо псевдоподкатало
ra «..» подставляется родительскиii аталоr каТЗJ!оra-ориrинала. Так, еСJШ
n домашнем каталоrе UWlЬзователя ivun есть ссылка на домашний каталоr
пользователя den, то путь /hоmе/ivап/Jiпk 10 den home/.. эквивалентен не
/homeiivan, а Ihome/den/.., то есть /home.
ИменоваНllblе каналы
Этот ТlШ файла еще называется буфером FlFO (First ln Firsl Oul).
Через файлы TaKoro типа два незl1ВИСИМЫХ процесса (две работающих
nporpaMMbl) MOryт обмениваться ЩUiIJЫМИ: все, что записано в файл одним
пронессом, может быть прочитано оттуда друrим. Именованный канал
создается командой mkfifo.
f'нeэда
Механизм rнезд (сокетов, sockets) впервые появился в версии 4.3 BSD
UNlX (ветвь UNIX, начавшая развиваться в калифорнийском универси-
тете Беркли). Позже он превратился в одну из самы){ популярных систем
ceTeBoro обмена сообщениями, реализованную во мноrих, не только
UNIХподобных, операuионных системах. В честь создателей этот Mexa
низм до сих пор называют Berkeley SockelS.
Собственно rнездо ::но абстрактная конечная точка ceTeBOro соеди-
нения. Процесс отправляет данные в сеть, ЗЗlшсывая их в файл rнезда.
При ЭТОМ проuессы, установившие свлзь через пару rnезд, мотут быть
запущены как на разных компьютерах, таК и на ОДНОМ,
Межпроuессный обмен через rнезда используется такими стандарты-
ми компонеНтами Linux, как служба учета syslog и оконная система Х
Window.
104
rлаВ8 2. Файловая система Unux
2.1.4. Команды работы с файлами и каталоrами
Предварительно замечу, что командой в ОС Lillux назьшается все, что
может быть ВЫПолнено: исполняемый файл, встроенная команда текущей
проrpаммы и даже формируемая на ходу последовательность символов.
Синтаксис обычной команды:
имякоманды [короткиеключи] [длинныеклюqи] [aprYMeHTbl].
rne в квадратные скобки взяты необязательные данные. Ключи можно
указывать в любом порядке, разделяя их пробелами. AprYMeHTbl тоже
отделяются друr от дрyrа пробелами.
Имена коротких ключей, или опций, состоят из одной буквы, перед
которой стоит символ «» (дефис). У ключа может быть свой apryMeHT.
Короткие ключи, у которых. нет aprYMemoB, можно соединять [юд одним
дефисом: так, команда 15 1 a d эквивалентна команде 18 lad.
Имена длинных ключей это осмысленные слова, перед которыми стоят
два символа «» (дефис). Большинство команд понимают ключи ..belp и
'.usage, требующие вывести краткую справку об использовании команды.
Необязательный ключ «» сиrнализирует об окончании спиека ключей
и начале apryмeнтoB.
Справку о ключах и арryментах команды можно ПОЛ}'ЧIffЬ по команде
шап.
1екущиiilкатапоr
Текущий каТЗl10r это каТЗl10r, от KOToporo ОТС'lитываютс ОТНОСlffель
ные пyrи. В каждый момент временн с каждоll работающей проrраммой,
D том числе с командной оболочкой. связан единственный такой каталоr.
Узнать, какой каталоr сейчас вляется текущим, можно С помощью KO
манды pwd без apryMeIПOB.
Сменить текущий каталоr можно командой
cd [НО6ыйкаталоr]
Для смены текушеro каТЗl10rа на домашний каталоr пользователя можно
вместо имени HOBoro каталоrа указать специЗl1ЬНЫЙ символ : сд .
Разрешается переходить также в псевдоподкаталоrи «.» И «..». В первом
случае ничеro не изменится, а во втором текущим каталоrом станет ро'
дительский.
Просмотр содержимоrо KaTanora
Уже знакомая команда 16 [им>екатаJ!оrа 1 вьmодит ero содеР1КlШ0е
на экран. Если не укаЗЬJвать имя каталоrа, команда вывелет содержание
текушеro каталоrа.
105
lINUX: "олное pO.OДCTBO
Вместо имени каталоrа можно указать шаблон имен файлов: например,
1 s ту' покажет все файлы и подкаталоrи, имена которых начинаются
с «ту».
Подробнее об apryMeHтax и ключах команды 15 (как, впрочем, и любой
друroЙ команды) можно узнать у справочноЙ системы, набрав ком3IЩУ
тап 18.
Соэдание и удаление файла
Создать пустой файл можно командой
toucr. <имяфаJ'ЦIа>
Вообще-то она предназначена ДЛЯтоl'Q, чтобы для всех заинтересовaIOIЫX
проrpамм (например, уrwщты сборкц upoeкта make) ф!iйл ВЫI"лядeJl новее,
чем на самом деле: она меняет время последнеro изменения файла на текущее
время. Но если ф!iйла с таким именем не существует, то она еro создаcr.
Текстовые файлы можно созд:щат!>, ВJ30ДЯ тексТ С КОНСОЛИ:
$cat > he110.world
Привет!
Оказывается, команду cat МОЖI<О за.ставить не только выводить файл на
КОНСОЛЬ, но и вводить С нее. Это достиrается перенаправлением ввода-
вывода, о котором подробнее будет сказано в rлапе 8. В таком режиме
команда cat С'lИтает своими Ю;ОД!J!>lМИ данными поток баЙтов, поступа-
ющий с клавиатуры, и выводит erO. J3 указанный файл. Иными словами, в
файл записывается все, 'rro вы Пщ;ле той команды введете с КJlавиатуры.
Чтобы закончить ввод, lIажмите Ctrl+D.
Если файл с указанным именем существует, то команда cat перепишет
cro. Чтобы вместо этоrо добавить данные в конец файла, перенаправьте
ее вывод С помощью СИМ80ЛОВ »:
$cat » hel1o.world
Каталоr создается командой
шkсНr <имякаТЛQrа>
Чтобы операция создания файла или подкаталоrа ПрОlI/JIа успешно, вы
должны иметь право записи в каталоr, в котором вы ero создаете,
Удалить пустой каталоr можно командой
rmdir <имя..каталоrа>
Удаляется файл командой
пn <имяфайла>
106
rЛ8ва 2. Файловая сиспма Unux
При этом наличие прав на заШIСЬ и даже чтение этою файла не требует
ся: достаточно иметь право на запись в каталоr, rде находится этот файл.
Ключи команды rro:
. -j : требует подтвеРЖдения удалеlШЯ для каЖдО1'О удаляемоro файла.
Если вы заказали удаление rруnпы файлов (например, по шаблону
имени "т chernovik*), Tocpellll ННХ можеТ оказаТься файл, который
вам ещецужен: безопаснее применить ключ i. Подтвердите удаленне
каждоro файла или откажитесь от ието, введя символ У или N cooт
ветственно;
+ -f : не запраШlшать подтвеРЖдения, не выводить сообщениЙ об
ошибках. Если указаны оба КJ!юча i и f, то срабатывает ПОCJ1едниЙ
указанныЙ;
+ -1': рекурсивное удаление каталоrа со Dсе1'fИ сто подкаталоraми. He
IIУСТОЙ I<аталоl' можно удалить только так.
КОПИРОllllllие и перемещение фаЙ11а
Файл копируется командой ер. Формат этой команды:
ер [ключи} <исходныЙ...файп> {<файл.......;назначе:ния> I <kатаЛОI'
назначения»
Полезные КЛЮЧИ команды ер:
+ -j : требовать подтверждения перед перезапнсью существующеro
файла;
+ -f: не требовать подтвеРЖдения;
+ -1': реКУРСIШIlО копнровать каталот со всеми 110дкаталоrами;
. -а : сохранять атрибуты файла;
. -d: копировать символические ссылки вместо файлов, на которые они
указывают;
. -S : создавать символические ссьшки вместо коnировашН! (I жесткие);
. -u : не переписывать существующиЙ файл, если он модифиuирован
позже
+ -х : IIfНОрИроВ3ТЬ подкаталоПl, расположенные в друrиХ файловых
системах.
Кстати, команда са' с перенаправленным выводом тоже может скоnиро
вать файл:
$са\: hel1o.world > copy.of.hell0.world
Команда mv персмещает или nереименовывает фаЙлы, Формат команды:
mv [ключn] <ИС)с'оДныйФаЙJI> «Фай,п.на.З1iачения> 1
<каталоrназначения>)
Ключи i, f имеют тот же смысл, что для команд ер и rm.
107
UNUX: попное руководство
Просмотр текстовых файлов
Перед тем, как просматривать файл, неlIЛОХО было бы убедиться, что он
действительно является текстовым, то есть содержит только печатные
АSСП-символы, Для про верки типа файла служит команда
file <имяфаЙда>
Если ее ответ содержит слово «text», то файл можно безопасно вывести
на терминал. Вывод двончиото файла может сбить кодировку так, что
вместо набираемых на клавиатуре СI!МDОЛОВ вы увидите черт знает что.
Если это все же случилось, введитевСдепую команду
$ tput .teset
(или, если вы работаете в rpафическом режиме в окне виртуальноrо тер-
минала, RыбеРl11'" R ero меню команду' Терминал I Сброе и о"метка для
среды GNOМE или Edit I Reset & С\еат TermiDa\ для среды KDE).
Кроме уже упомянутой команды c:at, для вывода файла на термипал
служат команда
more <имяфайла>
н ее улучшенный вариант less.
Команда-фильтр тоте разбивает поток cBoero вывода на порции разме-
ром в экран и ожидает ввода ПО!Ц>!Jователя для отображения следующей
порции. Чтобы увидеть следующую 'строку, ,Шжмите <Ввод>; чтобы
увидеть следующий экран, нажмцте <пробел>; чтобы прервать работу
команды, нажмите <а> или Ctrl+C.
Утилита less позволяет листать ВblIIОдИМЫЙ файл не только вперед, но и
назад (клавишами PgDn и РgUр)"перемещаться к указанному месту в
файле, искать по образцу и дает еще MHorO полеЗlfЫХ возможностей. В
общем, тап \ess.
ЕСЛll интересующая вас информация находится в конце файла (напри-
мер, вы хотите просмотреть журнал системных сообщений messages в
каталоrе /varllog, чтобы узнать, что именно только что пошло на-
перекосяк), 1'0 вам поможет команда
tail [NJ [имяфайпаj,
rдe N ЧИСЛО выводимых строк файла, считая от последней. Коман-
дой
head [NJ [имяфайлаj
можно просмотреть, наоборот, только первые N ero строк. Значение N
по умолчанию равно 10.
108
rЛава 2. Файловая система Linux
Если вы хотите просмотреть не весь файл, а только те ето строки, которые
содержат заданный фраrмент текста, используйте команду-фильтр grep.
Например, я хочу смеНlПЬ клавишу переключения раскладки клавиатуры
в rрафическом режиме. Я знаю, что строки конфиryрациоиноrо файла
/etc/Xll/xorg. cO!1f, имеющие отношение к клавиатуре, содержат
фраrмент ХКВ... а может, Xkb }ии ""Ь? Неважно:
$ grep in хЮЬ /etc/Xl1/xorg.conf
[.. .]
65:0ptio!1 'XkbLayout. 'us,ru'
66:0ption 'XkbOptions' 'grp:shifttoggle.grpled,scroll'
Я указал ключи: -i, требуюший иrнорировать различия реt'истра в образце
для поиска и файле, и -п, требующий выводить номера строк, в которых
встречается образец xkb.
ДтIя всех команд ключи без apryмeHTOB можно соединять: запись -in ЭК-
вивалентна записи i n.
Редактирование текстовых файпов
Вышеприведенный при мер показывает, что переключением расклад-
ки клавиатуры в rрафическом режиме управляет комбинация клавиш
Sttifl+Shift. Неудобно: в консольном режиме я привык к Ctrl+Shift. Надо
заменить значеиие shifttoggle иа ctrlshjfttoggle. Такие мелкие правки
конфиrурационных файлов обычное дело для аДМИI!Ilстратора, по-
этому средство их внесения присутствовало в UNIХ-системах всетда.
Это консольный редактор vi, ВХОДЯЩИЙ в каждый дистрибуrив Linux
(8 дистрибутив Fedora Core 3 включен ею улучшенный вариаlП vim, но
команда у! тоже доступна: она стала псевдонимом для команды yjm).
Итак, я делаю на всякий случай резервную копию конфиryраЦ1l0нноrо
файла / ete / Хl1/ xorg . eonf И приступаю к el'o редактированию:
$ ер /ete/Xll/xorg.conf /etc/Xll/xorg.conf.sav
$ vi /etc/Xl1/xorg.conf
Перемещаюсь к строке 66 командой 66G (буква G заrлавная: редактор
vi различает реrистры). Клавишами управления курсором перемещаюсь
к началу слова shift.
Включаю режим вставки командой i (строчная буква). Набираю ctrl.
Выключаю режим вставки клавишей Esc. Сохраняю изменения командой
:W. Выхожу ПО команде :q.
Сложно и на вид бессистемно? Да. Зато есть ком аида :help.
Как полноэкрюшый редактор. vi может находиться в одном из двух ре-
жимов, В режиме вставки вводимые символы поступают в редактируемый
109
LINUX: полное РУКОВОДСТВО
фаЙл, в командном режиме ОIlИ воспринимаются как команды. ПереЧIIСЛЮ
коротко самые ynОl'ребительные КОМаНДЫ редактора vi:
РЕЖИМ ВСТАВКИ.
Включеиие реЖПМа вcrавки;
. i в текущей позиции курсора;
. 1 перед nepUblM непроБМЪ1lЫМ символом в текущей '1'pOKe;
. W U IIОВОЙ сТроке, добавленной после текущей;
. W в IIОВОЙ строке, добавленноЙ перед текущей.
Выключение режима ВСТавки:
. <Esc>
Кома иды режима вставки:
. Ctrl+a повторlПЬ предыдущую вставку;
. Clrl + у вставить символ, находящийся lIад курсором
(в преДЫДУщей строке);
. Clrl + е вставить символ, находящийся под курсором
(в следующей строке).
КОМАНДНЫЙ РЕЖИМ.
Удаление (эдесь и далее N эточио):
· N х N симводов под курсором И справа от Hero;
. N Х N С8МВQЛОВ слева от курсора;
. N dd N crpoK;
. D до КОIЩа текущей строки;
. N D ДО КОIЩа текущей строки и еще N-l строку.
Копирование и вставка crpOK:
· N уу ВЗЯТЬ D буфер N строк от текущеЙ и ниже;
. р вставить содержимое буфера после текущей строки;
. Р А(,'ТВВ1!Th содержимое 6уфера перед текущеЙ строкой.
ПОИС/< и переход:
. N G переЙти к строке с lIомером N;
. $ G перейти к последнеЙ СТРОКС фаЙла;
. I<образсц> искать образец вниз от курсора;
. ?<образеll> искать образец вверх от курсора;
. n nOBTopllТL поиск в том ЖС направлении;
. N (буквально «N»): повторить поиск
в обратном направлеНIIИ.
Сохраненне и выход:
. :W сохранить текущиЙ файл;
. :W <11М>!> сохраюlТЬ под новым имснем, если файл <11М>!>
еще не существует;
110
. :w! <ИМЯ>
rлзва 2; Файловая система Lirшх
. :q
. :q!
. :wq
Ращое полезное:
. N u
. N CtrI+r
. U
. N r <символ>
. N»
. N«
. :sh
. :!<команда>
сохранить I!ОД новым именем, переписав
существующнй файл;
выйти;
принудительно выЙти без сохранения;
сохрnнить и выйти.
отменить последние N изменениЙ;
вернусь последние N отмененных измеиений;
отменить изменения в последней строке;
заменить N следующих символов на <символ>;
добавить отступ (ТаЬ) в N СЛСДУЮЩИХ строк;
удалить OJIllН otcryп (ТаЬ) из N сле.llУJОIДИХ строк;
временно выйти\! оболочку (вернуться exit);
ВЫПOJlнИ1'Ь команду оболочки. .
Поиск фаitnОIl
БыстрыЙ поиск имени проrраммы можно выполнить прямо из J;:омандной
С1'роки: для 3TOro введите первые буквы нужноЙ вам команды инажмите
<ТаЬ>. Если введеиные вами буквы ОдНозначно определяют комаиду или
исполняемый файл, то ее ИМЯ появится в командноЙ строке. Эта функция
называется автозаnолнеlluем командной cmpoKu. Если Не появилось ни
чеro, нажщrre <ТаЬ> еще раз для вывода списка всех доступных команд,
начинающихся со введенных букв. Если таких команд окажется больше
сотни, у вас попросят подтверждения TOro, что ВЫ действительно ХОТlIте
увидеть их все.
В разных каТ8Лоrах может оказаться несколько исполняемых фаЙлов с
одинаковыми именами. Какой из них будет исполнен? На этот вопрос
отвечает КQмзнда which. Она просматривает каталоrи, перечисленные в
переменноЙ окружения РАТИ, в поисках ИСПО)1няемorо фаЙЛа С указан
иым именем, 11 выводиз' абсолютное имя первоrо встре'.енното ИЗ них.
Команда whereis шцет не только исполняемыЙ файл, но 11 ето справочные
страницы и исходный код.
Команда locate ищет фаЙл по образцу имени, опираясь на свою базу
данных о фаiulОВОЙ системе. Ее вариант с повышенной безопасностью
slocate сохраняет данные о правах доступа к файлам, так что полыова
тель не увидит тех фаЙлов, на которые у Hero нет прав. В дистрибутиве
FedQra Соте 3 команда locate представляет собоЙ символическую ссылку
иа утилиту slocate.
Команда find ищет фаЙл по ero атрибутам в указанном каталоrе и ето
IЮДlCJll'алотах на зiданную rлубину. Например, при установке операци.
онной системы я отк1Iз8лся устанавливать файловый менеджер Midnight
111
LINUX: полное рУКОВОДОТВО
Commander, а теперь он мне понадобился. Для: каждоro из 4 компахт
дисков дн'Трибyrива запускаю команду поиска по шаблону имени «тс.",
то есть всех файлов, имена которых начинаются с тС:
$find /media narn тс'
/media/cdrecorder/Fedora/RPMS/mc4.6.1O.8.i3B6.rpm
В итоrе на ТРе1ъем диске найден пакет RPM. Об установке проrpаммноrо
обеспечения из пакетов RPM будет сказано в rлаве 7.
Изменение прав доступа к файлу
Как Мllоrопользовательская операционная система, ОС Linux содержит
механизм разrраничеJ:IИЯ доступа кданным, ПОЗВОЛЯЮЩИЙ как защитить
данные одноro пользователя от неже.naтельноJ'O вмешательства друrих,
так и разрешить друrим доступ к этим данным ДIIЯ совместной работы.
Как уже сказано, любой ресурс компьютера под управлением ОС Linux
представляется как файл, поэтому мы будем roворить только о правах
доступа к файлу.
По отношеНlIЮ к файлу пользователь может входить в одну из трех Ka
теrорий: владелец, член rpуппы владе.льца, все остал.ьные. Для каждой
113 этих катеroриi\ есть свой набор прав доступа.
Первым владельцем файла становится ero создатель. Дальше файл можно
передать apyroMY мадельцу или в друryю rруппу командой
chown (ключи) <новыйпользователь>{:новаяrрулпа] <файл>
или
chgrp [ключи) < новаяrpуппа > <файл>
в некоторых peaлизatЩЯX Linux neредщь ф3йл друшму !lЩIДельuy \!меет право
только сynерпользователь, а в дрyrиx также ero текущий владелец.
Набор прав доступа состоит из прав на чтение, заШIСЬ и исполнение фай
ла. В символьном представлении он выrлядит как строка «rwx", rде BMe
сто любоrо СИМlюла может стоять дефис. Буква означает налИЧИе права
(т чтение, w запись, х исполнеиие), дефис ero отсутствие.
Очевидно, что ЭТИ три бита MorYT быть записаны еще и как !юсьме
ричное число. Так, права доступа rx (чтение и ИСПОЛ11ение без записи)
понимаются как три двоичные цифры 101 или как восьмеричная цифра
5. Численное представление прав доступа называется абсолютным, или
ДВОИЧIЮЙ маской.
Потшя строка прав доступа в символьном представлении устроена так:
<пра ва8ладельиа><праваrРУППЪ1><npаваОС'I'аJ1ЬНЫХ>
112
rлава 2.Файnовая система Linux
В абсолютном предстамсmш права мздельца являются старшим разрядом
lIос!>меричноro числа, права rpynnw вторым и права остальных тpe
тьим. Так, права rwxrxx ныrядят как число 111101001, или 751.
Команда изменения прав доступа chmod ПОllимает как аБСОЛЮТllое, так
11 символыlеe указание пран.
Назначим файлу Ihome/den/README права rwrш, то есть разрешим
себе чтение и запись, rpynne только чтение, остальным пользователям
ffичеro:
$сд * переход в свой ДQМашний каталоr
$chffiod 640 README # 110 100 000 == 640
$ls 1 READМE
rwr 1 деп users о Feb 14 19:08 Ihome/den/README
н СИМВOJ!Ьном представлеJllЩ МОЖIlО ЯJ!1l0 указывать, кому какое право
мы хотим добавить, отнять или присноить. Добавим право на исполнение
файла README rруппе и всем остальным:
$chffiOd go+x README
$ls ..1 README
rwr'xx 1 den users О Feb 14 19:08 Ihorne/den/README
Формат СИМВОЛЫlOrо реЖJlма:
chmod <каеrория><действие><наборправ> < файл >
Возможные значения apryMeHToB команды представлены в таблице 2.3.
ApryмeNTht КO....вl-(ltЫ cJJтod в СИМВОЛЬНОМ режиме Тsблица 2.3
Apryмeкт ЗН8Ченме
u Владtlлвц
Кап.wОрИR 9 rpynna 8лад6JII:oЦВ
о Про-.ие
. Все польз.оватепи, то есть.в.,. эквивалентно ..ugOIl
+ Добавить набор прае
ДеЙСТ8ие . \J1менить набор прав
= Наэна'tllltь НАбор прав.
r Право tt8 otrение
w Право tf8 $Опись
Х Право не. исполнение
s Право СМенЫ идеНtИфИlCаТОрЗ. rюftЬ30!3'ател ЛИ rpYnnbI
Првео Бит ПрИl1ИnЧи&осТ\1 (stlсkyбит}
t
u Та..:ие ж,.е права, ка", у владельца
9 ТЭli\ие же права. как у (рппы
о Текие :же права, как у ЩJIJИJC.
113
LINUX: полное РУКОВОДСТВО
Назоанне бита прилипчиllOcrи унаследовано от тех времен, КОсда объем
оперативной памяти был маленьким, а процесс подкачки медленным.
Этот бит позволял оставлять небольшие часто используемые проrраммы
В памяти для ускоренlIЛ их запуска. Сейчас ero значение переосмысле
но: этот бит, установленный для каталоrа, приводит к тому, что удалять
фаЙлы из этою каталоса мосут только владелец файла и владелец ката-
лоrа. Обычно это используется в катаЛOl-ах, открытых для записи всем
(например., / trnp).
Права смены пользователя и rруппы (SUID-бит и SGID-бит) означают
следующее. Обычно исполняемый файл (просрамма или командный
сценарий) получает те же права на доступ к файлам, что и пользооа'
тель, который запустил есо на выполнение. Но у этоrо файла есть еще
и владелец, полномочия которосо MOryT быть совсем друrими. Наличие
односо из этих битов пОзвОляет выполняющеЙся протрамме пользован,ся
пОлномочиями владельца прorраммноrо файла или члена ero труппы.
Так, команда su (sиbslitllte IlSer), позволяющая «стать» друrим пользовате-
лем без завершения cBoel'o сеанса 11 входа под новым именем (это нужно,
например, чтобы быстро оыполНlПЬ административнуюзаДдЧУ от Ifмени
суперпользователя), имеет следующие атрибуты:
$15 1 'which аН"
rwsrxrx 1 root root {размер} дата l время 1 /bin/su
Биты «х» сообщают, 'ПО любой пользователь может запустить эту про-
rpaMMY, а бит «8» О том, ЧТО во время ее выпOJUlС.tIЩI ои будет палъо-
ваться правами суперпользователя ТОО! (если, конечно, знает пароль).
Обратите IIнимаНl1е на примеиение обратиых апострофов: они нужны для
тою, чтобы направить вывод команды which На вход команды Is.
Следует учитывать, что протраммы, требующие установлеиия SUID (IIЛИ
SGID) ДЛЯ своей работы, являютсл потеНЦllальнЪJМИ дыраМIl в системе
беопасности. Пред ставьте такую ситуацию: у вас в системе установлена
проrрамма superformat, которая предназначена для форматирования
дисков. Создание файловой системы, пусть даже на дискете, это при-
ВНJlеrllрованная операция, требующая полномочий суперпользователя.
Прll установке этоЙ проrраммы для иее сразу устанавливается право
SUID, чтобы разрешить пользователям форматировать дискеты. Поль-
зооатель запускает ее для форматироваиия дискеты. Проrрамма запуска-
ется, подучает права тооl, форматирует дискету и нормально завершает
работу .
А если она завершает работу аварИЙно, например, по ошибке переполне-
ния стека (такие случаи отмечались)? Тата запустивший ее пользователь
IIОЛУЧИТ права roо!! Некnалифицированный пользователь справами rool
114
.....
.....-
Пава 2. Файловая система Linux
)то HaMHoro хуже, чем просто крах системы. Помните о П<JТeНЦIlальной
опасности при работе с ТЗIQ\МИ проrраммами и по возможности избеraйте
использования прав SUID и SG1D.
СправедливО<.'Тн ради нужно заметить, что ряд системных прU!'рамм (в
частности, демон установления интернетсоединения pppd) разрабатывал
ся с учетом прав SUID и SGЮ, и эти проrраммы являются максимально
защищенными, хотя полной уверенностн в этом нет. Поэтому исполъзо
вЮ'Ъ прапо SUIO нужно только в самЫх крайних случаях.
Я IJОЗВОЛЮ себе сделать еще несколько замечаний отнщ:ителъuо прав
доступа SUID и SG1D:
1. Лучше не ИСПОЛЬЗовать проrpамМЫ, требуюшие прИВlfлеrий, на cepBe
ре, точнее, не разрешать обыкновенным пользователям их ИСПОЛ1>ЗО-
вать. Использование права доступа SUIO вы можете ссбе позволить
только На смей домашней машине, например, для установления Toro
Же КОММуТнруеМОТО ооединения, чтобы каждый раз при подключении
к Интернету не 8BOiLl1n, команду su,
2. Перед использованием nporpaMM, требуюшю< ПрllВилеrнй root, убе-
дитесь в их надежности. Если проrpамма получеиа из неиадежноrо
ИСТОЧljика, лучше ее не ИспользоваТЬ. Надежными IIСТОЧlUlками
считаюТСi! С8Йты 11JD\ FТP-cepBepы разработчиков nистрибутивов
Linux. Желательно п<щучить исходный код такой проrрзммы, чтобы
убедиться, что ОНа не ПРОИ380ДИТ какихлибо несанК:ЦИOIшроваJШЫХ
действий.
3. Нет ни одноЙ причины, по какой нужно было бы разрешить исполь-
зование SU1D-проrpаМ!4, в домашних каталоrах пользователеЙ. Длi!
разделов, 8 которые Ра:эрешена запись обыкновенным пользователям,
установите опцию n<)tiid В фаЙле I есеl {БсаЬ.
2.2. Изнанка файловой системы
с то'!к:и зрения операЦJЮННОЙ системы, под файловой системой по-
нимаете!! внутренняя УПРЩ!ЛllЮщая структура, заведующая хранением
данных на физическом lIосителе, IIХ поиском, извлечением и записью
110 запросам !IporpaMM. Такие ynрамяющие cтP:l'iCТYpы в !QIЖДОМ семей-
CfBe операЩ!ОlЩЩ СИСТI)М строятся ПО СХОЖIIМ ПРИЩ.l.Иl1аМ. Так, OOS/
Windows используют файловую систему F А Т с вариантами FA Т32 11 VFAT.
ФаЙ1l0вые системы UNIХ-подобных ОС разнообразнее, НО тоже Moryт
быТЬ объединены в одно семейство. Linux умеет работать со множеством
фаЙловыхсисте!J, как с родными, и с еще болышlМ их КОЛlfчеСТ80М об-
мениваться данными.
115
...., ."
UNUX: полное руководства
l!i 8IJ ' ]"I'II J.:RI:)"[:a'
.. Хотя существуют средства устно..... Unu. в раздел FAT /FAH2 Un4W1n, " нв
! реКQМендую 1.'1)( использовать, Т.к. в"эroм сnучае Linux работает-крайне естабильно
и медленно.
Типичным представителем файловblX систем UNIX является «вторая
расширенная фаЙловая системз» ext2f's, основная до недавнеrо времени
файловая система Linu:x. С момеН1'а Вl>IXода ядра версии 2.4.16 она начала
уступать место «файловой систеМbI ЩJ умолчанию» полностью cOBMecТlI
мой с ней системе ext3fs. Рекомендуется использовать имешю ext3fs, и
ИМеННО она устанавливается по умолчаш!Ю инсталляторамп большинства
современных дистрибyrивов.
2.2.1. Файловая система ext2fs
предшественница ехtЗfs
Рассмотрим лоrическую структуру Ф;lЙ.ловой системы ext2fs.
Физически жесткий диск разбит на сектора размером 512 байт. Первый
сектор дисковоrо раздела в любой файловой системе СЧИ1'ается заfJJУЗОЧ
ной областью. В первичном раздеде эта область содержит заfJJУЗОЧНУЮ
запись фраrмент кода, который инициирует процесс заrрузки опера
щюнной системы при запуске. На дрyrщ< разделах 31'а область не исполь
зуется. осталыo>еe сектора объедlщены в )lOrическяе блоки размером 1,2
или 4 килобайта. Лоrический блок еСТЬ наименьшая адресуемая порция
данных: данные каждоrо файла занимают целое 'Шсло 6локов. Блоки, в
свою очередь, объединяются в fJJУППЫ блоков.. rруппы блоков и блоки
внутри rруппы нумеруются последовательно, начИная с 1.
Раздел диска, на котором сформирована файловая система ext2fs, может
быть представлен такой схемой:
Структуры данных, применяемые при работе с файловой системой ext2fs,
описаны в заroловочном файле /usr/inclHde/ linux/ext2fs. h.
Суперблок служит начальной ТОЧI<ОЙ файловой СlIстемы и храИIfТ всю
ннформацию о ней. Он имеет размер 1024 баЙта и располаrается по сме.
щению 1024 байта от начала файловой системы. В каждой rруппе блоков
он дублнруется, что позволяет быстро восстановить ero после сбоев.
В суперблоке определяется размер файловой системы, максимальное
число файлов в разделе, объем свободноrо пространства и содержится
информапия о том, rдe искать незанятые участки. При запуске ОС супер'
блок считывается в память и все изменения файловой системы вначале
находят отображение в копии суперблока, находящейся в ОП, и зашrсы'
116
rлвва 2. Файловая система Linux
I :I
Заl"p)lЗCNныА
""<101>
Cyneрб"".
rpynna
бnсжое
I .: I ...
.....
Кonия Оnисаюш 6J!otш
rpynnы Кар", Карта Таблица
сynерблоu (\Л"""" бnо,"", lnoc>e Inode l18Н!<ыx
Рж>. 2. '. Структура фаilлoaой системы
ваются на диск только периодически. это позволяет повысить произво-
ДIIТСЛЪНОСТЬ системы, так как мноrие поJtbЗователи и процессы постоянно
обновляют фаЙJIК С друroй стороны, при останове системы cynерблок
обязательно должен быть записан на диск, что не позволяет ВЫКЛЮЧаТЬ
компьютер простым выключением питания. В противном случае, при
следующей заrрузке информация, записанная в суперблоке, окажется не
соответствующеЙ реальнощ состоянию файловой cI\cтcl\Jы.
После cynерблока следует описание (дескриптор) rруппы блоков. Хра-
нящаяс>! 11 нем информация позволяет найти битовые карты блоков и
индексных дескрипторов, а также таблицу индексных дескрщrrоров.
Битовой картой блоков (bIock bitmap) называется структура, каждыЙ бит
котороЙ показывает, отведен ли такоЙ же по счету блок какощ-ли60 фаЙ-
лу. Значение 1 показывает, что блок ЗаняТ. Эта карта служит для поиска
свободных блоков в тех случаях, KOrдa наДо выдеш[ть место под файл.
Битовая карта индексных дескриmоров вьmолняет аналОfllЧНую ФунКIЩЮ
по отнощению к таблице ИНДексных дескрипторов: показывает, какие
именно деСКРIlПТОРЫ заняты.
Каждому файлу соответствует 0)111111{ только один индекснЫЙ дескриптор
(iпode, i-узел, информационный узел), который идентифицируется своим
порядковым номеро" индексом файла. В индексном дескрипторе хра-
нятся метаданные файла. Среди них всс атрибуты файла, кроме ero
имени, и указатель на данные файла.
ДЛя обычноrо файла ИЛII каталоrа 31'01' указатель представляет собой
массив из 15 адресов блоков. Первые 12 адресов в этом массиве явля-
ются пряМЫМИ ссылками на номера блоков, в которых хранятся ланные
файла_ Если данные Не помещаются в 12 блоков, то включается механизм
косвенной адресации. СлеДУЮЩIIЙ адрес в зтом массиве ЯВЛЯеТСЯ косвен-
Ной ссылкой, то есть адресом блока, в котором хранится список адресов
следующих блоков с данными из зтоro файла.
117
UNUX: полное руководство
Сколько блоков с данными можно так адресовать? Адрес блока занимает
4 байта, блок, как уже сказано, 1, 2 или 4 килобайта. Значит, путем
косвенной адресации можно разместить 256 1024 блока. Размер фаЙllа,
заНИмаюшеrо столько блоков, считайте сами.
А еслн файл еще длиннее? Следующий адрес в массиве-указателе указы-
вает на блок двойной косвенной адресации (double indirect block). Этот
блок содержит список адресов блоков, которые, в свою очередь, содержат
списки адресов следующих блоков данных.
И, наконец, последний адрес в maCCJflIe-указателе задает адрес блока
тройной косвенной адресации, то еСТЬ,блока со списком адресов блоков,
которые являются блоками двойной кОСвенной адресации.
Пока остается непонятным, rJIe находится имя файла, если ею нет ни
среди данных файла. ни среди ero метаданных. В uNIx-подобных си-
стемах имя файла есть атрибут не ca!.l9ro файла, а файловой системы,
понимаемой как лоrическая структура каталоrО!l, Имя файла храяится
только в каталоrе, к которому файл приписан, и больше НИШе. Из этоrо
вытекают любопытные следствия.
Во-первых. одному индексному ДС1:криптору может соответствовать любое
количество имен, приписанных к разным каталоrам, и все они являются
настоящими. Количество имен (жесТl<ИХ
ссыJок)) учитывается:в индексном дескрип-
торе. Именно это количество вы можете
увидеть по команде ls I.
BOBTOpЫX, удаление файла означает про-
сто удаление записи О нем из данных KaTa
лоrа и уменьшение на 1 счетчика ССbIЛок.
Втретьих, сопоставить имя можно
только номеру индексноrо дескрип-
тора внутри одной и той же файло
вой системы, именно поэтому нель
зя создать жесткую ссылку в друrую
файловую систему (символическую
можно, у нее ДРУl'Oй механизм хранения).
Сам каталоr таким Же образом приписан
к своему родительскому KaTaIIory. KopHe
вой каталоr BcerJIa записан в индексный
дескриптор с номером 2 (номер 1 отведен
для списка адресов дефеКТJiЫХ блоков). В
каждом каталоrе хранится ССblЛка На lIero
CaMoro и на е/'о родительский каталоr
это и есть псеВДОf10дкаталоrи «.» И <..)).
Номер inodв
Дпмна записи
Дrlмиа имени фаЙдВ
Имя файла
Номер inode
дnинв записи
д.nина имени файла
Имя файла
Номер Inode
Длина записи
Длина имен,", фаЙl1а
ИМЯфаКпа
Рис. 2.2. Строение к.srалоr8
в ext2fs
118
rJ\эва 2; ФаЙJlова-;\ система Linux
Таким образом, количество ссылок на каталоr равно количеству ero ПОД
каталоroв I1JIЮС два.
Данные каталоrа представляют собой связный список с записямИ пере.
меНIIОЙ ДЛlщы и выrлядят примерио так, как на рис. 2.2.
А как же фаi!лы физических устройств? Они Moryт находиться в тех же
каталоrах. что и обычиые файлы: в каталоrе иет никаких данных, [ОВО.
рящих о принадлежноCТII имени файлу на диске или устройству. Разнн.
на находится на уровне IlНдeKCHoro дескриптора. Если iУЗ8Л обычноro
фаЙла указывает на ДИСКОВЬJе блоки, rдe хранятся 81'0 данные, то в i-узле
фаЙла устройства содержится указатель на список драliверов устройств
в ядре тот элемент списка, который соответствует старшему номеру
устройства (рис. 2.3).
и...
Номер
Ядро
Кв""",с
фа""" lnode
с"""""
. Щ)Зv.еероа
..
AEADМE
tty01 11
11
": l1li1
Т.б..ца
1пode
5n<жIo
"""""'"
ФаЙJ1(JВajt CКC't8Ma
Рис. 2.3. Разница меЖду обычным файnом и файлом устроlfСТВ8
Свойства фаi!ловой системы ext2fs:
. Максимальный размер файловой системы 4 Тбайт.
. Максимальный размер файла 2 [байт.
. МаксимацьнW\ дтща имени фаЙла 255 СlIМволов.
. Минимальный размер блока 1024 байт.
. Количество выдсляемых индексных дескрипторов 1 на 4096 байт
раздела.
2.2.2. Журнапируемые файпоаые системы
Предспuщм такую ситуацию. У вас ссть жесткий диск, скажем, на 80 [б.
СеrQДНЯ таким объемо!>! никоrо не удивишь, не так ли? Вы поленЩIИСЬ
разбить сто на разделы, и у вас есть один большой раздел, заиимающий
119
L1NUX: полное p)l1<OBOACТtlO
все ваши 80 fб. И вот в момент записи на диск произошло отключедие
питания, Хорошо, еслИ ЭТО случилось во время записи ДnHHЫX какOfО"ТО
файла, пусть и O'leHb ваЖНQI'О: файл можно восстановить хотя бы ча
СТИЧIIO, А БОТ если свет поrас, Korna операционная система записывала
метаданные, то расположение файлаиа диске перестаиет соответствовать
списку принадлежащих ему блоков в индексном дескрипторе. файловая
СИСТема может утратить целосrnоcrь, то еСТЬ такое состояиие, KorJIa JЩЖ
дый блок нринадлежит ие более чем одиому файлу (inode). В результате
вы МОЖете не дос'!итаты:я не однOl'О, а сотни фаЙЛОБ.
Признаком потери целостности служит бит чистоro размонтироваиия
(с/еа" bit), то'!нее, ero отсутствие. Этот бит сбрасывается при подключе
нии (монтировании) файловой системы в знак Toro, что файловая систе
ма сейчас используется. После успеШНоrо размонтирования файловой
системы ЭТОт б"т устанавливается снова.
Если при МOIrrировании файловой системы в процессе заrрузки операци-
онная система обнаруживает, '11'0 чистый бит не установлен, оиа запускает
средство проверки файловой системы' проrpамму fsck. Представляете,
сколько времени займет такая проверка? Даже при условии, что ошибок
будет мало Или вообще не будет, придется ждать довольно долro. А если
еще будет нарушена целостность, Torдa восстановление этой целОСТНОСТИ
займет еще несколькО минут ващеrо времени.
Все это справедливо для обычной файловой системы. Журналируемая же
файловая система перед тем, как что.то сделать с файлами, записывает
на диск Нelюе оl1ИC;Цfие ПЛВНllруемой операllИИ и ВЫ'!еркивает каждый
пункт плана только ПОсле тоro, как он успешно выполнен. Тоща после
сбоя можно будет не проверять на целостно(,'1'Ь весь оrpомный раздел, а
тОЛько просмотреть журнал и OTKaT!IТЬ незаконченные операции.
Имейте в ВИДУ, что целью журналиропания ЯВЛЯеТСЯ обеспечение целО1..'1'-
НОСТИ файловой системы, а Не сохранность пользовательских данных как
таковых.
Журналировать операции записи самих данных тоже можно: В этом случае
есть вероятность, ЧТО данные ноеле сбоя будут восстановлены. Правда,
соrласно золотому правилу механики, за все нужно платить, и [lЛатить
приходится быстродействием.
Решают ВОПроС разными ухишрениями: например. запись происходит в
МОМеНТ наименьшей активности, некоторые журналируемые файловые
системы позволяют разместить журнал на JIpyroM физическом диске. Да
н фактически время работы с журналом HaMHoro меньше, чем работа
непосредственно с данными. И, естественно, некоторый полезный объем
теперь приходится отводить под сам журнал, но еro размеры обычно Не
превышают 32 Мбайт, что по нынешним временам ие так уж и Mlforo.
120
rлэва 2. Файловая система linux
И все же лучшим средством от неожиданноrо отключения до сих пор
являются источники бесперебойноrо питания...
Современные версии ядра Linux (2.6.х) поддерживают в качестве РОДИЫХ
четырежурналируемые файловые системы; ReiserFS, ext3fs, XFS и JFS.
Из НИХ журналироваНllе данных поддержнuает только ext3fs. Список
файловых систем, которые поддерживаются вашим ядром, содержится в
файле /proc/filesysterns.
ReiserFS
Разработана Халсом РаЙзером (Hans Reiser) и ero компанией Namesys
(http://www . паrnевув. сот) и официально включена в ядро 2.4.4.
Преимущества данной ФС в основном проявляются В работе с мелкими
файлами: анн целиком хранятся в СВОИХ i-узлах (ilJode), без выделения
блоl\'ОВ В области llallHblx. Вместе с экономией места это способствует
и росту производительности, так как данные и MeTallaHllbIe хранятся
в иепосредственной близости и MorYT быть считаны одиой операцией
ввода/вывода.
Друrая особеиность ReiserFS состоит в том, ЧТО хвосты файлов ДJ\Иной
меньше чем в один блок MoryT быть упакованы в один дисковый блок
(режим таfuшнrа). Это обеспечивает около 5% экономии ДИСКDвоrо про
странства. Именно работа с маленькими файлами (меиъше кшюбайта)
и обслуживание большоro их количества выделяет данную ФС среди
прочих.
ReiserFS несовместима с ext2fs lIа Ур08не утилит оБСЛУЖll1аl{ЦЯ
ФаЙЛ080Й системы, однако соответствующий инструментарий, объ-
единенный в пакет reiserfsprogs, уже давно включается в стандартную
nOCTaBl\'Y современных дистрибутивов. Если У вас ero нет, то скачать
можно по адресу ftp: // ftp. namesys. comfpub/ reiserfsprogB/
rеisеrfsрrоgsЗ.6.19.tаr.gz.
Там же можно взять патчи для ядра 2.4.Х.
К сожалению, заrрузчИllli Linux (LILO 11 GRUB) не способны эаrрузить
ядро LinlJX с раздеЛА ReiserFS, оптимизированноrо в режиме тайлиша.
Поэтому под каталоr /ьоо! лучше отводить отдельный раздел с файловой
системой, совместнмой с ext2fs.
XFS
При работ'е с orpoМIfЫМ}\ (терабайтныш) файлами ВlIе конкуренции оста-
ется фамо.вая система XFS, разработанная КОМWIнией Silicon Graphics
(сейчас SGl) специально для операций с мультимедийныш данными
и впервые появившаяся в 1994 r. в версии ОС Irix 5.3. Она использует
121
UNUX, rЮЛНое руководство
64битную адресацию, что позволяет увеличить максимадъный размер
файловоЙ системы до 18 тысяч петабаЙт (при этом предельныЙ размер
фаЙла составляет 9 тысяч петабайт).
Особенностью этой файловоЙ системы является устройство журнала: в
журнал пишется часть метадаНI1Щ самой файловоЙ системы таким обра
зам, что весь процесс восстаl10влеIШЯ после сбоll СВОДIIТСЯ к копированию
этих данных из журнала в файловую систему. Размер журнала задается
при создашш системы, он должен быть не меньше 32 меrабайт.
XFS эффективно распараллеливает операции nBoдaBЫBoдa: она делит
все простраиство раздела на иесколыю равных областеЙ (a/locariongroиp),
служащих своето рода автономными файловыми Сllстемами в рамках
единой XFS.
Пакс}' утилит обслуживания xfsprogs можно скачать chctp: I lовв. эgi.
com/projects/xfs/download.html (содержит ссьтку Ila россИЙское
зеркало ).
JFS
Разработана IВM ДДJI рабочих станций под управлением ОС AIX, за
тем портирована ДДJI Linux 1I вьmyщена по Стандартной Общественной
!fIщензии. Всю необходnмую информацию о ней можно найти по адресу
http://jfs.sourceforge.net.
Размер журнала составляет примерио 40% от разыера файловой системы.
Эта файловая система может содержать несколько cerMeНТOB, содержащих
журнал и данные. Такие сетменты называются аrреrатами и Moryт ыонти
роваться отдельно. Умеет она также хранить маленькие файлы и катало!'ll,
содержащие не больше 8 файлов, в пределах индексноrо деСКРlштора.
Широкоrо признаl1ИЯ пока не ПОЛУЧllла.
Ext3fs
Файловая система ext3fs официально включена в ядро Linux с версии
2.4.16. Вllервые она появилась в дистрибутивах RedНat и SuSE. COBpe
менные дистрибутивы, основанные на ядре 2.6.х, предJIаraют ycтaHoBII1Ъ
ext3fs по умолчанию.
Некоторые источники утверждают, что схtЗfs :1то Bcero лишь «Haд
стройка» над файловой системоЙ ext2fs, а не самостоятельная файлооая
система. Блаrодаря такому происхождению ехtЗfs совместима СО осеми
лрт'раммами ДДI! обслуживания If настройки фаfulOВОЙ систеыы ext2fs.
И перейти на ext3fs можно ПрОСТblМ добавлением файла журнала к ext2fs.
не только без переформатирования раздела, но даже JI без перезаrpузки
122
rлаВа 2. Файловая система Linux
машины. Более Toro, ОС Linux на старых ядрах, не поддерживающих
ext3fs, MOryт работать с разделамн, на которых сформирована эта фаЙ-
лопая система, просто ПОДЮlючая их как разделы ex12fs.
Кроме тоro, ext3fs самая надежная из рассмотренных в зтом параrpафе
новых файловых систем: в ней предусмотрено журналирование оперший
не ТОЛЬКо с металаниыми, но и с данными файлов.
Журнал может быть включен в одном из следующих режимов:
. полноro журналироваlUт Uournal);
. послеДОВ<i1'eJlЬНОМ (ordered, при меняется по умолчанlIЮ);
. обратной записи (writeback).
Режим полноro журналирования позволяет минимизировать ваши потери
при отключении ШIтания, но является наиболее медленн.ым из ВССХ трех
режимов. Этот режим и подразумевает журнаJJирование запИСи пользо-
вательских данных.
Самый быстрый режим зто «обратная запись». Это обыкновенное
журналироваЮfе только метаданных.
Режим «последовательный» представляет собой компромисс между ско-
ростью и полнотой. Официально журналируются только метаданные, но
блоки соответствующих им данных Записываются первыми. В большин-
стве случаев такой режим rарантирует сохранность данных, особенно если
nalrHble дописывались в конеп файла, как обычно и бывает.
Какой режим выбрать? Естrваш сервер является файловым (FfP, WWW-
серБер), то есть таким, который используется пользователями для хране-
I!НЯ файлов, выберите режим nOJ1l!oro журнзлирования пользователи
будут вам блаrодарны. Пусть в этом режиме сервер будет работать чуть
медленнее, зато в случае чn можно минимизировать потери информации.
Во всех остальных случаях нужно установить режим «Последовательный»,
точнее вообще не нужно ничеro устанавливать он используется по
умолчанню.
2.3. Создание и монтирование
файловых систем
Создание ф"ЙII0ВОЙ системы «вручную». Команда mkfs
Из предыдущеrо параrрафа следует, что создать файловую систему на
разделе жесткоro диска или внешнем носителе ЭТО значит разметить
ето сектора на структуры данных, специфические для этой файловой
системы (суперблок, список i-узлов, блоки данных). В DOSJWindows этот
123
LINUX: полное рукоВОдсt80
процесс Н3ЗЫ5ается форматированием. В UNIХсистемах понятие фор-
матирования не ИСПaJIЪзуется, а процедура и соответСТ5УЮЩ3Я комаНда
так и нззыааются создание фwt)\lОЙ СИСТеМЫ.
В ходе установки ипшс Файловые,системы на разделах жесткою дilCKa
создал для вас инсталлятор, и перецелывать за ним ничеrо не нужно.
Ручное создание ФС может понадq6иться при подключении Hoaoro диска
ИЛИ, что rораздо чаще, дискеты. Выполняет ero комаида mkfs:
mkfs [t <ТИП>] [опцииФС] ФС [блоков]
ТИП!.I и описание файловых систем, поддеРЖlIваемых Linux, вы наЙдете
в справочной систеr.<е по команде тап Es. Те ТИIThI, которые чаще Beero
используются lIа cьeыны носителях, перечислены В табтще 4.3. Ясно,
что если вы «отформатируете» дискету С типом vfat, то она будет читаться
и из-под Windows, а если с типом eXl2/ext3 ТОЛЬко из-под Linux.
Если не Уl\азывать тип, то будет создана ФС с типом по умолчанию в
настоящий момент это ext2.
В качестве aprYMeHTa ФС можно указывать либо имя устройства
(/dev I fdO), либо точку монтирования (lmedia/usbdisk). Последним
aprYMeHTOM можНо YKll:!aTb КOJIичество блоков, которые нужно ОТ8ести
под IIОВУЮ файловYIQ систему.
Опции ФС ЭТО параметры, специфические ддя фаЙловоЙ сиСТеМЫ
определенною типа. НаПРllмер, для ext2/ext3 можно указать:
. ь <размерблока> (по умолчанию 4096 байт, но может быть 11 1024
или 2048);
. N <количестваiузлов>,
. i <байтнаi узел>.
Утилита mkfs передает ЭТИ опции иастоящему конструктору ФС, кото-
poro вызывает в зависимости от указанноro типа. УСтановденные у ввс
конструкторы можно найти по команде 1в /sbiп/mkfs*, а СПJ<СОК
ОПЦИЙ КОНl\ретной ФС посмотреть на mапстраНlще соответствующеrо
I\Oнструпора (например, тап mkfs. vfat).
Замечу только, что для ext3fs после ключа J можно YKll:!aTb опции жур
налирования: sizе=<размер:> размер журналыtоrо файла в меrабай
тах, и device <устройство> внешНilЙ журнал, заранее созданный на
друrом разделе.
Как я уже сказал, преобразовать существующиЙ раздел ext2fs в ext3fs
можно без перезаrРУЗI\И системы, простым добавлением журнала "оман-
лаЙ tune2fs:
# tune2fs ) /dev/hd5
124
rЛ3В8 2. Файловая система ипих
Дополнительные конструкторы (для ReiserFS, XFS и т.п.) устанавлива-
ются из пакет08 reiserfsprogs и xfsprogs COOToeTCToef!HO.
В результате на новом рз-зделе образуется корневой каталоr Н080Й фай-
Л08011. системы и о не/.! подкаталоr l1ost+faund. Не удаляйте этот
110дкаталоr: УТllлита fsck, предназначенная для прооерКlI целостности
ФС, ПОl4eЩает о нето найденные куски нарушенных фаЙлов.
Настройка автоматическоrо монтирован"'!
при заrpузке компьютера. Команда mount
Чтобы с Н080Й фаЙЛовой системой MOJКНO бьuJO работать, она должна быть
при помоши операции монmрования включена в общее дерево каталоroв
(п.l.l.З). О ручном МОНПlровании/размонтировании примеиительно к
СЪеМНЫМ носителям сказано В п.4.2.5, а здесь я скажу, как сдедать так, что-
бы разделы жесткоro диска автомати'!ески МОНТIlРОВались пр" заrpуже
системы и п.еМОНТIIРОВались при останове. Для этоrо их нужно прописать
в фаЙл letc/fstab, который читает команда mount в ходе начальной
заrрузки (об этапах эаrрузкии заrрузочных сценариях см. п.9.1).
Каждая стржа этоrо фаЙЛа соответивует одноЙ фаЙловой системе И со.
стоит из шести полеЙ, разделенных пробеЛЬНЫМJI символами:
<устройства,. <точкамон.'!'ирования> <'rип> <ОПЦИИ> <дамп>
<HoMepfsck>
. Устройство это фаЙЛ устроЙства, к которому подключен раздел
(например, /dev IhdaS). Для сетевой фаЙловой системы здесь ДОЛЖНО
быть указано ИМЯ сервера и КJlталor на нем.
. ТОЧЮlонrироваНИR это имя каталоra, к которому файловая систе-
ма будет подключена. Он должен существовать и (желательно) быть
пустым. для раздела подкачки (swap) значение этоro поля не исполь-
зуетс>!, но в фаЙЛе /etc/ fsta() присутствовать все равно должно.
. Вместо типа ФС можно ую:tзать значение auto: в этом ae команда
mount попытается опредедить тип самостоятельно.
. Дап это отметю:t о необходимости резервноrо копирования дан-
ной ФС Проrраммой dump (п.lO.4.З). Значение 1 rоворит о том, что
резервнровать нужно, значение О нет.
. HOMepfsck: утилита fsck обычно запускается перед автоматическим
монтированием ФС, проверяет ее на целостность и пытается ис-
править найденные ошибки. Это процедура долrая, и для YCKopeНlUl
заrpузки можно либо отключить проверку ДЛЯ некоторых ФС (значе-
ние О), либо для некоторых разделов запускать ее параллельно. Зна-
чение этоro ПОЛЯ задает порядок проверки разных ФС: если номера
одинаК08ые, то системы будут проверяться параллельно. Ясно, что
ускорение может получиться только в том случае, котда параллельно
проверяемые разделы находятся на разных физических дисках.
125
lINUX: полное PY'08OДCТIIO
Справку об ОПЦИЯХ монтироnания команды mount можно получить по
команде rnаn rnOl1nt:. В таблице 2.4nеречислены самые употребитедьные
из них.
Основные опции МQНтuрования
Таблицs 2.4
Опция Н83НQЧС!ММ
8u10 ФС может быть СМОНТlilрованазвroмarnчес\(
.0 СМDН1'\1роаать файловую ст-.wз режиме «ronbl(o чтение-
rw СWlОНТИроВ11ТЬ фai1I"овую CЖnМУ Для ЧТ&НR И.ДnА заnмс:И' (по УМОftчаНIttIQ)
dev ФС IJIQЖI;tТ,CQДIli\Ржать $).Й.nыбnочных Iot С;j,tМВОЛьНbl/{ yt::ТрОt'СТВ. Они ИНТеJ)претиру.
ютс-я KaIC специальные файлы .
"".с Фе.йnы нз ФС MOryт быт.,. Иl'.:'r1ОтiRNIМИ:
!illld Разрешить .иCnОnЬ<lование r>и1_0вSUID и SGlo
Разр.еwить,неnР8ипеrироЩl:ННОМу поnьзователю монтироаать к размонтировать
User АаННyIQ,Й1lO8yIQ cillCТGMV, -Э'rО $МIlЧiЖИВ вJtечеТ;:Ю Qобои nоехес, nosuid 'и nudev,
eC1lI1 nOCli.. rQ ЭНQ HIQ YII;.r;mJНQ eXftI:, SlJld I.1ЛН ОО\'
noauto
f10dE'V
"оехеС Змчвния. flрО1ивоr10nО)j(ные е;со:теетciВу1Ощим бе.з. ..но'"
nosuid
fюusеr
dйtаu!ts YCToI:IHO&Ir:.\o! по УМ()I1Ч8НИЮ; rwJМJid,еv,ехе-(',.аulо.nQUsеr,аs:уnс
c;odepage"'" ИнтерпреТИРQвать символы 8 ",менах фаЙЛQВ соrласно I(.J)АОВОЙ СТра+4ИIJЕо
<значение>
focharsel: ВЫВО.QИТЬ с.иМI:'I011Ы В именах фа\'hов соrлзCi-lй набору меоnое
<:НШ'ННИ(»
ПрОlрамма уС1аноnки создала файл fetc/ fstab, в которОМ перечислены
вСе ваши Liпuхразделы (корнеIlОЙ, swap И, если вы llОСЛУШались п.1.3.4,
IЬоrnе). Теперь нужно сделать так, 'по6ы изпод Linux 6ьrnи видны данные
на вашlfX Wiпdo\vsразделах. Проверьте, поддерживает ли ваше ,щро тИПЫ
ФС на Wiпdоwsразделах (cat /.,rocl fi lesys tems, в выводе команды
должны присутствовать слова vfa't и/или n t f а). Обычно ядро, паставляе
Мое с дистри6yrиnом, собрано без поддержки NTFS если ваш Windows
раздел О1'формаmрован с Эnlм типом. 1'0 вам ПРИдется либо пересобрать
,щро. либо, что roраздо проше, конвертировать раздел в тип Е'АТ32.
Итак, после псех этих про верок 11 вписал n файл /etc/fstab строку:
/cJev/hda6 j!nnt/disk.e vfat: rw.соdераgе8б6,iосhаrsеt=utf8
...11 получил каталоr /rnnt:fdiske, всем файлам в котором приписаи 11
качестве пладельца root. а в качестве прав доступа rwx-rx.r-x. Если вас
такой режим доступа не устраивает и хочется иметь право писать в этот
KaTaJ10r от имени неприnилеrированноrо пользователя, прочитайте на
шап-странице команды тОnПI 06 опциях uid. gid и umask.
126
rлава з
РАБОТАЕМ
В КОМАНДНОЙ
СТРОКЕ
,
КАК УСТРОЕН LINUX:
ЯДРО И ПРОЦЕССЫ
ЖИЗНЬ ПРОЦЕССА
ВЗДИМОДЕЙСТВИЕПРОЦЕССОВ
КОМАНДНАЯ ОБОЛОЧКА. BASH
LINUX ПОЛНОЕ РУКОВОДСТВО
3.1 . Как устроен Linux: ядро и процессы
rлавная, постоянно находящаяся в оперативной памяти, часть ОС Linux
называется ядром (Kernel). Ядро ОС обрабатывает прерывания от
устроЙств, выполняет запросы системнЫх ироцс<х:ов и пользовательских
ПРl!ложениi!;, распр'щедяет виртуальную память, соз.цает и уничтожает
процессы, обеспеЧilвает мноrозадачность посредством переключеНI!Я
между ними, содержит драйверы устройств, обслуживает файловую си.
стему (см. рис. 3.1).
Cж:тe<.I....8
......,.'"
ФОЙ1!О88>1
CrteТeM8 к
ядро l
(Кemol) i
Подои",""" "
зеодавывода
с:
Дрой..ра
устройств
Annaраmые 'СpeдC'f1SQ
""с. З. 1. Устройство ос Ипих
128
rЛаВ8 З. Работаем 8 командной строке
Пользовательские llроцессы не MOryr непосредственно, например. порож
да,", дрyrие процессы, производит/> чтение ИЛИ запись на ДllСК, ВЫВОДИ1"Ь
данные на экран или создавать rнездо (socket) ДЛЯ обмена по сети. Для
ВЫlюлнеllИЯ этих действий они должны воспользоваться сервисами ядра.
Обращения за такими услуrами называются системными вызовами.
Начальная заrpузка системы состоит в том, что файл с образом ядра счи
тывается в оперативную память. начиная с нулеооrо адреса. Этот фаЙл
находится 11 каталоre !boot и называется vmlinuzx.y.z, rдe x.y.z ЭТО
номер версии ядра. На текущий момент большинство дисrpибутивов
основано на ядре верСIШ 2.4, хотя уже nыщло ядро 2.6 (Fedora Core 3) и
кое-тде еще встречается версия 2.2.
ri -пIoНI"i(н.:I ' !НI .
По соrnаШеНИЮ рэзраБОNИКОВ ядра. рее BeТ8 с. чеТfiЫМ номером (2.2. 2.4 и
r.A.) считаются стабильными t.1 рекомендуются для ШИрОkоrо использования,
8 на ветея.х с 1i8четным номером испытываются НQЗЫS идеи. ЛиtfYC ТорвanЬДС
предложил распространить эту схему нумерации И На треТЬЮ цифру версии: в ядра
с нечеТNЫМИ t40MepaM добавлять новые фУНКЦИИ, в 8 чеТНЫХ только исправлять
обнаруженные ошибки.
в UNIХподобных системах о отличие от друrих ОС ядро минимиэи
ровано н Не выполняет ни одноЙ функции, служащеЙ непосредственно
пользователю. Для этоil цели применяются шоrо'!Исленные утилиты,
выступающие в качестве посредниlЮВ между пользователем и ядром.
Только в компnеlC1'е с ними ядро образует полноценную операционную
систему.
Этих компонент ос Лrrнус Торвальдс не создавал: они поступили из
проекта GNU (http://www . gnu. org). участники которото с 1984 тода
работают над созданием полноценной UNIХподобной ос, пеликом co
стоящей из свободно распространяемоrо проrpамМlЮЮ обеспечения. К
1991 тоду им не хватало только ядра, и этуто прореху и заполнил Top
вальдс. Так что ОС, которой посвящена эта книrа, праВlIЛЪнее называть
не Liпuх, а «операцrrОflНОЙ системой GNU, основанной IШ ядре Linux».
или IIрО(,'ТО GNU/Linux.
Итак, ядро обслуживает запросы процессов. Что же такое процесс? Это
понятие является базовым в UNIХподобных Системах. Процесс можно
представить себе как ВI[ртуальtlуЮ машrrну, отданную в распоряжение
ОЛНОЙ задачи. Каждый процесс считает, '!то он на маЩlше один и может
распоряжаться всеми ее ресурсами. На самом же деле процессы надежно
изолироllзны lIpyr от друта, так что крушение одноro не может повредить
всей системе (сколько раз вы наблюдали в Windows, как сбой одной про
траммы ПРIШОДИЛ к общеiу зависзнriЮ?).
S '.\i\x]Stl
129
UNUX, полное рУКОВОДСТВО
Каждый процесс выполняетСЯ в собственной виртуальной памяти (см.
рис. 3.2), в которую никакой дрyrой процесс вмешаться не может. Этим
н обеспечивается устойчивость всей системы.
I исп:::мый I процосс ДинамfotЧfJ(ЖМ
разделAE'lмые
OбnoСTh бибJ1wзТ9f(М
Обметь l<DДa
l<DДa би(jлиoYeJ:И
Обпасть Область
данных ДIIHНЫX
библиотеки
ere.
I КУЧ> I
Рис. 3.2. Виртуальная память процесса
Напоминаю, что такое виртуалыlaя память. Каждому процессу разрешено
считать, что ero адреса начинаются с нулеооrо адреса и от Hero наращи-
ваются. Таким образом, в 32-рарядной ОС процесс может адресовать 4
rнrабайта оперативной памяти. Механизм виртjrальной памяти поволяет
процессу думать, что именно столько ему и выделено, хотЯ фИЗlltЩСКИ
объем ОЗУ вашей машнны какие-то жалкие 256 МБRЙТ. Недостающую
память заМеНЯет жесткиЙ диск путем записи временно не используемых
страниц памяти в раздел подкачки (свопинrа).
Разделяемость библиотек меЖдУ процессами обеспечивается тем, что
ИХ код и статичеСlЦIе даннь\е отображаются на ОдИн н тот же участок
физической оператiшной памяти.
3.2. Жlil3НЬ процесса
Таблицапроцессов
С точки зрения ядра процесс представляет собой запись в таблице про-
[\ессов. Эта запись содержит данные, существующие в течение Bcero
времени жизни процесса, и сведения о ero состоЯllИИ. Размер таблицы
процсссов Позволяет запускать несколько сотеН процессов одновремен-
130
rлэвз 3, Ра60таем 8 командной строке
но. Друrая важная ннформация о процессе на!lример, таблица всех
открытых процессом файлов хранится в ero адресном пространстве.
Запись в таблице nронессов и пространство процесса вместе составляют
контекст, или окружение, процесса. В неro входят:
. prD идентнфикатор npOllecca. ОН принудительно назначается
планировщиком при запуске проuесса.
. PPID идеНТllфикатор родительскоrо процесса (о порождении про
цессов дальше в этом же параrрафе).
· ТfY имя ynравляюшеrо терминала (терминал, с которою запущен
процесс).
. WD текущий каталоr процесса, от KOTOpOro ОТСЧlffЫваются OTHO
ситеЛЫfые пути.
. RlD, RGID реальные ID и rpупповой lD пользователя, запустив-
шеro процесс.
. EUlD, EGJD эффективные ID 11 GID: СМ. 11.2.] .4.8.
. NICE пОказатель уступчивости. Процессы выполняются в режиме
разделения времени, то есть время центральноrо процессора делится
между rотовыми к выполнению 11роцессами с учетом их приоритета.
Чем выше 1I0КазатеЛЬ уступчивости, тем НИЖе ПрIЮрИТет.
. Перемецные окружеllИR.
Системные вызовы fork() и ехес() ИЛИ как размножаются процессы
Каждый процесс порождается друrим пропессом, исцользующим для
ЭТOfО сцстемный вызов forkO. Таким образом, структура npoHeccoB, no
добно файловой CJtcтeMe, древовидна. Корнем этоro дерева слуЖlIТ ;n;!
процесс цнициализацИIl системы. Он запускается ядром первым, полу
чает идеН'I"ифцкатор 1 ц порождает еще несколько ПрОllессов (сколько И
каких, можно узнать из ero конфиryрационноrо файла letc/inittab),
которые, в свою очередь, IIрИ участци пользователя rюрождают друrие
npolleccbl.
В результате системноrо вызова fork(} родительский процесс полностью
копирует свое окружение, включая аДреСНое npOCтpaHC1'JlO, в дочерний,
так 'lТО В мОмент рождения ДО'I<рНИЙ процесс отличается только своим
lD. Потом дочерниЙ процесс с помощью ВЫЗЩlаехесО заrpужает в свое
адресное пространC"l1!О какой-нибудь исполняемый файл и начинает ИС.
полнять содержащуюся в нем проrрамму.
Может случтъся 11 так, что процесс выполняет вызов ехес() без fork():
тоща "е возникает HOBoro 11роцесса, 110 В старом начинает выполняться
друrая nporpaMMa. Например, протрамма login выполняется с ПРИВЦJlе
rиями суперпользователя, поскольку ей нужен д\)стyn к файлу паролей.
Проверив паролъ, ОНа устанавливает себе праоа зареrистрирооавшеrося
пользователя и выполняет вызов ехесО, замещая свой код кодом KO
131
UNUX: полное РУКОВОЦСТ80
ПJ>ouo<;c
Р'О,
ton()
ПРО""""
Р1D,
Копирование
ПРОЦООО
PlО.
РодитеIlbOI<>!Й
процесс
ехес()
3ВrpyЗКВ
Ис:пстннмЫЙ
фaJ\п
Дoчej)ниil
("""""""'Н....II)
процесс
Рис. 3.3. Как размножаются процессы
мандной оболочки. После этоro из командной оболочки изменить свои
ПРИ8илеrии обратно на root нельзя, потому что кода nporpaMMbl login в
текущем процессе уже нет.
Каждый процесс, завершившись, возвращает родительскому проuессу
какое'то значение, называемое кодом завершения ИЛИ кодом возврата.
По сотлашениlO разработчико!\, нулевой код возврата означает уснещное
завершение, а ненулевые разнообразные ошибки. Процесс-родитель
может приостановить свое выполнение до завершения потомка и вы.
полнить разные действия в зависимости от возвращенноrо дочерним
процессом значения, а может и не делать этоro.
Снимок протекающих В системе процессов команда ps
Моментальный снимок протекаlOЩИХ в системе процессов можно посмо'
треть с помощью КОМанды ps (process statl/s). Без арryментов она покажет
список Процессов, связанных с текущей консолыо (или виртуальным
терминалом). СПИСОК возможных ключей команды можно, как обычно.
получить по команде рэ help. Вот некоторые полезные из них:
. -р < списокРID> : только процессы суказаиными ID;
. -п < списокUSЕRID > : талько запушенные указанными ПОЛьзова'
телями;
. -е : асе процессы в системе;
. -f: полная форма вы!\ода;
. H : вьшод иерархии процессо!\ в форме дере!\а.
132
rЛ8ва З. Работаем в wмандной строке
я.аро
смж:
рабо,ы
П01ТЬЗQвaтeJ1R
,
v
r
8Иpтya.tlьныв IФНСОЛИ
А
демоны
IWмaIЩН8R оболочка
J
v
ко..........
Рис. 3.4. Фраrмвнт иерархии nроцессйв
Динамика процессов команда top
Представление о динамике прощссов дает команда top. Она выводит
список процессов, отсортироваиный по количеству занято!! паМЯТlt ИЛИ
исполъзоваЮlOrо процессорнorо времени, и обновляет ero через Уl\Cазан-
ные промеЖУТКII времени (по умолчаllИЮ через каждые 3 Cel\CYHJlbl).
Катеrории процессов
Процессы делятся на трн катеrОРIlИ:
. Системные. Они порождаются ядром особым образом n процессе за-
rpузки и выполняют системные фующии (например, WlанироВaJltlе
npoueCCOB или смену страииц виртуальной памяти). Выполняемая
ими проrpaмма берется не из исполняемоro файла, а является частью
ядра.
. ПользоватеЛJ.ские. Как пра8ИЛО, они порождаются 80 время сеанса
работы пользователя и связаны с терминалом. Если пользоватеЛЬ-
ский процесс работает в интерактивном режиме, ТО он захватывает
терминал 5 моноltОЛЬJюе владение и, пока он не завершится, поль-
зователь ие имеет доступа к командной строке на этом терминале.
t3З
LINUX: полное руководство
Пользовательские процессы мосут работать также в фоновом режиме,
освободив ко!андную строку.
. Демоны. Запускаются ПОCJJе (!Н\щиализации ядра. Выполняются в
фоновом рсжиме, Не связаны ни с одним пользователем, обеспечива-
ют работу различных служб (например. управление сетью). .rлаВI!ЫМ
демоном считается init npouecc IIНlЩИМJlЗaщrn системы.
ei 81J . II';t"'!Ir,f:.8
. Название «демон- (daemon) не имеет ничеrо общеrо с потусторонними сущестеами:
ЭТО просто СЩСРQщеtlие от Disk And Execution MONItor.
3.3. Взаимодействие процессов
ИЗ всех средств межnроuессноrо взаимодействия, которюm так боraты
UNIХ-подобные ОС, в этой rJlaвe мы рассмотрим только конвейеры и
СШ'Налы.
3.3.1. Конвейер (pipe)
В rлаве 2 вы познаКОМИJlИСЬ с командой-фильтрам тore, вызываемой тш(:
<командавыводящаЯМНQrострак> I more
Символ «1" зто и есть конвейер. Ero можно понимать как канм, в
который один процесс может только писать, а друroй только читать
из Hero. Выборка и помещение информации в такой КаНал ПрО!lСХОДИТ В
порядке FIFO (First InjFirst ОuО.
Посредством конвейера вывод одной команды подается на вход друrой.
Это одно из мощнейших средств UNIX, позволяющее комбинировать из
простых команд длинные н изощренные цепочки обработки данных.
Напрнмер, я хочу узнать, осталась ли у Меня еще свободная виртуальная
консояь, чтобы зареrистрироваться там и спросить справку по какой-то
команде, не прерывая процессов, npотекающих на друrих консолях. Я
зиаю, что 8ИР-ryальную коисоль.обслУЖlШает проrpамма mlngetty, которая
после реrистрации на этой консоли замещает свой код на код командной
оболочки. Значит, мне нужно подсчитать количество процессов mingetty.
Есть команда wc (word соunп ,умеющая подсчитывать ЧИCJJО строк, CJJOB
или байтов в файле. Есть команда grep, умеющая выбирать из файла стро-
Ю!. содержащие указанный фраrмент текста. Соединяю их конвейером:
" 1'8 .e I g!'e1' minget ty I wc 1
134
rJ1aB8 3. Работаем в командной строке
3.3.2. Сиrнапы
МехаНИЗI\I снrналов это средство, позволяющее сообщать процессам
о HeKoTopLIX событиях в системе, а ПРОllессу-получателю 40.1ЖИЫМ
образом на ЭТИ сообщения pearHpoBaTL. Послать сятнм может сам про'
иесс (например, при попытке деления на ноль), лдро (при сбое оборудо-
вания), пользователь или друrой процесс (требуя прервать ВЪП1олнение
задачи ).
Всеro в Linux 63 Сllrнала, обозна'шемых своими номерамиlIЛИ символиче-
скими именами. Имена всех Сlfrналов начинаются с SIG, и эту приставку
часто опускают: так, сиrнал, требующий npeKpaTIIТЬ ВЬU10Jшение процеа,
иазывается SIGKILL, или KILL, или сиrнал 9.
Получив сиrнал, процесс может: ипюрировать ero; вызвать для обработки
установленную по умолчанию функuию; вызвать собственный обработчик
(перехватить сиrнал). Некоторые сиrнвлы (например, KILL) перехватить
или иrнорировать невозможно.
Пользователь может послать сиrная nроцессу с идентификатором PID
командой
$ kill !a <сиrнал>} <PID>
тде <сиrиал> это номер или символичес){ое имя.
НесколькО Часто 8стречающихся сиrнмон перечислены в таблице 3.1.
Полный список можно получить по команде kill-l (lisl).
Сurналы Ипих
Таблица З. 1
Nt Им. Назначение РеаlЩМ. "роЦессаnoпyчатеЛR
1 HU? Напguроrб()Й ДеУОНЫ перечитыаютT СВОИ l<онфиrypаW'\онмыв
файлы
2 ItП Inren1.lpl прекр,щof....Ь 8t.IПОJlt:Юние (nepexвaтывaQТ1
3 QtJlT СиЛЬнее. чем INT TO)l(&
4 \\.L lIIegal inslruction. Обработать оwибку.
Прorраммнм ошибка По УМQ1\чанию f1",раlИТЪ выполнение
Aoating point exceptiofl. Обработать ошибку.
8 РРЕ ВЫЧИСJ'ительная ошибка
(AeпeHi4e нз НОЛЬ) ПО УМОЛчанию. пре.ср.атитъ выполнен.,е
9 Кlll Убить процесс Немедленно пре"pIIТИТЪ выполнение.
Но nepGXВSTbI8ae1C1l
Sзgmeпtatiоn violatlon. Обрабоrаn. QWМбку.
11 SEGV Попытка доступа к чужоl't
областw ПаМЯ," по УМОЛ4ВНИЮ r1р9l(раnпъ выполмен.ие
1З ?t?E Нетпроцесса,ЧИТaIOLЦвrо otiрэботать оwt\бку
И:'lКОfolWера
15 ТЕАМ Termin.ation. KOPIWUHQ З1l8SpwИТЬ9Ь1:попМенJotо.
3зэеРUJиrь ПрОЦесс nlilJ(eaTblв.atJfCA
17 СНШ 3ав.ершlolnей Прин;rп. ВDэвращеЖiое ИМ 31iачвнме
дочерний процесс
135
UNUX, nОЛНсе РУКОВОДСТВО
Некоторые СИПIaJIЫ посылаются по нажатии комбииации клавиш. Так,
Ctrl+C посылает сипщл INT, а Ctrl+\ (обратнЬ1Й сдэш) сиrнал QUIT.
Получает эти сиrналы тот процес'с, который сейчас занимает консоль
например, ожидает вашеrо ввода.
Команда kill носит такое убийственное название потому, что чаще всеro
используется для принудительноro'завершения процеССО8, вышедших
изпод контроля, забирающих мноrо реСУРСО8 или просто повисших. По
умолчанию она посылает сиrnал ТERM. Он отличается от СИПJaла КILL
тем, что I1рикаЗЫВает процессу заllерР1ИТЬСЯ аккуратно, закрыв открытые
им файлы, удалив временные и Т.п. Спrнал же КILL деЙСТ!lУет на процесс
как выстрел в rолову.
Понятно, что Д)lя Toro, чтобы прервать ВЫПOJlнение процесса, нужно быть
ero хОзяиНОМ или иметь "ринилеrиисуперп()льзоnателя.
3.4. Командная оболочка. Bash
Важнейшнм из пользовательских процеССО!l является командная обо.
лочка (она Же коыандный интерпретатор. или просто shell). Иыенно
она обеспечивает взаимодействие пользоватеЛЯ с системой в текстовом
режиме, позволJIЯ вводить коыанДЬ1. Именно она запускается, коща вы
реrистрируетесь на текстовой консоли. и предоставляет вам интерфейс
командной строки.
Не нужно, увлекшись удобстваWl rрафическоrо интерфейса, недооце.
нивать коыаНдНУЮ строку. Во'первых, мноп,е аДМЩlистративные задачи
мосут быть выполнеНЫ только oтryдa; BOBTOpыx, командная строка са'
мое удобное средство автоматизахЩи рyrиllJlblХ процедур.
КомандоЙ в Linux считается все, что может быть исполнено: испол
няемые файлы, встроенные команды оболочки, псевдоиимы команд,
пользовательские фУИКЦIIИ, файлы,сценариев (скрипты) заранее под
rотовденные поедедовательности комаНд в текстовом виде. До сих пор,
приводя примеры команд, я не разднчал их по npоисхождению, I! дальше
не собираюсь делать этоrо, кроме осоБЬ1Х случаев.
Оболочка ПРИНliМает в,юдимые пользователем команды, обрабатывает,
если нужно, их арсументы, отправляет команды на выполнеЮlе, прин,,'
мает возврашаемые ими значения 11 выполняет определенные действия
в зависимости ОТ этих значений. Кроме Toro, в оболочку встроен язык
проrраммирования (командный язык), позволяющий писать сложные
разветвленные командные сценарии. Именно командный язык отличает
разные оболо'!ки apyr от npyra, и име,шо из Hero исходят пользователи,
выбирая любимую и нелюбимую оболочки.
136
rлава з. Работаем в командной строке
RlЯ Linux разработано мноro командных интерпретаторов. Вот несколько
из них:
sh ..... Воите she//, оболочка Борна, CfallДВpT для МНОrl!Х UNIX-по-
добных систем;
bash . . . Воите Again she/l, «еще одна оболочка Борна»;
csh. . . . . с she/l, оболочка Си: синтаксис ее командноro языка похож на
синтаксис языка с;
tcsh. . . , tiпy С shell, минимальная оболочка Си;
pdksh . . pиЫic doтaiп Кот she/l, общедоступная оболочка Корна;
sash. . . . staпd-aloпe shell, автономная оболочка, может быть использо-
вана в случае, Korдa nporpaммHble библиотеки Heдocтynны.
Список всех установленных в системе проrpамм-оболочек находится в
файле letc/shells. У меня он выrлядит так:
!bin/sh
!bin/bash
Isbin/no10gin # ЭТО 'оболочка" для тех,
# кому запрещен ВХОД Э систему
Ibin/asll
Ibin/bsh
!Ып! ksh
!usr Ibin/ksh
!usr Ibin!pdksh
!Ыпl tcsh
!bin/Csh
Начальная оболочка для каждоrо пользователя, запускаемая для Hero при
реrистрации в системе, указывается в файле letc/passwd:
$ grep den letc/passwd # выбрать Из файла строки,
# содержаЩИе подстроку den
den:x: 501,501: Denis: !home!den: !bin/bash
в дальнейшем вы можете сменить текущую оболочку на любую из уста-
новленНых (точнее, войти в подоболочку). Чтобы выйти из нее и вер-
нуться в родительскую оболочку, введите команду ех! t. В начадьной
оболочке эта "оманда завершает сеанс работы.
В любой оболочке можно запускать командные сценарии, состоящие
из команд друrой ободочки: первая строка каждоrо сuенария содержит
указание на то, в какой оболочке ero следует выполиятъ, и текущая обо-
лочка запускает для Hero указаиную "ак дочерний процесс.
По умолчанию НOIщму пользователю назначается оболочка bash. Это
прекрасная обол.очка..ВКJlЮчающая MHoro усовершенствоваmlЙ и лучших
свойств друrиx обалdчек, и менять ее я не рекомендую. В дальнейшем,
rО80рЯ «оболочка», я буду иметь в виду именно bash.
137
lJNUX, полиое рУКОВОДСТВО
3.4.1. BCTPQeHHble команды
Список встроенных команд оболочки bash можно получить по команде
Ье/р или найти на тап-страmще в секцни SHELL BUILТlN COMМANDS.
Напоминаю, что поиск в выводе команды тап ВЫПОЛНЯется комаlЩОЙ
l<образец><Ввод>, а поиск следующеrо вхождения образца по иа-
жатии клавиши <п>.
Справку по команде, имя которой вы знаете, можно получить КОМaIЩОЙ
help <ИМЯ>.
ВОТ несколько полезных встроенных команд:
. alias <псевдоним> <длинная комаНДа с арryментами> Ha
значение псевдонима. Без арryмеlПOU UblUOдlfr список всех имеющихея
псевдонимоu. Обратите оюшанне, что у пользователя roo! команда
rm сделана псевдонимом для «r", i», 'll'обы он не забыл воспользо-
ваться КЛЮ'ЮМ i (см.п.2.1.4.3). Вы тоже можете назначить псевдоним
для опасной команды ris,.созда!l сцснаРIIЙ, КQТорыЙ сначала будет
спрашивать «а ВЫ уверены?», и толька при положительном ОТБете
запускать risk На ВЫПОЛI!ение.Дайте этому сценарию имя risk, а вну-
три Hero ссылайтесь на настоящую команду risk по ее полному пути.
Удалить псевдоним из списЮ\ можно командоЙ unal i аэ.
. echo [aprYMeHTH] вывод apryмcHТOB на экран. Полезно, если
нужно выпоJШlfТЬ подстанОI>КУ (п.3.4.4) и посмотреть, что получится.
. епаЫе < имякоманды > заставлж'Т оболочку вместо встроенной
команды выполнить исполняемый файл с таким же именем. ПолеЗllO,
если у вас есть собственныjf сщщарий по имени, I.lапример, есЬо.
. eval [арrумеитыj КОНcrРУlfрование команды на лету, из указан-
ных apryMeHToB, и отправка ее на выполнение.
. 1et <переменная>=<арифмети.ческое выражение> ВЫЧJfсле
нне выражений. Так, команда var1+2 присвоит переменной var
(см.п.3.4.3) значение «1 +2», а команда le! var=1 +2 значение «3".
. SQurce < файл > прочитатъ и ВЫПОЛНИТЬ команды, содержащиеся
в файле. Применяется ДJlЯ определения ПОJlьзоваiедъских переменных
н функций (п.3.4.3).
Друrие встроениые комзиды служат ИИСТРУКШlЯми комаидноrо языка
bash.
3.4.2. История команд
Оболочка предлаraет вам MH()rO возможностей для облсrчения ввода ко'
манд и редактирования комаii:дноЙ строки. Помимо функщш аВТозаПОЛ'
иения, с которой вы познакомилнсь n ".1.1.4. 7, Ьа$Ь содержит механизм
командноЙ истории. Суть ero в том, что BBoдlfMbIe вами команды (по
130
rлава З, Работаем в хомаНДНОЙ строке
умолчанию 1000) запоминаются и доступны для IIОВТОРНОro вызова
без изменений или сиими.
Команда history без aprYMeHToB выводит всю историю, нумеруя при
этом команды в порядке их ввода.
Если вас интересуют только последние несколЬКО команд:
$ history 23 # IIОКазать ПОСЛедие 23 КОМаНДЫ
Если вас интересуют все команды, имеющие оrnошеШlе к монтированию
каталоrа public:
$ history I grep mount ) grep public
# еще ОДИН пример конвейера
Номера команд выводятся для тото, чтобы вы моrли снова ввести эту
команду, набрав
$ <номер>
IIЛИ
$ !! # запускает последнюю из введенных команд
ию!
$ l<первыебуквы>
# запускает последнюю из команд}
# начинающихся с этих букв.
Стрелки «8верх» и «вииз» перемещают по командиой истории, не от-
правляя команду на выпмнение, а вводя ее в командную строку для
редактироваНН$!.
Последнюю команду может для вас отредактировать сама оболочка. Дi1я
этою вместо команды введите:
$ Лqтозawенитьчемзаменить
Например, вы запросили справку по команде оболочке bab: тап bash.
Если сразу после этОrо ВЫ хоТите посмотреть справку по об0J10чке csh,
можете вместо тап csh набрать
$ ....lJa...c.
Помните, что замене подлежит первое вхождение подстроки «'1Тоза
м:енить».
Если вы хотите не изменить, а дополнить последнюю команду (например,
пропустнтъ ее вьтод через фильтр more), введите
$ !! I more.
139
LINUX: полное PI"'0BOдcrs0
3.4.3. Переменные
Описание и испопьзование переменных
Как любой изыtt проrраммирования, командный язык bash поддер
живает перемеllн!>!е. Тип их СТРОКО8ЫЙ. Оператор ПРИС8аИ8ания
вышидит так:
$ <:имяпеременной>;;-<знач:ение->
Имя должно начинаться С буквы и может roстоять из латинских букв,
цифр. знака подчеркивания. Если значение переменной содержит спе
циальные СИМВОЛ!>!, их нужно экранировать кавычками или обратным
слэшем (см. п. 2.1.1).
Операция ПОДСТЗJ:lОВКИ значеЮIЯ перемеНJ:lОЙ обозначается символом $
(не путайте с приrлаШСJ:lИСМ bash). Выве(..'Ти Значенне перемеююй можно
командой есЬо:
$ cwd=/home/den/MyDownloads/packages
$ echo cwd # ВЫВОДИТ имя переменной
cwd
$ echo $cwd # ВЫВОДИТ значение переменной
Itюmе/ detl/MyDownloads /packages
Установленные таким образом'переJ,lЩlНые доступны только 8строенным
командам bash. Чтобы они стали доступны ДО'lерним процессам (про
сраммам и командным сценаРИЯМ,запускаемым ИЗПОД basb), их нужно
ПомеСТlrfЪ в окружеlrие basb. Делается ЭТо коМВJ:IДОЙ export:
$ export HELLO='Hello froт environment!' # пробел нужно
экранировать
Чтобы почувствовать разницу, создайте простейwий командный cцeHa
рий, выводящий значения двух переменных. для записи сценария можно
создать пустой файл и откры1'l' есо в к"ком-нибудь АSСПредакторе, а
можно вспомнить П.2.1.4 и восп<щьзоваться командой са t:
$ cat > rnyscript
echo Env variable: $HELLO
echo Local variable: $hello # ПОМНИе о разниuе а реrистре?
Это друrаа переменнаа.
'D
$
Комбинация клавиш Ctrl + D завершает ввод и закрывает файл, и ВЫ снова
видите приrлашение оболочки.
Получившийся файл с[[енария нужно сделать исполняемым (п.2.1.4):
$ chmod а +х !!',yscript
140
rлава 3. Работаем в командной строке
Теперь осталось определить переменную hеllои запустить сценарий:
$ hello="Hell0 from local"
$ echo $hello
Hello from local
$ ./myscript
Eav variable: HeJ.lo from environment!
Local variable:
$
Переменные окружения
Korna оболочка начинает работу, она устанаВiШВает для себя несколько
переменных окружения. Имена их стандартны. Проrpаммы и сценарии
MOryт запросить их значения вместо TOro, чтобы пыТаться выяснить нуж-
ную им информацию самостоятельно.
Несколько таких переменных перечислены в таблице 3.2.
пвремвнныв окружения baah
Табпнца 3.2
Им. НUИ8fИlние
BASH. VERSION 8оеРСl1Я обоnа<.;ICИ
USER Им'!'. под которым 81,.1 зарi;'lrИСТРирОВW1исlt
Ulй. EUID Рeanьный iII ЗФФО1<ТиеныА user1D
МОМЕ ПУТЬ к В8U1$MY домашкему KirI'81Iory
HO,$TNAME Им вa1.uef'Q KUMllbK.JТefJU
HOSТ1YPE Тип ПраЦ9ссора (1386 или друrой)
OS1'lPE ОnерационtIЗЯ СИ(:Т/ilМЦ (1Inu'J(.gnu)
HI$TALE. НI$Т$llЕ Расщ),nожеие и раЗМер файла ИСТ()РИ КОМ8НД
lANG Язык те«:ущеrо сеанса
UNES. COLUM"S Чиc.nо строк и сrоnбцов ...а эк.р!lн& текстовой консоли
PS 1. Р$2, РSЗ, РЭ4 nQp8M8HHblB, опр"Ф,(!fIАющие вид приmaшеНИ оБОЛО"IIСИ
РАТН ПОРIЩОК про'Сма,ро К.Qталоrов в nошжах испоnняемorо файла
с щщаНКt>lМ заМИ именем, коrдaпо,l}НЫЙ пуп,. к нвмуне.уmзВIi
Чтобы просмотреть значения всех переменных текущеrо сеанса, как
определенных вами, так и переменных охружения, введите команду set.
Обратите внимание на переменную РАТН: среди каталоrов, в которых
bash ищет исполняемый файл, нет текущеro. Поэтому в предыдущем
Прllмере, если бы вы попытэлись исполнить сце1fарий командой щysсriрt,
оболочка ответила бы «Commandnot fоuпd». Нужно было указать путь к
исполняемому фаЙлу, и мы указали ею относительным способом, считая
от текущеrо каталоrа: ./mYSC1ipt.
141
LINUX: полное рУКОВОДСТВО
Переменная PSl У меня выrДЯД/l'l' так: [\u@\h \W] \$. Эro значит, что
ПРИfлашенне оБОДОЧЮI у мен'! формируется IIЗ реrистра.ционноrо IIмени
(userпaтe), имени машины (/JOstname), текущеrо ка'l'алоrа (workiпg dir) и
симпола $. Я MOry И изменить ero:
[den@dhsilabs ]$ peeave;$PSl # сохраняю старое значение
[den@dhsilabe J$ PSl="\W>"
>
# новое приrnашение состоит
из имени текущеrо каталоrа
и символа >
> cd Му*
MyDownloads>
MyDownloads > PSl=$pssave
[den@dhsilabs МyDownloaqs]$
Удалить переме!lНУЮ МОЖ!lО командой unset <имя>.
# поиrрали, и хватит
Быстрая смена KaTanora
Переменная CDPATH задает СПlfСОК каталоrов, в которых будет проиС"'
хоЛ\IТЬ поиск IlУЖНОro подкаталоrа при смене каталоrа (и.СПОЛЬЗQваНИlf
команды cd). Проще всею ПОЯСIIЦТЬ, как работает CDPATH, на примере.
Пусть в моем каталоre /home/deni8/books /linuxserver есть подка-
талоrи chapter 1 ... сhарtеr20.ЕC.lШ мне нужно лерейти в подкаталоr
crlapter2, то я Mory сэкономиТЬ fu1 наборе имен\'I ero родительскоrо
каталоrа, внеся это \'Iмя в переменную СОРАТН:
$ export CDPATH=: .:/home/denis/books/linuxeerver
Теперь По команде cd chapl;EJX-2 I! попаду в каталоr Ihome/denis/
books /1 i nuxserver/chapter2 И любоro Места файловой системы,
если подкаталоrа chapter2 нет о текущем каталоrе.
Настройка КОМIIIIА!!ОЙ роки. УТИЛИТII tput
Наверное, мноrим 1I:ОЧется, чтобы ю. компьютер не был похож на компью-
тер коплеrн за соседнцм столом. Кто-то меняет темы, кто-то обои. Мы
попробуем изменить командную строку текстовоЙ КОIIСОЛИ. Рассмотрим
сценарий, выводящий текущий каталоr в правом верхнем уrлу оБЫЧIIО
этот yrол при вьшодетекста остается свободным. для чеrо'! А просто так
чтобы было не как у всех.
ДЛя маннnyляЦ}IН с курсором н цветом букв и фона иcnольуется утилита
tput. В п.2.1.4 вы уна.ли, как ПрllМенить ее для восстаНовления «сбитоЙ»
консоли, а сейчас посмотрите на 1'0, что Оllа умеет еще. А потом про-
читаЙте mап-страшщу.
142
rлзва 3. Работаем в комаНДt<ой строке
Листинr 3.1. Демонстрация ВО3МОЖНОСiСЙ утилиты tptlt
If!/bin/ba,eh
function prornptcommand (
# сохраняем текущую позицию курсора
tput ас
# вычисляем длину. необходимую ДЛЯ вывода текущеrо ката:лоrа
# текущий катапоr можно узнать с помощью команды pwd
1et backwaah=$(tput cols}$(echo $ (pwd) I wc П\)2
# позиционируем курсор yo, Х=дm1на
tput сир О $(backwaah)
# YCTaнQKa цвета букв начертани жирное
tput aetaf 4 ; tput bo1d
# выводим по:лный путь в квадратных скобках
echo n Р[И
# устанавливаем цвет
tput aetaf 6
# отображаем путь
echo n '${pwd)'
устанавливаем цвет для закрывающей скобки"
tput aetaf 4 tput bold
# отображаем
echo n 11]"
# возвращаем курсор В исходную позицию
tput rc
)
PROMPTCOММAND=promptcommand
GREEN;'\[$ (tput aetaf 2 ; tput bo1dl \]"
WriITE"\[$(tput aetaf7 ; tput bold)\]'
NOCOLOUR;"\[$(tput sgrO)\)"
саае $TERМ in
xtenn*irxvt*}
ТIТLЕВАR='\[\ОЗЗ)О;\u@\t\ \007\J'
;;
*)
TITLEBAR=.'
"
еЕас
PS1='$(TITLEBARj\
$GREEN\u@\h \
$WHITE\$$NOCOLOUR "
PS2=' >
PS41+ 1
143
UNUX: полно<> рyt<ОВОДСl1'О"
Команды утилиты tput:
tput setaf [17} ...,.....устанОВIGI цвета символов с использованием ANSI
ESC J10слеДО!1аrельности;
tput setab [1 7] ........устаноВка uma фона;
tpul rev ....................... обратить цвета фона и переднеro плана;
Iроl bold ....................устаНоВка :жнрноro начертания;
tput dim .....................отключение 1К:IfpHOro начертания;
Iриl smul ...................устаllовка подчеркнутоro начертания;
Iри! rmul ...................отключение подчеркнуrol'O начертания;
3.4.4. Подстановка nepeMeHHbIX и команд
Персменные МОЖНОиСПОЛЬЗ0вать как имена, части Иlolен или артументы
команд. Перед вьщолнением команды оболочка заменит имена пере
менных их значеШtЯМll. Например, после '1'0'1'0, как мы nрисвоили пере
ме!iНОЙ cwd значение пути к каrалоry, можно переЙТ1i В этот каталоr ПО
команде
$ cd $cwd
Вывести на экран файл README из зТоrо каталоrа 1oI0ЖНО, введя KO
Ma!iJIY
$ тете $(cwd)/README
Брать имя переменноЙ в скобки необязательио, но удобно, если нужно
отделить имя nеремеиной от предществующих ему ЮIIf следующих за
иим символов.
Мощным инструментом оболочки bash является nодстановка команд,
то есть замена имени команды на результат ее ВЫUОдllения. Так, считая
/home/den/MyDownlead8/packages текущим каталоrом, мы моrли бы
присвоить переменной cwd то же самое значение проще:
$ cwdo'pwd' # напоминаю, Что команда pwd возвращает
# путь к текущему KaTanory
Можно подстаllЛЯТЬ значения ие только определенных вамн nеременных,
но 11 переменных окружения. Так, чтобы поэкранно вывести список всех
процессов, запущенных от вашеrо имеltи, введите:
$ рБ ef I grep $USER I less
3.4.5. Шаблоны имен файлов
Этот механизм позволяет не перечислять похоже выrлядящие имена
файлов и IGIталоrов, а указать На целую rруппу имен, залав краткий об
144
Отава З. Работаем. в командной строке
разец. Перед отправкой команДЫ на выnолиение оболочка раскрывает
шаблон, то есть заменяет образец всеми именами, подходящими под
этот образец, и выполняет команду для каждоro файла или каталоrа из
этой rруппы. Шаблоны указываются с по!Ощью специальных символоs,
перечисленных в таблице 3.3. Символы шаблона можно комбинировать
(1 одной команде. .
Символы шаОnOНОВ
Таблица З.З
СММ""" 3нВ"емке ".........
ПРОИЭ80льная строка СИМ80JЮВ. /. .pnlJ все ф8IdnЫ в ДОмашнем k.:Э.тмоrв
. с расширением рпо;
в TO "Il4сле nyстая Glo.V0. ф8й.nы Gfava, GiзvаОЗ и Gtava.old
? Лj()бо ОДИНОЧНЫЙ СИМ80n Glava7? фаЙЛЫ GlвvцОЗ И GlavQ)(Z,
tiO не GlavalllloЮ Glava.old
ЛюБОА СКЦВОJ\IAЭ П$pW.IИС:n(!fjtiI.lХ Gla...aOI3,8] файлы Glвva03 и Ghмt08;
Im,M,xl в СКобках Glаva?[З.81 фвJtпы Gla\la03. GlВva08.
GI.va1З, G1ava1B, GI.va2З
(..nA.N] Любой символ из YXa3811tiblX Gla\laO[2.04,9} Glava02. 01a...a03,
IIfl1 tе рщщQ.В Glava04. GlаvзО9
f'аП.х.УJ Любой символ, не у.:азанныи Glavs('O)" все rnaвы, Н8'iИкая с 11
в скабlC8Х
Символы шаблона можно использовать и как обычные символы в имеlIах
файлов. Torдa их нужно экранировать, чтобы оболочка не приступила
к их раскрытию:
S touch \*
S rm GlavaO\[3\,8\]
# создаст файл с именем *. Только Не
# удаляйте ero ПОТОМ командой тrn * !
# удалит файл С именем GlаvаО[З,В],
# а не Glava03 и GlavaOB.
3.4.6. ПОТОКИ ввода-вывода
Как я уже сказал, каждому процессу сопоставлена таблица открытых
им файлов. Три первых позиции в этой таблице заняты nсеrда: каждый
процесс открывает потоки (помните, что в UNIX файл это и есть no
ток данных?) для ввода и вывода данных, а также вывода сообщений об
ощибках и друrой диаrnостической информации. Эти потоки:
. О стандартный ввод (stdin),
. 1 стандартный вывод (stdout),
. 2 стандартный поток сообщениЙ об ошибках (slderr).
Ссылаться на ЭТИ потоки можно по их фаiiJювЫА< дескрипторад О, 1 и 2
зто и есть такие дескрипторы,
145
UNUX: полное рУКОВОДСТВО
По уыолqаНIIЮ ПОТОКИ ввода-вывода свS\зываются СКОRСОJlЬЮ, с которой
запущен процесс: стан:даpniblЙ ввод c клавиатурой, друще два потока
с зкраном (рис. 35, потоки crnd1).
Все потоки можно перенаправитlo в друroй файл. Это может бьп'Ь файл
на диске, файл устройства (например, принтер или /dev/null) или
стандартный поток дрyrоrо процесса.
Для перенаправления стандэртноro вывода команды используется символ
> (<<больше»). &ли местом назначения служит файл, то можно ето не
перезаШIсываТ1>, а присоеДlfНИТЬ (appeпd) выодимыe данные в ero конец.
Для TaKoro перенаправления применяется символ ».
Стандартный ввод перенаправляется: символом <. (<<менъше»).
Для перенаправлениS\ cTaHJIapTHoro потока ошибок используется кон.
струкщ\я 2>. Чтоб!>! IIрисоединитъ stderr к stdout и переваправить их
вместе, пользуйтесь переадресацией 2>&1.
Для направления стандартноrо ВЫjlода одной команды настэпдарт/Н.й
ввод дрyroй применяется символ I уже знакомый вам конвейер.
СIIтуация, изображенная на рис. 3.5, моrла бы сложиться после выпол'
нения следующих команд:
cmd2 <. filel.txt I cmd3 2>&1 > fi1e2.txt
cmd4 2> /dev/null I tee fl1еЗ.tхt file4,txt file5.txt
Команда'фильтр tee копирует данные со CBoero стандартноrо ввода в
стандартный вывод, дублируя их при зтом В указанныe ей файлы.
111.
-..,
/'
.-
.-
.'
.
.........
stdln
stdout
stderr
,
т
.OН
файлнадис!Се
Рнс. 3,,5 перенаправление пorOKOB BBoдaBЫBOД8
146
rпaS8 з. Работаем в командной строке
3.4.7. rруппировка команд
Кроме конвейеров, команды можно соединять в списки. Простейший вид
списка несколько команд, разделенных ТОЧКОЙ с запятой:
$ lpr myfile.txt ; lpq
Команды в таком списке ВЬПlолняются последовательио: сначала будет
ПЫПOJШена команда постановки задания в очередь пе'шти, а ПОТОМ про
перено состояние принтера. Оболочка ждет завершения каждой команды,
чтобы отправИТЬ на ВЫполнение следующую (синхронный режим).
В списки можно rpуппировать не ТОЛЬКО одиночные команды, но и KOH
пейеры:
$ ps e! head n 1; ps e! I grep httpd
[НО PID PP!D (: STIМE ТТУ TIМE (:МD
ro'.)t 13565 1 О 13,11 ? 00:00,00 /usr/1oca1/ebin/bttpd
I'lobody 13566 13565 О 1З,11 ? 00:00,00 /usr/local/sbin/httpd
riobody 13567 13 565 О 13,11 ? 00,00:00 !us/local/gbin/httpd
nohody 13642 13 565 О 1З,16 ? 00:00:00 /usr/1oca1/sbin/httpd
Первый КOIшейер вырезает из списка процессов заrоловок, а ВТОрОЙ
информаиию о демоне httpd.
Если требуется запуС1'ИТЬ команду на заднем плане и не ждать ее BЫ
полнения (асинхронный режим), то нужно завершить ее управляющим
оператором &:
$ du humanreadable total Jhome > diskusage.txt &
Команда du сообщает, сколько места на диске занято фаЙ11аМИ в указан
ном каталоrе. Обратите внимание на клю'lИ: их имена предваряются не
одним МИ,Нуссм, а двумя. Большинство команд подцерживает каК короткие
одн:об}'кJ!ешlыe ключи, таК и длинные С осмысленными, леrко зап()ми
наемыми именами. НаПОМlщаю, что список и значения ключей команды
cmd можно получить, ВЬШОЛflИВ ее С l<Лю'юм ..help или 'usage.
Конвейеры (или одииочные команды) в списке можно соединять ynрав
ляющими операторами && и 11, получая «список И" нли «список ИЛИ"
соответственно:
c:mdl && сmд2
cmd3 I I cmd4
Вторая команда в «СШlске И" будет выполнена только в случае успеnrnоro
завершения первой. Типичный пример создание каталоrа и переход
в неro:
$ mkdir mydir && cd mydir
147
LINUX: полное P\lXOВOACТ80
Вторая команда 11 «списке И)1йi>БУю I!ыполнена только в случае не-
успеШНОI'О завершеlUUl первоЙ (8o:mpaтa ею ненулевоro значения):
$ щусоптand 11 есЬо "Комацца. ЩУС9д1М!ld Не найдена" I тай de.""l
Вторая команда (конвейер) 8 ЭТОМ upи:мере фор,"щрует и посылает письмо
с отчетом о неуспехе пользователю dел.
Чтобы перенаnpавить в файл вывод 1!сех комаид из списка, нужно взять
весь список в круr1IЬtескобки:
S ( date; free; who; I > logfi1e
Список, взятый в крyrлые скобки.. JlЬШОЛНЯется 11 дочерней оболочке,
имеющей собствеН1Ше локальные переменные и текущий каталоr:
$ pwd; ( cd Itmp ;. pwd I ; pwd;
Ihome/den
ILlI!p
Ihome/den
$
Если нужно часто I!Ы{ЮЛНЯТЪ одну И ту же последовательность команд,
можно оформить ее как функцию:
$ function morningrepor.t {
> date;
> free;
> Wj
> )
$ шоrпiлgrероrt I mai 1 root
Имена и область ВИДl{МОСТII функций ПОДчиняются тем же правилам,
'ПО 11 для перемениых. Нельзя ()пределять ФУНКЦИЮ и nepeMeHllyIO с
одинаковыми именами. .
Определенные вами перемеИ1Ше и фущщии действительны только для
текущеro сеанса работы в оБОЛОqgе Ьп.Ь. Чтобы воспот.ЗОllаться ими 11
следующем сеансе, запИШlIте т В '!'еКстОВЫЙ фаЙЛ, а Korдa ОНII понадо-
бятся, заrрузите этот файл в память командноrо интерпретатора встро-
енной командой source:
$ cat > foo
mуvаr=Моя перемелная
f\тction myfU!1 {
echo $myv'ar
)
-[)
$ source [оо
$ myfun
Моя переменная
"
"
148
rлава З. Работаем -8 командной строке
Команда ource !lьшолняет ИНстРУЩИИ,содержащиеСЯ!l файле, в TeKY
щей оболочке в отличие от исtrl)JЦfения файла, содержащеrо сценарий:
тот вьшолняется в дочернеЙ ободочке, и определеиные в ней переменные
и ФУНКЦИИ для родительской оболочки невидимы. Чтобы заметить раз
IIИЦУ, удалите неременную myvar и функцию myfun из памяти оболочки
командой unset, сделаЙте файл foa исполняемым командой chmod
(п.3.4.3) и ИСПОлните ето. Убедитесь, что после ето выполнения пере
"енная myvar и функция myfun ocrались не определены.
3.4.8. Инициализационные файлы bash
Начальные ЗНачения переменнык окружения становятся известны KO
"андному интерпретатору basb из ИНИЦИaJIизационlIЫX файлов, которые
он прочитывает сразу после своето запуска. Эти файлы назьшаются
. bashprofile и . bashrc (в порядке чтения оболочкой) и берутся из
домашнеro кашлоrа запустившеrо оболочку пользователя.
Команды, присутствующие в этих файлах по умолчанию, только прочи
тъ!вают общесистемный фаЙЛ настроек /etc/bashrc. Вы можете доба
вить к ним свои личные настройки, определив НУЖllые вам переменные,
функц,ш и псевдонимы.
При завершении сеаиса работы с оболочкой ВЫПОJШяются команды в
файле /. bashlogout. Туда вы тоже можете добавить свои команды:
наl1ример, .зафиксировать время окОнчаниЯ cBoero сеанса в файле или в
l1исьме дрyrому пользователю.
Команду установки переменной СDРЛТН, рассмотреююй в п.3.4.3, .{Мест,
смысл добавить в . bashprofile, чтобы не пришлось вводить ее вруч
ную в начале К8Ждоro сеанса работы в bash.
149
rлава 4
РАБОЧЕЕ МЕСТО
ПОЛЬЗОВАТЕЛЯ
rРАФИЧЕСКдЯ СИСТЕМА Х WINOOW
ОКОННАЯ СРЕДА КОЕ
ОКОННАЯ СРЕДА GNOME
ОФИСНЫЕ ПАКЕТЫ
ИЗДАТЕЛЬСКИЕ СИСТЕМЫ
rРАФИКд в LINUX
ПОЛЕЗНЫЕ ТРЮКИ
LINUX ПОЛНОЕ РУКОВОДСТВО
ECJUI вы СQбираетесь только изучать, на<."Траивать и адМlIIшстрироватъ
СВОЮ ОС Linux, то вашим раБОЧЩ,j местом станет консоль, а средой оби
тания КQмаIlдная строка. Для нормальных же людей КОj,lПьютер не
хобби, а ЩlструмеllТ для решеция определенноrо Kpyra задач. Задачи
эти решаются Не средствами QоераЦИОННQii системы, а nриклаДИЫМII
проrраммами, и большинство людей ПРИВЫК)lо решать ИХ с помощью
приложе/IИЙ, работающих в rрафическом режиме под управлением ОС
семейства Windows. Среди таких ПРllложеllИЙ:
. офисный набор: текстовыЙ "роцессор, редактор электроllных табтш,
система управления базами данных;
· средства просмотра 11 редактирования rрафической информации;
. средства общения с коллеrами (электронная почта, JtllТернетпеЙд
жер);
. средства получения информации из Интернета: веббраузер, ftp- кли
ент;
. протраммы для воспроизведения аудио- и видеозаписей;
. узкопрофеССIЩIIВЛЫlЫе nporpaMMHble Пакеты: мзrемаТИ'lеские. ИН-
женерные, бухrалтерекие, разработчика протраммноro обеспечения
и Т.п.
Для подавляюшеro большинства таких Wiпdоws-приложений существуют
дocroйllые (11, что немаловажно, бесплатные) LiпuxаflаJlоrи, COBOKYlll!OC'I'b
которых и создает удобную среду рабочеro места.
151
lINUX; полное РУКОВОДСТВО
4.1. rрафическая система Х Window
Работа в ['рафическом режиме под Linux возможна блarодаря системе,
именуемой Х Window (или просто Иксы; только не называйте ее Х
Windows), разработанноЙ в Массачусетском теХНOJIоrическом институте
(MIТ) и ставшей стандартом ДЛЯ всех UNIХ'lюдобных СИСТеМ. Сами по
себе Иксы это не rpафическиЙ интерфеЙс как таковой, а лишь набор
снеuификаuиЙ, которым этот самыЙ rрафический интерфейс должен
соответствовать. В иастоищее время действует версИЯ 11 вьшуск 6 стан'
дарта на rраФическую лад систему для UNJХ-систем, которая кратко
обозначается как XllR6.
f'рулпа проrраММIIСТОВ, возrлапляемая ДЭIiНДОМ Вексельблатом (David
WexeIbIat) созлала свободно распространяемую реализацию Х Window
ДЛЯ процессоров i80386.Pentium IV и совме-тимых с НИМИ. Эта версия
получила название Xf'ree8b, поскольку моrла выполняться в операцион'
IIЫХ системах, предназначенных для процессоров, используюших систему
!tOMaHA 1'86 Linux, FreeBSD и друrих. Одиако с версии 4.4 команда
разработчиков ХРтее86 переlШlа на новую лицензию, которую обществен
IЮСТЬ сочла lIесовместимой со СтандартноЙ Общественной лицензией и
поэтому недостойной в!tлючения в некоммерческую ОС.
Блюдя ЧIIСТОТУ Идеll открЫТоrо кода, друrая команда запустила проект
X.Org (http://www.x.org), npедставляюший собой развитие XFree86 от
версии 4.3, еше имевшей «правIIЛbНУЮ» тщеюию. В ре-Jультате одни ДlIC'
трибутиnы (например, Fedora Core) содержат реализацию стандарта Xl1
от X.org, а друrие (например, nредыдушие ОС Red Hat) о. XFree86.
org. Различия КQснуJ!ИСЬ имен '{расположения неКОТОрЫХ фаЙлов.
Имена файnов 8 раЗNЫХ реал/о1$<'ЩИХ Х11
Та6лиЦ8 4. t
XF....B.org Х.otg
CI1OI\MJ,Abl(j, фаЙnbl Х SEиveI' XFrl'3e66 Х"'"
Файn li3cTpOt!jo;; Х &trver jе!с{Х11jXF86Сопfiй /etc/X11!xorg,conf
Фl'IЙ)'I :«у1)нanа. )( Sйrver {wr {togIXFree8G.$DI3PI..AY.log ;'vl't.r{logf)(o:l1}.$DISP1.J\Y.!og
Сама по себе система Х Window не предоставляет никакоrо полыова-
тельскоrо интерфейса, 0113 тощ,ко цредос.аоляет друrим проrpаммам
средства для работы с видеосистемой компьютера, то есть видеокартоЙ
И монитором. и УL,ройствами ввода: клавиатуроЙ и мышью.
152
rЛавв 4. Рабочее место пользователS1
Орrанизована она по модели КJ1иентсервер, хотя эти термины понима
ются не совсем обычно. Обычно проrрамма.к;шент работает у вас дома,
а сервер в КалИфОРНИII. Х.сервер же это аппаратно-зависимая
Сllстема'81IОдавывода, работающая там, rHe находятся устройства BBoдa
вывода, то есть на вашем компьютере. А ХклиеlП, выводящий данные
в видеосистему, может быть запущен 11 на удаленнаЙ машине.
ОДИН ИЗ Хклиентов ЭТО оконный менеджер (или диспетчер окон). Он
управляет размещением окон на экране, определяет их вид и характер
управляюших элементов. То е(.'Ть именно он и представляет собой rpa
фический интерфейс пользователя (GUI) в собствеНlЮМ смысле. Таким
образом, пользователь ОС Linux, в ОТ,1Ичие от пользователя Windows,
не ПРlfвязан к одному rpафическому интерфейсу: таковых, определя-
емых оконным менеджером, теоретически может быть невообразимое
множество.
от оконных менеджеров отличаются так назьшаемые интеrpираванные 'Pa
фические среды, или просто оканные среды. их отличие в том, что наряду
с функциями управления окнами они предоставляют лоступ к некоторым
наборам утилит и приложений, написанных специально для конкретной
среды, более или менее теСfЮ в нее встроенных 11 леrко обмеНlfваЮЩltхся
данными. СО МНОПL\fИ 110ПУJlЯрlfЫМИ диспетчерами окон lt оконными cpe
дамп можно пазнакоМIIТЬСЯ по адресу http: I fxwinшап.оrg.
Почти в любой дистрибутив включены хотя бы две интеrpИрОJlil.нные
rpафические среды: КОЕ и GNOМE, Я рекамендую ИСПOJtЮОJlатьсреду
КОЕ это очень мощная и ОдНовременно простая в освоенltи и ис
пользовании оконная среда.
Не зря ее чаще, чем GNOME, наЗIi3чают средой по умолчанию. По внеш
нему виду и функциональности вчерашним пользователям Windows она
наиболее симпатична.
Обычно система Х Window запускается автоматически при заrрузке си-
стемы. Вы увидите rрафический менеджер реrистращfИ (в зависимости 01'
настроек вашей системы он может выrлядеть по-разному), приrлаmаЮЩltй
вас ввести имя пользователя и паролъ. Менеджер реrистраЦИII позволяет
тав::же выбрать сеанс, то есть оконную среду (КОЕ, GNOME или друryю),
которую БЫ будете использовать. Одна из установленных оконных сред
запускается tlO УМОЛ'IaНIIЮ.
ИЗ (ЖOlfНОй СрС:Щ!>J вы можете переКЛЮЧIfТЬСЯ на текстовую виртуадьную
консощ" Н;!.ЖaIJ1tО!о1бищщию клавиш Clr\+Лlt+F<J1>, rдe n ЧИC!IО or
t до количества щпущеlfflЩ виртуаЛЫfЫХ консолей (по умолчанию щ6,
но несколько можно отключить. Как это сделать, вы узнаете в п.9.1.2).
чтоБыернутьсяя на rpафическую консоль, нажмите Alt+F7.
153
LINUX: полное РУКОВОДСТВО
4.2. Оконная среда KDE
По своеЙ простоте и интуитивиости среда КОЕ (К Oesktop Environment,
Jo.t tp: IIW!'JW. kde. org') подобна rрафическим интерфейсам MacOS ИЛИ
Windows. КОЕ предоставляет боrа1ыe возможности взаимодействия
проrрамм, обдадает встроенным механизмом drаgапddroр, полностью
реализует вид и ощущение (Jooka1\d-feel) рабочеrо стола,
4.2.1. Рабочий стол KDE
Рабочий стол КОЕ состоит из трех чаС1'СЙ:
1, самосо рабочеrо стола, на котором мосут размещаться значки файлов,
каталоrО8 и устройстн;
2. унравляюшеЙ панеJlИ, которая используется ДЛЯ запуска просрамм;
3, панел!! задач, к:оторая предназначена для лереключеНЮI между ра-
ботающими проrpаммами,
ПривычиыЙ пользователь Windows сразу же ищет киопку "Пуск", Есть
н КОЕ такая кнопка, Она называется кнопкоЙ «К" И находится в начале
.., .Д,.: N: eMjм.. Ф.i":".
: ! .';.!. jI ..'.' .. i =зj';':)D@<tJ ]
r
, '.;Ъ;;:ki:iw";'"
S6sitlaa [Фi Vitw .$.aw Hdp
I',!,'''' : . ё<"" , ,
.:
. <с. :
",,-_4
!.-....
S,."..
:'""-t!.,,.
"..,,'1\..
,
>1..",
11 ]
:!':'!I!I
1H'
,"»:
!..;З ,...,
" 1>'.1 ."....' ",::h",
. . .
HJH
lH!:J
с.. '. .j"Q
5.....9'
i,j..".; ".,.;,1,-;.... . 1 '; .jf
':"""H" 0:'''....,......
н: .'5...."
'1..." I!.".,'v"..,. 1'1".""; """,.""", ,,,'. ""',
> "", !"",p" = -',С", :<;, "" \1" 1."",,\,'!>,:н
" о
пC111 )H':'" Jr»;t<;,t>,; pt
l(IJ:.') '11 <;';B :' !b"r".
,!lIH 1.1,1,: .и (,H"''''',,,,
.'.1..,.. /1,,,,,
I[]'д;..о;,"о 1 ii!!..;.;",",,,,,,, ..
'., ..... . . ....,.,.;.;.;.,
'!!I""'"",,.," .
Рис. 4. " Рабочий стол КОЕ
154
rлава 4. Рабочее место пользователя
управляющеЙ панели (по умолчанию в левом нижнем уrлу). Под ней,
как и в Windows, скрывается MHoroypoBHenoe иерархическое МеНЮ. В ва-
щем дистрибутиве оно, как и встроенная rипертекстовая справка, может
быть даже русифицировано.
Для быстроro вызова меню «К» МОЖНо использовать комбинацию клавmи
Alt+Fl.
4.2.2. Запуск nporpaMM и переключение между ними
В общем случае запустить nporpaMMY или приложение на выполнение
можно несколькими способами:
. Щелкнуть мыщкоЙ по значку npotpaMMbI на панели (если таковой
имеется).
. ЩеЛllliУТЬ мьпщюй по соответствующему значку рабочеro стола (если
такой есть).
. Выбрать nporpaMMY ИЗ меню «К».
. ИспOJ\ьзовать файловый мецеджер, например, Konqueror.
. Выбрать в меню «К» команду «Выполнить проrрамму» и ввести имя
запускаемой проtpаммы в строку ввода ПОЯ8ившеrося диалоrа. Быстро
вызвать этот диалоr можно комбинацией клавиш A[t+ п.
. Зanyстить nporpaМYy с IIИРТУWlьиаrо терминала.
Виртуальный терминал это проrрамма (Kterm иЛи Konsole). в окне
которой вы можете работать в режиме командной СТРОКИ, как на обычноЙ
виртуальной КОНСОЛИ.
Прим""...ие
ri
Для знающих анrлийски:й язык: наз.вания nриложени\'l вроде Konqueror, Копао....
Kontact это we ОПElЧо;.ТkИ, а знак Toro, ЧТО при-южеН1I1Я раэрабатывались для
ОкОННОЙ Среды К. НОЗlЩние ..к,. не расшифрое.ыва.еrся никак. Впрочем. еСТЬ
верси. что зто назааниебыло выбрано в пику CDE(Common Deskt.op Enllironment},
l(оммерЧеской Qj(ОННОЙ среде. разраБО1ан"о Дf1Я КQммер4ескйй UNIX-
Переключаться между запущенными приложеНИЯМJI можно комбинаци
ей клавиш Alt+ ТаЬ. Вызвать контекстное меню любоrо объекта можно
правой кнопкой МЫШИ. В общем, все КJlК в Windows... и еще иесколъко
виртуальных рабочих столов. Они обозначены JCНопками с цифрами на
панели задач. Окна приложений открываются на текущий рабочий сто".
11, котда вы наведете там достаточный беспорядок, вы сможете переКlIlO
'Iиться на чистый стол щелчком ПО такой кнопке или комбинацией клавиш
Ctrl+ ТаЬ. Обратите внимание, что комбинauия А\! + ТаЬ переКlIlOчает
только между приложениями текущею стола.
155
LINUX: попное pyJ<080ACТ80
4.2.3. Файловый менеджер Konqueror
основные возможности
Среда KDE обдадает собственными файловым менеджером и веббра
узером. Обе эти фуИJЩИИ выполняет протрамма Кonqueror. Менеджер
Konqueror может работать не только с локальными файлами, а и с
файламн, расположенными на друrих компьютерах Вашей сети или I/а
серверах FТP.
Как и любой друroй файловый менеджер, Konqueror умеет:
. Копировать, перемещать, переименовывать и удалять файлы и KaTa
лот;
. Просматривать файлы различных форматов;
. Создавать ссылки на файлы;
· Изменять свойства файла.
Команды меню и Iшструментальные кнопки представляют собой объеди
нение команд, знакомых вам по Проводнику Windows и по nривычному
веббраузеру. Кнопка «Домой» В режиме файловоro менеджера выполняет
переход в домашний каталоr. Часть рабочей области можно отвести под
виртуальный термmiЗЛ (меию Окно I Эмуляция терминала).
Можно nереключить Konqueror и в режим Midnight Commander. Все
режимы на самом деле задаются настроечными файлами в каталоrе
/. kde/share/apps/konqueror/profiles (помните, что «» это
ваш домашний каталоr).
Проrpамма, пользующаяся этими настройками, называется kfmclient.
Konqueror не только фаilловыil менеджер
При работе с FfРсерверомудобно видеть сразу два каталоrа локаль
ный и удаленный. Если вы испоJtЬзуете KonqueTor для работы с FTP, вы
можете разделить ОlШо «Завоевателя» на две части. для этоrо ИЗЖМlIте
Orl + Shift + L. Перед этим l'eCbMa желательно развернуть окно на весь
экран. Выберите одиу из 'taстей (какую вам удобнее) и в строке Адреса
(Location) введите адрес вашerо FТPcepBepa: ftp: 11 ftp. server. ти.
«Завоеватель» попросит вас ввести имя пользователя и па роль, а после
этоl'O вы сможете удобно работать с FTP-сервером.
Если в строке Адреса ввестц smb:/, вы YJlидите рабочие rруппы II доме-
ны Windows, еСЛIl таковые есть в вашей сети. Для работы этой функции
должен быть установлен и запущен пакет Samba (подрОбнее см. п.6.3).
А теперь попробуйте ввести в строке адреса r 1 аn : /. Думаю, вы найдете
в своей сети мното интересноrо.
156
rлава 4. Рабочее МесТО пользовэ.Теl1Я
Вставьте Audio CD в ваш приводСDRОМ, Запустите Konquercr и введи
те audiocd: I . Вы увидиre список дорожек вашеrо Audio CD, которые
будут npедставлены в Виде отдельиых WАVфайлов. В зависимости от
установленных плаrшlOВ вы можете преобразовать дорожки в форматы
МР3 итs OGG или же просто сохранить на диске как wАvфайлы.
4.2.4. Центр управления KDE
Центр уnpавления иrрает ту же роль, что паllелЬ управления Windows,
с той ЛIIIПЪ разиицей, что Панель управления настраивает всю систему
в целом, а Центр управления только KDE. Зато в пределах КDE Ha
стройке поддается практически все. В разных дистрибутивах и разных
версиях KDE может отличаться не только орrанизация и состав разделов
Центра управления, но и способ ero вызова. Так, в КDE версии 3.2 он
называется Настройка CBOl!rO рабочеrо стола и вызывается через К I
Система, а в КDE 3.3 он вернулся в меню К. Следующая таблица (табл.
4.2) приroдна дЛЯ KDE 3.2. Последней вышла версия KDE 3.4. Ее oco
бенности мы рассмотрим в отдельном разделе (СМ. п.4.2.7).
Рвзделы Центра управлвнJ,1Я
Таблица 4, 2
Р83деп Описание
В этом разделе нахОАR'СЯ наGТроIi;И IJИРТУЦnЬНЫХ рабочих столов,
LookNFeel декорации окон, nанелеА B ТОМ ЧИСЛА И nанаnи зздач), пиктоrpамм. стиля
и ОФОРМЛОНИR ОКОН, фона раБD"lеrо tТОЛ8 Iof хранителя зрана
безопасность rtapaMO'tpbl шифрования. tJ том '.исле nOMep)kl.1вaeMble елrоритмы
шi>tфРО&аН$'lЯ
ЗПУК ПаРi1МВ1рЪi Сервера звука aRts 111 систеНbI)I: 3JJY!1:0B
и..формаЦltlЯ Сведения о системе_ Этот раЗnВfI сsоеобраз-ныti анелоr nporpaMMbI
Sys!n10 из l1,aКBTa Norton Utilltes
Периферия НастрС»1ки nерифврio\ЙНЫХ усТроЙС1З: Ца.1фроsoil камеры, "=М8иатуры и МЫШИ
KOМ"O.HTЫ OnЦИИ: раз.личН"ых компонентов и служ6 КОЕ
npoomO-ТР Web Параме<ры браузеРО8 Konquerot " Netscape
Нвстройки для работы о о.стью. 8 эroмДDпе МОЖНО указать, кекс оеТЬЮ
СоТ. буАетn работать 8Ы. НастрйИВltТь »св со6С1'8ЕЖно сеть MOWe,- ТOnbkO адмИt1и.
стра1'ар
Сието.ма Общесис.rеJ,lНЬШ rшрамотры, например, rшетры меН8Д*.ера реrисТраций.
Изменить их anра6& ТОЛЬКО суnерf!ользоsаrеllЬ (администратор]
Cneц",anbiibllJ В ЭТОМ раздSл06 вы I;МС)ЖfПIJ QпреДеЛИТ,," f1РМРf!:ЖИ Im,шиш, рВс....пвд!(и
еоэмо lt:Лаs....аrypы, 8ыбреrь страНУ и "'зык
Упpaвnение 3апl'ЯНИТе s Э10т раздеll, всли вы ИСnО1lЬЗУ8ТО:tiоyrбук
nи'ТЗНием
157
LINUX: полное РУКОВОДСТВО
В разделе Специальные возможности Страна и язык обязательно устало--
вите свою страну (Россия или Украи.на). выбсрmе язык 11 установите коди-
ровку (koi8-r или koi8-u). Все эти параметры необходимы для праВlIльноrо
оmfiраження русскоязычных симвnлов в окнах npиложеннй КОЕ.
4.2.5. Работа со съемными носителями в KDE
Чтобы ОС Нпнх получила доступ к даНIIЫМ lIа ватей дискете, компакт-
диске или flаsh-накопителе, фаЙJ\овая система съемното носителя ДOJlЖна
быть ВКJlючена в общее дерево каталоrов как одна И3 ero ветвей. Этот
проuесс называется монтированием. ЛОПI'lески 011 IТредставллет собой
сопоставление корневому каталоry подключаемой файловоЙ системы
kakoJ"O-ТО нз уже сущесruуюIЩIX каталОJ"Oв. Этот каталоr называется точ-
кой МОНТИрОllаиия. После тоro, "ак к каталоry nрllмонтирована друrая
файловая система, все бывщие в нем фаЙJ\Ы временно до раЗМОНТlI-
рования становятся недостynНЬ!, а вместо них видны файлы cЪCMlloro
носителя. Отсюда следует, что в качестве точки монтирования лучше
выбирать пу<.'Той катмос
ОКОНllая среда КОЕ дО версии 3.3 не Выполняла монтирование автома-
тически, и Ubl должны знать, как сделать это UРУЧliУЮ,
Обычно команда rnоt1пt применяется в формате;
mount t <типФС> <устройство> <точамонтирования>
Устройство это имя фаЙJ\а этоrо устройства. БОJlЫШrnство современ-
ных CD-ROM- приводов подключаются к IDE J<:онтроллеру, поэтому
для ССылки на компакт-диск используется имя [DЕ-устройства чаще
все"о /dev/hdc. Инcrаллятор рбычио распознает CD-ROM 11 создает
символическую ссылку /dev /cdrom->Idev ;r,dc.
Типы фаЙловоЙ системы на съемных носителях чаще Bcero таКJlе:
Та6лииа 4,3
Ha38aHi4fJ; Система
ext2 ОtновнаЯ феЯI10ВilА (:Мстйма Unux
ехtЗ Журалируе...ая HaдCfpoкe. ПQЛНQСТl:.Ю совместимая с ext2
vfa. ФаЙnОfJ8.Я СИС'fема Windows: FAT. VFAT, FAnz
fso9660 ФdЛDuuе сис'rемЫ ДJlЯ ICОМnЗW;Т-ДИСКО9
Как правило, монтировать постоянные носители ииформации (раз-
делы жесткоrо диска) имеет право только администратор. Съемные
же носители разрещается монтировать обыкновенным пользователям.
158
rлава 4. Рабочее МесТО пользователя
Специально для них у команды mount есть сокращенная форма, при
которой достаточно указать либо устройство, либо точку МОНТllрования.
Недостающую информацию проrрамма монтирования получает из файла
letc/fs!:a]:,.
Так, для подключения flаsh-накопителя я:
1. включаю ero в USВ-порт;
2. перехожу о текстовую консоль ИЛИ открываю окно виртуальноrо
терминала;
3. mount Imedia/usbdisk # или mount Idev Isdal,
Перед IIзвлечением съемныЙ НОСlIтель необходимо разыонтировать
коыандой
umount (устройство ! точкаМОНТИРО8ания].
Не сделав этоro, вы pllcKyeтe потерять все данные на нем. Разыонтировать
устройство можно только тоrда, Korдa к данным на нем не обращается
ии одна nporpaMMa (нет открытых фаЙлов, н" один катзлоr не является
текущим НI, для одной nporpaMMbl). Узнать, КаКие ПРОllессы обращаются
к файловой системе. можно с помощью утилнты fnser.
При работе с коыпакт-дисками обыч>JO не Rозникает сбоев, потому что
лоток привода CDcROM контролируется системой. Вы просто не сможете
ИЗIIЛечь компакт-диск до тех пор, пока устройство не будет размонтиро-
вано. А вот при работе с дискетами и flаsh'накопитеЛЯМII проконтроли"
ровать вас некому. ПОМНlIте, что, пока вы не раЗМОНТllроваЛII ДIIСКету,
фllЗическая запись на нее не будет ПРОllЗведена. Это значит, что, если вы
сохранlIЛИ соой документ на дискету и оытаЩИЛII ее IIЗ дисковода, файла
документа на ней не будет, несмотря lIа то, ЧТО вы вышли из TeKCТOBoro
редактора. Вы забылн размонтировать файловую систему!
4.2.6. Добавпение собственных команд
в контекстное меню KDE
Запустите Копquеrоr н щелкннте правоЙ кнопкой мыши на каком-нибудь
файле. Вам чеro-то не хватает? Хочется добавlПЬ какую-то команду? Или
есть команда, которую вы выполняете очень часто? KDE позволяет соз-
давать собственные команды меню, чем мы И заЙмемся в этом пункте.
Давайте создадим дополнительную команду, которая делает файл ис
110лняемым. Это действие очень полезно, если вы часто пишете сценарии
bash (rлава 8). Ведь сценарии bash это обычные файлы, созданные
в текстовом редакторе. Чтобы сценарий запускался, нужно с помощью
команды chmod +х имяфаЙJ1а сделать ero IIсполняемым но команду
ВI!ОДИtь лень, хочется все сделать мышкой., .
159
UNUX: полное руководотво
в любимом текстовом редакторе создаЙте файл следующеro содержании:
Листинr 4.1 < Файл makeexe.desktop
IDesktop Entry]
ServiceТypes=all/allfiles
ServiceТypeapplication/xshel1script
Actions=MakeExe
IDesktop Action МакеЕхе]
Name=Make executable
Name [ru] =Сделать файл исполняемым
Exec=chmod +х %!
Icon=kfm
Рассмотрим первую сеКЩfЮ. Первая директива задает тип фаfuIов, для
которых МОЖНО выполнlПЬ указанное действие. В данном случае действие
доступно для всех. фаfuIОВ (allfiles). Если вам нужно выполнить какое-то
действие для каталоrа, то значением директивы ServiceТypes ДОЛЖНО
быть inode/directory.
Вообще в качестве Зllачения ЭТОЙ ЮtpeКТИВЫ можно указать любой МIМE
тип, например:
SеrviсеТуреs=аudiо/хmрЗ
Если действие ДOJlЖНо быть выполнено для всех типов фаfuIов, кроме lIe
которых, используйте директиву ExcludeServiceТypes. Например, действие
архивирования не имеет смысла производить над архивами:
ServiceТypesall/allfiles
Ey.cludeServiceТypes=applicatian/xzip,kdedevicel*
Директива Actions определяет действия, описаиные В файле. В данном
случае описано только одно деЙС11Ще MakeExe, которое определено в
секции [Desktop Action MakeExe]. Директива Name это надпись, 'ю
торую вы увидите в контекстном меюо КОЕ. Желательно писать ее на
анFЛИЙСКОМ языке. ДиреJ<тuва Name[ru] это надпись, которую увидит
пользователь локализованною КОЕ.
ДиреКТlmа Ехес ЭТО команда, J<Отарая будет выполнена. %f параметр,
определяющий имя файла; то есть имя файла, на котором вы щелкнули
прапой кнопкой, будет подставлено вместо %f.
Созданный файл сохраните под именем тaKe(xe. desktap.
Как видите, в ЭТОМ нет ничею сложноrо. Осталось только сохранить файл
в нужном катаЛОI.е !tisr /share/apps/konqueror/servicemenиs.
160
rЛ8В8 4, Рабочее место пользователя
Для записи I! этот катало!' нужиы права СУllерllОJlьзователя. Если же
администратор системы не БЫ. то скопируйте файл в катало!' /. kcJe/
s'hаrе/аррs/kопчuеrоr'/sе.rviсеmаnus, И новая команда будет дo
ступиа только вам.
4.2.7. Новое в КОЕ 3.4
в состав дистрибутива Fedor3 Сще 4 BOUL1a ноная нерсия KDE З.4, в
которой, как сообщают (www. k(je. org). исправлено более 6500 ошибок,
учтено более 1700 пожеланий, включено SO()OO пополнений от раЗЛИ'IIIЫХ
разработ'шкон. Среди rлавнЫх Iювшестн:
. ПОЛНОС1ЪЮ обновлена система корщиы,
. Нона>! верСIIЯ КРОР с возможностью выбора. копирования и вставки
тскста и IlзображСIШЙ 113 РОР, а также с Дру,rими улучшениями.
. Добавлен синтезатор речи с воЗможностью интеrрацин в браузср
Koпqucror, ТСКСТО!IWЙ редак'юр Kate, РDFпросмотрщик КРОР.
. Прнложение Копtасt поддеРЖИ8ает больше серне ров совмесТl'ЮЙ
рабоl'W (groupware).
f':'УЩ.б;;"
! I'::.u:.:лМ,::OUI"I#Л"f("' ,?"""''''''1M . ;;1
" I ""''''''''' I!?!Y.!" i""'"" ""'-tl
7"i:...",,",,,,..,"r:;r. t\.Q.....tll/d.."1OoO:u: д"""" H..";rnvlll..... f I
j j'* &IIr'\II.IIII\\......I(r.:; ; )o'"" "...."'" Kr;{ 1) Ш1UI.. 3roщ 1001 """,,0>;""<1
!.. &tl"""'.....h ....". :u,-\It кс;сп "''V"t'<t'>'IIOI ""I>i'''''' I'-""'(''iщ,,,, 1'I'O'I1I......1(;"
!'()I;I,dqp..I:*"""""''''' 1j\$..........K!'>&L IJЩJl i-1.
< 1 _"""",,,,,,""o'l'" Ц""УО Н.и...у........
HDw<llll'QI.""""''' I
j'''':l'''JlФ'1>«' : Mw..AI>b\..4P""".............,., .. !:_ II!,. .
i-"/1r«>oo""".1оtlpф(JIploФ<h' i'С.I')',UrN".""""""unr:i#"--
I: ::': : ::::: , 1, ij1Е"',:'ш
t''''1Itvc. I "В .I}.......r::.:W11МI
. i !!е );........"""".....
t'.t'.t'I<...."o" [:е j1"'''''''''n''''(IO,i\CE
,o;P"';'I....tI!o,""""'»"'"O)t'i e. ...."!\,,,.,Il,"'.....;"'nrIiuCi'i!i.Si:.' I '
14"iIj!Ic.,....."...I>! f i , 'i ,EI
' I : 1.ц""........<:t-.з............."О'::"I>".WIз/"(lJ\(;It.UWfty""'-"""']
.;,.ltrw".....*I,,"""IO,""" l '
'.' ! " I , S l""ooo,,""""ati..........."....<rмeo'''...oIa....c......'''''.Ii ,.
..,1.yn"""........."""'"....
I '' \8 1P'Id""""'''.''тш- н-ш-/,,.,,..... кое:о I
11 F::lil,.I -ё:ш_шшш li,
I . .'.,.j ':.::':.,:::...:'.:::: ;..:"., :' :;::;,;.3' :;.::!'
:tm.fI1Ф
Рис. 4.2. Центр управления КОЕ 3.4
6 ЗЩI' ,1t:
161
UNUX, ПОЛНОе руководство
. Улучшен механизм обнаружения подключенных устройств через
HAL. Теперь KDE монтирует съемные носитещol автоматически, но
не спешите радоваться: кириллиuу в именах файлов на USВдиске
она автомаТИчеСКИ не раСlюзнает, так что п.2.3 вам еще nриroдится.
. ПОЧТОВЫЙ клиент KMail теперь можеТ использовать KWallet (БУlаж
ник KDE) для храпения ппролей, а доступ к самому бумаЖНlIКУ можно
сделать беспарольным.
П Ф ,, Ф S ' VG
. оявилась возможность использования а'nДQВ в армате
(ScalabIc Усе/о' Graphic,f) в качес1'ве обоев для рабочеfО стола.
4.3. Оконная среда GNOME
4.3.1. Общее описание и методика раБОТbI
Что за зверь эта GNOME
Среда GNOME (GNU Network Object Model Environment Сетевая
Объектная Среда GNU) один ИЗ основных конкурентов среде КОЕ.
Среда GNOME (www. grlOme. q);'g) ЯВЛЯется чаСТьЮ ПРQeкта GNU (www.
gnu. org), начатоrо в 1984 fQДУ иставящеrо СВОей целью CQздаНl!е nOJWo
цеННQЙ UNIХ-подобной системы, цеЛИКQМ состоящей из свободно pac
пространяемоro кода.
GNOME дружественная рабочая среда, значителЫЮ облеrчающа.я
использованне КОМПЬютера. Среда GNOME включает в себя рабочий
стол, ванель для запуска I1РОСРамм и показз информзции о состоянии
системы, а также набор всевозможных приложений, которые тесно в.за
имодеЙСТ8УЮТ друт С друrом. GNOME, как If КОЕ, является полностью
ОТКРЫТОЙ разработкой: каждый может uыкачать исходные тeKcты среды
и использовать ИХ. Блаl'Oдаря этому в процессе разработки GNОМЕуча-
СТповали и участвуют СОТI1И проrpаммистов со Bcero мира.
В среде GNOME настраиuается практически все: ОДИН раз Hacтpollll сеанс
по споему вкусу, вам больше не нужно будет повторять ето настройку,
потому '11'0 менеджер сеансов позаботится о сохранении иастроек. Как
и в КОЕ. 8 GNOME поддерживается метод drag'and-drop.
На данный момент 11 составе БОЛЫЩlНства дистрибутивов Linux постзв
ляется версия GNQME 2.6, но она уже считается устаревшей, поскольку
относителыi,ндавноo 8Ъ1шда lJ!рСllЯ GNOME 2.10. СправедJIИВОСТИ
paДl! нужно отметить, что некоторые дистрибутивьt (например, Fedora
Сосе 3) содержат версию GNOME 2.8, которая не СИIIЫЮ отличается от
версии 2.10.
162
rЛзва 4. Рабочее место пользователя
Основные элементы среды это рабочий стол, панеЛ[, GNOME и rrанель
задач. На rrанели GNOME (узкая полоска вверху экрана) расположены
кнопКи rлавноrо мето ПриложеllИЯ (выбор приложения) и Команды (раз-
Jllfчные команды, например, Выполнить или Завершить сеанс), а также
аllплеты. Все остальное пространство называется рабочим столом (см.
рlfС. 4.3). Нижняя полоска внизу экрана это панель задач. Ее можно
временно убрать с экрана, lI\елкнув по стрелке I1 уrлу. Апплеты He
большие проrраммы, которые работают внутри панели и запускаются
шелчком мыши по значку на панели. Сразу после установки вы можете
увидеть там, например, календарь.
Один из базовыx принципов GNOME 2 состоит в том, чтобы упрошать
все, что только можно; элементов управления под рукоЙ у пользователя
дuлжно быть как можнu меньше. Девизом GNOME 2 стала фраза «just
works» «работает, и .все)о)1 без ДОПOJн-Iительных пастроек.
TaK мон:тированис Съемных носителеЙ выполняется автомат»чески:
вставьте компакт'диск или flаsh-накопитель, и на рабочем столе сразу же
п""вится соответствующиli значок. Размонтируйте носитель командой
ОтсоеДllНllТЬ (Eject) из контекстиоrо меню этоrо значка. Следует отмеТlПЬ
..Пр."....... iJ'
.<z:; +
I
Добро ПО,"
срм....rиt'llol!
ЭlКOII'III!IЧН)'1O n
..
Н""..
;....... v А
.I: ''-C,,"'__.. в-ilfj_
."
-..;.;., .';"",.'.
1'fЙ.1'1 I1pal!;"II:D в...д I/!p
<;> .gnome
t> C'ppilt.;:tКJn..IrlO
f>9vf5;
f> с' mlmento
r- .91IO/1Ю2
f::I.gl1cmc2.J!riv
t) .g1';!rI!ca;m.er.O,g
'e',..
':; ! и;о. y l 1"rt,
.. Е'1 hi"IDtV 79 бт Щin dOaPr.
'ЦJIIi z.'k.БIm
k;}r ЭS6т .1't'IIjd«1JI'f
;,,'
[d.n.1QclhOL ]в
;1 J 3Нi5
( d':':1-;i.) D-::':CllhQ!'1"!'.
.::
. It т.-:
[del".@1QC<llho.!;;t.
i.2] -з::И1
jd"'I'.@lo:.,c",lh('.:;.t
)$
т "':.'=".... I . t
3 Щ!ИI.'IjТа. сt06C\lЖ1т. 26,4 rs
=:.. f",,"'.&U!'.WI ""!IВ!j
'< п
-']-, u
л
': ,-.iii .n#l{c € Оо:рец 1:: 11 ..
Рис. 4.3. Рабочий стол GNOME
163
LINUX: полное РУКОВОДСТВО
также, что GNOME распознает тнн cъeMHoro носителя и в зависимости
от типа запускает то IUIИ иное приложение. Например, Korдa вы вставите
DVD,диск, булет запущен DVD'проиrрыватель.
Файловый менеджер Nautilus
Начиная с версии 1.4, в пакет GNOME входит файловый менеджер
Nautilus, в дальнейщих версиях cr'аВЩИЙ файловым менеджером по умолча'
Нию, Это разраооrка компании Eazel, собравшей у себя l!erepaHOll AppJe'
создателей интерфейса Macintosh, до сих пор никем не превзойдснно['Q но
ПРОС1'Оте и удобству. В нем нет ничеrОЛИШllеrо: ни панеJIН инструментов,
ни адресной строки ТОЛЬКО окно с файлами и каталоrами.
Каждый к.аталоr открывается в -НОВОМ окне, а ра.змер. положенНе окна
и представление ф.айлоп (знаt.tкамм: Пли списком) привязаНЬf к этому
каталоry: в следующсм сеансе ОКНО этоrо каталоrа откроется н том же
месте рабочеrо стола. Такой интерфейс называется пространствеюю
ориентированным. Идея состоит в том. что на настоящем рабочем столе
бумажные папки не замещают дру" лруr'а, а Beerna лежат там, куда вЫ
их последний раз переложили. Считается, что так НОВИ({КУ .llсrче приме
.
.
Д.-е'-ОВ()Д CD'RWI
DVD,ROМ
СШ"n
I!ш..<ll"А""" " ' '''''
, .
tfJ
""".
""
r;J
. 11fI1I: . 11;сд .мy !do('"
ii
.
tfJ
<lmf'IA
(Д!
......5 Oflri9
I '= ]
":iI= iii1
[]
ii
I\!!I!IJ
tfge1eJ.
1,1)
,'
-&II
Рис. 4.4. Файловый менеджер Nau1ilus
164
rлааэ 4. Рабочее место ПOJ1ьзователя
нить навыки. приобретенные " реальном мире. Если же ВЫ не НОВIIЧОК
и привыкли К нормвльному IIнтерФейсу браузера, то пользуйтесь оравой
кнопкой МЫШИ или смените настройки 'Iерез КОНфllJ;,рационный фаЙл н
.I . gconf/ аррsJпаuti l1J5/рrеfеrепсеs.
Кнопка «Назад>" ПРИDычная по Проводнику Windows, выrЛЯД11Т как
ПUlOчка в левом уrлу строки СОС1"ОЯШН!. В диалOf"С открытия файла {)T
сутствует строка ввода имени. но ее можно БЬfзnать комбllиацисй клавиш
Clrl + 1..
В Nautilus встроеиа ВОЗМОЖНОСТЬ записи компактдисков; протрамма
nautilus-cd-burner.
С нерсии 2.6 основным веббраузсром стал Epiphany (Сl (. tp: Ilwww.
gТOOI1\€. org Iproject 51 ерiрh<\чх), облеrчснная версия браузера
(;aleon на движке Mozilla. Роль ПОЧ'1'овоrо клиента исполняет Орl'аlшйзер
Evolution,
IIа('троить среду GNOME можно как из менЮ Приложения ---> Параме-
тры (Applications ---> Desktop Preferences). так и из команлной строки.
r рафический конфиrуро1'ОР называется gconf-editor.
Расширенная система управпения МIМЕ-тнпами
Следующая особенность GNOME 2,82.1O раСIШlренная система упров
лени>! МIМЕ-'Шllами. Если вы lIытаетесь открыть не зареl'истрироваЮiЬ'Й
в системе МIМЕ-П1!l (нзнример, файл С расширением .doc, а система не
Зllает, какое приложение обрабатывает файлы с таким расшJtрением), то
будет отображено окошко, в котором можно будет связаТЬ данный тин с
конкретным приложеннем для 1'1'0 обработки.
p...r"'fII;I"'}:
o-r"JЦoIr. I l'tIOМYМ("
P1..JWna;b'
Q:t-IIfIfI .:
.. !т',itoj,,,j.. фji>r:.,
Ч"-.L.",.ф...
'_'__., . . .,_..>'_'" ,.. _" ,._, ,О, _._';;i)/\/M-,--,:t;/,"'y
O'J'ho':I;:'_':'__!'!':;':'-::rIWto,,
i.... .
,.I'w"*,:-r,,,,,,н,,,,,,щ
Ptи... 1 - .
f QцuJDlЦlж!t....
. ."....,...
.\.
!'(,
nll\ЩI)!Im
Рис. 45. Аналоr команды ..ОТКРЫТЬ с помощью..
165
..
UNUX: полное руководство
Если для данното типа установлено несколько проrpамм (напрltмер, Д)lЯ
НТМL-файлов установлено несJФJIЬКО браузеров), то, щелкнув по файлу
правой кнопкой МЪПIIИ, вы сможете IIырать предпочитаемое npиложеШlе
np5lMO как команда «Открытъ С помощью» В Windows, Такая орrанизация
интерфейса упрощает работу с Цпих начинающим пользователям.
Поддержка службы DNSBased Service Dlscovery
Теперь GNOME поддерживает службу DNS-Вased Service Discovery, кото-
рая ПОЗВOIIяет орraпИ30вать ПрlШЬ!Чное ДЛЯ пользователей Windows сетевое
окруже,ше вам не нужно IШ ломать rолову над настройкой Sarnba, IIИ
настраивать посторонние rrporpaMMbI Д)lЯ просмотра Wiпdоws-сети.
Сев. V,11'1{!,>\\,"- nit tI тl
с .
RЙЛ nP'iQiц T:.";;':'_a
..
-1-
1=1 . ... .
UJr
"ДВК
USER2
USЕRЗ
@
'1ir
!= ." '* '.
..
USER5
USR'"
СВТь wincbNsnil"" ,з!"
РllIO, 4.6, Самое обычное сетевое Оl<pуженне
Особенности последних версий
Думаю, не нужно rОПОРИТh о том, '11'0 сам интерфейс последней версии
GNOME стал HaMHoro щшяп[ее J[ появилось MHOro разнообразных тем
рабо'!еrо стола (меню Приложенкя Пара метры ...; Тема):
Центр управления GNOME тоже стал HaMHOl'O приятнее. Чеrо только
стоит апплет управления раСICЛздками клавиатуры (ПРИЛt)жения Па-
раметры ..... Клавиатура)! До ero появления некоторые пользоваl"ели и не
знали, что такое раскладка Dvоrаk(или любая друraя) теперь можно
не просто выбрать раСICЛадку, но It «посмотреть» на нее.
Как на панель GNOME, так и на панель зада'! южнод;)бэ.оIlТЬ еще не'
сКолько полеЗ!iЫ)( ашщетов, щeJlКНyJ! по панеЛIf npa\iQйIЩОПКОЙ мыши.
Ли'оно мне очень понравился апnлет Монитор ceтll, наблюдающий за
состоянием ceTeBoro ооединения и показывающий, кроме Bcero прочеrо,
166
PCII/tUolil
"'1'
"", ''\: '
. 1 '.'rIttJ.w.y!'.. l ';
1 .0IIщII>1.... 1
. '
' I g CDi:P_WKTb т'емУ:;, . , ; .
,.. g,ОС'!:t3J.Iwиit;l l '
, V, HВo:fPCIOJ(!ooI ;(!OU .
.. Bluecurve
.. (:);I"OIHт"'l '!>....п RlxJ '''<11 (IrIЩ'
. !!],,"'!:I .
G1ider
S!mpl. '5moa1:h <иЮ thetiсщ th.a....iпg
I
Q!: ','.. IПj
:i=' '
.1
;
6ollbwoi KlltbOH
ПЫIlЬНbI" pacHOВ8TbI 8"'Д
F:I :=.::=.
;ii:::'_:i... nOДPA3y--нr CJnp8.цепfIНЖlfО wpl'lф'f MI1М фоиа.
I ..... I
Рис. 4.7. Выбор темы рабочеro стола
O{la "'" rмc"IA<'" "'''''''уп", I .. Р,
F
'-"'"
!;ji ("I"!,.! Н I'!,' 1'1" t.\"F ![1$'
)::'::;: ;I,_ ,:i {",II"t , _"';'_,_ ,_. ,] .:,9<'
,: ; . "" . ; l .llшIМ . fI; I . . . .. tЕ . . . п. . { :""::::,::::;;.:. I i:...... . .. . ... :; .. . ::
. [:::,;;;;,: 11 "
" i r: ''" l : i J!I3fЦU:Ш" i ":
: ... ilRW3' [ na!! j ..
! - 1 ;:. I .. ,: t_;""_ .. ,, ,;)
I '0п...н T.... 't1i1!1'\lwr.1t,,;
,,,,--,,;,,,,,.,'
0.1 .' tC(u_ao.tiilO'
.:"-"
а........
Рис. 4.8. Выбор раскладки клавиатуры
t67
UNUX: nOliHoe PYtCODQACiBO
еще I! силу сиrиала, что особенно актуа:льноДl!Я беспроводных средств
СВЯЗИ И dialup соединений. Для более подробноЙ информации (} сетепых
соединениях используЙте новую утилиту "ettool.
Для пользователей ноутбуков особенно актуален aJ1I1лет Индикатор CO
CTOJlIIIIJl батареи, показывающий, на сколько времени еше хватит заряда
аккумулятора,
.. n,.... ........a!Jii
:ftI".,1-fИiЩ"-j!iXI 41
i
в
J Prr>!i"__I'i1I>i,"Diщ,,,, .
. ,"";:_:'WiPiw; . -;ФG-.э J.ltV
-.:'-'-'..', -,-":-'-.:,,-'--'
1:.t'JO..._ 'lЩlji"Qf1,it,ilJ
JI( "".... ,, ;;"';. .Н
Рис. 4.9. Сетевой МDNиrор
GNOME 2.10 входит в состав дистриБУТИllа Fedora Сorе 4. К ней доба
вИлась новая тема Clearlook и пансль GNOME стала орr'ЗНИЗ0ПЗНЗ
110,'ичнее (рщ;. 4.10).
.ё...,.,...."..::......
' 4,:.,,:,-_:- t\&fk. .,.
tI .:' ..'M
. Н>IЩ}М.....L!"ЩlD:щu...."u.;д::' /11.:;,\11>: .
.\jJtuld
i!; ,,,IIrxdOc
[jwri:lICll;!tmt
",ь.-OtIcrrr "t _ ':Щ!I:! I!1"m'IN.
Рис. 4.10. Панель GNOME 2.10
168
rЛ8ва 4, Рабочее место пользователя
4.3.2. Добавпение COtic1;I:IeHHbIX КОМанд
в контекстное меню GNOME
Меню Сценарии в GNOME устроено и действует аналошчно меню
Деiiствия в КОЕ. Только если" случае КОЕ фа(VJ КОНТСКСТНОСО мсню
имел определенный формат, то в GNOME это обычный bashcneHa
риЙ, Хорошо это IfJiИ плохо, зависит от ТОСО, хорошо ЛlI вы знаете bash.
Хорошее знание языка командиоrо интерпретатора bash поможет вам
сощать очень сложные сценарии, автомаТ\1.Зируюшне О!'Ромное количе
СТlЮ рутинной работы,
Ил" ДОС1'аточно проста, Вы создаете Ьаshсценарий ц помещаете ero в кa
та.;ю,' / gnome2 /Ilaut.illJsscripts/. В этом каталоrе можнО создавать
подкаталоrи ОНИ будут отображаться как дополнительные меНЮ.
Теперь рассмотрим пример сценария, конверmрующеro изображение в
формат GIF при помощи проrраммыконвертера convert (листииr 4.2).
Файл, по которому ПОлЬЗ0ватедь щедкиул правой кнопкой мыщи, пере
дается нашему сценаР'IЮ как первыЙ арсумент (о передаче арсументов
СLlенариям I'ОВОрИТСЯ 11 и,8,1),
,. .
Щ"qинr 4.2. Файл x2gif
ij! /bin/basrJ
:'overtprg 'wtJich convert'
";h.ile [ $# -gt О J; ао
pict.1J.re$l
filetype.'file $picture I cut B . . f 3'
if [ $filet.ype . Nimage N ]
thел
newfile.'echo "$picture' I Cl.1t B . f l'
$convertpLg H$picture R R$newfile N .gif
[1
shift
дот\.е
4.3.3. Автоматическая смена обоев
ОБО<l на рабочем столе рано ИЛII поздно надоедают, и хочется их сменить.
Делать ЭТО вручную лень; это ж Ckолько придется щелкать мышкой.
Автоматизируем эту рутинную процедуру, HanllcaB сценарий, выбира
ющий обои из кaTaдora Ihome/den/Wallpape:rs(rдe у меня храмтся
мои любllмые оБОll) случайным образом, Собстuещ!О установку обоев
выиодш!ет утилита GNOМE gconftool2,
169
UNUX, полное РУ1<0IЮДQТ1ID
Листинr 4.3. Фаиn changowallpper
#: /bil1/basf'
export DIR'/horne/del1/Wal1papers/'
export NUMBER=$RANDOM
export ТОТЛLО
for f il1 '1s $DIR'
do
1et .ТОТЛL += 1"
сl0пе
1et "NUMBER %= TOTAL"
export CURRENТ=D
for f 1п '1s $DIR'
do
if [ $CURRENT = $NVМBER ]
then
/llsr/bin/gconftoQl2 t string
s Idesktop/gnorne/backgroUnd/picturefilenarne $DIR/$f
break
fi
1et "CURRENT += 1"
done
Но это еше не все. Можно сэкOIIOМИТЬ И на запуске сценария сЬangе wallpaper,
заставив ero запускаться автоматиче,:ки. Вопервых, вы можете добавить
ero в сценарии заrpузки системы (п. 9.1.2). Для домашнеrо компьютера,
который на ночь выключают, это неплохое решение: ВЫ будете каждый
день сидеть за столом с НОIIЫМИ обоями. BOBTOpЫX, ВЫЗОII сценария
changewa!lpaper можно поместить D сценарий запуска GNOME. И B
третьих, changewa1lpaper можно вручить диспетчеру расписаний croп
(п.9.4) для lIыполнения по назначенному вамн расписанию хоть каЖ
дую минуту.
4.4. ОфИСНblе пакетЬ!
Ореп Otfice и К Office
В среле Linux наибольшее распространение получили два ОфИСНЫХ Па
кета: К Office и Ореп Office, оба CIIободно распространяемые. В боль
шинство дистрибутивов включены они оба, так что вы можете выбнрать
инструмент, исходя из конкретной задачи.
Пакет Ореп Office обладает rораздо Qoльшим количеством возможностей,
чем К Office, и наиболее приближеи по своей ФУlIкционалЬНО\е.И к MS
Office.
170
rпaBa 4. Рабочее Место пользователя
к Office предназначен для cpeды КDE, которую чаще назначаюТ средой
по умолчанию, и чувствует себя в ней нзмноrо лучше, чем Ореп Office.
Например, некоторые комбинации клавиш Open Office не работают из'
за Toro, что они цспользуются самой средоЙ KDE. Разумеется, можно их
псреназначцть, но тorдa использовать KDE будет не так удобно.
е дрyrой стороны, К Office хуже справляется с форматами MS Office.
При попытке открыть большие документы, наИРlfмер, документ MS Word
97120001XP размером 1.2 Мб, проrpаммз К Word просто закрылас!,. Точно
так же себя ведет и ПрOl"рзмма К Spread IIрайс<-лист одной фирмы (около
1М) заrружался около 30 секунд, а хотда индикатор AOCТllr отметки 100%,
окно проrpаммы просто закрылось. К Presenter кое'каК открыл презента'
цию PowerPoint, но... Лучше я не буду rоворить О том, <rro я увидел.
CoT8и пакета Ореп отсе
Таt)лица 4.4
nРИllо*енме Назначение
'Мiter Текстовый процессор, предnаrзюЩlolЙ мощные функции ДЛ со.эдаНИЯ
и редаJmo!роевиs; ДQ",vмеитоs раэ+tы)!: фарМ!;1rое
Catc Редактор Мектрйиt1ЫХ таблиц
O"'w Проrpaмма Draw орКеИТt1рОВ8НВ на sеl\ТОРНУЮ rрв.фи_ и слж-ит Д11J1 ООЭД.ВНИS:I
РИСУНКОВ, эмблем и плакатов
Imрrеsэ Проrpамма ДlI созданиЯ пре.з.ентsu,ий
Math Бпаrоnaрg З1'{)МУ p-еДЭlПору, ВЫ можете IIстанлть r.щтемзтичеСk:ие формулы
е psзn..,..ныв до"ументы пЗlI'еrа
Irnage ПРQrраммs npElднаэнвченадn СКflНИРОiц:lНИМ м обрабоп::и фQто(рафий
Sctle(tule ПJ1аНИРQВЩИI(. Iюторый ПомGжет вам ОРП1ни:зoi:l8ТЪ СВОЙ рабочий 'день
ri 8JJiil'П'[nlj-,
Ореп Office зто бесnлв'Тный взриаю ПЗК8та Star Offic.e от sUП Mrcrosystems.
Нэзваня npOrpaMM, ВХQДЯЩИХ в с-остав обоих паквтов, ot-пичэк'>Тся только
nрефиксом, 00 или 50 соответственно. Наllример, 50 Write( и 00 Wrrter это
одна и -та же nporpaMмa.
Состав па/(ета К Offlce
Таблица 4.5
ПрмлC»tetR4е Назначение
KWord ТеlC:СТОВЫЙ npoцccop, aHI1Qr nporpaMMbl М$ W<lrd
К Spread РеА8КТОР mektpo.-.t'lЫХ таОflИЦ, 0611аД11:91 несt<.оIlысмии ориrtlНМbl-fЫми
ФУt4IЩИЯМИ, которые аы не наЙДете ни S 00 $j:)m.-dShееt. ни в MS Ехееl
K,CMrt При-nоженеp.nR nосrрQеиЯ диаrрзмм
К Illustrзtоr, РедаК1"Ор векторной rpаФИI(И
Kontour
К Ртеseлtеr ПроrР8f1.1МS для создания п,сеэеJНflЦИ
К Formula Рэдак1'QР ма1(tмаТ'tеских формул
171
UNUX: полНое руковоДство
При помощи К WоrdМожно coxpaiiJl'ttlТCI1CТOllЫe фаЙJlliI'В формате PDF.
Выполните команду Файл . Печать и BMe'Тo I1рИитёра выберите опщпо
Печать в файл PDF.
К Spread не 11.0ддерЖltllае1' фQpiтМS Ехсеl, но совместима с фоjJм'I'OJ,I
GNUmeric редактора электроцкых таблиц, входящеru в состав боль-
Шlшства Red Наt-лодобных дистрибутивов; ауж llЗ GNUmeric можно
экспортировать таБЛШIУ в MSExcel. Если в вашем дистрибутиве этоrо
пакета нет, то скачаrь ero МОЖНО С htt.p: Ilwww.gnott.e.org/projec-
ts/gпumе.r"iс.
ВозможностеЙ К Presenter XDaТЩ даже ДЛЯ самой CJ10Жной лрезентацuи.
ПрО!'рамма К Presenter, КаК 11 щ:е пры'раммы К Office, ДОlЮльно быстро
работает, '11'0 немаловзжно, еСЛИllам Нуя<IIО показывать презентаЦIIЮ
на стареньком 486-0М ноутбуке. К ТОМУ же, если у Вас установлена КDE,
скорее всею, будет устаНOJIJIЩ111 К OFfice, 'jШ'О нельзя сказать об Ореп
Шfiсе.
Уменьшение аремеllИ запуска Ореп Office
Нанерное, вы заметили, что любое приложени из пакета Ореп Office
запускается. мяrко rоворя, медленно. Чтобы ускорить этот проиесс, НУЖ-
но установить утилиту БЫC'fроrо запуска Ореп Office. Помните, что-то
подобное было н Microsoft ОШсе, только в случае с Ореп Office данная
утилита деiiствительноработает.
Утилита называетс!! Ореп OfficeQuick Starter. Пакет, содержащиЙ эту
уrилиту, называется ooqs или ooqs-kde в записимости от днстрибутипа.
В случае, если вы используете GNOME, нам нужен лакет oo,!start
gпоП\е. В большинстве ЛИСТРllбутивов ЭТИ пакеты имеются. Все, что вам
нужно сделать, установить нужный пзкет и иаслаждаться быстрым
запуском Ореп Office.
НОllое 11 Оре" Office 2.0
в состав дистрибутива Fedora Соте 4 входит пакет Ореп Office версlШ 2.0.
По сравиению с версией 1.1 в Ile] улучшена совместимос.ь с форматами
документов MS ОШсе. Текстовый редактор 00 Writer теперь поддер-
живает вложенные таблицы, вертикальную ориентацию текста IJ ячеЙке,
появилась ВОЗМО::КНОС1Ъ импортаД,окументов в форма1'е WordPerfeet. 00
Calc теперь разрешает таблицы Toro же размера. что и MS Excel, то ссть
65536 строк, поддерживает диаrональные ЛIШИИ н ячейках и КОJlОНfI!ТУЛЫ
в "'иле MS Ехсеl; доб3Iшлась также возможнuсть импорта таблиLt Lotus
1-2-3 ло версии 9.7. Появнлась возможность открывать .защищенные
паролем локументы MS Word и MS Ехсеl (если пользователь, конечно,
знает парОJlЬ).
172
rЛ8S8 4. Рабочее место noльзавателя
й.f Crw1..8TiII8InOesigrlVi8w..>
IJ,, WtlMHc Cнвd.T.a.bI....
Cre&t8Vi.
DнaftPUOn.
ii
lJ
.
,'i
"
tт
\":
Н
!'
[.;
f(
Н
i l
mI CD-Cd!'«:tiм
е. .......................
'"
(';
.\'
,'jij"" '''.'' f ..".. fY(i""\;;; :r' I ? i
'''1!!'
'foo
\{!
8a
l'f ''Q,;; "'"":!;;а:';; -.;; ""у" .
":.""'"" 1 ;
..---.,... ':.:.,.,:.-',....-'--'.:'.--:: .'
Рис. 4.11. СУБД 00 Base
Ila панель рисования 00 Draw добавлены новые rруппы rOТOBWX
объектов: ОСНОВНые формы, стрелки, элементы блоксхем, звездочки.
ПОШОСТЬЮ;l1ерецисан движок презентаций"чro,;'ПОЗВOJJяе'l'ОО Impress
1I0ззываТЬ;ЦО'Ч'I'и все анимаЩЮlIвые эффекты MS PowerPomt.
В составе пцета появилось новое приложеиие 00 Base. I<;JK lIетрудио
ilOlадаться:l:rО;!lдЗранию, это СУБД пюволяющая создараТЬ,1I упраВJ1ЯТЬ
табшшами,запросами, форМами и отчетами. Мастер таблиц предлаrает
,шожесТlЮ за'!'отUlЮК таблиц деловоtо и J1ИЧИО'!'О (иаПРIIМер, фитнесс
;щевник) НI\З,flа'lСнIIЯ. 00 Base понимает базы ДаННЫХ dBase; MS Access,
()[)ве, JDOC; MySQl., импортирует электронные таблицы и текстовые
фаЙлы, может использорать LDAP сервер как источник даниых.
4.5. Издательские системы
Язык разметки ТеХ
ТеХ (ПРОlIЗиосится «те",,) это система подroтовки документов, содер.
жаЩJiх БОЛl,щое количеСТВО формул и табтщ. Она была разработана в
коние 70x 'Т. американским математиком ДOH3.1IьдOM Кнутом, автором
шзменитой кню'и «Искусство проrpаммироваlПlIl'" Система ТеХ была
173
UNUX: полное руководство
портирована на платформу Unix rtроrраммистами rO!!!lpnOM Трики (Нo
ward Trickey) и Павлом Куртисом (Рауеl Curtis).
Размср AOI<;YMeНYa, содержащеroмноrо формул, в формате ТеХ раз в
десять меньше, чем в ФОРМате MS Word. К тому же документ ТеХ не
зависит от платформы. Это объясняется тем, что в системе ТеХ вид и
расположение всех объектов документа описываются текстовыми ди
реКТlIвами подобно тому, Как зто делается в формате HTML. Только
днреКТИRЫ ТеХ начинаются с обратной косой чертЬ!.
Текст документа ТеХ набираercn в любом ASCllpen;lKTope. Затем ис
ходный текст (файл с раСШllреН!lем .Еех) КОМПl!Jшруется в файл DVI
(Device 11f(lepel!de11l), который ие зависит от платформы И устройства. Этот
файл уже можно просматривать, печатать и отправлять в издательство.
Для ето просмотра и печаТII предназначена проrрамма xdvi из па кета
tetexxdvi.
Например, так выrлядит фраrмент страницы с набранноЙ формулоЙ в
ASCII -редакторе:
\ layout. Enumerate
МатематическJ1X:
\begininset Formula S\sin\frac{\alpha}(2)$
А на следующем рнсунке lIоказан фраrмеFlТ тоЙ же страницы, подroтов
леИFlОЙ к печаТII.
DС1'lUIКЛ ФОРМ:УJ.).
С ХЦ'ЩЧН:КИХ: б(':О+ 6Н,2() =- (,01l120(,"t 602
2, М.а'1t'М1J'tИ'':'t:J{НХ: SW 'i=-Х Vl&;:::
Рнс. 4.12. Фраrменr документа ТеХ
в настояшее время ориrинальная система ТеХ поqти не ИСllользуетея, а
применяются ее МQдJ!фIlкаЦIlИ, например. сиС1'ема LaTeX, преДС1'авляю-
щая собой l1акет макрокоманд, упрощающий работу с ТеХ.
ТеТеХ СIlстема подrОТОВКlI документов для l.JNIX-nолобных ос. В
состав дистрибутива Fedora Core 3 входит tшкет tetex-Iatex верСIШ 2.0.2.
Более ранние версшt ТеТеХ (до версии 0.9) не умели конвертировать ТеХ-
документы 11 формат PDF. НаЧlшая с версн» 0.9, в состав ТеТеХ входит
У1'НЛIlта pdftex, которая преДFlа3начеtJa для прямоro конвертирования
tex-фаЙЛа в формат PDF.
174
fЛа8а 4. Рабочее мес-то пользователя
КоллекцИ1О ссылок на справочные матеРИaJIЫ 110 языку ТеХ можно найти
по адресу http://www.tex.uni.yar.ac.ru/doc.htm.
Текстовый процессор LyX
Работа над любым документом распадается на две части: разработку со.
держания документа 11 представлепие ero в удобном для читателя виде.
Принцип WYSfWYG (<<видишь то, что получишь на печати») облеrчает
только вторую часть работы, и обычный автор, не БУДУЧI! одновременно
дизайнером, не умеет и не хочет использовать все возможности кaKoro.
нибудь MS Word для rpaMoTHoro оформления своей статьи. Автор преп.'
почел бы описать структуру cBoero документа так, чтобы леrко было
применить к нему стиль, разработанный профессионaJlыыыM дизайнером,
и сосредоточиться на своей работе, з не из подробностях оформления.
ЭТQ'r принциn называется WYSIWYM (Wha/ УОII See J.f IVhaJ Уои Меаll.
«видншь ТО, что поп.разумеваешь»). 1\ реализован в текстовом процессоре
LyX (http://www .lyx. org). LyX это визуальный редактор ТеХ,
отображающий документ не в точности так, как он буп.ет ВЫI:Jlядеть на
бумаrе, но достаточно похоже, 11 вместе с тем не затемняющий ero струк'
туры. На рисунке 4.13 lюказано прополжеНl\е работы над документом
example: вставка сноски.
LyX не создает DVI.файлы в домашисм каталоre пользователя. Найти их
можно во временном каталоrе. Обычно это /tmp!lyxtmpdir???????,
rде ?????1 это ПРОI\ЗВDЛьная послепопательность букв и uифр. Если
вы запускали прссмотр DV[ несколько раз, у вас будет несколько таких
каталоrоn. Поищите DVI'файлы в этих каталоrах вы обязательно най'
детс нужный ва!>! файл. для автоматизщlИИ поиска этих фаЙлов откройте
окно виртуальноro терминала и введите команду:
find /trnp/lyxtrnpdi.r* пате *.dvi
Пример работы с Т.уХ
beтua fOPМJA
1. Химичеаих:: оса J .. fl: О С. Н 11 О ... 60
[!' ..!:=--=:=.:,:::::.,..,..
t. M sin!f== f:;
Рис. 4.13. Вставка сноски
175
UNUX: полное руКОВОАСТ80'
И;щательскам система $cribU$
TeXJLaTeX удачная система ДЛЯ верстки научных работ, но в мире Wi-
ndows есть MHoro издательских систем, куда лучше приспособлеllНЫХДЛЯ
создания макетов: Corel Ventura@, Quark Xpress@, Adobe Pagemaker@,
InOesign@... ЧrоЖе дедать пользователю Linux? Не устанавливаТЬ)l(е
Windows из-за PageMaker.
ПОЛО)l(сние сторонников С1юбодноro nporpaMMHoro обеспечения изrе-
нилось в 200З 1'., КОтда вышел фНlIальныЙ релиз пакетn кошытернойй
верстки Scribus 1.0 (http://www.sc:ribus . org. ик, автор ядра про-
rpaMMbl Франц Шмид).
Scribus ПОЛ:НОЦеIПШЯ издатеЛЬСIQ\!I система, в которой реaJ1ИЗОЩIIIЫ
все необходимые ДJlЯ преДl1еЧЗТllоliПQiJ.rОТОВIШ документов функции, в
том числе цветодежшие по каналам СМУК, система управления цветом,
поддержка Uпicodедля вывода На нетраДИЦ1l0НПЫХЯЗЫКах, экспорт ре-
зультатов в форматыРDF и PostScript. В качестве BnyrpeHHero формата
хранения данных nporpaMMa использует язык ОШlсания XML. что об-
Леr'lает экспорт данных В друrие naJ{eT!,l.
Проrрамма Scribus цоддеРЖПВаtrr !щще распространенные rрафические
форматы. как Епсзрsulаtеd РоstSсriрt(ВРS), lРЕО, ТIFP, РопаЫе Network
Graphics (PNG), XpixМap (хрт). Начиная с версии 1.0, Scribus lюддер-
живает русский Sl3Ъ1К.
Scribus был включен в состав следующих дистрибутивов:
. ОеЫап (нестаБПЛЪНЫfi репиз)
. аеП1ОО Linux
. Malldrake 8.2
. Lindows
. Lycoris
. Fink 0.4
Если вы используете ОдНн ИЗ этих ДИсТрибутивов, ТО,возможно, Scribus
уже установлен у lIac, А еСЛlI нет, ro jщкет scrfbu<! версии 1.2 можно
скачать из репознтария Sisурhusпо адресу ftp: / / ftp. а 1 t ::. i rHJX .
{и IpubI di" t !Cibl1tion s /ALTLinux I S:l syphU$! SRPMS . cl.>ss ic: I
5сrilЩ5 1.;;.} alt.l.1.. src. rprl'..
Перед ero установкой убедитесь, что у нас уже установлены:
. бибШf!лека Qt C 3.3;
. библиотека libpng DСрСfШ 1.2.х;
. ghostscrip, интерпретатор языко!! PostScript И POF версии
7,х;
. шрифты PostScript. Шрифты rrF поддерживаются Scrib\Js начнная с
версии 0.4.7.
176
rЛВ6а 4. Рабочее месТО пользователя
. среда КОЕ: ДЛЯ работы самой Stribus она не нужна, но понадобится,
ссли вы ХО11lте использовать Ме1Рд drag-and-drop.
Дополнительно можно устаноаить Little CMS систему управления
IIветом и Цnе1РделеНIfЯ с поддержкой IСС-профилей, а DзЯтьее можно
с http://www .litt lecrns. сот. В меню Edit ПОЯIlится команда C()Jor
Management System.
4.6. rрафика в Linux
Несколько rpафических f/porpaMM входят В состав большинства современ-
ных дистрибутивов. Далее я кратко опишу их и дам им оценку.
4.6.1. rрафические редакторы
Редактор растровой rрафики а,мр обрабатываем фото
The GIMP (The GNU [/IIage Mallipu/ario/1 Progra/ll) свободно распро-
",раняеi\l.ый редактор растровойrрафикн, НОСI!ОИМ ФуltКlЩlI.. сraншпй
достойноЙ замеlюl! прorраммс Pbotos!lOp. ВОТ неКОТОРЬ1е IIОЗМ.DЖНОСТИ
GIMP (далеко не все!):
. поддерживает ПРВКТllчеСI<Н все форматы растровой rpафшrn: GIF,
JPEG, PNG, TIFF, ВМР. AVI, МРЕО. PS, РС;Х, ХРМ. ТОА и друrие;
. содержит множество инструменто" lиТЯ обработки и:юбражеНIfЙ;
. поддерживает работу со слоями;
. полный Альфа-каНaJI;
. может IfСlюльзоватьсядля создания Вl.шмации Gif,AVI;
. содержит средства Д)I" разложени" видео в фqрматш, МPEG1, XANIM
на Kapы;
. поддерживает сценарии и расширения, блarодарл lЮТорым можно
добшщrь в проrр;lММУ новые ФУНКЦlfИ. Поддерживаются сцецарии
ScriptFIJ, PerlFu, PythonFu;
. оБШlдает улучшеННblМ управлением лaшrrью: D результате раЗМер
изображешш шраничен талыш объемом ЖеСI'КUI'О lШl<а;
. операции Отмена (tJndo) 11. Повтор (Redo) оrpаничены только Д!lc-
KOBЫI пространством;
. .ИМееТ.r.fноroчисленные инструменты вьщеnеllия облаcrеЙ: выделение
пр"моуrольноЙ, произвольнои, ЗЛЛИПТИ'lесКОЙJt друI:IIX областеЙ;
. снабжен оrромиыM набором rрафичссЮlХ Фильтров, расширяемым с
помощью плаrинов.
Проrpамма The GIMP доступна по адресу 11ttp: I /www.girnp.org.
Онен",,; Qтлично.
177
UNUX: полное РУКОВОДСТВО
KPaint
Проrpамма KPaint, В)юдящаяв состав KDE, представляет собой ПОЛНую
ПрОП1ВОПОЛОЖНОСТl> проrРЦJlfме TheGIMP. КРат! Обладает неБОЛI>ЦJИМ
числом функцИЙ иинструмеНТОа, аней нет системы nлarинов, а о ICВHa
Лах и слоях эта nporpaMMa вообще ничеro не знаеТ. Даже для создания
самых простых изображениЙ приятнее и удобнее использовать npo
rpaMMY GIMP. KPaint помеР::ll:Ивает форматы ВМР, EPS (встраи:ваемый
PosIScript), TlFF, GIF, JPEO, PNG, ICO, PON, ХРМ.
Оценка: удО8J1стI10рuтельно.
KlconEdit редактор иконок
Проrра(ма KIconEdit релактор пиктоrрамм КDE. Используется для
создания пиктоrpамм МЯ среды КОЕ. ДOlюдыiO простоЙ редактор, по-
зволяющий быстро создать I1IlКтофамму для вашей nporpaMMbI.
Оценка: хорошо,
4.6.2. Проrраммы просмотрщики изображений
Следующая rpynna проrрамм ЭТО проrраммы просмотра изобраЖеН1fЙ:
OQView, KView, KuickShow, I(I1ageMagick, Electric Eyes (ее). Я предпо-
читаю nporpaMMY GQView она. больше напоминает мне популярную
проrрамму ACDSee.
GOView
OQView можно ИСПОЛЬЗОВаТЬ ВМесте с проrpаммамп Тhe GIMP, Eleclric
Eyes и XPaint. для редактироваШ(fl заrpуженноrо изображения в проrpам
ме Tlle шмр нзжмите От] + 1, в Electric Eyes Ctrl + 2, в XPaint
Ctrl + 3. Разумеется, указанные nporp!lMMbI должны быть установлены. Вы
хотите использовать дрyrой редактор? Нажмите кнопку Кllифиrypацu
На панели инструментов проrраммьt, в открывшемся окне перейдите на
закладку РедаКl'lIРЫ и пропищите свой редактор (нужно указать название
редактора и командную строку).
Проrрамма может создавать коллекции рисунков. нахолить похожие
фаЙлы (по имени, размеру и друrим параметрам ).
Проrраммз поддерживает форматы файлов: JPEO, T1FF, G1F, PNO,
ХРМ, ВМР, РСХ, РОМ, РРМ. Mory порекомендовать для использования
в качестве основноro просмотрщика.
О!!енка: отт<ч/ю.
178
rЛ8sа 4. Рабочее место пользователя
Electrlc Eyes
Следующая лроrрамма Electric Eyes. Эта лроrрамма в некоторых
дистрибуТlШах не устаlfавдиnается Ло.умоЛ'Jанию ИЛII вообще ()тсутству'
ст. Для ее устаНОВКII IfУЖНО установнть лакет «ес». Взять ero можно с
http://ftp.vn.ua/pubIunix/redhat7.2/RedBat/RPMS/
eeO.3.125.i386.rpm.
Electric Eyes не только просмотршик: с ero помощью можно реДЗКТ1t'
ровать изображения, сохранять файлы в друrих форматах.
Для перехода в реЖIIМ редактирования щелкните правой кнопкой мыши
на изображеЩIIf и 8ыберите "аманду Прuсмuтр .... Поквзцть/убрат" "в-
нель редактировании.
Используя панель редактирования, очень леrко отредактировать цвето'
I!УЮ raмMY рисунка, изменить размер, повернуть изображение, сделать
скриншот экрана Или выбранною окна. Для «фотоrpафирования» экрана
нажмите кнопку Снят.. содерЖlIмое экрана целикоМ и сеiiчас. ВЫ также
можете выбрать окно для снятия нажмите кнопку Выбрать окно для
снятия.
ИнтерфеЙс nporpaMMы немното необычеll, но со временем к неыу можно
IIРИВЫКНУТЬ. Как н в проrрамме ТЬе GIMP, любое действие здесь про
изводится через контекстное меню, то есть нужно аКТIIВНО исполъзовать
правую кRопку мыши.
Проrрамма поддерживает форматы: .IPEG, ШF, PNG, TIFF. PS, ВМР и
друrие.
Оценка: отЛиЧНО.
KuickShow
Проrраыма быстрото прОСJ.lотра KuickShow соединяет в себе фУНКЦ"'1
файловоro браузера с проrpаммой просмотра. Проrрамма ОТIIОСIlТСЯ к
среде КDE, чем и объясияется первая буква в ее назваlНl1I.
При щелчке по имени файла этот фаЙл будет заrружен в новое окно
nporpaMMbI. Файлы можно открывать и в том же окне, и в новом. При
желании можно установить потюэкранный режим просмотра. Проrpамма
в состояюш орraнизовать даже слайдшоу. Поддерживаются вСе rpафи'
Ф КОЕ ( * . * . . . f * * ·
ческие арматы. известные .Jpeg, .Jpg, .gJ, .ХР!l1, .рр!l1, .pg!l1,
. .рЬт, . .pnm, . .png, * .Ьтр, . .psd, · .ei!l1, * .tiff, . .хсО.
В проrрамму встроены функции предваритедьною просмотра и печати.
KuickShow обладает вс\ши необходимыми для просмотрщика фУНJЩII
вми ни больше, ни меньше. Конечно, в отличие от GQView, она не
179
UNUX: полное pyкo8oAcmo
умеет составтпъ списки коллекций, но я сомневаюсь, что вам KOTдa
нибудь понадобится эта функция,
СушеС1'ненным ДОСТОIШС11ЮМ проrраммы'т1ляетсято,Ч1'О ДJIЯ IIросмотра
каталоrов используется Konqueror, поэщму вам доступны все операции
над файлами, KOТQpыe вы можете иcn<ll!Ьзовать вфайдовом менеджере.
Можно HaCTpOlIТЬ комбинации клавиш управления I1рОСМОтрОМ,
Оценка: О/llЛUЧ//О,
КVliIIW
ПрOl'раММfl KView является достойной IIльтернативоlI проrрам/о/е
KuickShow, KView Ile Y/deeT покаЩа,r. ClЩlдщоу в автоматнчеСКQМ pe
Жиме, зато щш в сocrОЯНlЩ попеР.!J\5ражеНJlе назадаliНbUj утл, ()]'-
разить и сохранить результат, а 1 Ra,Q9TaTb в IIЩЩОэВ:Раниом режиме.
ДЛЯ переход а в зтот ре;жим нажмцr#9!1нацию кщцщщ Ctrl + Shift + F.
Кроме Toro, KView умеет еще и COBaTЬ изображения.
Оцснка: отлично,
t<oC!klli
Следующая rруппа Протрамм предн':Фачена ДJIЯ скацироаания изобра-
жений: это Kooka li XSane. перваяq:porpамма, как указыаается в ДOKY
менташш КОЕ, предназначена ДлJj'сканироБания и распознавания текста.
Коротко о ней можно скаЗаТ!' так: до FineReader еll еще очень далеко.
Овеню!; удовлетворителыlO,
хз_
для сканирования изображеиий ItПР!}t1Qчитаю исиользопать протрамму
XSane (http://www, :Кэапн. оrg}.Правда, она работает не очень ста-
бильно. но ре'iультаl'Ы сканироваНИЯJlY'llllе, чем у лроrрамыы Kooka.
Оценка: удовлетворительно.
4.6.3. Как сделать снимок экрана
KSnapShot
Эта ПрОI'Рамма преднащачена дл.я зщвата экрана ИЛН Отдельноrо окна
и сохранения реЗУJlътата а РNGфайл, СкРИНШОl'Ы ДJIЯ этой книrи Я дe
лал именно с помощью KSnapSllOt, Вообше не предстilВЛЯЮ, как бы я
обошслся без этоЙ просраммы, МОЖIIО, конечно, использовать E!ectric
180
"',..,..
fnaвa 4. Рабочее место ПОПЬЗСИ>атепя
Eyes, но запускать редактор изображений ДЛЯ тото, чтобы сдслать пару
скриншотов, не OqeHI> рационально.
МОЖIIРВЩПОДЬJоваться кф!бинаUI1ЯМI1 клавиш KDE Ctrl + Print и
Alt + Print. Первая делает снимок всеro экрана, а вторая TOдl,KO aJfJ"Ив'
lюrо окна. НО куда лотом вставить этот снимок? В KPaint? Попробуйте.
в нормальный редактор, наnpимер, ТЬе GIМP, копию экрана вставцть
IIСВОЗМОЖНО, а ИСЛОЛЬЗОJШTh KPaint очень неудобно.
KSnapShot лозвол!!ет установить задерж1СУ, за время 1СОТОрQЙ МQЖНО
нодrотовить экран к съемке: OTKpьrrb нужные окна, меню ПрИЛОЖСIIИЯ
или меню КОЕ. Через установленное nреМIf nporpaMMa сфотоrрафирует
весь экран или те,кушее окно, оповестит об этом звуковым Сllrналом и
предложит сохранить снимок.
ImageMagick
Пакет ImageMagick обычно используется для просмотра IIзображекий
и преобразоваШНJ их n друrоЙ формат. Честноrоворя, мне не понра-
НИ:lСЯ интерфеЙс и набор функuий этоro просютрщика. Но в пакете
ImageMagick еtтьполезная утилита impo'rt, пмводяющаlf летка и быстро
сделать снцмок экрана. Может быть, среда КDE у вас вообще ке уста'
ншшена, поэтому проrраммой ksnapshot воспользоваться недьзя? Тоща
Dведlпе (в Х'терминале или окне запуска приложений вашей оконной
среды) команду: '
,: sleep 5; irr.port window root screen.png
Комзи:да s!eep rенерирует необходимую задержку в секундах. Думаю, 5
секуи:д хваtи1', чroбы вы смоrли привеСТJJ ЭК:рa!J в нужный вил; вывести на
передний план нужное окно, выбрать нужный пункт меню" т,п. Через 5
секунд будет вьmолнена команда import. Она сделает снцмок корневоro
окна, то есть nccro экрака, и запишет ero в файл Bc:reen.png. Формат
PNG для СНI1111КОВ экрана Оllтималеl1. ЕСlll! вам нужен друrОЙ формат,
например, lPG, просто измените расuшренце выходною файла:
sleep 5; impo!:t: \-Jindow root screen. jpg
А как сделать снимоккоккретноrо окна? Первый способ указать
координаты или reометриlO окна, предваритеJIЬНО узнав их по команде
xwininro:
:, slep 5; impor-t crop 400х300 screen14png
.5 s leep ::'; inтpolt JЕ'ош(tху rеометрия screen2. png
После запуска nporpaMMbl xwininro указатель мыши изменит свой nид со
стрелки на крестик. Щелкните по окну, 11 nporpaMMa предоставит о нем
подробную информаuию.
181
LINUX: полное PYKOВOДCТ!JC!
И второй способ:
$ import window.png
Команда sleep не нужна, поскQЛЬКУ nporpaMMa import предоставит вам
возможность В!,Iбрать нужное 0IaIP указатель мыши тоже изменится
на крестик. ЩелltНlIте на НУЖНQмоltНе, и буквальио через полсекунды в
файл w i ndow . png БУДет заrтисан образ выбранноrо oltНa.
Проrрамма import довольно rибкая, рекомендую прочитать тап Э10Й
nporpaMMbl вы найдете там МНQф lI,Нтересноrо.
А что если вам нужно сделат!> сj:lИМОК текстовой протраммы, а не 11)а-
фичеекоrо окна? Проще всеrозanустить эту l1porpaMMY в Х-терминае,
сделать снимок окна Х-терминала и отрезать обрамление окна с поlO-
щъю ШМР.
4.7. ПQJ1:Jные трюки
Просмотр В консопидокументов MS Word и PDF
Для просмотра и редi1ктироваН!lядокументов MS Word с успехом НС-
rтQЛЬJуется Ореп Qffice Writer, HP lUiofaa нам нужно быстро просмотреть
aokymel-IТ (например,IIСПОМIН!Тъ крмер телефона, указанный в конце до-
KYMeIITa), и запускать тяжеЛОllеСНЫЙ 00 Writer не ХО'lется.
Для просмотра документов MS WQrd нам понадобятся две утилиты
wvWare и w3m, ПеРIJая это КОНllертер документов Word в формат
HTML (wvwa.re,sourceforge,net), а вторая унцверсалЫIЫЙ бра-
узер, которым мы буд!;\м просматрl!J!аl'Ь полученный НТМL-файл. Обе
УТИJ\иты входят В состав conpeMeluiых дистрибутивов, правда, MorYT не
устанавливаться ПО УМQJIЧаНIIЮ;
Итак, ДЛЯ просмотра документа document., с10С введите команду (кон-
вейер):
$ wvWare -х fusr/lib/wv/wvHtml.xml docu,nent. .с10С I w3m .Т и'хt,fhtпl1
Если вы собираетесь ПОЛЬЗОIJаться этой длиннющей командоЙ часто,
ОфОрМlIте ее как ЬаslN:ценарий viewdoc, не забыв слелать файл v i ewdoc
исполняемым. Поместите Сl!енарий В каталоr (usrflocal/bin, чтобы
он был доступен всем пользователям системы.
# I/Ып/Ьаsh
wvWare x lusr/lib/wv/wvHt.ml.J<ml $1 2>/dev!nul1 I wЗт T tе.хti11tшl
182
rлвва 4. Рабочее место пользователя
ОбраТIIте внимание на перенаПР'l!lдение «2> / dev /пи 11». Таким образом
мы подавляем сообщения об ощИбках, чтобы ОНII не путались с выводом
конвертера.
Теперь для просмотра документа document.doc можете воспользоваться
командой:
$ vi.ewdoc dосшnепt .doc
Такой же сценарий можно написать и для просмотра РDF-документов.
Конвертером 8 этом CJ1учае будет утилита pdftohtml (http://pdftohtm1 .
soиrceforge, пet). Для просмотра созданноro проrpаммой HTМL-Koдa
мы будем применять текстовый браузер elinks.
Итак, для просмотра файла f il е . pd f будем ИСПОЛl,зуем команду:
$ pdftohtml ч noframe5 stdout fi1e.pdf I elinks
Опяrь создадим сценарий /usr/1ocal!bin/viewpdf, автоматизирую-
ший работу;
#! /bin/bash
pdftohtml ч $1 /temp.html
elinks /temp.html
А вот D дистрибутlfве Fedora Core4 таких фокусов проделывать не нужно:
в Hero включен Evince быстрый просмотрщик документов в формате
PDF и PostScript.
183
rлэsэ 5
........................
ЗВУК И ВИДЕО
В LINIJX
ПОЧЕМУ ВОСПРОИЗВЕДЕНИЕ АУДИО
В llNUХЛУЧШЕ, ЧЕМ В WINDQWS
ПРОСЛУШИВАНИЕ МУЗЫКИ
"оrРАБЛЕНИЕ" AUDIOcD
пРоrРАММЫ
для ПРОСМОТРА ВИДЕО
ВОСПРОИЗВЕДЕНИЕ
НЕПОДЦЕРЖИВАЕМЫХ ФОРМАТОВ
LINUX пол н о Е ру '{О ВОДСТ В О
5.1. Почему воспроизведение аудио
в Linux лучше, чем в Windows
Самыми распространенными аУДlюподсистемами ДЛЯ Linux .ЯВЛЯIOтся OSS
(Ореп Sound System) и ALSA (Advanced Linux Sound Architecture). Обе
системы поддерживают большое количество ISA и PCI"30YKOBЫX карт,
поэтому, скорее OCCfO, вам не придется разыскивать в Иитернете драйвер
для своей звуковой карты. В пш:щщнее время чаще используется система
AI-SA, которая подно<..'1ъю совместима с C<lстемой ОSS,IЮ содержит МНOI'О
дополнительных функций.
Сейчас Linux, если не идеально, то, во всяком случае, подходит для
работы со ЗВУК(JМ. Korna ЛИНУСУ Торвальдсу приелали первые патчи,
оптимизируюшие Linux для работы с аудиоинформаиией (так пазываемые
low lаtепсупатчи), он не одобрил эту идею. В результате отставание
от WindQws по работе со звуком как минимум на три roдa. В 1995 l'OnY
наСЧIЩ,ПЩЛО<;Ь 3035 (сейчас насчитывается около 800) прилС)жений для
[,inux, СI1Особных работать со звуком, Работатьто они работали. но дo
ВОЛЬНО криво. Сейчас объясню, почему.
Для работы со звуком в реальном времени нужно минимизировать за
держки (анrл. Iatency время ожидаНIIЯ). Latency в 100 МС ВЫ уж точно
услышите невооруженным ухом, задерЖl'Ув. 10 МС можно услышать в
виде не60ЛЬtпоrо шума на фОllе тумана. ИдеалJ"Ное время задержки
3 мс для аудио (WAV) и 1 мс ДЛЯ MJDI. КСТ/lТЦ. дрсэблема Iatency это
проблема не только Linux, а всех операционнщ систем, не явдяюшихся
Сllстемами реально!'о времени (RTOS ReaJ Time OperatioQ, System)
Wiц.dоws, MacOS. До поямещfЯ системы ALSA время .задержки при
работе с аудиоинформauиеil uLinux (иеrrолъзоваласъсltстемl.\ OSSlFree)
составляло около 150 мс. Система ALSA снизила время задеРЖ1Ш ДО
6 ме результат лучше, чем у Windows 2000.
185
UNUX: полное рУКОВОДСТВО
в настоящее время задержки (последняя версия ALSA) составляет 4.3 МС.
ЭТО довольно неплохо, что П03I!ОЛИ.10 Linux lJырваться на IJторое место
по обработке аудиоинформации среди He-RT опер:щнонных систем. На
перпом месте MacOS Х (CoreAudio API), на третьем Windows 2000
(А5Ю) и Мае 05 9.
В пользу ОС Liпuх rоворит также ее надежность и стабильность при pa
боте с любыми данными. Даже если взять непрофсссиональную работу
с мультимедиадаНIIЫМII прослушиваltие МР3: в Linux у меllЯ еще ни
разу не заllКался ХттБ, что бы я ни делал. В Windows же при открытии
больших документов .0 том же Word наблюдаются искажения при про-
иrpыоаНИII музыки с помощью WinAmp.
5.2. Прослуwивание музыки
mрg12З
Это самая простая ут,!дита, ПОЗ)IQляющая слушать музыку в консоль-
ном режиме. Скачать ее можно с домащней страницы разработчика
www.mpg123.de.
В rpафическом режиме заnyскайте ее через виртуальный термииал:
$ mpg123 [ilе.rnр3
Проrрамма ПОЗIIOJIяет ПРОСЛУПUIllать музыку, записанную 11 форматах
MPEG 1.0;2.0 (уровни 1, 2 I!ЛИ 3). С помощью mpg123 вы можете как
проиrрывать отдельные песни, так и создавать СПИСКl\ песеи;
$ mpg123 @ filelist.txt
В файле fi 1" list. txt перечисдите имена файло\! (по одному в каждой
строке), которые Bы хоти,е просл.УlI\ать. Можно указьmать файлы, pac
ПОЛОЖенные как на локальной машине, так и на удаленной, например:
l!"Юn\"/dен/mр3/trасkОl.ffiРЗ
ftр,//ttр.sеrvеr.ru/рuЬ/sонg.rnрЗ
http://www.server.ru/audJ.o/track8.rnp3
Еше одна полезная консольнаяпроrрамма cplay (h t t Р , / / www.t f .
h\.lt . t i / --f1 u/cplay). Это оБОлочка для различиых аудиоплейеров, по
3НОJlЯIOШШ! удобно создавать списки песен для ПрОIlI'рывания. Вы пере-
ходите в нужный lIам каталоr, выбираете песню, нажимаете Enter, 11 cplay
запускает mpg123 для ПрОllrpЫВaliiiЯ выбраниоrо файла. Исподьзовать
эту ПрOl'рамыу намноro удобнее, чем mpgl23, поскольку вам не нужно
вручную создавать списки пес<ш. J( тому же cplay отображает индикатор
ПРОllrpывания и время, прошедшее с начала проиrpывания. для выхода
из проrраммы нажмите клавишу <О>.
186
rлаеа 5. звук и еИДео в Linux
Xmms
Наверное, самым знаменитым проиrрщщтелем МРЕGфайлов является
ХтIшi полный аиалоr популярной Itроrpaммы WinAтp (http://www .
xmms . org). К сожалению, в дистрибутивах, основанных на Red Нat начиная
с версии 8.0, из нето исключена возможность пршнрывания МРЗ. Проrpам
мы с открытым исходным кодом оказались законодательно несовместимы
С этим коммерческим форматом, и КОмПа>Н!я Red На! переработала все
МУilьmмеДИЙ}fые приложения, удалив из них весь код, связанный с МР3.
Пользоватедям таких дистрибутивов можно посоветОвать скачатъ раннюю
(1.2.7) версию пакета хшшs с ftp: // f ё.р. sunet . se/pub!multimedia/
xmms/l.2.x и ДОIIОЛНИТЬ ее из http://mcmcc.bat.ru/RPMS/
"lpg123Xn1Jnsl. 2. 7 13. р. "3 86. rpm.
Друrие nporpaMMbl
Для проиrpывания МIDIфайлов в состав Linux (не 110 всех дистрибу
тивах) входят сразу две проrраммы: KMid и AWE32 (полное название
TkAWEMidi). Первая nporpaldMa входит в состав KDE (n3Keт kdemult i
media), поэтому, если среда KDE у вас установлена, она всеrда будет вам
доступна. Кроме MIDl-файлов, KJ\fid позволяет ПрОllrpывать и караоке
(КАR-файлы).
Также две протраммы предназначены для реryлирования rромкости
АотЬ: И КМiх. Обе прorраммы позволяют установить уровень rpомкости
для всех ауд!!оустройств, установленных в системе.
В состав KDE входит аудиосервер aRts (демон artsd; в среде GNOME
ту же роль иrрает eSound, e5d). как написано в документации по КDE,
«звуковой сервер позволяет вам слышать системные звуки и при этом
одновременно IIроиrрывать mрЗ-файл или иrpать в иrру с фоновоЙ му-
зыкой. С ее помощью СИстемИые звуки обоrащаются различными эффек
тами, а проrраММllСТЫ имеют ВОЗМОЖность леrко включать в проrpаммы
поддержку звука",
Но не все так красиво, как кажется Иа первый взrляд. Если вы запуcmте
сервер aRts, у вас не будет работать ни одна lIрОt'раммаНрОI\!'рыва'l'ель,
которая ero не поддерживает. Любая протраМldа, которая попытается
обратнться к звуковоЙ плате в обход aRts, получит сообщение, что
устроЙство занято друrой проrраммой. Не поддерживают aRts уже рас-
смотренные проиrpыватели mpg123 и Xmms.
ei 8.IJ'I"! ' .'[ ; 1.aHHa .
В nporpaMMY Xmms МОЖНО включить nоддержlCY сервера aAts, доБЗ8И8 МОДУЩ. аRtз
. Driver 0.4 {tibar1sout.so). ЭтОТ модуль не устанавливается по умолчанию 8 некоторых
nистрибутиоэх.
187
UNUX: попное P\l><OBOACTВO
Поддерживает звуковой сервер МРпроиrрыватель NoAtun, ВХОДЯШИЙ
в состав KDE. ПОЭТQМУ вам пр"детсярешить, какой проиrрыватель
использовать. Если BI>I ХQтите использовать Xmms, тотда вы не будете
слышать системllыe звуки, или же вы будете использовать NоАtuп, но
будете слышать звукЦ КDE. Лично я предпочитаю первое: дело в ТOT, ЧТО
любая проrраммэ.; поддерживающая aRts, «съедает» больше системных
ресурсов, чем Xmms.
Рассмотрим пару полезных трюков, которые можно проделать с помощью
NоАtuп. Допустим, вы хотите слышать одну музыку, то есть вам нужно
убрать rолос исполннтеля. Выполните команду меню Параметры .... Эф
фекты И установите эффект VoiceRemoval.
Конечно, rолос удаляется не Bcerдa: иноrда он все еще слышен. хоп! н
слабо, В э'rом случае нужно применить эффект VoiceRemoval НеСКОДЬКО
раз (два и более).
Вам также доступны эффекты реверберации, расширения стереабазы
(ExtraStereo), питч (замедлеЩlе 11 ускорение воспроизведения).
При запуске любой nporpаммщ, использующей aRts, будет запущен cepnep
aRts, если он не был до :лоrо запущен. Cepnep aRts моJIШО заПУСКа1Ъ и при
заrpузке KDE. Для этоrо запустите ЦеllТР управления КDE и перейдпте
в раздел Звук.... Звуковоil сервер. В этом разделе вы можете установить
различные параметРI>l звуковоrо Сер1!ера от метода ввода/вывода звука
до частоты дискретизации. В качестве метода ввода/вывода звука вы MO
жсте выбрать один IIЗ методов: Open'Sound Systcm, Advaneed Linux Sound
Architccture, Threaded (мноrоrtотоковая) OSS или АвтоопределеНI1С.
Вам уже lIадоело слушать МРЗфайлы и теперь хочется про слушать KOM
пактдиск? Проиrpьmать компактдиски можно IIЛИ е помощью спещшль
IIОЙ проrраммы КsCD (входящей 1< пакет kdешultimеdiа), или используя
какойllltбо друroй проиrpыватедь. .который поддерживает компактдиски
(I!апример, тот же Xmms).
Вы можете редактировать lIазваllИЯ песен с помощью редактора базы
данных CD (l"I'eeDB). ПО окончании редактирования вы можете coxpa
нить названия песе!!: локально или же на сервер FrceDB, чтобы дрУПIС
пользоваТелИ не заполняЛ1l названия альбома 11 дорожек пру'шую. Впо'
следствии вы ca.ni Можете ПОJIУЧIIТЬ эТII данные от сервера FreeDB.
Однако эту возможность вы вряд ли будете использовать, разве что сами
орrанизуете свой сервер FreeIJB и будете использовать ero вместе со
споим и знакомыми.
188
fMsa 5. звук и ВИДео В Linux
5.2.1. СравнениеХmms и NoAtun
Ссrоднл самыми IЮnУЛЯрНЫМН ПрОН!:р!>lВDтелями дЛЯ I.iIJЦX являются
проrраммы Хтm" и NoAtun. Первая nporpaMMa поставлястся с БОJ!ЬШИН
L'l"BOM дистрибутивов, а вторая пхоДlП 11 состав KDE. Как вы используете
проrрамму ХmПIВ? Скорее ncero, просто ДЛЯ ПрОСЛymИБания музыки, а
Оllа MHoro чеrо умеет. В этом параrрафе мы I10rОБОрИМ о lIестаидартных
возможностях ПРOI-раммы Xmms плаrинах, скинах. Параллельно будем
сравнивать возможности ХПIПIВ с возможностями nporpaMMbl NoAtun.
Полное название проиrрывателя ХПIПIв Х Mu!timedia Sуstещ. Про
'.рамма ХшП1S JIспользует интерфейс WinAMP и поддерживает СКIIНЫ
!1pOrpaMMbl WinAMP. Хшms может ВОСПРОЮDОДИ1Ъ ЗВУК, записанный в
форматах МРЗ, WAVE, MOD, З3М и ДРУ""Х' Версия 1.2,7 поддерживает
плаrины input, outpUI, ge!leral И visuзJizаliО!l,
Окно нрorращы. Хmтв состоит ffЗ трех частеЙ: rлащюе окно. ЭJUJалайзер
и редактрр песец. На рис. 5.1 изображена nporpaMMa Хшms в <<ПОЯНОЙ
комплектации»,
PJrc. 5 1. проиrРЫВ8тель Xmms
189
LINUX: поЛНое рУКОВйДСТВО
Как я уже отмечая, просрамма поддерЖивает форматы MPEG 1/2/3,
WAVE, МАО, S3M, а также формат АuшоСО. Таким обилием форматов
не может похвастаться просрамма NoAtun, Честно rщlOРЯ, меня не нн-
тересуют форматы МАО, 53М, CIN (10 Software), мне нужна поддержка
только форматов МР1/2/3, WAVE If AudioCD.
Проrрамме NoAtun очень не хватает поддержки AudioCO. KOHe'lHO,
МОЖНО запустить проиrpыватель AudioCD KsCD, но зачем ведь есть
Xmms. Если вы хотите узнать, каlШе еще форматы поддерживает ваш
Xmms, откройте окно ОПЦИЙ (нажмнте Ctrl + Р). На странице Звуковые
модули Ввода!ВЫllода представлеllы все модули, отвечаюшие за поддерж-
ку тех или иных форматов.
В этом же окне вы можете выбрать модуль пывода: драйвер 055, модуль
пыпода зпука e50UJld или модуль записи на диск. для нормальноrо пос-
произведения нужно lfСlюльзопа1Ъ драйвер 055. Нажав IШО!IКУ Настрой-
ка, вы МОЖете HaCTpOlfTb пыбранный драЙвер. Если у вас установлена
звуковая карта 50und Blaster 16, ViВRA или AWE32/64, в настройках
драй пера OS5 пы можете установить трехмерное стереорасширение (3О
Stereo Eпhancement).
Теперь HeMHOro поroворим О мqдyле3anиси на диск. Если установить этот
модуль Б качестве bC1!OBHoro М9ДУЛЯ DыoJIB,, музыкa не будет поcnроllЗ
валиться с ПОМОЩI>I(l драйвера O$S,a БУДе1' запиться на диск в виде
WАVЕайла. А Эl'о:щачит, что!!lIформат, .коroрый поддерживается
модулями ввода просраммы Xттs; ЦЫ можете ко!fl!eртировать в WAVE.
Скорее всеro, МР3 КОНllеРТИРОIIЗТ1>в WAVE вам нспридется: это про-
сто неразумно. А во1' «сrрабить» пару .комнактов, Не ВЫХОДЯ из любимой
проrраммы это МОЖ1JО. ОТКРClЙI'е комцакт-дцск (для этоrо нажмите
Shift + L, чтобы заrрузить каталоr, ц выберите катал9r /mnt /cdrom) и
включите модуль записи на ДИСf!:, ТСЦiJРЬ нажмите кцопку Play. Процесс
записи можно остаl'IQ.ВИТЬ в J11(l6()",OMeН'l'. Все! Вr;;eдорожки будут за-
ПJfсаНЫ lIа лиск (В ваш домaщЩtЙ-ЩтaJIот) в виде WАVЕфайлов. Имена
фаЙлоп будут типа Tr1'\ckN. wav,
ЕстествеНIIО, во время зациси муз.ЩtИвы не усльninпе, потому что модуль
OS5 не используется. Orom заМC'tИtъ, что Xmrns «rpабит» компакты значи.
тельно быстрее. '!ем J!1юrраммаЦriр (ПОii:райней мере у меня). Потом эти
файлы МОЖ1Ю будет,цреобразоJЩц.вмР3 с помощью любоro конвертера,
например, lamc или l3end. Прe.Qi)рд.Щ)ваТi> WлVE в МР3 можно так:
$ lате b 128 input.wav О!.l"tрцt.юрЗ
ОПЦИЯ b устанаВJшваетскороСТЬ потока (bltrate) 128 Кбит/с. Более под.
робно о преобразовiШl.IИ WAVE в МР3 вы можете Прочитать на страницах
ПОМОUJИ nporpaMMbl 1ате, выполнив следующую команду;
s тап lате
190
rлава 5. Звук и видео в l.iлuх
Проrpамма NoAtun также обладает модулем записи на диск. Ero можно
выбрать 8 окне Эффекты. Должен заметить, что в I1porpaMMe NoAtun
этот модуль не раоотает. Впрочем, 011 и не нужен все равно проrрамма
NoAtun не поддерживает AudioCD.
На странице Эффекты..... Общие модули вы можете выбрать нужный вам
эффект ИЛlI дополнительный модуль. Например, модуль Смена песни по
зволяет установить команду, которая булет выполнена ПОсле восnpоизве
пения песни, и команду, которая булет выполнена после воспроизведения
ВССК песен. Первая команда может включать параметр %5, который будет
заменен названием только что воспроизведенной ПССIlli. Эту возможность
можно использовать для автоматическоro конвертирования WA VE в МР3.
Вы будете слушать музыку, а Хшms будет конвертнропать ее в формат
МР3.
При воспроизведении МУЗЫКII вы можете ИСПОJlьзовать ОДIIН из эффек
топ:
. LADSPA (!Ю умолчанню)
. SOX
. Модуль удаления roлоса
. Улучшенное стерео (расширение стереобазы)
. Эхо.
Включив модуль удаления rолоса, пы будете слышать только одну lузЫКУ.
Конечно, качество работы этоro модуля очень СИЛЬНо зависит от качества
записи вашеro МР3. Этот модуль намно!"О лучше работает с AudioCD
I'ОЛОС ПОЛНОСТЬЮ удаляется.
ДНW10rичные эффекты поддержнвает и проrpамма NoAtun. К тому же
в'проrрамме NoAtun имеется возможность прцменить однн 11 тот же
эффект несколько раз.
Теперь рассмотрим модули визуализашlН. ЛИЧНО мне оольше всех Hpa
вится модуль G-Force. Кроме оБЫllliовенной ВИЗУaJlИзации, он обладает
множеством дополнительных функций, например, функцией IlЭмерения
скорости кадров (fps). Нажмите < '!> в Оllliе модуля, и вы увидите СПИСОК
фУН1C1UIЙ молуля.
Модули визуализащlН поддерживаются и проrраммой NoAtun, но поче-
MYTO они очень нестабильны, и их ИСНОЛЬЗ0вание может вызвать сбой
NoAtun.
Нам осталось рассмотреть только скины. Нажмите Alt + S. чтобы OT
крыть oКflO просмотрщнка «шкур.. так официально называется окно
выбора скина. У вас нет «шкур»'? [де их взять'! На официальном сайте
http://xmms . org iшина http://www.skinbase. org. Подоilдуттакже
ваши «шкуры.. от WinДmp'a. ZiрфаЙлы скипов нужно скопировать в
191
lINUX: попное РУКОВОДСТ80
каталоr /usr/ sl">.are/XI1111Is/Skins. ПОCJlе этоrо установленные «шкуры»
будут ЛОСТУП/iЫ всем пользователям системы. Если !>ы хотите, чтобы с
трудом добытая «wкypa» была доступна только nам ми же если у пас
нет прю! на заШIСЬ n каталоr /usr / share, устаноnите «шкуру» В KaTaJlor
--/.xmms/Skills.
Как видите, протрамма NoAtun уступа!:1' проrрамме Xmms практически
по всем параметрам. Кроме тою, NoAtun, работая через звуковоЙ сервер
aRts, требует больше памяти, чем Xmms, воспроизводящиЙ звук непо
средствеНlIО через /dev /dsp.
Чтобы запус-щть Xmms срвзу после окончания работы с NoAtun, ocтa
tlОВlпе демон аудиосервера artsd, инач:е вы получите сообщение, 'по
звуконая плата занята друrи:м приложением а именно этим демоном.
5.3. «Оrрабпение» AudioCD
Вот мы и подошли к самому интересному моменту в этой rлаве. Допустим,
вы одолжили у коro-то новый компакт-диск и захотели сохранить eroco
держи мое в формате МРЗ на своем жестком диске. Под Windows написано
множество протрамм, позволяющих «rpабить» музыку с компакт-дисков,
самые изВестные AudioGrabber, ЕАС и СОЕХ. Но не устанавливать же
Windows только ДJlII тоro, чтобы «сrpабить» пару KoмnaKТOB? Есть про-
rpаМJaаудиоrраб6ер и для Linux. Это консольная протраммв cdparanoia
(!lttp, (/www. xiph. Drg /paranoia) и rрафИ'lсская оболочка для нее Grip
(http://www .пostatic . Drg/grip), работающая в среде GNOME.
Запустите протрамму Grip, затем нажмите кнопку «Eject», вставьте ком-
пакт диск и снова НnЖМИте КlIottKY «Eject».
Вы видите, что вместо названия песен отображаются только надписи
Track 1.. TrackN. Вряд ли Нас ycтpalfBaIOT такие наЗJ>aНИ:Я, поэтому И3Ж."И-
те кнопку Toggle Disc Editor. Окно nporpaMMbl Grip раСЩltрИтся, 1\ вы
увидите редактор названий песен. После Toro. Как вы BBeneTe IJаЗваllИЯ
песен, наЖМl\т.е кнопку Save disc info.
Перед началом «оrpабдеШfЯ» компакТ-ДIfска перейдите на вкладку Config
прО!'раммы Grlp. Нас интересуют опции на вкладках СО, Rip, МР3, lОЗ.
На вкладке СО можно указать имя и параметры СD'ПРlfвода. По УМOJIча
I!ИЮ использу'Тся устройство (dev / с<1rош. Вы же можете указать ДPYloe
устроЙство CD-ROM, например /dev (hdd (ссли CDROM ПОДКЛЮ'IСН как
Slavc ко второму КОНтроллеру).
Теперь открой'fC вкладку Rip Options и отключите надоедающий режим
Autoeject after rip_ В этом режиме после Toro, как Grip СКОПllрОВал На
192
filавэ 5. звук и видео 8 Unux
винчестер содержимое аудиолорожек, коtnактлиск автоматически IIЗ
впскается из привода. На вкладке МР3 Options вы можете установить
скорость потока МР3 (по умолчанию используется 128 Кбит/с). Здесь же
можно установить КОЛИ'IССТIJО процессоров, которые будут использованы
Д,IЯ сжатия МУЗЫКИ (параметр Number of CPUs to use).
Как работает аудиоrраббер? Сначала он 'Iитает дорожку комлактдис
ка и записывает ее в WАVфаЙл. Затем 011 запускает МР3компрессор
и сжимает WАVфайл. После сжатия IIСХОДНЫЙ WАVфайл удаляется.
Вы можете отключить параметр Delete .W8v after encodiug, чтобы WAV-
фаЙл не удалялся посде СЖ<lТИЯ, но 110мните, что WАV-файлы занимают
очень миоrо дисковоrо пространства. Например, обыкновеlШЫЙ ауДlIO
кошактдиск в формате WAV будет занимать около 650 МБ на жестком
лиске, а этот же компакт--диск в формате МР3 Bcero около 65Мб (при
битрейте 128 Кбит/с).
er 'uJ . JfН! ' }Щ;:'
Битрейт (bi1rate) количество информаЦИi-1. описывающей одну секунду звука.
, оnщ t1Okaзывае1. чrо бmреЙ't 128 Кбиr/с,D.ЛЯ Gonы.uинства людей AOCraTel:'l, ЧfQ()ы
.. С4И13ТЪЗ8У4"ниеидеальным. Зна4еНие 128 Кб"т/с.а...",. пороФаым зна4.Н".М,
ВЫШе t(()Т<фоt"O K"'eCTвo ..,е Tall: сущес::теещ-ю увеШ1ЧliIвается при У6eJ1И4ЕН{
битрейта, чем до иеrо. Но ТеМ не менее чем битрейт больше, тем лучше. Сейчас
С::'faраЮТСR использовать битрейт 160-192 Кбит/с,
Теперь мы rOl'OBbl приступить к непосредствениому преобразоваНIIЮ
аудиодорожек в МР3-файлы. Выберите нужные вам ДОрОЖКИ с помощью
f1равой киопки мыши и перейлите на вкладку Rip. Вам доступны два
режима: Rip+ Encode и просто Rip. В первом случае проrрамма Grip
создаст WАVфаЙлы и преобразует их в формат МР3. Во втором случае
прсобразоваиие в формат МР3 произведено lIе будет, Нажмите КНОПКУ
Rip+Encode. Есл\! вы не выбрали ни одной ДОРОЖКII, Grip спросит вас,
хотите ли вЫ заШfсать сразу весь компакт диск.
Проrpамма Grip работает очень быстро, иоскольку используются сразу
лва потока один для чтеНJIЯ дорожек CD и заПИСIIИХ в WАV-файл, а
друrой для преобразоваИIIЯ WАVфайла в формат МР3. Например, вы
выбрали две дорожки. Сначала Grip ПРОЧlIтает первую и сохраиит ее на
диск в формате WAV. Затем, пока будет читаться вторая дорожка, Grip
параллельно будет сжимать первый WАVфайл. Качество сжатия тоже
вполне приемлемое; песня продолжительностью 3 минуты 30 секунд за-
няла 3.36 Мб в формате МРЗ (при битреЙте 128 Кбит/с).
'7 ]1111: JIII!
193
UNUX, полное p'''BOДCТВO
5.4. Проrраммы для про смотра видео
Обзор nporpaMM
Как вы знаете, видео может быть записано в форматах AVl, усо, ОУD,
MPEG-l, MPEG-2, MPEG-4. Больше Bcero нас (во всяком случае меня)
интересует самый распространенный формат ----: последниЙ. СвоеЙ по-
пулярности формат MPEG-4 добился блаrодаря тому, что он Не требует
никакой дополнительноЙ аппаратуры, как, например, ОУО. В зависимо-
сти от дистрибутива у вас MOryт быть установлены разные протраммы ДJlЯ
npocмотра видео. Самые распрОстранеlШЫе: XMovie (http://heroines .
sourceforge. net/xmovie-l. 8. tar. gz), Gtv и Xine.
Проrрамма XMovie поддерживает видео, записаниое в форматах MPEG-
1/2, ОУD и QuickTime. П porpaMMa Gtv поддерживает А VI, МPEG-l/2.
УСD. Как видите, эти nporpaMMb! не поддерживают нужныЙ нам формат.
Если вам нужен MPEG-4, то вам прямая дорота к Xine
В состав KDE входит простенький BlfДeo проиrpываreль aKtion. Возмож-
ности ero довольно скудны: он поддерживает только МPEG 1, QuickТime,
AVI и анимированный GIF. К тому же МPEG полностью не поддержи-
вается воспроизведение без звука. Почему так слабо? да потому, '!То
aKtion это всето лишь оболочка для старото "роиrрывателя xanim.
ЕДИИL-твеиная функция, которая понравилась мне 6 aKtion, это захват
экраиа. Для захвата текущеro кадра нажмите кла6ИШУ <С>. По умолча-
нию используется формат PNG, но в парамстрах проrpаммы вы можете
установнть любоЙ друroй формат.
nporpaMMa Xi"e
Проrрамма Xine (httр:llхinеhq.dе)свободно распространяемый
видеопроиrРЫВ'lтель для UNIX-систем. Поддерживает форматы УСD,
DУD, MPEG.l/2 и дополнительно MPEG-4, а также друrие форматы.
Это значит, что просрамму можно расширить, добаВИ6 в нее поддержку
нужных форматов. Однако в некоторых дистрибутивах поддержка MPEG-
4 добавлена, а в некоторых нет. Например. n дистрибутиве ALT Junior
1.1 я не cMor просмотрсть фильм в формате MPEG-4 с помощью Xine.
Пришлось обновить систему. Во второЙ версии дистрибутива ALT Junior
с поддержкой MPEG-4 все было нормально.
Кроме пакета самото проиrрывателя xine-ui, необходимо скачать и
библиотеку xine lib с тем же номером версии, а если смотрите видео-
ОУО, то установите дополнительно и xi!1ev"dx nлarин, обеспечи-
вающий удобство управления. Пакеты RPM версии 0.99.3 можно взять с
http://people.linux-online.ru/xpdev/bloody/rpms.
194
rлавв 5. 3B\f1< и видео в IJnux
Рис. 5.2. Проиrpыаатenь Юм
Коша проrpамма будет устаНОllлеИII,цвелите КО!,llщцу юпе-сЬш для про"
верки коифиrypllЦИИ Щiщей сиcrсмы; JJPorpaMMa Qпределит ИспользуеМЫЙ
вами сервер звука, lIилеодраЙJ!ер и друrис параметры.
П роrрамма Xine по умолчанию использует Вllдеодрайвер Х8Ьт и ауди"
одр;tйвер 1115a09, но можно IIХ сменить, ука:щв ИОВblе драйвера как ар"
lyMeHTbl ОПЦИЙ y 11 A соответственно. Проиrpыватель поддерживает
аудиосистемы 088, ALSA, aRts, ESD, Irix и 8u" Audio и впдеодрайверы
Xvideo, ХSЬш, OpenGL, SDL, АSСП Ат! liЬщry, Syncfb и framebuffcr.
Если вы устаНОВIIЛИ какой-нибудь драйвер (IIУДИО или видео), а xioc
перестал запускаться, запустите :Оп" с парамстрамиА "ull и V oull или
заново введите команду xio,,-chвсk.
Список опций команды xinB можно посмотреть, как обычно, введя
xine '.help.
Остановлюсь только на оплии п, разрешающей управлять проиrрЫJ!a-
телем по сети.
Для управлеиия по сети создайте файл ../ . xine/passwd и добавьте в
Hero строку ALL:ALLOW. Затем добавьте строку
xinectl 6789/tcp уnpавление через порт 6789
в фаЙл /etc/services. Запустите xi"e с параметром -'", а на том ком-
пьютере, с которою собираетесь управлять, выполните команду telnet
195
lINUX: nО11ное руководство
<ИМЯУЗ11а> 6789. Теперь можно управлять проиrрывателем по сети.
Введите команду help ДЛЯ получения краткой помощи по командам для
сетевою управления.
Просмотр DVD
Для просмотра DVD в Linux используется ПРОИl'Рыватель Totem (меню
К .... Мультимедиа....., Видео...... nроиrрыватель Totem, если вы работаете
R среде КОЕ, ИЛII ПриложенlUI ....., Звук н видео....., Вндеопроиrрыватель
Totem. если в GNOME).
Для открытия DVD-диска выберите в меню команду ФUIlЬ" ....., DVD.
Сначала Totem отобразит меню DVD-диска (файл VIDEO TS.VOB), R ко-
тором ВЬ! сможете выратьь звуковой поток (язык фильма), титры и др.
I'M С 11I '" ('Н1 ] !i==l !
1 ........\............11.....1.1'
.,;."с;.;""" 3J '.._._ ,.;
r.==::....";;:;:::c ;. .' .,'" ...
800Пp:'.IЮаедl!:'tt 0;00/0:00
"'.'",,- .
,.""."""._.,,.-.'_,.,....,'
РИс. 5.3. TQtem
196
rлава 5. Звук и видео в Unux
Смотрим тепепередачи ПОД Linux
Чтобы смотреть телевизор без отрыва от лю6имоrо компьютера, придет
ся купить ТVтюиер. Я рекомендую приобретать тюнеры производства
компании AverMedia. Не пожалейте денет на тюнер зтой компании. А
внешние USВтюнеры, наоборот, не покупайте: lIЛЯ них еше не создано
стабильных драйверов под ОС Liпuх. К тому же пропускная способность
IllИlfЫ USB 1.1 нелостаточна для качественнOI'О I1росмотра телепередач.
Следующий момент, который важно учесть при выборе ТV-тюнера, это
lIоддерживаемые им стандарты. Телевешание в странах CHr произво
дится В спстемеSЕСАМ, а звук передается D системе D/К. Поэтому при
rюкупке тюнера, убедитесь, что он поддерживает оба эти стандарта. Если
ваш тюнер поддерживает только PAL, изображение будет чеРFIO.белым,
а ссли отсутствует поддержка О/К, то... Я умолчу об 'этом (nе хочется
uспоминать издаваемый шум).
Наконец, некоторые тюнеры MorYT не поддерживаться вашим ядром.
Чтобы получить сп>!сок поддерживаемых мат,
1. установите ИЗ R8шеro дистрибутива пакет kernelsource, содержащий
ИСJюдные тексты ядра и модулей;
2. заrляните в [lOявившийся каталоr /нвх / 'Охс / liпux2. ХХ. хх/
Documentation/video4linux/ bt t У, rAe 2.хх.хх версия ядра:
3. читайте ItEADME и CARDLIST (в некотОрЫХ версиях ядра он Ha
ЗbIБается: CARDS).
Поtле подключения ТV410Hep придется настраивать. Здесь вам поможет
!)t1v miniHOWТO на русском языке по адресу
j'ltt:p, / /1inux .yaroslavl. ru/docs/howto/mini/BTТVMlni Howroo. 3
ОблеrчllТЬ вам работу по настройке тюнера сможет конфиryраuионная
уruлита с rpaфическим интерфейсом GCbttv (http: / / freshrneat. пet /
pro jects/gcbttv).
Наконец, TV,-ТЮllер ПОД\OIючен 11 настроен, 11 пора смотреть передачи.
Лучше асето использовать npol'paMMbl, 110ддерживаЮЩlfе библиотеку
IibXaw. Во мноrие диcrpибутцвы ВJUIючен XawТv (домашняя страница
tlt ёр: / / linux.bytesex. org/x<'lWtV) набор проrрам.м ДЛЯ упраа
i!еIШЯ видеоустройством vldeo41iпux, захваТJ\видеопотока в файл в
различnых форматах ИЛJl аыаода ero на ЭКран. Настройки J:lJаJЩОЙ про
l'paMMbl xawtv, собственно просмотрщика ТУ, хранятся в файле / . xawtv.
Создайте вру'(ную файл примерно TaKOro содержания:
Iglobal)
ful1screen = 800 х 600
freqtab europe'east
197
L!NUX: полНое рУКОВОДСТВО
pixsize = 128 х 96
pixcols 1
jpegquality : 75
[defaltlts]
t10 rm = S ЕСДМ
capture :; Qver
вои!'се ;: Television
Если ВЫ чувствуете, что ваш старенький компьютер Не «вытянет» полно
экраниоrо режима 8О0х600, установите разрешение экрана 640х480. В
зависимости от поворотливости вашеro компьютера установите уровень
JРЕGкомпрессии. Чем выше качество, тем больше нarpузка на систему.
Обычно для максимальноro качества хватает значения jpegquality = 90.
Но самым оптимальным значение[ будет всетаки 75.
Затем указываем nporpaMMe, что мы будем принимать передачи в формате
SECAM. Частотная таблица каналов europe-east. Если вы живете в
запаЛIIОЙ Европе, укажите europe-west.
Друrие nporpaMMbl просмотра телепередач, КОТОРЫе вам MorYT приrо
ДIIТЬСЯ:
. tvtime проrрамма, имитирующая телевизор на компьютере, выводя
изображение на экран с частотой 50/60 rц, СIЩblая тем самым про
блему с чересстрочным изображением;
· GnomeТV простая проrpамма для просмотра телепередач в оконной
среде GNOМE, перестала разВlшаться в 2001 roду;
. KwinТV интетрирована в среду КDE;
. bttvgrab мощная проrpамма, ПОЗВоляющая записывать телепере
дачи на ДИСК.
5.5. Воспроизведение
неподдерживаемых форматов
во мнотих дистрибутивах Linux мы не можем воспроизвести, казалось бы,
привычные форматы DivX, Windows Media (WMV), QuickTime, DVD
11 В некоторых случаях даже МР3. Прнчина осему этому всевозможные
лиuеНЗ1l0Н1Iые соrлашения, нарушения которых не допускается. Но выход
И3 ситуации есть: распространять тот или иной кодек в составе дистри-
бутиоа запрещено, но никто не мешает вам заrрузить ero и ИСПользовать
В свое удовольствие.
В большинстве случаев кодеки ВЫI10лнены в виде динамических библи
отек Windows (dllфаЙЛОD). Чтобы их использовать в Linux, вам IIОНадо
бится mplayer это кроссплатформениое приложеиие, позволяющее
198
rлав.а 5. звук и ВИДео 8: Linux
воспроизводить различные форматы мультимедиа. Найти nporpaMMY
mplayer в Интернете не проблема. А вот .юдеки найти HaMHoro сложнее.
Я рекомендую заrpузить пакет essent ial, который доступен по адресу:
http://www.mplayerhq.hu/homepage/dload.html.
Установим этот пакет:
$ tar jxvf essential20050216.tar.bz2
$ ер essential20050216/* /usr/liЫwiпЗ2/
Чтобы кодеки стали доступны, вам нужно перезаnyстить mplayer.
С ВОСПРОIlзведением ОУО ситуация тоже неоднозначна. Некоторые дис-
трибутивы, особенно НОВЫе (но не все), воспроизводят ОУО без проблем.
А проиrpыватели дрyrnx дистрибутивов вообще отказываются работать с
DVD. Дело в том, что в состав проиrpывателей не включена поддержка
DVD. Для ее включения нужно перекомпилирОвать проиrpыва'rели из
ИСХОДНЫХ кодов. Прочитать обо всем этом можно по адресу
http://www.geniusweb.com/LDP/Hcwro/htmlsingle/DVDPlaybackHcwro.
И еще: если у вас не восnpоизводятся DVD, то, возможно, с вашим дис
трибутивом 1<се нормалыJO, просто у вас слишком слабый коmъютер.
Для воспроизведения ОУО нужен компьютер не слабее Pentium Ш 500
Mhz и 256 Мб оперативной памяти. Также убелитесь, что включен ОМА
(прямой доступ к памяти) для вашеrо DVDпривода.
199
rлава 6
СЕТЬ И ИНТЕРНЕТ
ОСНОВНЫЕ СЕТЕВЫЕ ПОНЯТИЯ
ПОДК1lIQЧЕНИЕ К ЛОКАЛЬНОЙ СЕТИ
ПОДК1lIOЧЕНИЕ к WINDОWS-СЕТИ
ПОДК1lЮЧЕНИЕ К ИНТЕРНЕТУ
LINUX ПОЛ НОЕ РУКОВОДСТВО
6.1. Основные сетевые понятия
6.1.1. Протокол и интерфейс
в основе сети Интернет лежит протокол TCP/IP, поэтому знакомство с
понятием ПРОТОКОла необ1<ОДИМО тобому пользователю.
Протокол это совокупность правил, опредмяющая взаимодействие
абонентов вычислнтельной системы (в нашем СЛУ'lае сети) и описы-
вающая способ ВЫПолнения определенною класса функций. Еще ОДIIН
теРМIIН, который мы будем часто употреблять, шrrерфейс. ИНtnJ!рфеiiс
это средства и правила вэаиыодеЙСТJI1IЯ компонент системЫ между собой.
Чтобы лучше понять значеюlЯ ЭТIIJ( терыинов, обратите ВIUlМa:tJие на рис.
6.1. На эmм рисунке изображены две системы (компьютера) Д и В.
А
ПpaтoIcoд в
AI8T
ПРОТО КОI1
A2B2
ПРОТQКОЛ
дЗ--ВЗ
Рис. 6.1. протоOJ1Ы и интерфейсы
201
UNUX: попное рУКОВОДСТВО
Таким образом, средства, которые обеспечипают взаимодействие моду-
лей разных уровней в рамках одной сиcrемы, нвзываются интерфейсом,
а средства, обеспечивающие ВЗВIIмодейстние компонент onHoro уровня
разных систем, протоколом.
Прежде чем переЙ1И к протоколу TCP/IP, рассмотрим семиуровневую мо-
дель взаимодействия открытых систем (сокращенное название модель
OSI), разработанную в начале 80-х rOnoB международной орrанизацией
по стандартизации 150.
Средства взаимодействия (см. рис. 6.2) в модели 051 делятся на семь
уровней:
1. Физический.
2. Канальный.
3. ССlевой.
4. Транспортный.
5. Сеансовый.
6. Предстапительный.
7. Прикладной.
7 Прнкл"-""'>й
Иtпeрфейс
1 7& 1 67 1 npeдc-пltlМitffiьныiit
I 76 ф 567 1 СеаНСО8ЫЙ
4 I 7654 1_ ' ТраН"пoQПfЫЙ
I 76543 J_ I 34567 1 з Сетевой
1 7&5432 I 234567 1 2 !<аНatlЬНЫй
I 7654321 i'I I 1234667 \ 1 ФИ3И"1вctcИJ4
передача ПО сети
Рис. 6.2. Модель 05/
202
А
А
Кot>X:IТCp2
ПроЦSСС 2
rлава 6. Сеть и Интернет
Блаroдаря этому задача ceтeBoro озаимодействия разбивается на неСIЮЛь-
ко более мелких задач. Это позволяет при разработке новых способов и
инструментов сетевоro взаимодействия не создавать их с нуля, а исrlOЛь-
зовать уже rотовые решения. Непосредственно apyr с apyroM взаимо-
действуют только физические уровни. Все остальные уровни напрямую
взаимодействуют только с выше- и нижележащими уровнями: пользуются
услуrами Нlrжележащеrо и цредоставляют услyrи вышележащему. Дрyr с
apyroM такие уровни контактируют косвенным образом. через посредство
lIижележащшt УрОПllей.
ei 81J'iI[Т;( ;;..:tН:II = -
. . в eKOTOpыx спучаях cвrElooro взэимодейстеиЯ фИЭИчесй уровеНЬ *111( 'faj(:QВОЙ
отсутствувт, при эrом ero ФУНJ::ЦИИ выполняет самый низкий из присyrСТВУЮI.U,ИХ
уровенЬ.
Из рис. 6.2 пидно, что по мере прохождения сообщения через уровни
модели 081 к пересылаемьщ данным добавдяется служебная I<нформа-
иия, СВlщетедьствующая о прохождеНl1И данных через определенныЙ
уровень.
Рассмотрим взаимодействие двух компьютеров более подробно на при-
мере файловой службы. Допустим, нам (КОМПЬ!l)тер 1) нужно записать
какую-ннбудь информацию в файл На удалетrом компьютере 2. Обычное
сообщеНllе состоит из заroлопка и поля данных. В Заrоловке содержится
различная служебная информация: например, адреса нашеro компьютера
и компьютера-IJOлучателя, имя и расположеНl1е файла. В поле дэнных в
нашем случае находится содержимое фаЙла.
Приложение (процесс 1) формирует стаидартиое сообщение, которое
передается прикладному уровню. Точнее, процесс 1 работает на при-
кладном- уровне.
После формировашIЯ сообщения прнкладной уровень передает ero пред-
ставителъному уровню. На этом уровне R заraлОRОК добаRЛЯIOТСЯ указания
для предстаВllТельноrо уровня компьютера-адресата. Потом сообщение
передается сеансовому уровню, коroрый добавляет свою информацию и т.Д.
Процесс вложения одиоro протоКOIIа в друroй назЫl'ается uнкапсуляt(uеii.
Коrда сообщение поступает на компьютер-адресат, оно принимается
физическим УРОАнем и передается I'верх с УРОRНЯ на УрОАень. Каждый
ypOI'CHb анализирует содержимое заrолопка cl'oero УРОRНЯ, Rыполняет
содержашиеся в НеМ указания, затем удаляет относящуюся к себе инфор-
мацию из заrО!lОRка и передает сообщение далее Rышележашему УрОRНЮ.
Этот процесс назыпается декаnСУЛЯl(uей. Далее мы рассмотрим каждый
113 УРОRней взэимодейстпия отдельно.
203
l\NUX: попное рУКО8ОДСТВО
6.1.2. Уровни взаимодействия 051
Физически)! ypolleHb (Physical Layer)
Физ!!'!ескиЙ уровень передает биТЫ по фюическим каналам связи, Ha
пример, коаксиальному кабелю ил!! JЩТОЙ Шlре. На зто", уровне опреде
ляются характериcnнш электрических сиrналов, которь!е передают дис
кретную ннформаЩIЮ, например: 11Iп кодирования, скорость передачи
СИПiaЛОВ. К этому уровню также относятся характер!!C'tики физических
сред передачи данных: полоса пропускания. волновое СОПРОТИI!Ление,
помехозащищенность.
Функции фИЗllческоrо УРОВНЯ реализуются сетевым адаптером ИЛИ по
следовательным порщм. ПримеРОМ.!1РQТсжола физическоro уровня м<>жет
послужить спецификация lOOBase-ТХ(теХНОЛОflfЯ Ethernet).
Канальный уровень (Data link Layer)
КанальныЙ уровень отвечает за передачу данных между узлами в рамках
одной локальноЙ сети. Узлом будем считать любое устроЙство, подклю-
ченное к сети.
Этот уровень выполняет адресацюо по физическим адресам (MAC
адресам), «Вlllитыi» в сетевые адаптеры nреДnРIlli1'ием-изrОl'ОВlIтелем.
Каждый сетевой адаптер имеет CBC,jt уникалЬНЫЙ MACaдpec.
Канальный уровень переводит поступившую С Bepxнero уровня инфор
мацию в биты, которые потом будут переданы физическим уровием по
сети. Он разбивает пересылаемую информацию на фраrменты данных
кадры ([тames).
На этом уровне открытые системы обмеииваются именно кадрами. Про
цесс пересылки выrЛЯДl1Т примерно 'raк; канальный уровень отправляет
кадр физическому уровню, которыЙ отправляет кадр в сеть. Этот кадр
получает каждый узел сети н ПРРвер"ет, соответствует ли адрес пункта
назначения адресу данното узла. Если адреса совпадают, канальный ypo
вень принимает кадр и передает наверх вышележащим УРОВJIЯМ. Еел!! же
адреса не совпадают, то он просто цrнорирует кадр.
В используемых в локальных сетях протоколах канальноrо уровня зало
жена определенная ТОПOJlОfИя, то есть способ орrанюзнии и адресации
физических связей. КанальИblЙ уровень обеспечивает доставку данных
между узлами в сети с определенноЙ тополоrиеЙ, а именно тоЙ, для KO
тороЙ он разработан. Основные тополопш nоказаны на рисунке 6.3.
204
rЛ8ва б. Сеть и Интернет
uill О Х
Общая шина
КОЛЬЦО
Звезда
Рис ВаЗа Ооновные roПDЛOfИИ ЛОкальных компьютерных сете'"
Сетевой ypoultb (NBtwork Layer)
Канальный урОВень обеспечивает связь только между компьютераWl, co
единенными Ю!Д1IВJIдУальной линией связи, то есть в рамках локальноii
сети. Межсетевое взаимодействие 06еспеЧlfвает сетеВОй уровень.
Локальные сети соединяются спеЦlfальиыми ус'rройствами марш
рутuзатQрами. Маршрутизатор собирает информацию о тополоrии
межсетевЫХ соединений 11 на основании Этой информации пересылает
сообщеНI1Я ceтeBoro уровня в сеть l!дзначения. Сообщения на сетевом
уровне называются nаКетами. Чтобы передать пакет от компьютераот
праВlfтеля компьютеруадресату, который находится в друrой локальной
сети, нужно совершить некоторое КОЛlfчество транзитных передач между
сетями. Ииоrда их еще называют хопами (от ашл. Ьор прыжок). При
этом каждый раз выбирается подходящиЙ маршрут.
На сетевоМ уровне работают несколько видов протоколов: сетевые про
токолы, которые обеспечивают передвижение naкeтoB по сети; протокOJIЫ
маршрутизации RIP и OSPF; ПРОТОКОJlЫ разрешения адреса ARP (AШlте.."
Rеsо/иtiЩI Protocoi).
КлаССlfческие примеры протоколов сетевосо уровня: IP (стек TCP/IP),
IPX (стек NoveLL).
Транспортныll уровень (Transport Layer)
На пути от отправителя К получателю пакеты мотут быть искажены ИJlИ
утеряны. Некоторые приложения самостоятелыIo выполняют обработку
ошибок npll передаче данных, 110 большинство все же предпочитают
иметь дело с надежным соединением, которое как раз и призваll обе
спечить транспортный уровень. Этот уровень обеспечивает требуемую
приложению или верхнему УРОВIIЮ (сеаIlСОВОМУ ИЛJl прикладному) Ha
дежность достаВКIf пакетов. На транспортном уровне определены пять
классов сервиса:
1, Срочность.
2. ВосстановлеШlе прерванной СВЯЗIf.
3. Нали'ше средств мультиплексирования нескольких соедииеlШЙ.
205
UNUX, полное руховодсllЮ
4. Обнаружение ошибок.
5. Исправление ОJШfбок.
Обычно уровни модели 051. начИна!! с транспортноro уровня и выше.
реализуются на nporpaMMHOM уровне соответствующими компонентами
операционных систем.
Примеры протоколов траНСl10РТНОТО уровня: ТСР 11 UDP (стек TCPiIP).
SPX (стек Novell).
СеансооыА ypooellb (Sesslon Layer)
Сеансовый ypOBeIIb устанавливает и разрывает соединеliИЛ между KOM
пьютерами, управляет диалотом между ними, а также предоставляет
средства синхронизации. Средства синхронизации позволяют вставлять
определенную коiпpольную информацию в длинные передачи (точки),
чтобы в случае обрыва связи можно было вернуться назад (к последней
точке) и продолжцть передачу.
Сеанс это лоrическое соединение между компьютерами. Каждый сеанс
имеет три фазы:
1. Установление соединения. Здесь узлы «доrовариваются» между собой
о протоколах и параметрах связи.
2. Переда'Jа информаuии.
3. Разрыв связи.
Не нужно путать сеанс сетевото уровня с сеансом связи. Пользователь
может установить соединение С Интернетом, но не устанавливать нИ с \\'ем
лоrическоrо соединения, то есть не принимать и не передавать данные.
Представ"тельныА уровень (Presentation Layer)
ПредставительныЙ уровень изменяет форму передаваемой информации,
но не изменяет ее содержания. Например, средствами этоrо уровня MO
жет быть выполнено преобразование информации из одной кодировки
в друrую. шифрование и дешифрование данных.
Пример протокола представительноrо уровня: 5SL (Sec!tre Socket Layer),
обеспечивающий секретный обмен данными.
Прикnадной уровень (Appllcat!on Layer)
Это набор разнообразных протоколов, с помощью которых пользовате
ли сети получают доступ к совместно используемым ресурсам. Единица
данных называется сообщением.
Примеры протоколов: НТТР, FTP, TFТP, SMТP, РОР, 5МВ, NFS.
206
rлаеа 6. Сеть и Интернет
Интернет И модель 051
При взаимодействии открьrroй системы и Интернета модель osr упрощает--
ся, так как некоторые протоколы Интерн ста включают в себя функции не-
скольkИX уровней. Если к сети Интернет подключается один пользователь,
а не вся сеть, то автоматически исчезают канaJ1ЬИЫЙ И фИЗlfческий уровни,
потому что нет сетевых адаптеров, а значит, нет и физических адресов. В
дднном случае конечным протоколом будет протокол типа «точка-точка",
например, РРР. В. этот протокол будут вложены все остальные.
Основные протоколы
Среди сетевых протоколов выделяются следующие основные:
. TCP/lP (Traпsтissioп CO/ltrol Protocol I Jпteтet Pr%col) святыня
всех святынь. Это базовый транспортный сетевой протокол. На ЭТОМ
протоколе основана вся сеть Интернет.
. ЮР (IWutiпg Jllfoтra/ioп Рто/осо/) используется для маршрутизации
пакетов в компьютерных сетях.
· тсмр (J/!temer Cal1/ral Message PralOcol) протокол межсетевых
управЛЯIOШИХ сообщений. Он применяется для проверки доступности
узла, установления соединеш!я и т .п.
. "Р (File Traпsfer Pr%col) протокол передачи файлов. Служит ДЛЯ
обмена файлами между системами. Например, вам нужно передать
файл на сервер или, наоборот, скачать файл с сервера. для зтоrо вам
нужно подключиться к файловому серверу (он же FТP-cepBep) и вы-
полнить необходимую вам операнию. Подключение осуществляется
с помощью FТР-клиента. Простейший FТР-клиент входит в состав
практически любой операнионной системы. Обычно для запуска
FТР-клиента нужно ввести команду ftp.
. НПР (Hyper Тех/ Traпsfer Protocol) протокол обмена rипертексто-
вой информацией, то есть документами HTML. Протокол НТТР ис-
пользуется ве6-серверами. НТТР-клненты называются браузерами.
. РОР (Post Office Pro/ocof) протокол ПОЧТОВОI'О отделения. Этот
протокол используется JtJIя получения электронной почты с почтовых
серверов. А для передачи почтовых сообшений на сервер служтrr про-
токол SMТP (SiтpleMail Traпsj'er Protocol).
. SLIP (Serial иnе [тете! Pr%col) протокол подключения к сети
Интернет 110 последовательной линии. Используется для установлеш!я
связи с удаленными узлами через низкоскоростные последоваТCJfьные
интерфейсы. В настоящее время вытеснен протоколомРРР и практи-
чески не используется.
. РРР (Poiпr-to-Point Protoco!) обеспечивает управление конфиryраци-
ей, обнаружение ощибок и попышенную безопасность при передаче
данных на более высоком уровне, чем протокол SLIP.
207
UNUX: полное рУКОВОДСТВО
6.1.3. Протокол ТCP/IP и IР-адресация
Любому компьютеру в IР-сети (TCP/rP-сети) назначен УНllкaJ1ЬНЫЙ адрес,
которыЙ называется IP-апресом. IP-aдpec это 32-разрядное двоичное
число, которое принято заШlсывать в виде чеrьrрех деСЯТllЧНЫХ чисел,
разделенных точками, иапример, 111.1l1.213.2З2ИЛИ 127.0.0.1.
Уникальность IP-aдpeca достиrается достаточно просто: IP-anpeca назна-
чаются централизованно Сетевщм ИнформациоюlЪJМ ЦЩlТром (NIC, Ne-
twolk InformatioJ1 Center). Если Ваша локальная (или даже ретиональная)
сеть не соединена с Интернет, то внутри сети вы можете ИСПОЛl>Зопать
любые IР-алреса без соrлаСОВ3НШI с NIC. Если же ваша сеть rюдключе-
на к Интернету, протокол ТСРIIР обеспсчивает работу вашеЙ сетевой
ПрOl'раммы с любым компьютером в мире, как будто тот находитсSl в
lЮКaJ1ЬНОЙ сети.
Любая сеть. в том числс локальная, может быть раздедена на подеети. О
причинах И uе1lЯХ TaKoro разбиеlUlЯ вы можете прочптать в руководстве
lР Sub-networkil1g-HOWТO, которое вы найдете на сайте http://dkws .
narod. ru или на http, / /www.dhsilabs.com.ua. ПОД сети СВJlЗbU!ает
маршрутизатор, в роли KOToporo может выступать любой компьютер с
двумя или более сетевыми интерфейсами, например, двумя сетевыми
платами.
Каждая сеть (подсеть) также имеет спой уникальный адрес. Под сетью
можно поштать «I1aЧКУ" IP-адресов, идущих нодряд, то есть 192.168.1.0
192.168.1.255. Самый младший и самый старший адреса резервируются.
Младший (192.168.1.0) C1Iужuт' адресом сети и ИСПOJlьзуется, Korna нужно
указать всю сеть (подсеть ), HanpflМep, при задаfJIf!l маршрутизаuии дли
нее. Старший служит широковещательным (broadcast) адресом: в этот
адрес направляются сообщешUl., которые нужно передать сразу всем ком-
l1ьютерам сети. Широковещательные запросы очень часто используются,
например, для поcrроения ARР-таблиц.
ДЛи каждой сети (подсети) определена ее маска. ФаКТИ'lески, маСКа это
размер сети, то есть число адресов в ceТli, Маску принято записывать в
десятично-побайтном виде:
. 255.255.255.0 маска на 256 адресов (О 255)
. 255.255.255.192 маска на 64 адреса (192 255)
. 255.255.0.0 маска на 65536 адресов (256*256)
IР'сети делятся ПО размеру lIа классы, каждому из которых соответствует
свой диапазон адресов. Заl1ишите первое число адреса в виде восьмиз-
начною ДВОИЧНОI'\) числа, и количество идущих llOдрядедиНlЩ укажет на
класс сети. В таблице 6.1 I1ривелеиы характеристики классов сетей.
208
Тnава 6. Сеть и Интернет
Классы IР-сетей
Т;Щлнца 6.1
Класс Первые ДИnnО3ЬН КОl\Мчест-ао Маска
. О""... адресов У"'О.
Д О 1.00.0 12:6.0.0.0 15717216 (2«) 255.0.0.0
В 10 128.0,0,0 191.255.0.0 655З6(216) 255.255.0.0
С "110 192,0.1,0 22З.255.255.D 256 (2') 255.255.255.0
D 1110 224.0.0.0 239 255.255,255 MUtl!C6St
Е 11110 240,0.0.0 247.255.255.255 Эарвэереирован
Адреса узлов (компьюте ров) в сети класса А выrJIЯJIЯТ как 125......' класса
В как 136.12..... класса С как 195.136.12".
Еслн адрес начинается с последовательности 1110, то ceTh является сетью
класса О, а саМ адрес является uсобым rрупповым (тllllicast). Если в
Iшкете указан адрес сети класса О. то этот пакет должны получить все
хосты, которым присвоен данный адрес.
Адреса кл.асса Е зарезервированы ДЛЯ будущеro примененЩI.
3а некоторыми адресами закреплены особые значения, приведенные в
таблице 6.2.
Специальные ,р. адреса
Табл.ица 6.2
AlJpe<: На3ttаченме
ООДО Адрес узла, сrе.неррО8авшвrо ЭТОТ nзкеr
Ш1РОkО8ещатеnы,ый адрес (оrpамиченное шиpt:Жоsещаниеj.
255.255.255.255 Па"ет с таким адресом будвт р2ССЫЛЗThCЯ 800М узflаМ, KOropblO
axOдs:lT е той же сети, что i'I '"'СТОЧКИk пакета
L.oopback aдl:Jec ЛОlI:аЛl.ноro ХОМПыотера. Иcnол..зуетсядnй
ТQСТИРО8ШЩ сетевых nporp;aMM ВЭ8ИМQдействия <:eTВЫX
\27.0,0,\ ПроЦесСО8. ПP"l noпbln:e Оl'Пра!ЖТЬ пзкет ПО этому адресу
дaныe не nepeдa10rCA ПО сетм, а 90sвp8Щt1ЮТ(;я протоколаМ
sepXHIUI уроВней как roJU:./C.O чтопрнятые. Любщl адрес
ПQ,цi::оrи 121.0. О, О 01НОf;ИТСst К /ltЖanьному !(ОМnЬЮ1'еI)У
100.0.0 Иаоп1роsвннв.R сеть К1!8Ссз. А. КОТорая исполЬЗ)'етпротокоП Jp"
IiQ не rЮДio:;ЛJOЧВНQ .. ИНtВрне1)'. Маска CQJj.t 255.0.0.0
172,1I:i.O.О V 1п,ЗiU.U 6 из"rн"Рf)ЗJ;\МWJ:,IХ tP.(:",TI1I(J'1;;1r В.
МаскE.l КО*ДОЙ (;I'IТИ 255.255.0.0
192.168.0.0 \92.158.255.0 256 сетей клзсса С, маска -ЖДО сети 255.255,;255.0
6.1 .4. DNS система доменных имен
Человеку обычно леrче запомнить символьное имя (WW\v.dhsi1abs.com.ua),
'/ем ПОСJlедовательноCTh чисел (217.20.163,34). Компьютеру же, наобор<>т,
проще обрабатывать числа, а не СI1МВОЛЬНУЮ IIНфОРШЦИЮ. для преоб-
209
lINUX: попиое руководство
разования IP-aapeca в символьное имя и обратно используется служба
доменных имен DNS (Doтaiп Naтe $ysreт).
Домены объединены в иерархическую структуру. Корневой домен управ-
ляется центром InterNIC, который l!aзна'lает ломены 5ерхнето (пеР50ro)
уровня для каждой страны и реrистрирует национальных координа-
торов. Национальные координаторы (в России это RU-CENTER,
http: ((www.nic.ru) nОВТОРllIOт эту процедуру в своем домене 11 так
далее, в результате типичное доменное имя подразделения компании
выrлядит как на рисунке 6.4.
Кореш.
Домены пepвoro
I'JXI'I>'O
i""
1I ypoвEIHb
flrmo
http://\WtW.depant.flrma.is.p.n.I
dвpartm8nt
Pltc. 6.4. Иерархическая cTpyкrypв. системы д,оменнык имен
DNS можно назвать !1!rантской раСпределенной базой данных. Ее под-
держивают серверы имен (пате server, DNS-<:epeep), которые снабжают
всех информацией о данном домене или нескольюlX доменах сразу. Для
каждой зоны (rpYnnbl узлов, приписанных к этому домену, но не к ero
поддоменам) есть по краЙнеЙ мере дэа сервера имен, которые содержат
всю информацию относительно ХОСТ(l5 (узлов) В этой зоне.
Что происходит, Korдa пользователь .вводнт в окне браузера адрес
department.firma.isp.ru? Запрос на разрешение (преобразование) имени
в lP-адрес сначала отправляется серверу имен, нринадлежащему про-
ваЙдеру пользовтеля. Если этот сервер знает такое имя, он возвращает
IP-anpec, и браузер устанавливает соединение с нужным компьютером.
Если же нст, то сервер имен провайдера обращается к корневому серверу,
06СЛУЖlшаюшему домеи наивысшеrо уровня, тот перенаправляет запрос
DNS-серверу домена rll, тот обращается к DNS-серверу домена isp, тO'f
К DNS-серверу домена firma. а этот последниЙ ВОЗвращает IP-anpec за-
реrистрироваиноro в нем хоста department. Если эта цепочка запросов
оборвется на каком-либо звене, то пользователю будет сообшеио о не-
возможности разрешения имен\! компьютера в IP-aдpec.
210
rЛава 6. Сеть и Интернет
6.1.5. ПОРТbI
На одном компьютере MOryт одновременно работа1Ъ нссколько приложений,
обменивающихся данными через СеТЬ. Если в кача:тве адресата сообщения
указывать 'f()JlbKO IР-адрес !lолучщ'еJ1Я, 'I'O ПрИJlожени!! не CMOry'F разобрать-
СЯ, которому из них предназначены присланные данные. ДШI решения этой
проблемы используется механизм портов. Номер порта это просто номер
проrpаммы, 1WТорая будет обрабатывать передаяные данные.
Этот номер может бьrrь любым, но за наиболее популярными службами
закреплеllЪJ стандартные номера, чтобы клиенты бьшн тоердо уверены,
что обращаются к нужному серверу, Так, стандартный номер порта
электронной почты 25, пересылки файлов 21, веб-сервера 80, служ-
бы !elnet 23, сервера имен 53 . Стандартные номера выбираются
из промежутка от О до 1023. Числа нз'пщая с 1024 11 до 65 535 южно
испОЛЬЗовать для своих собствеШIbIХ номеров портов,
6.1.6. Динамическое Вblделение адреса
Как я уже сказал, IР-адрес любоro устройства, подключенноrо к Интерне-
ту, должен быть уникальным. Это означает, '1'10 статически назначенный
вам адрес не сМожет использовать никто дрyrой, даже ТОlда, Korдa вы 01'-
ключитесь от сети, Избавиться от таКОIО расточитеilЬНОro расходования
адресов nOMoraeT механизм DHCP (Dy"aтic Host Coпfigu/'atiOlI ProtoCQI),
flOЗВОЛЯЮЩИЙ' множеству временно подключающихся к сети клиентов
совместно использовать один и тот же небольщой набор адресов.
Если в сети присут"вует DHCP-сервер, то КJП!ент, подключаЯСI, к сети,
может получить у Hero временный IP-aдpec, по Которому и будет доступен
всем пользователям Интернет на протяжении пееrо сеанса нодключения.
По заверщеllИИ сеанса адрес освобождается и может быть выделен KOMY
то ЛРУIОМУ.
6.2. Подк.nючение к локальной сети
Если среди рашеrо оборудования ecТl, сетевщr l1Лата, 1'0 оиа будет обна-
ружена при установке системы. Если же вы установили сетеоую плату
после установки системы, то запустите средство понска новото обору"
дования. Обычно для этоrо применяется утилита kudzu (в дистрибутиве
Linux Mandlllke 10 есть своя harddrake). Запускать ее нужно от Ifмени
суперпonъзователя.
Kudzu самостоятельно определит НOIюе устройство и установит ero: про-
пищет устройство в файл установлеmюrо оборудования (имя ею зависит
211
UNUX, пал"ое paeoдoтвo
от дистрибутива: попробуйте /etcImodules. сопf, /etc/mOdprobe.
conf, /etc/sysc:onfig/hwconf) идобавит ero модуль (драйвер) в co
став ядра.
Нужно напомнить, что ethO ЭТО первая сетевая плата, ethl nTO
рая и Т.д. Скорее Bcero, у вас ест!> Bcero одна ethO. Ее мы и будем
настраllвать. .
В большинство современных дистрибутивов включены rрафические npo
rpаммыконфиryраторы, позволяющие настроить всю систему. Первые
конфиrураторы были не очень удобными, .1 мноrие аДМНlшстраторы
предпочитали peAaJ(nlponaTb J(онФltryрационные файлы вручную, тем
болес что ни один J(OIlфиryратор не позволял HacтpOlfrъ ту или IIНУЮ 'lасть
системы полностью, а выполнял лишь базовую настройку.
Сейчас же все в корне изменилос!>: конфиryраторы Linux стали такими ми
же удобными, как и апплеты Панели управления Windows. Тем не менее,
мы рассмотрим не только настройку с помошью конф'!ryраТОРОIl, но те
caMLJe команды, с помошью которых а.дМИНI!страторы настраивали сеть
лет десять назад. В этой книre будем ориентироваться на современные
дистрибутивы Linux Мandrake и Red Hat Liпux (Fedora Сorе) сопсем
старые ИХ верСЮ1 рассматривать нет СМЫсла я не встречал ни OjJHOro
серпера, на котором БЫJI бы устаliовлен Red Hat версии ниже 7.х.
6.2.1. Настройка сети в Linux Mandrake
Начнем с Moero любl!Моrо дистриБУТИ!lа Linux Maпdrake. Запустите
конфиrуратор drakcoof, в нем выберите аПIUJет цСеть И Иитернет*, далее
"Новое соединеuне*, а !I ПОЯlшвшемся окне "Соединение 00 локальиой
се",н».
Если У lIас в Сети есть OHCPcepBep, рекомендую выбрать автомаП!ческую
настройку. Если же TaKoro сервера нет или у вас дрyrие планы относи
тельно этOI'О компьютера, выбираем ручную настройку.
Кроме IPaдpeca ceтeBoro интерфейса и МаСКи сети обязательно укажи
те опцию "Запускать при запуске», в противном случае lIаМ придется
поднимать иитерфейс ethO каждый раз при запускеfперезauускс Linux.
Опция Network Hotplugging в официальной документации не описана,
110, насколько я понял, она используется ДЛИ определення физическоrо
подключения К сети. В режиме Network Hotplugglng, если ваш компьютер
не подключен фИЗllЧески (с помощью кабеля) к хабу иди дрyroму компью
теру, то при попытке обращения к интерфейсу вы получите сообщение
"Сеть иедоступиа». Поэтому, если физической сети у вас нет, а сеть как
таковая вам нужна, щщример, для теС1'ирования сетевых приложений,
рекомендуется этот режим не включать.
212
rлаВ8 6. Сеть и Интернеr
.
- ".,-
- ' ..
. .
'ДQБРаnо){алОfSlI.ftli-8.Ltе1-lр 'ynPBII11-8НИR МВnЦ*'::;:."
""'..-,
11
:-=,=:=..:<
8.,
ощ,
'fq..
.
11
"'"
"'''ioI''''"","
!;е)Мlltао:rlo
С"'=,.,...
.
'r,-"!Ie ,,"'lJm,,
Рис. 6.5. Конфиrypaтор DrakCoпf
J-I:Ac:.r""""O-I!п-IКI!Iу;:,......ltiJiЩ$'IIllI"lI"m\щ!)
Jcm.,IIIIШII'I?У rP.IIU.JI!W"'
К4*Jr"f,Ql>.l:О: .,Д,...o;n..I'&I\Q\v.nос"
#C....,..iOI... io'I'o::e..M.."..... .."...II....\.....". 1 2.-4)
Рис. 6.6. Указание параметров сетевото интерфейса при ручной настройке
213
UNUX: попное руководство
После зтоrо вам nyжно указать ()бще сетевые параметры: имя комцъю-
тера, IР-адреса серйерОIl DNS, а таюке IP-anpec шлюза (компьютера,
через который ваша локальная сеть соединяется с Интернетом), если
такой есть в вашей сети.
СледующиЙ вопрос конфаryратора адрес узда Zerocoof это поле
можете с частой совестью оставать пустым и нзжать Далее.
Настройка сети уже почти завершена осталось только перезапустить
сетЬ.
Если вы изменяли имя узла (а при первой НастроЙке так оно и бl>lоает),
рекомендуется сразу же перезапустиТь систему Х Window: нажмите Ctrl
+ Alt + Backspace 11 заново войдите в систему.
Для измененая параметров уже созданноrо соеданения используется ал-
мет «Управление соеДlшеНИЯ'IИ». 011 позволяет изменить все параметры,
которые вы ввели с помощью предыдущеrо алплета, а также просмотретъ
информацию об интерфейсах.
Довольно информативным и удобным оказался апмет «Наблюдение за
соединениями» С ero ПОМОщью МОЖFJо просмотреть информацию о
трафике 11 даже УВlщеть rрафик заrpузки.
6.2.2. Настройка сети в Linux Red Hat
Прll установке дистрибутива просрамма установки сама распознает
ваш сетевой адаптер в моеЙ практике не было случая, чтобы сетевой
а:rалтер не был опознан (зто не касается внешних USB-адаnтеров). Вам
нужно указать тоJtЪJЩ параметры сетевоro соединеНИЯ.
Вернемся К настройке сети. Выберите нужный saM адаптер и нажмнте
кнопку Изменить.
В появившемся окне введите [Paдpec и сетевую маску. Обязательно вы-
ключите реЖIIМ Configure using DHCP мы настраиваем интерфейсы
вручную, а не с помощью ОНСР. Также следует Включить режим Activate
Оп Воо! тоша наш IIнтерфейс будет «поднят» при заrрузке системы.
ЭТОТ режим нужно включать для всех постоянных соединений, например,
соединения по локальной сети или по выделенной линии. Вернуsщисъ в
окно настройки сети, укажите имя компьютера СОМР5. А затем на-
жмите кнопку Далее. Все, сеть настроена.
Для Изменения параметров ceTeBOro соеДlIнеюш удобнее использовать
rрафический конфиrypа"юр redhat-config-network.
214
rЛаВа 6. Сеть и Инrернеr
Н.стройка сети
",,'- .' "'..".,',,,',.-,"''-'',,.''''--
, "; 1 '''';'''''"''''''''''''' ,":: ";,,,,,:,,,, '" ,
:i,,ina'.. .... . ".
I;j'-"""'.' ....,.. .'.' "О .,:,','",,-,:''- "':"",''''.'Ч,' . .... ,'.-,..,'., ....'.,....,...,.
11:.,,!Ш}'ЩXI8!1"i1:,,а;' 1:':1:
.iT,;"i;- oi
.] :i.: :!
ti" ,
ji ,..:;::,=;:_::_Ш ____, ::: "
_ 1 1' 'Y1:T1t!I(!EIY'-n.iIJIt;/»Im.IOТ1IpII:
'i:i . _91IТQ.11\'tИ"fICIIСОНСР
. @8py"t>!)'1CI
'ДCf1O/ll"lIтеIlЬ"Ыl!-nараq.IbI
, " F '
Ш';I;(1J I . (
r----- '1
'H",I!oDNSA ..! j ,
fi.Н:oi:М"Н"'1'1r)rf::Н ! , Е]
, ilL.I\'\QМS t=1........L........... j
':
1....
i:' ш
11iJC<1"""'''-'''''"'уl ?J
i" "....1 lll1
Рис. 6.7. Настройка сети
6.2.3. Настройка сети в FedorB Core
rрафичеекий конфиrуратор в Fedora Core Называется internet-druid
(рис. 6.8). Можно запустllТЬ ero И I!З меню оконной среды (в GNOME
это Система..... Мастер подключения к ""тернет).
Выберите «Соедииение Etbernet», а дальше следуйте ИНСТРУIЩиям. После
создания соединения для ВаС будет запушен конфиryратор system-confjg-
network, nо,зволяющий указать дополнительиыe парвметры CeTeBOI'O
интерфеЙса Iши изменить только что введенные. В дальиейшем ero МОЖtЮ
"ызвать из меню оконной среды (в GNOME это Система ----+ Управление
устройствами сети).
6.2.4. Проверка работы ceTeaoro интерфейса
Если вы не подняли (аКТl1I!1Iронали) интерфеЙс н процессе rpафическоrо
конфитурироввНlIЯ, сделайте это сейчас, ПерейдиtelЩ текстовую консоль
ЮlИ откройте окно терминала и выиолните команду ifup ethO (дeaK
тивировать интерфейс можно командой i fdoWfl ethO),
215
LINUX, ПОJ'ltЮ" рУКОВОДСТ80
111 СоедOlIt!!ИНII IS01>:
"'(,"",,(I
.М'lНиеrN.,r.Fti\'1g
ritб..:цw..оо'=.ue.ro.
$' С-М1o\iI ('SL
r . """,,," I "....
'<-Sl: IIknc_' О .
РИс. 6.8. НаСТрОЙКfj се""1
...п",. <.....\1M)\;!Qt!!'\i'
ОЧ","М'О,
[9 <f'
IН\IIIП-D
"0""'''''___ ." ,__,,:,;,_,_,;':;::,;:_";"'_' _ _ i't___}",(.,:__,..:>,,_
1:::!I,I , =,--_:_..._..:_.. oc'-'i
Rj..A1-1"lWt)1"у()'JIq'iJl1'l SAпF"-аtIIIII\.Qr'l!p"
О Рf,,-n:Мo-.our.ц.«r"JI>_rdfl>.ftюИattlts
О&'IIII;I.:жrli_'DНфIo!,rr.МIOI""'длr;1I"tCi--II"''
ОIulI/1М8;!";I!OЛyЧA.1'..."at:'lIР<1..- J lfuц>
j':;:::::M"): [.....= = :==- .
. [.а AJ:I!i/.TI<i 1'.tIa.l'",jjjh-IiпtФ;rr)<'.\I.\\\t;I nN:; f.l1 ?tIj!ilt:!;,
;t О"OJф,1Ii> tiIll
l.rt r Pl)flC1iI4 '''i'',, ""'-"'iУ-
i "" [: _ Эд«I>ШМ:tf.,*:1JХiмт
. ==,:
!'IpЖUlЭfI«J,М
l'
I
I!
YJ:,.,,'QI_W41f>;
:.,!.:..):'T'1,!_c... .
l :.:""'"'''''. : "
"A nЮI' ';:55 :i'!'.!i Z!i ()
д,..ф,.с."IiA>IIII'с..)
(
r---;'",, i нJ
:'!.! .PT. а ..
РJIIС. 6.9. УК,1зание парамеlров cereeoro интерфейса при ручной Itастройке
216
rлаеаб. Сеть и Интернет
Для получения сведений об ;lКТИВНШJWТерфейсах выполните команду
ifсопfig.ОнаПQJ<:ажет примеРно,CIJ:дyJ<,I\ц'ее. '
ethO Link'encap:Ethernet НWaddrOO:02:FO:73:BO:85
inet addr:192.168.1.11 Bcast:192.168.1.255
Mask:255.255.255.0
иР BROADCAST МULTICAST MTU:150D Metric:1
[.. .]
10 Link encap:Loca1
inet addr:127.0.0.1
ИР LOOPBACK RUNNING
[...]
Интерфейс 10, KOToporo вы не настраивали, это интерфейсобратиой
петли. llе ОТ/QIю'!айте еro, он необходнм для работы некоторых npllдO-
же,ШЙ.
Loopback
Mask:255.0.0.0
MТU:16436 Metric:l
в первых двух строчках yrилита ifconfig ВЫВОДИТ тип (Ethernet) адап-
тера, ero физический адрес (МАС-адрес) и npисвоенный ему IP-aдpec.
Дальше параметры интерфейса, указываюlШtе, что он запущен II ис-
пользуется.
МТU (Maxiтuт Тrащfеr Ипi!) максимальный размер еДIIIПfЦЫ переда-
ЧИ даЮlbIX. Практически все протоколы ПОЗВОЛЯЮТ использоваТЬ в Кадре
ПOJIЯ переменной длины, это касается даже заroловка кадра. Максимально
ДOnYCТIIMoe значеlШе длины ПОЛЯ это как раз и есть MTU.
Далее следует стаТИСТI\JШ сколько пакеТОВ принято/передано, сколь
ко байтов принято/передаио, Сколько КОЛЛИЗИЙ было с участием это!о
интерфейса.
Теперь ПР9верим, как работает соединение. Это делают командой ping
(пинryют нужный адрес).
# ping 192.168.1.11
Эта комаllда посылает на указаНIIЫЙ адрес по протоколу ICМP маленький
Ilакет, требующий эхо-ответа, раз за разом, пока не будет остановлена
(Ifапример, lIажатием комбинации клавиш Ctrl +С). Обычно ею пользу-
ются для проверки доступности узлов.
Потом прошщrуйте свою машину по имеllll, которое вы ей дали: ping
c\h3ilabs.
Убедившись, что проблем с локальными настроltкаUI не возникает, мож-
но пропишовать какуюнибудь удаленную машину из вашей локальной
сети 110 ее lP-алресу.
Теперь попробуйте обратиться к удалеНIIОЙ машине Щ) ,имени. Помните,
что символьное ИМЯ ЛОJlJlШо быть разрешеио BIP-aдpec? В вашей не-
217
LINUX: полное руководства
большой сети сервера имец, скорее Bcero, нет. В TOM случае для преоб-
разования IР-адресов в имена и обратно служит файл /etc/hoscs. Это
оБЫ'lIIЫЙ текстовый файл, кажлая строка (("TOpOr!) содержит
<IРадрес> <полноеимязла> <псевдонимы>
разделенные пробелами. Откройте ЭТ01' файл n любом текстовом реДаК-
торе 11 добавьте туда сведения о машинах СвоеЙ локалЬНОй сети. Символ
# в этом файле пО!Щмается как зиак комментаРliЯ.
6.2.5. Настройка сети в старых дистрибутивах
Если вам недоступны rрафические КОНфИI'ураторы, то можно настроить
сетевой интерфейс 1I из комаидной строки.
Добавьте в файл УI:тановленноrо оборудования (скорее всею, он будет
называться /etc/conf .modules) сведения о своей сетевой плате.
Добавьте в ядро модуль сетевой маты:
# insmod rtlВlЗ9.0 (для Realtek 81391
# insmod ne2k-pci.o (для NE2000 РСТI
Назначьте интерфейсу IР-адрес:
# itconfig ethO <IP адрес> broadcast <BROADCAST''lДpec>
netrnask <маСка>
Указать шлюз МИ выхода в Интернет можно KOMatlJrO!t ro"te:
#ro\lt.e add default gateway <IРадресшлюза>
Если в Интернет выходить вы пока не собираетесь, то удалить установлен-
ный маршрут можно командой route del detault. Команда route
без артументов выводит текущую таблицу маршрутизации пакетов.
Перезапустите сетевую службу, и МОЖНО пинrовать только что настро-
енный интерфейс.
6.3. Подключение кWiпdоwsсети
Вам удаJЮСЬ достучаться (ping) до всех компьютеров своей локальной
сети, работаюших под управлением ОС Windows, но хотелось бы боль-
шеrо? Например. обмениватьСЯ с ними файлами? Если в вашей сети
есть папки, к которым oTKpьrr общий сетевой доступ, то это ВОЗМОЖНО.
Поможет вам пакет 5атЬа.
Название 5атЬа происходит от названия протокола 5MB (Server Message
B/ock), он же NetBIOS, на котором основана работа Wiпdоws-сети. Пакет
218
rЛ8ва 6. Сеть и Интернет
SашЬа содержит набор приложений, ПОЗВОЛЯЮЩИХ Liпuхмашине вКJIЮ
читься В работу такой сети как в роли клиента, так и в роли сервера.
В роли обычноrо пользователя вам достаточно уметь подключаться к
Wiпdоwsсети как клиенту. для это1'о вам понадобятся пакеты SБтЬасот
пюп и samba--client, входящие в большинство совреме.шых диcrpибупшов.
Если IIX у вас нет, то заrляните на http://www . ватЬа. o1'g.
Пуcrъ сетевой доступ к папке открыт на компьютере, имя KOTOpOro в сети
\Vindows USER5. Посмотрим сначала на список всех доступных ресурсов
на этом компьютере:
$ smbclient L user5 u < имяпользоватапя >
Имя пользователя это не ваше реrистрационное имя на Liпuxмашине,
а имя тою пользователя машины Windows, кто имеет доступ к ее pecyp
сам. После ввода пародя вЫ увидите что'то вроде:
Domain=[USER5] OS=[Windows 5.1) Server=[Windows 2000 lN
ManagerJ
Sharename Туре Comment
SharedDocs Disk
WIN (С) Disk
ADMIN$ Disk Нетосе Admin
public Disk
[. ..]
PubIic это та папка, которая вас интересует. Для приемапереllачи
файдов предназначена проrрамма smbclient. Чтобы ускорить (или авто.
матизировать) ввод пароля, введите ее в таком виде:
$ smbclient //user5/public a < ИМПОЛЬЗОВаеп» >%< пароль >
Вы увидите приrлаwение npo1'paMMbl:
втЬ: >
и сможете вводить ее команды. ПеРВblМ делом введите команду help для
получения списка всех ДОСТУПНЫХ команд. В таблице 6.3 перечисдено
несколько самых полезных IIЗ них.
Использовать nporpaMМY smbcIient не очень удобно. Если вы собира.
етесь обмениваться файдами часто, то лучwе использовать проrрамму
smbmount, которая умеет монтировать Уllаленный общий ресурс как
обычную файловую систему. Ниже приведен np:имер команды, которая
монтирует папку customers компьютера USER5, используя имя палъ
зователя den. Точка монтирования каталоr /mnt/customers:
$ smbrnount //user5/customers a den /mnt/customers a 500 G 100
219
UNUX, ПОЛНЩ> рУКОВОДСТВО
Команды nporpaMMbl sтbclient
Таблица6.З
KQ4IIIBНA8 ОnмсанИ<е
1. ВЫ80ДИТ C:nИСОII:фaitJtов В nan.e
ВЫПОllняетпереход& з.ещаННый К8fапоrИ8 сере.ере (учтите, что
cd[MJI\I'.n1 именно на сервере; а lie на ";11ОНТСI(ОМ "pмпj(ir&pa). в 10М случоо.
если 1<8талоr не vказан, ТО smbc;ltent np0C;TOabЦUl.CТ ИМR Текущеl'О
кeta.nora
ПОnYliавту\сазаюtый файл из общеro ресурса" сохраНАОТ efO нз
get (файл) [м"апьное имя) поj(8льнQмюмпыoре.. ,Если уr.:е>ЭilНоt!lжапьное "МЯ, ТО П!JJ1Y"f(!КНЫЙ
с серВера файл буДQН:;ОХН(Нll1а КЛИGН'f('ЖОМ КОМnЫОftфе ПОД Э'f':ltМ
ицеl-illlМ
коnируеr файn tfЦc PP'0P \0'1 COXp3.H'ilBT ero TI.IM Под укмзиныМ _""8.
рш I фаJ1J (удаленно", ИМJ кем. Есnи ЭТО имя 1<48 уk!iЭ8JiО, то файл при со:<ps....еН"и перимено
BывaTbC не будвт
mget (файлы) Получает все )llCsэзнные файлы с сервера
mptlt (файлы) '<onpyeT 6се Щ:щн:н",е файлы На сероор
del (фзйnы] Yд.an8T на сервеРе: УКЗЗЗН!olые фа.йлы, eCMI. lI;oHe.....o. ПОJlЬ3fl88.ТiЩь
обладает на ЭТО правsми
ПО3ВОЛЯВТ epeMaj-tИQ, ВЫЙ'ТИ ИЗ smbclienl. "IТQбbl выполнить OMaIiДY
! ...а локальном t::оМI'tЬЮТйре. Например, '!в; зто просмотр 'Е'кущеrо
КOTanora 1-111 ЛОW1I;>НQi1 ,.,.ашине
Elxj( иЛи фJII Заеершение сеанСа рf.lбоfЫ nptlrpaM...\:.! smbclient
в ЭТОМ примере владеЛЬцем смонтированноro каталorа объявляется полъ
зователь с иде/fТИфИ""ТОРОМ (UID) 500 и идентификатором rpynпы 100.
Закончив работу с общеЙ папкой, размонтируйте ее командой
$ smbumоuпt /mпtfсustоmеrs
Если вместо русских имен файлов вы видите Непонятные символы, 3Ha
чит, кодировки кириллицы на ващем компьютере и на WindowSMalllllHe
различны и вам нужно указать дополнительные опции монтирования:
cOdepage=<arg> для кодовоЙ страниuы, применяемоЙ на удаленноЙ
машине (обычно для кириллицы это ср8б6), и iocharset:<arg> дЛЯ
кодовой стрвщщы на стороне Linux. Зна'lение io.chal1iet зависит от уста-
новленноЙ локали, и узнать erO можно 110 команде lucale:
$ locale
LANG=ruRU.UTF8
[. ..]
в моем примере иа стороне Linux ИСПO!lьзуется Юникод (а мошо бы быть,
например, KOI8R), и комаидаМонтироваНlIЯ будет ВЫI'ЛЯДеть так:
$ smbmount ffuser5/customers /mnt/cu6tomers \
:>""0 usеrпаmе:::dеп,раSS-Jоrd:;"12З45W, \
>codepage=cp866.iocharsetutf8
220
[}Iasa 6, Сеть и Интернет
Параметры, перечисленные после ключа, нужно разделять заПЯТЫМlJ,
но не пробела ми.
Обратный слэш ЭТО конструкция, позволяющая записать одну длинную
команДУ на нескольких строках. Я использовал ее для наrлядности, а вы
пишите в ОДНУ строку.
Обратите внимание, что при МОIl1'ировании внешних файловых систем
значение кодовой страницы пишется как «ср866», а для локальных фай
ловых систем (раздела FAT32 на вашем жестком диске, тде установлена
Windows) просто «866".
3апуск.ать црО1'раммУSПlЬmоппt имеет право т()дьКО суперпользователь,
'/тобы обычный пользователь M01' ее запустить, следует УстЩJовить для
нее атрибyr SUID, oднaKOT<JКoe решение ЯЩЩСЯ пебезОlЩСН"W, Bыxo
лом из ЭТQro П()JIоженlЩ .м.OJ!\ет послужить :J1Щyсхпроrpаммы$nibmоппt
при за1'руэке (:Itстеr.ш. Добавьте в сценарии щоэаrpузки (советую в
/ e::c/rc .local,cм. п.9.1.2) вызов проrpамr.ш smbmount для монтиро
ваlшяФЩiiJОВI,1)( систем COBMeCТHoro использования, с КOТDрьtМИвы pa
ботаете чаще Bee1'o. ПОСде 31'01'0 обычные П01lьЗ()Qaтели CMOryт работать
с удаленllЫми ресурсами цк с обычной лоlI:шной фаilлОВОЙ системой.
6.4. Подключение к Интернету
Если вы собираетесь BXoДlnЪ в Интернет через локальную сеть, то ни
чеrо дополнительно настраивать не нужно. Надо только в настройках
(" t 11 О указать IPaдpec шлюза, 'Iсрез который вы собираетесь выходить,
а остальное забота аДМИНlIL-rратора локальной сети.
Если же вы планируете выходить в сеть из дома через модем, то следу
ющий парarpаф ДЛЯ вас.
6.4.1. Настройка модема
Модем подключается очень нросто вам достаточно вставить плату
модема D корпус компьютера или полключить внешиий модем, и система
автоматически определит и усrановит ero. В случае, если У вас старый
дистрибутив, например, Red На! Linux версии 6 и ниже, то вам самим
прилется создать ссылку /dev /moden, на устройство /dev/ttySn, 1'де n
ЭТО номер последовательноro порта, Напомню, что устройcrвo / dev /t tySO
соответствует порту СОМ! в DOS. В принципе, создавать ссылку даже не
обязательно, потому что в любой коммуникационной проrрамме можно
указать устройство, с которым она будет работать. УстроЙство I dev /modem
IIспользуется болышшством проrрамм по умолчанию.
221
UNUX: полное руководство
Для Пр08ерки работоспособности модема можно использовать проrрамму
minicom. Это обычная терминальная I1porpaMMa. Пер8ЫЙ раз ее нужно
запускать от имени СУl1ерподьзователя с опuисй --s (setup): в этом режиме
IIpoIpaMMa вьшодlП конфиryрациошюе меню. позволяющее создать (или
отредактировать) настроечный файл fetc/minirc .dfl (рис. 6.10).
Нужно изменить только УСТРОЙСТ80, которое будет использоваться в
качсстве модема.
Рис. 6.10. Проrpаммв настройки тiпicom
Для теСТИР0В(I,ШЯ модема обычно используются стандартные АТ-коман'
ды. Инициализировать модем можно командой ATZ, поднять и положить
трубку АТНl и АТНО соотвеТСТ8еино, а набрать номер АТОРномер,
используя импульсную систему набора номера, и АТDТпомер, используя
тональную систему.
Ссынку можно также создать проrраммой moderntool в RedHat, а 8
Linux Mandrake нужно воспОльЗОваться все тем же конфиrуратором
DrakConf.
Будет справедливо отметить, что ипux ие работает с проrраммными мо-
демами lLЯ Windows (wiп-модемы). А вот MoAeMbI, которые подключаются
к щине tJSB, в ОС LintIX использовать можно. Только lLЧЯ зтоrо нужно
включить в ядро поддержку шины LJSB и USВ-модемов.
В последнее время некоторые производители проrраммных модемов (на-
пример. Cucent) обратили вниманнс и на l..iпuх'пользователей. Компания
Lucen! выпустила драйверы под Lintlx для CBoero модема их вы можете
найти 8 ИнтерIIсте,
222
rлава 6, Сеть и Интернет
Также следует учитывать появившиеся относитеJlЬНО недавно внутренние
аппаратные PCI-модеМbl. С ними Linux работать может, 110 Не со всеми и
«через не хочу». Что можно порекомендовать пользователям, у КОТОрЫХ
устаИОВJIенwiп-модем? Просто купить апnaраmbIЙ СОМ-модем (не USB!).
Этим вы сэкономите себе 11 нерпы, 11 время. Внешний аппаратный модем,
приroдцый для домашнеl'О использоваиия, стаи)' от 20 до 40 долларов
Не так уж If мноro. На сервере же внутренний модем вообще неприroден:
тут нужен внешний и только внешний. Желательно ZyXEL. Цены на нею
начинаются от 100 долларов, но он Toro стоит, уж поверьте.
Если вами движет только спортивный интерес, мол, ни у коro не рабо-
тает, а я нacтpolO, что Ж дерзайте. Я MOry помочь только тем, что дам
ссылочКlf на саЙТbl, rДе можно прочитать про настрОЙКУ мп-модемов:
. http://www .1 inmodems . org I здесь можно найти ссылки на
драйверы ДЛЯ Win-!-(ОiIемов;
. hl;:tp; //li!1ux-forever .narod. ru/.Jrites/zyhe1.htm настрой-
ка модема ZyXEL OMNI 56К PCI;
. httр:l/www.10е.1g.uа/hеlр/пеwl/s01аris/Ппtit1еd/ index.
106 .htщl HOWТO IЮ настроЙке Win-модемов.
Примеч-а..ие
ei ' ' о ТОМ, как настроить АDSI,.-соединвние и вообще в..щ8ленную ЛЩiИЮ. МОЖНО
i прочитать 8 моей J\ниr.е ...Uhuxoop6ep GBOJ.1M PY':nМ101-, Также е эТой lGIиrе описа"'о
подключение и настройка сетевой pTЫ,
6.4.2. Подrотовка к выходу вИнтернет
Рассмотрим, как можно подключить Linux к Интернету. Отмечу, что это
подключение имеет больший смысл, нежели ПОДКЛlOчеlше Windows, так
как Linux иамноrо лучше и, что самое rлавное, быстрее работает с сете-
выми устройствами. Лично у мсня соеДИНСllliе с моим проnnйдером при
ИСПОЛЬЗОВЭIЩИ Linux работает rдe-тo в два раза быстрее и не простаивает,
как при работе в Windows.
у вас, конечно же, есть модем, выбран и оплачен проваЙдер, от Hero
получены лоrин-имя, пароль и все остальные сведения, которые MOryт
потребоваться для доступа к есо службам. Осталось убедиться в том,
что ваша конфиryрация ипих поддерживает протокол РРР, по которо-
му происходит соединеЮIС с Интернетом, и иастроить ero. Проверьте,
УL'Тановлен ЛИ У вас пакет ррр, и ссли нет, то доустановите ero из Bawero
дистрибутиВа (п. 7.4).
В современных дистрибутивах настроить подключение по ПРОТОКОЛУ РРР
можно по-разному:
223
LINUX: полное руководсТ1Ю
. ИСПО!IbЗуя КОlfфиryратор {в Linux Mandrake это проrpамма DrakCt.mfJ.
Если операционная система предоставляет средства для удобной
настройки соединения, так почему бы ИМИ не воспользоваться? За
чем действовать в обход? Не модифшtируем же мы реестр Windows
вручную с помощью regedit для создаlfИЯ HOBOro соединения.
. Используil nporpaMМY kppp. В преДЫДУЩИХ версиях Lillux Mandrake
конфиrуратор DrakCollf был менее удобен, поэтому мноше 1l000ЬЗО
вотели предпочитали использовать nporрамму kppp. Она очень нarю
мНнает стандартныЙ Wiпdоwsдайлер, в котором интеrрllроваllЫ все
функции по установке и управлению соединеНИЯ!II.
. Редактируя конфиryрационные файлы ВРУЧНУЮ (в этой rлаве TOТ
способ Ifе рассматривается. EcJш вы заинтересовались им, рекомендую
прочитаТЬ мою KHllry «Liпux-сервер CBOI1MI1 руками»).
ЛУЧlllе Bcero использовать конфиryратор DrakConr, 80 в<;яком случае,
при настройке nepBoro соединепия. Он автоматически установит все
необходимые пакеты и создаст файл соединения для проrраммы kppp.
Устанавливать же настроенное соединение вы будете с поюшью про
rpaMMbl kppp. Создавать следующие модемные еоедияеНIIЯ уже удобнее
с помошью kppp не нужно вызывать DrakConf и вводить пароль cy
перпользователя.
DrakConr (точнее, ero модуль DrakConnec!) отличиая и удобная про
rpaM'IВ, но при работе с неЙ нужно УЧlпывать некоторые нюанСы. Теперь
обо всем по порядку. Выполняем команду (ir'akconf, 8ыираемM зпuлет
Сеть н Интериет .-..) Н080е соедннеине Модемное соединенне, Можно
сразу 'запустить апплет Сеть и ИllтеРllет, кома идой drakconnect.
Сразу после этоrо проrрзм'lВ предложит выбрать ОдИН из ПОДКJIючс.шых
к вашеЙ системе модемов. Затем все как будто просто. Проrрамма по
очередно будет запрашивать следующую информацию:
. НазваliИе соединеная, номер тедефона, ИМЯ пользователя и аароль.
. Назиаченце IPaдpeca: автоматическое (с помошъю DHCP) ИЛИ8РУЧ
ную. Рекомендуется использовать ащомати'.еское назначенне IP""JIpe
са, поскольку практически все npoвайдеры наСТРЗ>lвают DHCPcepBep
для назначения IРадресов КЛиеНТОВ.
. Назначение IP-здреса DNS'ccpBepa: автоматнческое или ручиое. Вы'
бираем автоматическое и нажимаем Да,lее.
. Назначение IPaдpeca шлюза: автоматическое.
СледующиЙ вопрос конфиryратора касаетсSl запуска соединения при за
rpузке системы. Поскольку это модемное соединение, наверное, СТОIП от-
Казаться от автомаПlческоrо запуска соеДlIнеИ>lЯ при заrpузке СИL'1'емы.
Послсдний вопрос конфш'уратора стоит JШ nОДКЛЮ'lВться к Интер
нету прямо сеЙчас. Я соrласился. Несколько минут DrakConnect тщеrно
224
rлаВ8 6. Сеть и Интернеr
_.:.;_.ft'HK с:
Имяпоrn,зааате,:-'-
порол. :
(
JЛ9каэть OICHO нaiI
',,' .
. ' , ' .
-", ,,,
. .. ш ,o-'.'>''''''''''.''''''
ifl.p.. ..; 1
. . ,,'
1 1б;<;; ;
"', ....
Рис. 6.12. ОсflОВflы"пвраметрысоеДИllеllИR
пытался набрать номер, но так и не набрал ero. А причдна была в том,
чrо он использовал тоновый набор номера, а моя АТС импульсный.
Да, вы правильно меня поняли. от ПрОllерки только 'по созданноrо со-
ел.инения стоит отказаться.
Дальнейшую настройку соединения будем производить в проrpамме kppp,
потому что <<уМений 11 навЫКОВ» КОНфllrуратора DrakConf для этоro явно
недостаточно.
Проrрамма kppp, входящая в COCТIlR KDE (пакет kdепеtwоrk), предназна-
'I"HII для тою, чтобы СОI,меСПIl) с Jl"МШi\JМ pppd (Роillt-lо-Роiпt Protocol
Daemoll) ус,анавливать и 1l0ддеРЖИIlать соединение с провайдеро1.
Запустите ее в окне терминала ИJJИ выберите из меню К Интернет ....
Кррр и сразу же наЖМlIте кнопку Настроить.
,-.с(ioД.iноие с;
Имя ПОI1Ь3I)И&1ttI1А;'-
tH.iabs
П'рО_"Ь:
1:;;::;;-
r Ц,Ц..Ь'nН8ptt.цnа
C;;;-.-.) c;:;;;;,;;,:,; ::] : ;;;
l 'iПД;;;; -Ч;;т;;';1I
";.,
Щ,,__ "c",__, ,.'.,,,,,,,,,,,,.,",,.,,
Ркс. 6.12. п/>Оrраммэ kppp
]<\, 'H/
225
rлава 6. Сеть и Интернет
4. Нужно изменить права доступа к демону /usr /sbin/pppd, П03воля.
ющие обычному пользователю ero запускать. В ПРОТИlJflОМ случае за.
пускать проrpамму kppp вам придется от имени СУl1ерпользователя.
Теперь МОЖНО попытаться набрать номер. Для этоrо нажмите ок и в
окне кррр нажмите кнопку ПОДК,1ЮЧИТЬСЯ.
После установки соединения на панели задач КОЕ Bы увиднте СТ!ln!СТИКУ
подключения, а именно, сколько иремеНlI иы провели в сети. Открыв окно
с нззванием соединения, вы увидите скорость подключения и сможете
прервать сеанс связи нажатием кнопки Разъединить.
a_. '.'tt) l',ii"-';i:::,; ";;,':;,' I i':А..:';;_.С'riw: J:_fiЯ'r;-!.
РI1Ю. 6. T4 панель задаЧ КОЕ с кнопкой раООТВКJЩеrо соединеl4ИЯ
6.4.3. Специальные возможности браузеров
Неужели в этом параrрафе будет рассказываться, как работать с браузе.
рами? Тоща еro можно вообще ПрОIIУСТИТЬ или прочитать по ДI!аrонали.
Нет. уважаемыЙ читатель, я и не сомневался, что вы умеете работать с бра-
УJерами. СеЙчас мы поrоворим об особенностях TOro илИ иноro браузера,
а также о некоторых специальных параметрах популярных браузеров.
Konqueror
Каковы же вОЗМожности Konqueror? Я и не сомневался, что 011 поддер
Ж>lВИет последние стандарты HTML (4.0) и CSS. А вот как у иеrо обстоят
лел с lava и JavaScript? Q'lеиь MHoro саЙтов fJaписаlЮ с использованием
JavaScripl н lаvа.аnплетон.
Я попробовал .заrpузить документ, содержаЩllЙ JаvаСКРIЩТ. В»зуальные
эффекты отображалнсь так Же, как в старом недобром Inlernet Explorer.
Это меня обрадовало. Но я решил копнуть rлубже.
Вас не раздражают вспльmающне окна? Этим особенно знаменита Систе.
ма Лидеров. Например, Korдa вы заходнте на саю OAHoro И,З участников
системы, браузер открывает еще несколько окоп и заrружает в них саиты
ДРУПIХ участников. Кроме своих дене!', мы еще теряем I! часть нервных
клеток меня ннчто так Не раздражает, как вывлнвающиесяя окна, а
также приrлашения установнть Flash. К счастью, с окнами мы сейчас
справимся. Выполнн'rе команду меню Настройка Настроить Konqueror.
ПереЙд,rrе в разлел Java & JavaSeript (рнс. 6.15).
Вы южете вообше отключить JavaScript, но я предпочитаю создать «чер.
ныЙ список». Нажмите !Шопку Добавить, затем введите имя саЙта или
227
UNUX: полное PY<060ДGtВO
i
"]
<t.itj':.
'0'0:'"
", ,-.<-,""','.
..................
;;l;.1'!j;'!':<r;(.),:iiki1if&;'tk::%;t'1; H;tM,
. -. ....-",
".,>O,..." >о "....,,._._,,".
..........
о.. . -,,'..._,,___..
. ......; ...., ....... . : 75E!:
i1
!.
Ii УА..... j
I '
"
J.Iot...........
! <=>
1 ' . """.......,.......
..,..,, ", .
:,.:t ;f ; ;::;7 ;::i": ..
t;.,;.,.;... .. ,,'.
....t.rf
. I l'n;;""; ...
:-.il'!:mЭ""
I
I
,
1, .
,.;.;,.,;.,.
: ,.,..,--'-,'......._.,- :.._'_., ::;.-.::;;...,:;....,..
: ",:,,,. ..;.,_:.:',';:::-,:: ::.::/:::,:,-;.'::;::::-:,: .,:..::i' ',--, ..- - . .,; . :..; . : . .L . :;:::'f . :'2 . - . ,.. . ' ' . .
;..:.... ...... n..a.._,.,._.,;,_:-.:... ";:,}:",',,.. ._:.,.____._......,.,....._.,.. .... '_..
:::1:' 7:::-:;:':" .
j I "::';": '....11'0' Е'= -'-
........n ...
!_,...,..,_.,_.,: =.:, . .. ' ..: ':- :.' ::JZ;.', 'W' _ ,..'" '." '-",'
. 18"""', 11 110......... 1 ... "'." i;';', .lrу й..... 1f"::1
""""'........
.............
. ,..,..
,...,....."'.,..,....'."._".,...;...
w.......
:1
.,. "'.,"-'
:'== =: : :i,--: :,,=,: .L::J .
............--"...................."....,.-....-",.
Рис. 6.15. Hacrp<>ilкa {1f)ЛИТИКИ JavaScript
домена, например, free-pia;.com и правило Запретить. Обратите внимание:
вы можете указать как имя узла, так и имя Bcero домена.
После настройки JavaScript я реШIIЛ посмотреть, как же Konqueror
работает с Java-апплетаМII. По У/dолчанию поддержка Java отключена,
поэтому на вкладке Java ее нужно включить и указатъ путь к nporpaMMe
Java: /usr/bin/java или просто java.
С флешем (Flash) дела обстоят лучше. Браузер Konqueror использует
плапш Flash Player nporpaMMbI Netscape. Поэтому, еслц в вашеЙ сцстеме
установлен браузер Netscape илц Mozilla, ваш Завоеватель будет ото-
бражать «флешки».
Но что больше Bcero мне ПОl-lрав!tЛось в этом браузере, таК это то, что Я
MOry изменит!> строку идентцфикащm атента. Например, я MOry «замаски-
роваться» под Internet Explorer 5.5 оп Windows 2000. Пусть думают, 'ПО
у меня Windows crollТ. Для чеrо ЭТО нужно? Korдa вы посещаете узел, в
протоколах веб-сервера отображается IР-адрес и cтpoКJI идентификации
атента, например, МozШа!5.0 (compatible; Konqueror!3; Linux).
Galeon
Он был «придворным» браузером среды GNOME дО версии 2.6. Начиная
с этой версии ВМесТо Galeon устанавливается ero облеrченная версия
228
rлаsa 6. Сеть и Иlнернет
Epiphany, а IJaKeTa Galeon может даЖе не оказаll>СЯ в вашем дистрибу-
тиве. Достать ero можно IIЗ реflОЗI!ТОрИЯ ALT Linux Sisyphus (ht tp: / /
alt .linux.kiev.ua/srpn\(galeon/get). Основан Galeon надвИ)кке
M07iJ1a (можно ЧитатЬ Netscape), поэтому 011 умеет все, что умеет Netscape
(МоzЩа). Этоощачает, что веб-страшщы в браузере Galeon будут ото-
бражаться ТО'1I!О так же, как в браузере Netscape н наоборот.
Оа(еоп без Проолем справился со всеми приroтовленными мною тестами.
Самое rлавное, что мне не пришлось BOKpyr Hero плясать с бубном"
песням", чтобы запустить ашulеты Java.
Что мне еще l1(jнравилось в этом браузере, так это работающая консоль
Java. В Q'rЛllqие от Konqueror, в которОм я не cMor доБИТЬСjJИОЯJjЛеНIIЯ
этоЙ кощ:(IЛИ',1I Gnleon консоль Java сше " HOp!>iaJи,HO ФyiIКЦиОНllрова-
ла. ДлjJ'nОJЦIЛенИЯ консоли ПЫПОЛlIите команду меню Инструменты .....
Консwп. ;Jav;t.
Диспетчер IIQCТОЯIШЫХ Дal!lIЫХ Galeon позволяет централизоваНI!О УПРall-
лять,СоЬkiе и паролями. Для е['о вызова ВЫПОЛНlпе команду меню Ии-
СТРУАСенты ..... Cookie ...., Просмотр Cookie. Вы можете удалить выбранные
ИМI вСе Cookie 11 одновременно запретить "х прием.
Что такое Cookie? Некоторые сервера, Korдa вы их rюсешаете, заПИС/>1-
вают .6. определенныЙ файл на диске какую-то информацию. Обычно
это время последнеrо посещення саЙта, ваше имя (если вы ero ввели в
анкете), параметры саЙта н ItpyrHe сведения. Напримср, для почтовоrо
сервер#. Mail.ru это дата последнеЙ реrнстраЦИII н применяемая схема
дизайна. Хранить эти несколько байтов, умножснных на orpOMHoe ко-
ЛII'lеС'ЦIО пользователеЙ, на самом ссрвсре невытодно, поэтому сервер
предпЩ:ывает каждому клиенту хранить свои данные у себя. Это 11 есть
Сооюе.
Вы МОЖl.!':I'е указать, каким саЙтам вы разрешаете устанавливать Сооюе,
а каким нет.
Не разрешайте устанавливать Cookic ннтернет-маrазинам, и вот почему.
Однн ктlентзаходил о интернст-маrазин, покупал товары, которые по-
том лостаnлял"сь ему домой. Он уже 2-3 месяца пользовался услуrами
этоro маrаЗlIна и не замечал ничеl'О страшrorо в поведении цен: рыиок
дсло иепрсдсказуемое, цены MorYT постоянно мсняться, па некоторые
товары 11 течеНllе дня. Но однажды ему пришлось работать в интер-
нет-кафе. Знаете., что он обнаружил, Korдa вошел на саЙт маrазина с
JIpyroro компьютера'! Что цены для новых пользователей на 20% ниже.
Маraзшr привлекаJlпокупателеЙ низкими цепами, постепенно увеличивая
l1ену (или делая формальные скилки) для постоянных клиеитов. Старых
клиентов маrазин узнавал имеино rю Cookie, IЮСJlе чеl'О предлаrал им
соответствующий прейскурант.
229
LINUX: полное руководс.тво
Epiphany
Прямотакн браузер ДЛЯ настояшеrо аскета: MlfНl!MYM ФУНКЦИЙ и жидень
кий интерфейс пользователя. У TeK(."TOBoro браузера lynx, наверное, боль-
ше возможностей, чем у Epiphany. ЕДlшствеццая ФУНКЦИЯ, оставшаяся
от Galeon ЗТО IЮЗМОЖIIOСТЬ управления Cookies. Вызвать ее можно из
меню браузера Пранка Изменвть персонаJlьные данные. Хотя, ОflЯТЬ
таки, эту Фуикцию «урезали» если раньше МОЖНО было определить,
какие санты MorYT устанаllJlИвать Cookies, а какие нет. то в Epipll8nY
э-rОI'О сделать нельзя.
, !..I..!,I:O
. H<J<>I!"
1 01t.nPшs.. ..J
G1
"W:flilfl
\
... Пр."""'.... ......,..* 'ci",
'<"
8Й ПР&т(аВм ПSм;1ОД ааlClIЛдJ:"
<Id
v
...
6п.
о I
Qc'1'.t>Кt!ПI1Л" РУ3i'1П', '.f3j4"IIi.na
Н1I31Щ
19 i , hn:/;;:;
"'j'ii'i:c",;;:'i ........_...
п,,,,,,,
fMOJUMC .
,
I
E.,!,rt!!!:'!'!!
"'''nP IIO ",,1
Не<:"(l1
1O!!"m
.;ry"
. Z. ... ] -.t.IIЙТh
!,la.tu IUid . I i ' I
.i ! ifF !1ЗМ-I*/ИП"СВQ\tcпНl
!.lil_tu УIO j .
!Jist,rn FТIO
, mnl.1U 1,11"
I
' 1 .mlUIO
L.SlМoo.coтY1 SJt)_ _ .
пl '
y! o.вCn;1
'-
ОБ'
E:\PI:l<1I1IQ.
!1f.:,:'.'.i.':!.
. !I, U'IUК
, !:!!!. u'ooo.a.. "дс!!!
З ОШ "О___. WllimA
ш....."<.."..о_......
А......
rI.:.Д/J;J>p
!;)I;> = Rf.':Ш<\'?,С!.ii.."
, !iiT....;;rNlf-;;;;;[iilu..;ё;j а а ii
Рис. 6. t б. Менеджер персональных данных
Netscape
Что я вам мо('у сказать относительно Netscape? Вы 11 так осе знаете.
Единственное !lрапильное решение, которое вы можете ПРННЯ1'Ь при
выборе браУlера, это Netscape_ Большинстсю страниц будут корректно
отображаться в этом браузере. У Вас Нl1KO!'ДH не будет проблем ии с
а!НJJlстами Java, ни с Flash ИII'" JavaScript. То, что некоторые страНИI1Ы
будут ВЫl'лядеп, не так, как в Internet Exp\orer, так это уже не rлюк Ha
230
rЛ88а 6. СеТЬ и Интернет
виraтора, а непрофессионализм веб-днзaJlнеров. Некоторые rope-Macтepa
сознаТеЛЬНо создают сайты, которые эффектно ВЫl'Лядят в lE, но куда
хуже отображаются в Netscape. Это и есть непрофессионализм.
Леrкие и быстрые браузеры Konqueror и Eplphany можно использоватъ
для просмотра несложных страниц, например, чтения HTМL-дoKYMeHTa-
uии. а все ОСТaJ1Ыlые открывать с помощью Netscape. Ну и что, что время
el'o запуска на несколько секунд больше?
FlreFox
Браузер FireFox, основанный на движке Mozilla, появился сравните.IIЬно
недавно. Еro можно найти в последннх версиях дистрибутивов (уже в
Fedora Core 3 он есть). Большинство неб-страниц просматриваются в
браузере без особых нареканиЙ, KpI)Me cтpaHIIЦ, содержащих Flash-ани-
маuию.
Для просмотра F!аsh-анимации вам нужно заrрузить Macromedia
FlashPlayer. Сдепать это можно на сайте ht tp' / /www. macromedia. сот.
Распакуйте еro в какой'нибудь KaTaJlOr, перейдите в этот каталоr н вве.
щ!Те команды:
$ chmod а+х flashplayer-installer
$ _/flashplayer-installer
После этоrо про верить корректность установки проиrрывателя можно
с rюмощьюкоманды about:plugins, IIJ!СДСИНОЙ » поде адреса браузера. В
выводе брау'зера вы должиы увидить что-то вроде этоrо:
МlМE '!'ур> SUffi.xes Eпabled
щ:;рlkаtian/хshockw>vеflagh Shockwave Flash swf Уе,;
щ:;рliсаtion/futшesplash F\JturcS'plas}) Player pl Уеа
Если вы УВИДlпе эти СТРОКИ,значит, плапlН корректно устаНООJlен.
6.4.4; Текстовые брвузеры
Текстовые браузеры не показыllютT рисунков, различных шрифтов
только текст. Зато при этом ЗН8читеJlЫlO попышается скорость доступа
KWWW.
Популярны такие представители этоrо семейства, как Lynx и похожий
на нета Links.
Формат команды Jynx 13ков:
$ lynx (опции] URL
231
LINUX: попное руководство
Стрелки управлениlt J')'pcopOM «6.6ерх.» и «BffiI3» переыещают ПО ССbl!l.({ЗМ,
стрелка «вправо» открывает ссьшку, стрелка «влево» возвращает на пред-
ыдущуЮ страницу. Справку МО:жJJО ПОЛУ'IИТЬ, нажав клавишу <Н>.
Некоторые полезные опции переЧlfслены в таблице 6.4.
ОпЦИИ пporpaммы Iynи
Таблица б.4
Параметр Описание
-зпопуmоц!3 ИСПОЛЬЗQвать анонимную реП11С1рацмю
.аuth""ИМА парСIIЬ ИспOl1ЬОваТь. ylcа3аННУЮ информацию дnя аутеtnИфlA1(аlJИ
.Ьоо)( Заrрузит ctpщМцу с з6ранными taIU1lU1МИ
.G3.che n Усmнощтt>. f{O:l\ИЧВСtвo l(эшируемЫJf дoaOB
.case Vчитыаа:ть plfloIcтp буКВ при ПОИСК\!
.dump Проotlраэо&аТiio':t'l"JW;Ницу в tеКс1'ОQЫЙ ".д 'И' о'tt1p.sвиft. резуJlЬfuf k4
сrандарiНыЙ 8ЫQOД
'getdata ИCnОЛЬ3Q,вание метода GEТ Дn отпраrmения данных
-holist Не BblВOДb t;nИСОК ccblпOIl: При уtta:utнии !'fap:a/o!e'i"pa lJmр
.postda!a OmР.llВ1Cа.даннщ с ПQМОЩЬЮ метода POST
-,ealm 3апрещает У1тЭЬ!tшТЬ URl пр"" :шпущ::
.rеlоэd СtФI)[; К3U)а.ПрОКСИ-Сtф5I:ра
-source Отображает <::трЗНИЦН Web в виде исходноro текста HTML
6.4.5. Полезный ТРЮК: Что делать, если брауэер
«подаисает» на какойто странице
НнО!'да попадаются веб-стращщы, которым требуется целая вечность,
чтобы заrрузиться. Если с одной и Той Же страницеЙ это повторяется
изО дня в день, то причина, скорее Bcero, в следующем; код зarружаемой
страницы содержит. ссылки на какой-то объект (картинку ИЛИ, еще хуже,
рекламный баннер), расположенный на JlpyroM сервере, причем имя 3'1'01'0
сервера невероятно трудно разрешить в lP-адрес, Вы думаете, чТО бра-
узер «висит», а на самом деле он ждет отпета ОТ модуля расиознавания
имен (резОllllера), который в свою очередь ждет ОТВета от сервера DNS.
Службе DNS посвящена 13 rлава этой к:ннrи, и для лучшеrо понимания
ЭТОI'О совета просмотрите хотя бы беrло эту rлаву.
Путей решения проблемы дВа (не считая трнвиальноrо прекратить
посещать «ТОРМОЗНУЮ» стращшу). Во-первых, можио установить кэши-
рующий сервер DNS. Вы сэкономите не только время, но и деньrи, ведь
все запросы и ответы на ию< будут храниться в кэще вашеrо со6стпенноrо
сервера и, значит, завтра не понадобится обращаться к внешнему серверу
DNS за разрешением Toro же caMoro имеии.
232
rnaвa в. Сеть и Интернет
ВoBTOpЫX, можно ЯВНО отказаться от поnъrrQК открытъ:ще"l&ещ 'iТPаницы
по :ПОЙ<ЩР9QАеЩJ:qц" ссылке. В файле (etc/nsswitch,conf (п. 13.2)
опрещщеНП9jЩЦоJtпросмотра ИСТОЧI!ИКОВ модудем распознавания имен.
УбеДJпесь, ЧТ() первым опрашивается файл:
!10sts, files дПЕ
Этот фаЙl1 /etc/hosts. Впишите в Hero строку, «разрешающую» имя
проблемн()rQ сервера в ваш собственный (localhost) IPaдpec;
127.0.0.1 www.server.nedostupen.com
Коца вы всдедующий раз заrлянете на эту страницу, браузер быстро
ПОЛУЧltт.ощi!.(5ку, успокоится 1I продолжит rpузить страНIIЦУ.
6.46. Набор nporpaMM для работы в Интернете
&onТ8Лка IcO
Разве может популярная операционная система не ВКЛЮ'ШТЬ В свой состав
популярную l1pOrpaMMY для общения? Нельзя сказать однозначно, ЧТО
Linux является самоЙ популярной операционной системой, первенство
все-таки Прlшад.леЖIIТ Windows, но то. 'по ICQ это самая популярная
nporpaMMa для общения, сомнению не подлежит. Посмотрите на свой
UIN: нот столько пользователей было зареrистрировано до вас.
Количество пользователеЙ ICQ растет не по дням 1I даже не 110 часам, а
по минутам. Наверное, компания Mitabilis, Korдa разрабатывала первую
версию ICQ, и не рассчитывала, что nporpaMMa станет настолько попу-
лярноЙ.
Клиент ICQ дЛЯ ипих так и называется ипш ICQ (http, //1 icq.
org). Запусnпь ПРOl'рамму можно с поюшью команды liсч. Проrpамма
может даже работать в Терминале (консоли), для ЭтоrО введите команду
1 icq -р console.
MeHeДJl<ep аакачки файпов Downloader for Х
ПIтатной утилитой для скаЧIfIШНИЯ фаЙлов н Linux служит wget, ПОДДер
ЖИJ<ающая протоколы FTP, НТТР 1I HnPS. Она работает в консольном
режиме и не требует взаимодействия с пользователем, то есть можно за
ПУСТlПЬ процесс ска'швания в фоновом режиме И завершить сной сеанс
работы с Linux. Разработанная специально для медленных иненадежных
линиЙ связн. она умеет возобновлять процесс закачки с Toro места, на
котором ои был IIрерваll.
2ЭЭ
LINUX: полное рУКОВОДСТВО
РИс. 6.17. Сеанс [СО ДЛR ипих
Восполиуемся ею, ',тобы скачать послеДlНОЮ версию nporpaMMbI
XDownloader. разработанной Максимом Кошелевым (www.krаst1.Пl!
soft: /cJ'1Uche1o):
$ wget rlttp:/I1WW krаS\lrtl/sоftiсl-J.\.lс:t)еlо!'filеsi
(j4х2.5.Qfiпаl-1.i38б.q,m
Как видно нз названня X.Downloader, этот менеджер зака'lек нредна-
зна'lен МВ работы в rрафи'rеской среде Х Window.
Возможности nporpaMMbI таковы:
. Заrрузка фаЙлов ПО протоколам РТР н НТТР.
. Ор"анизашiН очередей и подочередеЙ зака',ки.
. Мноrопото'lНЫЙ дизаЙн, блаroдаря которому файлы заrружаЮТСJl На-
MHoro быстрее, потому Что каждыЙ фаЙл .закачивается одновременно
неСКОIlЬКИМИ потоками. КОilичество потоков можно настроить. По
умолчанию оно рюшо ПЯТН.
.. Мl10жественные uараллельные заКа'-IКИ.
. Рекурсивное копирование IЮ РТР и НТТР.
. Поддержка шаблонов при рекурсивном копировании но РТР.
. Поддержка прокси (РТР и НТТР).
. ПРИlfудителыюе Оf'рalШ'lСНllе скорости заfТ'УЗКИ.
. Орrанизания расписания 1Ю-РУЗКИ.
234
rлаеа 6. Сеть и Интернет
. Приocraновка закачки файлОВ и докач:ка в случае разрыва соединеlПUI.
. Поддержка метода dragand-drop для добавления закачек.
. Прекрасная настраиваемrn.-ть проrpаммы.
. дополffirreдьныe возможности: шкуры (skins) и т.п.
Проrрамма X-Downloader входит В состав некоторых дистрибутивов.
Точно знаю, что оиа входит в состав дистрибутщюв rруппы ALT.
Я с проrpаммой знаком дocтaTo'lНo давно. С тех Bpe{eH nporpaMMB замет-
но выросла, ПОЯВJlЛ1{сь новые функции 11 усовершеНСТ80нались старые.
Запустите Праrpамму д4х в окне терминала IIЛИ из меню Команды
Запустить приложение.
В левой чаСТI{ о!QШ X-Downloader (рис. 6.18) отображаются аКТИ8ные
очереди закачки. Каждая очередь солеРЖ1!Т список ФаЙЛОВ,которые
нужно закачать. Работа с очередями (создание, удаление) осуществля-
ется с помощью меню Очередь, Если шедкнуть правой кнопкой мыши
на назвающ очереди и выбрать команду Свойства, мы сможем измеНИТI,
параметрыочереди.
:..'i"",
....-.. '."":"'-:";':':,.,:':':::'.Й;.i;;'1ШШ;;lтР.,_о ;+-:'
.',',:':-:;:;::';',ЩМ:1!2'::!;,:'. ":...:': :'::::::.':':1:I,!:,i;..}
n::'_'_,:', H&i:;i:-':'-:n"
'iiji_.6b:;:'j'ixj'e <э
i1 L._-
("1Y$man.
J i':-"
РИс. 6.18. Очередь завчек
Сеi1Час в списке файлов очереди Main находятся три задания. Дпя КаЖ
)101'0 задания отображаются:
+ Ею состояние (иконка с изооражеиием бутылки): заrpужается, '33-
rpужсн, приостановлен, Itеудачное завершение;
. Имя, тип, размер файла;
. Сколько зarружеltо, СКОДЫШ осталось, О'J'НОШЩШС' раЗМера заrpужен-
ной части к размеру файла в процентах;
235
UNUX: пОпное ру>:оеодоТ!ю
. Скорость соединеllИЯ, время заrрузки;
. Количество попыток заrрузки.
. Адрес (полныЙ URL файла).
На панели соcroЯНlП1 отображается информация о заrружаемом фаЙле.
чтоБы добавить новую заIGlЧКУ, нажмите КНОПКУ ДобаllИТЬ закачку на
панели инструментов. Если вы предварительно поме\..'ТЮш URL заrp)IЖа-
емото фаЙла в буфер обмена, то можете нажать кнопкуДо6авить закачку
из буфера, А можно воспользоваться, наверное, самым удобным спосо-
бом просто перетащить ссьщку из окна Konqueror воюю проrР.IЫМЫ
X-Downloader. Появится OICHO ДобаJИТЬ закачку, на вкладках KQТOpOro
можно дополнительно настроить параметры заrружи. Если ваш сервер
требует авторизации, укажитеИWlI'IOllЬЗователя и пароль. Обычно это
нужно для неанонимных FfP-серверов,
На ВКЛ;ЩlCе BpeМII вы можете ОЦpei1.lЩить время и дату начала закач'ш,
Это очень удобно, если вам нужно з.акачать каlшй-нибудь большой файл,
HanplIMep, то же ядро Linux: вы можете поставить закачку на ночь, Только
не забудьте об этом 11 не выключите 1C0мпьютер!
Дважды щелкнув на любой заЮ1.'Iке, вы увидите ПрОТОJCол заrрузки файла.
В I1РОТОlCоле отображаются все ответы сервера и сообщения самой про.
rpaMMbI X-Downloader. Протокол помоrает понять, почему же вы никаlC
lIе можете закачать тот или И!{ОЙ файл.
Обратите ВНИ1IIание на roрllзоI!тitльkый «сне:юфор.. на панели инстру-
ментов. Это оrpаннч.итсль скорое'!'lI: красныЙ снет оз!{а'1ает, '!то будет
использоваться самая иизкаяскор6сть,:желтыЙ сре.iIIIЯЯ, а зеленыЙ
макснмальная, то есть без оrрaшlЧеftия.
Самые rланные параметры НаХОДЯТСЯ в rpуппе Закачка (Настройка
Свойства llротраммы Закачка ОrраиичеНИJl). Здесь вы можете
определить:
. ТаЙмаут чтеНИЯ из colCeтa (по умолчанию 300 сек);
. Таймаут до ПОВ'l'Oрноrо саединеffi'ISI (5 сек.);
. Количество попыток (О не оrpаНlJчено);
. Откат после обрыва (О байт, то есть закачка будет продолжена с '1'01'0
же самоro места). Эта возможность позволяет заново передать указан-
ное число байт, которые, возможно, были нскажены перед обрывом
соединеНIIЯ;
. Оrраниченис максимальной скорости (О без оrpаничеиия);
. МаlCСИМУМ строк в лоrа" (100),
Еше одна полезная функция !IjК>rpaММb! Планировщик (Настройки
Планировщик). С ero помощью можно создавать расписания закачеlC и
выполнять друr'ие действия, перечисленные в табшще 6.5.
236
rлава б, Сеть и Интернет
Допустимые двйсriШя Планпровщнка пporpaMMbl X.Downloвder
Таблица 6.5
Д-kтвие Описани.
е nQМ()ЩЪfO этОf\) действия 8J.I можете как СНЭIiIТЬ. так и no
ElЫС:ИТЬ Qk0рос1\.,ПООkОЛ:Ь1'tY вам попрожнсму ДОСтуп""" ТрИ
р.е:«ица: МИНИМУМ. Среднее и Н&оrpaничt;нное. Эа\4ем это нуж.
Оrраничить «ОРОСТЬ но? напримор, 8bI Ц8J\ЫЙ Дl3HI;o эаrружавте файЛЫl1арамепЬkО
с дpyr ре.БОТQЙ 8 сети, iorдa жi Bpe" обедеttНоro n@рщзыа
можно ПОflЫСиn. CttOPOC1a, а в сютatlЬНQ& "ра_ сн...аИTh, ItТCtбы
закачка зэrpyжaпа 1C8tiaЛ и тем саNlЫМ j.I& h/ll!lwaпa 8Elwей
оснOIНОй работе
Поднять rn88H09 о.кно Отображает ,пааное OKIiO nporpeNlMbl а УlI;азанное вре:мя
ВЫЙ1)/! 3аооРWIШТ ра.5оту nporpaMMbl
Удалить заверШВННые Удалl1еr .заеерwet1ные э;аке.чl(И М! очереДи
УДМИТЬ неудаЧНЫе У.nanАет нвУдa'lиые 38К8Чfi(И И:I- списка
ElыLtoQTQQ yt(аэа1'h 3.аКЗЧК','. которую НУЖНО rтl3oре'З.
Пр8запустить эа.:ачtу Тут. кafl8oe-i нужно 6ыл. вопw&6нИКОМ. \(fобы ynщan. точное
время переэanycка закаЧI(И
ОСТ.9НО8ИТЬ З3kач Останавпивает '38Ka'4f()1
УдanИ1Ь заlta4КУ Удаляет Э6ICQ4КУ. ЗsМЧI(IJ будет Yдal1lJHf;I в любом c"ae. ,о,аже
если она еще не зoreершEttia
Уд.аI1МТЪ. eCflM з.е!tершена У.QaЛRеТ эаК&'i-q' rom.KO 8 ТОМ СЛ'fНlе. если Ol-Цi завершена
До6аеиtь Э!lКЗ'ЧКУ Доб8.8JIЯ8Т З8l(З"(КУ 1;' список
Со)(ранить СПИСО( Сохраняет список
'""
ВыпOftнькоменnу Позволяет 8ЫПОflНитъ sнешнюю комаНду, ro есть 38J1устить
профаUМУ 13 ух3З:Qнное зреМQ
FТРкnиенты
В любоЙ сетевоЙ операционноЙ системе (а ОС Linux имеНfIO такая)
CCTh простеЙший FТP.КJJиент проrpамма пр. Она лредлarает интерфеЙс
командной строки. В ответ на пришашение ftp> введите команду help,
чтобы увидеть список встроенных команд ftp.
Эти команды o'leHb похожи на те, с которыми вы уже встречались, юучая
IIротрамму smbclient. Важнейшие из них для вас команды get и put.
Удобный FТРКJlиент с rрафическим интерфейсом nporpaMMa cFТP.
Я рекомендую устанавливать самую иовую версию nporpaMMbl, не Iшже
2.0. Запустите nporpaMMY командой gftp (см. рис. 6.15).
На рисунке видно, что я подключился к серверу ftp.yars.free.net ПОД
именем anonymous. Если ваш сервер не разрешает анонимныЙ доступ,
придется ввести имя и пароль. Порт в большинстве CJlY'laeB 21. После
ввода всех неоБХQДИМЫХ параметров соединения на:ж:мите кнопку Соеди
нить (с изображениемкомnьютеров). В ПрЗВQМ уrлу находится кнопка
ОТКЛЮЧИТЬCJI.
237
UNUX: полное руководство
.jijШ';,,' :'\i;'/\lli f;JR1:i::,i'йiШ;:!iJf;:;:iШ;Щifti';fl1:\:JYj i?f!Ч ;у,в,,,х,
, ,в..,..__ЗI\II._ :O _ ЖfP ttc'.-,.н.fp,': ',,_ . "",_, "О
fjoWl","';" ;;:"' \' 11 ..... r"i.., l....i!...:;,;
iB .' " ==::.: ': '::::':=:':'===B !
:\. IE r;J:,:r;:.: j n: .
! 'о l;J.,IМW)'Я м ш м.... JI6:'
,а 11: w IRIIX $ИА"9:
j8 ,J.srМU;<4 rn\1'fIII11Y LWO. SдАoag
ie _,$fАЩ,О 1:11'1_,""oU" '""" WtodA'::.
i.!4':S.TASI.E1 1;)!;IQ01w UМI. l'N;'
1. ,t_s.1AЩ.f-" !,!m7QI faOJ ....." """"'S.i,
'''' . . . ' . . . . . ' ... . """" ...... "' ... '.. ............. ... .,........
щ..-i:;'iS",;...-;: . ;:::. ". J .- j .'
!CI"tflM.J.l.I
с3 А'""' i -1.l.1 !
,..Э.J:,
i'bdU"m
i'1,).1j
, !.
J.й!lo-):.JI..,.:,
'-""
1 Hu...... } i..,iI441!1i,
, 1
j t : ; :..,.
Рис. б. '9. Окно nporpaMMbl gFТP
С ПОМОЩЬЮ меl<Ю FTP мож:I!о установит!, один из режимо.В работы FTP'
сервера: ASCIl (TeKC'roBble данные) или Вiпаrу (двоичные). Режим Вiпату
устанаплнвается по умолчанию, 11 лучше эту установку не измеl<ЯТЬ;
текстовЫЙ файл 8 зтом режиме поврежден не будет, а вот наоборот...
Дело п ТОМ, что текеТОвьrЙ реЖI-fМ заменяет СИМВОЛЫ конца L-'ТРОКИ li3 Te
'!то используются на прюшмающе!\ стороне, так что разбиение текста
на строки сохраняется; попятно, что ДВОИЧНОМУ фаЙлу от такой замеНЫ
не поздоровится.
чтоБы принять или передать файл, ПOJIьзуйтесь командами меl<Ю Переда-
Ча I'ли инструментальными кнопкaмn, расположеНI<ЫМИ между областями
локальноrо и улаленноro компьютероп.
Мне очень IЮl<раВlfЛСЯ ннструмент Сравнить окна, который срапшшает
окна Локальное и Удаленное. ЭТа функния незаменима, если ВЫ обнов'
ляете спой пебсайт по FТP.
Встроенными FТР'клнснтами снабжены также браузеры Nеtsсаре/МпzШа,
Копquеrоr и фаЙловыЙ менеджер Midnight Commander,
Однако все эти nporpaMMbI обладают одним неБолыllмM недостатком; они
не Moryт дока<шть фаЙл в случае разрыва соединения (операция REGEn.
От этоro не удобства избавлена nporpaMM3 ncllp.
Она "е обладает удобl<ЫМ rрафическим интерфейсом, а больще похожа
на стандартный FТР'клиент ftp 11 Ilонимает ero комаl<ЛЫ. Это значит, что
2ЗВ
rпaBa 6. СеТЬ и Интернеr
для соеДЩIeШIЯ С узлом вам нужно ввеСПI команду ореп, а для закачки
файла комзндуget и Т.д.
ПреДЦОДQм. что KorJIa мы Вf,lкачивалн все трт-пакеты, соединение
было разорвано (ох уж эти динии!). Ддя докачки файлов устано-
вите соединение заново, откройте нужный вам сервер (например,
open ftp. redhat . сот) и введите команду:
ncftp> get c *.rpm
Опция активизирует функuию докачки.
При работе с этой проrрзммойменя оченьобрздопала возможность
создания закладок нз лету». HanpltMep, если Бы работали с сервером
ftp. redhat. сот и последним каталоroм бl>lЛ каталоr Ipub, то при вводе
команды ореn redhat nporpaMMa установит связь с сервером ftp. re-
d.ha t . саш 11 перейдет в каталоr /pub. Просмотреть и отредактировать
закладки позволяет команда bookmarks.
239
rлава 7
ОСНОВЫ
АДМИНИСТРИРО-
ВАНИЯ СИСТЕМЫ
ЧТО ПОНИМАЕТСЯ ПОД
АДМИНИСТРИРОВАНИЕМ СИСТЕМЫ
конфиryРАТОРЫ LINUX
ПОЛЬЗОВАТЕЛИ И КВОТЫ
ПОДКЛЮЧЕНИЕ И КОНфиryРИРО
ВАНИЕ ДnПАРАТНЫХ УСТРОЙСТВ
УСТАНОВКА проrРАммноrо
ОБЕСПЕЧЕНИЯ
КЛОНИРОВАНИЕ
И ВОССТАНОВЛЕНИЕ СИСТЕМЫ
LINUX ПОЛНОЕ РУИОВОДСТВО
7.1 . Что понимается под
администрированием систеМbI
IЗ ОС Linux СУЩl'ствует корневая учетная запись root для npнвилеrнро
вашюrо tlОJIlNователя, которому разрешено дел;tТь все: Чlrrать, изменять
и удалять дю(jые файлы, создавать н разруш<!ть фаЙловые системы, за
иускать и прекращать выполнение любых Профамм. Эти ПРЩllшеrии
нужны ДДIl аДМlfНистрироващ.я сиСтеМы,
В обязанности CllcтeMHoro адМlIнистратора обычно входит:
. упрщтеЩlе пользоватеЛЯМII: БСдеНllе учетных запнсей Щ)JП,Зователей
I-! rpУПП,КВОТl1рОnШШе дискоnоrо IlРОСТРntlС1lШ;
. управление процессаМlI: nерераспределеЩlе ресурсов с целью повы
шения ПРОИЗВОДlrrельности системы:
. установка и модернизаuня nporpaMMHoro обеспечения;
. подключение и конфиryрирование аппаратяых устрой,-'Тв;
. настройка системы: управление обшесчстемliblМИ cepl!\lC<I.МU, иастрой
ка сетевых служб с ТОЧКИ зрения безопаСНOCnf и ПРОИЗВОДИТСЛЬНOCnI,
конфиryрирование ядра;
. резерВlIое копирование и восстановление даниых.
Я ВК}IJOЧИЛ rлавы, Iюсвящеlfные OCIfOnaM аДМШПlстрнровi!ния, В поль
зоватеЛЬСКI\Й раздел, потому что пользователю домашнеrо компьютера
придется болыпннство адМИНlfстраторских облзанностей взвалить на себя.
Помощи ему ждать неоткуда.
В следующем разделе я подробно остановлюсь lIJI настройке различных
сетевых служб.
Несколько советов начинающему администратору:
. Входить n систему ПОД именем roO! тодько тотда, Korдa это абсолютно
необходимо, и заверщать сеанс привилеrированной работы сразу же
241
UNUX: полное руководство
после выполнения административной задачи. Чем реже вы работаете
под именем rool, тем меньше шансов случайно разрушить систему,
спутав права ПОЛl>зователя rool справами друrих пользователей.
. Настроить строку прнrлашеlUfЯ командной оболочки так, чтобы
ДJlя пользователя roоl она QТличалась от приrлашения ДJlя обычных
пользователей. Как правило, строка приrлашеиия root оканчивается
СИМВОЛО!d #, а для друrих пользователей символом $. Если все'таки
есть вероятность забыть, rюд каким имснсм вы сеЙ'lас работаете,
ПOJlьзуйтесь комаидой whoami.
. Для часто выполняемых работ по обслуживанию системы сохранять
нужные IЮCJJедовательности КQMaHД в файлах сценариев (скриnтах),
чтобы азтомаТlIЗироваТI> UЫПОЯflClше этих работ.
7.2. Конфиryраторы Linux
Настройка Bcero проrpаммноrо обесцечения в UNIX 'подобных системах
сводится к редактированию TeKcroBых файлов, которые проrрамма про'
ЧИТЫВает при запуске и которыми руководствуется при выборе режима
работы. Каждая прикладная npdrpllMMa Или деМdИ, включая демон init,
поддерживает отдеЛl>НЫЙ набор этш;называемЫJ; I10нфиryрациониыми,
файлов (в отличие, скажем, от MS DOS, тде в опинфайл MorYT быть объ
ещшены секции, управляюшш,' разли'шыми подсистемами). Обшесистем'
ные службы держат их, как правило, в каталоrе ! etc, а пользоватеЛЬСlше
приложеНIIЯ в домэ.UIIIИХ каталоrах пользователей: такое размешеиие
позволяет каждому пользователю HaCTpOIHI> приложение в соотвеТСТВИlI
со своими нуждами.
Конфиryрационныефайлы самодокументироваины: любая строка, на'!и'
нающаяся с снмвола #, счдтаетс.якомментарием и может содержать лю.
бые справочные сведения, Кроме TOro, если вы вносите мелкую правIlУ
скажем, изменяете значение одното параметра, вам необязательно со-
хранять резервную копию cтaporo коифиrypационноrо файла: достаточно
закомментироваn. строку с этим параметром.
Несмотря 113 удобство настроЙки путем редактироваиия тек(;товых фай-
лов, ВСе еще иаходятсяадминистраroры' привыкшие к настройке в СПUlе
Windows: через мнотоуровневые меню Ii диаJ101"08ые окна. Для таких
администраторов предусмотренытрафические КОНфИl'ураторы, в разных
дистрибутивах наЗЫВaIOщиеся по-разному. Запускать их нужно с f'рафи'
ческой консоли, потому что МНOl'ие из них нуждаются в rрафическом
режиме. 13 таБЛliцах 7.1, 7.2 11 7.3 перечислеиы основные конфиrураторы,
IIlcлючеюIыe 8 дистрибутивы Mandrake, RedHat и Fedora Core.
242
rлав.а 7. ОСНОВЫ админисtрирования системы
Основные конфиrypaторы Uтж Maпdrake
Т.б.."".7с 1
nмм. На;SН8'ЧDН".
drakcanf М08НОЙКОНфИТОр
drakboot КоИФИf)'ЩП01) зarРVЗ4ИQ. U,LO/GRUB
drakgw CoBMeC"tНQe J'!СПQльзсе,аllив lIIнврнеТСQеАинеrlИ'i(
dlзkпеt НатрОЙIC8 t::Qти
drak110pPY Создание, э.аrр"VЭDЧноrо ДИСII.Ci
draksec OnрsдеЛQНИ;) ypOBH безоnасности
drakxservlce$ ДвrОЗ8nУСf( с&рвисов
di$l(drake ПрorрамМ8.ДnЯ: работы с разделами диска
dlkconcole Доr;ryn 1( kOIiCOltl.4
draktlme настрой_а даты и IJреМI:JIiИ
dlskdrak.efileshare РазреW8нке COBMeCТl10ro мспольэо8ЗИИЯ \(аrnлоrов
adduserdmke УПРI!lSЛI;НИEl учетными заПИС'RМИ
harddmke2 Средство ДЛЯ l:iаСТРQЙ';И оборудоеанм (В Unux Mandrake до Bep
СИИ 9 назыв<lQТСIo'; harddrake)
keyboarddmk9 Настройка клеатуры
locruedmke Иэмененl.1е Мр8метров ЛDlщщtЭIЩИИ
maU$8dmke НОЙ!i;:а wb/Uт
тel'1udrake I-!МТРОЙk<t систе:ммоrо Меню GNOМE и КОЕ
printerdrak& Настройj(З принтвра
nelconf НаСтрОЙ.!1 сети
L[Qdmkll'l Поиск t\ фi21паХ'nP<JТ()ICQ11ОВ
Мo.d8lт:оnf КОНфИfYp\ofPое1ilffl'lе МОАемв
ijftytiM11 параметры бpщiдмаузрз
XF drake НSЩРОЙКD сераера Х
Xdndcres Усте.нО81<З разрешеНИf:I мо"итора
Xr;onfiguwtQt НilСТРОЙ-..а rpафWi(ЖОИ системы Х WindQW
Основные конфиrypаторы Ипих Red Har
Таблица 7.2
Проrр.мма НаачеИМе
$ешр ОсновнОЙ )(онфиryРilТQР
cj)ntrolpanel BCnOMOra,eAbl1bI конфиryраrор
Modemtool КонфУ!rypИРОRани модема
Prin'l:ertool Настройка принтера:
N01Conf НаС1'РОЙII:а 001101
XcOnflt]Uta'Wr Настройка )( W\ndow
AISthconfJg Пзраметры аутентифИкации
redtlat-сопf!g.sесurФJlеvе! YcтsHoBka VРОQЯ ($oпacHOCT (.)
redhat-confjg-tanguage Выбор ЭЫl<а (..)
t'l)dhO)t.coof!g-datе VСТ31-1ЩIКЭ даты С I
redhnt-<:onfig.users УпрsвленloSС ПОЛЬЭОS8.Телями (О)
redhat-conflg.pacltagвs Работа с nаК8тами (-)
243
UNUX: полное PYКOOOAТВO
пРОДйЛжеfJнет тбл. 7.2
Пporpaмма На3Н8ЧемМе
rеdhаt-соnf1g.>afeе8б НSClpQйlС8 системы XWlndow (-}
redhat-config-pr!nter KorypaTop пркнтера (t)
Sпdсопfig Нва1РоАl«\ 3&y1tOBCI I1naJЪi
(..) Данные конфиryраторы доступны В версии Red На! 8,0 и Вt>lше
Основные /t:Oнфиrypaторы Unuж Fedara Сою
ТаБЛица 7.3
лрorРIIММ8 Назк-ченке
satup Основной конфиryparор
s'f$1emconfig .packages )lстаНов'Ка и удалвнi'I& пакетоа
svmem.co"fiaa\Jthentir;ation flaoaмeTpbl аVТElнmt!rngu.и"
system-config-sevurityfevel Уетаноакр урЩJНЯ безопасности
syst0m.conrig4$ecutityllWQltUi Нw.;:rpQlCa брандмаущ>э без rj:)3фичеСКQfО pQжиме
systemconfig.users . Упpatu1е11И& П-oJlЬЗQIJiIТеММм
gystemсOf"lfig-flеtwor1< Hec:t-р.оЙII:э. cвT
system .e;onlrol-netwofk Н$строiilкз сеТеВых....нтерфЕ!"сО!l.
system-<:onfjg.networil.druid Мастер yc-таНОВkИ CerQeQfO: соединения
эуstеm-сопfig-sеrviСе5 HaI:-тРойr::а служб
system-config-disp/.ay НilCfPойt(З M(}WK't0p;i и- oкapты
systm-соnf]Q.kвуЬозrd Выбор раСКЛадКИ IUtiIВиатуры
system-oonfig-mouse Настройка мыши
!iystem.config-рri"IАr HacтpnKII npWIofTFlf)!'I
sy:rtem r con fi l1-soundcard Настройка Э8уl(l)воА платы
Основной конфиrуратор (sеtпр или drakconf) обычно используют для
нервоначальной настройки системы сразу после устапоВlШ.
7.3. Пользователи и квоты
7.3.1 . Учетные записи попьзоватепей
Система учета пользователей опирается на следующие конфиrурациои-
ные файлы:
. /еёс ipaS5wd учетная информация о пользователе;
. /et:c/shadow скрытая информация о пользователях: пароди в за-
шифрованном виде;
. /еёс igrQup IшформаЩI![ о rpYnHax;
. /etc/gshadow скрытая информация о срунпах;
244
rлвва 7. ОСНОВЫ 8ДМ1r1нстрирования системы
. /etc/aefault./useradd свойства, назначаемые по УМОЛЧamno
НОВЫМ учетНЫМ записям;
. /etc( login.defs настройки безопаСНОСТII пароля (время истече.
НIIЯ, минимальная длина);
. / etc ($1<:е1 каталоr, содержащиЙ личные файлы настроек. по умол.
чанию (Korna для HOBOro пользоватсля создастся домаШЙIlЙ каталоr,
в HCro помещаются ЭПI файлы).
Фа /etc/passwd информация о пользоватеп,.х
Учетная информация О пользователях системы хранится в файле /etc/
passwd в слсдующем видс:
username,password,UID:GrD,ful1name:homedir,loginshe11
[де:
. tJsername это реrистраЦИЩl.Ное нмя ПОJlЬзователя, часто называе"
мое лоrllНОМ. Обычно администраторы ПРИСВallВaIOТ пользователям
лоrllliы, образованные от их реальных IIмен. Имя ,оо! закреплено
за СУПСРПОЛЬ30ввтелсм. Кроме реальных пользователей, в системе
существуют еще фИКТlШные (Ып, daemon 11 т.п.), от IIменll которых
запускаются обmеспстемныс службы.
. Password пароль. Обычно используются теневые паРОЛ\t, и вместо
паролв в файле (еtс(раsswdстоит знак', а сам пароль в защифро
ванном виде хранится 8 файле /etc/shadow.
. UI D уникальный числовой IIдентификатор пользователя НЗ диа"
пазона от О до 65534. Суперпользоnателю присвосн UID, равный О.
. GID ЧИC!JОIЮЙ lIдентификатор первично/t rpyIUJЫ пользователя.
Помимо ПСРШIЧIIОЙ rpYnnbl, ПОJlЬзователь может входить или не 8ХО-
ЛllТЬ в состав разных rpYn!l, но в псрвичную l'Pynny (native кroир) он
BXOДIIТ I!cel'Дa. Пользователи, входящне в одну rруппу, MOryт работать
с общими файлами. Первичная rpynna суперпользователя называется
root. Ей присвоен OID, раВНblЙ О.
. Fullnarne обычно представляет собой реальное имя ПOJlЬзовате.
ля, например Ivan Ivanov. Может содержать и друrие данные: номер
телефона и т.п. ЭПI свсдения системой не используются, НО доступны
по команде f inger <username>.
. Homedi r домашний каталоr пользователя. Стандарmое место ДJIЯ
Неroэro каталоr (hоrnе/<usеrnаше> (например, /hаmе/dеп),и без
особых прнчин изменять такую орrанизацию домашних каталоron нс
рекомендуется.
. Loginshe11 командный Illlreрпретзтор, запускаемый по умолча.
нию при входе пользователя в систему.
Пример фраrмента фаfU1а (etc/passwd:
root:x,Q,Q:roat:/root:(bin/bash
245
UNUX: полное Pyo.OДCТl!o
bin:x:l:1:bin:/bin:/sbiп/nпlogin
daemon:x:2:2:daemпn:/sbin:/sbin/nologin
den: х: 500: 500: деп: /home/den: Ibin/bash
evg:x:501:501::/home/evg:/bin/bash
Применение теневых паролей оправдывает себя с точки зрения безоцас
!юсти. Обычно к файлу /etc/passwd разрешен доступ в режиме -только
'!Теfше» всем пользователям. К файлу letc/shar1ow обычный пользователь
не имеет даже TaKoro доступа.
Снстемы, использующие ТСВ (Тrllsld COтp"liпg Вщ), хранят паРО)lli не
в файле /etc/shadow, а в файлах /еtс/tсЫ<имяпопьзоватеш!>/
shadow. Считается, что технолоrия ТСВ более практична с точки зрения
безопасности, поскольку доступ к паролям отдельноrо пользователя не по'
зволнт злоумышленнику скомпрометировать сразу всю снстему. Для ВКJlю-
'Iения поддержки тев нужно установить пакет tcb. Мноrие современные
дистрибутнвы (напрlщер, дистрибутивы ALT Linux) поддерживают ТСВ
по умолчанию.
В качестве основноro алroритма шифрования IICnОдЬЭУется MDS, превра
щаюший пароль в З2значное шеctнадцатери'шое число. Этот алrориrм
является самым надежным. Раньше использовались алroритмы DES 11
ЗDES, но здесь я НI' буду подробно останавливаться ни на одном нз НИХ.
При установке СИСТемЫ обычно спрашивается, хотите ли вы использовать
теневые парОЛli (Shadow Passwords) 11 МО5. Я очень рекомендую вам IfС
пользовать обе 31"1\ возможности,
Информация о rpynnalt ПОnloaоватеnей. Файл /etc/group
Информаиия о rруппах пользователей хранится В файле letc/group JI
следующем формате:
нмяrруппы:пароль:GID:членыrруппы
Пароль используется крайне редко. Пример фраrмента фаЙла letc /
group:
root*:O:root
bin:*:l:root,bin,daemon
local,*,100:r1en,oper a tor,ivan
guest:*:200:
dialup,*:250:victor,evg
в этом примере rруппа rool зарезервирована лля пользователя rool. fруп'
па с I1лентифнкатором 100 исrlOдЪэуется ДЛЯ локальных пользователеЙ. В
ее состав входят ПОЛl,зоватеЛII den, operator, i van. fруппа guest I1peд
назначена для rOCTeBoro входа 11 пользователя guest.. В состав rруппы
dialup ВХОДЯТ пользователи victo:c и evg.
246
rлвва 7. ОСНОВЫ администрированиs;! системы
Системой определяются rpУППЫДДЯ фиктивных пользователей: bin, sy 5,
адт и т.п. Реальные пользователи входить 8 них Не MOryт. Эти rpYnnbl
используются для системных файлов.
Добавить rpупny вы можете с помощью команды groupadd. Я, как пра-
вило, просто добавляю запись J>фаЙJI /etc/group, а ест( мне нужно
удалить rpуппу, то удаляю соответствующую СТРОКУ.
7.3.2. Создание и удаление попьзователейи rpynn
БолъщинстlЮ утилит алминистративноrо назначения храlШТСI!,В каталоrах
Isbin и /usr/sЫп. Полный набор утилит для управления ПОJlЬЗOвателями
н rрynпами, установленных в вашей системе, вы можете увидеть по ко-
манде
# 15 (/sbin,/usr/5biп}/*{u8er,groupJ*
Выполнив подстановки aprYMCHToB, командная оболочка bash превра1'ИТ
эту команду в четыре:
18 /5bin/*u8er*
16 18biIl/*group*
18 /u8r/sbin/*user*
15 /usrlsbin/*group*.
Чтобы добавить пользователя, ВЫ[IOЛfште команду
# useradd <ИМЯ> ; pas$wd < ИМЯ >
Для удаления учетной записи' ПОЛЬЗО8ателя служит утилита userdel, а ДЛЯ
модификацИИ существующей учетной записи утилита usermod. Все они
снабжены тап-страницами.
Чтобы добавить или !rзмеЮIТЬ несколько учетных записей сразу (на
больших системах это приходится делать чаше, чем на персоиащ,ном
компьютере), можно воспользоваться утилитой newusers.
Для rрynп те же функции СОЗЩlИltЯ, удаления и модификации выполняют
, утилиты groupadd, groupdel и groupmod соответСТ8енно.
ЕСЛI( вам почему-либо неудобно управлять пользователями из команд-
ноЙ строки, МОЖlfО делать ЭТО с помошью rpафическоrо КОНфl(ryратора.
На рис. 7, I показан пример раБО1'Ы system.configusers из дистрибутиuа
Fe(!ora Core 3.
247
UN\JX: полное РУКОВОДСТВО
;'i1iiiiШilll_l_i{' :!_: ;;j;iб']kJ;'ji\Wlli::iktltrJii.i
'-', .. . , .
Jl!eAn l<tIaIIiif.. :i" С. р.... >
.,.:.,.......-,;,;..,',,:...,-.
. : ,'"{ii'''
,,'}""-""':'..;:;" .
., .,. ". ,. ,'.'",',""" '''''0'''''.'' .
....,.,'... . '.Ш
.. ,"' "...........'.......
..... .,.ш "_,."_"'..'''"_'''''''''''''''
.",'...'.' ','".'" "'" !>. ,'.:::.', 'i"Щ:"'.:
Добааиrit .!nя:.'.ц."ть rP)'Il\i :qI1. ' УдailЩh!:;;cnpllа.:.::::-ОЩ&'
ПR.JUIo:laU.Т
и: .&АЯ:
{]М;IJr,';!:;i:,\:j:![;iШ&&:;:i!};
Q;,в t....
И.,. nortba ,::;" ;,i{:::;: ' :\\ \':р!:' .i:i.H.::';
iiiJНtk и':"
i.,.,,-___;_"_,,_.-,,,,_::_;;_;;,,,_.._,_.;, ",'.' "-;'J
!oe';. ;' . ":J
Ц"!;:. 1 :'" _ .. . l
:::::t:: !; =,-=::==: ""-." . j
' 1 :::;:II.. h .. . . "---т.-:l y
., ,,, ...J.:J
оЬе.
ivan
r .o.!......! [1 <''#21<
Pнc 7. 1 Добавление учетной записи
7.З.З.К.отироввние
Что такое квотироеание. Особенности КВОТИРОIl8ИИИ в Unцx
Квотирование МОЩНЫЙ механизм оrраничения использоваиня диско
IOOro пространства. применявшийся еще в самых ранних версиllX UNIX,
Torдa как в со-rав ОС семейства Windows компания Мicrоsоft включи
ла их только в Windows 2000, естественно, 'ордо заявив об этом. Этот
материал настолько объемен. что ему можно было бы смело ПОСВЯ1'ить
uелую rлаnу.
При IIOМОЩИ квот системный администратор принуждаст пользователя
Не расходовать неоrраliиченный объем дисковоrо пространства. Суще-
ствует два типа оrраliиченнй: оrраничение На количе'Тво файлов (illodes)
и оrраничение на размер IIHcKoBoro пространства в килобайтах (Ь/т,Ь).
Если установлены оба оrраНИ'lения, то оии будут применяться ОДIIО"
временно_
ОrpаничеllИЯ на inodes и иа bIocks MOryT быть установлены как для поль"
зователя, так и для 'Рупны- Если вы входите в rруппу. которая превысила
248
rлава.7. ОСIЮВbf администрирования системы
наложенное на нее оrpаничение, то БЫ Не сможсте использовать дисковое
пространство, дажс если вы не 11ревысили квоту как пользователь,
011'аничения устанавливаются ОТДельно для каждоrо пользователя на каж
дой файловой системе. 01'раШfчеИие определяется четырьмя числами:
[. Текущее значение оrpaниченИII;
2. «Мяrкое» оrpаничение (sofrli"Iit);
3. «Жесткое.. оrpаничение (Ilardliplit);
4. Период отсрочки: время, 110 истечении которorо «мяrкое» оrpaниче-
Ние будет IltlТерпретироваться I<аК «жесткое».
«Мяrкое» оrраничение определяет число блоков, которые пользователь
асе еще может превысить, «жесткое» оrраничение IIревысть невозможно.
При попытке сделать это пользователь ПОЛУЧIf1' сообщение об ощцбке.
По истечении опрсдслениоrо "ремсни (обычно 7 дней) «мяrкое" оrpани-
чеиие переходит в «жесткое». За это время пользователь должен удалить
ненужные ему фаЙлы.
Ядро и поддержка квотирования
В ядро ОС Linux поддержка квотирования встроена (по некоторым
CBCJIClf.IUIM, она появилась В ядре, начиная С версии 1.3.8), осталось
убедиться, что она у вас. включена. Если это не так, то ядро придется
переКОМIIИJ!ироватъ.
После устпновки дистрибутива исходные тексты модулей ядра оБЫЧIЮ
находятся 11 каталоrе l1iЫmоdl!lеSi<версияядра>/Ьuild.
Примечанио
ri ПРИ8Ыкайте j( ВОЗМ('IЖНОСТЯМ ПодстзнОВК\,! npryмeH109 КQМаНДНQЙ оболочкой bash:
, перейти в этот каталоr можно комаНДОЙ
$ сд IlibIтod"'luf1aroe r'/bui. td
Там лежит фаЙл .config, храf\ЯЩИЙ текущие настройк:.II ядра (имя
файла начинается с точки, поэтому он считается cKpblтым: чтобы уви-
деть ero ПО команде 15, пользуйтесь ключом ""11.), Найдите 11 нем строку
CONFIG QUOT А и убедитесь, что значение этоrо параметра равно «у».
Далее обратите внимание на формат квот, строки CONFJG QFMT V <х>,
ще х "" 1 или 2. ВерсиЯ 1 это старый формат, Ilcnолъзоваящиi!ся в ядрах
до версии 2.6. Если паш дистрибутив "сноиан на ядре 2.4, дomкeH быть
включен старый формат. Он отличается именами файлов квот.
Ту же самую проверку (при необходимости настройку) можно BЫ
полнить и С помощью диалоrолоrо конфиryратора. Чтобы запустить ero,
ВЬПlOлнrпе одиу из следуюших команд:
249
UNUX: полное рУКОВОДСТВО
. make menuconfig: работает в консоли, предлаrает тексroвые меню и
кнопки:
. make cont1g: работает в консоли, задает вопросы;
. make xconfig: рабоr,Jет в rpафllческом режиме при запущенной си-
стеме Х Window;
. make gcont1g; то же самое, ТDЛЬКО ДЛЯ оконной среды GNOME.
На рис. 7.2 НоКазано ОКНО конфиrуратора ядра для оконной среды
GNOME. Обратите внимание, что квоты поддерживаются только ДЛЯ
файлопых систем ext2, eJct3 и RelserFS.
Проверьте, установлены ли у вас утилиты квотирования, командой
# 18 {!sbi.n,/usr/sbiJ1,/uar/binJ/*q\lota*
Скачать пакет этих утилит можно из репозиторм Сизиф, поддержнпа-
eMoro командой разработчиков ЛLт Linux: llt tp: / / а1 t . Нпих. kiev.
\la/SJ:pmlq\lota/get.
,"' QUotil SUPPc" quOTA
.,. , .
I
I
.
j If уou sav y. vouwi'" beaЫeTosfl peruserJlmtt.J fordtsk
.:1 usage (a!so calk!O disk QU91U}. Сul'П!mty,lt WOI'ks forthe
1 . й. 0Ct3, ind 5frfs fileSysre.m. е:хВ .atso SLlppcкts joum.1lled
quotas {т which ';'OU don"t (О ruп qumасhкk(З) after iln unclaf}
shlЛdaNл, Y(JLI need addlIOnoti sdtwareinоЮertO 13@ 5Up;юrt
(уоо ca.ndcмtnload s.oottes fют
<hrtР.://WWW..5f.m:t/prqес:tsl1il.lшquot....>).FСЖfurthe!.ddail.re<td
the Quota mil1l..fiOWТO, avd from
<htt.p;/1www.ddp.Ofgf'dats.html#h<мrtф. rж the: doc:umenwion provid.ed
. with t.quot.a tod:s..v t._ 5.1S. ootr fOJт,»
Рнс. 7.2. r,:юфический конфиryратор ядРа-, меню FUesysrems
).,
,
.
250
rлзва 7. ОСНОВЫ администрирования систеМbI
Назначение и активация квот
Теперь нужно определить, llспользоваиие какой файловой систеАiЫ вы
хотите оrpаНИЧИТ!>. Обычно это /horne (домашиие каталоrи пользовате'
леЙ), /иэз:: (пользователи имеют право записывать информацию в этот
каталоr)И, возможно, /var. Чтобы включить lU!отирование файловоЙ
системы, mpедакТlIруйте файл / её <; / f s tab, добаJlИВ ключ urquota (11/
или grpquota для rpулл) в лоле, содержащее слово defaults
/,Jev /hdal / e:<t2 defaults
f clev /hd<t4 /hоше ехtЗ defaults, usrq)щtа"'/nyть/к/файлу /КВОТ
/dev/hda5 /usr ехtЗ defaults,usrq\!ota,grpquota
Если путь к файлу квот не указан, то испол:ьзуется файл в кориевом
каталоrе квотируемой фaйJlоnо/l Сllстемы. В JlеРСЩ1 2 (ЯДР(l 2.6) он назы'
вается aquota. user (ачиоёа .group для rpynn), в JlСРСЩll quota.
user и quota.gToup.
Периоднчески иеоБХОДНМ(I ПР(lверять фаЙлы (lrpаиичений и C<lMO ДИСКО'
вое простраиство, выделенное пользователям, на uелостность, особенно
после аварийноro завершения работы системы. Для этоrо используется
команда quotacheck. Не рекомендуется применять ее к используемоЙ в
даиный момент, а поэтому подверженноЙ изменениям. файловой систе
ме: сама протрамма пытается переМDнтировать проверяемую файловую
систему в режиме -только чтение», но на занятой ФС это невозможно.
Рекомендуется также на время проверки отКЛioчать квотирование.
Если проrрамма quotacheck ие находит ФаЙ)JОJl оrраничеиий, то еоз
даст их.
Для проверКR файловых ClICТCM на Число блоков, )tOTOPble цсполъзуются
пользователе... или rруппой, ВЫПОЛЮfте KOM;UfДY;
# quotacheck avug
Ключ a требует IlровеРКИlJсех СМОIIТИрОВ;lННЫХ файловых систем (если
ero не указывать, то lIужиозадать точку М(lНТИРОВaJlИЯ), ключ --v требует
подробноro OТ'leтa о работе команды, ключи ug требуют проверКR КВОТ
как ДЛЯ ПOJfI>:JОВ!jтелей, так 1I для rрупп. '
Комаида quota <имя> .. I <имяrруппы>позволяет просмотреть
оrраllичеllИЯ дисковою пространства, наложеllJiысцстемIIыыM аJtМИНИ
стратором на ДaJIНОТО пользователя или rpуллу. а )tомаllда repquota
СIЮДКУ оrраничений ИфЩ('I'Wlесpt занятоro ДНсКОIlоrо простраllства
для всех поль:щвателей даlm:оЙ ФЩЩЩlOй сIlщемы (с ключом --а всех
файловых систем). .
ТОЛЬКО суперпользователь может просматривать квоты друrиx пользова
тслеЙ. Обычный пользователь может просматривать только свои КВОТЫ
и квоты rруппы, К которой он принадлеЖIIТ.
251
UNUX: ПОllное руководства
{....
Рис. 7.3. Результат еыполнения команДЫ qLlotacheck .зvug
. . ... .
c,:;,>".,;,,;..,t ,.;ф,i,'",/,.,; .;.;,;.",..
Рис. 7.4. Результат выполнения OMaHДЫ repquota иa
252
rлава 7. Основы аДМИ НИС1'рирования СИСТ'6МЫ
ДJНI задания Ol'раничениЙ предна:ша'lена команда edquota. Файлы осра'
flичений прн этом ДОЛЖНЫ уже существовать. Сощайте их и включите
режим подсчета к/ют командами:
# quocacheck u <точка,МОН'I'ИрО"Dанмя> #
#
11 quotaon \.I <точкаИОН_ТИРОЕания.>
ДЛЯ rpYnI1 нужно
ВЫПОlIНИТЬ ТО же
# самое с ключом g
Команда еdqlюtа ..u <ИМЯ> создает nременный теКСТО8ЫЙ файл, пред'
ставляющий собой вьщержку из ДIЮИЧНOf'О файла квот', запускает ASCII.
редактор, указанный в перемеиной окружения $EDITOR (по умолчанию
это редактор vi)" в котором ВЫ можете отредактировать оrраНllчения
длн данноrо пользователя, и записывает сохраненный текстовый файл
обратно в фаЙл кВот.
Текущие пnказаreли:щнятоrо J\ИСКnВОfО пространст!\а ПРIlВОДЯ1'СЯ толь.
ко для справки, редактирова'rь нужно ТОl!ЫЮ ЧIIСЛО, которое следует за
словом hard или 80Н (рис. 7.5). Значение «О" указывает на отсутствие
оrраиичеНIIЙ.
PHC 7.5. Результат выполнения команды edquata wU deп
253
LINUX: полное PYКOSOAC11IO
Чтобы изменить период отсрочки, пользуйтссь ключом --t:
# edquota t
Time units тау Ье: days, hours, minutes, or seconds
Grace pe.riod before e'nfDrcing 80ft limits for users:
/dev/hda4: Ыоск grace period: 50 minutes,
file grace period: 50 minutes
в староЙ версии формата квотсущеCТIlовало значение периода отсрочки
по умолчанию, нкомпилированное 6Дpo. В версИJI 2 значения по умол
чанию нет, 11 период отсрочки ДД каждой файловой системы нужно
указынать явно.
В большинстве случаев у вас есть несколько пользователей, на кшор!>!х
нужно наложить одинаковые оrрацичения. Самым быстрым способом
редактирования оrpаничений в ЭТОМ случае будет ИсПОльЗов8Iше про'
TOTll1Ia. С помощью команды:
#: edquota и <пользователькоторыйстанетnpототиnом>
можно определить оrpаничения прототипа, а затем с помошью команды:
# еdчоu1:а 'p <прототип> <tiОJ1ь.зователь>
создать квоты для всех оставшихс пользователей, применив к ним o1'pa-
НllчеНИ>l прототипа.
Дня аК'I1!ваuии/деак:тивации подСчetaквот на файловоliсистеме, ДЛ кото,
роЙ заказано I(JI()ТЦрQ!lalше, пltчены KOмat1ды ч"оtаоп и qllotaoff.
Команду qIlОЩОDIJУЖ1IО В КЩQ'ьi +сденарийз8rpужи системы, мк и
команду quotac:hel:k;
# СмонтирОБа!Шэсе фаЙII91!J.!,",Ф!:lстеМЫ из /etiJ/'f$tab
# Проверка И ак:wивация ,,,..ар':!'"
echo "Checking q\J,оtав.цА$i'J1!!I!У take B,ome time."
/usr/sbin/q\J,otat:heck avц.g ,
echo .. Done."
echo "Тurning -ОП' 'quota.'"
/usr / sЬ:iЛ/q\J,Q\;цОn avu9':fi
254
rлава 7. Основы ВДМИН\-1СТрИрОвания системы
7.4. Подключение и конфиryрирование
аппаратных устройств
7.4.1 . Ядро и поддержка УСТроЙСТВ
Ядро ОС LinuJ< может быть собрано как монолитное или модульное.
Монолитное ядро зто один большой файл, в который ВКЛЮ'lены сраЗУ
НСе возможности, заложенные в данную версию ЯДра. Оно без всяких
I1зменений находится в оперативной памяти от запуска до остановки
системы.
В модульном же варианте сборки в ядро вКЛЮЧаЮТ только саМЫЙ He
обходимый код, обеспечивающий заrрузку системы. Все возможности,
которые MorYT быть вынесены в отдельный файл (модуль), туда и BblllO
СЯТС!!, чтобы при ItеоБХОДIfМОСТИ динамически ПОдlшючать их к мру и
отключать без перезаrрузки компьютера. В результате ядро получается
небольшим, быстрым и rибким.
Ра»ьще, в первых версиях мра ипщ, механизм работы с модуля_О! не
был предусмотрен, и ядра тех времен содержали в себе код драйверов
для всех поддерЖИВаемых устройств. Такое решение нельзя было Ha
знать рациональным: невозможно предусмотреть, !!;а!!;ие УСТРОЙства будут
установлены у !!;онечнorо пользователя. даже если включить в состав
ядра драйверы всех известных устройств. Кроме Toro, даже если нужное
устройство (с!!;ажем, зnуковая плата Yamaha) ядром рас/юзнается, то
драЙверы OCTВJIbl'bIX устройств Toro же назначення будут впустую за'
нимать оперативную lIаМЯТЬ. Поэтому, начиная с версии 2.0, ядро Linux
поддерживает модульную орraнизацию н из дистрибутива, oCHOBaH»oro
на ядре 2.х, ставится в модульном виде.
При этом, !!;роме файла образа ядра /baot /vm1 inuz ,<версияядра>.
ставится !!;атаЛОI' с модулями /1 ibf!11odlll es I <Берсияядра> и файл об
раза заrpузки /Ьооц i ni t,rd '<Берси,,ядра>. Образ заrpузки содержит
все модули, необходимые для тоro, чтобы мро заrpузило систему. Без эmх
модулей оно неспособно подключить системный раздел жесткоrо диска
11 прочитатъ файлы. Друrие модули ПОДlUlючаются к ядру сценариями
заrрузки при старте системы.
Перед тем, как устанавливать 1I0вое оборудование, нужно убедиться, что
ядро поддерживает ваше устройство. Если это не так, нужно пересобрать
ядро, НI(JIЮЧИВ 11Оддерж!!;у новоro устройства. Можно со стопроцентной
увереНIIОСТЬЮ сказать, что ваше ядро будет поддерживать вашу сетевую
плату RTL8139 ИЛи любую друryю, совместимую с NE2K РС!. А вот о
IlOддержке USВмодема или прннтера заранее ltичеrо сказать нельзя:
rlOльзуйтесь диалоrО8ЫМ конфиryратором ялра (п.7.2.3.1) или заrЛЯНltте
255
UNUX: полное руководства
в базу поддерживаемоrо оборудоваiшя по адресу htt-p: / /www. nland
rakelnux. com/en/hardware .рhрЗ. Ничеrо, если у вас друrой дис
трибутив, например, основанный на Red Hat: основные устройства те
же. Современное ядро версии 2.6 поддерживает о'lень мнOfО устроЙств,
и проблемы MOryт возникнуть только со следующими их 1.ипами:
1. WinMOAell<bl, то есть проrрUЩl\ые модемы, часть функций которых
выполняет сама ОС Wiпdows,Я: nе rоворю, что под Linux о!ш вообще
не работают, но, потратu:в yMY времени, даже если вы и настроите
этот модем, удов.ольствия ОТ ero работы вы не получите.
2. Wiппринтеры комментаРИII те же, что и для WinMoAeMoB. Раз
работчики дешевых устройств, как правило, С"l'араются СЭКОНОЩI.ть
на драйверах ДШJ менее pacnpocтpaнeHHЫX ОС
З. Экзотические тv и FМтюнеры.
7.4.2. Утилиты для работы с модулями
Основу модульной орrанюации ядра составляет возможность динамиче
ской заrрузки и выrpузки модулей. Обеспечивается :па возможность тем,
что, в отличие от обычною приложения, модуль имеет несколько точек
входа, нспощщемых при УСТановке и удалении МОДУilll из ядра, а таКЖе
при обработке поступающих от. пользователя запросов (рис. 7.6).
м.,..,.,.
I modulelnitO
I ф.........
I mQduJeex!tO
........
:
I :- ш__ ..ai".r_cap.bl шr : )
--': ..одуп. rТТТТ*rl
: cЧeТ'lиlt
: использовании I
, ,
:
, ,
,
,
,
,
,
i"_ щ._
. , ,.
,
,
""",glsl.rcap""i1jM) r ,J
modinlo
",',,'"
Рис. 7.6. Связь модуля с ядром
256
rлаеа 7. ОСНОВЫ администрирования системы
Утилиты, обеспечиваЮllIИе заrруэltу, выrpузку и просмО1-р эаrpуженных
модулей, собраны в пакет, кщорый для ядер 2,4.х называется modutils,
а для ядер 2.6.Х moduleinittO(lls. Не смешивайте ЭТII пакеты: одно'
имеННые утишrrы IIЗ них конфликтуют друт с друтом.
Выполнять эти утилиты может только суперпользоnатсль. В состав обоих
пакетов входят:
. Ismod просмоrp списка зarpуженных модулей;
. modinfo <ИМJII\IOДУЛЯ> получение информации о заrружеlfНОМ
модуле;
. insmod < ИМJIМОДУJlJl > зarpузка модуля;
. пnтod < ИМJIМОДУJlJl > выrрузка модуля;
. depmod нахождение заВИСlIМостей между модулями;
. modprobe заrрузка МОДУЛR с арl'ументаШI и теми модулями, от
которых он зависит.
Из сценария инициализации системы вызывается именно modprobe. Эта
команда руltоводствуется конфиrурационным файлом / etc/modprobe.
conf, в li.щором мотут быть запИсаны apryмeнты, передаваемые зarру'
жаемым.модулям, определены псевдонимы модулей и указаны команды,
которые нужно выполнить перед стандартной процедурой заrрузки
модуля или вместо Нее. В дистрибутивах, основанных на ядре 2.4, этот
файл называется / et с /тоди1 еа . сап f и имеет несколько более сложный
синтаксис. В совсем С1"арых версю." Linux (до дистрибутива Ri;d Hat Linux
7.0) вместо ЭТОro файла использовался /etc/conf .modu1es.
7.4.3. Kudzu утилита для автоматическоrо
определения УСТРОЙСТВ
в Linux для автоматическоro определения УСТpQйств используется специ'
альная утилцта kudzu, названная в чеСТь китайской лианы злостноrо
сорняка. В дистрибутивы, основанные на цпш Mandrake, вместо нее
может ВХОДI1ТЬ утилита barddrake. Зада'ш этой утилиты состоцт В том,
чтобы определить, какие устройства установлены, и добавить в файл
/ etc /modprobe. cOl1f (как бы он liИ назывался в вашем дистрибутиве)
команды заrpузки модулей ядра с драйверами для этих устроЙств.
Обычно kudzuзапускается пр" каждом запуске системы И3 сuенар"я
заrрузки. Ее работа заиимает довольно заметное время, поэтому яреко'
мендую сразу после установки дистрибутива, коrда все устройства уже
определены и настроены, отключить ее автоматический запуск. Если вы
установите новое устройство, что случается не каждый день, запустите
kudzu вручную от имени суперпользователя.
>J 'r;. 3811'
257
LINUX: ПОЛНое рУКОВОДСТВО
Напоминаю, что ОТКJ1ЮЧИТЬ авщматический запуск служб МОЖНО с по
мощью диалоrовоrо конфиryратора (cM.n.7.1) system-config-services ИЛИ
drakxservices, в зависимости от дистрибутива.
Еслн нужно переда1'Ь драйверу новото У[;I'ройства дополннтельные пара
метры, отредактируйте вручную фаЙл I et с I modprobe . сон [.
7.4.4. Настройка установленных устройств
Настройка устройства обычно выполняется с помощью диа.лоrовоrо KOH
фиrуратора устройств соответствующеrо nша. НаПрllМер, для настройки
принтера МОЖНО запустить system-configprinter в дистриБУТIШах Fedora,
rеdhаt-сопfig-рriпtеr в дистрибутивах Red Hat, printerdrake в дистрибу
тиве Mandrake.
Если вы не знаете точноrо названия нужноrо конфиrуратора, вам по
может фУ'fКUИЯ автозаполиеНИЯ командноЙ строки (n.2.1.4.7): имена
MHorllX КОНфlfтураторов наЧ'П<аЮТсЯ ОДI!наково, с «system-config»
(<<rеdhаt--сопfig») или «drak». Если подходящиЙ КОНфllrypатор таким crlOco
бом не нашелся, командоЙ which определите каталоr, в котором находятся
найденные конфиrураторы, поройтесь в "ем командой 18 *<::o"f' И
man <утилитапо}{ожаянанужную>.
И. наконец, ПОJlЪзуйтесь командой apropos с aprYMeHToM «солf", которая
в числе прочеrо сообщит вам об установленных в вашей системе KOH
фllrураторах If КОНфllrурщ!Ионных файлах, для KOTop"rx предусмотрена
справка.
7 ,5. Установка nporpaMMHoro обеспечения
в ОС Window установка новых nporpaMM происходит просто: достаточно
запустить 8etllp.exe, ввести серийный иомер, каталоr для установки и
нажать на кнопку «Далее». После этоro вы можете nocтymlTb так, как
рекомеидует Мiсrоsоft: «откиньтесь на спиику стула и подождите, пока
проrрамма установки все сделает за вас».
В Linux же установить проrраммиое обеспечение можно одним из трех
способов: )IЗ исходиоro кода, из бинарноrо пакета н НЗ пакета, содержа
щеrо исходный код. Рассмотрим по порядку все три способа.
7.5.1. Установка из исходных текстов
Бесплатное распространение исходных текстов проrрамм именно то,
'1'1'0 делает Linux уникальной операllИOIШОЙ системой и составляет ОJUЮ из
258
rлзеа 7. Основы администрирования системы
Величайших Достижений Человечества. Поэтому традиционный. способ
распространения rrрl!Jlожений ПОД Linux это архивы исходНЫХ текстов
(о прасторечии тарболлы).
Обычно ИМЯ файла, содержащеro такой архив, имеет двойное расширенuе:
напрИмер, tar.gz или tar.bz2. Это озиачает, что данный файл получился
n результате работы сначала архиватора tar (Таре Archil'e, по первона'
чальиому назначению работе с ленточны/olИ накопителями), а ПОТОМ
компрессора gzip или bzip2. Чтобы распаковать архив, нужло применить
сначала декомпрессор gunzip пли bunzip2, после чето разархивuровать
ею командой tar.
Инотда раCШlfрение только ОДНО: tgz. В этом случае нужно запускать раз.
архиватор (а!" с ключом, указывающим ему на необходимость применить
фl!Льтр'декомпрессор gunzip.
Формат команды tBr:
tar (IUIючи] (файлархиваJ (архивируемые фаЙJ1Ь! и/или каталоrи!
Подробные сведения о ключах команды tar ищите иа mаП--стрaJlице, я
псрсчнслю только самые употребительные:
. с (create) создать архив;
· х (eXtract) извлечь файлы из архива;
. t (lis1) показать содержимое архива;
. v (verbose) выводить на консоль подробный отчет о своеЙ работе;
. f работать с файлом, а не ЩЩТО'lНЫМ Ilакопнтслем;
. z примеНIIТЬ фllJlЬтр'компрессор при создании apxllBa или деком'
прессор при распаковке.
Архивный файл обычно содержит дерево катало!'ов, которое по.
еле распаковки будет создано в вашем текущем каталоrе, или, по
слу'tайной небрежности создателя архива, несколько деревьев и
файлов россыпью: в этом случае каталоr для распаковки вам нужно
создать вручную. ТаКIIМ образом, первый ша!' при устаllовке из ис.
ходных теКСТОВ пакета program 3.14. tar. bz2 распаковка
выrлядит так:
$ bunzip2 program 3.14.tar.bz2
$ tar tvf program 3.14. tar # l1pOверьТ€. есть ли объewIrяций катало!'
$ tvxv # ободочка bash превратит это в команду
tar xvf program З.14.tаr
Следующий шаr собственно установка. ПереЙдите n распакованный
катало!' (обычно он называется <IIМ)Iпакета.веРСIIЯ» 11 ПРОЧИТa:iiтe все
RЕАDМЕ'подобllЫе файлы, которые там найдете. Обычная проuедура
установки состоит 113 трех этапов:
259
LINUX, полное руководство
1 . $ . / сопПgше # помните, что текущеrо хаталоrа в $Р.\ТН нет?
Сuенарий соnfщurе, прилож:еЦ1lblЙ к арXИl\У, опрашивает компоненты
вашей системы с целью опредeJЩТЬ, сможет ли устанавливаемый па.
кет собраться и заработать именно у вас и что в нем для ЭТоrо надо
"подкрynrrь». Прl! успешноызавершеllИИ он создает файл MakeftJe
основной докумет для сборочной УТИJшты make, содержащий ин
'Трукции и необходимые параlетры (пути К заroловочным файлам,
библиотекам и тл.) для комmU/ЯЦии И сборкu nporpaмM па кета.
2. $ make "
Собственно компиляция и сборка.
з. $ тake instal1
Установка собранных проrpамМП8J\ета, конфиryрационных файлов и
справочных страIШЦ в каталоm, указанные в Makefile. Обычно испол
няемые файлы помещаются в каталоr /UBr /bin, а mапстраниuы
8 /tJsr /та!1, но после этапа конфиryрирования ничто ие МешаеТ от.
редактировать Makefi!e вручную.
После этоrо можно, прочитав ЛРWJоженнуlO к пакету документацию.
запустить nporpaMMY.
Часто этими тремя :тmами npoиедура ;cr-dНовки и исчерпывается, но не менее
часто неnpияnюсти начинаются уже на этапе конфшурироваНия: сценариЙ
configure обнаруживает, что необхЦ!!дмая для этоro пакета библиотека у вас
не ycraHoMeHa. Что ж, найдите и" установите ее и снова запустите cuенарий
confi b 't1re. Он сообlUlIТ О Hexвane ЧCl'!>'1UIбyдь дрyroro... Но при достаточном
терпенин, времени и дешевом Интер!lете эти проблемы решаютея.
На этапе компиляции и сборки можно столкнуться с тем, что нужные
заrоловочные файлы и библиотекu называются подрутому или располо
жены .. друrом Месте, чем ожидал разработчик. Придется разбираться в
сообщениях компилятора и УТIIJЩТЫ тake, подсовывать вместо Heдocтa
ющих фаЙлов символические ссылкII на имеющиеся и выполнять друrие
неТРИDиальные действия, иомоraющие короче познакомиться с вашеЙ
операционной СIiСТСМОЙ.
7.5.2. Установка из бинарных пакетов
Как это депается и 'по для этоrо иужно
Как ни rибок способ установки приложениЙ IIЗ исходных текстов, по
З80ЛЯЮШИЙ установить проrpам:му, создаиную для JIpyroro дистрибутива,
и настроить ее [ЮД конкретную системную среду, вчерашние ПОЛЬЗОва
тели Windows тоскуют по npостоте setup.exe. Хорошим компромиссом
считается распространение приложениЙ в виде заранее собранных на
определенной платформе бинарных пакетов.
260
LINUX: полное PY1<0вoдOТIIO
даже если проrраммиое 06еспеЧе\ше ие изменилось, бывает необходимо
есо пере упаковать.
Самыми ..универсальными» пакетами являются па"еты, рассчитанные
на архитектуру Intel 386. Собранная таким образом просрамма должна
работать на любом llроцессоре Intel, начиная с 80З86DХ (или совмести.
мосо с ним). А вот если у вас процессор 80486, пакет, рассчитанныЙ для
работы с архитектурой 80586 (Pentium), скорее Всею, не устаНОВlffСЯ в
вашей Системе. Обычно для llроцессоров архитектуры CISC (с набором
команд х86) используются следуюшие обозначеtfИЯ:
. iЗ86 Intel 80386DX;
. i586 InLel Pentium (ММХ), AМD к5 (К6);
. i686 Intel РРro, Celeron, РII, РПI, PIV.
Узнать о своем процессоре МОЖJ!О по "омаllде uname a.
В простейшем случае "оманда установки пакета выrлядит так:
$ rpm i <пакет>.rрm
УстаllОВКУ можно пронзводить ас только с локальною диска, но и по
протоколу FТP:
$ rpm i ftp://somehost.domain/pub!package.rpm
Перел установкой пакета менеджер rpm проверит ero зависимости, то
есть друrие пакеты, которые необходимы НОВОй проrpамме или, наоборот,
конфликтуют с ней. Если установлеиы все нужные проrpамме ПaJ<:еты и ни
с одним из установленных она не конфликтует, менеджер срт установит
проrрамму, в противном случае сообшит вам о проблеме. Если нужен
дополнительный пакет, просто установите ero. А вот если проrрамма
конфликтует с уже установленным пакетом, то вам нужно будет выбрать,
какой пакет вам больше нужен: уже установленныЙ или новый,
Для удаления паита используется команда:
$ rpm e <пакет>
При удалении проrраммы менеджер пакетов тоже проверяет зависимо
сти между пакетами Если удаляемый IIaKeT нужен какимнибудь друшм
пакетам, удалнть ero вы не сможете.
При установке проrраммы я рекомеНдУЮ указывать два ДОПОJUштеЛьных
ключа: -h и -v. Первый требует показывать индикатор выполнения в виде
строки, заполняюшейся символами #, а второй выводит дополнительные
сообшения.
Для пропуска проверки зависимостей нужно нспользовать ключ --nodeps.
Например, у вас установлен'аrеm отправки почты (МТА Mail Traпsfer
Agent) postfix, а вы хотите ус'rановить nporpaMMY TOro же назначения
262
rлв.а 7. ОСНО8Ы администрирования системы
sendmail, которая с ним конфлш:тует. Просто так удaлиrь пакет postflX вы
не сможете, потому что он нужен мноrиы почтовым клиентам. УД31lяйте
ero командой:
$ rpm e nodeps postfix
После тако!'О УД31lения нормальная работа друrнх IlpOrpaмм, использу
ющих МТА, невозможна, поэтому вам сразу .же нужно установить про
rpaMMY sendmail или друrой areHT МТА.
Ключ u служит для обновления проrpамм. Я рекомендую пспользовать
ero и пр" установке проrpамм, потому что если устанавливаемый I1акет у
вас уже стоял, ТQ будет произведено ero обновление, а если нет, то будет
просто установлен новый пакет:
$ срт Uhv <пакет>
Просмотреть все установлеllИЫе пакеты можно С I10МОЩЬЮ команды:
$ срт ча I 1е$$
Если вам требуется узнать, установлен ли определенный пакет, вьшол,
ните команду:
$ срт ча I grep <пакет>
Просмотреть общую информацию о пакете можно с помощью команды:
$ rpm qi <пакет>
а информацию о файлах, которые установит этот пакет:
$ rpm ч1 <Лакет>
Чтобы узнать, какому пакету принадлежит некоторый файл, ВЫIlолните
команду:
$ rpm Ч! <файл>
t"pафмческие менеджеры пакетов
Менеджер пакетов rpm является мощным средством для ПРОИЗ8едения
операций над пакетами создание, установка, обновление, удаление.
Однако интерфейс командной строки нравится далеко Не всякому на-
чинаЮщему администратору.
Сущecrвyют И rpафические (под Х Window) реализации менеджера пакетов
например, для оконной среды КDE разработан kpackage, для GNOМE
gnorpm, аllалоrичный по своим функциям. Какую из ЭПIX проrpамм ис
пользовать дело вкуса и привычки (я вообще обхожусь одним rpm).
Скажу несколько слов о прorрамме kpackage (рис. 7.7).
263
LINUX: полное РУКОВОДСТJЩ
;;:;.1.
: .>.-+::...."-,:",,..
; 1T [ r
т... f] !S8lNO)1
ii ' 11 ' [&....
.', : r $.1idiI
_ i I
" '1
, : .......
i 1 ::=::
. i I ;&"".......
.121 i ..,........
i L8b::"
-м--т 1i .17ISI18I1 dot
WNiDII 1,"-1
.""'W,. 8li0ll
.. H:H04
.......... GNUIIIIЩIЬ..rn..III-.cI' I
1Id1l1ll,
JtЩi,,Aэirnh.t..
.
-:ft-;Y:!.::;::;;"
Рис. 7.7. ПроСмоrp yaтaнolJJ1eHHЬiX пaKetoB
В функции проrраммы kpackage ВХОДИТ:
1. Установка и удадение пакетОВ;
2. Получение сведеЮIЙ о па кете;
З. Проверка зависимостей пакета;
4, Поиск файлов и пакетОIl 11 базе RPM.
Вы можете установить пакет со своето жестко то диска, с инсталляционно
то компакт-диска или по протоколу FТP. Для установки пакета выберите
в меНЮ команду Flle --т Ореп Ц BBeдl!Тe путь (м" URL) к каталоry с паке-
тами. Открывать подкатаЛОТII мо.1Юtо и в окне Bыораa nвкетов (рис. 7.8).
Выбрав пакет, нажмите ОК и в появившемся окне устаНОIIКИ (рис. 7.9)
закажrrе режим устанОIlКИ. ПОСТaJIЬте флажок Test, если вы хотите только
проuерить заUИСИМОСТII па кета, lIеycrанаВЛlIвая ето.
Для поиска установленных пакетов 11 UХОДЯшl1X в них файлов служат
команды File --+ Fiпd Pack"ge 11 File --+ Find File.
Apt: DеЫап-совместимый менеджер пакетов
Система управления пакетами протраммното обеспечения АРТ была
разработана для Debian Linux, но впоследствии заllмствована мно-
rими Red Hat-соllмесТIIМblМII дистрибутивами. В сам Red Hat 11 ето
потомки (Fedora Соте) эта система не включена, но включена, напри-
мер. в состав ALT Linux, и ее можно скачать из репозlfТОрИЯ Сизиф
!,t: ".р: 11,; isyphus . ru/srpml apt Iget.
264
rJ1aaa 7. ОСНОВЫ адмtflнистрирования системы
v ..... :':..,.,.,....",_,_..,., "........."..,.',..._ ,.'''.'....'. '.'".."." kР./i'.i-l91'.. . .. . ,....... '.__ ',.', ," .. ..... ,. .I,.
"'04
'::::__:' -"-,,_;,?,::"",;:,:::",.:::;:.:,,,.:,:...,..,.,:,... .:. '.' .....r._..";,.,;,'(.,!;;,,.!_' ._ ,-_ '.-,..' .' ':'" '. ""''''.:-' '_".:. '"'-''' '.." .-',:..."........
:c'!.45 ! fJ) ttp Ih P .."""".aomlpub'd'''nbиtiOllS/ALTUu'':..! ''''' SпlloslSi . , .
,'.':, ;:::: .rpm :=:: ! '=:1;
-::- a2pr;--4.,3---aIt2.-S1'С.rpm t; асct.iэ.б..!t4..1'С.rpm !'1 adм..1,--e.ttt,SIl:J:
&52iec.Q.1,4.alt3.SIe,rptr; В 8tidri,''''''1IiIt1.!Ht.rpm В al!Q's4._2(НI1'.$,"
}3 .иliь.'4IЮ.вrc5.It,'PI'1 g;lвcl-2_2 2].aIt2.iI!C.fPm - АflorStвр--2о..81t1 t . ,;;.
r.; &txworсИ.23-altt.lilt:.rpn В ;x;pI-Q..(I7-all1.,n:.rpm t111Gb--Il\.D.OI)SCk{.
I I .:,'.- lт%О"""Щ".Щ I _\!iШfi\Ui1\l'r%!!'4 ! ,Мj , п ...
. .. . се '. .... . ... I H "QК . 1
:.';,,;. 1 0 ,d O.tnstil1l8f'-O .I gz 0.l. .. :: I ' I :.'sI, I
I
Рис. 7.8. Выбор анкета для уствновки
..,".,"--""-.'
InlSil{1,"'.PII.l:k.g.
! РАЩQЕS-'.:: .- -". , <drecorder/Fedora/R?Id..s/abiwrd2. О. 123. .
;.biwooЗ [jW'a.rnlrIl1: l/medla/C'drecorder /Fedora/RFMS!
I!erro::-: F d iled dE:\-1=Х<-ndеnсiеs:
.....,.,......,"",;,..,..). aiksauru..19tk >""' 1.2..1 iз- n.e-Q-ded
О,ЧР9.@d'_".,' libJ\.iksauru$1.2.$o.O iз t'1o!!eded
p_ ;;"' .1 .1.ibAiksa1.1cusGTKl. 2. ЗО. О iз r.eed
DFkipia:eР-: 1 ibfr ibidi. so. О is needed Ьу abi
lilda2.so.1 ig needed Ьу abiwo
: ;:: I ::::::::;$:'$ i::::e:/ ,
liЬоtзl.sо.а 5 neded Ьу abiwo
1Ьwpd1.эо.1 is needd ьу biwc
RESUL7..1
[j-'аWi!'d(м.
II!S!OJ1 I
I Dona
..
.
"';'
,"
Рис. 79 Проверка зависимостей пвкетэ
Для уnравлеНIfЯ lJакетами используется nporpaMMa apt-get. Формат ее
вызова:
$ aptget [кпючи] (команды} [пакеты}
Самые полезные команды перечислены 1> таблице 7.4.
265
UNUX: полное руководство
В отличие от системы rpm, которая только докладывала о неразрешенных
зависимостях, предоставляя lIаМ.Сl1равляться с ними самому, nporpaMMa
apt-get пытается разрешить зависимости самостоятельно. Для этоrо она
пользуется файлом /etc/apt/sources .list, в котором перечислены
источники пакетов (каталоrи и FrP-архивы), к которым она обращается
за необходимыми пакетамИ. Раскомментируйте в нем нужные строки И
добавьте свои.
Команды пPOrp8МMb/ ар,
Та6лнца 7.4
Команда НаЭН8Ч1;J:НМО
upd8.te Исnользуеt&я Д/I.s:I сиНХpQниэаци файлов Оni1I<ЗНИйrutкв1tJ8 с их истo<iНИil:ОМ, ';:Oto-
РЫй указаti В файле /etcjapt/вources.list
Иr;пощ.зуется ДМI 06ноалIl3НИЯ. YCT8HoВJ\eHHQrO пвк-ета до ноВейшей веРС\I!И, Д0С7Уrt-
upgrade но" fI источнике. МОЖQт Т4IOItO ИСnОl1ьзовз"l'ЬСЯ ДЛА обноеnfJнИ BCQx устаНОМеНнЫХ
в системе паКаТОВ. Hosыs пакеты при этом не устанавливаются. Пер&д эrой tl:OMaH.
Дой ооязатеЛьнО дОЛЖна быТ). выполнена кОМанда update
Более ...интеллектуальная.. версия комаНдЫ uP9rade Кроме установки HOBbtX 8ep
distupgmde сий пщеtов, она такжв прорерит зменившивC1tзависмости MeiJI(ДY ОВЫМИ вер_
сиями пакетов '" "Onbl'f'М;1C puреши.ТЬ ксжфпИ!l:.ThI.В ПОЛЬЗУ бо.пев ,важнЫХ naке108
YCТ8нQBICa пет8_ Если и-r;10Ч;lИК, \ilэ IФтороrо 8"1 i::Q(iмраетещ;о устt\Н!;JРЛИвать зтщ
IП$lзll пакет, перечис.лен в файле и.СТОЧНИl:.ов, 1"0 6 качестве I1М8нИ пакета нужно указы-
вать только имя ynаli:osанноА nporpaMMbl
remOIJ$ Удаление пЗIC8Тоа
ChBCk ИСflсльзуетс'l ,цля диarНQCТМIe;М н.аРУШеННblХ заВ"СИМQС1"ей междУ nакет(Щи
Очищает локaflь+юв xpal-lИJ1ище ПQдученных фаЙt!Ов. nm::eTOI;i. Перед установlюй
cle:an пакеты копируются И3 ИСТI)ЧНи-t;:В 9 локальное хранилище, а оттуда ПОТОМ ycтaHaB
f'\иве.IOТt.Я. Лс.nЬЗ)lЙТ'!Щ.'D 'ЭТQЙ KOMaHnO ар.ем<;!, о. 8p$Mf!H" м-я 81>бо)I(ДНI'i MCTa
на ДИClC6
При установке rpуппы па кетов с помошью apt-get будьте вниматеЛЬНЫ.
Обычно для установки rруппы пакетов используются символы шаБJlOна
«?" и "',,. Если нет пакетов, имена которых совпадают с указанным ша
блоном, то этот шаблон будет рассматриваться как выражение POSIX.
В этом случае, если вы ука3aJJИ шаблон а", то будут установлены ВСЕ
пакеты, имена которых содержат букву ><а», а не только те, которые Ha
чинаются на эту букву. Это же касается и комаиды remove.
Из ключей apt-get полезными для вас будут f и -d. Ключ f требует по-
пытаться исправить нарушенные зависимости, а при указании КЛЮЧа --d
пакеты только скачиваются из источника, но не устанавлнваются. Кqюч
--по-uрgrаdе, указанный при установке rpYnnbl пакетов, запрешает об-
новлять те IIЗ них, что уже установлены. Еще одна полезная, но опасная
возможность ключ 'forceyes, принуждаюший nporpaMМY не задавать
вопросов, выполняя потенциально разрушительные действия. Иноrда она
деЙствительно flеобходима.
Для установки па кета не по сети, а с дистрибутивноrо компактдиска
предназначена команда apt-cdrom.
266
rлзва 7. Основы администрирования системы
7.5.3. Устаноека ИЗ пакетов,
содержащих исходнi;tlй код
Иноrда в пакетах RPM находятся не откомпилированные версии про-
rpaMM, а их ИСХОДНЫЙ код. Признаком Этоrо является слово «src» вместо
назВания apJ<lцeKтypbl. ДЛя установки такоro пакета введите:
$ rpm iv <naKeT>.srC.rpm
Менеджер пакетов распакует исходные тексты в каталоr Red Hat; по
умолчанию это /usrlsrc/redhat, IЮ ВЫ можете установит друrой
каталоr директивой topdir в конфиrурационном файле /etc/rpmrc. В
подкаталоr SOURCES будут распакованы исходные теКсты и заплатки
(нат'!и) к ним, в подкаталоr SPECS sрес-файлы, содержащие инструк-
цю\ по прикладыванию заплаток и последующеЙ сборке. Чтобы собрать
Пf10rрамму: выполните КCJМ3НДЫ:
$ cd /usr/src/redhat/SPECS
$ rpm bp <пакеТ>.Брес
Явление патча (заплатки мЫ же на русском "зыке roворим) ОчеНЬ
распространено в мире открытоro кода, поэтому Я скажу о нем здесь.
Допустим, кто-то нашел и исправил ошибку в каком-нибудь известном
пакете. Исправление может заключаться в двух строках кода, так что
же выкладывать в общий доступ исправленные ИСХОДНИК11 целиком?
Нет, он распространяет заплатку, которую желающие MorYT прi1ЛОЖИТЬ
сами. Заплатка представляет собоЙ текстовый файл, содержащий список
ОТЛИЧИЙ исnpавленноrо кода от ИСХОДlюrо.
Такой список 13 стандартном виде rенерирует утилита diff с ключами
-uNr. Чтобы ero приложить, нужно перейти в корневой каталоr дерева
исходноrо кода пакета 1\ выполнить команду
$ patch pO < <файлзаплатка>
#: < Э1'0 ЗНаК перенаnpаJЗления ввода
Ключ p указывает, сколько отделенных «/" частеЙ нужно отщипнуть
от путей к файлам, подлежащим исправлению (вдруr каталоr пакета у
автора заплатки назывался иначе?).
ПрИЛОЖI1В 331lЛатк.у, вы!1лнитеe обычные комаНдЫ сборки:
$ .IСОI1figцrе
$ rnake:
$ Л1аkе install
267
UNUX: полное руководства
7.6. кnонирование
и восстановление системы
Клониравание это соэдание ТО'lНоЙ (побитиоil) копии исходиоrо носи-
теля. Носителем В нашем случаебу,цет корневая файловая система Linux.
Клонированная копия называется образом.
Если вам нужно установить дистрибyrив на несколько компьютеров оди
наковой конФиrypаЦlII1 (например, вы администрируете интернетзал), то
целесообразно устаНОВИТЬ и пастроить еro на одной машине, а на дрyrие
склонировать. для домашней СИСТеМЬ! из oдlloro компьютера клонирова
иие тоже имеет смысл: если чтотовдруr «слетит», ТО вы сможете быстро
восстановить исходное состоянпесистемы простым развертыванием об
раза. На развертывание образа нужно намною меньше времени, чем на
установку и настройку систеМЫ.
Перезаrpузитесь в однопользоватсльском режиме (о режимах и вариантах
заrрузки сказано в n.9.1.1). Введите команду mount, чтобы узнать, какой
раздел содержит корневую файловую систему:
/dev/hdal оп / type ext3 (rw,.noatlmel
попе оп /proc type proc (rw)
попе оп /sys type systs (rw)
Корневая файловая сдстема раCI1uложе.!3 на рвзщще / dev /hda 1. Образ
именно этоro раздела мы будем сохранять на друrом НОСlIТеле. Носителем
может быть друroй жеcrxий ДИСК я буду использовать внеlШlliЙ USВВ1m
честер. Для ero ПОllКЛючения должен быть заrpужен модуль usbst.orage.
Создадим 1G'lтaJ10r /mпt / image I! примонтируем к нему USВnинчестер:
# rтюdр,-оЬе usbstorage
# mkdir /mпt/imаgе
# mount /dev/sda1 /mnt/lmage
Все, 'ITO осталось сделать, это перемонтировать "орненую фаiiлоную
систему в режиме «только чтение» н создать образ:
# ЭУ!1С
#- П10tJЛt o remount, r'o !
# dd if=/dev/hdal ot=/mnt/image/image.biI1
Подробно онисывать утилиту dd не стану это очень хорошо сделано n
снравочноЙ системе. Скажу только, что кроме dd существует еще и YTH
Лlrrа ddrescue, "оторая при клонироnании пропус"ает плохие секторы
и делает максимально nозможную копию файловой системы. Для меня,
да и для вас использование этой УТИЛlIТы не актуально недь нинчесте
ры меняют минимум один раз в ron, ноэтому не думаю, что у Аас будет
«битый» винчестер.
268
rлщщ 7. QcWoSbl адмИНИСТрИрования систвмы
Теперь рассмотрим, как МОЖЦОIlрс.стзновитьсиcreму. Для восстановления
системы вам понадобllтся,заrpУ:)О1DlЫЙ Jtомпакт-диск Linux. Подойдет
первый /ЩСК любоrо дистриБУТlша,даже иесовмеСТlIмоrо с вашим. Если
вы ИСПOliЬзуетеИе LiveCD, апроcfой заrpузочный диск, для перехода иа
текстоnyIO кОнсоль пажмите Ctrl + АН + F2. Подмоншруем наш Вlfеш'
НИЙ винчестер:
# mkdir /image
# modprobe 'usbstorage
# mount /dev/sdal /image
Теперь на новом винчестере иужн() создать разделы. Это можно сделать
с ПОМощью утилиты fdlsk Или с п6МОшЬЮ nporp1lМMbl установки как
вам удобнее. Если же вы восстанавливаете систему после сбоя, ничеrо
создавать не нужно все уже создано. Не забудьте только создать раздел
подкачки (тип раздела /t1ev l!!da2 должен бытЬ Liпuх swap):
# mkswap /dev/hda2
Теперь разрерllем образ (обратите'внимание на параметры if и of про
траммы dd на этот раз их арryмеиты поменялись местами):
# dd if=/image/ image. Ып of=(dev /hdal
Сейчас нам нужно II3меИlfrb корневую файловую систему, чтобы попасть
«внутрь» развернутоro образа:
# mkdir /install
# тount /dev/hdal /install
# chroot /instal1 /bin/bash
Тсперь корнем стал каталоr /install, к которому примонтировзн новый
винчестер, а в качестве КОМalIДИОЙ обоЛОЧIOlIfСПОЛЬЗУется /bin/bash.
Все, что нам осталось сделать это пере записать заrРУЗЧftк. Если у вас
LILO, введите команду:
" li 10
А если GRUB:
# grubinstall /dev/hda
Теперь перезатрузите компьютер (reboot) ваша система успешно BOC
становлена после клонирования.
269
rлава 8
язык
КОМАндноrо
ИНТЕРПРЕТАТОРА
ПАРАМЕТРЫ
ПОДСТАНОВКИ
МАССИВЫ
УПРАВЛЯЮЩИЕ СТРУКТУРЫ
УСЛОВНАЯ ПОДСТАНОВКА
ПАРАМЕТРОВ
ФУНКЦИИ
ОБРАБОТКА сиrнАЛОВ
И ПРОТОКОЛИРОВАНИЕ
LINUX ПОЛНОЕ РУКОВОДСТВО
Для автоматизации часто выполняемых работ по обсдуживаflИЮ системы
вам понадобится объединять команды в Сl(енарии. С простейшими cцe
нариями, обеспечивающими посдедовательное ПЬПIолнение перечислен
ных команд, вы уже познакомИJlИСЬ в rл. 3, Уточню только, как система
обрабатывает сценарии. Она ищет в первоЙ строке фаЙла сценария
выражение
#!/абсолютный/путы/l/роrраммеl/нтерпретаторуl/ценария
и передает сценариЙ еЙ на обработку. Как правило, эта проrpамма ЛJiбо
одна из установденных в системе оболочек (например, #! Ibi!1/tcsh),
либо один из интерпретирующих языков (#! lusr;bir1/perl), либо ваш
собственнЫЙ интерпретатор: 11! /usr /bin/my.....Program. Если сценариЙ
преДflaЗflачен для обработки оболочкоЙ sb, то ее ИМ>I указывать необяза.
тельно. Между символаrn # и ! не должно быть пробелов.
Чтобы непосредственно запустить файл сценаРИ>I на выполнение, вы
должны иметь полномочия на исполнение зтою файла. Если он доступен
вам только для чтения, выполнить ero можно командоЙ
s /проrрамма/обработчик .f <имяфайла>
Эта rлава посвящена языку проrраммирования, встроенному в оболочку
bllsb.
Базовыми операциями этою языка служат рсе установленные в системе
проrpаммЫ, ytилиты и сценарии. Оболочка находит их, запускает, обе-
спечивает передачу им артументор, а результатов их работы дру'
rим проrpаммам и пользователю, выполняет подстаиовку переменных и
раскрытие шаблонов. Кроме тото, оболочка содержит операторы цикла
и условиые операторы, в результате че['о получается мощный язык про
rpаммироваиия.
271
LINUX: полное РУКО80ДСТВО
8.1 . Параметры
Вместо переменных, как Jj обычных языках проrраммирования, в basb
используется понятие параметра. Именем параметра может быть; слово,
СОСТОЯlllее из латинских букв, цифр и знаков подчеркивания, начинаЮlllе-
еся с буквы; число; один из специальных символов; ., @, #, 1, $, !, О, .
Тип !!сех парамеТР08 СТрОК08ЫЙ. Если параметру присвоено значение
(хотя бы пустая строка), то rоворят, что он задан IИИ установлен. Чтобы
сослаться на значение пара метра, нужно поставить символ $ перед ero
именеМ:
$ echo $О
bash
Парамстры лелятся на:
· Ilеремепиые оболочки Q них рассказано в п. 3.4.3;
. поЗИЦИонные nирамстры их Щ4ена предстаВJlЯIOr собой натуральное
число, а значщшями служат apryмeнты с соответствующими номера-
ми, начиния с 1, передаНlIые сцеаарию I!ЛИ самой об0l10чке при их
запуске;
. спецнальные параметры их именами служат перечисленные спеLЩ-
ильные символы, а назначеЩlе сведено в табmщу 8.1. Эти параметры
шаблоны, подстановку которых ПРОI\З80ДИТ оболочка.
Специалt..ные переменныв
Таблица 8. ,
НВЗВlJIoJме "одет.нов1t8
$0 Имя Ш>lПОЛ\i,;LемоrQ сценарQ (ИSJк' 11 интераJcrИJ3.НQNI PIЦI:IoIMв, самой 060Лt)'-II(И)
$. Ко.J1ичea1lO ПО3ИЦ1ll()ННЫХ. naрвм&тров. ""PeдilHHbl:ll: СЦtНЩ»tЮ
$ Последнийарryмент пt:l&J:l.ыдyщr;lЙ И3 SЫПОЛНЯ8Ши.хся команд
$7 КОД зазршени ПQCnE'lДНЙ выпол.ненНt;I" KQMt\HAbf (НРЛОМИНSЮ, ЧТО 3НЕNение О
rOBopVlT об 'УСП&ШЖJМ з.fiВepulени",. дpyroe 06 ошбс.чном)
$$ Номер тек:ущеrо процесса (PlO)
$1 HQusp (PtО)ПОСflIЩнsrо асин)фQИНОro ПРОЦ"C<I (KQMaHnbI, 8ЫnОllНЩiНОЙ
в фоновом режиме)
Вс.в позиционные параМвтры, слитыe в О,цну страху: ..$. ЭКВИ8QJ1енrно
$' ..$' x$2x",$n.., rдe )( первый M80п 3Н3.'1еtiия ПерйМQМНQИ IFS
(lnlern81 fiafQ separatorl, "О уМОЛН""''''''' пробел
$@ Всв позиЦионные пвр8мв'ТрЫ, подпе*ЗЩИ8 дальнеwему разборv:
..$@. Эkl:виеапентно ..$1.. ..$2" "....$""
Напоминаю, что специальные символы в значеНIIЯХ парамеТР08 HYJКl\O
экраНllровать. Экранировать одиночный символ МОЖНО символом «\»
(обратный СЛЭlll), несколько апострофами IIЛИ двойными кавычками.
Разниuа в том, что внутри двойных КЗВЫ'lек выполняются подстановки
значений: сравните вывод команд есЬо '$0' 11 есЬо "$0".
212
rлва 8. Язык КQМ2ндноrоинтерпретзтора
ОрraИlIзоватъ ДIIалоrовый ввод значеНJlя'переменной можио с помощью
встроенной команды l"eac!:
echo n 'Продолжать? (у/пl: .
read yesno
echo $yesno
Ключ n команды echo не выводит символ новой строки в конце co
общения, то есть не переводит строку. Команда read читает зн!iчеиие,
l!Беденное ПОJIЬзователем с клавиатуры, и записывает ето В переменную
yesno. ПоследНJIЯ команда выводит Т01lЬKO Что введенное зНачение.
Одной командой ,read можно ПРОЧlIтать несколько перемеIIНЫ:
read пате middle lastname
Пользователь должен ввести значения переменных, разделяя их про
белами, 11 для окончания ввода нажать <Ввод>. Если введено меньше
значеиий, чем нужио, остаВ1IlИМСЯ переменным будет присвоена пустая
строка. Если больше, то весь остаток строки будет присвоен l1оследней
из перечисленных переменных.
8.2. Подстановки
Кроме nОДC'tановки обычных переменных (п.3.4.4) 11 раскрытия mабло
нов имен файлов (п.3.4.5), оболочка bash умеет ВЫl10ЛНЯТЬ еще и такие
подстановкп:
+ Подcrанов\<а ТИЛЬДЫ:
заменяется на ИМЯ домaurнеrо ка'fЭ}lоrа пользователя,
зanyстившеrо сuенарнй;
+ заменяется на путь к текущему каталоrу;
заменяется на путь к предыдущему каталоту.
+ Раскрытие скобок:
строка 1[ строк а 2 , строка 3...) стр ока N заменяется на:
cTpoKalcTpoKa2cTpoKaN CTpoKalc'rpoKa3cTpoKaN ...
Пробелов внутри скобок быть не должно. Эта функция полезна, котла
нужно применнть одну команду к нескольким файлам, не 110ДХОДЯШИМ
ПОД оБUUlЙ шаблон:
$ cat /hоmе/dеП/liпuхЬооk/{iпtrо,раrаm,suЬst} > glava8
. Подстзновка арифметическm: выражений:
$ ( (выражение» или $ [выражение] эквивалентные фор/dы
З3I1ИСИ. Внутрн выражения ВЫI1ОЛИЯЮТСЯ подстановки l1apaMeтpoB.
Приоритет арифмemчсских операций обычный, подробнее см. тап
bash, сеКЦI!Я ЛRlТНМЕТ]С EVALUAll0N.
273
LINUX: полно<> Р\'1(()ВОДСТII(j
Например, количество.часов, прошедшее с момеита запуски оболочки,
можно подсчитать командой:
$ echo $( $БЕСОМОВ/3600 ))
8.3. МаССИВ"'1
Интерпретатор bash поддерживает одномерные массИQЫ с неоrpаничен
ным числом элементов. В друrих оболочках СУЩC'l'Вуют определенн:ые
оrраничения на массивы, например, в kshмаксима:льное чйсло элементов
маССива оrpаннчено 1024 элементами.
Нумерация элементов начинается с нуля. Тип элементов массива, как и
тип параметров, строкоnый. Присвоить .значение элементу массива можно
с помощью такой J;:ОНcrpукции:
ИМямаССИБа[индекс]значение,нanример:
$ wееkdау[О]Понедельник
$ wееkdау[4J=ПЯ1'ница
Обратиться к значению ЭЛемеНТа массива МОЖно следующим обра:юм:
$(имямаССИБа[индеКС]J
Например, вывести значение первоro злемента массива можно так:
$ echo $(weekday[O]]
Обраl1lТЬСЯ ко всем элементам массива сразу можно с помощью одноrо
из выражений:
$ (имямассива [ *] ) ми $ {I1Мj'[массива [@ ] }, наПрlfМер:
$echo $(weekday[*])
Пон:едеnЬНJ1К ПЯТНИЦа
Второе выражение НУЖНО ,iсполъзоваrь, есЛи значение Хотя бы ОДНОro
элемеНта массива может содержать пробелы.
Можно инициализировать массив целиком: команда
$ weekday (ПН Вт Ср '11' Пт Сб Ве)
эквивалентна списку
$ weekday [() 1 ПН; weekday [1] =В1'; ... wееkдау [6) Bc
Эти способы инициали.зации массивов MOryт применяться каК в bash, так
и в ksh и в друтик командных оболочках. А следующий способ работает
только в bash:
$ holidays" ([O]=Sunday [6)Saturday)
274
rЛRВ8 8, Язык KOM8HMoro интерпретатора
8.4. Управляющие структуры
Напоминаю (п.3.4.7), что список команд это одиночная команда, кон-
вейер ИМI последовательность команД/конвейеров, разделенных о,цfПlМ IIЗ
операторов: ; && 11, завершенная т()чкой с запятой. Не забы:nаilте ставить
точку с запятой даже после однночноЙ команды, терять ее типичная
ошибка начинающих проrраММIIСТОВ.
В синтаксис следующих команд квадратные скобки ие входят: оии orpa-
ничивают необязательиые выражения.
8.4.1. Условные операторы
Оператор варианта сзsе
Lи итаксис:
case ЗНаеНИе in
[шаблоНl} СПИСОКl,;
шаблон2 I шаблонЗ) список2,;
esd..c
Ищется первый шаблон, совпадающий со значением. Если он наЙден, то
выполияет"я "оответствующий ему список команд, завершенный двумя
снмволами <9'. Шаблон и список разделяются символом «)>>. Одному
списку команд может соответствовать несколько шаблонов, Torдa они
ра:щеляются символом «1 ».
в шаблонах MorYT использоваться метасимволы " ? и [ ) (о подстановке
метасимволов сказано в п.3.4.5). С их помощью можно орrанизовать ин-
струкцию, действующую как default в операторе 5witch языка С.
Порядок сравнения шаблонов со значеlшем не определен. Первое со-
впадение прекращает дальнейшее сравнение и nPllВОДНТ К выполнению
соответствующею списка команд 11 выходу из структуры case ловеде
ние, больше похожее на поведение оператора case в языке Паскаль, чем
на switch в языке С.
Листинr 8.1. ПрИМQР испОЛЬЗ0ванип опеl1зтора cas.e
есЬо "ошибка, Кому переслать протокол?"
echo rfНачал:ьнику Ь"
echo иКоллеrам: с"
(:'cho .Сам разберусь: апу key'"
read answer
саэе $answer (п
bj В) mail s "error 10g" boss ..-.: erTor" log;;
275
LlNUX: полное РУКОВОДQПЮ
clCI mail a 'Help!!! errpr,log' c ivn den < error.log;;
*) есЬо NOK. Exiting; exit;;
еэас
Обратите ВНlIмание на аПОСТpQфl>ll\есто кавычек во втором списке: они
экранируют подстроку «I!» от подст<\Цовки предыдущей команды.
УСПОВНЫil оператор 11
Сlllпаксис:
if списокl then
список2
[elif список3 then
СI1исок4J
[е1ее
сI1исок5]
fi
Эта конструкция работает так же, как в.друrих язЪЦtU ПpQrраММИpQваШIЯ.
Сначала выполняются KOM<JMbl JI3 СIщскаl. Если этот список выполнен
успешно. то есть с кодом завершеНIIЯ О, то выполняетСЯ СЛИСОК2, если
нет то список, стоящий после очередноro elif. При невозможносТII
выполнить список комшJД, стоящиЙ 1J(jсле очередlюrо then, выполняется
список, стоящий после eJse.
Можно ИСПОЛЬЗОllать сокращенный вариант, только iНhеп-fl:
$ if i $? -пе О ]; then echo .Ошибка. Смотри протокол.; fi:
Оператор tes1; и YCnО8н",е выр-.еНИII
В вышеприведенной команде вместо ;ulaщtЗа кода завершения СПllска ис-
пользована проверка УСЛ(jВIIЯ. две ф"рмы такой пр(jверЮl эквивалентны:
Встроенная команд;!. test и [условие}. Например, ддя проверКJ\ существо'
lIан"я файла /dОЖJ!О написать
test E.' <фай-'1>
"ли
r -с <файл> ]
ЕCnll ВМесто cnolla test используютсsr квадратные скобки, 0111. обязательно
доджны бьrrь отдеЛеНЫ от apryMeНТ08 пробелОМ. потому что 1111 самом деле
(ф, это наЗllание команды, 11 «J» обязательный последний арryмеит
этой команды.
276
rлввв 8. Rзык комвндноrОИ>IТерnретатора
в СJlучае IIСТННИОС111 условия команда test возвращает код успеmноrо за
!lершения, то есть о; в случае ЛОЖНОСТII код ошибки 1 (не спутайте с
оБЫЧНЫМII языками проrраммирования, rдe 1 JIpyroe имя для true !).
Команда test может проверять и СТРОКУ на ПУСТОТУ: непустая строкв счи
тается выполнением условия 11 ПРИ!lОДИТ к коду завершення О. Пример:
$ test $USER; echo $?
О
$ test $VARnotset"'yet; ес!lO $?
1
Условиые выражения можно комБИНllровать с помощью обычных лоrи
чееких операциЙ:
. ! (выражение) отрицание;
. выражение1 a выражение2 лоrическое И (aпd);
. выражение1 o выражение2 лоrllчеекое ИЛИ (or).
Элемеmарные условные выражения перечислены в таблицах 8.2 и 8.3.
Поллый список "Х МОЖНО 1I0ЛУ'IIIТЬ по команде help test.
Основные условные 8ырtiжения для файлов
Таблица 8,2
.
Выражение И<стмнно,еспм
.dФл Фа" f;VЩ(:l'вует и Sll;!пяется IC.aTMoro,,",
-е файл файл существует
.f фi1иn фaйJI СУЩйС1syет и ЙВJlЙТСЯ обычным фilЙnом
.L файл файл существуе-т и являетс.я символической ССЫЛКС1Й
., фаЙЛ файл СУЩQСТ8ует к доступ@ндлячтения
w ФаJI файл сущеС1"t'lует и доступен д.nя записи
0)( файл фаDin cтвyeT и яв.nявп;;SI исПолняемым
:. файn фi.\ЙЛ СУЩеС1вует и eto рэ.зМер 6oJlbl1Je О
N файл файл существует и зМеНИnСQ со вpeMeH Посnеднеrо "I11»IИЯ
файл; nt файn2 BP&MQ модификацм., файла 1 nаэже (newer than), чем файпа2
фапl o! файлZ время модификации файла1 paмbW8 (older than), чем фm:\Лв2
файл 1 ef Файл2 ci1Aйл1 ЗТD Ж9СТЦЯ ССЫЛКа.На файл2
Элементарные УСЛОIЖЫЭ выражения для сраВl10l'iИЯ строк
Та6лица8.3
Выр".ни. ИСТИNНО 1 ecl1М
-Е CfPOK8 дпИН8 CTPOI( равна О
.П ОТР(ЖЗ дnина СТрОКИ не равно О
с:тр1 С1р2 crроки !:оsnвдаюТ
стр 1 ' стр2 строк", не соеnадзют
стр1 < стр2 cтp"Ou1 предшествует строке2 в nQ\l:СИj(оrраф\.1'1еском ПорАДке.
Апфвеи.., СООТВErrСТВУ9Т текущей локали
(о'ТР' > стр2 cтpOIQl 1 следует 3& строкой2 в леl(:Иk(}tpQфИ"lОСICQМ nорядre
277
UNUX: полное рУКОВОДСТВО
Арифметическое УСЛOl>нос DЫРЩКСJЦ!II IIмеет формат argl 01' arg2, rде
argl и arg2 целые числа, а 01' одна из операций:
. -eq равно;
. -пс не равно;
. -It меньше;
. -Ic меньше или равно;
. -gt больше;
. -gc больше или равно.
Таким образом, можно переписать npедыдущий пример с использованием
оператора if:
Листинr 8.2. Пример использоваНия оператора if
echo "ОшиБКа. кому переедать протокол?"
echo ННачальнику: b
echo вКоплеrам: с"
echo "Сам разберусь: аnу key"
read answer
if t ....$answer tf :::::;:: #Ь'" o "$answer..... == ив" ]; then
mail з "err6r 109" Ь6зз < error.log;
e1if [ ""$answer H == "с'" o "$answe:r H == НС" ]; then
mail з 'Help!!! error log c ivan de:n < error.1og;
е1ве
есЬо QOK. Exitihg H ; exit;
fi
8.4.2. Операторы цикла
Командные инте.рnретаторы bash и ksh поддерживают ЦИКЛЫ ТИпа for,
while, "пщ н seJect, а интерпретаторsЬ только цИКJIЬ[ for и while.
Оператор цикла с перечиспением 1о,
Сннтаксис:
for nеремеаная [in шаблон]
ао
список
done
в результате подстаНОБКИ шаблона получается СПШ:<)К СЛОВ. ПеремеШIЗЯ
получает значение первоro слора из этоrо списка, и выполняется список
команд. стоящий между do и done. Затем переменная получает значение
278
rлзва 8. ЯзЫК KOM8MHoro интерпретатора
очередноro слова из списка слов, и снова выпOJПIЯется спиоок команд.
Повторение прекращается ПО исчерпан!!и слов в СПИСКе. Отсутствие
конcrpукщш [in шаблон] эквивалентно записи in $@.
Список слов можно сформировать и вручиую:
$ for day in Мол Тие Wed Thl1 Fri; ао echo 'План работы на
$day:*; cat $day_plan; допе
Еще раз напомню, что любой СШIООК в bash нужно заканчивать точ:кой
с запятой.
Пример использования цикла с перечислеllием: допустим, у вас не хочет
собираться некий проrраммный пакет 011 раССЧIIТЫВЗЛ. что имена заrо-
ловочных файлов внекотором каталоrе liмеют раСШирение .Ь, а у вас они
тзкоrо расширения не имеют (установлена друrая версия библиотеки).
При этом содержание ЭТIIХ файлов ero устраИВает. Так создадим СиМJЮ-
лические ссылки, чтобы он нашел заrОЛОDКИ по знакомому имени:
$ са /nyть/к/каталоry/iпсludе
$ for пате ill '; ао 1" з $пап:е $пате. h; дО!1е
Оператор цикла с усповием while
Синтаксис:
hile сnисокl
do
сnисок2
done
Оператор выполняет список111 в случае ero успеШllоrозавершения (HY
левоrо кода возврата) список2. Процедура повторяется до тех пор,
пока результат выполнения списка1 не станет lIенулевым. Например:
$ i=10
$ wh11e [ $i gt о ]; ао
> echo $1...
> i=$«$i1))
>done; echo IBANG!!!'
$
Примечание
ei
ТОТ же самый обратмый отсчет можно реализовать и с помощью Цикла for, если у
вас устаНQзлеliа yrИJ1 seq. печатающая поспедоваtеЛЫ10с..'Ть (sequeпc$1 Ч,исе.п
с заданным шаrом:
$ for i in 'seq 10 1 О': do cпo $i...; dona: echo 'ВANG!J!'
279
lINUX: полное рУКОВОДСТВО
OnepaTQP ЦИl<lIа ",н"'рсным уловием until
Синтаксис:
until Сl1исокl
do
список2
done
Оператор выполняет списокl И, еCJtи он ВЫПОЛНен неуспешно (КОЛ воз
врата ненулевой), то выполняет список2. Пронедура повторяется ЛО тех
IIОр. пока результат 8ыполнеllИЯ спискаl не станет нулевым.
Оператор ЦIIII<lIII !; IIыбором select
Синтаксис;
select переменная [in шаблон]
с10
список
done
в результате подстановки шаблон!). nается CIll!COK СЛОВ. К этим словам
оператор добавляет порядковые номер;! н выводит весь набор в стандаршый
поток ошибок (stde"). Если шабдоноцущен, то вместо нею используется
список IIОЗИШIOНIlЫX параметров $@. После этоro оболочка выводит при
rлашение и считывает строку из cтaндapтHoro потока ввода (stdill). Если
строка содержит номер, COOl-ветствующиЙ какомулибо слову из спнска,
то переменная получает это СЛОВО в качестве значения. Если в строке ПОЛ
ходящеro номера нет, ТО значением переменноЙ становится пУt'Тзя t'Трока.
После этою выполняется список команд, и процедура повторяется до тех
пор, пока в строке ввода не вcтpeпtТCllCИМ1IOл конца файла (Ввeдlпе Orl+D)
ИЛИ пока в списке команд не ВС"fpeТitТCя команда break или return.
Этот оператор полезен для создания нумерованных ПУНКТОВ меню. Наnpи
мер. у меня в каталоrе /temp есть три файла: proto. txt, fi1e. txt
и README. В ЛИСПUltе 8.3. ПРlшеден фраrмент сценария, ПО3ВОЛJlющеro
быстро просмотреть любой из них.
Ли(;;тинr 8.3. Прt1мер испопьэоsзниS1 оператора seloct
echo 'Выберите файл ДЛЯ просмотра:*
select file in /temp/' Quit;
do
if [ E $Е11е ]; then cat $file;
else break;
f i
dor!e
280
rлава 8, ЯЗЫk KOMaHAНoro нтерпретатора
Запуспm этот сценарий, я увижу на экране:
Выберите файл для просмотра:
1) /home/den/temp/file.txt
2) Ihome/den/temp(proto.txt
2) (hame(den/ternp/README
4) оиН
#?
ПоследlUlЯ строка это приrлашеюtе, уcrnнавливаемое переменной
окружения PS3,
8.5. Условная подстановка параметров
Условная подcrановка позволяет проверить, установлен ли определен'
ный парnметр, или использовать BMecro ero значения друrое. Значение
caMoro параметра при этом не изменяется. Допустимые виды УСЛОВНЫХ
noncтatlOBOK перечислены в таблице 8.4.
УСЛQВНая подстановка
Таблица 8.4
КtЖстрyкцIOl B,",nl)nНJIe, ""дст.ноеку
${nараметр;.строш) 3начениl3 по умолчанию. Если парвметр имеет неnyстое знзчение,
ТО ПОДстuляется ОНО, мна'-!е указанная С"'рotta
приsaние значения по умопЧ8НИЮ. Ес.пи лар,аметр Не имеет
$tnBpaMsтp:=CТPOKa) HenycfOrO знаЧ0НИЯ, 10 ЕМУ ПР"t:ваивавtСА ..сrp(Жа... noc:tle че:tu
3К8'tElние ПОДС1а911А&ТСЯ. Консtрукция дonvcтима ТОЛbl(D ДnA
nеремекных оБОЛQЧКIII
SlпарамвТр:?<:о06щвНtIIВ} оwибtli, QСllИ пусто. t:сnИ naра,меТр не "M&&f HM\jc'toro ЗНI.l>«;fНИ.Я,
ТО 8Ы60ДИТСR указанное сооl5Щettие. Сообщение можно опycn.tn.,
тorAa ()удет выреДено стаНДаpТttОйоl;106щеИ\>!i;I;
S(паримеТр:+СТрОlCа) ДОПOl1tщ1"8ЛЬНое ЭН8ченVl8. Если naрамеТр имнет непустое энаение,
подстаапяется ..с.трока-, наче пустая строкв
$(параметр#ша6nон) ПОДСТ8ВЛЯ8ТСА значение параметра, 11; котором ИЗ rолоsно части
удацвн наиманьший фраrМQНТ. УДОвтilтВОрRЮЩ\llЙ щцблону
$(rlарамеrp##шаБIlОНt ПОДСТЩJ1lетсй значение napalAetpa. fI !(.OTOpDM из rOI1ORНO части
удмеи tщмбоnь.ший фparмент. уA09Jtетворяющи ша6лону
${парамвтр%шаблон} Подсraaлйется значение nap8МSтра. 8 КО1рроМ И3 ХIЮСТОВОЙ <ta.CТИ
удалIJН НtlИМеньWИЙ фр8J"МQнt, VДQ8.fteПlQpA'ОЩИЙ шаблону
$lnapamst-р%%шitб1\ОН) ПОДСТВВn.IЮТСЯ Энltчение параме-тра. 8 котором 13 хвостовой чnсrм
vдален наибortЬШИtt фрarМ8НТ, УДОВliетеорS$ЮЩИЙ шwону
SIJtnapaMeтp} !:СПИ naрамеТр естъ' ИЛИ@, r'\ОДСТ8В.ni\IOтся КQЛИЧщ-:rво позиционных
парамвтрое, иначэ ДfI\o1Ha Н8''1fiI>lИЯ nщщмвтра В байтwt
Например, команда echo $ {О ,+"Моя любимая оболочка" }замеНIIТ
непустое знач;ениепараметра $0, равное «ЬаБЬ», на указанное дополни
тельное значенltе. Команда $ (1: ? "Не хватает параметра .} выведет
281
UNUX: полное РУКОВОДСТВО
сообщеНllе, если сценарий, в котором она встречается, будет случайно
запушен без арryмеитов. пршшлыщм подходом к написанию сценариев
было бы выводить не такое маllOlщформат!!виое сообшеиие, а краткую
справку об ИСПОllьзоваш!И этоrо сценария, подобную тому, что Можно
увндеть, запустив щ)чти любую команду с ключом usage.
Подствновки # и % полезны, например, тorдa, Korдa нужно «выкуситъ" IIЗ пол
ною пуш к Файлу coбcтnешю ero имя ИJЩ наоборот, родительский каталоr:
$ path='which twm'; echo $path ,
/usr/Xl1R6/bin/twm
$ echo $[path##'/}
tvт\
$ echo $(path%/')
/usr /Хl1Rб/Ыn
$
8.6. ФуНКЦИИ
Оператор определения функции имеет следуюший синтаксис:
[ funct j.on J ИмЯ ( )
{
СТН1сак
Определять функцию МОЖно в ЛlQб(!Ц месте сценария, НО вызов ее llOJlJl[eH
осушествляться cтporo после описаlП!Я. Вызывается Функция подобно
любой команде по имени. Переl!.пшые ей aprYMeHTbl в Теле функции
рассматриваются как ПОЗIЩJIOНщ,Jепараметры, причем в вызывающем
сценарии значеиия ПОЗИЦИОНflЫХ fIjlpaMeтpOB не меняются. Значение
ПОЗIЩИОIIНorо параметра О это имя фуtlКЦИII.
Вызов функции IIe пораждает НОВQf!:Jцроцесса, поэтому ей видны ЛОКaJIЬ
lIые переменные, установленные ВЫЗblВающим сцеflарием или оболочкой
до ее вызова.
Ошибка при выполнеиии ФУНI<lJ,Ии приводит к немелленному ее завер.
шению с ненулевым кодом вщврата. Есди вы хотите передать в коде воз
Bpa'ra собственное знаЧеtlие, пользуйтесь оператором return <число>.
Отсутствие числа или BCero оператора return означает возврат нулевою
:шачеIlИSl. Код возврата функциn помешается впеременную $1 n доступен
ло выплнения след'ющеЙ команды.
Если вы задумали фуtlКIПIЮ как «бlfблиотечную» (вызываемую из разных
сuенариев и в связи с этим онределенную в отдельном файле), то для TOro,
чтобы определить ее D текущем процессе, нужно не запускать ее файл на
выполнение, а ПРОЧlIтать ero встроенной командой souree.
282
rлаВ3 8. Язык комзнднаrо интерпретатора
8.7. Обработка сиrналов
и протоколирование
Обычно при завершении сеаНса работы пользователя система посылает
всем ЗЩJущенным им проиессам СI!rналы (п,3,3.2), которые приводят к
прекращению этих процессав. Возможно, вам понадобится обеспе'шть
своему сценарию возможность продолжать выполнение даже после oтктo
чеиия заПУСТИвшеrо ето пользователя. Torдa посланный сиrнал придется
перехватьmать и обрабатывать собственными средствами сценария.
Перехватить сиrная можно с помощью встроеННОЙ команды trap. Формат
ее следующий:
trap [lp] [команда ситнаJ1 сиrнап...]
Ключ ! ВЫВОДIП список имен и номеров сиrnалов, извеСl1tых в ОС Linux.
Ключ p выводит список команд, связанных с каждым сиrнадом. Сиrnалы
указываются по номерам IUlИ именам. приставку SJG можно опускать.
Команда эm та команда, которая будет выполнена оБОJ!ОЧКОЙ при по.
лучении сиrнада (ваш собственный обработчик). Если вместо нее указать
пустую строку, то перечисденные сиrналы будут проипюрироваl!Ы. Если
вместо сиrnалов указать EXIТ или О (фИКТИВНЫЙ lIомер), то команда будет
выполнена при завершении сеанса работы с оболочкой.
Чаще Beero перехватываются сишалы:
01 SIGHUP hangup, освобождение ЛИНИII связи;
02 SIGINT interrupt, прерывание;
03 SIGQUIТ quit, выход;
15 SIGТERM terminate, проrpамм:ный СИ1'Н3J!завершения.
Чтобы иrнорировать все эти сиrналы, введите "аманду:
$ trap ., 1 2 3 15
ПроТОКOJ1Ировать работу собcrвенноro СL!енария можно двумя способами.
Первый состоит в I!СПOJIьзовани!! комаНДЫ-фlUlьтра tee (п.З.4.6), Название
этой команды происходит от аиТЛI!йскоrо названия буквы Т. и действие
ее похоже на эту букву: она копирует данные из своесо стандартноrо
потока ввода и раздваивает их на стандартный поток BЫDOдa И поток В
указаНlIЫЙ фаЙл:
$ LOGFILE=rnylog
$ if [ . $l.OGGINGu == .true' J; then
> myscript I tee $LOGFILE; else
> rnyscript;
> ti
$
283
UNUX: полное PYК08OДТВO
Если вы собираеС:Ь.не вводитьэтн команды'нз КОi\.lандной строки, а
включить их в c:цeHal''.IpY script,:ro вызов сценария изнутри Hero caMoro
должен выrлядеть так:'
ехес $0
Встроенная команда ехес заменяет текущий процесс (то есть ТУ дочер-
нюю оболочку, в которой зanУщtщ сценарий) на выполняемую команду,
и сценарий, завершившись, возвращает управление прямо родительской
оболочке. Интерактивную оболочку (ту, с которой вы начинаете сессию)
подменить таким образом нельзя.
Если команде еХес не указан apryMeHT, но указано перенаправление 8ВО-
да-вывода, то eJl;ec совершает это перенаправление, продолжая выполне-
ние текущеro сценария. Таким способом можно получить динамическое
перенаправление:
$ r.ty
/dev/pts/2
$ echo .ВЫВОЖУ строку на терминал.
Вывожу строку на терминал
$ f:xec > log
$ echo .ВЫВОЖУ строку В файл.
$ echo .И эту в файл.
$ ехес > /dev/pts/2
$ есrю "А Э'ry снова на териал "
Д эту снова на терминал
$
Второй способ заКJ1Ючаетея в Щ:ПQJIЬЗ0ваИltll команды script, которая ко-
пирует в файл весь сеанс работЫ втекстовоЙ консоли: ввод пользователя
и вывод команд. это должен быть в полном смысле слопа сеанс работы в
командной строке: полноэкранные'команды, таЮIе, как редактор vi и даже
тап, оставляют в файле протокола мусор. Если вы запускаете команду
script вручную, то остановить протоколирование можно командой exit.
$ LOG"lLE=mylog
$ if [ . $j.,OGGING" == . true. J; then
> script myscript $LOGFILE; еlее
> юу script ;
> fi
$
Вызов сцеиария изнутри неro cBMoro должен выrлядеть так:
ехес script $0 $LOGFILE
Начать знакомство с чужими сценариями вы можете с инициализanион-
ных фаЙЛО8 bash /etc/bashrc и /etc/profile. Команда «.» (точка)
в оболочке sh 11 ее производных (bash, ksh), подобно команде source,
ознаЧает чтение и ВЫJIOJIнение коыанд из файла-арryмента этой команды
в текущем процессе.
284
rлава 9
УПРАВЛЕНИЕ
ПРОЦЕССАМИ
КАК 3АrруЖдЕТСЯ LINUX
КОМАНДЫ УПРАВЛЕНИЯ ПРОЦЕССАМИ
ПРОТОКОЛИРОВАНИЕ СИСТЕМЫ
ВЫПОЛНЕНИЕ ЗАДАНИЙ
ПО РАСПИСАНИЮ
LINUX ПОЛНОЕ РУКОВОДСТВО
9.1. Как заrружается Linux
9.1.1. Начальная эаrрузка: LILO и GRUB
Общие механизмы
Как известно, первая протраММа,к()торая выполняется после включеrfИЯ
компьютера, это ВIOS. Она нахоДиТ затрузочное устройство, считывает
в ПаМЯТЬ ето первый (нулевой) сектор и передает на ието управление. В
ЭТОМ секторе находится MBR (МШЕе' 1300/ Record) rлаnиая затрузочная
заЩfСЬ размером в 512 баЙт, в к()тор()й п()мещаются:
. первичный зarpузчик;
. таблица разделов диска (PartiJj(ilf ТаЫе) размером в 64 байта, описы
нающая четыре nерничных раздсла: Номера IIХ nepHoro 11 последнею
UIIЛИНДРОВ, ТlШ файЛовой системы и признак активности раздела;
. «волшебное число» (ОхАА55), rtредназначенное для пронерки, СJlУЖИТ
лИ данный сектор заrpузо'lНЫМ.
Формат MBR стандартен для всех операционных систем, а содержаиие
области, отведенной под перви'lНJ,lЙ затрузчик, может раЗJlичаться. ЭТОТ
'Затрузчик О'!еНЬ мал, поэтому перед ним стоит всето одна задача: наilти
на диске и считать в память код заrpузчика следующето этапа, развораqи
вающеrо уже саму операционную систему, и передать ему управление.
В ОС Windows 9х пеРВI1ЧНЫЙ заТРУЗЧllК передает управление на Боо!
RecQrd первый сектор тото первичното раздела, к()торый отмечен как
активпый (ЬаощЫе такой может быть только один). В более слож
ных системах из MBR запускается диспетчер затрузки (NTLoader для
Windows NT, LILO и GRUB для Linux), позволяющий выбрать варнант
заrРУЗКII И даже заrружаемую ос. Такую rибкоС1Ъ диспетчеру обеспе
'!IIвает возможность не оrраничиваться тем объемом данных, который
помещается в MBR, а читать необходимые данные из файЛов на диске.
Достиrается эта rибкость ценой зависимо.сти от файловой системы; cy
ществуют файловые системы (например, XFS и ReiserFS с включенным
режимом ОППIмизации дисковоrо пространства), с которыми ОС Linux
286
rЛ8еа 9. Управление процессзми
может работать, но arружа1ЪСЯ с НIlХ не может. Отдельный раздел /boot,
о котором rО130РИЛОСЬ в пJ.2.2 в связи с «барьером 1024 цилиндра", He
обходим еще и поэтому: на нем должна быть создана файловая система
ext2fs или ext3fs, а для всех остальных разделов фaitловые системы можно
выбирать произвольно.
Заrрузчик LILO
Стандартный заrpузчик Liпuх исо (L1пих LO",ler) состоит ИЗ двух
частей: перви'!ноrо заrрузчика LI и вторичноrо СО. СI располаrается в
MBR и только и умеет, >по заrружать СО, а тот уже передает управление
ядру или вызывает друrой первичный заrрузчик (напрамер, Windows
9х). СО находится в файле на диске (по умолчанию /boot /boot . Ь). О
фаl1ловbIX системах LI не знает, поэтому карта размещения этоro фай
ла хранится в ием в виде ,щилиндр/rоловка/сектор». Помещает ее туда
УТlI)шта /sЫп/Шо, которую нужно запускать [1Qсле любою изменения СО
или ero конфиrурационноrо файла / е t с /1 j..1 о con f.
У вторичноrо заrрузчика СО есть собственная карта раЗlещения файлоп
(по умолчанию /boot /тар). По ней он ищет заrружаемое ядро и образ
RИРТУальноro диска, поэтому после любоro изменеш1Я ядра илц заrружа
емых модулей тоже обязательно запускать упшиту Шо
'1m такое виpryальный диск? Представьте себе заrpузку Unux со SСSJ-диска
илн npyroro устройства, драйвер KOToporo не ВКОМП!L'шрован В ядро, а под'
rружается в виде модуля. LILO сможет найти и Ilро'!ИТЗТЬ с неro файл образа
ядра. Теперь ядру предстоlIТ смонтнровать корневую файловyJO систему.
Чтобы сделать ЭТО, нужно пQIUUIЮ'ШТЬ драйвер SCSI, а 'Iтобы I1айт!! драйвер
u / lib!modu1es, нужно смонтировать корневую файловую СИL'Тему.
Похожая проблема возникает при нервона'lдЛЬНОЙ установке ОС Нпих:
для работы инсталлятора нужиа файловая Сllстема со стандартными ути
JlИташ, а на диске ее еще нет. Обе проблемы решаются в Linux с помощью
технолоrии initrd (INlТia/ Raт Disk): вместе с ядром LILO заrpужает в
память образ cтapToBoro дllcKa, н ядро монтирует ero как обычную фай
ловую систему. В этой файловой системе находятся модули, необходимые
для работы с нестандартными ВllеlllllИМИ устройствами и сетью, и УТИЛlrrы
для их подrрузки. Подключив модули, ядро отсоединяет вартуальный
диск и монтирует настоящую корневую файловую систему.
Файл образа виртуальноrо диска обычно называется /boot/initrd
<версияядра>. Если нестандартных устройств у вас нет или их лрай
веры встроены в ядро, то этот файл для заrРУЗii:И не нужен.
Поведение LILO зависит от настроек в ero конфиrурационном файле
/etc/lil0.conf. Ниже при веде!! пример TaKoro файла. Сиrвол #,
как обычно, служит для комментариев.
287
LINUX: полное рУКОВОДСТIЮ
Листинr 9.1. Примврный файл !еtсjШо.сопf
# LILO version, 21.5
# Общий раздел
#
# использовать MBR nepsorQ жесткоrо диска nepBoro
# контроллера IDE
boot/dev/hda
#
# Карта LO
rnар= /ьооитар
#
# Файл вторичноrо заrрузчика
install=/boot/boot.b
#
# Режим для заrрузочных дискет. У меня закомментирован.
# compact
#
# РеЖИ VGA, normal 80x2S, ext 80х50
vga=normal
#
# Раскладка клавиатуры
keytabJe=/boot/ru4.klt
# Диск поддерживает реж;IЩ LJЗA. (Large Block Ассевв)
# трансJНЩИЮ
# физических ДpeCOB в лцiие так,
#" чтобы число ци:линдров:rн_ J:::J;p,евыша-ло
# понятных BIOS 1024. Друrое.значение этоrо
#- параметра linear. Не меняЙте значения', Быставленноrо
#инсталлятором. если вын.знаете ТОЧНО, что делаете.
lЬаЗ2
#
# Сообщение. которое выдается при заrрузке
message=/oot/message
#
# Задержка 5 секунд (В друrих версиях LlLO этот параметр
# называется delay)
timeout=50
#
#
#
#
#
Вывести message и npиrлатение
к выбору заrружаемоrо ядра на
timeout/l0 секунд, после которых
выбранное по умолчанию.
заrружается ядро,
288
rлава 9. Уnpaaлet<"'" npoцeccaм
# Если prompt Не установлен, добиться ориrлэшения
# можно, удерживая <Shift> Во время заrрузки.
prompt
#
# Цветовая схема
menuschemewb:bw:wb:bw
#
# Ядро, заrружаемое по умолчанию. Если не указано, та
# заrружается первое в списке
defaultFedora
#
# Список вариантов заrpузки, не более 16.
# В аждой секции варианта должна быть строка
# lаЬеl. ЭТО ИМЯ, которое ВВОДится в ответ на приrпашение
# L1LO или является командой меню и служит для выбора
# заrружаемоrо ядра или ОС.
#
irnage/boot/vm1inuz2.4.20 # ядро
label"linuxinjtrd # метка
initrd/boot/initrd2.4.20.img
rOot=jdevjhda6 # монтировать этот раздел как корне!,ой
теаЦопlу # режим монтирования / на время заrpузки
#
irnage=/baot/vmlinu".2. 6. 91. 667
label=Fedora
1Coot=/dev/hda2
1Cead.only
#
irnage=/baat /vmlin1Jz
label=failsafe
roat=/dev/hda6
append=" тет=64М failsafe" # параметры, передаваемые ядру
readonly
#
ol:her=/dev /hdal # ОС не Lin1Jx
label=WindowsXP # root не указывается
tcable=/dev/hda # rде находится табщща разделов
Если вы опреДeJ!ИДЦ сеlЩИЮ other/devlhdal, то 11 корневом каталоrе
раздела /devlhdal (писка С:) должен находиты:я IlТОрИЧНЫЙ зarрузчик. У
меня, например, на одном из компьютеров с мноroВ8рИ8Н'П10ЙЗarpy3IООЙ
там находIПСЯ NТLoader (поскольку WiпdоwsХРБЫЛ8 УСТЭИОllлена до
Linux), и LILO успешно заrpужает WindowsXP.
1(.1 30.:.388
289
UNUX: полное руководства
Команда append позволяет передать ядру необходимые параметры. Ее
формат:
append o ' параметрl [=значениеl] [ . значение2...]
{параметр2 [=Зl!ачениеЗ] [ . значение4...] . . . ] .
Значения разделяются запятой без пробелов, параметры разделяются
пробелами. Например, у вас eGТЬ устройство CDRW, которое вы до сих
пор использоваJШ как обыкновеlЩЫЙ CDROM, подключив ero как Se
cOJ1dary Slave, то есть /dev /hdd. Чтобы записывать компактдиски под
Linux, CDR W должен быть устройством SCSI, значит, это устрОЙGТво
нужно эмулировать. Команда выrлядит так:
append=' hdd=idescsi .
Не забудьте после каждоro IIЗмененWI конфиryрационноrо файла запу
стить утилиту Шо. Некоторые ее полезные ключи:
. - V показать версию LILO;
. ц по казать текущую картузаrpyзки;
. -( проверить Нl0 .соп! иа ошибки;
. -и удалить LILO. После удалеnИR вы сможете заrрузить Linux
только с внешнеro носителя (дискеты).
Если вы решили пока не удалять LILO, то при очередной заrруже систе.
мы вас встретит приrлашение LILO. Нажмите <Ввод>, чтобы заrрузить
вариант по умолчанию. НаЖМIПе <ТаЬ> для просмотра вариантов. Ино'
rAa на экран выдается только подскэ.зка:
L1LO
Чтобы выбрать ядро, нужно нажаТЬ клавишу «Shift», после чеro появится
подсказка:
LI "О boot:
и ТОJlЬКО теперь можно Нажать <ТаЬ>. Если ВЫ введете команду help, то
получите список всех команд LILO.
Чтобы за!'РУЗIIТЬСЯ в однопользовательском режиме (например, для вос-
станоnления системы после аварии), введите в строке приrлашения;
<меткавариаНта> single
Еслн ВЫ переустановили Windows, а Оllа заменила вам содержимое MBR,
то восстаповить ero МОЖIIО, заrрузившись с дискеты или компаь:т'диска
и введя команду 1 i 10. Таким же образом можно установlПЬ L1LO, если
при инсталляuии системы вы выбрали друrой диспетчер заrрузки.
Любопытно, что четыре буквы приrлашения LILO это отметки об
успешном окончании 'leTbIpex шаroв заrрузки. Если вы видите меньше
чстырех букв, то это значит:
290
fлааа9, Упрааление процессами
. L<xx> : перви'пlый заrpУЗЧШ:';33ПУСТllЛCJI, но не CMor зarpУЗllТЬ
вторичный. Дпузиа<Iное число хх ЭТО код ошибки. Обычно причина
ошибки аппаратный <--бой.
. LI : L! CMor зarpУЗIIТЬ ВТОРII'IIfЫЙ заrрузчик, но не cMor передать ему
управление. Причина: перемещеlПlе /ЬооС /ЬооС. Ь без запуска УТИЛll
ты Шо. Чаше nсеro это зиа'IИТ, что Вы удалили или добавили раздел.
. LIL : LO запустился, ио не CMor прочитать карту размещения
файлов, Аппаратный сбой.
. LJL? : W заrpузlU1СЯ по неправIШЬНО!У адресу. ПРИЧИlIа пере
мещеlIие /boot/boot. Ь без запуска утилиты Шо.
. LIL : испорчена карта размещения файлов. Причина пере
мещение Iboot/map без запуска УТИЛИ1Ъ11iIо.
+ Еше одноЙ причиной тобой из этих ОlПllбок может быть неправильное
указание I'еометрии Диска (иесовпадение ее с фактической).
3аrрузчик GRUB
Друroй известный диспетчер заrрузки это набирающий все 'большую
популярность GNU GRUB (GRal1d Unified 8ootloader). В дистри6УТИllах
Мапdrаkе и Fedora Core этот заrрузчик используется по умолчанию, хотя
" рекомендую вам СмеНИТЬ ето на провереННЫЙ временем LILO.
ORUB использует несколько ОТЛИЧНУЮ от LILO схему заrрузки. BTO
ричный заrруз'IИК хранится не в KaKOMTO файле, а в не используемом
системой пространстве. Обычно это вся первая дорожка диска. Если
места для ПОЛllоценнOI'О ВТОРllчноrо заrрузчика там недостаточно, туда
помешается маленький зarруз'шк промежуточното этапа, ..полуторный»,
состоящий из драйвера файловой системы и инструкций для вызова Ha
СТО>lщеrо, большоrо. вторичнorо заrpузчик:а. Блаroдаря такой орrаmrзации
(}RUB поддерживает большинство файловых систем (FAT 11 FАТЗ2, ext2fs
и ext3fs, ReiserFS, XFS, BSD FFS), понимает большинство форматов ис
f10лняемых файлов и не rлапное, но самое заметное для иаЧИJIающеrо
системноro администратора, IIЗменения в конфиryрационном фаЙле
встунают в силу сразу же, без прописывания ИХ в специальном месте
СПСL1иальной утилитой.
Копфиrурационный файл GRUB называется /boot / grub! grub. con С.
В мrnовенно устареваюших руководствах вы можете встретить друтое
название /Ьооt/gruЫmепu .1вс 110 это не страшно; этот файл
является символической ссылкой на первый. Пример такото файла при
"елен ниже.
291
LINUX; полное pyoeoдCТ60
Листинr 9.2. Примерныи файл /boot grub/grut,.conf
#boot/dev!hda
defaultO
fallbackl
tirneout5
splashimage{hdO,l)/grub!splaah.xprn.gz
hiddепrnеrш
title Fedora Core (2.б.91.б67)
root IЬдО,11
kernel Ivmlinuz2.6.91.6б7 to root/dev/hda2
initrd linitrd2.6.91.667.img.
title WindowsXP
rootnoverify (hdO,O)
chainloader +1
3акомментированная команда ЬооtУICазывает заrрузочный диск. KOMaH
да default roВОрl1Т, какая метка (title) будет заrружена rю умолчанию, а
fallback какая система будет заrpужена в случае неудачи. Команда
timeout указывает времЯ (в сеICУПДах) ожидания ввода команды Идll !lЫ
бора друrой операционной сиc'fемы.
Команда splashimage указывает; какой рисунщ, будет ИСПользоваН в
качестве фона. Если у вас что""fO не Jlадится с видеорежимом, закоммен
тируйте Это строку.
Труднее Bcero СМИРИТЬСЯ с тем, как GRUB именует жесткие ДНСКИ и НХ
разделы. Диски ОТСЧlIтываются йес буквы «3>', а с НуДЯ, а разделы не
с единицы, а тоже с нуля. Таким образом, раздел, который Linux именует
/dev /Ьдаl, а Windows С:, GRUB называет (hdO,o). Круrлые скобки
обязательны.
Команда rootnoverify нужна для HeLinux систем, а chaiDloader + 1 для
ОС, понимающих только «цепочеЧRУЮ заrрузку (MBR ..... заrрузочная
запнсь активноrо раздела). ЕCJlИВЫ зачем--то разместили Windows на
HeaKTIIBHOM разделе, откуда она сама заrрузиться не сможет, то комаНДе
chainloader должна предшествовать команда makeactive.
GR UB имеет rрафический интерфейс, но попасть в ero командную строку
всетакИ МОЖIIо: увидев меню ВТОрl!ЧНоrо заrрузчика, выберите курсором
нужную позицию Itнажмите <с> (нажав <Ввод>, вы заrpузите выбран
ную систему, HaJКaB <а>, вы сможете передать ядру дополнительные
параметры, а нажав <е> отредактиропать последовательность команд,
выполняемых при заrpузке выбранной снстемы).
Итак, вы в командной строке. Редактировать вводимые команды можно
в стиле bBsh: поддерживается автодополнение команд и путей к файлам,
пролистыванне исторни команд '1'релкаш «пверх» И «8НII3». Список всех
292
rпaBa 9. Управ.ени. процессами
доступных команд можно полу'/ить по команде help, а ПОЛУЧИТ!> краткую
справку о команде введя help <имякоманды>.
YcтaHoB/IТЬ диспетчер заrрузки GRUB (если вы не сделали этоrо при
инсталляции системы) можно командой /sbin/grubinstall /dev/
11da. Утилита grubiпstal1, как и все остальные компоненты GRUВ, co
держится в пакете grub, который можНо скачать по алресу http://www .
sisyphus.ru/srprn/grub.
Как установить rрафический фОН заrрузчика GRUB
MHOro интересных картинок, приroдных для установки в качестве фона
заrРУЗ'/Jfка GRUB, можно найти по адресу ht tp: // rusl ug. rutgers.
еdu/тсgrоf/gruЬirnаgеs/irnаgеs/wоrkiпgsрlаShimаgеs.Чтобы
не зarружать все эти картинки, можно просмотреть их уменьшенные изо
бражения по адресу http://ruslug . rutgers .edu/rncgrof/grub
j.mages/images, а потом уже заrрузить понравивщуюся картинку.
Выбранную каprинку поместите в каталоr /boot/grub и укажите ее в
директиве splashimage конфиryрационноro файла:
splashimage=(hdO,OI/boot/grubIimage.xpm.gz
Собственную картинку МОЖIIо использовать как фон для заrрузчика,
еСЛlI преобразоватъ ее в формат, nоддеРЖJJваемый GRUB. Преобразо-
вание выполняется УТIIJ1ИТОЙ convert, после чеrо карТIIИКУ нужно сжать
кошрессором gzip:
# convert myimage.png -colors 14 resize 640х480 щуimagе.xpm
# gzip rnyimage. хрт
9.1.2. Продолжение заrрузки.
Демон i"it
С момента зarpузки ядра npouecc начальной заrрузК/f системы идет под
управлением самой cllcтeMbl. Первой l1олучает управление процедура
автозапуска япра. Она определяет объем доступной оперативной памяти,
тип и быстролействие процессора, тип 8идеоадarrreра, переИНИШI3ЛИЗИРУет
жеt'Ткие диски, не полаrаясь на инициализаuию, выполненную ВIOS.
Это делается для Toro, чтобы выбрать из возможиых вариантов выпол-
нения ядром ОСИ08ИЫХ функuий оптимизированные имеино для данной
архитектуры компьютера, повысив тем самым быстродействие всей си
("темы. Здесь же определяется системная КОIIСОЛЬ, на которую выводятся
диаrностические сообшеllИЯ.
293
UNUX: полное РУКОВОДСТ80
Наконец, процедура ввтозапуска распаковывает заrруженный в память
образ ядра (на этом этапе вы видите сообщеllИе: ..Uncompressing Linux...» )
I! передает ему управление (<<ок, booting the kеrпеl»). Теперь ядро ини
циализирует таблицу страниц виртуальной памяти, устанавливает обра
ботчики прерыв8НИЙ, разбирает параметры, передашще ему диспетчером
заrрузки, и настраивается в Соответщвии с ними.
Завершив самонастройку, ядро создает несколько системных «процессов»,
фактически представляюших собой части caMoro ядра: планировшик
процессов, диспетчер виртуалЬИОйЩlМЯти, разлuчные обработчики сиr
налов ядра.
В списке текущих процессов, КОТОРJ>lЙ вы видели по команде рв e, эти
системные процессы взяты в квадрцтаые скобки. Один из них получает
идентификатор 1, OHTO и craнeт псщноценным пользовательским процес
сом, в котором будет выполняться код демона init. Этот демон запуcrит
ВСС остальные службы и ПрОЦСССЫ, ynраВ)Iяющие базовыми операциями:
напри!Уер, входом пользователей всиcrему.
Ядро МОlIтирует корневую файловую систему в режиме «только чтение»,
находит исполняемый файл демона ini! (в каталоrе /bin, /sbin или
там, rae вы укажете, передав ядру параметр init=/i1YTb1(init) 11 по-
сред<.'Твом CIICTCMHoro вызова ед:с(}эarpужает ero код в процесс номер
1, Все остальные процессы порож.дает init и ero потомки путем деления
с помощью системноrо вызоваfоrk(}.
ei 81J ' I"1!'ПI!:РI;It " lI
" Ядро покорно зanУСТИ . Т В качестве первопроц&Сса любую nporpaMMY, которую вы
укажеТе ему как Inlt:
LILO: .,:ylinux iJ1lt со /Ьiл/эh
Конечно, оболочка sh не запустит дРуrих ПРОЦЕСОВ, НО она предоставит вам
интерфейс f,:оМандtiой строки., 8 которой ВЫ сможеrе ВЫПолнить необходимые
ремонтные раБQТЫ.
Процесс init прочитывает свой конфиryращlOННЫЙ файл / etc I inittab
и запускает друrие процессы ооrласно указанным в нем uнструкциям.
В этот момент выводится ПРI!rлаmение нажать определенную клавишу
(обычно <1», чтобы войти в интерактивный режим, позволяющий за-
пускать каждыЙ процесс вручную или отказываться от TaKoro запускв.
Уровни выпопнения
Уровень выполнения (rult/eve/) это такой режим работы сиcrемы, n
котором разрешается существование только определенной rруппы про-
294
rЛ8ва 9. Управление процессами
пессов. В кажДЫЙ момент времени система находится на одном из уровней
выполнения (на каком именно, можно узиать по комаиде who r. Она
покажет таКЖе щачение предыдушею уровня).
РазрешеННЬJе на каждом уровне npoцессы указаны в фаЙле /etc/inittab.
Демон init заведует переключением уровней, остановкой запрещенных на
новом уровне процессов и запуском предписанных. В ОС Linux опреде-
лено:
. семь уровней выполнения, обозна'ще/.!blX номерами с О до 6;
. особый уропень S илн s однопользовательский;
. уровни по требованию (ondcтaпd) А, В и С фиктивные: при "ере-
ходе на эти уровни запускаются приписанные К ним npoцессы, но
те>;уший уровень выполнения не меняется.
Термин "уровень выполнения» унаследован от тех времен, коrда система
была обязана проходить уровни последовательно, от низшеrо К высшему
при зarрузке и обратно при выключеиии. Сейчас их можно переключать
в любом порядке. Для переключения на уровень n нужно от имени су-
пеРПO.J!ЬЗО1j3теля ввести команду
# te1irlit- !1
Эта команда ПОсылает соответстнующий сиrнал процессу init (te/l inil).
Ее исполняемый файл представляет собой символическую ССЬUlку на
/sbin/init, так что вместо нее можно отдавать просто команду init.
Прll этом !je будет запушена КОПIIЯ процесса init: стаРТУЮш11Й процесс
первым делом проверяет свой PID и, если тот не равен 1, просто передает
сообщеНllе настоящему процессу init.
3аl1УСТIIВ все процессы, ПРИПllсанные к текущему уровню выполнения,
init засыпает до получеНIIЯ СllrНала О завершении дочернеrо процесса,
отключеlfИИ питаНIIЯ ИЛII требоваНlI1I переключить уровень. Torдa он
нросыпается, переЧlfrывает СВОЙ конфиryрационный файл и, если нужно,
выполняет записанные в lIем IIНСТРУКЦlfI1. Чтобы застаННTh ею перечитать
измененный вами letc/inittab, не дожидаясь трех вышеуказанных
событий, введите команду
# telinit, q
Важно понять, что уровень выполнения это проrpаммная абстракция,
аппаратура ни о каких уровнях не знает. Поэтому в разных реализациях
\jnux (разных дистрибутивах) одному уровню мотут соответствовать
ра:lllые конфиrурацни системы. Следующие уровни используются в дис-
трибутивах, основанных на Red Hat:
. о: Останов системы.
. 1: Однонользонательский режим. То же, что уровень S.
. 2: Мноrопользовательски/\ режим без поддержки сети.
295
UNUX: полное РУКОВОАСТВО
· 3: ПолнЬ!Й мноroпользовательс!ШЙ режим.
. 4: Не используется.
. 5: rрафическиЙ режим с Xll.
. 6: Перезаrрузка.
В однопользоватещ,ском реЖlfМе иикu:ие службы не стартуют: только
rрузится ядро, монтируется корневая файловая система и запускается
командный интерпретатор. На этом уровне не нужен даже файл /etc/
ini t tab, повреждение Koтoporo oHI!.'iaeт невозможнocrь заrpУЗIIТЬСЯ на
любом друтом рабочем уровне. ЭТ<;>туровень обычно использует адми
НIIСТратор ДЛЯ аварIfЙНО'ВОССТЗ!lОВ!.n'eльных работ.
Неиспользуемые уровни можнозаНi!ТЪпод свою собственную конфиrу
рацию служб, собранных для КОЮСpl!ткой задач}..
КонфиrypаЦИ\JНК"'Й фа!!п /etc::;inittab
Первая незакомментированная строка этоfO файла определяет уровень
выполнения по умолчанию, то есть'l'ОТ,В котором стартует система, еСЛI!
в процессе заrрузки ядру ие УlG\Зано иначе. Эта строка выrлядит как
id:3:initdefault
Обычно 8 качестве уровня ПО умО)Щщшю выбнрюот 3 (полнофУНlЩио
нальныЙ мноrопользовательскIfЙ тексто!!ый режим) ИЛИ rpафическIfЙ 5
(запускается Х Window и выдаетсll rpафическое приrЛilШение для входа в
систсму). Если оставить полс уровНЯ IIyСТЬШ, 10 init переспросит зна'IСl/ие
в процессе заrрузки. Если указать В. Цоле уровня несколько значений, то
сработает нэлбольшее. Уровни О (ОсТанов) н 6 (перезаrрузка) указывать
нельзя.
Следуюшие строки и",еют формаr:.
идентификаТОР:УРоВНИВЫПолнепиа:действие,залускаеМblЙпроцесс
· Идентификатор это у:ни.кальиая последовательность из четырех
символов (и старых дистрибутивах двух).
. Уровнивыполнеuия: перечень уровней вЫполнения (номера без
каких'либо разделителей), ДЛЯ KOTOpblX будеl' ВЫПОlIнеио указанное
действие. Например, значение 2345 требует выполнить действие на
уровнях 2, 3,4 и 5. Здесь можно указывать также уровни по требова
нию (olldeтalld) А, В и С.
. Действие: однр из действий, перечисленных в таблице 9.1.
. ЗlIпускаемыйпроцесс: процесс, над которым IlРОИЗВОДИТСЯ деЙствие.
Это может быть исполняемыЙ фаЙл или СllенариЙ.
296
rJlaBa 9. Управление процессами
ДеЙСТ8ИЯ НМ пpIJцессами, задаS<'JЕ.1МЬ;€ в фаl4ле /efc/inittab
Таблица 9, 1
Д 8Й сте мв Описаие
Jespawn В сnучае эааершв"iИй процесс буде; перезаnYЩ9Н
waJ! Процесс БУД9Т запущен flJ»I nереlUlючении на flюбо З указаННblХ уровнвй,
и Inft будет )ф,81Ъ &ro З88еРUЩНИА
опсе При пвреКЛЮЧElНИ$ll нв любой из у!<ззаннЬ!)( уровней процесс будет запущен ТОЛоКа
ОАНа.>О<ды
boot Процесс буде'Т запущен во 8peM заrрузки системы, поле "уроВ#иsыполнения"
Иl'"норируеrСR
boot То же, <па и boot. но 'пп ждет эвSершеНИR прОЦСI;a
"" Не 8blnDnHl<et НИU'КИ)( деЙСТ8ИЙ
andemand Процесс ВЫnОЛНQ€rТСА в режиме по rpебоввнию, то есТЬ ан буде; ЭПуЩен
при перекпючении на уровни а, Ь или с
injtdefault Определяет ypoвel1bo sыпOJtНGНi-tЯ по умолчанию
$ysinit Процесс заПусКQeТСя. а.о время. з.аrрyз.t:.и CCleMtII ДО любых процссов.
ст.аРТVЮЩИХ черм. Mot или ЬО6twэ!1
Процесс будет запущвtt, КOfДа iIIсчеЗI1f1Т напряжение е сети. Естеста.внно,
pQWetwail ДnCl J:ОРректноGl работы этой записи нужен \о1СТОЧНlotk 6et:neребоЙНQrо Пiol10НИSZ,
ОТ KOTOporO система и ПОЛY'tИт уведомление об I'1С'i&ЗНDflеНiIIИ нanрuения;
Init будl'J1' ;сдаТЬ зааерwеки З1QП) nроцесса.
poweтf6'il То же. ЧТО и PQwerwatt, НО lnn,...e БУДRt ЖДlПЬ 8ерШен nрОЦео
powerokwait Процесс заП)'СkЗ,",ТСА ПО получении Jnit сиrнала о еосcrаf10влении пиТВнИА
powerfallnow Процесс запускаеТСА, коrnа источнмк бвсnеребойноrо пl'lт3ния подавт сиrнЗ1\
о том, ЧТО ero батареи почти разрАжены
процесс звПУСkaется при nQl1)''1вни Init СИI11am1 INT, посланноrо нажаntвм
ctrlnl1dAI КОu6инаЦ}!и kЛевиш Ctr!+Alt+Del. Обычно 310 ПрОЦ0СС ПереэаrРУЭКИ.
аЫi(JIючения или пер&)(ода 8 однопользоеаrепьсlCИЙ режим.
Процесс ЭЗПУСj(ается"1Ж nOl1)"iени Iпlt сиrнМ8. nOcтt4Horo нажатием
l<Ьfequest ..спйanЫ!{JЙ ком6инации 1(J'I39ИШ. Нззна'1ЮЬ клавишаМ С"$ц""а1iьнQ
значение можно с помощью утИЛИ1 ИЗ пакета kbd
Сценарий, помеченный действием sysinit, выполняется по время запуска
састемы, ОДllOкратно, пне зависиМости от 3аl1рошеl1НО1'О уровня. Затем
запускаются проuессы, помеченные действиями Ьоо! и bootwait.
На данном этапе заrрузки системы происходят следуюwие действия по
ИНИЦИaJШЗ8ДИИ, результат которых необходим на любом уровне RЫПОЛ
нения:
1. УстанаВЛИDается имя машины (hoSlname),
2. КОНфlll)'рИРУЮТСЯ параметры ядра.
3. Устаиавливаются раскладка клавиш и системный шрифт.
4. Активируются разделы подкачки.
5. Корневая система проперяется проrpаммой fsck. Если будут найдены
ОШllБЮI, которые невозможно исправить автоматически, будет запро
шен паролъ адМIПшстратора МВ входа в административный режим,
что равноценно переходу на уровень выполнеШIЯ 1. В ЭТОМ режиме
вы запустите проrpамму fsck с apryMeHТOM «1», который означает про--
верку корневой фаЙJlОВОЙ систеМЫ. После исправления всех ошибок
введите команду ехН мя IIерезаrpУЗКII систеМЫ. ЕСJШ проrpамма
297
UNUX: ПОПНОО рКОIЮДСТВО
fsck ошибок не обнаружила, файловая система монтируется в реЖ\iМС
чтение/запись.
6. Проверяются зависимосп\ модулеЙ ядра.
7. Выполияется проверка дрyrиx ФаЙJlОВЫХ систем.
8. Монтируются локальные файловые системы.
9. Включаются квоты.
10. Подключается (ие активизируется!) раздел подкачки. С этоrо мо'
мента система начинает испоЛьзовать раздел подкачки.
Дальше включается сценариЙ зarpузlШ, специфичный для запрошснноrо
уровня, и начинается разница между дистрибутивами.
В процессе развития UNIX -подобных ОС выделнлись две основных снсте.
МЫ инициализации (набора сценаР:\lзаrpузки). Одна была разработана
в рамках ос BSD (Berkeley SоftwаЛ} Ditribution) Калифорнийскоrо уни'
верситета, от которой nPОИЗОШJIибеt;:nлатная FreeBSD и коммеР'lеская
SunOS. Друrая применяется в классической System V от АТ&Т и ее по-
томках, среди которых UnixWare, lR1X, HP'UX и Solaris. ОС Linux заим-
сТВовала удачные решения с обеих.эвоmoционных ветвей, и в результате
часть дистрибутивов следует в ишщиализации стилю BSD (Slackware.
CRUX, Gentoo), а часть (Red Наt-подобtlые) стилю SуstсПl У.
Инициапизация в стипе BSD
Для ЭтОrо стиля характерно НЗЛllчие КОНФИ1'Урационноrо файла старто-
вых сценариев /etc/rc. canf. УровiIей выполнеtlllЯ как таковых в BSD
и ориентированных на нее реалllЗnЦИЯХ ипих нет, вместо них вводится
понятие режима труппы процессов, объединенных общей функцио-
нальностью. РежимOI' обычно ДЩI.: t)дноцользовательскuй и мноrопоnь-
зовательскиil. Каждый режим зан)'t;:Кается своим сценарием. Файлы этих
сценариев обычно находятся в (etc ииазынаются тс . . (рис. 9.1).
В дистрибутиве Slack\vare этим сценариям присвоены имена:
. тс. S сценарий запуска (действие sysinit);
. rc. О остаНО8 системы;
. те. 6 перезarpузка;
. ,.с. К олнопользовательский режим;
. rc. М мноrОПОЛЬЗ0нательский текстовыЙ режим;
. 1-С. 4 мноrопользовательсю\й режим с rрафическим входом в си-
стему _
В (etc/defaиlt/rc. сап! хранятся в неизменном хорошо откомменти,
рованном виде все системные настройки в количестве нескольких сотен,
а редактируемыЙ администратором (etc(rc. соп! содержит только от-
личия желаемой конфиrурации системы от (еtс/dеfаults/rе.солf,
которых раз в десять меньше. 3аrрузочные сuенарии режимов прочиты-
298
rлаВ8 9 Управление процессэми
Рис. 9. f.. Порядок инициализации в сrиле BSD
вают оба эти файла и в завцсимости от требуемой конфиrурации мотут
запускать из-под себя дополнительные сценаРlП1 нннцна!l1lзации раз-
личных служб; "е. inetd*, "е. cdrom 11 Т.П. Последним при заrрузке
выполняется сценарий rc.local, содержание которото определяется адми-
нистратором конкретной системы.
ИНИЦИlUlиэаЦИII в СТИле System V
в этом стиле каждому уровню выполt<ения соответствует целый каталоr,
все сценарии в котором выполняются при переключении на этот ypoBelib.
Это подкаталоrи /ete с именаМII rcO. d, rcl.d, .... "е6. d. Сцена-
РИII в ЭТИ" I<aталоrах файлы С именами вроде S12syslog или K9Skudzu
только символические ссылки на настоящие сценарии, находящиеся в
/ece/init .d. Кажд.ый IIз t<астоящих сценариев, будучи вызван с арту-
ментом start, запускает свою службу, а с apryMeffioM stop останавливает
ее. Какой артумент будет ему передан, зависит от первой буквы имени
символической ссыJIки: S ознаqает 5lart, К (killJ 5top. Следующее за этой
буююй число определяет порядок вызова настоящих спенариев: чем оно
больше, тем позже срабатывает данная ссылка при вКЛЮ'lении текущеrо
уровня. Сначала ВЫПОЛНЯЮТСЯ все сценарии останова процессои, не раз-
решенных на данном уровне, потом все сценарии запуска (рис. 9.2).
Переключением уровней выполнения занимается центральный Cllенарий
/etc/rc. ВызваннЬ!Й с apryмeHToM N, rде N это lIомер вклюqаеМОro
299
UNUX; полное руководство
5
з
1..............
""'"
( shell )
Рис. 9.2. Порядок ИНИЦlfализеции в сfиnе System V
"v_'::;';;';;;:";":;i:.j;д.:.-:::,!.:......,.,,,,,.":''
,,-- _.'...' ". ....-. '-'."
T.yp.. .::;...:;..у..я;р';;;;i Щ);;';;з '."'"''''
rpcsvcgssd ", ;aн,::,:" ::::... :":"".........;.,,,,.":,:,,,.:.,.,."..
О r!iync:;'Xirietdi5 a.'rfUt"'acem@ntfтi. xfмtd has access
О sastauthd 'дnrol mechanism$. mensive 'йwng capabllitie<s. the a.biliry to
\' "тake s.ervices ауаИiihle ba5 on Пlт!. аnd сап place Rmits оп
sendmi1i1 ':'!:the number d seNeJS.that сап ье sraned. атong otker things.
smand
О spamassa.s5in
sshd
syslog
О ';me
О h",.,.udp
О VnC5erver
О winlind
r7 ",т.':,1
Dypbind
О yum
300
f{)
,':
J.."_, . ,"_",.",',',..w.."'''"..."....н..н._.'",',_.
tсшт;щ,\:if,;;': -.;,:'-"- :-"':'''''_'''''''
:':!-xinetd {pid 2256) ВЫПОЛНЯВ1СЯ...
,ti
'1
'Й
:i,
;":':1
. :1...
Рис. 9.3. Коuфиrурвтор служб system.coпf/g.semces
rлвsз 9. Управлени.е nроцессами
уровня, он ищет катмот I е!: с I rc . N и выполняет в нем сначала все стоп
сценарии, потом все стартсценарии.
Для выбора демопов, которые будут запускаться автоматически при за
I"рузке системы, обычно используют КОНФИI'УРатор drakconfB операцион
ноЙ систеМе Lfuux Mandrake, syslemconfig-services в Fedora Сосе (рис.9.3)
ЯШI selup в друrих Red НаtподобllЫХ ди(,.-rрибутивах.
Чтобы обеспечить автома'l1iческий запуск какоroнибудь сервиса, нужно
создать сценарий для ero запуCJGI и поместить есо в каталоre /etc/ init.d
Затем, в зависимости от уровня выполнения, в каталоrе I et с /rcN . d
нужно создать символические ссылки на этот сценариЙ для ero запуска
и остаНОВа.
Если вы хотите сами создать сценарий для запуска CBoero демона, можете
ВОСl10льзоваться шаблоном, приведеиным в ЛИСПiнrе 9.3.
Листинr 9.3. Шаблон для запуска демона
# ! /binJba$h
#
# ПОДКJ1ючаем библиотеку функций
/etc/init.d/functions
#
# Определяем параметры
сазе -$1* in
startl
# Запуск демона
echo .Starting mydaemon..."
claemon r(lydaemon
touch /var/lock/sиbsys/mydaemon
stop)
11 Останов демона
killproc mудаеmоп
rm .f /var / lock/8ub8ys/my"daemon
1<1\ f /var/r\1n/mydaemon.pid
st:atus)
# Выводим статистику работы
;,
restart I reload)
# действия. выполняемые при перезаrрузке демона
*)
# Праизошел ВЫЗОВ без параметров
301
UNUX: полное PY080ACT80
echo 'Usage: rnydaernon (st1;!,rt I stop I status I restart i reloa,j)
.
exit: 1
еаас
exit О
После TOro, как в процессе ИНИЦИализации системы будет выполнен за
rрузо'lНЫЙ сценарий уровня по умолчанию, последним выполняется CIlе
нарий / etc /rc. 10саl. ВыполlU!В щ;еСденар!!и, init переход!!т к друrl1М
записям в I etc/ ini t tab, относЯIЦIO.!СИ к те"Ущему уровню. Обычно там
остаются только перезаnyскаемые (rеsраwп} действия: процессы, которые
init запускает в фоне, а Korдa каКОЙ'lfибудь из них завершается, запускает
вновь. ТаК ведут себя процессы *getty, обслуживающие виртуальные KOH
соли, И менеджер ДИСlIЛеев системы Х Window. ИННUИЗЛlIЗация системы
считается законченной, Korдa запухцеllЫ все перезапускаемые пропессы
и iпit остается только следить за ними.
9.2. Команды управления процессами
9.2.1. Иерархия процессов: ps и pstree
О том, '11'0 команда р! позводяет IJросмотреть сведения обо всех про
цессах, протекаюших в системе 1\ дацный момент, вы уже знаете (п.3,2).
С КЛючом f эта кома8да ВЫRОДИТ как PID caMoro прdцесса, так и PPID
ero родител, то есть по ее иыводу можно восстановить всю структуру
дерева процеССОI\ до их общеrо предка процесса init. "Древовидный"
взшяд может понадобlПЬСЯ, например, если вам нужно уничтожить цe
дую l'рУППУ процессов, происходящщ 01' общеrо предка: в ЭТОМ случае
иы можете не убивать их по очереди, а просто послать CllrнM TERM НХ
родительскому процессу.
Команда pstree представляет дерево ПрOl!ессов сразу в наrлядном виде:
$ pstree
ini t 1= dC P id
atd
b(Jnoboactivdti
rOnd
contd2
....'JdmЬ . iпаrУ..-gdmЬiпаrУ'.-..rх .
ncme5e::sS.l{;'n
!lorr.i:panel
nome5etting5
302
rЛава 9. Управление f1роцессами
knometerrnin.al b a5stree
baB5a5han5h3les
nrofficonV'
b.a5h--------ba5h
or.reptyh€;lpe
t ,y.10gd
lJdevd
xinetd
Ключ p выводит вместе с ИМенем процесса ero РЮ, а КJ!Юч и имя
пользователя, запустившеro процесс. Если в качестве apryMema указать
PID, то команда выведет не все дерево, а TQJthKO ветку потомков процссса
С ЭтИМ РЮ. Имя пользователя в качестве арсумента требует вывесте все
ветки процессов, запущенных этим ПОЛl>Зователем' у них общеrо предка
может И не быть.
9.2.2. Информация о ресурсах системы:
команды free, df, du
Команда free показывает общее кодечество занятой и свободной памяти'
физической, в разделе подкачки и в буферах ядра. По умолчанию объем
ПаМЯТИ выводится в килобайтвх, а КЛЮЧИ b и т Позволяют измерять
есо в баЙТ!IX и меrабайтВJ< СОО"fl,етственно.
Ключ --s <число> требует опрашивать систему непрерывно, через каж
дые <число> секунд, пока вы не прервете выполнение команды, нажав
Ctrl+C.
Команды df (disk f,ee) и du (disk иsage) показывают, сколько места дo
СТУIIНО И занято на жестком диске.
Утилита df вьmодит сведения о дисковом пространстве на всех смонти-
рованных в данный момент файловых системах как локальных, так и
сетевых:
$ c1f
Файловая система
Idev/hda4
Idev/hda2
Idev/hda6
1/1.:iserS/share
lКблоко"
22200824
101105
10221420
7543680
ИСf1
4630864
8383
1737440
4623488
доступно
16442200
87501
8483980
2920192
Исп%
22%
9%
17%
62%
СМОНТИроваНа На
I
Iboot
Imnt/windisl<e
/mnt/winuser5
зоз
UNUX: полное P1lKOBOJICТ80
с ключом i команда df измеряет дисковое пространство не в блоках,
а в индексных дескрипторах (п.2.2.1), а с КЛЮЧОМ T показывает тип
файловой системы. О друrих ключах можно узнать, как обычно, на тап.
странице.
Команда du показывает, сколько места занимает каждый подкатало\'
каталоrов, указанных в качестве apryмeHTa (если apryMeHTbI не указаны.
то это будет текущий каталоr), и подсчитывает общий Итоr. Если у вас
недостаточно прав на просмотр некоторых подкаталоrов, то итоr будет
отличаться от правильноrо на размер запрещеЮ1ЫХ каталоrов,
9.2.3. Процессы в реальном времени: команда top
Команда top предназначена для наблюдения за процессами в реальном
времени и интеракТИDноrо управления ими. Терминал, на котором за.
пущена nporpaMMa top, превращается в окно, разделенное на области
(рис. 9.4, сверху вниз):
. сведения о системе ПРОДOJlJКительность текущеrо сеанса, коли.
чество задач, использование памяти и процессора, средняя длина
очереди задаЧ, ОJКидающих ВЫШ)JlНСНИЯ (!oad average) и т.п.;
. командная строка;
· заroловки столбцов;
. область задач. Задачи в терм!цюлоrии 101' это не только пользова-
тельские ПРОllессы потомки init, но и системные ПРОllессы ча'ТИ
ядра.
- . .
...:t...,!loII: lt!f c:f'
op 20:16:38 up 9:26. 4 users. loadY&rag&: 0.30. Q.14. 0.01
Т.азkп: lClQ r:ct:al, 1 rUnnlrtg. 99 $leep.inq, О $t.opp.e.d, О 2Qbie
Cpu(DI: 2.3\ UИ, 1.o, Y. O.O ni. 96.3\ id, 0.01 W; а.З bi, 0.U18i
Hefll 22З2В4k tot.al, 1110J6k u.aed.. б26Эk. fH;>-\:I. "1);20].;, b..lffer$
S1oI.a.p: l0441BI!k. ,,"01:.01.1, 512x. \Jst!ti.. 1.!)3567';;1<.. fl:e. 72)1k I;.a::;h$d
3294 "оn 16 О 41613"4 10m 20m . '.0 ,., 0;).'1.0.1 ql\o",etGrmJ.r'lal
Z€.Зi t:"('J."t 1 , 6М11 2От 52 5 1.3 (j.';! ", (1.1.11 ,
, cot 16 , 2:11:'16 56. 1408 S 0.0 с ". U:DO.5t in.t.
..-
, t"oa": " 19 О О О s 0.0 а.О о:оо.(14 i<."ott.lt"q-;i/Q
) l:"i:Jpt 5 -.1: О О " S 0.0 0.0 О:ОО.О:.' о1:"VЭ111:.'::(О .
. t(jat , 1() (j О О s 0.0 '\..о !:HfJ!].[)D kJ:elp,ЗJ.-
5 root 15 ,О О О , Q 0.0 0.0 !'J:CQ.IJQ it<lcpid
" ro"t 5 ..Н. О О , " 0.0 0.0 О!DС.ОО \l:b].ocxcl!O
" root " С О О О " О.С 0.0 О!ОО.ао pdf l>,,;.sh !.*
'З'; coo 15 G О , О ,. О.. С.О О:ОIJ.IJ<I. r.o:1t l\.:эh
РиС. 9.4. ПроrРЭММ8 tap запущена На вмртуаЛЬНDМ терминале
304
rлава 9. Управление процессами
КаЖДЬ1е несколько секунд (по умолчанию 3 сскунды) окно оБНОIIJJЯется.
В командную строку можно вводить команды управления самими зада
чаМII или порядком отображен1Iя спедеиий в окне проrpаммы top. Вот
некоторые из таких команд:
. h вызов справки;
. q завершение работы nporpaMMbl (ддя выхода можно нажать и
комбинацию CtrI+C);
. u rюказывать только проllессы, запущенные определенным поль
зователем (следует УКд3ывать ero реrистраЦIIОННое имя, а не UШ);
. d IIзмеlWТЬ инrервал обновления;
. f добавить или YJI3JlliТb столбцы;
. F измеиить столбец, по которому сортируются задачи. По умолчанию
ЭТо %СРи ДШ/Я ИсПОЛЬЗОваН!lОro процессорноl"O времени, но МOЖJIо
сортировать, например, по убыванию объема занятой rщurrи;
. i перек.лючатель отображения: либо все задачи, либо только актив
ные (в СОСТОЯНИИ Running);
. k отправить процессу сиrнал. Проrрамма спросит у вас РШ про'
цесса, а затем номер ИЛИ название Сltrнала. По УМОЛ'lанию посылается
сиrnал TERM;
. r измсшпь приоритет проuесса.
Количество и порядок отображаемых свойств пронесса (столбцов) мож-
но изменять. Bcero ДО"ТУПllо 26 свойств процесса (иумеруеМblJ( буквами
анrлийскоro алфавита), и соответствуюшие им заrоловки столбцов пере
числены в секции DESCRIPТlONS of Fields mапстраниuы команды top.
На рис. 9.4 (команда top запущена с НастроЙками по умолчанию) OTO
бражены следующие свойства:
. PID PID процесса;
. USER. реrиcrрационное имя владельца процесса;
. PR приоритет;
. NI показатель уступчивости (см. п.9.2.4);
. VIRT занятая виртуальная память в килобайтах;
. RES физическая (без подкачки) память, занятая проuессом;
. SHR объем раздеJlяемой ламЯfИ, используемой пронессом;
. S состояние процесса;
. %CPU доля npoueccopHoro времени, доставщаяся процессу с MO
меита последнеrо обновления экрана;
. %МЕМ доля занятой проuессом физической памяти;
. ТlME+ процессорное время, израсходованное с момента запуска
процесса, в секундах с сотыми долями;
. COMMAND либо имя исполняемою фаЙJIа nporpaMMbl, либо ВСЯ
командная строка с арryментами. Режим перек.лючается вводом в
командную строку команды «с».
305
LJNUX: полное РУКОВОДСТВО
Пронесс может находиться в одном из следующих состояний, отобража
емых в столбце «5»:
. R (Running) активен, то есть находится в основной памяти и ждет
вьщеления ему процессорноro времени либо уже выполняется;
. S (S!eeping) выrpужен из основной памяти;
. Т (Traced) nриостаllовлен, IuIприыр,' в ходе отладки;
. D состояние HenpepbIBaeMoro ожидания: процесс может быть "раз
буже"" только прямым (direct) CJIfHMOM от оборудования;
. Z зомби. Это процесс, родитель которото не ПOJIучил сиrllВда О за
вершении потомка и не очистWl связанные с IIИм структуры ядра. ТО
есть дочернеrо nроцесса нет, он не тратит процессорноrо времени и
дрyrиx ресурсов, а заШfСЬ в таблице процессов осталась. Такие про
цессы нужно убивать вручную.
9.2.4. Приоритет процесса: команды пiсе и rепiсе
Каждому проuессу в системе назначен определённый npиоритет, который
учитывается планировщиком процессов при выделении процессу npo
ueccopHoro времени. Значение приоритета наХОДlIТСЯ в диапазоне от 20
(наивысший приоритет) до 19 (наиме!UoШИЙ: процесс 5ыполняется только
тоща, котда нет друrих претендеН1"Ов на время процессора). Значеш<е,
обратное приоритету, называется щжазателем уступчивости (lIice).
По умолчанию все процессы запуска1Q1"СЯ с базовым прuоритетом, равным
О. Владелец процесса может в любой момент повыcuть ero показатель
уступчивости (понизить приоритет). Суп ер пользователь имеет право
установить для любш'о процесса любое ЗнаЧение ПР'lоритета.
Если процесс отъедает слишком MHoro ресурсов, то для иормзльноrо
функционирования системы не об5!зательно еl'О убивать: достаточно
назначить ему ШIЗIШЙ приоритет. Тоща планировщик предоставит ему
меньше циклов процессора, и ero выполнение заЙмет больше времени,
зато в течение этоro IIремени МОЖ!lО будет выполнять дрyrие задачи.
Для запуска процесса с приоритетом, отличным от базовоrо, служит
команда niee:
tlice [ n <rrpиорите'J' ] [команднаЯС'I'рока ]
Например, копирование образа компактдиска, будучи запущено с обыч
ным приоритетом, может заблокировать остальные npопессы. Поэтому
запускать ето нужно так:
$ nice n 19 дд if=!media.!cdrecordel ofo.!mycdrom. i90
3начеlше новото приоритета по умолчанию равно 10. Команда nice без
артументов выводит текушее значение базовOI"О приоритета.
З06
rЛ8ва 9. Управление процессами
Для изменения ПРliOритета уже запущенноro процесса CJlужит команда
renice:
renice п <показательступчивости> [p PID] [и UID]
Суперпользователь нмеет право назначать процессу (или всем процес
сам ук.азаННОI'О пользователя) отрицательныЙ lIоказатель уcryпчивости,
то есть повышать их приоритет. Если указанное зна'lение уcryпчивости
выходит за rpаницы диапазона [20".I9], то вместо нето применяется co
отпетствующее крайнее значение.
9.2.5. ФОНОВЫЙ режим: команды jobs, f9, Ь9
в 11,3.2 я уже roпорил, что родительскиЙ процесс может либо ждать за
вершения дочернеrо, либо продолжать свое выполнение. Если в роли
родителя BblcryllaeT командная оболочка, то это значит, что процессы,
запущенные с одноЙ консоли (или ВlIР1'уал.ьноrо терминала), распадают
ся на две rруппы: те, которых оболочка ЖДет, они взаимодействуют с
пользователем, занимал консоль, и те, после запуска которых с пользо
вдтслем взаимодействует сама оболочка (консоль свободна), Эти rpYnnbl
называются переДНИМ и задним ПЛаflаМ&1.
Чтобы запустить процесс на заднем плане (в фоновом или асШIXроННОМ pe
Жlfме), нужио завершlПЬ командную строку ynравляюшим оператором &.
ПОllкомаиды оболочки jobs, Ьс (backgrQund) и fg (fQreground) ПОЗВОЛЯЮТ
манипулировать заданиями, выполняющимися на переднем и заднем
планах:
. Команда jobs выводит список процессов, которые выполняются в
фоновом режиме,
. fg <номерзадания > переводит процесс на передний план,
. Ьс <номер задания > переводит процесс на задниЙ план.
Номер задания это не PID, а число, которое команда jobs выводит в
KBaдpaTIIых скобках. С ключом I она будет ВЫВОДIПЬ, кроме тoro, и PID
процесса.
Поскольку перечислснныс команды не самостоятеЛJ,ные утилиты, n
подкоманды bash, справку по ним нужно .запрашивать так: help <под
команда>.
9.3. Протоколирование системы
в любой UNIХ'Подобной системе есть стандартные файлы протоколов
(журналов). В них попадают сообщеlUlЯ, rенерируемые ядром, системны
307
UNUX: полное руководство
ми демонами, утилитами Qкруже/Шя. Эти файлы размещаются в каталоre
/val"/log. Прикладные nporpaммы обычно помещают свои протоколы
в подкаталоrи этоro каталоrа, Hanp.i!.Mep, /var /log /httpd журналы
htrP-сервера. Точное расположенце журнала прикладной проrраммы
зависит от ее настройки_
За оедение журналов отвечает система реrистраЦlIЦ событий sys!og. Она
позооляет сортировать сообщеДия ПО цсточникам 11 степени важности, а
также перенапраlj)IЯТЬ IIX в журналыllJ файлы' на КОНСОЛЬ или на друrоl!
компьютер в сети. Все подсистемы (демоны) n праiШJ\ЫIO написаНные
ПРИКJIаДIlые rrporpaMMbI не ведут протоколов самостоятельно, а посылают
сообщения в систему реrистрaцtЦl; Дальнейшая судьба этих сообщений
зависит от ПОЩПlIКII CIiCTeMHOro аДМЩщстратора.
Система реrистрации состоит из следующИХ компонент:
. демон syslogd, принимающий щения от друМ!Х проиессов и пере-
напраВЛJ!ll)ЩИЙ их указанньr!>f.есатам;
. библиотечные функции ореtФ).(), syslogO. clQselogO. посредством
которых процессы общаются с демоном syslogd. ФункшIЯ syslogO за
писывает протокольное сообщендев rнездо (сокет) / dev /log, откуда
ero читает демон syslQgd; .
. команда logger, с ПО!>fOIUЬЮ котороЙ сообщешrе демону syslogd может
передать командный интсрnpeта'l'Oр.
Демон syslogd запускается ИlцщизлизащlOННЫЫ сценарием в ходе Ha
чалъной заrрузки системы и работае'\' непрерывно. УбсДIIТЪСЯ в том, ЧТО
он запущсн, можно С помощью КОманды
$ рз ef I grep sys10gd I greP v grep
;ЛРи.......""ие.
Последняя в ТOM конвейspi! комвlЩa нуЖна для тосо, чтобы отфильтровать из
U 6ывода команды grep сеедеция о самой l(oм.ai-IДe gf'Щ).
Если ваюа система зarpужается 8 стиле System V, то сценарий запуска
демона это /etc/rc, д/ init.d/sys1og. Как оБЫ'lНО, зanyститьдемон
самостоятсльно оы можете С помощью команды
/etc/rc.d/init.d/syslog start,
а остановить /etc/rc.dJinit .dJsyslog stop.
Автоматический запуск системы syslog можно отключить или ВКJlючить
при помощи rpафическоrо конфиryратора (setup ДЛЯ дистрибутива Red
Hat. drakxservices для Мапdrаke, system-config-services ДЛЯ Fedora Сосе),
В Red Hat-совмеСТIIМЫХ дистрибутивах демон syslogd устанавливается из
пакста sysklogd, в состав которor'о входит также демон klogd, принимаю-
щиf.l сообщения ядра и отправляющий нх на обработку демону syslogd.
308
rлава 9. Управление процессами
Как И ВСЯКИЙ демон, syslogd управляется конфиryрационным. файлом.
По умолчанию это файл /etc/sys10g. canf, однако ничто не мешает
lIазвать ero как yroJJHO, а потом запускать syslogd с ключом f /path/
t а (соп f ig . f i 1е. Об остальных немноroчисленных ключах можно узнать
110 команде тап syslogd.
По СИI1lалу HUP демон закрывает все журнальные файлы, переЧ1lтывает
конфиrурационный файл и возобllовляет процесс протоколирования.
Чтобы изменеНIIЯ 11 конфиryрашfOННОМ файле вступили в СJШУ, нужно
послать демону syslogd сиrнал HUP. Например, так:
$ ki11 .нup 'cat /var/run/sys1ogd.pid'
9.3.1. Конфиryрационный файл /etc/syslog.conf
Это простой текстовый файл, каждая непустая 11 незакоммеНТllРОВ3ННая
(знак комментария #) строка KOToporo имеет следующий формат:
<селектор>[;<с€пектор>...] <действие>
Селектор представляет собой правило отбора сообщениЙ, а действие
укаЗ31111е, что с aroбранНЫМIf сообщениями дальше делать. Например, crpoкa
иоеТ. . /var / 10g /чэет. 10g
диктует перенаправление сообщений от пользовательских просрамм в
фаЙл /var/1og/use.r.1og.
ДеЙствиями мосут быть:
. /абсолютное/имя/файла записать сообщение в файл. Префикс
",, перед именем файла запрещает СИНХРОНИЗИРОllать файл после
каждой записи. По умanчанию syslogd после записи каждой строки
выполняет вызов fvyпc(). Это делается ради со"ранllОСТИ журналов,
но при интеисивной записи может отнять полови!\}' npoцессорноro
времени. Поэтому следует отключать СИНХРОIfИЗВЦИЮ протоколов, в
которые пишется MHOro сообщений например, отлвдочиых.
. @ИМЯ1\f3D1ИПЫ переслать сообщение демо!\}' syslogd, работающему
lIa указаlfНОЙ мащине. Имя должно быrь известно DNS или npоnисаио
в /etc/hosts; 11 прotивном случае следует писать @IPaapec.
. /деу /conso1e вывести сообщение на консоль.
. . вывести сообщение на экраны все" работающих в данный момент
пользователей.
Несколько селекторов, отбирающих сообщения разной катеroрии, можно
rpупrrnpoвать, разделяя ТОЧКОЙ с запятой, ДlU! тoro, чтобы над ними было
вьшолнено одно и то же действие. Действия '1'yrnmpoвать нельзя. Чтобы иа
править ОДНИ 11 те же сообщеиия и в файл, и на удаленный компьюrep, нужно
/J!шсаTh В КОllфlfrурационный фаЙЛ две строки с одинаковыми селекторами.
309
LINUX: попное руководство
Селектор, в свою очередь, имеет формат:
<средства> [, средство2...] . <уровеJ;ьсер.ЬезностИ>
CpeAcrno (facility) это катеroрия проrpаммы, пославшей сообщение. Ка.
теroрия выбирается из списка ключевых слов, nриведешlOro в таблиuе 9.2.
Кsrеrории пpOrpSMM, ведущих протокол
т.блица 9,2
КЛючевое CJ10BO НUНаЧсжЩt-I1POfl)ВММW J noc.nuwcDt сообщение
auth npOrp8MMbl, QтслеЖМВaIOЩИе реrVlСТраЦИЮ пользователей в системе
authpri.... и повышение прпi.ll11й nQЛЬ$ОВ81(t/\R (Iogln, $и)
sесшity
authpriv Проrраммы, отслеживающие повышение ПРИ8илеrий пользователя
(команда su)
сroп Вылоление ,no JЩCписаниlO (cron и аЧ
daemon С1СУ-IЗМI..ые AeMUHbl 1 Д1IН Кенарых не наwлосi:. более 110w<оДнщвi\
!CaTlO-roр",\о1
kern ЯАРО
Ip, ПОДСИfнма печати
т811 ПОЧТоВblй nporpSMMbl
neW5 ПОДСНСПlМI1. об<:ЛУЖlr1la8Ющs;а теле.конференции Usenet
ШIСр Система UUCP
sys!og Сам Демон syslogd
user Все ОСТSJlьныв nporpaMMbl
. Любая nporpMa
"Оrlе НИ\l:акая nporpaMMQ
Уровень серьезности (priority) определяет важность сообщеНl1Я. Про
rpаммы реt.истрируют любые сообщения от отладочной информаuии до
требований экстренноrо вмешательства а демон syslogd иrнорирует те
из них, важНОС'" которых ниже, чем указано в конфиryрационном файле.
Уровень серьезности указывается КJllOчевым словом, список которых в no
рядке возрастания вюt..'110сти nРИDеден JI таблице 9.3. Допускаются также
КJ1ючеnые слова' (все сообщения) и попе (flикакИJ( сообщений).
Уровни сермзности CtlоощеНffН Таблица 9.3
Ключевое слово Означает
debug Оrnадочl-tЫ9 со06щемя
i\fo Информационные сооБЩ8kИЯ о ш1";;IТftbI.X I;:итуациях
natic@ 3аМ'f8.ниlt: сообщения о НitоБЫЧНЫJ( ситуациях
warning Предупреждения
оп Ошибки
cr]t КРИТl'I"lеские ошибки
aler! События, треБУЮlШ'е СрОЧf<fQiО iJМешательстеа
Пlеrg СоБЫ1ИА, УrрожаЮЩие раБQтв Сисtвмы
310
rлава 9. Управление процессами
в Red Наt-совместимых системах MOJIQIO ста8И1Ъ перед уровнем серJ>eЭ!iОСТИ
дополнительные МОДИфикаторы ,,=» (реl1l'ТрИрОВать сообщеюIЯ только
указашюro уровня) И «!» (илюрировать сообщения указанноro 11 более вы.
соких уровней). Можно также иаnpавл!IТЬ сооошения не только в ооы'шый
файл, но и в lIМенованный канал, nocтaBIfB перед ним симВOJ! «1 ».
ЛИСТИнr 9.4. Примерный файл ;etc/syslog.conf
# Протоколирование аутентификации. Файл протокола
auth,authpriv.* /var/log/auth.log
*.*;auth,authpriv.none -/var/log/syslog
# фаjJrJ! реrистрации ПоПЫток доступа. к СИС'I'еме,. имее'l'
# оrpаниченный ДОСТуП. ОБЫЧНО в эТот файл записываются
# сообщения об удаленном доступе к эТой машине. например,
#- сообщения от демона FTp о том, какие пользОl3аТе1СИ :и
# котда реrистрировались на данном сервере.
authpriv.* /var/log/secure
# Сообщения пользовательских проrрамм
user. * -/var 110g /\1ser .10g
# Протоколировать все информационные сообщения, кроме
# почтовыХ
*.info;mail.none; -/var/log/messages
# Протоколирование почты
# Уровень отладки, информ:ании и за.мечаниЙ
mail.debug;mail.info;mail.=notice -/var/log/mail/info
# Уровень предупрежденйй
mail.warn -/var/log/mail/warnings
# Уровень ошибок
mail.err -/var/log/mail/errors
# Протоколирование демона стоп.
cY"on. debug;cron. =info; cron. =notice /var/log Icron/info
стоп., warn -/уат /1og /cron/warnings
cron.err -/var/log/cron/errors
# Протоколирование ядра
kern. =debug; kern. info; kert1. =rюtiсе - /varl1og /kernel/info
kern.warn -/var/log/kernel/warnings
kern.err /var/log/kernel/errors
# ОЧередь печати: сообщения уровня от .ин" до "rrpe.nyпpeждений'
lpr.info;lpr.!err /var/log/lpr/info
311
UNUX: полное РУ1<ОВОДСТВО
# Протокo.nиpoвавие. . ДемОНОВ : qробшения вСех- уровней, кроме "инфо"
daemon.=debug;daemon.!=info /var/log/daemons
# Критические со6бщения всем TpeBora
*.emerg *
# Сохраять ошибки почты и НОВостеЙ В отдельном файле
uucp,news.crit /var/g/spooler
# ЗаrРУЗ0чные сообщения
loca17.* /var/log/boot.lo9
9.3.2. Сетевое ni)отокопироввние
Протоколы это история жизни (Щстемы; они необходимы аДМИI/И
стратору для ОЫЯВ)lения 1/ устраНеifllilнеполадок, но они необходимы и
злоумышлеииику для поиска утll!lМОСТИ IUШ для тою, чтобы скрыть
сле,1Ы своеro вторжения. ПоэтомуiинQrда бывает полезно вести журнал
на друrом, более безопасном, компЬЮтере.
Протоколирооание в сети этоперенаправление сообщений демону
syslogd, запущенному на друrой !,щшине локальной сети, rAe они будут
записаны о локальНЫй файл. Таким'образом, один демон syslogd, пере-
дающий сообщения, выступает 11 рQJlИ клиента, а друroЙ такой же, но
ПрШlИмаюшиЙ и сохраняющиЙ их, о роли сервера.
Сообщения передаются по ПРОТQ:к;9J!У UDP. Он не обеспечивает ни ra-
рантированноЙ доставки пакеТQВ, Шlсекретности, но работает несколько
быстрее, 'leM ТСР. Следующая cтpQJЩ ДOJlЖна присyrствовзть (8 иеззком-
ментироваином виде!) в файлах /etc/services обоих компьютеров:
syslog 514/иdp
Затем необходимо внести некоторые коррективы в файл конфиryрации.
На клиентской машине определите объекты протоколирования (селек-
торы), как и раньше, а в gачестве действия укажите @имяузла, riIe
ИМЯ"узла имя КОJ\lI1ьюrера, на который будут перенаправлены сообще-
ния. Это имя желательно указать D фаЙЛе /etc/hosts, так как демон
syslogd может быть запущен до сервера доменных имен или сервер DNS
окажется недоступным.
На сервере ПРОТОКОЛИР08ания может быть необходимо пере запустить
syslogd с дрyrим набором ключей. В Red Наt-совместимых системах syslogd
по умол'шнию ИfНорирует сообщеиия из сети; дIIя тoro, чтобы он начал их
принимать, он должен быть запущен с ключом r (это верно для пакета
sysk!ogd персИl! 1.3 и новее. Раmше верею! вели себя в точности наобор(л).
312
rпзвз 9. Управление процессам:и
Каждое сообщение в журнальном фаЙле маркируется полным именем
узла, с которою оно пocryпило (с указанием домена). Чтобы syslogd на
сервере эаписьmал только краткие имена узлов, нужно запустить ero с
ключом I <СП"СОКj"3лоа> или 4i <списокдоменов>. Узлы и домены
в списках нужно разделять двоеточиями.
9.3.3. Протоколирование ядра.
Демон kJogd и команда dmesg
Демон klogd предназначен )I)lЯ перехвата и протоколирования сообщений
ядра Linux. Ядро, в отличие от ПОлЬЗОвательскоro процесса, не может вы-
водить сообщения, 1I0ЛЬЭУЯСЬ стандартной функцией syslogO: библиотека,
содержащая эту функцию, доступна только обычным приложениям. В
ядре есть свои средства ВЫВода сообщениЙ, приложениям нед()ступные.
Обрабоm этих сообщений и орrаНIIЗует демон klogd. Обычно эта обра-
ботка состоит в переСЬU1ке сообщениЙ демону syslogd, хотя klogd может
работать 1i самостоятельно.
Демон oyв!ogd направляет оообщения ядра вперемешку с сообщениями от дру-
шх нсточников В обuшй журнальнЫЙ фаЙJ1 (обычно jvar /log /messages,
смотри /etc/syslog. coпf), но ядро поддерживает и собственный
кольцевой буфер сообщений. Для просмотра текущеrо состояния этоrо
буфера преД'''11наченз КОl\lзнда dmesg. Ее вывздд рек<змендуеТСII Пр<.1пу-
скать через фильтр mоreltilИ less.
Анализ сообщеНlIЙ ядра южет потреб<зваться для тоr<з, чт<збы узнать,
поддерживает ли ваше ЯЛр<3 Т<3 иЛИ иное устройство иЛИ ФУНКЦI!Ю. Ha
при мер, чтобы узнать, включена ли поддержка квотирования (п.7.2.3),
выполните команду
$ dmesg I grep i quot
Сообщения, которые ядро reнерирует 11 сохраняет п буфере во время за'
rpузки системы, напраВЛЯJOТсятакже в файл /var/10g/dmesg (в не Red
Hat-С<звмеCnIМbIх системаХ этот файл может наЗЫВатЬся /var /log /boot. .
msg). По окончании заrpузки этот файл закрывается и ero содерЖИf(Jе
становится доступно для пр<зсм<зтра и анализа.
9.3.4. Что делать с протоколами дальше?
Утилита logrotate
Журнальные файлы разрастаются быстро, н рано ItJIИ поздно с НИМИ
приходится что-то делать: сжимать, архивировать IIJIИ просто удалЯТЬ. В
дистрибутивах линии Red Hat и DеЫал ДЛЯ управления журналами не
только системы syslog, но и любых прикладных проrрамм, предназна-
313
LINUX: полное рУКО80ДСТВО
чена ynrлита logrotate. Она устаЩ\Цливается из паl\СТ3 logrotate вместе С
примерным КОНФltryрационным ФI!ЙЛОМ и Сl.lенарием, обеcnечиваЮЩllМ
ее периодический заnyск (п.9.4).,В результате установки этоrо пакета
сценарий logrotate попадает в каталоr /etc/cron.daily.
Как следует из названия УТИЛИТЫ logrotate, ее основное занятие это
ротация журнальных фаiiлов. Ротация ЭТО последовательное пере
именование предыдущих Bepcцii ур,llалов
(mail1og.2 JI mai11og.3, m",:!;llog.l в mai11og.2, mai110g в
rnai110g .1) И создание HOBoro пустото журнальноro фаii:ла (rnai11og)
1VIя заПИСll последующих сообщеН1lй.Ротация производится либо по ИС'
течении указанноro времени, либрпопревыщении урнальным фаЙлом
указанноro размера.
Список журналов, ПО1Vlежащю( о!jраб()'!'ке УПlЛитой logrotate, и инструк'
ЦlIИ по обработке определяютс!i!t9ифиryрационными фаii:лами, имена
которых в любом количестве переаются как артументы при вызове
утилиты (см. rnап 1ogrotate). Директивы последующих конф'uyрщ.щ'
онны)( файлов перекрывают директивы предыдущих, так что порядок
имеет значение. ТРЗЛlЩионно ИCnQЩ>3уется ОДIШ файл / etc /1og rotate.
conf, а инструкЦlIИ 1VIЯ дополнительных журналов ВключаютсЯ в иеrо
при помощи директивы incLude.
Листинr 9.5. Примерный конфиrураЦ,ИОНIiЫЙ файл ;etc;logrotate.conf
# Секция rлобальых паретров
# инструкции для всех журнаllДВ
# РаСПИсание ротации, еженедельцо.
# Возможны варианты: daily, monthly,
# size <байт> ПО ДОС'I'иже:иии. файлом указанн:оrо размера
weekly
# Сохранять 4 предыдущих журнала
rotate 4
# После ротации создавать овblЙ пустой ЖУРНаЛЬНЫЙ файл
create
# сохранять старЫе
# при ПОМОЩИ gzip,
# друrую проrраМI
журнал Е Сжатом виде
директива compre5scmd
для сжатия}
(по умолч.анию -
позволяет указать
cornpless
# В ката110!"' /etc/logl'ot.at_e. d прикладные проrраммы помещают
# ИСТРУКЦИИ ПО упраsпению их собственными журналами.
# Директива include <каталоr> требует включить все файлы.
# содержащиеся в этом каталоrе.
iпсludе /etc/logrotate.d
314
rЛ8ВВ 9. Управление nроцеСС8МИ
# Секция локальных парамеров инструкции ДЛЯ
# пере численных в ней журналов
Ivar/log/wtmp Ivar/log/lastlog
monthly
create 0664 root utrnp
rotate 1
)
9.4. Выполнение заданий по расписаниЮ
Пользоватеди ОС Windows привыкли к тому, что существует Мастер
пЛанирования заданиЙ, позволяющий автоматически запускать при
ложения в заранее назначенное время. В UNIX подобных ОС есть еще
более мощный и rибкий диспетчер расписаний. Ero удобно использовать
для автоматизации обслуживания системы и выполнения дрyrиx задач,
не треБУI()ЩИХ взаимодеЙСТlJlIЯ с пользователем. Например, внерабочее
время можно автоматически выполнять резервное копирование данных
ИJIИ обновление системы через Иитернет.
Создавать расписания и ставить задания в очередь на выполнение имеют
право все, коыу это явно не запрещено супеРПO!lьзователем.
Сердцем сиcrеыы периодпческоrо выпJlненl1я служат демоны ald и сroп
(о Red Наt-совместимых дистрибутивах он наЗI,IВается croпd).
9.4.1. Запуск задания
в назначенное время: команда at
Демон atd обслуживает задания, назиачеЯRые для ОДНОКрЗl'ноrо цыпол
нения либо в установленное время, либо тоrда, коrда наrрузка на систему
СIIИЗИТСЯ до приеМJlемоrо уровня.
Для постановки задания в очередь для выполнения в указанное время
служит комаида al:
at [f <файл>! ЧЧ:ММ
Файл это исполняемый файл Лllбо сценарий командноro интерпре
татора. Если он не указан, то вы должны будете ВВОДIIТЬ команды в
командной строке, заоерщая ввод, как обы'IНО, нажатием комбинации
клавиш Clrl+D.
Команда at допускает и более СJlОЖНhlе спецификации времени, чем
ЧЧ:ММ; вы ыожете указать дату или taKoe время, как midnighl, пооп IIllИ
leatime. Подробности вы найдете на тан-странице коыанды at.
315
UNUX: полное РУ"овоДСТ80
Команда atq служит для просмотра очереди заданий. для непривилеrn
pooaHHoro пользователя оиа OblBOДJt.T задания, поставленные в очередь
им, а для суперпользователя все задания. Удалить задание I!З очереди
вы можете командой atrm.
Команда batcb используется для тех заданий, которые заведомо потре-
буют MHoro процессорноrо времени. Задание, поставленное в очередь
нри помощи этой команды, наЧИflает выполняться только тоща, Koraa
наrрузка на систему (среднее число процессов, ожидающих выделения
!!м кванта времени) сиизится до Заранее установленноrо значеНlrя (по
умолчанию 0.8; подробности тnan. atd).
Очередь заданий находится п ка:тМоте /var/spool/at. Файлы /etc/
а t . а 11 ow и / et. с / а t . deny содер,:кат списки тех палъзоватеJ1ей, которым
разрещено и запрещено пользоваться системой at.
9.4.2. Диспетчер расписаний демон cron
Этот демон запускается во время ИНИДIlвлизаl.!ИИ системы (сценарий / et с /
init. d/ crond), читает свои КОНФИ\"YPIIЩЮlШЫе файлы и переходит в режим
ОЖИДВНИ>!. Раз в минуту демон npOCi.щается, щ)()веряет дату последнею из-
менения конфиrypaЦИОflllЫХ файлов, перечитывзет те из HILX, котор!,!е ока-
зались изменены,И выполняет задания, назначенные на данную минyry.
В конфиryращюнных файлах, Называемых еще сroпtаЬ-файлами, хранятся
расписания: в каталоrе /var / spool/ cron по одному на зареrистриро'
панноrо пользователя: и /etc;/rpntab суперпользователъский. Bы
ПОлнив задание, демон qon ОТПР;;U<IP1IjТ ПОЧТОВОе сообщение О реЗУJlьтатах
выполнения владельцу сroПlаЬфа'ibiа или пользователю, указан.НОМУ в
переменной MAILTO этоro фаЙ1Ii1.
Управпение фаАпами расписаниil
Пользовательские сrопtаЬфайлы Не предназначены ДЛЯ ручноrо редак'
тирования. Для управления ими служит команда crontab. Список тех,
кому разрещено ее anYCKaTЬ, находится 8 файле /еtс/сrоп. alJow.
Если этот файл отсутствует, то запускать сrопlаЬ MoryT все, кроме тех,
Кто перечислен в файле /etc/cron. deny_ ECJlH отсутствуют оба фаЙла,
то запускать команду может ТОJlЬкО суперпользовзтель.
Формат команды:
crontab [u <поr>rnимя> ] [ <файл> I [-1] i (r1 I [e1 I [i]!
Если YKaaH файл, то этим файлом замещается сrопtаЬфайл указаиноrо
пользователя; еCJIИ нет, то сrопtаЬфайл редактируется на месте. Ключ!!
означают следующее:
316
rлава 9. УправлеНI<е I1роцессам"
. I вывести на консоль содержимое файла расписания;
. -r удалить файл расписания;
. i удалить, предварительно lIереспросив;
. e peAaKTlrpOllaTb файл расписаfЩЯ, то есть открыть ето в
редакторе, указанном в переменной окружения $EDITOR (rю
умолчанию vi).
Если не указаны ни файл, ни ключи, то cronta.b будет читать фаЙл рас-
писания со своето cтaHAapTlloro ввода. Закончив пвод строк, нажмите
Ctr1+D.
Формат файпа расписания
КаЖдая незакомменпrРОJlанная строка файла расписания имеет сдеду-
ющий формат:
минута час день М€СЯU деиьнедепи [лоrинимяl команда
Поля спецификации времени MOryт содержать:
. символ', соответствующий любоыу значеиию;
. число: (}..-59 для минуты, (},,-23 для часа, 131 для дня, 112 для месяца,
(},,-7 ДJl>{ дня недели (воскресенье ЗТО и О, и 7);
. диапазон чисел, разделепных дефисом: например, 1-5 в поле дeHbHe-
деди озиачает «с понедеЛЬИlIка по пятницу»;
. числа или диапазоны, разделенные запятыми, действующими каК
ИЛИ.
Поля «день месяца» и «день неделю, тоже объединяются как ИЛИ: за-
дание будет вьшOJПrено в день, уловлетворяющиЙ хотя бы одной из этих
СJlеrификаЦlrй.
Команда зто любая командная строка, допустимая прапилами интер-
претатора sh.
Например, следующая зашrсь означает, ЧТО архивирование каталоrа
Ihorne/den будет производиться каждый день, кроме воскресенья, в семь
часов утра:
а 7 . . 1-6 tar cfz /backup/home.den.gz Ihome/den
В дистрибуТlШЫ Linux оБЫЧliО входит rО1"ОВЫЙ системный файл расписа-
ний letc I crontab И сценарии для выподнеНIIЯ стандартных задач по
обслуживанию системы (ротации журналов, ведеffilЯ базы установленных
пакеТОD проrpамм и т.п.), размещенные в каталоrax /etc Icron, hourly,
/etc /cron.daily, /еtс/сrоп. weekly и letc/cron .rnonthly. Дирек-
тива ruпраrts в файле /etc/crontab УICаЗblвает, что следует ВЫIIОiffШТЬ
все исполняемые файлы изуказанноrо каталоrа.
317
rлава 10
РЕЗЕРВНОЕ
КОПИРОВАНИЕ И
ВОССТАНОВЛЕНИЕ
ДАННЫХ
СТРАТЕrия РЕЗЕРВНОro
КОПИРОВАНИЯ
ОБОРУДОВАНИЕ
ДЛЯ РЕЗЕРвноrо КОПИрОВАНИЯ
проrРАММНОЕ ОБЕСПЕЧЕНИЕ
ДЛЯ РЕЗЕРВНОro КОПИРОВАНИЯ
ДУБЛИРОВАН ИЕ ДАН НЫХ:
ВВЕДЕНИЕ В RAID
КАК НАЙТИ, СПРЯТАТЬ
И БЕЗВОЗВРАТНО
УНИЧТОЖИТЬ ДАННЫЕ
LINUX ПОЛНОЕ РУКОВОДСТВО
В обязаlUlОСТИ системноro администратора входит обеспечение coxpaH
ности пользовательских даlШЫх. Потерять данные леrко: их УНИ'lтожают
ошибки в проrраммном обесnечешш, сбои оборудоnания, сами невни
мателъные пользователи. В случае домашнеrо компьютера разrИ)lЬДЯЙ
ПQJIьзователь, теряющиil данные, и lIесчастный системный aдМlIIOlcтpaтop,
которому приходится их в<х:станавливать, это обычно одно и то же лино,
но тем важнее уметь их восстановнть. Пенятьто не на KOro.
В этой rлаве я сначала рассмотрю с.nосоБы вернуть случайно удаленный
файл, а потом остановлюсь на принщщах и средствах резервноro копи
ровзиия информации.
10.1. Восстановление удаленноrо файла
Из второй rлавы вы узнали, что фаЙл на файловоЙ системе ext2 (и ext3)
представляет собой индексный дескриптор (iпode), указывающий на бло
ки, в которых И размещаются данные, Содержимое блоков удаленноrо
файла не Исчезает сразу:эТl! блокн поме'Jаю-rся как свободные- и ОТDодятся
для размещения друrих файлов по мере необходимоcrив свобоJUlОМ месте.
Если фаЙловая система IIСПОЛЪЗУется не СЛИШКОМ интенсивно, блоки будут
перезаписаны нескоро, н данные еще можно восстановить.
первыM делом раЗМОlIтируйте раздел, содержавший удаленный фailл. Это
нужно ДJlя TOro, чтобы предотвратить ПерезаПI!СЬ ero блоков 110 время
rюпьпок восстановления.
Если размонтировать ф:j.йловую систему не удается (ВЫ ПОЛУ'IIUIИ \:tюGще
ние «device is busy»), то проверьте, какие процессы к ней обращаются, и
прервите их. Это мОжНо сделать с помощью команды
fuserm <файловаясистема>
Если удаленный файл нахОДИЛСЯ на корневой файловой системе, то ее
размонтировать нельзя. Вам придется ВЫКЛЮ'JНТЬ компьютер, извлечь
жеСТIШЙ ДИСК и заняться IIОССТВНОВJ!еllием фafша на друrой LiпuхмаUШllе.
Отсюда мораль: при установке Linux разбивайте жесткий диск так, чтобы
319
LINUX: полное РУКОВОДСТВО
фаrUlOвые системы /usr, /var и особенно /home (те, в которых данные
меняются чаще Bcero) размещалисъ на отдельных разделах.
Linux тщательНО дщ<умеНТllрованная система, и пути рсшения pac
пространенных проблем описываются в докумснтах HOWТO. BOCCTaHOB
ленню файлов посвящено руководство www. tldp. org/HOWTO/Ext.2fs
Undeletion.html (ето русский перевод можно найти, например. на
http,/(linux.vitebsk.by/howto/Ext2fsUndeletion.ht.mll.
Для восстановления файлов на файловой системе ext2 (не ext3!) разра
ботаllа yrилита c2undel (httр://!,21щdеl. sourceforge. net). С ней
вы разберетесь сами, а сейчас я сКажу пару СЛОВ о средствах, входящих
в состав обыкновенноro листрибyТimа.
10.1 .1 . Midnight Commander
Любимый мноrими файловый менеджер тс имеет в своем составе cpeд
CТDO восстановления файлов, котороеИl10rда может помочь. Запустите
те от имени супеРПOJIьзователя. ВЫполните команду менЮ Команда .....
Восстановление файлов. Затем введите имя файла устройства, иа котором
находится иужный раздел, без (dev; например, hda4. Через некоторое
время Midnight Commander nредстщшт вам список удаленных индексных
дескрипторов. EcJщ B не ЗlIаете поцер i'узла удалеlilIЩ'О файл, 5ам при'
дется просмотреть .их все, чтобы наilти нужный вам файл. Но rарантии
TOro, что 5Ы ero пайдете, нст НИкaкQй.
10.1.2. Утилита debugfs
Эта yrилита входит в состав пакета e2fsprogs и служит дlIЯ интера"-"Тивноrо
исследования и изменения СОСТОЯflИя файловых СИСТем типа ext2 И ext3.
Порядок ваших действий будет следующим:
1. Размонтируйте файловую систему с удаленным файлом.
2. Откройте ее в режиме «только ЧТение»:
debugfs <файлстройства>.
3. В ответ на приrлашение ввеЩlте /10дкоманду Isdel, чтобы получить
список удалеlilIЫJ\ iузлов. Попытаiiтесь определить свой файл по
атрибyrам: владельцу, размеру, дате удаления и Т.П.
4. Сохраните содержимое i'узла в файл на друrой файловой си
стеме, введя подкоманду dump <iпode> имнновоrофайла.
Номер i-узла указывайте в уrловых скобках!
5. Вьulдите 110 подкомаи,де quit.
Список остальных подкомапд debugfs вы можете получить по ПОдКоманде
help или узнать на mап'странипе.
320
rлзsа 10. Резерsное КОПИРОВaliие И восстановлени.е данных
10.2. Стратеrия резервноrо копирования
Чтобы reроически спас.1ТЬ файлы приходилось не слишком часто. следует
заранее позаБОТIIТЬСЯ об их надежиой защите. ВажнеЙшим средством
зашиты является резервное копирование.
Вам нужно хорошо продумать сдедующие nункты:
1. Какая информация будет резервировзТLСЯ (архивироваться)?
В перпую очередь вам нужно архивировать дaHliЫe пользователей, то
есть кзталоr /home. Эn! данные относlIТCЯ к наиболее критичной к:are--
roрии дзнных. Восстановить систему вы сможете в течение не более чем
двух-трех часов, а вот дalUlble пользователей уже не восстановишь...
На втором месте файлы настроЙки системы, находящиеся в ката-
лоre /etc. АРХИВИРОВЗ1ше ЭТI!Х данных позволит еуществеmюсэ:ко-
номить время, которое вам потребуется на восстановление системы
после сБОЯ.
И, наконец, на третьем месте дистрибynmы проrрамм, не вхоДЯЩИХ
в состав дистрибутива Liпuх. Этll данные, как правило, не нуждаются
в частом обновлении.
2. Коеда будет происходить создание резерВIIЫХ копий?
Самое удачное время для этою МСрОЛр"ЯТI!Я ночь. Волервы",
аРХИlJирование обычно не требует вмешатеЛЬСТllа оператора и по.
этому еro можно вьmолнять автомаП!'lески (п.9.4.2), Во-вторых, оно
создает дополнитедьную наrрузку на систему, чему не обрадуются
пользователи. В-третьих, открытые этими пользоватеЛЯМl1 файлы
создадут при копироваюш массу проблем.
3. Кто этим будет заниматься?
Если речь IIДет О вашем домашнем компьютере, то этой ответствен-
НОЙ задачей будете заниматься вы сам\(. На предприятии (особенио
большом) необходимо определить, кто будет архивировать данные с
каждом сервера сети: Не будете же вы беrать по зданию со стриме-
ром, контролируя процесс создания резервных копий? В идеале, за
каждым сервером должен быть закреплен человек, ответственный за
процесс созданиn арXlша и поддержания еro в должном состоянии.
4. Как часто будет ПРОИ;lllОДНТЬСЯ аРХИ8l1роваlJие?
ДОl<lа можuо архИВliровать диск еженедельно 11 после обширных из-
менеНlIЙ. На npедnриЯТI!И зарекомендовала себя шеСТlIдневная схема.
Вам nонадобитсn шесть CMellHblx носителей (кассет для стримера или
маrНИТООIJтическнх дисков). В пятшшу, после конца рабочей недели,
создается резервная копия веесо диска на первой ленте. С понедеяь-
ника по четверr архивируются только новые и обновлеиные данные
(каждый день на свою ленту). и в следующую пяпшцу создается
новая коrшя всеro д\(ска IШ шестую ленту. Таким образом, всссда
можно восстановить данные на любоЙ день последнеii недели.
1I ЗI\X31НI
321
LINUX: полное рУКОВОДСТВО
Архивирование только иовых дaIiных обычно наз!>Wаe'rCЯ IIНкремеитным.
Отбирать фаЙлы, дата последнеro изменения которых свежее заданиоЙ,
умеет архиваТОр tar (см. mап-стращщу).
10.3. Оборудование
для резервноrокопирования
Пр" выборе стратетии резеРВИ()fО КЩIироваиия решающим фактором
может оказаться соотношеиие pa31>{pa диска и емкостиимеющихся у вас
внешних носителей. Привычные IUЩШ CD-RW вмещают Bcero 640 Мбайт,
поэтому резервирование СКОЛЬКJЦщудь зиачитеЛЬноrо объема данных
нельз,{ ор{'аНИЗ0ва'rь автоматичссlW: КТО-ТО должен менять диски вруч-
ную, Вот почему стоит обратить IIнцмание на стримеры, позволяющие
сохранять от 10 до 100 rбайт сжатой I!IlфоРМauии на OIlJlOM картридже.
К тому же UNIX-rsроrраММbI резерВНОro копирования создаВaJlИСЬ в те
времена. KorIla ленточные накопители были единствеlШЫМ типом Dнеш-
не.-о ХРЫlllлища, и идеально приспособлены к работе с ними.
10.3.1. Стример
(jll!lX, как н любая UNIХ-система, оfiладает боrатblМИ возможностями
по созланию 11 СОПРОDожденИlО резервных КОШIIi с помощью стримеров.
Стример это потоковыЙ наКОЩlteлъ На маrиитной леllте. Стримеры
работают 8 безостановочном режиме, обеспеЧlшаlOТ запись и считывание
данных с ленты сплошным нотоком.
Существует два типа стримерОВ;Qтримеры, использующие интерфейс
SCSI. истримеры, IIСПОЛl,зующие интерфейс FDC. Первые из них до-
вольно дороrи. что объясняется дороroВIIЗНОЙ caAIoro контроллера SCSI.
Хотя в послсднее время наблюдается снижение цен на контроллеры и
устроЙства SCSI. Эти етримеры ПОДJqlючаютея к шине SCSI.
Второй тип. использующий интерфеЙс FDC, подключается к КОНТРОЛ.IIеру
Пlбких JНH:KOB, ЭТО более дсщеuыilи МеJ\JIСIШЫЙ BapllaнT, и IIОЭТОМУ, если
вы собираетесь использовать СТРllмер в Ilрофессионадъных цслях, лучше
!lриобреCl'1I стримср с интерфеЙсом SCSI. ВтороЙ тип более подходит для
ДОМi1wrкто прим:ениия.
Основным прсимуществом стримеров ЯВ,lяется их 1Шзкая стоимость, НО
у иих есть ряд недостатков:
. с ними не так удобно работать, как с ЖС('ТК!tМ или маrшfТООПТИЧССКИМ
диском;
322
rлввз 1 о. Резервное копИРО8&ние и восстановление данных
. скорость передаЧII даЮJЫХ lIизка (хО'Тя к дор01'l1М стримерам с интер
фейсом SCSI ЭТО не относится).
Подключение стримера с интерфейсом SCSI
ОС Linux поддерживает все возможные с-rримеры с интерфейсом SCSI.
Это объясняется интеллектуальностью контроллера SCSI. Вы также
южете использовать интерфейс LUN (Logica/ ипи Nuтber), который
}!Влается расширением интерфейса SCSI, дла подключеШПJ стримера с
автоматическоЙ заменой ленты.
Для подключения стримера вам потребуется перекомпилировать ядро
системы {шава 20), ВКЛЮЧlIII опцию SCSI Таре SuppDrt. Также вам нужно
устаНОВИТЬ тип КОИТрОJUlера SCSI в подразделе SC$I Low-Level drivers.
Возможно, нужно будет включить режим Probe аП LUNs оп еасЬ device.
После перезаrрузки в вашеЙ системе ПОШIИТСЯ устройство /dev/stO.
Подключение стримера с интерфейсом ЮС
в зющсимости от типа вашеrо стримера вам нужно включить опцию
QIC-02 tзре support или Ftape (QIС-80rrrаwап) support. О том, какую из
Эn1Х ОЦЦJ.fЙИУЖНО ИСПОЛЪЗQRt,lТЬ, БЫ можете "рочитатьв ДОkYментаЦIIИ
поставляемой со стримером. Эти опции находятся. в разделе Character
devices. После перезаrрузки должно появнться устройство /dev/nrtfO.
10.3.2. Маrнитооптический диск
я решил наПнсаТЬ этот l1араrраф в силу большой распростраиеиности
l\.lаrнитсоrrrическ.их ДИСКОВ. Первые маrНИТоОПТlfчеt:кие диски nодк.n-ю
чались к коитролдеру SCSI, что не способствовало нх шнрокому рас'
нространению lI"Jза довольно высокой стонмости. После выпуска первых
устройств с интерфейсом IDE IICHbl па маПtитооптические устройства
значитеЛЬНQ снизились.
Подключение маl'Нlпооптическоrо привода подобио подключению
жесткоro .иска. При этом следует помнить простое правило: не нужно
подключать к одной шине маrшпооптичсский привод и жесткий диск.
ЛОi"\rка [JpOcTa: маrНlI1'ооптические дискн облаДают довольно низкой
ПРОlrЗnОДlпельностью по сравнению с жестким диском, и использоваиие
двух ЭТИХ УСТРQЙС'rВ на одной шине СIШЗIП общую произnодительность
дисковой подсистемы.
После подключения не забудьте выполшпь процедуру AUТOOETECТ
дЛЯ даИНОl'О устройства. ОС Lil1ux определит маrнитооптический привод
как оБыкIIовен:ный жеСТкий ДИСК с интерфейсом IDE. Если вы пocnешl!ЛИ
323
UNUX: полное РУКОВОДСТВО
11, запустив Windows, чтобы полюбоваться новой буквой» списке доступ-
IILIX диско», отформатировали ващ маrиитооптический диск, то, скорее
Bcero, в Linux он будет работать некорректно. Ддя обеспечения нормаль'
ноЙ работы маrнитооптическоro привода в Linux запустите fdisk ДJlЯ Liпux
и удалите все разделы, которые создала Windows. Затем создайте один
l1ерви'IИЫЙ раздел и командой t измените ero тип на РАТ32.
Хочу отметить, 'ITO FАТЗ2 может раtЮтать HOBOJlI>HO MeдJIellНO, но позво'
лит сэкономить около 80 Мб ДИСКОIIОfQ пространства прииспользоваllИИ
маrнитооптическоrо диска размером 640 Мб.
10.4. Проrраммное обеспечение
для резервноrо копирования
10.4.1. Простое резервное копироввние по сети
Простейший способ сохранить KaTaJ\or со своиtш данными . это пере'
кинуть ero по сети на ДРУI'ОЙ компьютер. Утилита scp (Secиre Сору) по.
зволяет копировать каталоrи в защищенном зашифрованном виде не
только в пределах локалЬНОЙ сети, но и по Интернету. Например, вы
можете скопировать свои даниые с рабочей ма!Пинына домашнюю (чаще
наоборот, потому что компьютер назначения должен быть, разумеется,
ВКЛЮ'lен и подключен к сети).
Утилита srp служит клнентом демона sshd (п.1l.3.2), который должен
бьrrь запущен на компьютере назиаilения. Она устанавливается ИЗ Toro
же пакета OpenSSH.
Чтобы скопировать каталоr ihomldenimywork с узла saraksh в свой
Домашннй каталоr на узле dhsilabs, введите следующую команду:
[dn@saraksh ] $ scp .. r !l\ywork dhsi lar)s: /home/den
Ключ r указывает, '1то нужно рекурсивно КОЩlровать !lOдкаталоrи.
Вместо имев" узла dhsilabs можно (ItJIИ нужно, если это имя неизвестно
в службе DNS) ИСПОЛЬ10Ilать IР'адрес.
Если защнщещюсть ваши)( данных в процессе переда'ш для вас не так 1IЗЖ1Ia,
как способность инструмента отличать «свежие" фаЙJIЫ и копировать толь'
ко и)(, !IOJlьзуйтесь yrnлитой rsync. Она должна быть ycтaHOВJIeHa на обоих
компьютерах локальном и удаленном. чroБы скопировать с узла dhsiJabs
только те фаЙJIЫ каталOl"З mywork, которые 6ьши обновлены с момента Шr
слеДllеro запуска rsync, за вычетом подкаталоra Ьас kup, введите команду:
!den@saraks'1] $ rsyr:c az ....excludeol)ackup \
l...iJ1S i labs: п'юt11е/dеn/П1У10rk Л1ьmе/dеn
324
rllaвa 10. РезеРВН.Qе копирование и восстановление данных
Ключ z СЖlIмает передаваемые данные. Утилита rsync не шифрует
данных, но предостамяет В03можность ПОДКЛЮЧИТЬ для шифрования
оболочку ssh.
10.4.2. Управление стримером
Управление стримером выполняет проrрамма mt. Она входит в состав
пакета tntst, который обычно входит п состаll дистри/jутИВа (в дис'
трибутивах, основаниых На Red Hat, он присутствует). Проrрамма mt
использует устроЙство !dev!nftape, которое является символическоЙ
ссылкой на !dev!nrftO. Если вы ИСПOJlьзуете стример с интерфейсом
SCSI, вам нужно сделать ето ссылкой на ! dev ! s t о.
Посдс ПОДIUIЮЧСНШI стримсра необходимо подrотовить ленту к работе.
Вся подrотовка состоит из перетяжки леН'п>1И ее форматирования. При
перетяжке с поверхности пленкн снимаются статические заряды. Пере.
тяжку можно выполнить командой:
$ mtst E /dev/I1ftape retension
А вО1" форматирование вам придется nЫnОJlНЯТЬ с помощью nporpaMMbl
д.ня DOS, которая поставляется со стриi.lером. Можно, коиечно, исполь.
зовать и друrие проrpаммы. Стабильно работают Соппеr Backup Baslcs,
Nоrtоп Backup, а также QIC$tream. По завершении 3TOI'0 процесса тре'
буется инициализировать ленту:
$ mtst .! /dev/nftape етаВе
ВОТ теперь можно приступать к архивацш! данных. Например, если вы
хотите записать 1iЗ ленту содержимое CBoero домашнеrо каталоrа, ВЫ
можете использовать следующую команду:
$ tar cfz /dev/nftape !home!den
Здесь я ИС!lOльзовал команду lar, которая изначалыlO предиазна'/Злась
для работы с лентой (это видно из ее названия Таре Archive). Ключ
z указывает проrрамме tar на необходимость сжать данные. Для записи
без сжатня достатоqно КЛlOчей cf. Для восстановлеНЮI архива с ленты вы
можете использовать команду
$ tar xfz !dev!nftape
Если вы Не сжимали данные, то разаРХИlIируйте их с ключами Ю.
Проверить целостность архива на ленте можно с помощью команды
$ tar df Idеv!пftаре
Чтобы разместить на одноЙ ленте два илн более архивов tar. вам пона.
добятся средства позиционирования rоловки и пере мотки ленты. Это
325
LINUX, полное руководство
делается при ПОМОЩИ проrраммы mt. Например, lIеремотать ленту на две
отметки начала фаЙла в формаТе tar вперед можно таким образом:
$ тl -f' /dev/nftape fsf 2
Для перемотки назад вместо операщlИ fsf нужно использовать операцию
bsf. Список операциЙ команды mtBbI можете наЙти на тап-странице, а
в таблице 10.1 IlриведеllЫ чаще BCero употребляемые.
Операции nporpaMMbl mt
Таблица 10. r
Операция Назие"ме
eod Перемотtlть ленту ... .к()нцу :3SПИ(:аt!НЫХ ДflHHЫX.
ПfJio!меИ",(Jrr; ДМI ДQЭЦI1ИСИ фв.ЙЛО9 На.ЛеНТУ
ео! 3аписаТt> мотку КО+lца "a в текущую flD:JИЦio1to
': Cl'QPQTb Ленry
rnwlfld Перематвн. JleHry к _Ha\loМy
reIQf)$(1Jf1 Несколько рsэ npoMQтarta ленту, "Iтобы СНЯТЬ стзт'«!CJtие заряды
01Щnе Перемо-тз,!. lIeH'ry k HB\jaJty'M j.iЗl;lлечь И наКQnИТElf1Я
е/ее,
fsf <:'Iio1СЛО> ПереМQтат\:. lIенТ)' На <':ш.спо> фаЙЛО!:J ВПеред
bi=;f <-ЧИСЛО;' Первмотать lIеНТ)' на <ИСЛ,О> файлов назад
зsf Чtt?Мt!cр> ПеремотаТI:r ленту 1( наЧеny. файла с УК8ЗSJ.tНblМ номером
10.4.3. КомаНДbl dump и restore
Пара уТl'ЛИТ dump и restore это самое распространенное средство
резервирования и восстановления данных в UNIХсистемах. Они обслу
ЖИВalОТ файловую систему ext2 (ext3);TO есть для архивирован ия ваших
WiпdоwsраJделов их использовать !le удастся. Эти утилиты ВХОДЯТ В
состав пакета dump, который в дИстрибутивах Red Hat устанавливается
по умолчанию: если в Вашем дистрибутиве этоrо пакета нет, то скачайте
cro с http://dump . sOllrceforge .'het.
Проrрамма dump позволяет орrallИJОВIIТЬ инкрементное резервнрование,
сжимать полученный архив н разбlfвать ero на тома,l<оrда ero размер
преВblшает емкость внешнеrо НQ<.;ителя. Формат ВЬ130ва:
Gump [YPOBeHЬ] [ключи] списокфайлов
Номер уровня это средство, при помощи KOToporo проrрамма dump
выполняет ннкрементное аРХИВllрование. Исторически использовались
номера от О до 9, Liпuх-версия проrpаммы понимает любое целое число.
Уровень О соответствует полному копированию всеЙ фаЙЛовой системы.
Уровень N архивирует только те файлы, которые IIЗменились с момента
СO"Jдання послеДllеrо архива уровня ниже N. Уровень архива и время ero
создания отмечаются n файле /еtс/dшnрdаtеs, если команда dиmp за
rtущенlJ. С КЛЮЧОМ u.
326
rпaвa. 10. Резервное копироваt-tие И восстановление Данных
в качестве списка файлов можно указывать не только файлы и каталоrи
На смонтированных файловых системах, но I! файл устройства, на котором
находится фаrfЛовая система, в данный момент размонтированная. Един
ственноеоrраничение такую файловую систему можно архивировать
только ПОЛIIОСТЬЮ (уровень О).
Полный список ключеll команды dump вы найдете на ее mапстраllиuе.
Вот наиболее важные IIЗ них:
. -f <файлы> список ИМен файлов, разделенный заПЯТЫМИ. Тома
мноroroмвоro архива ВЫВОДЯТСЯ в указанные фаЙлы в порядке их
перечисления. Это MOryT быть файлы на диске, файлы устройств,
стандартный вывод (символ «»);
. -п после успешноro аРXlширования отметить дату и уровень в фаlUlе
letc/du.mpdates;
. -z[уровеньсжатия] сжимать выводимый архив средствами библи-
отеки zlib. Значение уровня сжа11lя по умолчанию ранно 2; друrой
уровень нужно указывать без пробела.
Проrpамма restore восстанавливает отдеЛЫlые файлы и файловые СИсте-
мы, архивированные проrраммоЙ dпmр. Формат команды;
rE.!store [режим] [ключи}
Важнейших режимов два:
. -i интерактивное восстанонление отдельных фаЙлон I! каталоrон.
Подкоманды этоrо режима (список которых можно получить по
под команде help) позволяют перемещаться по архиву, ошавдение
KOTOpOro прочитано с ленты, как по обычному дереву каталоroв, и
выбирать файлы для носстановления. Выбранный файл добав.'lЯется
в СПИСОК носстановления полкомандай add. Список носстановления
II3Нl1екается с ленты подкомандоЙ extract.
. r полное восстановление файловоЙ СИстемы. Пострадавшую
файловую систему HYJlo:HO сиачала отформатировать комзltJtой mkfs
(п.2.3), смонтиронать И перемеСТIIТЬСЯ н ее корневой каталоr. Потом
восстановить с ленты арXl'" уровня О, а потом все инкрементные
архивы в порядке возрастания номера уроння.
10.4.4. Архиватор cpio
(}NUверсия 31Оro классическоro архиватора (Сору lll/Out), иcnользуе
маи в Linux, поддерживает архины как в собстненном формате, так и Jj
формате tar. Проrрамма cpio может работать в одном 113 трех режимов в
зависимости от пероorо ключа:
327
LINUX, полное руководство
. cpio o [КПlочиJ < списокфайлов > архив :реЖИМСQру-оut,
копирование файлов в архив. Cщtсок файлов, по одному в строке,
подается на стандартный вводлроrpаммы; в архив перенаправляется
поток crандартиоro вьшода. В юiчеc:rве архива можно указьmать файл
lIа диске, файл уcrройства маrниТlЮЙ ленты МИ каим: например,
можно пропустить вывод через какую-нибудь проrpамму сжатия.
Список файлов можно подrotoВIIТЬ вручную, а можно использовать
поток вывода дрyroй проrpаммы, например, 1 s -1 (с ключом «де-
фис-еДИНlща», выводящим ФaftiIЫпо одному в строке) ИЛИ find.
. cpio i [клю'ш) [шаблоны) '" архив ; режим wру-ill,извлече-
иие фаЙлов из архива или J.lывододсржзш{я архива. Архив читается
из L"Тандарлюm ЛQ'IUка ВВОДз. ДЗ!!lIечению подлежат талько те файлы,
имеllа которых удовлетВОpЯЮ"f.QДllрму из щаблонов, перечислениых
'Iерез пробел; если шаблоны Не указаны, то извлекаются все файлы.
Внимание: СltМволы подстанОВКI! не COJ\падают с теш, которые исполь-
зует оболочка. символу «.» УДОllJlетворяет любая подстрока R начале
образца. а символу «/» В .[МенИ фаЙла любой набор СИМвОJlОВ.
. cpio-p [ключи] каталО):-назначеfIИЯ < списокфайлов :
режим copy-pa.rs, копирование дерева кaTaJlOroB.
О КЛЮ'Iах комаНДЫ cpio МOJкцо узцать I1з ее mап-страшщы. Приведу не-
сколько примеров ее использования.
АРХlIвировзние в формате tar под имеlIем archi ve. tar файлов, имена
которых вы ввод»те в командной CТPOl[e:
$ cpio -о -.Н tar -о al.chive. tar
/opt/ctrl/ctrl.c
/opt/ctrl/ctrl.h
/opt/ctrl/ctr1.htm1
'D
$
Архивный файл будет создан с оохрзuением структуры катзлоroв. Чтобы
убедиться в этом, запустите файловый менеджер те и просмотрите со.
держимое архива archi ve. t ar.
АРХИВИРОI!аllие текущею катзлоrа с использованием перенаправления
вывода команды Is:
$ 15 -1 I cpio .o -Н tar -о currer1tciil. tar
Извле'IС!iИС файлов из архива:
$ cpio .). < с"Urrепtdir. tal"
в режиме copy-iп ключ формата «-н taP, указывать необязательно,
потому что проrрамма cpio автоматически определяет формат входноrо
архива.
328
rЛeisa 10. Резерв..юе копирование и восстановление данных
Просмотр содержимоro архина на маrнитной ленте:
$ cp.io . i .,t < /dev /n ftape
10.4.5. Проrрамма AMANDA
Этот параrраф я помещаю здесь, так сказать, «Иа нырост». Администра-
тору домашие>! сети он вряд ли приrодится.
Проrрамма AМANDA (The Advallced Marylall(l Ашоmаt;с NelWork DLrk
Archiver) это система резервноrо конироnания, которая позволяет
8J(МИII\\С1'ратору локальной "еПI установить один rлавный бэкап-сервер
ДJIЯ резервноrо копирования множества узлов локальной сети. При этом
вам не придется ПОДХОДIПЬ к каждому компьютеру, чтобы сделать ре-
зерпную КОПИЮ. AMANDA 11спользует стандартные проrрэммЫ dитp и
lar, поэтому вы мажете ВыпоЛнить резервное кониропаннс боЛЬШllнстпэ
[JNIХ-стзнций. Последние верси\! просраммы позволяют ВЫПОЛНЯТЬ ре'
зерШlОе копирование рабочих стаlЩИЙ MS Win9xJNT, но для этоrо нужно
устаноВlПЬ пакет SAМBA.
(качать I1porpa"'y вы можете с сайта разраБОТЧlIка www. arnanda. ()rg.
Вам потребуются 3 пакета: arnanda, аmапdа-сliепt, аmапdа-sеrvеr. Первый
пакет устанавливается как на сервсре, так и на клиенте; второй пакет
только 113 I01иеl1те, а трет\!/< только 113 ССРllере,
Я рекомендую заrpузить самую поледнюю версию. Как правило, ca!,ibIe
новые верСИR.раС11ростраНЯJQТСЯ не в виде RP-пакета,а.nвнде так на-
зываемоrо тарболла фаЙла с расшнрением tar.gz. Распаковав архивы,
выполните команду:
$ .Ic()nfigure -..with-config=net,"ork --wНh-С1sеr=аmапdа
--with-group=operator
Опции with-user и with-group указывать обязательно. Желательно перед
выполнением данной Koыal1ды создать пользователя ашапdа и поместить
ero в сруппу operator. Название нашей конфиryра1ll111 network. Так
же будет называться каталоr с резервными копиями.
Если вы плаl1ируете делать резервное копирование с Wiпdоws-машины,
нужно добавить ОIlЦIJ:Ю wi tr1 smbcl i ent..= /patti/ tol SInbcl ient.
Обратите нннмание на то, ,(ТО:
. На клиеНТе сначала нужно устанощlТЬ пакет amanda, затем
amanda-<:lient. На сервере вместо пакета amanda-client нужно устано-
вить пакет amanda-server.
. Пользователя amanda нужно добавить на всех машинах сети, с кото,
рых предполш'ается архивироваНllе даиных.
329
l\NUX: полное рУКОВОДС'!1!О
После успешноro завершения IIpOtpal.lMbI configure введите кома!щы
таке и таке install.
Основными коифиryрациоииыми файлами AMAND'bl служат /etc/
amanda/amanda.conf и /еtс/аrщШdа/disklist. В этих файлах на-
ХОДIПСЯ информация о стримере;"РРll1делах, коТорые вы хотите резер-
вировать, а также друrая ВI!ЖJl:I!II. /'рт AMAND'bI информация. Пока
воспользуемся файлами по умолчаЩIIО. Откройте их и измените только
специфические для ваШей сетиnараlетры.
В файле di ЕКН s t нужно прописаТ1> IЩена узлов ceтu, которые вы хотите
архивировать. При этом лучше прщщcьtSать IP-aдpeca, поскольку некото-
рые версии AМAND'bl и»отдан:;:: M91yt преобраЗОВl!tь имя узла в IP-aдpec
(почему сам не ЗflаlO, ведь всеДОЛЖI;IО работать через DNS).
Теперь ПРИСТУПИМ к настройке уздо.\J, резервнуlO КОПИЮ'КОТОРb1Jl вам
нужно создать. Если.эти узлы ИСПОЛЪЗУlOт устаревший суперсервер ioetd,
11 фаЙл /etc/inetd.canf НУЖНО'добавить такие строки:
а,,",ш1а dgram цдр wait amahda ]ш,r]1iЬе.хес/amandаd ,эт,mdаd
аrм.пdаidx stream tcp nowait amatida jusr/libexec/amindexc! iЭJn.\l1dехd
ашidxtаре strеащ tcp 11c""it amзi1dЗ./usr/l:ibexec/ашidxtaped arnidxtai;ed
Если же используется суперсеl'l!l?рхщеtd, то в фаЙл /etc /xinetd. conf
нужно добавить слеДУlOшие строКи:
Листиwr 10.1. Коwфиryрироеаllие "лужбы AMANDA
service amarida
):t'-()tocol
socket.type
!Naic. =. ПО
u.ser= amanda
serveI' = /usrl1ibexec/amandad
10gоп....fаi1urе += USERID
i
service amandaidx
{
protocol = сер
,;ockettype = st теат
"",ait по
;.lser = amanda
:;e,rvf.l!:' -= /usr/li.bex.ec/a.mindex.d
log(т,failure + USБRID
идр
= dgl-аlТ1
service а.Шl<l:{tаре
ззо
rлава 10. Резервное копирование 14 восстановление данных
{
protocol
sockettype
wait ::: ПО
user = amanda
server /usr/libexec/amidxtaped
logohfailure + USERID
}
= tcp
stream
Затем в файл /etc/. rhosts нужно добавить строку:
192.168.0.1 amanda
Чтобы изменения вступили 8 силу, желательно перезаrРУЗIIТЬ компью-
тер или перейти на первыЙ уровень выполнения 11 обраl110 по команде
telinit.
Теперь нужно пометить кассеты стримера. Это 110зволяет сдела'rь команда
amlabel. ЗареrистрируЙтесь как суперпользоnатеЯh. вставьте в стример
Первую пленку и В6едите команду:
# amanda c 'amlabel network tape1'
Здесь «nelwork» ЭТО имя конфшуращlИ, заданн(}е n файле аmaпdа . сап [,
а «Iape!» это метка вашей Пленки. AMANDA заПllшет ИМЯ ПЛel{КlI
в список пленок, поэтому у вас никоrда не будет двух кассет с одной
меткой.
Вам больше не нужна какая-нибудь лента? Для ее удаJtения из списка
введите команду:
# arnanda c amrmtape network tapel h
Команда amcheck позволяет проверить созданную вами конфиrурацию
И сообщить о возможных ошибках:
# amanda c "amcr-leck network"
Вот теперь можно приступить к резервному копированию. Введнте KO
манду:
# amanda c "amdwnp пеtwоrk' &.
Архивирование данных по сети оБЫЧIlО занимает MHoro времени, поэтому
е1'О следует запускать в фоновом режиме. qтобы узнать состояние про-
цесса архивирован ия, 6веДIIте команду:
# amanda c "amstatus network'
Если У вас возникла неоБХОДliМОСТЬ восстановить какую-ннбудь рабочую
станцию, зареПlстрируйтесь на ней как суперпользователь, переЙДlIте в
корневой каталоr и nведите команду:
331
UNUX: полное р\«оводсто
# атапда c amrestore network n
Проrрамма amrestore соединится с сервером кассет. В ответ на приrла
шение сервера введите:
sеt.дisk sdO-Е
После этоro вы сможете просматрцватъ файлы Ц каталоrи резервной ко'
пии так же, как при работе с FfP-сервером. Если вы найдете файл или
каталоr, который хотите восстаJjОВИТЪ. введите команду:
адд имяфаЙ.i1аиликатаJ10I'а
Выбранный вами файл будет добавлен в список восстановления про'
rpaMMbl amrestore. для извлечения добавленных в эroт список файлов
введите команду extract.
За дальнейшимlI инструкциями обратитесь к документациц по системе
AMANDA.
10.5. Дублирование данных:
введение в RAID
Идея надСЖllOСТИ хранения даННbIX:волн:овала, волнует и будет ВОЛНОВIIть
не одно поколение системных адМllНистраrоров и пользователей. Исполъ
зуемые ОС Linux файдопые сисТf.:МЫ ext2 и ехtЗ обnадают достаточной
С"rепеньЮ надежности, но зачастуlO З1'оrо мало.
Если существует верш!тность потеp.l\ТЬ данные в результате выхода из
строя жесткоrо диска, то единственным выходом нз данной ситуации яв-
ляется иснользоваШrе массивов жестких дисков RAID. RAID (Reduпdaпt
Апау 01" /пdepeтkпt (J/Jcxpcпsi>'e) Disk) это способ хранения дакных
с избыточностью на rруппе независl\МЫХ (нсдороrиx) жестких дисков.
Под избыточностью понимается дублирование данных и хранение до-
полнительных кодов коррекции ошибок_ Bcero существует 6 уровней
RAID (таблица 10.2).
Чаще Bcero ИСПОЛЬЗУЮТСЯ массивы уровнеЙ О, 1 и 5. Иноrда встречаются
комбинированиые способы объединения JIaljHblX в массив, например
RAID-I0 (RAID 0+1) это чередование блоков данных на двух парах
дублирующих друr друrа дисководов.
RAID-5 использует дисковое пространство ЭКОИОМНСС, чем RAID-l, так
как избыточиость представляет собой не полную копию информации, а
только контрольную сумму. Но за высокую эффективность использова-
ИНЯ пространства ПРИХОiНlТся плаппь более низкой скоростью обмена
данными.
ЗЗ2
rлава 10. Резервное копирование и вОССТановление АЗННЫХ
УрЩt.ч« ААЮ
Таблица 1О.2
УРС.ОМ" OfМcaMKe
rрупл:а ДИСКО80дщt f>в:; избыrоности. Эrоr ypClB('tHb nредназначвн Д1J xpaHв
Q НИЯ боЛЬШИХ объемов Д3t1НЫ;(. не УМеЩаЮЩися На ОДМОМ ДиСkй, И ycl(ореl"lИR
("nОlЮсатый., доступа к НИМ. Последоват-ельные блоки од.ноrо фаR.nз храмтся на разwы)С
s;tripinU) ДИСКDQОДах. EM"Ot;!b массива ровна суммариоЙ ешю(;.!и всех дисков, об.
раз)'юUJМХ массив
, ДиСКQ1ЮДЫ, ВJ\одящи.е D rpYl1l1)', содержат одинаковые данные и образуют
,:дис.::osoе эеро, ОДИн лоrичс1о;"И диск. БтlrОДа.рR этому clo:opa-crb 'l"fенИя (НО Не 38ПИСИ) 80.3*
IniHorlng) растает вдвое. емКОСТЬ массиве равна ем"ости C8MorD меньшеrо на дисков
2 3аnи(;ь нв рвзные ACKOBOДЫ r'рОИЗВОДИ1'Сj:l Ме1'ОДОМ ереДО8at1ия ..с.трай
пав.. размаром 6 ОДИН l;elCTOp с добаелением КОДО8 испраВЛВНМR ошИ'бок
Тй жв, '110 уровень 2, на r:OI-lТРОЛt>liыВ !()ДЫ "<IПИС!;.l&8IОТCj:I Н81:lТД9nЬiiЫЙ ди(:к.
3 При ОТК8Э одноrо ИЗ дисков ОСТВIJШИСЯ АИСКi'I МОЖНО ИСnOПЬ30В61Ъ I1ЛII
I----- воссrаНОaJ1ВНИJl хРЦНИЩ.lIейCR на нем I4liформаЩ1И
4 1"0 :Жв, "11"0 урооень 3, но рэ.змвр СТрайnов несt.:nllыш cextopo8
То же, чro урое'*"" 4, но KOH'-РОЛl.Ныа СУММы мранЯТС1l не HВI ОДНОМ ДИСКО80-
5 де, а Ж:'t зсе)/; по очередVl, При выходе иЗ' С'ТрОJ:l OДIoro из ДНСКОВ потерянные
[Мl!ССИВ Данные В(,КД;Нlна8t\9аюi(:" с ПоМощью k.oHTponbHbl.lc суММ. ОБЩая еМКОЬТЬ
с 6рэщающеЙСЯ- М8ССИ88 ВЫЧИСПЯ&iСЯ по формле- m!nslze'(n.1), rAe minsize об'"м
elHOCrl;>lQ) нименl;oWП)"3 ДИС"ОВ, а n IЮ'nИ'f8сrоо i1И'GltОIl В fyt3CCI'!"e. Миt1имапl;J'юе
КОnИ'I8СТ'еО ДИСЖО8 равн() трем
ОрrЮНlзаци" масси»а RЛJО доступна не каждому изза нее еще нысокОй
стоимости аппаратных KOHTpOJUlepOB RAID. Хот" производители MaTe
ринских плат пытаютс" поправить это, выпуская материнские платы со
встроенными контроллерами RAID, нО такие контроллеры не слишКом
универсальны и обладают слабыми возможностями.
ОС Linux поддерживает проrраммные КOIпроллеры RAID. ПРlIмеиение
проrраммных KOHTpOJUlepOB имеет как СВОИ пренмущества, так !! Heдo
статки. К достоинствам ОТНОСИТСS! возможность использования дисков
с различными интерфейсами, иапример SCSI н lОЕ, для орrанизации
массива просраммному контроллеру все равно, с чем работать. He
достатком же ЯВЛЯеТСЯ дополнительная наrpузка на центральный про
иессор он выполняет всю работу по обеспечению функционированиS!
массива RAID.
Итак, приступим к созданию массива RAID. Вам понадобится любоЙ
дистрибутив с поддержкоЙ проrpаММllоrо контроллера ItAID: такой воз
можностью обладают практически все современные дистрибутивы. Для
ВКЛЮЧеНИ" поддержки RAID вам придется перекомпилироватъ ядро.
Включить поддержку RAID можно» разделе Block devlces конф1!rypатора
ядра (make mеrшсопfig). Нужиая опиия называется RAID n support,
{де n это номер уровня массива RAID. После этоro нужно устано-
I<ИТЬ пакет raidtools, в состав KOToporo входят про!'раммы raidhotadd,
raidhotremove, mkraid и друrие.
333
LINUX, полное РУКОВОДСТВО
Для орrанизации массива уровня RAID 1 нраю В!>1дeJIИТЬ два раздела
и I1ЗмеНlrrь тип этих раздеЛOlI ЩJ Linux raid autodetect. Обратите внltма-
ние, я написал «два раздела», а НЩlа диска», так как конфиryрируется
проrраммньЩ контроллер. КонеЧцi:!,'ЛУ'lше, чтобы Э1'1I разделы распола-
raлись на разных дЙсках, в проrnВНОМ случае от машеrо массива будет
мало толку,
Если ваше ядро щ)ДдерJКивает RAJD, при заrpУЗКе сщ::темы вы должны
увидеть ПРl1мерно t;Jlедуюшее:
тд driver' 0.90. О МАХМDDЕvs",i5б. MAXREAL"12
raid5, measuring checksumming зрееа
raidS: мих detected, trying high_speed мих checksum rоtltiпеэ
pIlmmx : 980.694 МВ/эес
p5ттx: 999.744 MB/geC
8r'eg8' 753.237 МВ/8ес
32regs, 444.246 ME/sec
Ц8irщ Еа8ЕевЕ function: p5..J!1!!1X '(999.744 МВ/вес)
md.c: sizeoElmdpsupert) 4096
Раrtitiоп check:
пда, пда1 hda2 < l,da5 hdз6 hda7 haa8 >
<шtоdеt.есt ing RAID аттау",
aHtorun ...
'.' autorun DONR.
Теперь отрслактируйте файл /etc/ra1dtab.
листинr 10#2. ПримеРНhlЙ файл jetc rшdtаЬ для уровня 1
# Имя УСТрОЙСТВа RAID
raiddev /dev/mdO
# Уровень
raid.-J.evel 1
Chlтk-size 8
pe_rsiste1J.tsuperblock 1
# Число ДИСКОВ в массиве
nr..raid.disk 2
# Число дисков, которые I5yДYT ИСПQ1JьЭоваТhСЯ в качестве замены,
# если ОДИН ИЗ дисков выйдет ИЗ строя
nrspar.edisk О
334
rлава 10. Р€зервное копирование и восстаНО8ление данных
# Определяем первЫй диск RAID
device /dev/hdbl
raiddisk о
# определяем второй ДИСК RAID
device /dev/hdcl
raiddisk 1
После зтоrо нужно создать устройство /dеv/шdО, для 'Iero выполНl!ТС
следующую команду:
# mkraid /dev/mdO
в некоторых случаях нужно будет IIспользовать дополнительные па
раметры, о которых вы можете НРОЧИТаТЬ в справочноЙ системе (юаn
mkraid). Если иниuиализация прошла успешно, 9 файле !proc !mdя[,.аt
вы увидите примерно следующее:
PerSO!1a1ities, lraidl ]
readahead 1024 sectors
mdQ: active raidl hdсl[ljr,йы1о!!
10.6. Как найти, спрятать
и безвозвратно уничтожить данные
Просмотреть содержимое ASCIl-файла нетрудно. но что, если вам нужно
узнать, что находится в двоичном файле неизвестноrо формата? Можно
"сrЮЛЬЗО8ат.Ь щестнадцатеричный просмотрщик hexdump, который 8 за.
висимости от указаиных ключей 8ЫВОДИТ содержимое файла в десятичном
(-d), восьмеричном (-о) или каноническом АSСП+шестнадцатеричном
(C) виде:
$ hexdump c /5bi"/init I less
ОоОООlЗОOl ею 00 00 47 4е 55 00 ОС 00 00 сю ш О() 00 00
!... .G1Ш..,... ..1
Но таким способом искать в двоичном фаЙле текстовые фрш'менты не
слишком удобно. Утилита strings ИЗВJ1екае1' из файла НОСJlедовательности
печатных СИМ80ЛОВ длиной не менъше указанной (по умолчанию 4 сим
вола). В качестве файла можно указать весь дисковый раздел:
$- strings H 18 /dev/hda4 I g:r:ep "образец для поиска"
ОсобеинOCl'И файловой системы ext2 подсказывают, что даиные можно
храниrь IIИС вфайлах. В самом дсле, фаЙловая систсма адресус.. блоки
ЗЗ5
UNUX: палное.РУКО80ДСТВО
размером 1, 2 или 4 Кб, но что есЛl! «Хlюс'r» файла не занимает блока
целиком'? Это место, «резерв» (sJack), остается неисl10дьзованным. Cy
шествуют утилиты, ПО:1ВOJIяюшие'заnисыва.ть данные в "резервы», читать
эти данные и затирать их, есди необходимо. Эти данные будут невидимы
для файловоЙ системы, недоступнi,! для обычноro ИСIIО!lьзоваНlUl l[ не-
обнаружимы средствами проnерки цеЛОСТНОСПI фаЙла (inregrily checkers).
Таким способом можно храlШТЬ секретные данные.
Одна из таких утилит Ьтар
(ftp: 11 ftp. всу ld. com/pub! fОJ;'еnsiССОJПрuting!Ьmар).
Например, вот как эта команда заIщсы!Jет дaHныe В «реэерв», СОЗДilнНЪ!Й
файлом letc/passwd:
n echo "здесь слрятана строка" Ibmap mode putslack Iсtс/ра,sэw:J
А вот так эта команда показывает данные:
# Ьтар -mode slack fetc!passwd
getting from block 887048
file size Wd$: 9428
slack size: 2860
block size: 4096
здесь cпpTaffa строка
Для затирания «резерnа» (удменWiекр\>lТOЙ информаЦlПl) используется
команда:
# Ьтар mode wipeslack !etc;passwd
Предотврати'!'Ь восстановление УДМIЩН:ЫХ файлов с конфилеНlЩалъной
информацией можно, забив НУдЯWI освободившиеся блоки. СамЫЙ про-
стоЙ способ сделать это состоит в использовании стаилартной Linux-YTII-
литы dd, Вытереть пустое место на разделе /!ЮПlе можно так:
$ дд if=!dev/zero of=/home/bigfile
$ sync
$ rm !homefbigfi1e
$ эупс
Утилита shred IП пакета coreut i1s, входящеrо !I подавляющее боль-
шинство дистриБУТIIВОВ Liпuх,затирает файл перед ero удалением, не-
сколько раз записывая на el'o место случайные данные. К сожалению,
ее примеиение имеет смысл не на всех фаЙловых системах, а только
на тех, которые Itереписывают файл «на месте". Файловые системы
со включенным журналированием (п. 2.2.2), избыточностью (RAID),
КЭШIlРУЮЩllе I! сжатые не позволяют удалить файл без возможности
ero 1JосстаНОfJления.
ЗЗ6
rЛд.ва 10. Резервноокопирование и восстановлеНlltе дакных
Остатки конфиденциальною ф MOryт уцелеть в аварийном дампе
rrамяти, страницах паыяrиiвенных Щl диск (раздел rrодкачки), так
что в целях ДОЩ>JJНJlтельноЙ безопасности следует затирать весь раздел,
I swap и(ца псякий:случЩi) раздел с i:t,mp. Утилита shred разрешает
указыва.ть n качсстnс фаЙла, подлежащею затиранию, файл устройства
(например, /dev/hda4).
На саЙТе ТЬе Hacker's CllOice (www. thc .org) можно скачать пакет THC
SecureDelete, а также узнатЬ побольше о безопасности данных и борьбе
с ней.
ЗЗ7
rлава 11
БАЗОВОЕ
КОНФИrYРИРО-
ВАНИЕ СЕРВЕРА
СЕРВЕРНЫЕ ТЕхнолоrи и LINUX
орrАНИЗАЦИЯ и СОСТАВ
LINUXCEPBEPA
СУПЕРСЕРВЕР XINETD
УДАЛЕННЫЙ ДОСТУП: SSH И TELNET
LINUX ПОЛНОЕ РУКОВОДСТВО
11.1. Серверные технолоrии Linux
Каждая оперauИОlUlая система IIмеет свое «прнзвание». Операционную
систему Windows NT Server предпочтительнее использовать как сервер
рабочих rpупп сетей Мiсrosoft. Система NoveJJ Netware лучше «смотрится»
l' роли файловоrо сервера 11 сервера печати. ОС UNIX первоначалыlO
разрабатывалась как интерllетсервер.
Средства ДЛЯ работы с Сетью встроены непосредственно в ядро этой
операционной системы, а Все необходимое проrраммное обеспечение
ДЛН орrаиизации сервера входит в состав дистрибутива. UNIХсистема
ра(ютает со всеми сетевыми протоколами (особенно с TCP/IP) лучше,
чем любая дрyrая операционная си'тема для платформы Intel. Недаром
)'оворят, что UNlX создан для сети, как птица для полета. Все перечис.
ленные выше качества касаются также и ОС ипих.
Еще один важный аспект докумснтацllЯ системы. Вt:e без исключения
Uпiх-под06ные системы очень хорошо документированы, и поэтому вся
необходимая информацllЯ для настройки сервера, по сути, уже есть в
нашем компьютере.
rде же применяются Li11uх-серnеры? Прежде Bcero, это интернетсерверы,
Вы можете спросИ1Ъ, почему именно Linux (Unix)? Почему не какая
нибудь друrая операционная система. HanpltMep, Windows NТ (2000)'1
Д,авайте подумаем вместе. В начале 60x rОДОD по приказу Министерства
обороны США была создана сеть Аrрапеt. которая и послужила в даль
нейшем прототипом для создания Интернет. Как можно использовать
NТ -сервер в качеСТDе интернетервера, eCIIII он был выпущен в 1996 юду?
А Интернет-то существовал с 70-)( rолон. И существовал именно блаro-
даря Uпixсистемам. Так почему же не использовать ДЛЯ I1реДОl-тавлеlШЯ
Ilнтернет-услуr родную оrrераllИОННУЮ систему?
МJlоrие прввmельственные 11 ФJlнансовые орrаннзацин всеro мнра, напри
мер, Министерство иностранных дел rерАIaII'И.II, используют Linux (SuSE
Linux), а немецкий Drespner Bank сооместно с американской компанией
CollabNet объЯl!ил о новой банковской информационной системе, постро
еНIЮЙ на основе Linux. И тут, как вы ВИДИ1е, дело не в деньrах платить
339
LINUX, попное руководство
или не платить за Linux, а в заботе орraнизаuий о своей IшфорыашlOННОЙ
безопасности и надежности своих серверов, Как объяснить клиенту, что
ero с'!ет «будет закрыт», поскольку «nporpaMMa выполнма недопустимую
опсраuию»? Тут даже созданный журнал ошибок не поможет. Недавно
открытый сайт президента России, к которому предыlВЛЯЮТСЯ повы-
шенные треБОllания надежности, безопасности и производительности,
бащруется именно на основе Red Hat Linux.
Второй отраслью применеIШЯ Liпuх-серверОR ЯВilяется создание кластеров
ддя ПРОИ1веденИJ! параллельных выч:ислениЙ. ПО определению кластер
это HeCKOJJbKO компьютеров, объединеН!lЫХ вместе для COBMeCТHoro ре-
шения одной задачи. Объединеш!е компьютеров, как правило, пронзво-
дятся с помощью IIbICOKOCKOpOCТHOl1 сети. На сеroдняшниit день создано
спеUlIзльное проrраымное обеспеченщ, позволяющее собрать кластер
даже 8 домашних УСЛоВИЯХ, например, PVМ (Paralle! Virtual М<lсhiпе),
Помимо вcero вышеуказанноro, существует еще множество направлений,
rRe используются Liпuх-серверы: WWW-cepnepbl, РТР-серверы, почто-
вики, шлюзы, можно-даже эмулировать домен NT с помощью пакета
Samba. при этом нужно учитывать ТО, '!то все необходимое проrраммное
обеспечение уже входит в ваш дистрибутив:
1. веб-сервер Apache
2. РТР-сервсры wu-ftpd и ProFТPP
3. AreHTbl МТА (Mail Тrалsfеr Аgалt) sепdmail и postfJX
4. Поддержка сети Мicrоsоft пакет Samba
5. DHCP (Dynamic Host СопfiguraliОпРrоtосоl)-серllер, который ИСПOJIЬ-
зуется для автоматическоro иазиачеllИЯ IP-aдpeca рабочим станциям
в сети
6. Прокси-сеРl'!ер SQUID
7. Браlщыауэр IрChаiпs И/МИ [pTabies
8. Сервер баз данных MySQL
9. DNS-сервср
10. Специальный прокси-сервер Socks5.
Подробно о настройке всех этих служб, а также о MHOroM друrом IIbl
сможете ПРОЧlIтать в моей К1fиrе "Liпuх-сервер своими руками". третье
издание которой вьппло в 2005 rоду в издательстве «Наука 11 Техника».
11.2. Орrанизация и состав LinuxcepBepa
Что такое сервер? С точки зрения нодьзователей сети, сервер зто уда-
ле,IНЫЙ компьютер, выполняющий некоторые функuии, например. прием
и отправку электронной почты. С точки зрения нас, администраторов,
сервер зто проrрамма, выполняюшая определенные фуюшии. Раз
340
rлааа 11, базовое конфиrypирование сервера
уж мы рассматриваем ПОЧ'fOвыйсероер, то на этом компьютере должна
быть установлена специальная nporpaMMa, которая будет отправлять и
принимать сообщения,
Компьютер без этой протраммы (которую мы также будем называть
сервером) это просто рабочая станция, Мало просто установить опе
ращlOИНУЮ систему Liпuх, нужно еще у-тановить протраммысерверы,
которые будут выполнять те самые функи ии, которых ждут от сервера.
Построение LinuxcepBepa нужно начать с настроЙки суперсервера
xinetd (в более старых дистрибyrивах inetd). Суперсервер зто основа
основ: без нета не будет работать большинство сетевых сервисов, таких
как РОР3, IMAP, ПР (если он не запускается отдельно). Сервер xinetd
называется суперсервером, потому что ои отвечает за установление ТСР.
соединения, то есть прослушивает lIакеты и передает их на обработку
ЛРУТИМ протраммам, управляя таким образом дрyrими серверами. НаllрИ
мер, если в запросе клиента будет требование установить соединение с
лвадцать первым портом, то суперсервер вызовет сервер FТP: конечно,
при условии, что соединение с 21 портом разрешено (в противном случае
клиент получит сообшение "Connectioll refused,,).
ei llnl . Ш r; "' !.I:l ! t;:j{91
По nрааде rOBopR, новее T6J< просто. kaK R описал. На Пракrике за установление
, ТСР-соединенй отвеч.ает деман tcpd (В ранних версиях Unux ero не была).
nроrpaммысеР8ИСЫ (httpd, ftpd) MOryт ПОСТОЯННО находиться s памяти (режим
standalone): 8 ЭТОМ случае ОНИ сами 06рабаТЫ881ютnакеты, и cynерсер8ер их уже
не вызывает. НО это ужв детапи. и ани картины не мвняют
ОПlеситесь к настройке :xinetd с должным вниманием: от тото, как вы ето
настроите, будет зависеть работа вашеrо сервера.
После настройки xinetd можно ПРИСТУIIИТЬ к настроЙке конкретных ceTe
БЫХ сервисав. Я вам рекомендую настраивать не все подряд (по принципу
«чтобы было,,), а только те сервисы, которые вам сеЙчас нужны. Напри
мер, если вы настраиваете почтовик, то нечеrо ив нем устанавливать
DNS-сервер, вебсервер и FТPcepBep. ЛУ'lше хорошо настроить дветри
нужные службы, чем исполь:ювать десяток (вклю'l3Я F/ужные и ненужиые)
с настройками "по умолчанию». Помните, что неllастроеНIЩЯ служба
это потенциальная дыра в системе безопаCIIОСТИ вашеro сервера,
Если вы настраиваете серверы провайдера, я Iшстоятельно рекомендую
разделить серверные функции между разными компьютерами, Не I!УЖ
но, чтобы одии компьютер обслуживал и входящие ЗВОIIКИ, и почту, И
разрешение имен. Для провайдера целесообразно разделить функции
серверов так:
341
UNUX, полное руководство
. Два отдельных DNS-cepoepa пероичный и вторичный. Пусть себе
стоят в yrлу DNS-cepoepw редко требуют администрирования, если,
конеЧIЮ, вы не выдаете доменные имена по десять раз за день.
. [лавный сервер, "оторый обслуживает одновременно и входящие
звонки (diaHn), и почту. .
. Отдельный оеб-сервер. Обычдо на веб-серВере устанавливаются
интерпретатор", РНР, perl!! pBep баз данных MySQL. Если поль'
зователям нужен доступ к их файлам. можно настроить на этом же
компьютере FТP, 110 Я рекомендую вместо FTP использовать ssh.
Конечно, если ваши пользоватедипоЙдут на такие жертвы ради без-
опасности.
Если же вы осраничены в средствах, ЩJЖНО все это добро установить на
одном компьютере. Надежность c)(eы «все В одном» значительно НИЖе, и
в ОСНOIшом она исщщьзуется для тec"fllрования проведения небольших
э"сперимснтов с сет",выми сеРВllсамl!.
Сейчас мы подробно разберемся, что nyжно устанавливать на ваш буду-
uulй иних-сервер. Предположим, что вам нужно настроить веб-сервер.
Тorда нужно установить и настроит!> следующее проrраммное обеспе-
чение:
. Сynерсероер xinetd вы уже знаете, для чеrо он нужен. НастроЙку
любою Liпuх-сервера нужно начинать именно с настроfuщ xinetd.
. Пакет арасЬе (в некоторыхдщ:трибутивах он называется httpd). Про-
rpaMMa АрасЬе о!>Шолняет ФУIIJЩIЩ веб-сервера: uмеlШО она передаст
пользователю веб-страницу, котда тот введет URL страницы в окне
ораузера.
. Если ваши пользователи желают проrраммировать на РНР, нужно
установить паКет РНР. Связке щ:р-сервера Apache, интерпретатора
РНР и сервера баз данных MySQL посвящена целая rлава, поэтому
мы не будем сейчас подроб1:l0 н8 ЭТОМ останаВ1lиваться,
Теперь рассмотрим второй распространенный случай почтовый сервер.
ПочтовыЙ сервер отвечает за 0111равку и прнем сообщений электронной
почты. Обычно он использует протоколы SMТP (Silllp(eMail Trallsfet Pro.
{Осо{) 11 РОР (Ро.'/ Office Pr%co(). для созланин поЧТовою сервера НУЖIIО
установить и настроить следующее проrраммное обеспечение:
. Суперсервер xineld.
. ПочтовыЙ ЗfеНТ (МТА, МаН Transfer Ag<'l!/). которая будет отправлять
11 принимать сообщения. ОБЫЧIIО эту роль выполняет nporpaMMa
sendmail, а кроме Нее довольно распространены протраммы qmail и
postfix, выполняющие анадоfllчныe функции.
. Пакет imap. обеспеЧШIЗЮШIIЙ получение пользователями своеЙ почты
по протоколам РОР3 или lМAP.
342
rлава 11. Базовое конфиryрирование сервера
. Проrрамму procmail, сортирующую почту. С ее помощью можно
орrанltЗовать автоответчик 11 друrие полезные услуrи.
. Проrpамму fetchmail, позволяюшую получать почту с друrик РОР3-
серверов.
. Желательно также уcrаноnить какой-нибудь антивирус, например,
КАУ, и «прикрутить» cro к sendmail (или друroму SmP-серверу):
Torna входящие и исхолящие сообщения будут автоматически "ро-
веряться на Bf[PYCbl.
Треты[м распространенным примером Liпuх-сервера является DNS-
сервер. Для ero орrанизашlИ вам достаточно установить н настроить
суперсервер хiпеtd и сам DNS-сервер пакет blnd.
Следующий пример Linux-cepnepa это ШЛЮЗ. Шлюз 11OЗВOJIяет соед'ШИTh
ДВС сети ра3JПIЧНОro 11ша, HanpllМep, локальную сеть и Internel. для ero СОз-
дания НУЖIIо устаllОВИTh и настроить следующее проrpаМ,мное обеспечение:
. Суперсервер xinetd.
. Пакет ррр, содержащий сероер длв работы с протоколом РРР (Poill/
/0 Poi/ll Prorocol). Данный rшкет НУЖНО устанавливать лишь в том
случае, если вы сами подключаетесь к Интернету по протоколу ррр
ИЛн ВЬ1 настраИВlIете сервер входящих звонков (dial-in) IVIЯ доступа
удаленных IIОJlыователей в Интернет через ваш компьютер.
. Пакет iptables это межсетевой экран, илн брандмауэр. Именно
эта проrpамма будет выполнять функции шлюза, то есть переадресо-
вьшать пакеты из одной сети в друryю (цз JlОКалыюЙ в rлобальную).
Кроме Toro, брандмауэр МОЖет ОтфИJlьтровыватъ пакеты, что позво-
ляет оrрадитъ вашу сеть от вторжения ИЗШlе.
. Пакет squid. ЭТо прОКСIl-сервер, который кэширует веб-страницы.
В таблице 11.1 леречислены лиш/, 'leMHorнe функцни, выполняемые сер-
вером, и рекомендуемое nporpaMMHoe обеспечение, которое необходимо
для реализации этих функций. В rрафе «Дистрибутив» сказано, входит
Jlи НУЖНЫЙ пакст в состав 1I0ПУЛЯрНЫХ дистрибутивов,
Серверное nporpaMMHoe обеспечение
Таблица I 1. ,
ФунIЩ.... nporpltМM"Oe обеспечение Дистр.'
6утмв
ARrор",заци Yдц/lef'lHblX rlопь.3QеателеЙ (d!щl,Jр) ррр да
АвrОМ3Т"fче,с.:ое kонфиrypИРQваНlo:1в VЗ/lQS CE'lflol dhCp да
Совместный ДОСтуп к фзй.naм NFS. FТPa (ProFТPD, wu.tl:pd; да
ДОС1yn 1( сети M(crQsoft s,an,ba да
К:i'ш",РООНl1епередrlвае""о информации Squid да
Маршpyrи:sация roule(d) Да
s&ndmai! Да
06мен сообщеНИRМИ элвК1рОННО ПОЧТbI posttix Да
qmal! Нет
1т"" да
34З
UNUX: полное РУКОВОДОТВО
ПРO;J.олжение rоол, 11.'
ф.ющ... ПlIOfPаММffOe 06ecneчеиие д..""",-
бyrМа
Дpo Urшх, tPCha!ns (8 старых дис.
Подсчет nepeдaвaeMDFO по сети трафи"а триБУ--ИIiI!Х с I'ЩPОМ 2.2.>: И меt1ьше) д.
ИЛИ IPTabIes (8 НОВЫХ д.иС::Т):IибyrИ8
С дP(}M 2.4,'; И 2,6.х)
Переда",а сеl(ретио нформации modSSL Нет
Разрешение имени ICомпьютерl16 F'-!ЩРoI;IС bind д.
CeTeBa печз:rь lpd. Samba, CUPS д.
ФуНКЦИИ во6.серввра apacha д.
ФJ\ьrр.ация naX8r08 lPТrables (IPCha!ns 8 c:тapbCl( В(fрсИХ да
\РМасКар&t.l.ИТ Unu)l,)
OL да
Упвление базой данных PQS1g16S0L да
[nlerВasв Нет
11.3. Суперсервер xinetd
11.3.1. YCT8HoBKacynepcepBepaxinetd
Сynерсервер xinetd ПОЯВИЛСЯI! дцст.рибуТИl!ах: давно (например, в Red
На! начиная еще с 7 версии) и стал достойной заменой iпеtd, "споль-
зовавшемуся до Нею. Суперсерзер xinetd обычно устанавливаеТСl1 по
умолчанию во время ycтaHOBIt!f cncтe!dbl. Одним из преимуществ этоro
суперсервера является наличие вctpoeHНЫX: механизмов защиты, которые
для inetd реализует отдельный AeMoHtcpd. К тому же xinetd, в отличие
от inetd, поддерживает IPv6. Даже если вы пока Не планируете перехо-
дить на IPv6, установка xinetd будет очень полеЗIlОЙ иЗЗа расширенных:
функций суперсервера.
er -п l l;I'"I;I.:' I !:'!t .
; - в шестой версии протокола IР . (lPvб, раНее именовавшеrося IPng ,р next gef1ern 4
tion) используются 128разр.ядныеадреса поrryчаТеlJe и отправителей (3ТО а 4 раза
больше чем В-ВерсиИ 41. Адрес состоит из Шестнадцати октетов и изображается в
ВИДе ВОСЬМИ пар октетов, раЗДеленных двоеточиями. Адрас в формате 'Pvб может
."rлRДоrьтак: ЗдЗF.ВС21:Fl33:56С4:Дl0З:DВl 1: IOQO:400F
Если в вашем дистрибутиве x:inetd не устанавливается по умолчанию, то
рекомендую пойти ао пути наимеиьшеrо сопротивления и установить
xinetd из RPM-пахета. Можно также скачать rюслсднюю версию xinetd
по адресу http://www . synack. tlet / xitletd " установить ero 113 ИС-
X:OдllblX ходов.
з44
Ij,ава 11. Базовое КОНфИf)'рироввнив сервера
ЕCJ1И вы собираете xinetd из ИСХОД ников, вы можете сконфиrурировать
cro (.Iconfigure) с одним из следующих флаrов:
. --witЬ-libwrIIр: с использованием (ер wrnppers. С этой orщиейxinеld бу-
детеперва проверять ваши файлы letc/hosts .allow и /etc/hosts.
деnу и только после это", заПУL'IlIТ свой механизм контроля доступа.
Библиотека libwrap должна быть устаИОDлеllа у вас заранее;
. --witb-Joadavg: с этой опцией xinetd остановит сервис, KOrдa наrрузка
достиruет определенноrо уроuия;
. --witb-inet6: ВКЛючает поддержку JPv6.
Внимание! При включении IPv6 все fPv4-сокеТbI становятся IPv6-сокета-
ми. Поэтому будьте roтoBЫ к тому, что вам поиадобится пекомпилнро-
натЬ свое ядро с поддержкой IPv6. Если наше ядро не поддерживает IPv6,
выкачайте последнюю версию ядра по адресу http, / /www. kernel. org.
НикаlШХ оrраничений на клиентские узлы включение IPv6 не наклады-
вает: запросы IPv4 также будут обрабатываться.
11 .3.2. Настройка суперсервера xinetd
Все настройки суnерсервера xinetd сосредоточены в файле
letc/xinetd. conf. В составе дистрибутивов Red На! '! Mandral<e уже
имеется тщ<оti rотовыЙ фаiiл. но R нем СQдер:>кц1'СЯ ЛИШЬ мшfЦмалhНЫЙ
набор установок. В Hero вкточена строка. которая указывает суперсер-
неру nрочитз'rь все файлы в каталоrе letc/xinetd.d И воспринимать
нх как дополнительные конфиryрационные файлы.
Все конфиryрационные файлы lecc Ixinetd. conf и включаемые в HerO
директивой includedir состоят из записей, имеющих следующ\ш вид:
service <имяслужбы>
{
<атрибут> <операторприсваивания > <значение> ..'
Имяслужбы может иметь значение lo&i", shell, telnet, ftp, 1'01'3 и т.п.
Оператор присвацваlfЦl1 может БЫТh одним из CJlедующих: «". «+=»,
«-=". БОЛblЦИНСТВО атрибутов может работать только с оператором «=».
Назначение операторов таково:
. «,,: присвоить атрибуту значение;
. «+,,: добавить атрибуту еще одно значеНlfе;
. «-»: удалить значение атрибута.
345
UNUX, полное PYКOBOOCrno
Атрибут может иметь несколько значений, указанных через пробел. БоJIЪ-
ш!шство атрибутов можно ИСПОЛЬЗOlIaТЬ в секции defaults конфиrураци-
ОНlюrо файла. Эта секuия размещается в начале файла, и все заданные
в неЙ атрибуты применяются ко всеМ серверам (сервисам), находящнмся
под контролем xiпetd. Для каждоrо сервера (сероиса) можно IШJIИВIIl1У-
алыю nереоnреJIелить УСТatЮВКJI, заданные по умолчанию: если атрибут
определен и в секции defaulls, и в QIШсании сервера (сервиса), то имеет
силу значение, заJIанное в описании данноrо сероера (сероиса).
Среди атрибутов xinetd МОЖНО выделить следующие rрупnы:
. Запрет вызова сервера (сеРllиса).ЗапретIIТЬ вызов какоro-либо серве-
ра (сервиса), находящеrося под управлением xinetd, можно с ПОМОIЩ.ю
значения атрибута disabIe=yes (о lnetd для этоro ПРИШJIось бы заком'
ментировать все crроки описания серuиса). ТШ'U же эффекта МОЖНU
lюсти'rь, если в секuии defaults файла / есс /xiпetd. соn f указаTh
disаЫеsспис.ок.серверов, Список сероероо (сероисоо) состоит
из их имен, разделенных пробелами.
. ПеренапраJlление. С nОМОIЩ.ю атрибута redirect можно обращение к
серверу (сервису), для Koтoporo указан этот атрибут, перенаправить
на друrой компьютер. Uелевоц r.:о/оШЬютер указывается либо домен-
ным именем, либо IР-адресо[; rIOirect=целевойкомпьютер. Этоrо
же эффекта можно достичь и спомощью iptabIes, но, используя ДЛЯ
этоЙ цели xinetd, ны можете примснять cpeдcтna упраВJ\ения доступом
суперсерпера.
. Протоколирование. Оl1реДeJlИТl>, какая информация должна записы.
ваться о журнал в случае успешноro запуска сервера (сервиса). а какая
в случае неудачи, вы можете с помощью атрибутов IОlLопsuссеss
и IOIL опrаilurе. Подробное описание эт1lх атриб)'тов приведено n
таблице 11.2.
. Оrраннченне на устаllOвление соединений. Можно указать макси.
мальное количество запросов от oIIHoro асточиика (сервиса), которое
.южет обработать xinetd в едшшцу времени, а 1'акже максимальную
заrрузку хiпеtd, по достижении котороЙ он будет OTBeprTb все об-
ращения, и приоритет обработки серверов (сервисов). Для этоrо
предиазначены атрибуты jИ!rsourсе, instances, cps, nk-e и maxJoad
(таблица 11.2).
. Атрибуты защиты и )l1равлеНИII доступом. В ЭnlХ атрибутах заклю-
чаетс основное преимущество xinetd перед ero I1редшестоенником
inetd. С их flOМОШhЮ можно устаНОDl'rть:
. оrpаничсния ДЛЯ OfДCдl,HЫX узлов (аТРllбyrы only Jrom 11 по-ас'eSS);
. отраничение по времени временной интервал, в течение котороl'O
сервер (сервис) будет JIоступен ДJЩ КЛII€mов (атрибут accesstimes);
. оrpаничения на использование интерфеЙсов можио связать сервер
с одним конкретным C€TCflЫM интерфейсом (атрибут interface).
346
rлава 11 , Базовое конфиryрирование сервера
АтРибуты СfJрВИСО8liОД yrrра.sлеJ./ием xinetd
Таблица' 1.2
Атрибут 8оэмо-нwe 3Н8чеНМА
id Иl:rюльзуеrся, еt:JIИ сервисы ИСfI0Л:ЬЗуюТ разные ПРОТОКDЛЫ. Обычно СОВI1адае1
t: именем ce-рВИСА
Любая I<омб!llнаs:\ ИЗ G-ЛЩ1YlOЩ;.1)( ЗНIlЧi&НИ":
,. АРС если Э'fQ сер8ИС RPC (Remote Procedure Call). ВWЗО8 удапеliНОЙ проце
дуры используется в сврверной части приnожония. Мехвнизм АРС скрывает
ОТ проrраММИСТQ детали с&Тееых протоколов нижелеЖдЩИ;Х урОВНей.
2. UNLISTED если серВИС не О!lИСIilI-l В файле /etc!rpc ДЛЯ АРе сереиСОfJ ИЛИ в
\уре /etc/s.ervices дм не-АРС.
3. INTERNAL еслц кinetd IlрвдстаВЛR8Т ЭТОТ cepec (ДnA echo, time. daytirne.
chargen и dJSСЗfd).
Если RРСсереисы у вас ребоН'!О1 некорректно после УСТQНQВitи xinetd, вы
можете ис:пОI!Ь3V8аrь ДtlR НИХ старый il)etd I)fj пpвKpaHO УЖИ8<IOтСА с J(jnetd.
8 файле jetc/inetd.conf оставьте 10/1Ь1(0 RРС.сервиCbl. а OCТaJ'lloliOe ЭElJ(оМtAеитl'I-
р)'йtе. 8 8 jet(;/xinetd.cOfIJ наоборот
Любая !(омбинаци из следующих значениЙ:
1. NODELAY ТОЛЬkО для iCP.cepBa<lC08! Буде,. ycT8H0ВJ1eH флаr С(Ж8ТВ
ТСР NODELAY.
2с OISAвLE- DТклЮ"'иrь серВИС.
3 KEEPAL!VE ТОЛЬКО для тср сервисовl Установка флеrа сокетв
50 KEEPAUVE,
flags 4. REUSE устаноеит флэr SOREUSEдDDR на сокет сервера.
5" !NTERCEPТ ПQреХВttТblSЗТЬ ПОIl:/Э'ТЫ ИЛИ IlРИI1Имв.п.. СОElДЦН&t4И)i ПО nopqдку.
nроверЯА. ЧТО ОНИ nрю:оnят ИЗ l'tужныХ MGlCt,
б. NOREТRY избвrвть повторных попыток в с.лу'4ае неудачJ.l.
7. !DONlY соеАме1-lие будет nринимаtbся только от идентифицированных
пОЛЬ308а'Телей. На удалеl-'tlQЙ маШИНQ долЖен работать сервер
И/lQНТ-ИФИКdцltllll
dlsable уез (ОТК!JЮ"'4ИТЬ евреис.} ИI'rИ по (не оТItЛiO"l8ТЬ)
(..,п СОJ:"пв. М<Jжвт прМI<I-fМЗТЬ следующие 3HaSHMR:
,. stream соке'l'" strt'!an\, обы"lНО ИСnОllt.Зуеfсg сnуж6ами, работоющиМи На
основе протокола ТСР;
s{)ekettype 2. dgram соке, dQram, обычно испом.ЭУ&Тс.S! 'CJ1ужбвми, раБОтающими На
ОСНОВе протокола UDP;
3. rз.w соке?' m.w дn'" серВИСО8, требующих nрямоrо доcrynа 1( IP;
4, seqpacke1 сокет aeqpacket дпп cepBCOB, требующих надежной nоспвдо.
9.\1Т9пьиой перееылJi.И .цвтаrрамм
prOtQCol lep, tldp и ....n.
yes (жДаТЬ э.аВерШI:'!НИs:\ серВиса на данном соКеТе) ИЛИ по (He2l<д8ТЬ). ЗнвЧQН..е
w.эit уез обычно УСТ8f.lШJflива&тся Д11А coeToe dgram, а значен"' ПО ДЛR СIЖ8ТО8
.fr.Dm
user Реr\'lстрациоtlНQе "мя пользоватеЛFl. ОТ имеН\II Koroporo буд(tt запуш.ен CflpBep
(по умо.лчанию root)
......, ДБСОf1юrный путь к ЗSПУСК<1емоцу серверу
sэrvеrаrQS Дрryменты. передаааеМblе С'8рверу
Ot1!Y Jroт СПИСОk ХОС1'08. IP-адресов или сеtей. КОТорЫМ БУДет доступен cepEJloic. ДНалоr
Ф<-lпа hosts.ellow
СПИС9kХОСТОВ. которыМ дaHHbln серltис Не будеТДQс:rуnен. АнМ0' hO$ts.deny.
"оаСС8$Э ECJ1!o1 ни ОДИН "3 атрбутО8 {onlyfrom и no.cce..) не yr;аЗElН, то сервис будет
ДDCТynBH всеМ
зс(:е$stimеs Интервмы времени 8 форме ЧЧ:ММ-ЧЧ:ММ, на протяжении которых сераис
б1jДЕП ДОC1yflен. He.nplotMep, 9:00-18:00
Способ ведения сероиG-Оt.C журНaJf8. ЗШlения:
ogtype 1. SYSlOG sys!ogfaclllty (syslogJevell сооБЩRНR будут nОCbfпатъся ДВoнy
svsogd
2. FILE fil$ fsoft limtt (hard IJmltl1 сО'Общони" бvдут писаться в НЫЙ фо;йn
347
LINUX; полное pyJ<озодr:rоо
Атрибут BoaMoМtНыe SНВЧ-НИR
ОПр&Д8ЛВТ, кая "ttФоРtAR бдвт nротокопи.РQВаfЬСА, всли сврииt; по Ka
ким.либо причинам не 3/i11nycПtJЮЯ:
1, HOST э.аПИСbl88fЬ едрвс удал&иоrо хоеТа.
oo..on)'aill:re 2. U$ERID если 80ЗМОЖНО, зanисыв.ап. 101Д8нтификаroр удаленноrо nопЬ308З-
таля (используется nротокмидентификвции RFC 1413).
З, АТТЕМРТ эаПваТь ф1tкт t{ВУдачной поп-rки.
4. RECORD эаписыеВlТЬ ИНфQРМацию с vдаленноrо узла 8 случае неаоэмож-
НОСТИ МПУСКD cepoo
ОпределяеТ, КEU:'зя инфорr.tШI,ЦЯ буАвт ПРОТ(Ж::Оlltlровз'tЪCSl8 случае удаЧМОfо зв-
nуска сервиса. Можно комбинроеап. любые из сnедующих значений:
1. PID иденtиф..1ка.rор зan)lЩeнно(о сервериоrо Процесса.
logon".$ucce.ss 2. HOST адрес YДQJ1eHli'oro ;коста.
З. USЕRФ есЛи .аОЗМQ.Жнq. iЩlJнткфиатор удв.nенНоrо Il()ЛЬэоваfеля (Io!(;M1tb-
эует npOTOICOn ИАентифИи АРС i41 З).
4. EXIT ........ зsписываn" IQlIt;"'MQM был ПрОИ:зве,Qен I'JhtI\QA.
5. DUMT10N продолж:итепЫfОСТЬ сессии
rpcnu",ber Номер сере.иС8; RPC
rpc vеП.iiQl' Версия сервиса АРС
вnу Cn1CDIC строк типа "имg,=;9.kflo.fе:ие", Эти мреМенные будут ДQба9пены i:I DlфVЖе-
нив перед тем, как С-ераер будет запущен
pa.$.$env СПИООI( переменных ОICРУЖСf1ИЯ xтotd., "O'ТOpb/; должны быть nep6Mi'lbl сеРElеру
роn Порт ceJ:lвca. I:мio1 nарТущ:taН8 ф$йl1е /etc/services, tl} зМЧение ДaнHOra
параметра допжwо coВnaд.EtТi;oc tutM
redirocl ПО3DОЛЯQУ tср-сервису дeJ1!,a;Тb fЮреttаправМНИе На дрyroй ХОС1: ЗffiJчеЩ,'Iе 33-
дaeтcSl 8 виде hQst:port
ir;terface- УСТ8Н4SlIмезеr i'lнrерфвАс, чеР$3 которыPl будет работать <:ервис. Значением
ДЬЛJkен 6ыn. !pilДpec
blnd СИНOI-IимпараМQТра fn1etfac8
bann.el' OnpeдenReT ИМЯ фаPtnа, XDТDрыЙ будет ПОka3ыватьCR при СOlщимеНIIIИ
(; серВИСОМ
Ьannersu(;cess ОПp(lде1Uf&т "'MQ файла, отоpыбудетT поt.'аЗыIr8ТЬСЯ при уда...НОм СОQДиненj.jИ
b8nn@rta.i1 Опродеnяет ИМ'Я. файла, .1I:ОТDрЫЙ бvдет "оказываться при неудачном
соединеfWJИ
Атрибут ММооТ Ава э.рryмеита.Пераы},\ УО'88.8nивае:'f 'l(ОJ'\\N&СПш СCiJДинениt\
ер' секунду. Есл это число 6удетnрев'Ыwеио. сервис будет временна недостуnен.
Sторой чисnО csJqlI'tд, nсспQЩQрЫХ cpe:""c Cftщщ будет Досryffеи
Опредеnяет макCJoIМa.nануюзаrpyэк'(. При достижении Ma;<C1.tMYMII сераер пере-
тах Ioad СТDет принимать запросы на СОединение. ЗИА"Iеt'lИi! параметРа веЩеСТВ8ННо.е
чИ<:1l0'ТИna ffoa1
petsource- КоличеС:fВо запросов от QAHOfo источника (сервиса), которое может 06работаn.
)(fnetd в едмиuу времени. Значением можеr бl:i/Th либо 'tиc.nо, l1ибо UNLIMITED
МаkСИМanы.jOG kОllичес1во прОЦ8ССО8 (серsеропl, котороа xinetd може,- oднo
II1$шпсеs временно ИСПОflьэоватъ ДЛ сервиса (по УМОn"lЭНИЮ ,nимита нет), 3Начен\oIем
зrоrо атрибyrа может быть nибо "I{.!C{lO (ООlli>шее а..ен"я атрибута ре'
$Ource), либо UNlIM!TED
rllce VстанаsnиааеrприоритвТ(П0«838теЛЪУСТУП"lИ80сти}сервиС8
Необязательио указывать для каждоrо сервиса все атрибуты. Можно
указать только необходимые:
. socket type
. user
. server
. wait.
348
rлава 11. базовое конфиrypирование сервера
Атрибут protocol указьmаетСII ТОЛько ДЛII RРС,сервисов; а также для scex
ссроисов, которые не ОШlсаныв /€tc:/services. Атрибут rpcversion
т<шько ДlIЯ RPС-(;ервисов. Атрибут rрспumber уkaзывзe-rcя ТOIIЫЮ Д1IЯ RPC-
ССрI!ИСОI3, которые не l1ерсчислены в фаЙле / etc / rpc. Атрибут port задаетсll
только Д1IЯ lIe-RPС сервисов, которые не описаны в /etc/services.
Следующие атрибуты поддерживают все операторы I1рисваивания;
. опlуfrom
. по access
. loi:.onsuccess
. logonJailure
. passenv
. cnv (кроме оператора «-»).
В секции defaults, в которой описаны атрибуты 110 уыолчаНlIЮ, оБЫЧНО
укюываются следующие атрибуты:
. 10!Ltype
. 10!L оп success
. logonJailure
. onlyfrom
. noaccess
. passenv
. instances
. disabled
. enabIed.
11.3.3. Запуск xinetd
я надею.::J., 'по с l;Iастройкоjj все более-мецее понятно. ВСЯIi нет, то
BeMHoro ниже вы найдете приыер фаЙла /etc/xinetd. сап!'. Сейчас
же заЙмемся запуском толЬко что откомnилироваииоrо и настроеиноrо
суперсервера. А запускать ето можно с клю"аыи, самые нужные из ко-
торых приведены в таблице 11.3. За списком остальных обращайтесь к
тап-странице.
Ключи .запуска xfnetd
Та6лнца 17.3
кто.. Нuначемие
t ФnйЛ Уf,.,ЗJl.3SJ1инает aJJМСРtшТIНЩЫЯ фi1iiл конфиrурации, lL'UfОI'ЫЙ должен мспu;u.3О.
М1Ъ.С" 8меСТrl crаИ1li1р;ноrа файла 1t:./;><.lt\eH.d. ,"оп.!:
.pidflle pjd фаA.n Файл, в KoropblA буд9'Т записан РЮ nроцесса
$Myajj\le Даже если 1-1101 один сре.иt: НО прописан, Д8МОН АQлхен вЫПQЛНiПЪCН !-ОС1iПЬСЯ
& живых..)
-d режим uтnадки (debug modeJ
.Hmit ЧИСЛQ Оrранич.eн.IoШ нз КОЛИЧQСТВО одновременно заnyщенны.х про.цеССО8
349
LINUX: попнае руководство
Как и любой демон, xinetd ynРaвщl.стся сиrналами:
. SIG HUP застзвlIТ xinetd переЧltt<i1':Ь фаЙлы конфиrурации и OCTaнo
вить службы, с этоrо момент;\ (l'nrnючеНllые;
. SIGQVIT остановит xinetd;
. SIGTERM остановит xinetd, остановив предварительно все запущеll
libIe ИМ серверы;
. SIGUSRI выведет дамп состояния в фаЙл /var/run/xinetd.dump.
11.3.3.1. Защwrа xinetd
СуперсерI!ер xinetd достато'lНО :ЩЩllli!ен, но ero конфиryрационный фаЙл
придется заЩИПIТЬ вам e3M'IM.EcТecтвeHHo, НуЖНО установить ему права
ROCTYIIa. разрешив только чтение и только суп ер пользователю:
# chmod 400 /etc/xilletd.conf
Чтобы никто не CMor изменить, удадить, переименовать этот файл, ycтa
новите ему атрибут «j" (только на файловой системе ext2 или ex(3):
-# chat:t,i +i let.c/xinetd.conf
11.3.3.2. Пример фаЙllа конфиryрации /etc/xinetd
ТепеРI" как и обещад, при вожу пример фаЙла конфиrурации. В этом ли
стинrе перечислены чаще Bcero ИСПОЛьзуемые еерВIIСЪ! е оптимальными
атрибутами. Конечно же, вам предщоит реШИТЬ, какие сервисы вы будете
использовать, а какие нст. Возможно, вы также измеНИте 11 их атрибуты
например, время работы Toro или иноrо CepBIICft.
Листиftr 11.1. Фраtм"ит файпа .("'фиrурац..../еtс/хiпеtd
#: Параметры ПО умолчанию дn.я.' В-се.х ВОЗМОЖНЫХ серВИСОЕ
de.fauJ.ts
{
# ЧИС1iО серверо'А { которые Mory'l' быть активны одновременно
instances = 25
# Параметры ПрОТОКQпирования
lояtуре = FILE Ivarl1og/service1og
logonsuccess HOST PID
logonfai 1ure = НОБТ RECORD
# Параметры. доступа
oh1y.from = 111.11.111.0 111.111.112.0
ohlyfrom loca1host 192.168.1.0/32
# ОТКl1юченные сер висы
disables ;'tftp
350
rпaB8. 11. Базовое конфиrypирование сервера
service login
{
f1ags REUSE
socket"ype = эtrеаПl
protoco1 = tcp
Hait = по
user ::: root
веУУеу = /usr/etc/in.r10gind
logtype = SYSLOG 10са14 info
)
# Сервис се1пес эмупяция терминала УДапенных систем
# дпя .терфейса обратноЙ ПетлИ
service te1net
(
flags = REUSE
sockettype = stream
wait = по
user :::. root
оеууеу /usr/etc/in.telnetd
bind = 127.0.0.1
10gonfai1ure += USERID
)
# Сервис te1net эмуляция терминапаудален!<Ых систем
service telпet
{
f1ags = REUSE
disable уее
sockettype stream
wait = по
user .:::. root
server = /usr/etc/in.te1пetd
bind = 192.231.139.175
redirect = 128.138.202.20 23
logonfailure += tJSERID
)
eervice ftp
{
sockettype = stream
wait :::;:: По
user root
server. fusr/etc/in.ftpd
serverargs 1
iпэtапсеs = 4
351
UNUX, полное Рyt(OВОДСТВО
logonsucces",
logonfailure
accesstimes
nice = 10
+= DORATION USERID
+= USERID
= 2:008:59 12:002З:59
service пате
(
sockettype = dgrarn
wait = yes
user = roct
server = /usr/etc/in.tnarned
# Поддержка протокола TFTP (Trivial FTP). ЭтОТ протокол
# ИСl10nьзуется для обмена информацией между интеллектуальными
# маршрутизаторами И, скорее Bcero, вы Не будете ero
'# использовать.
service t ftp
(
sockettype = dqram
wait = уев
user ::: root
server = /usr / etc/ in. tftpd
serverargs = s /tftpboot
)
# SМТРсервис Qmai1. Конфиrypируется ДЛЯ запуска по
# требованию суперсервера xinetd
sel"vi.ce smtp
(
sockettype = stream
protocol = tcp
wait := по
user = qmaild
id :::: smtp
server = /var/qmail/bin/tcpenv
serverargs = Ivar/qmail/bin/qmailsmtpd
loqonsuccess= DURATION USERID PID НОВТ EXIT
logonfailure= USERID НОВТ АТТЕМРТ RECORD
# Сервис finger, 110ЗВОЛЯJOliЩЙ узнать общедостуnнyю информацию о
# пользователях системы., записанную В /etc/passwd.
service finger
352
rлава 11. Базовое онфиryрирование сервера
(
socket:type
,НваЫе
\oJait
\lзеr
:::' stream
= уез
server
:::; по
= nobody
= !usr !etc! i.n. fi"gerd
s.':Tvice есЬо
(
:уре = INTERN?,L
id = echostream
socket'-"t:ype = s.tream
protocol t ер
ilser
wit
)
sr'vice есЬо
root
;:: ПО
(
ёуре = INTERNAI,
id =ec1:J.Odgram
soc.k"ttype = dgram
protocol udp
ser.;: root
'''ait = уев
)
service rstatd
(
ёуре =
<Щ<!1::il\\q. '.
Ца\1$.")'(
r.,6"er.eiion
SОСk"'чtе
RPC
= ПО
Im'ERCEPТ
= 2'-4"
='dgram
pratocQf йЦp!
SI!..1:,!e'r = !Ustl'atc/rpc.rstatd
тi:it =Ys.
JU: .....'(:,.:::j;;:i,...... ..... .'A':".i:':'I!.:.:. ...... '.' ........ ..' .
Kal!;.Q.;m:iIf.R1i, ..'iJсконфщ'урllровал....тцtI...сы.J.!i$J!9еe
!ti",цIiilmса!.J в раЩtатрIfВае!.JМQrуТпbltу'l;j'!'J>
тоЩ;Jtофеli.1"N R3Й 111.111.111.0,111.1 I1.1!.с:u:19z;!6.1'О'Мож!iо
также уnзЬwaтъ адрес и маску подсети, например;.I92.168.1;О/ЗZ; ВМестЬ
sendmail я ИСПОЛJ>ЗОlЦЩqntail. МоЖliО было БЫ.заnyскать qmai\ в режиме
12 З"&.I\:, ЗИ8
35з
LINUX: ПOJ1ное рУКОВОДСТВО
standalon, 110 так как я не o'leHb часто пользуюсь услуrами 25-ro порта,
то мне удобнее запускать сервис smtp через xinetd. Из соображений без-
опасности я ОТКЛЮЧЮI некоторые сервисы: finger, telnet.
11.4. Удаленный доступ: ssh и telnet
11.4.1. Использование telnet
Сервис telnet обеспечивает базовую эмуляцию терминалов удалеН!IЫХ
систем, поддерживающих ПРОТGКОЛ tеlпеt над протоколом TCPflP. Обе-
спечивается эмулщшя терминалов Digital Equipment Corporation УТ 100,
Digita! EqLlipment r:пrроrаt;оп УТ 52, Try. Проще rОИQР", серинс telnel
позволяет работать на удалеином компьютере так, как будто ВЫ сидите
непосредственно за ним. Протокол telnet описан в документе RFC 854,
который вы наЙдете на саЙте издательства -VJИW. n i t . сот. ru,
Для нсtЮ)lьзооания telnel на удаленном KOMrIb!OTepe должен быть уста-
новлен lell1et-сервер. На компьютере пользователя нужно установить
ПрOl'рамму-клиснт. Любые команды, l.!Водимые пользователем, обрабаты-
ваются lеlпеt-сернером. а не локальным компьютером. Пользователь на
своем компьютере ЛИШЬ видит результат выполнения этих команд.
ПраКНI'Iески в каждой операционной системе существует утилита teinet,
которая ",шлетсл КЛИентом для протокола telnet (рис. 11.1).
Рнс. 11. 1. ТеlпеtКJ1Иенr для Windows
354
rлава 11. Базовое ко"фryрирова"ие сервера
Сервис telnet был 11 остается одним IIЗ' самых популярных. способов yдa
ленной реПlстрации JI работы на удаленной машине. Однако основным
ero недостатком является то, что любая информаЦIIЯ, в том числе и
нароли, передается в открытом виде без какоroлибо кодирования. По
этому использование ero в серьезных системах недопустимо, неоБХОДIIМО
пользоваться ЛIIШЬ защищенными средствами (например, SSH).
Серпер telnet может в разных дистр"бутивах называться по-разному. В
Red Hat- дистрибутивах он находится в пакеТе tejnetserver И n большин
стве случаев устанавливается по умолчанию.
11.4.2. Настройка и ИСПОЛЬЗОвание SSH
Что такое SSH
SSH (Secure Shell защищенная оболочка) это протокол, обеспечи
вающий защищенную передачу данных. SSH использует КРШ1Тоrpафию
OTKpbITOro ключа для шифропания соединения между двумя мшшrnами, а
также для опознавания (аутеитнфикации) пользователей. Протокол SSH
Можно использовать для безопасной реrистрации на удаленном сервере
>UjИ КОПИРQвания данных между двумя маmинами. 011 ПОJВОJDJет npедот
вращать атаки способом присоединения посередине (sessioп hijackiпg) и
обмана сервера Имен (DNS $pOofittg).
Протокол SSH НОJlдерживает следующие алrоритмы шифрования:
+ BlowFish 64разрядная схема шифрования. Этот алroритм часто
используется для BblCOKOCKOpOCТНoro шифрования данных больших
объемов.
. Тройной DES (Data Eпcryptiol1 S/al1dard) довольно старый стандарт
шифрования данных, который в наше время рекомендуется Испаль
зовать только для HeceKpernьrx данных.
. IDEA (lпteтatioпal Dala Eпcryptioп Algorithm) международный
aлroрJfrМ шифрования информации. Этот алroриrм работает со 128
разрядным клю'юм и поэтому он более Jaшищен, чем BlowFish и
DES.
. RБА (Ri\lesi-S/lllmir-Adelтaп algorit}lm) алrорнтм Ривеста- Шамира'
Адельмана. Представляет собоЙ схему шифрованllЯ с открытым и
секретным ключами.
Поддержка несколькихалrоритмов шифрования позволяет обеспечивать
наибольшую безопас!tость, так как в случае обнаружения уязвимости
в одном алl'оритме SSH l1ереориентируется на использование друrих
алroритмов.
На данный момент сушествует две верСIIИ протокола SSH:
355
UNUX: полное PYOBOДC;ВO
. п ротuкол 5SH версия 1. У К8ЖДоrо узла ecrь свой RSА-ключ (обычно
1024 бит), который IIСПОЛЬЗУСТСЯДЛЯ идентификЗlIИИ узла. Этот ключ
еше называется ОТКрЫThlМ. Дополнительно, при запуске демона, reHe-
рирустся еще ОДЮI RSА-ЮIЮЧ :ключ сервера (обычно 768 бит). Этот
ключ созмется заново каждJ,!Йчаси н"косда не сохранnется на диске.
Каждый раз nplrycraHoBKe соединения с клиентом демон отправляет
ему в ответ СВО:Й О1'крытый ключ и ЮIюч сервера. Клиент сравнивает
полученный открытый ключ со ClJоей базой щшных' чтобы проверить,
не измеНИЛСJ! ли он. Затем клиент случайным образом reнерирует
256-разрsщное число и кодирует ССО, испощ.зуя одновременно два
ключа открьпый ключ И ключ сервера. Обе стороны нспользуют
этот случайНЫЙ номер как кmo'! сессии, который используется МЯ
кодирования всех передаваемых JI(J Время сессиИ данных. ЗатеМ клиент
пытается аутентифицировать себя, ИСПОЛЬЗУЯ .rhosts-аутеНТИфilкаЦIlЮ,
аутеитифш;:ацию RSA или же аутентификацию с использованием
пароля. Обычно .rhOSls-аутентификаLtия небезопасна, позтому она
отключена.
. Протокол SSH вере"" 2. Версия 2 работает аналоrиЧl!О первой: каж-
дый узел ищет определенный RSА-ключ, кtпорый используется для
иденшфик.ации у.зла. Однако при запуске демона ключ сервера не
rенерируется. Безопасность соединения обеспечивается блarодаря
соrлаwеНI!!О Дllффи-Хелманв (Diffie-Hellтaп key agreeтelll)_ Кроме
ТОСО, в SSH2 бьти исарввлеНы недостатки SSHl. Сессия может КОДII
ропаться CJlсдуюшими методами: 128разрядныЙ АЕ5, BJowfish, ЗDЕS,
CASТl28, Arcfour, 192разрядl1ЫЙ AES или 256разрядный AES.
11porpaMMHbIe пакеты, ИСl10ЛЬЗУЮlЩlе эти протоколы, так и называются:
ssh 1 и ssh2. Сервером SSH CJ\ужит демон sshd, который запускается на
UNIХ-маwине, а клиентом проrрамма ssh. коroрая распространяется
как ДЛЯ Linux, так 11 для wiпdоw.s....Клиент ssh служит для обеспечения
зашишенной рещстрации на удалеииом компьютере. В пакет ssh входит
еше и третья проrpамма scp, служащая для безопасноrо копирования
файлов с локальною компьютера на удаленный. Однако основным назна-
чеlшем SSH ЯВJlЯется вceTaКl{ авторизация пользователя при репtстрации
erO на удаленном компьютере.
Оба nporpaMMHblX продукта (SSH1 и 5SH2) являются коммерческими и
стоят денес. Хотя В какойто момецт разработчики одумалllСЬ и сделали
бесплатной S5H2 для L.inux и *BSD, было уже ноздно.ОткрыТЬ/м обще-
ством разработчиков На основе обоих протоколов SSH, с добавлением
дополнительных возможностей и исправлением некоторых ошибок, был
разработан ее бесплатный вариант OpenSSH.
Первая версия OpenSSH вышла еще в декабре 2001 rода. В дистрибутив
Fedora Core 3 включена третья версия 3Toro продукта. Компьютеры, на
которых установлена ОрепS5Н, прекрасно взаимодействуют с компью-
356
fлава 11. Базовое конфиryрирование сервера
терами, на которых установлены коммерческие S5Hl или 55Н2, то есть
продукты полностью совместимы.
В дальнейшем, котда я буду roворить о SSH, я буду иметь в виду имешю
OpcnSSH, которая поставляется со всеми совремснными дистрибутивами
Linux. В целях безопаснос-rи рекомендуется отслеживать обновления 11
скаЧИIЩТЬ последнюю верСIIЮ (в мае 2005 r. вышла четвертая) с сайта
"WW. openssh. org.
Свободно распространяемая версия SSH состоит IIЗ следующих пакетов:
. openssh основные файлы;
. opensshclients проrpаммаклиент;
. opensshserver sshcepBep.
Чтобы служба 5SH начала работать, необходимо запустить демон sshd
на той маШlIне, к которой IlреД!lO!lаПlется 11OдкJ1Ю'lение. Желательно
добавить команду запуска D сценарий заrрузки системы. Демон sshd
работает по 22 порту (см. листинr 11.2). Можно запускать е1'О изпод
супердемона xinetd/inetd, но обы'шо sshd запускается самостоятельно
в режиме stJIndalone.
Настройка SSH на сервере
Конфиrypационный фаЙл сервера sshd называется /etc/ssh/SBhdconfig.
Справку по ero синтаксису вы можете получить по команде тап 5
sS!'ldconfig. В пакете opensshserver находится конфиryрацИОIIНЫЙ
файл с типовыми настроЙками.
Чтобы оrрадить ваш компьютер от Нежелательных вторжений извне, ре-
комендую вписать в этот фаЙл директиву allowedadress, пере'lIlСЛИВ через
пробел IP-aдpeca теХ машин, с которых разрешен вход клиентов:
allowedadress 10.1.1.1 10.1.2.1 10.1.3.1
Лис"Тинr 11.2+ При.метный фnйл конфиryрации letc/ss.h/ssh(lcof1f!g
Port. 22
# Сначала пытаемся работать По ПРО'l'окопу SSH 2, а ЛОТОМ,
#- еСlIИ та C'1opOHa Не поддерживает вторую версию. ПО SSH 1
Protocol 2,1
4! Ключ ДЛЯ протокола SSH версии 1
HostKey /etc/ope!1SSrl/sshhost,key
# Ключи для протокола SSH2 t<SA и DSA
HostKey letc/openBsh/sshhoBtrsakey
Host;Key lеtс/орепsвh/sshlюstdsаkеу
357
UNUX: полное руководство
# Время жизни и ррзер KпQ 8ВЬ версил 1
KeyRegenerationlnterval звQQ
# По умолчанию используется размер 768 бит,
# лучше установить 1024
ServerKeyBit8 1024
# время, ЧереЗКQ'!'орое кл.ючи сервера будут СОЗДаЕН заново.
# Периодическая смева дючей пойышает безопасность
системы.
KeyRegenerationlnterval lЬ
# Запрещаем реrистрацию ПQователя root "оввЬ.
# ЭТо Не исключает возможностудалеННоrо
# администрирования: просто руТу придется зайти под
# обычным пользо'Эа-теnеМ t Еа. l'eM БыnоJ1RИТЬ кома,нду SU.
# зато злоумышленнику понадQqится украсть
# не ОДИН, а Два пароля: и rбоt и оБЫЧНаrо nоnЬзсваТеДЯ.
РеrmitRооtLоgiп.по
# Протоколирование (раскомментируйте, если нужно
# вести урнал с помощью системы syslog)
#SyslogFacility AUTH
#LogLevel lNFO
# Аутентификация
# ВключаеТПаропную аутентификацию
# и запрещает пустые пара ли
PasswordAuthenttcation уев
PermitErnptyPaBBwOrdB ПО
#StrictModes уев
# используем RSАаутентификацию
RSAAuthentication yes
PubkeyAuthen!:ic,a.tion уе,;
# АутеНТИфlil<,.цИя.rhоsts ... обычно не испс>J1ь:iуе'l'СЯ,
# поэтому запрещаем ее,
# пользовательские файлы /.rhosts и /.shosts не
# будут ИСПоЛЬЗбваться
RhostsAuthentication ПО
IgnoreRhosts уев
# НЕ использовать ?АМ аутентификацию
РАМАнthепti.саtiопViаКbdlпt по
# ДОnОЛЕительое 8ремя клиенту На то, чтобы
# аутентифицироватьсебя.
358
rлава 11. Базовое КOIIфиryрировение сервера
# Если за это время клиент не CMor ввести пароль,
# соедиНение будет прекращено
LoginGraceTime 2т
# Следующие параметры hЖНЫ для Toro, Тобы заставить
# систему Х Window работать по BBh. Подробнее вы
# сможете npО4итатьв документации по ssh
#Xl1Forwarding уев
#XllDiBplayOffset 10
#Хl1Щ;Lосаlhоst уев
#?rintMotd уев
#PrintLaBtLog уев
#Кеерl\-Н уе уев
#lJseLogin по
#UsePrivi1egeSeparatioh уев
#Compression уев
# Путь к баНЕеру
Banner /sorne/path
# подсистема Бftрсервера
Subsystem sftp lusr/libexec/opens$h/sftpserver
Запуск демона sshd
Перед первым запускам sshd неоБХОДИМО сrеl{ерировать ф;Щлы, содержа
щие КЛЮ'П! кодирования. В сценариях, осуществляюЩJfX запуск сервера
sshd, обычно предусмотрена проверка наличия этих файлов. В случае их
отсутствия от! rенерируются автоматичесlШ.
Ключи, с которыми можно запускать sshd, перечислены в таблице 11.4.
Ключи сервера sshd
Таблица 1 '.4
Кп.... Нuмаченме.
-b6-rbl OnределеТ'iIljС:"О, СЩтов ДПs:l КJ1I04Ц сервера (ПО V"*ОЛ"l,-\НИjQ 768}. Эту опцию .,.QЖНО
иcnолъ;зоваrь, fnn"t<o еслИ вы используете проnжоп SSH верСИИ 1
жttМ ОПI8ДIC:И IDEBUG)- В этом р*имо сервер tm ПереlCОДИТ в фоновый режи....
-d обра6атыаает 'ТОIlЫСО OAtlO соеН(!.оние и подробнаnротоколиР'У&Т сеом действи'Я
в сиcrемном ::курtшл\3. Ключ оtладки ocQ{ieHtiO по'nазе ДJli:! и.з.уче-НИR ра60ТЫ'
серВера
jaк Ж9;,k8tt-'И -ПРИИСПОЛЬЗ08аНИИ ПРl1дЬ1дущео КЛЮlfa,сермр rиshd не будет пере-
.() ДИТt.фOt:jОIlЫИ реЖИМ. ОДНЭJi:О 8 ОТЛИ,.И8 от tI кni04 o нв пере80ДИТ Сервер I!I
реЖИМ о'rп.адки
.в Отпра811Ть ОТлaдr;lЧНt>U3 сообщеНКR не в (JИСТIЩНI>lIii журнал, а ЩI ствндарТНblЙ
nOT ошибок
.f феип Залает альтерНinШ»i-ЫЙ фай.., JtОltфиrур-ацки &М«ТО let/s$h/ss1}dc(}-nf.!.9
..g6pe ПредостаВЛЯВl lIJ1иеff'l)', не прошеAWОМУ 81утеIfТИфИИio. д.ОПQлн.ИТ6льное 6реЯ
на ВSOД параnя. ЗНачеНие О И+iтерпре-rИРУ6ТCflII:aJ( бе«онеЧН!)9 (»I(НиQ
359.
UNUX, полное руководство
к."... Н.3Нllчемие
Задает nпЬТСpJ.JaТ1fliныА фаflл OТl:pblТO!"(I МЮ'll1 (1tII1O'I ута), По уМОЛ"l<lЮIIQ I'IL'"
rIМЪЗ)"!1'C:II фаЙ.Jt i{>t,r:Is.<I.h/.s.!;:;hJlaBtkj,', Этм ЮJIO>iМОЖет лаН3.lIабнть.ся., чтобы
.." фвЙлкл1ОЧВ 31nycKan.s:shd от I{Jd.еtЩ 'Ж::"прmrипеrнр.оuaf'НCl1"О по.'tЬЭОlн;те.111 Также ""110'1 b '-!а-с'Т1)
примt!няm.lli пр" :sarlYcxe иЬdИ'J-сцеIUllР1lf:В. зад3.JO!lm:l\цчные lt3crРОЙl(:И 8 3<1"
ВНСНМОСТ51 О! .:ремеfIИ супж (BpaOo.'lec инсрабочее BpQt,.
ИCf10лt>ЭYfJТС, веди НУЖНIJ Slanycкan. ss.l1d 'щрез супрсервер xJne1ct, ОБЫЧНО
деМон &shd заПусl(аеТС отдеЯbt{О пр"' заrрvзкв CrlCl"t1Mbl. Связано зто с тем, "ТО
1l8M0t.rf $$h1S требуется H'eI<OTo.p-ое ЗрОIo,ll1t дли rItМерИрО8З"Я КЛIO'4е сервера, nреж.
.j АВ чем он смажет отеlПкn. на..заПрОСЫ К1I'иеНТО8. При зartyCIC8 через cynop-C:&psep
Пplll k:WЧLOМ сciE!lДИ\"lМWlИ суперсер8ер &удет З3НQ8Q вызывать sshd, .. ТОТ эE1ttо80
rtlhepl-lр05l.\1t. IQ'IЮЧ. ОДнако не 005ременных KOMnЫOтepax Э3ДfфЖk8 nP8:Kn(qecK
не заметна. Поэтому 8ПОflне МОЖНО эаПусаТЬ uhd-м 'iереэ суnеlICSреер
З8м.е'f время, wyct;; j(oТOPQQ, IUUOЧ сервера 6VltD'J' СО>,Дан эаНОfJО. ПО умолчанию
-k ВРМЯ: вреМЯ состэвляет 1 чес, Эту опцию 1.40)1(110 исnопЬЗ0SЭп. ТCllIbКO с ПрОТОIЮJlОМ SSH
еQрсиИ 1
p порт Указывает t:i1'еРНЭtИSНЫЙ порт, 'Который демон aabd будет просnушваtЪ 8место
порта 22
-q "ТJ'iхиR ражИМ..: мв nроТQ(Оt\.Ирсит. сеССИЮ. ОбычНо рQТокоnируетс.Q нач;:u'lО а'У-
tet-fТификации. реЭУ1'll..,ат аутентиФИкации и время окончания сессиИ
-, iэс.овыl1t режим_ Прщtliе\-1RQТСЯ AflЯ nр.ОВерl(И КОРрет'rtOсти файnа Itонфир.ациv.
-. Рв:)решавтсй 'Исполbjовать H'.МPBca толы>tQ 8 формате 'РУ4
-6 Разрешается ИСПОЛЬ:)9аать IРадр8&З ranbKO э форМfJfе .16
продолжение табл. 1'.4
ИСПОЛlo30вание SSН-кnиента
Клиентская fIporpaммa ssh нахОДИТСЯ в I13Keтe opensshclients вместе с
типовым конфиryращtOнны!ol файлом I ctc I Gsh I Qshconfig. Настройки
можно задавать И из команднои строки, зацуская ssh с соответствующими
ключами. Основные КЛЮЧИ и apryмeнты перечислены в таблице 11.5_
Формат команды;
ssh [КЛЮЧИ) tкпючисарrументами] [лоrИНИМя@]хост.доме
[команда]
Если последним арryмеитом УКJIззна команда, то после успещиоrо входа
пользователя она выполняется на удаленноЙ машине вместо командной
оболочки по УМОJlЧaJjИЮ. Таким образом можно работать не в командной
строке, а запустить на удаленной машине rрафический сеанс.
Кпючи I1pofpaMMbl JfSh
iа6тща 11.5
Кn.... H83H"4eHJt.
-. Q't1I:Лючзет ЛервнаПра8Лвнв аУl'Qнтифиmции: areHTa CQeAJl!HeHI'I
.д Вкпючае'f переноnрasление аутеНТИфИХi!lщ-!И аrеНТаСОeдl1нения
c bIoW!\s!1!3des.!des ПЬ380I'IАеТ flыБРВTh aJlrr.iрИТМ шифрования flрИ исnoщ.З()В8НИМ первой аер.
сии "РОТОf(ола SSH, Мо.ЖНОУКQэtJ1Ь bIowflsh. 3des или на
-с 3lЩaeТ II!споt1ьзоваиив сжатия BCf:1X Д3ННО{Х 80 800Х Qы(одных ПОТОКах сие.
пап..-эОВЗ\'lием gZip_
360
rлавв 11. Базовое ,онфиrypирование сервера
Клооч На:а.ч.нме
ДВНHёUt опфtя neрвВОДИТ ssh в ФОНQвыА рв)l(ИМ поспе .аУТВftfИфиICbЦИИ
-, ПОl\to:!ОS8Теля, РеJl:оt!fендуеТJ:Я I4СПОЛЬ30ВаТь д.nя запуска nporpaMMbl Х1 1 .
H"P!IIMBP: 5sh ' host Jdеп,n
-1 идентфай.п Задает нестандартнl:.lй идеНТИфиl<8.ЦI10ННЫЙ файл (ДnA мест:андартной
RSдjDSд-аутеНТl1фИК8LJ>1\11)
.IIIGlrnн",я УIUIывElf;1t. от имени KaKQrO ПОЛЬЭО8атвnR будвt I)I;УЩ9сflUl<;lТЪсА реrис;rpa.
ЦМИ на удаленной маuшне
.р порт ОпреАеляет порт, к КОl0рОМУ ПОДJ(ЮЧИТСА nporpaмMQ ssh (по умолчанию
ИСn01lъзуаtсЯ порТ 22)
Переводиt nporpaMMy ssh S "ти;.<ий ражим", При ЭТОМ будут отобрвжаТЬСА
-о TOl1blcQ сообщения о фа1'afIЫiЫХ QUJи5щ. Все ПроЧИ9 npeд)tl'1ре)(Да.IOЩив
сообщения s СТ8J.Щl1рТtfЫЙВ:ЫХОДНОЙ nО1<Ж ВЫВОДИ'ТЬ не бур.ут
.. ВI':1IЮ'4аеТ О1обрвжение есей ОТЛQД.Q'iНОЙ ин.фоРМ<ЩИI>'i
.х ОТЦЮЧИТЬ пеJ,)(;1lналрЗВЛElНИВ Х11
.Х k!lЮ"lИТЬ ПеренanраВn0iII& Х11
., Использовать ТОЛJoI(О первую версю протокола SSН,('np+lнудитепьно)
.2 ИСПОЛьзован. ТОЛЬКО вторую Версию протокола SSH ("ринудитеnьно)
-4 Р'аэрешзеТСR использовать P.aдpeca только 8 формата IPv4
.6 РазрешаsтCJ1 мспальэоsan.IР-.щр'Э'С8 только 8 форате IPvб
пРОДОJ/женне табл. 11.5
Аутентификацня средотвами SSH
Аутентификация!) SSH может производиться одним из следующих че
тырех способов:
. По ПРИПЦИI1У довеРИJl. При этом способе проверяется, внесено ли имя
компьютера. с KOToporo производится доступ, в фаЙл /. rhosts (ИЛlI
../. shosts). Если ero имя (IP-aapec) внесено, то rIOJIьзоввтелю раз-
решается доступ без проверки пвроля. Этcrr способ очень УЯЗВИМ дЛЯ
разнообразных атак (подмеliЫ IP'iU!peca и т.п.), так что использовать
ero КJ1теrорически не рекомендуется. Для TOro, чтобы разрешить этот
способ, НУЖJ!О установить значение по для директивы IgnoreRHosts и
yes для RhostsAuthentication в фаЙле /€tc/opellssh/sshdconf, а
чтобы запретить зиачения для этих директив поменять lIа прcrrиво'
положные.
. Усиленная аутентификация по принципу доверия. Этот способ в
пршщипе повторяет предыдущиЙ. за тем ШШlЬ исключением, что
проверка имени компьютера (IP-адреса) про изводится в защищенном
режиме. Пр;1 этом используется шифрование открытым ключом. За
включение и отключение данною механизма аyrентификации отвеча-
ют директивы RhostsRSAAutbentication и IgnQreRHosts. Несмотря на
некоторые усовершенствования, этот способ по-прежнему является
исбсзопасным.
361
UNUX; ПОЛное pOBOДCТl!O
. АутенткфиквЦИJI C8MOrO ПОJ1Ь308атeJlЯ с использованием шифрования
с открытым ключом. На момецт реrистрации у пользователя должсц
быть доступ. к файлу cBoero c:eKpeтHoro ключа, и он должен предо
ставить пароль для ero дешиФРОIIКII. Этот способ аутентификации
является самым падежным, но и самым неудобным. Кроме Toro, оп
вынуждает пользователей пост<,яmю иметь под рукой файл с клю
'10М. За включение 11 ОТКЛIQ'lе!Ще этоrо способа отвечает директива
РuЬkеуАuthепticаtiоп (или RS:ААuthепtiсаtiоп в зависимости от
верСИlI) .
. Аутентификация с ПОМОЩЬЮ ЩIРО,IJII. Это ОIПИМальный способ: он yдo
бен в использовании и в тоЖ!!i!рсмя достаТО'lIЩ безопасен. Именно
01111 используется в БОЛЬШИIIС'!'!3е случаев. В отличие от lelnet, пароль
здесь передается в зашифроваmtоМ ВИде. ОСНО!lНой недостаток дан'
HOro ме1'(Ща заключается в omoClfreitЪHoii слабосш паролей (их Лдина
зачастую составляет менее 8 сим.Полов). Это позволяет подбирать их с
помощью специальных проrpаым. За включеШlе 11 отключеШlе этоrо
способа О'!'Нечает дирек-ntва P3;S$WordAuthentication.
Какой способ использовать......, рещать вам. Однако настоятельно не
рекомеНJ!уется применение первых двух способов. Их использование дo
пустимо лишь в исключительных случаях и в особых условиях.
Бесплатный SSНклиент лдя WiЦUФV&мОiIQIО скачать у автора, Роберта
Каллаrана, сайт http://www.zip.com.au/roca/ttssh . htn\1 .
362
rлава 12
РАЗДЕЛЕНИЕ
РЕСУРСОВ:
NFS И SAMBA
NFS СЕТЕВАЯ ФАЙЛОВАЯ СИСТЕМА
SAMBA:LINUXcEPBEP
ДЛЯ WlNDОWSКЛИЕНТОВ
СОВМЕСТНОЕ ИСПОЛЬЗОВАНИЕ
КАТАЛоrов в LINUX MANDRAKE
пРоrРАММА LINNEIGHBORHOOD
ПРАВИЛЬНЫЙ ВЫБОР
LINUX ПОЛНОЕ РУКОВОДСТВО
,.",,,,...
12.1. NFS сетевая файловая система
Сетевая файловая C!leMa (Netwqrk File Sharitlg) это протокол, ло
зволяющий монтировать фаЙЛОВЬ!Сl\стемы На удалеНQЫХ компьютерах.
При этом создается ощущение, что ()ПJ файловые clJcтeмw расцолarаIOТСЯ
ЛОКaJJЬНО, если не СЧlпать, конечно,сlOOрОСТИ соеДJU1ения. Сетевая файло
вая система чем-то напоминает СiIYJiЩу "Доступ к файлам и ПРИНl'ерам»
сети М icrosof!.
Служба NFS основана на RPC (Remqte Procedure Call): клисrп вызывает
функции в I1porpaMMe сервера, I<диентскому компьютеру не требуется
дополнительноrо проrраММНQrQQбсrlечсния, 'ITo6b! воспользоваться
NFS: ядро Linux само опреДeJщет, 9'1'0 запрошен»ый фаЙл находится на
NFScepBepe, и автоматически rёиерllрует RРСВЫЗDВ, чтобы ПQЛУЧИТЬ
доступ к файлу.
Версия 2 протокола NFS ПОЯВЩlа<;!> в ядре 1.2. НаЧl!на!< с версии ядра
2.2.1&, поддерЖlШВется версня 3..1\ If!1i()РОЙ УЛУ'lIiJеив npoизводителыlстьь
блаrоларя безопасной аСIIНХРОННОЙ.ЗaIIИСИ фаЙлов, добавлены поддержка
фаЙлов размером больше 2 rб 11 средCТШl блокировки файлов. В ядра 2.4
и выше встроена лолнофУIIКЩЮIUШЬ!lnЯ NFSv3, работающая поверх IIрО'
Токола тср (в дололнеНllе К оБЫЧИQ'МУ UDP), и БОЛЬ!IIИНСТВО популяркых
дистрибутивов ее поддерживают. 'tТllертая персиЯ NFS с попыщенной
безопасностью появилась в Red Hat Enterprise Linux 4.
FAQ и HOWTO-аокумеНТbI можно наЙти lIа домащнеЙ странице проекта
nfs.soиrceforge.ne.
12.1.1. КливнтNFS: монтирование ceTeBoro KaTaпora
Монтировзние осушествляется с помощью команды тoиnt:
l'C\ount t пfs o t irпео=З<J nfsserve!.". t1.omain .сот:
Ihorne/den /home/den/remote/
Прежде Bcero, нужно указать ТЩI файловой системы;t. nfs. Параметр
timeo задает время ОЖидаиия, равное 3 секундам. ]1итересующая нас
364
rлава 12. Разделение ресурсов: NFS '" Samba
файловая система находится на компьютере n f sserver. domain. сот и
CMOHTlfpOBaHa там как /home/den. Мы же ПОДМОНl'ируем ее в подкаталоr
домашнеrо каl'алоrа на локальном компьютере Ihome/den/remote/ .
Для монтирования сетевых файловых систем предназначены ключи ко'
манды lIIount, l1еречисленные В таблице 12.1.
КлЮ'IИ комаНДЫ moиnf для сетевых фаД,т,вых СИСТеМ
Таблниа 12.1
КО"'" На3НDЧенме
bg Если Первая nonwn;s MOKb1pO!l8HJIIJ1 файловой сисТемы NFS (Н{iU(8ТI;:SI мв"
удачнОЙ. то ПОПЫТ будут ззтоматицески nовторятt.СЯ в фо,овом режиме
Если nирs.aя rioni>тC8 Монтирова.ниq фв.ЙЛОВQЙ систеМы NF'S оквжеtcg нв.
'g y,l2a'flioR. то nonыпJt 6уДУ1 S870М8ТИIfeС«И повторяться в прИ'оре".,ом
режиме. Это значение УСТllНQ8леНQ по оnчаниlO
3ад.ержltа при 8ыnОl1нении ОПерациИ, свз.анной с фАi1IЛом, pl5С;ПОПОжеМНЫtJ! 8
ceTeeo фе.:tповой сисrеме NFS (1Ю3НJ(аIOЩЭiЯ при сбое сервера или ои:nю-
чеl-ШИ сети), &jДI;IT nрlil80ДИ'tь k отnрtш.ке I'фиtЮ:-;IJt-tИJl;J сообщения Q() Otl.i".6ite
soft BBO,llaj8bIBOДR. И XOTS\ HeOTopыe nрftложения MOryт lCорректно обрабатывать
тахую Оlllttбl()', O БDЛЫUИНСТSО .и3 I-IИХ BCEk7akit п\коА 8Q:,Jм'Q.нощы:JEI Q'f$.
Падают. Не peKOMeНAyercl'< УС1'анаs.nИI!!ilТЬ ЭТО значение. так !сак оно мож.е1'
f'\ЯСТ" " nОЯВn-IJНИЮ VlCnQ;.14I'HНiЫX фт1lncщ L1 пOTep Д8ННЫ)!;
3aдepna ПР'1 &iJЮолмении onepaul'I. С8АЗЭНf10и с ф8ЙJiОМ. pliОf1QЛQЖQН.
мым В се1f1ВОЙ файловой си.стеме NFS, будет ПрИ80ЦИ1Ь к приоСТQноsке. а
hard з.вТеМ 8Q;)оаНОIАI!НИЮ nроцесса с npe.peaнHoro места. Таким образом 6yn,yr
ПредпрI-1НИмar,я повторныв nOпblT,It" аыП9ЛН8НМR операции. 3нэчвнне hard
устаномено по умолч.аиУ11О
.ер МQН1'ирует tаПlВ'УЮ файловую систеМIj с,помощью npoTOtc:ona тор, а не иDР
r,ц'е""1024 Зв.а,аеr ромер -информации, пересЫЛaetdЫ при "f.1ении фi1ЯЛО8 38 ОДИН раз.
ПО уМО!!Ч$ИIO -:':ТО1 размер pael3H 1 О24 wЙiЙ, OAaI(O зачаCiylO ИМев'!' С,;МЫСn-
У$ВnИ"Ить ЭТО значеНИе <нanример. До 4096)
ws!zl!ll-=<1024 АНaJlОrично rSl1:e, но для операции записи
пОООС0!; 3anpew.aвT выполнение nporpBMM ИJ1м,сцемериев В цонтируемой фаЙ'nО80
СИС1еМ8, при SroM КЛеЮ-ОМ I'iYAB1.,rHOPflDOIi$1 аqтбут ",исполНlitkИ&"
Чтобы сетевая файловая система монтировалась автомаТllчеСI<И пр" за
l1'узке системы, нужно внести определенные заl1llСИ в файл / et с I f stab.
Например, такая запнсь для рассмотренноro выше примера может иметь
примерно следуюший вид:
nfsserveJ;';da!ain.ссщ;/den Ih<:me/den/rerro:?el nfв bj,hard,w 1 О
12.1.2. Настройка сервера NFS
, Сервер NFS экспортирует фаЙловые системы, то есть делает их доступ
ными для использования с Apyroro коt.ffiьютера. Обслуживанием экспорта
занимаются следуюnще демоны:
. rpc,mountd, обрабатываюший запрос на МОIПllроваllие;
. rpc.nfsd, обеспечиваюшиЙ доступ к файлам смонтированной файловоЙ
системы;
365
UNUX: nonoв РУ1<ОВОДОТ80
. rpc.lockd и rpc.statd, УПРa1l.llяющиеБЛDКИРОВКОЙ файлов;
. rpc.rquotad, контролирующиJt JЦlQТы на экспортируемых файлоI!ых
системах.
Эти демоны устанавливаются из naкeтanfsutils в каталоr /аЫп (реже
/usr/abin). Запускаются они входе начальной заrрузки, и сценарии
запуска находится в том же lIакете.
Как и друrие RРСслужбы, NFS зависит от демона portmap (или rpc.
portmap). который должен заПУСКа'IЪСЯ lIервыы. Заrрузочные сценарии
большинства совремеНllыхдистриб}i'mвов включаЮ1"заnyск этоrо демона.
Если в вашем дистрибутиве neMOIIb! NFS по умолчанию не запускаются,
отредактируйте заrpузочиые сценарии, орrанизовав запуск в следуюшем
порядке:
1. rpc.portmap;
2. rpc.ll\ountd, rpc.nfsd;
3. rpc,statd, rpe.Jockd (е ядром выше 2.2.18 ЭТDТдемон вызывается из
пfнd, и отдельно запУСlG!ТЬ eto не ЛУJlЩQ), rpc.rquoWd.
ЕСЛlt на вашем КОМПЫDтере зацуЩ\1Н также сервер DNS, проследите за
тем, 'lтобы сервер DNS запускаЛся после демонов NFS. При соблюдении
naHHoro УСЛО8lIЯ rарантируется КОрреКТНая работа NFK
Конфиrурационным. файлом сервера. NFS служит I etc I export Б, co
держащий список экспортируемЫх Ф;ll!ловых систем. В каждой строке
записан олин экспортируемы!! Каталоr, узел ИЛИ 1l0ШII, которому раз
рещеllО монтировать этот каталоr, 11 без пробела, в скобках, через
запятую, спецификации экспорта. Длинные строки можно разбивать
на весколько строк при помощи символа обраТRоrо слэша,
Разрешается экспортировать любые катало['и, а не только корнеnые
каталоr" фИЗИ'lеСКltХ файловых систем. ЕДИНt"Т8еЯllое оrраliИЧение
файловые системы, физически расположенные на разных устроЙствах
(разделах), должны экспортироваться по отдельности.
Листинr 12.1. Примеркый файл ;etc 'B><ports-
/pub (УО, insect!re, allsquashl
1110me / den denhome. domain . сот( rw)
/mпt/сdrоm (УО)
/rnnt/cdrom compl1.domain.com(noaccessJ
Давайте разберемся 1\ данной конфиrураllИlJ. К каталоrу /pub l!меют
ДОСТУIl 8 реЖl!ме «только чтение" все компьютеры сети. К каталоrу
/ home / den доступ в режиме чтеНИR и записи имеется только с компъюте
ра dellhome.domain.cdm. К каrалоry / nmt / cdrom доступ D режиме «только
чтение» имеют все комньютеры, кроме compll.domain.com.
366
rлааа 12. Разделение ресурсов: NFS и SаП1Ьа
Друrие спецификации экспорта перечнслеflЫ в таблице 12.2.
С'1f1цификsцин В фаЙJle /ecc/expOJ:ts
Таблицs:12.2
Специфмкац.МR НанаЧ8Нке
Трf1бт, ЧТаОы .заПРQСЫ СХОдИЛJool ТОЛЬКО 1113 портов безопасноrо диа-
secure n83Otf8 с номерами, МЕ)НЬШММ 1"02':. В UrшкдоCiyn j( 'l'EIJ(iotM t1(JРТ.б;М
имеет l'ОnЫЮ ПОЛЬЗО8атель root. Значение sectJr'e по VМQЛчаНИЮ'8КnIO
чаl10
Insecure Отключает эна-.е;j"О& secute
'" Vствне.IJ1IIIIQЩJТ ДЛII: Зl(спор,ируеЧQrо К8ТW10ra ДQt:тyn в реЖИ"ldе "TO'nI:o':O
"!теНив..
.... Усн\навлиеает ДЛя эспортV!руецоrо Ц1SЛQrе ДОСТУП в режиме чтення
и а<lf"lиr.;
noaccQSs 3апреЩtJет AOn t: конкретной '3GТ1М (nOДl<B'f8J1ory) экC:;nортиру&моrо
дерева кщалоrое
I\nk ..;abso1ute Оctавляет все (;ИМВО11Ичос!Сие r;cbII1K" без измеНениЙ. Значение ВUllOчв
на ПО умопчанию
link ,relative Конаертнрует еБООЛЮТыв ССЫЛКИ u cmюcМТl;Il1ьныв-
SQЩ!l$huldssquаshgld$ УК838цные иде-Кntфикаторы rpYnl1 И fIQ'nb3Qsatetlel1 будyrКОНрТИнrcl_
ны в .аноНИМные
Все идеНП1фкаТОРbl rруf1П и ПQfiЬQе.ател",й бvдvr оtiееР1ИРО5еНI;>I
all,..squash s анонимные. При Э10М всем ИМ будет запрещен доступ j( экспорrnруе-
МiblM lt:aT8IlOrQM, По УМО1l.'48иlt1lQ Щ HI1 lIena9TCS<
"0..,001 sqtla$h Знаение. Q6paTHOB all sqU3Sh. Двизирована ПО умоnч<tНИIO
ПреобразуSi запросы С1Т пОf1l>эовa:rеля (90( (tJjdO) s запросы от аноним-
rf)ot BQuash Horo пО1lь:юваrеnя с целью з<tпреiЮ'Ь супе.рnОПЬЭО86телю erQ ПрИ8И-
мrии -nР'И'АОcryr1е '" Фви1tовои Ci1CTeмe. Это З;Нз'iеt!ие устсыомен.о ПО
уМОJNi!НИЮ
по ]tJot S-quash OrМ'8НЯIПЗН81i&-»ие ,oot9-Qu.ash
3aд<IЮ1' l'ЩеtfТll!фИкаторы енонимнык-noльз.оваТВЛеPi. ПQ УМ()Л'fВНИЮ
af'\ond"'\JIP аНОнИМНЫМ,nот.зователем является пользователь nobody OO с
anonguld=G!D ПОМОЩЬЮ ЗТI'IХ Сf1ецVtфI.l!К;;ЩИ вы можете е:ами 'fJ',.ВЭать. Koro следует
8OCnрИI1ИМ8.Th в. k.,З<.<оствв 8НОнИМНЫХ ncrЛЬЭОВjЗте"ей
Каталоrи, перечисленные !' /etc/exports. экспортируются на этаПе на-
чальной заrРУЗICJI. Добавить JlЛИ улащlТЬ каталоr в течение сеанса можно
при помощи ynlЛИтЫ exportfs из пакета пl's-utils_
Для повышения безопасности доступа к разделяемым ресурсам служат
КОНФJlrурационные файлы /etc/host5.allow и /etc/hosts.deI1Y
(п.11.2.2).
12.2. Samba:
Linux-cepsep для Wiпdоws-клиентов
12.2.1. Samba на сервере
Из 11.6.3 вы узнали. как использовать пакет Samba (www. затЬа. org) для
просмотра общих ресурсов сети Windows. В этом параrрафе я объясню.
каК настроить сервер Samba, чтобы открыть общий доступ К ресурсам
компьютера под уnpавлением Liпuх.
367
LINUX, полное рУКОВОДСТВО
С помощью Sarnba вы сможете:
. предоставлять доступ к разщ:лам: Linих для рабо'IIIХ станций Wmd6ws;
. получать доступ к ресурсам сети Мicrоsоft;
. распечатывать докумеllты1 на сетевых приитерах сети Мiсrоsoft. а
также предоставить локальllый принтер для IlcnользованнЯ в качеcrне
ceтeBOro.
Вам понадобятск основноЙ пакетsащЬа"соmmоп 11 серnерный БатЬа. Из
cepBepHoro пакета БатЬа устана8.llltllаются демоны smbd и nmbd. Пер"
вый из НIIХ квляется носителем протокола 5MB, а второй обеспеЧIl1lДет
поддержку имен NetBIOS, Сразу жёпосле НХ настройки ваш компьютер
будет отображаться 8 сети.
После устанОJlIШ сервиCbl smbd lInmbd 1Wнфиryриру.IOТCЯ: как запускаемые
в ходе начальной эш.рузк!!. ВозмОжно, вас не устраивает такой вариант
(например, в тех CJIучallX, коrда.().бр.ащсние к НИМ планируется редко, и
вы хотите освободить память). В ЭТQЙ ситуации llilKТO не ыещает добавить
их в файл коифnrураtщи супер<::еРВllра letc/xinetd.conf и зааусК8ТЬ
<<110 требованию». Пр!! этом не забудьте только отключить их аВТQзапуск
с помощью конфиryраroра системы.
12.2.2. НастроАка Samba
в этом паратрафе будет рассмщреЩliaстройка пакета SашЬа «ВРУЧIIУЮ»,
то есть без помощи конфиrуратора.f3ы же можете использовать КОII"
фИfуратор (рис. .12.1). однако liмейтев виду одно «но»: если вы будете
настраивать Samba IЩИ любую дpY.19. службу сервера в apyroM днстри"
бутиве, знакомOI.О вам КQнфnrуратора в нем может не оказаться. Поэтому
вы должны знать хотя бы назНачение И расположениссистемных фаЙлов
той или иноЙ службы сервера.
ОСНОВНЫМ конфиrураЦИОIIНЫМ файлом сервера Samba является файл
I et.c / этЬ. ccnf. Именно в нем зад3I()ТСЯ все используемые и предостав"
lIяеыые ресурсы. Формат данноro файла }larlOМllllaeт формат INI"файла
Windows.
Файл /etc! этЬ. conf состоит из нескольких секциЙ, в начале каждой из
которых В квадраrnых скобках указывается ее fIМЯ. Параметры в каждой
секции указываются" виде записей ИмяЗначение.
368
rЛ8ва 12. Разделение ресурсов: NFS и Samba
.',:,: .;..:tд
.:,ураа::1<1:);iНТастиltЗ ... }
L i
'"
..... - -..
"',",",.,«....",..
'--'--':.iii;1С:1;(".'.'
"-:_,Й?j{!!;)'[:;,;,:';-::.:,;: :':':)
&юi!Ua:
;Т'.8Н"'я"
О Чтение I nb
.. '.:,-,;c",'])';" ';
. . ..,
:'--' ..,',--'--";
',!'.".';: \,,'}:, 'i'.i!i1
......'.:...... ........'..'.:.<>.'..',.......:... ..............;,,'
. 1 . " ,.,. . .. .... . , . j .: ! ..... ....rw..:,. " 1
" ..... ."-, ..........1; "':.. .,'' :",,, :- '_:."7;:...JI!1""";'-"""" ..
,', .... .....-"...... .. .. .....
"',,-.. .. .,."..,;);.,..:-.,,'.......,.'.".....,....-..,.....,....,...,::
Ptf",. 12.1. Конфиrypaтор systeт-coпfig-saтba вдисrpибyrnве FщJота Core 3
Секция [global]
Основной является секwlЯ [globa 1], ее пример прJmеден в листинre 12.2.
Листинr 12.2 Лример сеkЦИИ glоЬэl
[global]
workgroup WORK
comment Linux Server
guest account guest
security : share
printing = bsd
printcap пате = /etc/printcap
load priпters уев
client code page = 866
character set ko:l8r
encrypt passwordB = Уеэ
10g file = /var/10g/sambal1og.%Ir!
rnаХ 109 size = 50
socket options = TCPNODELAY SORCVBUF=8192 SOSNDBUF8192
dns proxy = [10
369
UNUX; попное РУКОВОДСПlО
wir:s support = yes
d0111ain шаstеr :::;: уеа
lhterfaces 192.168.1.1/24 192.168.2.1/24
Директива wоrkgrоцр определяст рабочую rpyrmj ltftи имя домена NТ.
Директива соттеп. аналопtчЮl параметру NT DeScription для ОС Win
dows NT или Descrlption (Опжщнне компьютера.) для ОС Windows 9х.
ДllреКТlIва guest account задает lIМЯ пользователя. Зkачemtе guest означает
доступ без реrистрации, точнее, под J'ОСl't1вой у'tетиой записью.
Директива security может пришtмать три Зllаче!tИЯ:
. sh,lre при каждом доступе будет запраШlшаТЬСJ! имя пользоватедь-
cKoro ресурса;
. uSer дм аутентификаЦJIибудут IIСПОЛЬЗОваться ИМЯ пользователя
и пароль, которые служаТД)l1I вxnда в сеть Windows. Это значение IIС-
ПОJ\Ыуется.по умолчанию;
. server для проверки паром будет использоваться сервер NТ.
Директивы printing и printcap пате ОТНОСЯТСЯ к подсистеме печати.
Первая из них задает систему печач!пша BSD, а вторая указывает, rAe
расположеll файл, содержащий инФормацию о пркнтерах. О настройке
ПРИlIтеров МЫ поrоворим немноro Позже.
Директивы cHe"t code page н cbal;actj:r ,е! необходимы ДЛЯ корректноro
отображения русскоязычных имен фаfuюв файловоЙ системы Windows.
В ОС Windows NТ,начиная с Servic:e,Pack 3, передача паролеЙ по сети
происходит в зашифроваНIIОМ виде. Последние версии Samba поддер-
живают эту ВО ЩО9f!Ъ ' ЧN\iщ.Jj(lfоватьЩQ, l:tоустаНО\lИТЬ
значение диреК1"ИIIЫi't!nсryрt PIl5swotd"paBHblMyes;..Вc:тr ваша верс!!я
Samba не поддерживает данную возможность, то ВЫ можете ОТКЛЮЧИТЬ
IIспользование закоднрованныJ( паролеЙ в Windows. Правда, вам придет
ся вручную нравить реестр на всех рцбочих (;'fаНIIИЯХ Windows, так что
IIроше. помоему, обновить Samba. Но если вас все же интересует, какой
именно параметр реестра Windows нужно изменить; Я укажу ero:
. В разделе реестра ОС Windows NТ: [NТ НКЕУ LOCAL МACHlNE\
System\Current ControISet\Services\Rdr\Parameters! нужно создать КЛЮЧ
EnahlePlainTextPassword типа DWORD 11 установить е!'о значение,
равное 1.
. В ОС Windows 9.х вам ЕIУЖIIO создать тот же КЛЮЧ, но в разделе
[НКЕУ LOCAL МACH[NE\System\CurrentContTolSet\Services\ VxD\
Pa'ilmetersJ.
. В ОС Windows 2000 нужно внести изменения в раздел реестра
[НКЕУ LОСАl.МАСНINЕ\S\'SТЕМ\СuпепtС9пtfQlSеt\Sеrviсеs\
Lanman WorkStation\Parameters].
370
rлава 12, Разделение ресурсов: NFS Samba
ДирекТIUIЫ log file и тах log sie определяют имя файла протокола (жур
нала) И ero максимальный размер.
Параметры с;жетов задаюrcя с помощью директивЫ socket optlon. Прежде
чем устанавливать эти параметры, рекомендую прочитать тап аПlb. con f .
Если в вашем компьютере установлено несколько сетевых интерфейсов,
то вы можете сконфиrурировать naKeт Samba так, чтобы он использовал
все интерфейсы. Как это сделал я, nоказано в листинrе 12.2.
Секция [homes)
Следующая секция назыВается [hоП\еsJ и определяет параметры COBMecт
но используемых ресурсов. Пример содеРЖJlмоrо этой секщlИ приведен
в листинrе 12.3.
листинr 12.3. Секция Il10rnes]
[1'tomes]
comment = Ноте
browseable = уеа
writable = уеа
Дирекпша browseabIe=yes разрешает отображение совместно используе
МЫХ ресурсов а сети Мicrоsоft. Директива writable=yes разрешает запись
в каталоrn (тот же эффект будет иметь директива read оп]у=по).
Секция [pubIIC)
В секции [риЫ i с] перечисляются расшариваемые каталоrИ (ли
стиJlr ]2.4).
Листинr 12.4. ССКЦИЯ [Р\lЫIС J
[public]
comment = VFAT Partition
path = Imnt/diske
read опlу :;; по
12.2.3. Практические примеры настройки
Ваших знаний уже достаточно, чтобы самим произвести дальнейшую
настройку. В качестве завершения этою параrрафа я приведу пару
практичеСКJlХ примеров (листинr 12.5). Обратите внимание, что в файле
9тЬ. conf комментарии MoryT обозначаться либо решеткой (#), либо
точкой с запятой (;).
371
LINUX, полное PYКOBOДCТIIO
Листинr 12.5.
Каталоr NRTLOGON для входа в домен
ll1et1ogon]
cormnent :. Sarnba Net 10gon Service
path : /var/netlogon
: Не устанавливайте значени yes
сазе sensitive ПО
guest. ок ::.':' уеэ
.locki.ng = по
'oJri t.able : yes
br'owseable :::: yes
; Профиль для совместно используемых ресурсов
rProfi1..?s]
раи, о /usr/lосаl/sаюЬа/рrоf;i.lеs
browseable = ПО.
printabJe по
guest ох . yes
; Каталоr I используемый !10ЛЬЗО13а'I'Сn€.М ad!llih
; ПОJ1ЬЗ0ват.еJ!Ъ admih должен сущеС'!'ВОВdТЬ :На сервере Samba
[ adrniп)
Gomment = admin'e director.y
patr"\ = /hO!ne/admin
val id 11sers ::: admin root
"ea(l tJпlу ::; по
12.2.4. Доступ к принтеру Linux для Wlпdоws-машин
Для обеспечения поддержки печати мы уже сделали ПОЧТИ все воз
южное. ДиреКТИ!!l'IСКЦlIII [gIQ\1Il'I!Jрrintеrsзаrpу.жает принтерыllЗ
файла I etc /pri.rlfucaR (дистilн,2;tС:ИСl1ользуеТс!l система печати BSD.
Осталось только опредiтить се'iШ:иi6 fptintersJ файла 8тЬ. сап f. В этой
сеКlШИ .задаются rлобалЫfые параметры для всех притеров, поэтому нет
необходимости указывать их отдельно для кажлоrо пр"нтера.
Лист"нr 12.6. СОКЦIIЯ [printers]
[pr.i.ntersJ
соmmепt = All Printers
secJ..lrity;:;set'ver
path 7 /varlspool/.lpd/lp
ыlот..vsеа.ыыe -"'" по
printa.ble yes
372
rпaнa 12. РазАапение ресурсов: NFS и БатЬа
public yes
writable = по
create mode 0700
Некоторые директивы, используемые jj этоii сеlЩIIИ (browseabIe, writa.bIe,
comment), имеют те же значения, что и в секции [homes]. Директива path
задает буферный каталоr, в который файлы будут копироваться перед
печатъю(тЩ(. Ijазывае""ыi\ спул црщrrера). Дирекnша риIJЦС С9значени-
ем yes ррещает печаn, IIЗ-ПОДI'ОC'!"tJIIОЙ учетной записи, '''' еСТЬ всем
желающим. Чтобы запретнть печаn, из-под rocтeBoi! учетной заrlИСИ,
укажите pubIic=no: в этом случае дО<.'Туп к принтеру будут имеn, только
зареrllстрированные иа сервере пользователи. Вместо директивы public
Иllоrда используется ее СИIIОНИМ директива guest ok.
Директива writable установлена в значении по J1!lЯ тоro, чтобы в буферныЙ
кв,'алоr принтера (спул) моши записываться только печатаемые файлы.
Возможно, вам потребуется разрешить печать только одному или несколь-
KIIM определенным пользователям на каком-то опр.щелеНJЮМ npllHTepe.
Сделать это можно так, как это по казана в листинrе 12.7.
Листинr 12. 7 Разрешение печа:ти опредвлен",ому ПQльзователю
[аdn\рrп J
'v"alid USer root adJ1J..in ddrn.inista::or
path = Ihome/admi
priпter := сапоп
public ::. ПО
writeable по
printable :: yes
Подключение к WiПdоws-компьютеру сетевоro ПрИlIтера, pacmapeHlloro
сервером I!ЛИ рабочей станцией под управлеllием Lшuх, осуществляется
точно так же, как lIодключе!Пlе обыкновенноrо ceTeBoro tlрИНТера. В
операционной ClicтeMe Windows 98 для этоrо проделайте следующее;
1. Выполните команду меню Пуск> Настройка-> Приитеры.
2. Активизируйте ма",ера Установки принтера.
3. Б!>Iберите тип rqшнтера; сетевоЙ. ... ..
4.. УlЦIЖите пy-n, К принтеру или нажмите нэ,к!ic:iriку Обзор для aaTOMЦ
тическоrо выбора ресурса.
5. Далее установка сетевоro принтера аНaJlОПlчна установке локальноro.
З7З
UNUX: полное РУКОВОДСТВО
12.2.5. Доступ к Wiпdоws-принтеру с компьютера,
работающеrо ПОД Linux
Настройки CCTeBoro принтера находятся в файле /etc/prirJtcap.
Примерное содержалие этоrофайла с комментариям" приведено в
листи"rе 12.8.
Листинr 12.8. Файл /etc/printcop
# /lntwsl/hp5m via smbprint
#
lp:\
# описание. принтера
:ст"НР 5МР postscript hp5m оп rJtwsl:\
# имя УСТрОЙС'rва J открываеыо:!.'() для вывода
: lp"/dev/1pO: \
#- r::атапоr спула npи:н'rера '-на локаЛЬНОй ма:шиН'е)
:sd=/var/spool/lpd/lp:\
# файл уче'rа исnqЛЬЗОS-д/Н:} -'Jiринтера
: а [:::; /VdC/ spool/1pd/lp/acct \
"# маю:имаЛЫJНЙ размер фаЙла. ЗН>3Чiние D Qзнщчает
O-ТСУТСТЕие о;.""раничен'И.й
:шк#Q,\
# ИМЯ ЕХОДНОТ'О фильтра
: i [:::;, /U5r /1.')iп/sm1JР:!:L_пt:
в пакет Samba входит сценарий smbprint. С помощыQ этото сиен ария
можно распечатывать докумеliты на сетевом ПрЩlТере, используя сер'
ЮIСЫ 5МВ. Возможно, в состав вашеrо лакета ОН ие входит, позтому Я
воссоздал есо в листинrе 12.9. Этот листиНl' частично позаимствован из
руководства по пакету Samba.
Листинr 12.9. Сценарий smbprin1
! /bi.l1/ sh x
Iс) Andrew Tridgell
# Этот скрипт ЯВ1Iяетсн фильтром дпя системы печати,
-Н )"IСПОJН::.ЭУЮЩ,,,,й.
# файл !etc/printcap
# ОН ИСJ10пьзует IlpOI'paMMj/ smbc 1 i en.t дnя пеЧаТИ фай:rrа на
374
rлаав 12. Разделение ресурсов: NF5 и 5Bmba
# сетевом npинтере,
# который подключен к рабочей станции Windows.
#
#
# Эта запись создает uniхnpинтер, названяblЙ smb.,
# который будет печатать с помощью этоrа сценария. Вам
# необходимо создать каталоr спула /usr/spool/Bmb с
# соответствующими правами и впадельцем
# smb:lp;/dev/null:sd;/uBr/spool/Bmb:Bh:
# if;/uBr/local/samba/Bmbprint
# Далее сценарий был изменен Майклом rамильтоном
# так что сервер. сервис и пароль мотут быть считаны из
# файла
# /usr/var/Bpaol/lpd/PRINТNAМE/.config
#
# Для тато, чтобы это работало, запись в /etc/printcap
# должна включать файл учета использования laf;...}:
#
#cdcolour:\
# :cm=CD 1ВМ Colorjet оп 6th:\
# : Bd=/var/Bpaol/lpd/cdcolour:\
# :af=/var/spool/lpd!cdcolour/acct:\
# : if=/usr/local/etc!smbprint: \
# :rnx=о:\
# :lp=!dev!null:
#
# Файл /usr!var/Bpool/lpd/PRINTNAМE/.config должен
# содержать
# server=PCSERVER
# service=PR SHARENAМE
#pasBword="password"
#
# Наnpимер,
# server=PAULSPC
# service=CJET371
# password=""
#
# Файл ДЛЯ отладочной ю;формации, МО>l\ИО изменить на /деу/пиl1
#
logfile=/tmp/smbprint.log
spooldir=/var/spool/lpd/lp
configfile=$spooldir/.config
375
UNUX, полное рУКОВОДСТВО
eval 'cat $configfile'
echo Nserver $server, service $service » $logfile
echo trапэlаtе
echo "print "
cat
I I /usr/bin/sbclient "\\\\$server\\$service" $password
IJ $С1эес N p » $logfile
Теперь вы можете печатать иа сетеl!омпринтере. Но, тем Не менее, Я нсе
же рекомендую прО'iИТaть РУКОI!OlIСТ.во по IlaKeтy Samba для получения
более подробноЙ информацни о печати на сетевых принrерах.
12.2.6. Конфиryратор SWAT
Конфиryратор SWAT (Samba IVeb--Ьasеd Adтil1istrati\'c Tool) предназначен
для настроЙкн лакета Samba через 8еб"'Н1'ерфеЙс. Как " друrие ICОНфJ1"
rypaTopbI. SWAT предоставляет удобный rрафllче.ский IIнтерфейс ДЛЯ
адм"нистр"рован"я сервера Samba..OcIIOBHbIM преимуществом даllНОТО
конфиrуратора является ТО, что ВаМ не нужно наХOllIl1j>СЯ за кошьюте'
ром, которыЙ вЫ адМlf(истр"руете: адмии"стрнров.а1'Ь сервера Samba 8Ы
можете С любоrо компьютера пашеЙ сеТИ. Как JI пр" работе с друrими
конфиryраторами, при работе со SWAT вам не нужно знать ни назваШfЯ,
ни расположения, Шf формата коцфиryрационных фаЙJlОВ.
ДJIЯ установки SWAT нужно установить пакет salnbaswat.
После установки пакета проследите за тем, чтобы в пашем файле
/еёс/ secv'ices была следующая запись,
swat 901/tcp
Канфю'уратор SWAT для Сl<оей рцботы использует протокол ТСР и
1I0рТ 901. Тем не менее, nы можете иазначить любой друrай порт. При
изменении номера порта не забудьте I!Зменить номер порта в фаЙле
/etc/inetd.conf или /etc/xinetd.conf,
Пр» зтом, в коифиryраuиоином фаЙле /etc/xinetd.conf суперсер'
вера хiпеtd должна присут<:твовать секция Сllедующеrо содержания
(ЛИС1'инr 12.1 О):
376
rлава 12, Разделение ресурсоВ: NFS и 5атЬ.
Лl1стинr 12,10, Настройки службы 5WAT
service swat
{
disable = по
port 901
sockettype = strеащ
wait = по
on1yfrom = 127,0.0,1
user =: root
server = /usr/sbin/swat
logonfai1ure+= USERID
}
Если вы хотите конфиrурировать сервер Samba с любоrо компьютера
вашей сети, эзкоммеитируltте директu!!у onlyfrom= 127.0.0.1 иди уста-
новите любые друrие параметры доступа к SWAT.
Теперь lIУЖНО перезапустить суперсервер. для этот введите команду:
" /etc/init.d/xinetd restart
Можно также заставить суперсервер перечитать свой' конфиryрацИОНИЫЙ
файл:
" ki11a11 HиP xinetd
Все! Настройка SWAT завершена, и теперь можно приcтynить к конфиry-
[>ироваИIIЮ 8атЬа с помощью 8WA Т, Для этоrо запустите своЙ люБИМЫЙ
браузер и введите URL: http://host;901.
После установления соединения и авторизации вы увидите основное окно
конфцryратора (рис, 12.2), в котором все самое НУ',кное находится «под
рукой» aA1UllUlcтpaTopa; от документапии до паролей пользователеЙ.
13 разделе Globals определяются значения rлобальных цеременных. Вы
можете получить подсказку по тому IIЛИ IШО1,[у параметру, перейдя по
ссылке Help. Установить значение по умолчанию можно, нажав на кнопку
Set Default.
В разделе Shares определяются общие ресурсы, а в разделе Printers об
щие принтеры. Состояние сервера Samba можно посмотреть в разделе
Status. Здесь же можно запуI;ТИТЬ, остановить илерезапустить сервнсы
8МВ и NMB. В этом разделе можно завершить любое соединение с сер-
вером Samba, а также просмотреть состояние соединения.
В разделе PasswordS ()предеЛЯЮТСЯПОЛЬЗ0ватели, которые имеют доступ
к серверу Samba.
377
LlNUX: полное рУКОВОДСТВО
1,
.
A.,-Ao
$ - [i
11
в
номе
""0. 12.2. Окно конфиrypamра SWI\T
12.2.7. Samba и безопасность
Вряд ли стоит разрешать доступ к вашему Sambacepвepy всеМ желающим,
Целесообразно разрешить доступ только Оl1ределеНIIЫМ пользователям,
которые должны быть зареrистрнроваНЫ на сервере Saтba. Наrюмню,
что для создания пользователя используется команда adduser, а для И3
менения ero пароля passwd.
# adduser Б /bin/false sаmЬаuзеr
# passwd samba-user'
Первая команда создает ПQЛьзоватеЛя сервера Saтba под именем samba
user. Параметр устанавливает (<оболочку" для этоro пользователя
/bin/ fal Бе. Эта псевдооболочка не позволяет вводить команды, поэтому
всем пользователям, которые не нуждаются в работе из комаllДНОЙ строки,
рекомендуется назначать ее ИЗ соображений безопасности.
Saтba использует свой файл паролей /etc/ samba/smbpasswd. Внем
Bcero три поля: реrнстраuионное имя rlOЛЬЗ0вателя. UID и хеllПlрованный
378
rлаsа 12. РаздеЛGниересурсов: NFS и Samba
пароль. Для добавлеиия пользователя в файл /etc/samba/smbpasswd
и изменения еro пароля Samba использует команду smbpasswd:
# smbpasswd sambauser
Совет: если вы хОТите добавить всех пользователей из файла
ie::c/passwd В файл /etc/samba/smbpasswd, 1'0 ислользуйтедля этоro
следующую команлу:
# СаС /etc/passwd I Inksmbpasswd.sh > /etc/samba!smbpasswd
Не забудьте изменить права доступа к фаЙлу /еtс/sаInЬа!SП1Ьраsswd:
# chmod 600 !etc/samba/smbpasswd
Осталось ТОЛЬКО сделать неБОЛhшие изменеИlIЯ в сеКilИИ [global] файла
коифиrурации /есс/аrnЬ.сопЕ:
security = user
12.2.8. Оптимизация Samba
Ваш SambacepBep медленно работает. и nы уже устали от ПОСТQJЩIIЫХ
жалоб пользователей? Лучшим nыхолом из данной ситуации будет по
купка HOBOro винчестера. Лучше Hcero покупа1Ъ SCSI-ВИflчестер со ско-
ростью 10000 оборотов n минуту. В крайнем случае подойдет IDЕ-диск,
поддерживающий реЖIIМ ATA133 и работающий со скоростью 7200 обо-
ротов 11 минуту. При покупке TaKoro ВИН'1естера обратите внимание на
следующие факторы:
+ ваша материиская плата должна полдерживать режим ATAI33;
+ у вас должен бьnъ специальный ка6епь дм rЮДlUlючении жесткоro
лllCЮl (если матеРIlНСкая плата ПОдДеРЖllвает АТАJОО/1ЗЗ, таКОЙ ка'
бель у IIIIC будет);
. покупайте винчестер с БОльшим объемом кзща: на рынке можно найТИ
несколько моделей винчестеров, различающихси маркировкой, но I!
одном случае вы получаете 2 Мб юша, а во втором 640 Кб (или I
Мб, но все paBflo меньше, чем в более ДОрOl"Ой модели).
Если же lIeHer на покупку такоro винчестера нет, попробуем OlтrИМИЗllрО
вать иаши настройки, Вопервых, установите значение )'cs мя директивы
wide links в файле конфиryрации втЬ. сон f ЭТО должно nOBblclffb про-
rfЗВОДlfТельность сер1lера, если 11 общих каталorах имеЮТС'1 ссылки
Во-вторых, в ДИСТРIIбутинах на ядре 2.4 есть демон bdflush. Он заиимает
си записью буферов, содержащих МОДИфИцироВанные данные фаЙловой
системы, на диск. Настройки по умолчанию Не очень эффективны:
30 64 64 256 500 3000 БО О О
379
UNUX: полное pY'(OBOAOТВQ
Попробуем HeMHoro оптимишровать настройки bdOusb. Для этоro oт
кроЙте файл /etc/sysct1.conf и добавьте в неroCJlедующую строку:
vm.bdflush = 80 500 64 б4 15 БООО 6000 О О
Этим мы товорны демону, чтобы он записывал буферы на диск, котда
буфер кэша файловой системы запOJ!нен на 80 процентов.
После этоro нужно перезапустить сервис network:
# service network restart
Если вам нельзя НИ на секунду останавливать сервис network, вместо MO
дификвuии файла /etc/sysctl.conf введите следующую команду:
# sysctl w vrn_bdflush=«O 500 4 64 15 6000 6000 О О»
Чтобы заставить ваш Samba-сервер работать быстрее, попробуем по-
экспериментировать с кэшированием памяти: мы будем использовать
минимум 60 процентов памяти для кэша.
sysctl ,w vm.buffermem =- «БD 10 ба»
ei iUj&I;!q:IШi
" Последниедsana.раметра (10иGQ),сеЙЧQС не используются.
, Значения по умолчанию tj2 1050-.
12.3. Совместное использование
каталоrов в Linux Mandrake
Конфиryратор dtskdrake.filesbare ПОзволяет' очень быстро настроить
накет Samba дIIЯ разрешения совмecrиоro использования каталоroв (<<рас'
шариваиия» каталоrов). Убедитесь, что запущены сервисы nfs и smb, есJJИ
это не так, запустите их:
# 8ervice nfs start
# service swb start
Запустите конфиrуратор diskdrakc-fileshare (рис. 12.3), выберите опцию
"Разрешить всех пользователей" 11 ножмите Ок.
Если вы выберете ОПЦИЮ «Выборочио», то разделять каталоrи смотут
только пользователи, входящие в rpynпу fi leshare.
Как только вы разрешите совместное использование каталоrов, пользо'
ватели смотут расшарить их в св,!ем файловом менеджере. Например, в
Konqueror дIIЯ растаривания каталоrа нужно щелкиуть на нем праlЮЙ
кнопкоЙ мыши и выбрать пункт меню Share.
380
rлвва 12. Разделение ресурсов: NFS и Samba
тите разрешить ПОnЬЗОВ8телt:lМ оовмеспю использовать меко"орые CBQ\.t
дире!(,ТОРИI>I? Это nОЭВОJ1ИТ пОnЬЭ:Dеатеnc:lМ npoc.тQ наже,ь НС\ -СоОмеСТti.Ое
I1CnDtltJэовниа' в !r,onqus(o( и na.ulilus
И8ыборочtolQ" разрешит настроить достyn or дельным поntэоеатеnям
'::::::Z:::::7:i\аНМя"
Рис. 12.3. Конфиryратор diskdrake-fi/eshare
12.4. Проrрамма LinNeighborhood
правильный выбор
Доступ к совместно используемым ресурсам осуществляется с помощью
проrрамм smbclient и smbmount. Как их использовать, вы уже знаете. Не
очень удобно, не правда ли? KOHe'lHO, если вы работаете в текстовом ре'
жиме И система Х Window у вас не устаиомена, 1'0 lIpyroro выхода у вас
lIеТ. Но если у вас установлеиа l'рафИ'lеская среда, 1'0 бороздить просторы
сети Мiсrоsoftrораздо прияrnее с помощью протраммы LinNeighborh<>od
(Сетевое окружение Linux).
Установите nporpaMMY LinNeighborhood (пакет и команда для запуска
lIазываются так же). Запус'ште ее и наслаждаЙтесь!
В верхней 'ШСТИ окна отображаются все узлы в Сети, а в нижнеЙ под'
КЛЮ'lеl1Ные в данныЙ момент общие ресурсы.
Вы видите, 'Л'() в сети находятся двс машины. Первая это контроллер до'
мена server.dhsilabs.com, а вторая это моя мащИна деп. dhsi labs. сот.
Ресурс pubIi в данный момент ПОДКlIЮ'lСН к каталоrу /hоmе/dепis/mпt I
server. dl1si laJ)s . com/publ i с. С этим каталоrом можно работать как
с обыкновенным каталоrом локальной фаЙловой системы.
Чтобы ПОДКЛЮЧIПЬ ресурс, пьrделнте el'o и на жмите кнопку Подключить
нли дважды щелкните на нужном вам ресурсе. Появптся окно Дизлоr
lIодключения, в котором нужно указать необходимые Ilараметры под'
КЛЮ'lеНlIЯ.
381
UNUX: полное руководство
ФаКл
РедакrирсВatb ОПЦИИ
помоЩЬ:
"..'"
. lliI1Jjеl!jll1J(JrlЮ(Jlf
.. server,dhsifabs,com
1\\ ADMJN.
I\\hom..
I\\pri"tt
ч!iРUЫJС
I\\lmp
!ii Сало"
. den.dtJsllab.$,com
Комментари
AL ТDOMAIN
'РС Setvlce (5атЬа server оn
Ноте DireCloryfOr 'nObO<1y'
PubIlc StU1Y lhameldenislmn1lS8f\1er.dhsIJebs.caтfpU!3llc/'
Temporary IIle .расе
Ресурс
I/зе(l/еrljhstа.Ь$,СlJmI иЫ с
Подключение-.
Ihame/den slmrdlsarver.dhsllabs,com ub!icl
'"",О'...-"'""М'..
'. '.1;ii.'i:;i;';,,'"'''' ;"
,'..".",' ,о."
1 ..
"":'''':,':'-:4;;"".,::'''''
"';';'0:'"
о Ol!ьeкr(oo)
,.:';..
Лоr ацnюч,ек-
Рис. 12.4. проrpaммз UпNeighborhood
Кнопка Добавит. позволяет добавить машину, которую вы 'IaСТО НС.
пользуете. Совсем необязательно, чтобы машина находилась в одной с
вами рабочей rpynne.
Нажав на КНОП!СУ Настройки, вы MOJl!:eTe опредетпь параметры про.
rpaMMbI, но предлаraемые параметры вполне ПРlfемлемы для. БОЛЬШlfнства
пользователей. Единственное, что нужно указать, так это имя рабочей
rpулпы.
Для поиска компьютера в доcтymlОЙ сети MOJl!:HO нспользовать команду
меню Опции Просмотреть .сюсеть.
382
rлава 13
D N S .......
СЛУЖБА ИМЕН
ВВЕДЕНИЕ В DNS
НАСТРОЙКА КЛИЕНТА DNS
НАСТРОЙКА СЕРВЕРА DNS
КЭШИРУЮЩИЙ СЕРВЕР DNS
ВТОРИЧНЫЙ СЕРВЕР DNS
ПРОСМОТР DNS,ЗОНЫ.
УТИЛИТА NSLOOKUP
ОПТИМИЗАЦИЯ НАСТРОЕК
СЕРВЕРА DNS
ЗАЩИТА СЕРВЕРА DNS
ИСПОЛЬЗОВАНИЕЛОДПИСЕЙ
ТРАНЗАКЦИЙ. МЕХАНизм TSIG
LINUX ПОЛНОЕ РУКОВОДСТВО
1 з. 1. Введение в DNS
Перед началом цаС1'РОЙКII DNS-с;ерщ:ра давайте разберемся, каК он
работает. ПространС1'ВО Имеll DNS это иерархическая древовидная
структура доменов. Корень дерева доменов обозначается <и'. Под ним
находятся домены BepXHero уровня. Наlfболее 1'311естиые из НИХ "ы зна-
ете: сош. gov, net, org И Т.п. ВыделеlШем ИМен ДОменОВ oepxнero уровня
занимается ICANN Intemational Corporation for Assigned Names and
Numbers. Администрация доме»а реrИСТрируеТ домены сле!l.ующеrо
урозня и так далее.
Всемирная система доменных ИМеН представляет собой распределенную
базу данных. Каждый компьютер, подключенный к сети, является клиен-
том этоЙ базы, а некоторые компЫотеры серllерамИ.
Допустим, пШlЬЗОIl3WЛЬ вводиrв окнесбраузера адрес: http://www.yahoo.com.
Чтобы установить соединение с КОМпьютером www.yaI100.com. компью-
теру пользоваwля необходимозиатЬ'eJ;'О Jp-aдpec" поэтому операционная
система ПOJ!ЪЗ0вателя пытаетразl'CШИТЬ (Перезестн) имя компьютера
в IP-аАрес, С этой целью она обращается К серверу DNS. Сервер DNS
сначала пытается разрешить имя AaHHOro компьютера. используя свой
собственныЙ кэш имен. Если требуемое имя компьютера в нем oтcyтcтuy-
ет, то сервер DNS должен получить еЮ у Apyroro сервера DNS, поэтому
база данных DNS и называется распределенной.
Сначала псрвичный ссрвср обращается К одному ИЗ КОрНСВЫХ сервсров,
список IР-адресов которых находится в ero конфиrурационных фаЙлах
(конкретно, в файле паmеd. са). Далее запрос обрабатывается peKYP
сивно: корневой сервер знает имена и IPaдpeca официальных серВероВ
DNS всех доменов oтoporo уровня и переllаправляет запрос к серверу,
который ОТJlечает за домен сот, а тот, в свою очередь, к серзеру DNS
домена уаhОО,С{)ПI.
Сервер DNS ДОМена уаЬоо.сот 110звращает IРадрескомnъютера www
64.58.76.222 или все адреса, которые сопоставлены этому имени (мноrllе
384
rлава 1 З. DNS служба имен
сетевые операциониые системы, в том числе и ипц позволяют одному
IIмени сопоставлять несколько IP-адресов).
На саМОМ ДеЛе, если выполнить разрешение имени WWW . уаЬо{) . сот, то сервер
DNS возвpan,т следующие ЕЩРВ"'"
64.58,76.222
64.58.76.228
64.58.76.223
64.58.76.176
64.58.76.224
64.58.76.177
64.58,76.227
64.56.76.179.
А офищ...альное, ми ка"оническов.Iof-М J(омпыuтера WМY. yвhoo.com ,www.yahoo.
аkadпs.пеt.
13.2. Настройка клиента DNS
Разрешение иыен на стороне DNS-клиента выполняет модуль распозна-
вания (резолвер). В ОС Linux он представляет собой набор библио-
течных функщrй. КОИфlU'урационным файлоы распозианателя служит
/etc/resolv.conf, содержащий СРИСОК DNS-сернеров (от 1 до 3), ко--
торым МОЖIIо посылать зарросы:
search subdomain.dornain.com domain.com
nameserVer 127. О. 0.1 сервер ПО умолчцнию
; на локальном компьютере
nameserver 81.3.165.35; запасно у провайдера
Диреlcrива search используется для "риска Kpмцыотраa н ТРм слу'Ще, если
указано только имя узла без доыена. Например, если вы введете в окне
броузера http://host, то сначала будет выполнена попытка обращения к
узлу host.subdomain.domain.com, а Ротоы, если узел не будет наЙден, к
у.злу host.domain.com.
КоммеЦТllриев в файле resol v . соп f не полаrается: рроизвольный текст
ыожцо вписывать только в строки с директивами nameserver росле Ip.
адреса.
Кроме сервера имен, Функиии распознавателя MorYT просматри'
8ать и друrие источники данных: файл /etc/hosts, СУБД NIS и
".п. Порядок Рросмотра определен В файле переключсния служб
/etc/nsswitch.conf:
hosts: fi1es dns
в ,tllI,JtlS
385
UNUX: полное РУКОВОДСТВО
13.3. НастроЙка сервера DNS
Локалыl3Я сеть с IIЫХОДОМ в Интернет может ПОЛЬЗОllатъся cepllepoM
имен, работающим на компьютере провайдера. Но, учитывая типичную
для бывшеrо СССР скорость соединения, при которой на обращение
к серверу DNS провайдера требуется от 10 до 30 секунд, имеет смысл
установить собственный сервер DNS обычно на шлюзе, который ис-
пользуется для выхода вИнтернет.
Внутренняя сеть (intranet) может обойтись и файлами /etc/llOsts, но при
большом количестве узлов целесообразно завести DNScepBep и для нее.
Самый щвестнь\й сервер имен для Linux зто демо» named из пакета
ВlND (Berkeley Internet Name Daemon). Вам понадобится установить еще
пакет bind-libs с необходимыми библиотеками и bindutils, содержащий
утилиты командной строки (dig, host, пslооkuр).
Существуют три версии пакета BIND: 4, 8 и 9 (версий 5-7 никоrда не
было). Сей'шс везде используется девятая версия, о которой я и буду
рассказьшать.
Для установки девятой версии BIND требуются;
. ялро2.4 или щще;
. библиотека QpenSLL.
Для работы сервера должен быть активизирован сервис network.
ОСIIОВНЫМ конфиryращюнным файлом named служит han\<d. conf, КDТорый
устанавливается по умолчанию 11 /etc )!ля вер!:I!И 9 или в /etc/namedb
(версия 8). СИlrrаксис этою файла подобен языку С (листинr 13.1).
Листинr 13.1. Примерный файл паmеd.сопf
logging (
category Спаmе {hull; },
J;
optiO!lS t
directory "/vаr/пашеd Н :
J;
zone Н." (
type hint;
fi1 ппаmеd.са"'i
);
zопе "dh.silabs .com/J {
386
rлава 1 З. DNS служба имен
ёуре roas ter ;
fi1e Hdhsi1abs.com H ;
поёНу по;
};
zone «O.O.127.inaddr.arpa"
type IIlaster:
f11e "narned.1ocal";
};
20пе '1.16B.192.inaddr.arpa"
t.ype master;
fi1e "192.168.1";
!10ёНУ уеэ;
};
Рассмотрим этот пример подробнее. Обслуживаемая сервером зона (дo
мен без поддоменов ) dhsilabs.com. Рабочнй каталоr сервера, от которо-
ro отсчитызютсяя относительные пути файлов, Ivar /naroed. Именно в
этом каталоrе сервер будет искать файлы dhsilabs. сот, r,aroed.local,
192.168.1, named.ca.
Блок logging определяет опции протоколироваfll1Я. За Ним сдедует за-
дание параметров самоro сервера блок options. Параметр directory
определяет рабочий каталоr сервера. Этот параметр обязателен, но кроме
Iler'o в блоке орtiопs Moryт присутствовать и друrие (forwarders, forward
11 1'.п.), о которых будет сказано несколько позже.
После блока параметров должны быть перечислены зоны, обслуживаемые
серпером. мы будем обслуживать зону dhsilabs.com. Информация об этой
зонехрaJШfC>rВ файле IvаЦщmеd/dJ1Si lаЬв. соrn, с помощью KOТOporo
наШ сервер будет преобразовыва1'Ь имена КОМnЬЮ'i'еров BТPaдpeca. Дпя
обратноrо преобраЗОllания служит файл /var Inaroed/192 .16 В.1 .
30НЫ «." и «O.0.127.in-addr.arpa" особые. Я не буду их подробно опи-
сывать: их назначение вы поймете нз дальнейшеrо текста rлавы. Файл
паmеd .10саl это файл обраТIIОro соответствия, предназначенный для
rtреобразования IP-адресов в имена, то есть, в частности, он используется
для преобразооанил адреса 127.0.0.1 в имя loca1host.
Файл named. са содержит набор lP-аJIресов корневых DNS-серверов.
При разрешении имени в IP-aдpec или наоборот ПОЛУ'lенная информация
кэшируется 11 остается в памяти сервера определенное время. В дaJIыей--
шем, еCJШ нужно разрешить имя В IP-aдpec или наоборот, ваш DNSpBep
СНЗ'lала будет искать необходимую ему I!нфОРМщ!'I!Ю в кэше. Если ее там
lIе окажется, то сервер обратится к одному из корневых серверов DNS.
387
LINUX: полное рУКОВОДCПIо
ФаЙл named. са неоБХQlЩМО реrулярно обновлять, чтобы ОН Bcerдa со.
держш! свежие даиные (первый раз ero нужно оБНОIJИТЬ сразу же по-
сле установки сервера, несмотря на то, что этот файл будет только что
создан). Если ваш DNS-сервер преД}l3значен для обслуживания только
внутренней сети без выхода в Иитернет, то зону KOpHelJblX ceplJepOB
нужно удалить.
ФаЙл данных сервера имен dhsi1abs. сош непосредственно CJlужит ДЛЯ
преобразования имен в IР-адреса (ЛИС1'Инr 13.2).
Записи в этом файле называются записями ресурсов. Формат записи
ресурса следующий:
r ИМЯJомена 1 [TTL J <'1'ипсети> <тил.записи> <данные>
[де:
+ Имядомеll8 обязательно для первоЙ записи 8 файле, оно 8сеrда
должно начинаться с первой KOJ/OHKH. для следующllX записей это
поле можно опускать. С;ишол.@ обозиачает текущllЙ домен.
+ Необязательное поле тrL (Time 10 иуе) это время в секуцдах,
в течение которою данные н кэше сч,rrаются достонерными. Если
значение не указано, то оно берется из записи SOA (см. ниже).
. ТипсеТII может содержать значение IN (Jntеrпеt) или HS (lIнформа-
циоинаи с,-ryжба Hesiod).
+ Тип записи: типы записи ресурсов l1риведены в таБJ1ице 13.1. Осталъ
НЫе Поля Данных ЗaRlIСIП' ОТ ТlIЩI заПIIС!! ресурса.
Пустые строк!! и строки. нач:инающиеся с точки с запятой, считаются
комментариями.
Листинr 13.2. Файл dhsilab$.com
@ INSOA dеп.dhsi1аЬs.сощ. h05tma5ter.dhsilabs.com.
93011120 I серийный номер
10600 ; обновпение каждые 3 часа
3600 повтор каждый час
3600000 ; хранить информацию 1000 ЧасоВ
86400 I ; nI., записи 24 часа
IN NS dеп.dr15i1аЬ5.сош.
1М А 192.168.1.1
IN МХ 150 den. d),silabs. сот.
dеп
IN
IN
IN
IN А
HINFO
КХ 100
!4Х 150
192.168.1.1
INTEl, CELERON ILINliX)
den
evg .drlsilabs. com,
388
rJ1aBa 1 З. DNS служба имен
n!::
IN CNAМE
IN CNAМE
IN CNAМE
IN CNAМE
den.dhsilabs.com.
den.dhsilabs.com.
den.dhsilabs.com.
den.dhsi1abs.com.
www
ftp
таН
evg
IN
IN А
их 100
192.168.1.2
den . ООЭ i 1 ar)s . сош.
localhost IN А 127. О . 0.1
Tl'ln записи SOA (51О" о[ AиthDriry) означает начало зоны. для каждой
зоны такая запись еДl'IнствеlUlа и должна стоять первой по порядку. Она
содержит имя зоны, почТовый адрес ее адМИlшстратора (rAe знак @ за.
менен на «.») И параметры обномения данных. Круrлые скоБЮI служат
для разбиения одной заПИСJ! на lIесколько строк.
Имя домена может БЫТh сокращенным или полным. ПОЛНОСТhЮ опреде
денные имена закаНЧИ8аются символом точки. Если точки нет, 'То имя счи.
тается сокращенным и к нему автоматически добавляется имя текущеrо
доменfj.:Щ, den .dhsilabs . соln без точки будет интерпретировано как
d,ш. dhsilab&. сот. dhsilabs . СИm. Не делаi!теэroй расщХ)страненной
ОШI!бки, не забывайте ставить точку после име,ш домеllа.
СерИЙIIЫЙ номер это число, на которое ориеJj'ТИРУЮТСЯ подчиненные
серверы, перезапрашивая данные у rлавноrо сервера зоны в том случае,
еСлИ ero серийный lIомер боЛhше, чем у них. Обычно номер представляет
собой дату последнеrо изменения файла данных зоны.
Типы з.апйси ресурсое
Таблица 13. t
3anис.. Назн8чеима
50';' Нa"l8J10 ПОJ1НОМ()ЧИЙ опредe.nение DNSЗDНЫ
NS ОПРiQДЛ8НИ с:е-раера имен
Д IP-aдp@c (r4j. соответС'I'DyЮЩии иlJ&нИ- «Qмnыоt-ора. Дnй IP11'6$Дpeco8
МСПОЛЬ3Уi3fCft ТИП А6
РТА 06pswoo ПРQI)Орз,щааНИ8: ИМQ; kOMnblO1epa. СООТВQ1l:;Т8'11!QЩЩt IРJЩPесv
МХ M&il еХсhапg:е: почтовыЙ сереер, Qб'СЛУЖИВ3.lOЩИЦ.МQН, Мохно Перачиtлиn.
HeCII;OJ1bICO nCNTO(\bf)t сераеров. указаfl nрИ(1)итет: '4еМ меьше ЧИi;ЛQ. тем nJ»'l-
ОрИТеr выше
CNAМE l(al;;оничеct<ое ИМЯ уэ.ле. к w:oropoMy преоер83)11О'ТСЯ псевдонимы: так, по адресу
t'lttp:1 ,Лw.rw.dhsllвЬs, сот обращение tjудет прОи:;tеоди'tьС 1( dвп,dhsi1аЬ$,Сom
ИНформвций Q;б,узлв: Оl"1ерзl.I,ИОННОЙ СИСТ6М8;И_ CII1 "_lWатн,ОМ обесnечtt+lии,
HINFO ?е1(ОМЕн.jду.оtlе$ЭnQJ1t+Я"_Ьо iry Sanись ИЛИ ИCfЮпЬЗQQ81Ъ 38ВеДОМО''Нр-иn:Ыtbl'
ААННЫе. ЧеммеНliiща .I4НфоРМСЩИИ о вашей с:етКлQWТ Э1\ОУМЫШ.rteI1НИК; тем
t;t.lO)I(И88 ему БУД(,:!1 аtЭI(I;щаft> 00
тхт ЛPt3'4З60nЬ-НЫЙ текс1' 'Комментарии или Hecтaн.дap,a$l информ8ЦhЯ
389
UNUX: полное руководство
Содержание файлов обратноro npеобразования, устанавливающи.х соот-
ветствие между IР-адресами и именами при помощи записей типа PTR,
приведеlЮ в ЛlIстинrах 13.3 и 13.4. ВНlIманне! IР-адреса указываются в
обратном порядке: 2.1.168.1 92. Если указан неполныi:\ IP, например, 1, то
к нему будет добавлен ал:рес под сети 1.168.192.
Листинr 13.3. Файл named.local
@ IN ВОА dhsi1abs.com. root. Qsi1abs.com.
199609203 ;серийный номер
28800 ;обновление каждые 8 часов
7200 ;повтор КаЖДЫе 2 часа
604800 ;хранитЬ информацию 168 часов (1 неДелю)
86400 I ;TTL записи. 24 часа
NS ООВ i la-bs . соrп .
1 PTR localhost.
Листинr 13.4, Файл 192.168.1
@ IN SOA den .dhsi la.bs. coтn. hostmaster. dhsilabs. com.
93011120 ; серийный номер
10800 обновление каждые } часа
3600 повтор каждый час
3600000 хранить информацию 1000 часов
86400 ) ; TTL запиСИ. 24 часа
@ IN NS dеn.dhsilеФs.соm
1 .lN PTR den. dhsilabs. СOfа
2.1.168.192 IN РТА evg.dhsilabs.com
1 3.3.1.. Обновление KopHeBoro кэwа
Если вы настраиваете сервер DNS только для своей внутренней сети, ко-
торая не имеет выхода в ИlIтернет, то не спешите обновЛять файл кэша!
Он вам вообще не нужен. Вы также должны удалить зону, описывающую
корневой кэш в файле nаЛ1еd. conf.
Обычно файл named. Са содерЖIIТ примерно такую нвформацию:
Листинr 13.5. Файл корневых серверов
6О IN NS
6О IN NS
6О IN NS
6D IN NS
O.ROOTSERVERS.NET.
J.ROOTSERVERS.NET.
К. ROOTSEH'\lE[{S. NE'T'.
L.f{OOTSERVERS.NET.
390
Fлава 1 З. DNS служба имен
БD lN NS
6D INNS
6D IN NS
6D IN NS
6)) IN ЫЗ
6D lN NS
6О IN ЫЗ
6D IN NS
6О IN NS
M.ROOTSERVERS.NET.
A.ROOTSERVERS.NET.
H.ROOTSERVERS.NET.
B.ROOTSERVERS.NET.
C.RooTSERVERS.NET.
D.ROOTSERVERS.NET.
E.ROOTSERVERS.NET.
I.ROOTSERVERS.NET.
F.ROOTSERVERS.NET.
.. ADDITIONAL SECTI0N:
G.ROOTSERVERS.NET.
,1. ROOTSERVERS. ЫЕТ.
K.ROOTSERVERS.NET.
1,. RООТS!ЩVЕRS .NET.
М.ЕООТЗЕНVБНВ.ЫЕТ.
A.ROOTSERVERS.NET.
H.ROOTSERVERS.NET.
B.ROOTSERVERS.NET.
C.ROOTSERVERS.NET.
[). ROOT SERVERS . NET.
E.ROOTSERVERS.NET.
I.ROOTSERVERS.NET.
F.ROOTSERVERS.NET.
5w6d16h IN А
5w6d16h IN А
5w6d16h ,Ы А
5w6d16h IN А
5w6d16h IN А
5w6d16h IN А
5w6d16h IN А
5w6d16h IN А
5w6d16h IN А
5w6d16h IN А
5w6d16h IN А
5w6d16h IN А
5wбd16h IN А
192.112.36.4
198.41.0.10
193.0.14.129
198.32.64.12
202.12.27.33
198.41.0.4
128.63.2.53
128.9.0.107
192.33.4.12
128.8.10.90
192.203.230.10
192.36.148.17
192.5.5.241
Для установки. файла KopHeBoro кэша следует устаНО!lИТЬ пакет
сасЫпg"шimеsеrvеr, но я.рекомендую получить и установить Самую новую
оерсИJ(). Для этоro ПОДКЛЮЧJlтесь к Интернету, заnyстите сервер DNS, а
'!атем выполните команду
1; ns100kup i tee пз
В ответ на приrлащение утилиты пslооkuр ввеДJlте две команды:
> set q=ns (или set type=ns)
> .
На экране вы yDllДJlTe сrшсок корневых серверов DNS, который будет по-
мешен в файл ns. Для прео6разования файла ns в формат пащеd. са ВОС-
пользуйтесь следуюшим аwk-спенарием (ЛИCТJIиr 13.6), вызвав ero так:
# reformat пs named.ca
Л"СТИНТ 13.6. Сценарий rеfоrтзt
#! jbin/ awk
awk ' BEGIN (
/root/ ( print" IN NS " $4"." )
linternet/ { print $1"." " 999999 IN А" $5 }
END I
391
UNUX: попное РУ;:ОВОI\СТВО
Теперь осталось скопировать n amed . са в каталоr I var I патед, и на
этом все.
Можно обновить корневой кэш и проще, ВОСПOlIЪЭOваJШDIСЪ утилитой щ:
#- dig @а. t"oot serve:r-s с пet. . пэ > named. са new
ИЛИ
# dig @198.41.0.4 . пв > named.ca.new
После этоrо остается только заменить старый файл named. са новым
файлом Ilатед. са. new.
13.4. КЭШИРУIQЩИИ сервер DNS
Кажлую зону обслуживает один rлщщый сервер имен, хранящий ОфJЩи
альную КOf!ИЮ даивых о зоне. ОИ иa:sывается «авторитеrnым», потому что
ero ответ точный и окончательный. В ЗОНе может быть также сколько
yrO.iIHO КЭШИРУЮщИХ серверов, у KQТopыx собственных данных нет: они
наКаплипают данные, кзшируя ОТВer/>l на спои Запросы. Ответ КЭШIIРУЮ
щеrо сервера неавторитетен, зато быстр. Обычио ОИII используются для
уменьшения DNS-трафика во виутренней сети.
Если собственною домена у вас нет, то llМel'1' смысл возложить обработку
DNSзапросов иа провайдера, создаll у себя КЭ!ШIрующий DNS"epвep.
Вместо Toro, чтобы запрашивать п()следовательно несколько удаленных
корневых серверов, он будет отсылать в Сеть толы<;о OДllli запрос на раз
решение иМени (DNScepBepy провai1дера) и получать только OДI'R OKOH
чательны!i ответ. Это особенно полезно, если у вас rтoxoe соединение
с Интернетом.
13.4.1. Настройка кэширования на DNScepBepe
Для Toro, чтобы насладиться такой ВОЗМОЖНОСТЬЮ, следует в блок options
файла nanled. conf добавить сле)1ylOщие параметры:
forward first;
fоrиаrdе.rs t
81.3.165.35;
81.3.150.2:
);
ДиреК1'ива forwarders задает заключенный в фl1ryрные скобки список
IРадреСО1\ DNScepllepon, которым паш DNS.cepnep будет перездресо
BbIJJarb запросы вместо Toro, чтобы отвечать на них самому. IPaдpeca
перечисляются через точку с запятой.
392
rлава 1 З. DNS служба имен
Директива forward может ПРИffill>laТЬ одно из двух следующих значеmlЙ:
· o"ly ваш DNScepBep никоrда не должен предпринимать попыток
обработать запрос самостоятельно;
. first ваш DNScepBep должен пытаться сам обработать запрос,
если YKa:J3HlibIe далее параметром fonvarders сервера DNS не были
найдены.
Без директивы forwarders директива fonvard не имеет смысла.
Таким образом, возвращаясь к наo:rpоЙке сервера, весь файл named. соп f
будет выrлядеть так:
Листинr 13.7. Файл named.conf кэширующеrо сервера DNS
options {
directory "/var/named";
forward first;
forwarders {
Вl.3, 165. 35;
Вl.3.150.2;
];
/1 Раскомментируйте спедуюшую строку, если брандмауэр
/1 мешает работе службы DNS
/ / querysotlr'ce port 53;
};
zone "." (
type hint;
file "named.ca";
};
zone "O.O.127.inaddr.arpa"
type slave;
file named.local ;
};
Обратите внимание, что в этом примере уже Не поддерживается зона
dhsilabs.com.
13.4.2. Возможные проблемы и их решение
Как правило, кэширующий сервер запускается на отдельном компьютере,
который подключается 11. Интернеry по коммутируемому соединению.
Нужно учитывать, что сервер DNS сразу требует обращения к KaKO
МУН/lбудь сетевому ресурсу. В нашем же случае, если соединение не
39З
UNUX: полное рУКОВОДСТВО
установлено, то устройство рррО существовать не будет, а паmед будет
страшно руrаться на то, что сеть недоступна. При этом недоступным
окажется даЖе интерфеЙс 10, а nporpaMMa nslookup, если она нам по-
надобится без существования сети, просто «подвисиет», ожидая ответа
от сервера DNS.
Есть два способа решить данную проблему. КакоЙ ИСПОJlьзовать это
решать вам. ПервыllЗЗXJlJOчается в том, чтобы запускать сервер DNS по-
сле установления РРР-соединения и останавливать перед cro разрывом.
Для управления демоном named служит утилита rndc (ndc в ВIND 8). Ее
можно использовать с параметраМIf start, stop, reJoad (itереrрузить фаЙлы
данных зоны, есlIИ в IШХ IIрОИЗОШ!lИ изменения), restart. Команду r!1dc
start следует ВlЩIOчить в сЦtЩlIРЦЙ установлеЩlЯ PPP-соединеНЩJ., а
команду rndc stop в спенарий разрыва.
Второй способ состоит в том, чтобы при постоянно работающем сервере
DNS подмен ять файл KopHeBoro кэша naIned.ca. В отсутствие РРР-со-
единения 110 этому имени находится пустой файл, а сценариЙ установки
соединения содержит команду, КО1шрующую на ero место НОРМ3J1ьный
файл кэша !lamed. са. ррр-оп. При использовании этоrо способа D lIашlfX
протоколах (журн3J1ах) будут реryлярно появляться сообшения примерно
TaKoro содержания:
Jan 516:10:11 den naтed[1014'1]: No root 11aтeserver for cla.ss IN
Для ПОЛНOThI картины хочу отметить, 'по, если при использовании DNS у
IШС возникают проблемы с монтированием удаленных фаЙловых систем,
запускаЙте сервер паmед после запуска nfsd и mountd.
13.5. Вторичный сервер DNS
Вы коrда-нибудь обращали внимание, что у любоrо уважающеrо себя
провайдера есть два сервера DNS перви'1НЫЙ (primary или mas\er) и
вторичный (secondary или slave)? ВторичныЙ сервер кот!рует данные о
ЗОl1е С перВllЧНОro. Эта операция называется зощюй пересылкоЙ. В любоЙ
зоне должен быть хотя бы одlШ вторичныЙ сервер на ТОТ случаи, если с
первичным сервером что-нибудь случилось или 01-1 просто НС В состоянии
обработать БОJlьwое количество запросов клиентов. Получив откю от
первичноrо сервера, система разрешения имен обращается к вторичному.
Для повышения надежности работы службы имеl1 желательно включать
8ТОРИЧНЫЙ сервер в друrую сеть и в ДРУl'УЮ цепь питания.
Для вторичноrо сервера DNS, обслуживающеrо домен dhsilabs.com, сек-
ция зоны в файле named. СО" f будет выrлЯдСТЬ так:
394
rлава 13. DNS служба имен
zone . dhsilabs.com" (
type slave;
file silabs.com;
masters ( 192.168.1.1; 192.168.1.2; );
};
'Р-адреса основных серверов DNS вашеЙ сеш указываются в директиве
masters через точку с запятой. ВторичныЙ сервер, в отли'ше от кзширу-
ющеrо, всеrда должен иметь тип slave.
13.6. Просмотр DNSзоны. Утилита nslookup
УТИЛl!Та nslookup, служащая ДЛЯ просмотра информации о зоне (домене),
входит в пакет bindut ils и в популярных дистрибутивах устанавлива-
C"fся по умолчанию. Она есть ':t:акже в Windows NТ/2000/XP.
Зоны бывают разные, одни содержат rшформаЩIЮ о компьютерах в до-
мене и сдужат для nреобразования имею, компьютера в 'Р-адрес и на-
оборот, друrие содержат rrnформацuю о корневых серверах зона «.".
Последняя зона относится к типу hint подсквзка. Зоны для разрешения
имен обычно имеют тип master (rдавный). а зоны втори<rных серверов от-
носятся к типу slave (подчиненный). Обычно просмотр зоны разрешается
только определенным. доверенным узлам. Итак, запустнте nslookup:
# паlоокир
Default server: ns4.obit.ru
Address: 81.З.16S.З5
>
Для Toro, чтобы получить информацию ОТ сервера, нужно BBeCnI в строку
ПРllrлашеШIЯ ТIIП запроса: set q<'r>!П> (или set tуре=<'rИП». Типы
запросов пере<lIIслены в таблице 13.2.
Типы запросов
Таблица r3.2
Тип О"ме.внttФ
60. Начало f1{)пномоий
. ПрвобраЭО8аие имеНо.1l!1lр.адрес )'3118
""". Отобра;«ИQ IM-aдpeca узла
П$ OtD6ражение информации о сеРl3ере DN$
р" Прво6раЭОВ8ние IP-Mpec.a 8 ИМЯ \tзna
wks Распрострэ..,енные службы
hinfo ИФормаЦj,iq об annnpa:rHOM обеспечении узла
mx ИнформаЦИА о IlОЧТОВЫ серверах домена
"" О';ображение записи общеrо назначения
сnaте ОтQбраже..е КiЖФtИЧlaскоrQ имени
апу 0r06рв.жвlolив l1Ce}C; peC:Hk.!X 3i1циt9Й
395
UNUX, полное Pjlj(o0ДCТв9
Теперь рассмотрим HeclOOJlЬКO практических примеров. Допустим, вызна
ете имя узла www.server.com. ДаваЙте посмотрим, какая информация
будет выведена при указании Тltnа any:
>set q=any
>server.com
Server: myserver.domain.com
Address: 127.0.0.1
Nonauthoritative answer:
server'. сот nameserver " сощр1. еесуе! . сот
server. сот namese,rver ": сотр2. st'-)rver . сот
server.com nameserver =СQmрЗ.sеrvеr.соm
Authoritative answers сап Ье found from:
server.com патезесуес comp1.server.com
server.com nameserver СQЩР2.sеrvеr.соrn
server. com namesrver ;;: comp3. server . с()т
comp1.server.Com lnterllet; ац<;irеss " 323.111.200.1
comp2.server.com internE!t a<'!dress = 323.111.200.2
сотр3 . server .сот iпtе.rпеtа<JДrеss = 323.555.200.3
А сейчас посмотрим IшформанlllQ о ДРУI'ИХ узлах в эroй сети:
>ls server.com.
[соп\р2 . server. сот]
server.com. 323.111.200.2
server . сош. server с.отрl. server. саш
server.com. server = comp2.server.com
serVeY.carn. server comp3.server.com
mai1323.111.200.17
go1d 323.111.200.22
www.ie 323.111.200.11
jersild 323.111.200.25
сотр1 323.111.200.1
сотр3 323.111.200.3
parasit3 323.111.200.20
www.press 323.111.200.30
сотр1 323.111.200.1
www 323.111.200.2
Но ответ Mor быть и: таким:
[server.com]
Сап'!; list domain server.com: Query refused
Чтобы разрешить передачу щцы определенным узлам (а, щачит, заnpе
тить всем остальцым), 11 файле конфиryрацИIl DNScepBepa ПРЮdеняется
директива allowtran$rer. В следующем примере трансфер ЗОНЫ разрещен
396
rлава 13. DNS служба имен
узлам 10.1.1.1 и 10.1.2.1, то есть все остальные узлы н ответ на запрос
n5]00kup ]5 получат ответ "Query refused»:
options (
al1owtransfer
10.1.1.1;
10.1.2.1;
);
};
Вторичный сервер DNS не перелает никакой информацни о зоие, поэто-
му обязательно укажите следующую строку в е1'0 фаЙле коифиrурации
(в секции орНоns):
allowtransfer ( попе, )
13.7. Оптимизация настроек сервера DNS
Как любой хороший администратор, вы хотите, чтобы ваш сервер DNS
быстро обслуживал запросы клиентов. Но к вашему серверу Moryт 1I0k
ключаТЬСIl пользователи не 113 "ашей сетн. а, нan:ример, ltз сети конку.
рирующеrо провайлера. Тоrда "аш сервер будет обслуживать «чужих»
клиентов. Непорялок! Директива allow-query позволяет указать адреса
УJЛОВ И сетей, которым МОЖНО Исrrользовать наш сервер DNS:
allowquery ( 192.168.1.0/24, 1ocalhost; };
В даlШОМ примере мы ПЩВОJlяем использовать нащ сеРВеР узлам из сети
192.168.1.0 и узлу 1ocalho!';t. Целесообразно разрешить рекурсивные
запросы только 113 сети 192.168.1.0 и узлу 1 осаН\ОБ t:
a11owrecursion { 192.168.1.0/24; 1oca1host; };
Обычно ВЗлОМ любой сети начинается со сбора Iшформацни о cтpYK
туре сети, об установленном nporpaMM!fOM обеспечении 11 ero Версиях и
т.п. Мы можем заставить сервер DNS не сообщать номер своей версии,
а выдавать ПрОИЗDольное сообщение:
version "Made in USSR";
Все перечисленные директивы должны быть указаны в секции options
файла конфиryрации /etc/ f1arned. соn f:
options {
allowquery ( 192.168.1. О /24; 10ca1host, );
a11owrecursion ( 192.168.1.0/24; loca1host; );
allowtransfer ( 10.1.1.1; 10.1.2.1; );
version "Маде in USSR",
}
397
.
UNUX: полное руковод<;тво
13.8. Защита сервера DNS
13.8.1. Настройка и запуск DNS-сервера
в сhroоt-окружении
Из соображений безопасности рекомендуется запускать все сетевые
сервисы в так называемом С!lrооtокружеtJИИ (chaпge 700/). Это файло
вая система, повторяющая структуру корневой файловой системы, но
содержащая только те файлы, которые необходимы для запуска. нашеrо
ceTeBorO сервиса. Взломав сетевоЙ cepBltC и ПОЛУЧИII доступ к корнеl!O!!
файловой системе, злоумыпшенннк не сможет повредить всей снстеме в
целом, поскол!>ку он получнт доступ: только К фаitлам данноrо сервнса. Не--
которые сетевые службы не мосут работать в сhrооt'окруженин. BIND
может, I! сейчас я п:окажу, как это орrанизовать.
Не нужно создава'IЪ отдеЛЫlЬiЙ раздел на ДИСке ДДЯ каждоrо сете80СО
сервиса: нужно только создать каталоr, например, root dns, в который
вы скопируете все файлы, необходимые для залуска сервера DNS. Потом,
ПрИ зап:уске сервиса, будет выпотЩllа команда chroot для 3Toro сервиса,
которая подменит фаitловую <;ПСТУ. А так как в КJlTaJlore t'ootdns,
который станет каталоrом /, имеются все необходимые фаitчыдЛЯ работы
BIND, то для сервиса запуск и работа в сhrООI'окружеНlШ будут coвep
щенно прозрачными.
Сразу нужно ОIUворИТЬ, ЧТО настрщmать сhrооt'Оl<ружение мы будем для
девятой версии BIND, поскольку это значителыlo проще, чем ДЛЯ восьмой
версии. В отличие от восьмой версии, rде для настройки сhrооtокружения
нужно было копировать все БИllарl\Ы файлы или библиотеки, нобходи'
мые для запуска BIND, дЛЯ работы девятой версии достаточно скоп:иро
вать только файлы конфиrурации И зон, обслуживаемых сервером.
Создайте каталOl'И корневой файловой СИСТемЫ сервера DNS:
# mkdir p Irootdns
# mkdir p Irootdns/etc
# mkdir .р Iroot.dns/var/run/named
# mkdir p !root.dns/var/named
Остановите сервер DNS, если он запущен:
# service named stop
Переместите файл конфиrурnции, файлы ЗОII 1\ файл /etc/locaJ t irne
(он нужен ДЛЯ корректной работы сервера DNS со временем) 8 каталоr
Irootdns:
# mv /etc/named.conf Irootdns/etcl
398
rлава 13. DNS служба имен
# ту /var/named/* Irootdпs/var/named/
# chown пaroед.патед /сlн'ооt/еtс/па.'!\еd.сопf
# chown R "атеа.патеа /rootdns/var/named/*
Защитите от редактирования и удаления файл конфиryраUИII:
ff chattr +i Irootdns!etc/named.conf
Добавьте в файл /etc/ sysconf ig Iпао,ед строку:
ROOTDIR=./rootdns/.
Все, теперь можно запустить сервер пaтed:
# service "атеа start
Проверьте, все ли сделано правильно:
$ ps ax grep "атеа.
5380? S О, 00 "аmеа "н naтed -t /roct 'dns/
5381? S о: 00 патед 'и патед -t /root дпs/
5382.? S о: 00 "атеа -и патед t /roo\>dns/
13.9. Использование ПОДПИсей траНзакций.
Механизм TSIG
в девятой версии BIND появилась возможность СОЗДal,ать rlOДПИСИ тран-
закциЙ (TSIG TrallsacrioYl SIGпu/!lres), Механизм TSIG рабоraет raK:
сервер получает сообщение, подписанное ключом, проверяет подпись
И, если она «правилыI3Я», сероер отправляет ответ, подписанный тем
же ключом.
Механизм TSIG очень эффективен прн передаче информаllИli о зоне,
уведомлений об изменении зоны и рекурсивных сообщеШfЙ. Соrласитесь,
про верка подписи надежнее, чем проверка IP.aApeca. Злоумышленник
может вывести из строя вторичный сервер DNS банальной атакой на
отказ, И, пока администратор будет «поднимать» вторичный сервер, он
заменит Q\ЧЙ lP-lЩрес,щресом ВТОРИЧ.lOfО cePII!!P<J,. При И<ЩОlfьзщ,аНИll
TS!G задачаЗЛОУМЬJ11lJfенникэ значительно усложняется: ведь ему при-
дется «подобрать» 128--битный МD5-КЛЮ'I, а вероятность такото подбора
близка к нулю.
Итак, приступим к настройке. Остановите сервис named.
Сrенерируйте общие ключи для каждой пары узлов. Общие ключи ис-
пользуются при «общеНШi» первнчноrо и вторичноro серверов DNS.
[root@dпs] # dпsseckeygen 'a hmacmd5 b 128 -п HOST П81пэ2
Улslhs2.+157+49406
399
LINUX: полное pY1<oeoдcтe
Мы используем aдropитм HМAC-МD5. 128-биТliое шифрование, nsl-ns2
это имя ключа. После выполнеНlfЯЭТОЙ команды будет создан файл
Кпв1-ПБ2 .+176+40946 .private. Откройте ero в любом текстO!JОМ
редакторе. Вы увидте примерно слеiJ;ующее:
Private-key-format: vl.2
A1gorithm: 157 (HМACМD51
Кеу' ms7dfts87Cjhj7FD91k7a3==
Ключ «ms7dfts87Cjhj7FD9Ik7a3==» и будет тем секрето!.!, который
будет передаваться между сервер.амJI. Запишите ЭТО значение И.а бу-
Mare (которую потом нужно будетуничтожilть) и удалите файлы
Kns1ns2. +157+49406 .key и Kns1-ns2. +157+49406. pri vate.
Добавьте в файJIЫ конфиryраЦИIl l1ерlПlчноrо и 8торичноrо серверов
DNS директивы. УКlI3ывающие нзисполыоваНllе КJlЮча (листинrи 13.8
и 13.9).
ЛИGтинr 13.8. ФраrмеlП файла narned.conf nерsичноrо сервера DNS
key пs1-rJs2 (
algorithm hщaсrnd5;
secret "rns7dfts87Cjhj7FD91k7a3==";
);
# прописываем вторичный сераер DNS 192.168.1.2:
server 192.168.1.2 (
кеуа ( na1пa2; );
):
options {
# разрешаем передачу зоцывторgому серэеру DNS
al1ow-transfer { 192.168.1.2: };
):
Листинr 13.9. Фраrмвнт файлз named.conf вторичноrо сервора DNS
key пв1пв2 {
algorithm hmac-md5;
secret "ms7dfts87Сjhj7FD91k7аЗ==";
):
# пролисываем первичнь сервер DNS 192.168.1.1:
server 192.168.1.1 (
кеуа { пs1-пв2; );
);
400
rлава 1 З. DNS спужб.. ИМен
optioпs r
никому Не передаем зону
allowtransfer ( попе );
};
Можно также настроН1"Ь передачу зоны «по ключу». Длll этоro диреКТИ8а
allowtransfer в файле коНфиrypации перви'Шоrо сервера DNS ДОi1ЖНа
RыrлядетJ, rшc:
allQwtraпsfer { key nslns2; };
Осталось только «спрятать» файлы конфшурации обоих серверов DNS
от постороннш rлаз ведь они содержат IOIючи в открытом виде.
chmod 600 патеа.соп!
Запустите сервис DBmed. Тецерь о ero бе30ЩlСНОC"ПI. будет заботиться
TSIG. .
401
rлава 14
ПОЧТОВblЙ
СЕРВЕР
УСТАНОВКА И НАСТРОЙКА SENDMAIL
АУТЕНТИФИКАЦИЯ В SENDMAIL
ArEffi ДОСТУПА FEТCHMAIL
АВТОМАТИЧЕСКАЯ СОРТИРОВКА
ВХОДЯЩЕЙ ПОЧТЫ
проrРАММА PROCMAtL
СОЗДАНИЕ СПИСКА РАССЫЛКИ
ЗАЩИТА проrРАММЫ
SENDMAlL. проrРАММА SMRSH
LINUX ПОЛНОЕ РУКОВОДСТВО
НеискущеlЩЬЩ щщьзоваТещt обычно ПРИИИМЩQт за систеlo1у :>лектроиной
почты ТYlIpQWaммy, с ПQМQЩЬЮ котороЙ ОНИ,'щrают и ЩIlI1yТСQобщеция
(mai1, pine, Netscape Messener, MS Outlook Express). На самом деле эта
система состоит ИЗ нескоnышх компонентов (рис. 14.1):
., UOJIЬЭQ!Шttщъсющ aTeнтьr те самые шаil, рще и т,п., реализу!()щие
интерфейс к системе цереСЫЛКII почты;
. транспортный аreит (ША, Mail TransferAgent), пересъщающийсо'
общения, с одиоrо компьютера иа друrой;,
. атент доставки, СОРТИРУЮЩИЙ по'l1)' И помещающий ее в ЯIIЩКИ поль.
зователей ИЛИ друтое хранилище сообщеlUlЙ;
. аrент доступа, скачивЩQЩИЙ доставлеНliУЮ почту из хранилища [\О
протоколу РОР ron! !МАР, и атент подачи, доставляющий письма от
пользователей на сервер исходящих сообщений ПО протоколу SМТP.
Bкa'lecrвe'areHTa подачи может работать транспортный аreит;
1
SМТP
Хра.Шmlще
l
Тр.?НtпорТШ:w
МеНТ .
Сеорв.ер
<:';1U]4ItщеМ tlC1"ы
ПCl<.4тоs.wе RЩ)fК)t
t\QЛЬЗСВ8'hme16
"
C
&)!.,!I;'II:Ще:й nОЧJW
'fp-Зн!:tЮp'ffi
""",
Хре\'II'IltЩе
nOAt>TlI).Ie
..""'"
1 Meкt nода-ч
2;iil'ЖrАОС1'taI
) зteНt ДОСУу1'18
5р8МjJ.УЭ'Р
Рнс;' 14.1; СТРУК1УРВ почroвой"""IВМЫ
403
LINUX: полное руководство
При установке !10ЧТОВОro сервера в сети орrанltзации!Щи в любой друrой
компьютерной сетИ необходимо настраивать именно транспортный атент.
Основными транспортными аrентами пересbIЛКИ почты на сеrодияшний
день являются sendmaH, postfix и qmail. Кроме основиоЙ фУНКЦЮf
пересылки rooбшеlШЙ электроиной почты каждый их них имеет соб-
ственные эксклюзивные возможности.
СтареЙшим транспортным аrепroм, фактическим CТ1I1fДaproM, работавшим
еще в самых ранних версиях UNIX, является sendJnail. Разработчики
qmai1 обратили особое внимание на обеспечение безопасности: до 1998
roJIa реализация функций защиты в seпdJnail до такой степени оставляла
желать лучшеrо, что в конференциях вообше не рекомендовалось ее 1'IC-
пользовать. Проrpамма postfix считается проше дрyrих в настройке.
Я решительно предпочитаю sendmail, которая в настоящее время обе-
спечивает ДШIЖНЫЙ уровень безопасности и на'ТРаивается достаточно
леrко. В этой rлаве я объясню, как настроить sendmall для орrанизации
небольшоrо почтовоrо сервера с использованием протокола SMTP. В
качеC1'l!е атента доставки я рассмотрю procmail, а в качестве атента дo
ступа, работающеro по протоколуРОРЗ, проrрамму fetchmail. Для
заинтересовавшихся я разместил на сайте http: / / dkws . nar од . ru
руководство по настройке qmail.
Вкратце напомню о протоколах SМТP и РОР, которые будем конфиry-
рировать:
. SМТР (SimpleMail Transfer Protocol) сервис в сетях ТСРЛР для
передачи почтовых сообщений. Обычно дЛЯ SМТP используется порт
25 (см. файл /etc/services).
. РОР (Post Office Pra/oco!) используется для получения почты с
сервера. Порт по умолчатоо 110 (для протокола РОРЗ).
14.1. Установка и настройка sendmail
Проrрамма sendmail устанавливается из пакета seDdmail, входяще-
ТО в состав Red Hat-совместимblX дистрибутивов. Я использую пакет
sendmail8.11.0. Последнюю версию sendmail можно ск:ачать по адресу
www.sendmail.org.
ПреЖJ1е чем прнступить к настройке sendmail, вам необходимо правильно
настроить DNS. Настройка сер"ера PNS подробно обсуждмась " fлаве
!З. Необязательио настраи"ать <:ер"ер DNS на том же компьютере, тде
будет работать sendmail: дocrаточно будет указать DNS-сервера вашей
сети в файле /etc/resolv. conf, чтобы система разрещения имен KOp
ректно работала. Впрочем, sendmail можно настроить для работы 11 без
использования DNS, но этот вариант я рассматривать не буду.
404
I"I1aва 14. ПОЧТОВЫЙ сервер
14.1.1. Базовая настройка sendmaJI
ОСНОВНЫМ файлом конфиryрации sendтail является еепdЛIаН. cf, pac
положеlu!ый в каталоrе /etc/mail (В некоторых дистрибутивах
/ etc, смотри rpm ql sendmai 1). об этом файле rollОрят, что oit: ДJIИН
нес, чем лимузин у Вилла fейтса, 11 что ero редаКТИРОllаниеnPOИСХОДIIТ
n режиме «rлаэа боятся, руки делают... ЕCJ!И вы не верите мне, оцройте
э1'от файл,.\I вЫ убедитесь в этом. Редактировать ДI\ННblIt файл вручную
MOryт ТОЛЬКО профеССИОНaJIЪ/адМlIнистраторы I{ЛИ разраооТЧИJQf про
rpaMMbl seDdmaiJ.
К счаСТЫ9, базовую настройку sendmaU МОЖIIО выполнить при помощи
('рафическоrо Jtонфиrуратора netconf. К сожалеНИlIJ, этот конфJll'Ypaтор
(точнее, пакет linuxconf, в который ОН входит) в совремеииые да<:три
бутивы включать перестала. Но не все потеряно: ero можно скачать с
саЙта разработчlflШ ЬНр: / /www.solucorp.qc.ca/liпuxcoпf. МнОПlс
опытные П0J!Ь30ватеЛII LinuX КРllтически относятся к ВОЗМО)QfОСТЯМ паке-
та linuxconf и предпочитают прямое редактирование конфиrypацковных
файлов, ио для новичка эти утилиты, несомненно, удобнее.
ЗЗnУСТIIТС УТIUШТУ пеtс:опf из'под супеРПОЛЬЗ0вателя (рис. 14.2).
Выберите в меню MaiJ delivery system, затем Conngure bas;c information.
В поле Present your system as просто введите свое домеlШОе ИМЯ. Затем
обязательно отметьте флажок Accept email for вашдомев (рис. 14.3).
PIю. 14.2. Конф..ryparaр пвtconf
405
rлава 14. ПОЧТОВЫЙ сервер
цифр адреса у:ща. ПОJlробнее О формате файлов host в. allow и 1108ts.
der,y вы можете прочитать, введя команду тап hosts.allow.
ТепеРl>lЩспща очередь РОР3. После устаНОJ!КИ пакета iшар у вас прак-
тически все настроено, Т.е. я хочу сказать, что уже можно /lроверять
конфиryрацию. Перезапустите супердемон inetd (xineld) и nвeJlIIТC сле-
дующее:
$ t,elnet <имятолькосозданноrОЛОЧТОВИКа> 25
Trying 192.168.1.1 ...
Connected to 192.168.1.1
Еэсаре character i5- '.....)"
220 den.dhsilabs.com ЕБМТР Sendmail 8.11.0/8.8.7 Бцп, 17
J,ш 20.01 10:S:22 +300
Это означает, что sendmail работает, осталось npоперить, насколько пра-
ВИЛЬНО он это делает. С этоЙ целью попробуйте отпраШffЪ письмо:
rnail
220
rcpt
220
fram: me@my.host.com
2.1.0 me@my.host.com .... Sепdеr 01<
to: den@den.dhsi1abs.com
2.1.5 del1@den..dhsilabs.com .... Recipic;nt
О].;
в качестве адресата (rcpt to:) укаЖlffе существующее реrистрциошюе
ИмЯ @ имя ПОЧТОБОro сервера. После 31'01'0 вnеДIIТС команду dat:a, потом
текст сообщения, а ДЛ1l ОКОНЧЭН}lЯ ВБода поставьте точку в пустой строке,
Проrрамма sendmail сообщит, что сообщение помешено n очередь на
OТllpaOKY. Закончите lelneH:eaHC командой qцi t.
Обратите !!!Нlмание, что у.зла my.host.com не существует, а проtpамма
sendmail тем Не менее рапор.тует, что "Sender Ok». ВОТ почему в настрой-
ках sendD1ail лучше ПКЛЮЧИТЬ фдажок \Vэit for nNS,
Теперь нужно .запустить какой-нибудь почтовый клнент. например kmail,
I! получить почту. Используйте следующие настройки сети в лроrрамме
knlиj\: CeT ОТпРаI!КII.ПОЧТЫ. Там устащнщте SMTP,IIop'r2S. IIМЯ
сервер.а.цWI1ЩlDеrо почтовика (в раССматрщщемом прДмереэто den.
dhsi1abs.com). Затем добавьте учетную запПСЬ ДЛЯ 1'01'3:
. Имя пользователя den;
. Пароль пароль, который используется для входа Б систему;
. Сервер den.dhsi1abs.com;
· Порт 110.
В результате вы дощКны ПОЛУЧИТЬ то сообщеН}lе, которое ТОЛЬКО что
послали. При ЭТОм возможны проблемы при разрешении имени. Чтобы
ИХ избежать, необходимо правильно настроить DNS или вместо имени
почтовоro сервера исполь.зовать cro IP'aApec. Прll доба8JIении новосо
поль.зователя не забудьте установить еro пароJIЬ ДЛЯ Бхода В систему. ЕСJШ
4(17
\JNUX: полное рУКОЗОДCТIIО
этоro не сделать, а пытаться получить почту без указания парол!!, то вы
получите сообщение «Сбой аутеlt'Щфикащ!И».
Базовая настройка проrраммы seDdmaiJ с использованием конфиryра-
тора выполняется очень просто и обычно устраивает J\cex... до тех пор,
пока вашим почтовым сервером не заинтересуются спамеры. Для более
тонкой иасrройки. нужно ознакомИ1'ЬСЯ с файлами !tОНфllryрации про-
rpaMMhI sendmail.
14.1.2. Редактироввние конфиrурационных файлов
Обычно для редактирования файл;! sendmail. е! используется макро-
процессор т4. Сначала вы Iщдrотавдиваете спеЦИaJIЬИЫЙ тс-файл, [де
запнсаны настройки sendmail 8 более «читабеЛЬf{ОМ» ВИДе. Затем, отре-
лактнровав тс-файл, !lУЖНО запустить макропроцессор т4 ДЛЯ создаnия
файла конфиryраЩfИ sendmail:
# mv /etc/sendmail.cf /ete/sendmai1.ef.orig
# т4 myconfig.mc > /ete/sendmail.cf
ФаЙл конфиryрации по умолчанию, которыЙ используется макропро-
цессором т4 для создания фаЙл;! ксщфиryрации nporpaMMbl sendmai1
(sendmail.cf), наХОДJ<ТСЯ в Ka1'aJlQre Iцsr/shаrе/sеПdmаil-е[(еf. в
БШlее старых lIерсllЯX nporpaMМbI se!1dmail ОН ыожет быть расположен в
каталоrе l\Jsr l1ib!sendmail.
Как правило. этот файл называется sendma i 1. те. Ииш'да он может
называться и по'друrому, например, redhat .те, если Вы используете
операционную cl'lcreMY Red Hat или срвместимую с ней.
ПРJ<мер стандартноro фаЙла /usr/shаrе/sепdmаi1-еfJеf/rеdhа!:.
те приведен 11 ЛИС'ТII!lrе 14.1.
Листинr 14.1. Стандартный фай/) redI1at.'nc
сН vert (-1)
dn1 Tr-lis is the sепdшаil macro config file. If уои me.ke
changes to this file,
аl'l1 уо" nеса trю sendmailef rpm i.nstal1ed and t!1cn have
1:0 generate а
ав1 uew /etc/seudmail.ef Ьу ruunihg the fQl10wing command:
drll
сn1 m4 /etc/mail/sendmai1.mc > /etc/sendrnail.ef
спl
include{'../m4/cf.m4')
VERSIONID('linux setup for Red Hat Linux'Idn1
408
rлава 14. Почтовый сервер
OSTYPE('linux' )
define('confDEFUSERrD', "8:12")dnl
undefine{'UUCPRELAY')dnl
undefine('BrТNETRELAY')dn1
define('confAUTOREBUILD'Jdnl
deflne{'confТOCONNECT', 'lm')dnl
define('confTRYNULLМXLIST',true)dn1
defi.ne (' confDONTPROBEINТERFACES' ,true) dn1
define('PROCМAILMAILERPATH', '/usr/bin/procmail')dn1
define('ALIASFILE', '/etc/a1iases')dn1
dnl define('STATUSFILE', '/etc/mail/statistics')dn1
define( 'UUCPjfAILER...МAX', '2000000' )dnl
define('confUSERDBSPEC', '/etc/mail/userdb.db')dn1
define('confPRIVACYFLAGS', 'authwarnlngs.novrfy,noexpn,re
strictqrun' Jdnl
define ('confAUTHOPTIONS', 'А') onl
dn1 TRUSTAUTHMECH('DIGESTМD5 CRAММD5 LOGIN PLAIN')dn1
dn1 define('confAUTHMECHANISMS'. 'DIGESTMD5 CRAММD5
LOGIN PLAIN')dnl
dnl define ('confTOQUEUEWARN', '4h') dn1
dnl аеНпе I 'confTOQ1JEUEREТURN', . 5д " dn1
dnl define ('confQUEUELA', '12') dnl
апl define( 'confREFUSELA' ,'18' Jdnl
dn1 FEATURE(de1aychecks)dnl
FEAТURE('nodefau1tmsa', 'dn1')dnl
F'EATURE(' smrsh' , '/usrlsbin/.smrsh' I dn1
FEATURE('mailertable', 'hash o /etc/mai1/mailertable.
дЬ' ) dn1
FEATURE('virtusertable', 'hash o /etc/mail/virtusertable.
db' )dnl
FEAТURE{redirect) dnl
FEATURE(alwaysadddomain)dnl
FEATURE(uBecwfile)dnl
FEATURE(uBectfile'dnl
FEAТURE(localrocmail,", 'procmai1 t y a $h d $u')dnl
FEATUREI'accessdb', 'hash o /etc/mai1/acces$.db')dnl
FEATURE('blacklistrecipients"dnl
EXPOSEDUSER('root')dnl
dn1 This changes Bendmail to only listen оп the loopback
device 127,0.0.1
dnl апд not оп апу other network devices. Comment thiB out
if уои want
dnl to accept email over the network.
DAEMONOPTIONS('Port=smtp,Addr=127.0,O.1. Name=иrA')
dn1 NOTE. binding both IPv4 апд IPv6 daemon to the еате
part requires
409
LINUX: полное РУКОВОДСТВО
&11 а kerne1 patch
дn1 l)AEMONOPTIONS ( 'port.=smtp .I\ddr=: : 1, Namе=МТАv6,
fo V amily:::inet6'} .
,1,,1 We strопglу recomrnend to сопunепt thisone out if you
wапt to protect
dnl YOl.lrself 'r1'om эрат. Eowever. the laptop апд use1's ОП
computer.s that до
dnl поt have 24х7 DNS ао леед this.
FЕАтuRЕ('ассерtuпrезо1vаы1dоmаiпs'}dn11
ОП]. FEATURE( '1'e.laybas!,!d;..oпМX' }dnl
ИJ>..ILЕR I smtp) dnl
МЛП.ЕR Iprocmai11 ап],
Cwlocal ho.s t .l.ocaldornain
с 110МОЩЬЮ директивы FEATURE можно ПОДК:ЛЮЧ:ЦТЬ ту ИЛИ иную
ФУIIКUИЮ протраммы sendmail. Например, Функция mai1ertabIe предна
Зllачена для nереопределеНJfЯ щрropутизащш Д1IЯ конкретных ДОМЩlOв.
Вы можете леrко расширить ФУНJЩИональные возможности nporpaMMbl
sendmail, добавив нужные вам функции в mсфайл.
Предположим, вы хотите, чтобы названия КОМПЫQтеров домена БWlИ
скрыты. Это леrко достиrаетед с !IОМОЩЬЮ добаВ.1lеlЩЯ Фуикции masq-
ueradeenvelope в ваш mсфаllл. Для этоrо скопцруйте файл redhat .
J!\C В фаЙл l.\idеhоsts.шс и добавьте в конец файла hidehost$.mc
строки:
MASQUERADE AS(my'domain.ru)dnl
FEA TURE( masquerade envelope )dnl
Затем выполните команду:
# "4 /ugr/share/5endmai1cf/cf/hidehosts.rnc /etc/sendmail.cf
Вот и все! Названия узлов будут скрыты. Описание ПРОЧИХ функuий
представлено I! табтще 14.1.
ФУНЦИИ npOrp8MMbJ sendman
Таблица 14. 1
ФУНКЦИR Onисанме
ОflределяттаGлицу ДОI::Т)'f1З. В :ЭТQ тaбnицs указаww умы,
accessdb которыМ РЗЭР(JWена ИЛИ запрещена отправка no'tТЫ "!ер,,!; ввш
ПОЧТО13ЫЙ: се.реер. Эта ФУI-IIЩИR эффеКft'l8НО ИCnОЛbS)'еТСА дnя
борьбы со cn3MOM
acept u!'rQso1vе.Ые dQnшit1s Разрешает оmраалwrь почту ДOMн.aм. которые не MOry:- быть
pacnouBHbl
bl;1stmx.js:IOc:.\1 СооБЩ&\-IИRБ'lд'lf при""маты:.R ТOJ\bКO.81"OM САУЧа8. если эаПVlCl:o
МХ серввра ONS 't1(blBaeT tia это.т ПQч:r OlJра8Р
bIackllstJecipients . Черный СПViСQК-. Еще одна ФVt«ЦИRАЛR борьбы со cnaLAOM. Дnя
ее paOQTbl н;:юБХОДИl\llа фy;.IkЦИЯ ItCce..db
410
rлаез 14. Почтовый сервер
Продсткение тбл. 14. 1
ФующмR ОПиС""".
Используется для работы с "черным GПИСКОМ». dn8b1 зто со-
dn$bl кращение от QNS Black U!;t. В более раМ!1ИХ6fi!рGII'I,Q)( эта ОnЦИI1
наэываnась rbl (Resatve BII9;C:k ust(
domointabIe Испот"З'У.:I;С\1 ДJ) разрешеия имек доменов
genericstabl Используетс';! ДnR мз""енения адреса ОТПрОВI<:И в сообщениях
localrot;:mall УК1Jзываеf. ..то доt;та8ЛТЬ nОЧ'ry нужно со ПОМОЩ.. ЛoкaJ'Iьной
yrиnи:rы procfmll1
maJlertabte Пере;onределяеt маршрутизацию для "OHKpTHIIIX Доменов
ИСПОЛi:>Эуется д!l1:.1 маСl(МРО8КИ {сокрытия) acerQ домена, Дa.l'4He.
masquemdeentiredom8in ф'I'tКЦИА ДQЛЖна спопЬЗ0ааты::я зме.сТQ с Дире.k7i'180Й МAS-
QUERдDEAS {или MASOUERAOEDOMAIN), MMep. .
МASQUERADE..AS(f117.fU)dnl
ПОЭ80IIRет CI<PblTb имена узлQе ДQМ8на.Звменяеr попе rtteefved
masqUВfЦde...еnvеlоре from за(ОЛQВКЭ coo-бщеНИ14 перед f1ереДЭЧ$й QооБЩеНИЯ АРyrиМ
МТА .
И«:ПОIlL-эувте;$t ДЛR пвреl-lаПравnени51 на дP)lro nOЧТОIJbl серВер.
tedirect Означает ОПС83 ОТ приНАrn почты с; вЫДачей сооБЩ'НМА рае.и
try <adoress> l"Ol1blraTer;b использова'Ть ЭiQТ адрес)
,еlауbи.sеdопМХ Разрешавr ПреНаnраВn8tiие (ретрансляцию) rщЧ1'Ы ТОЛЫ(О ДnA
узлов, которые укаэаны в записях МХ серВера DNS
rlау)'Юstsопly Разрешает реrраЩ:ЛRЦИЮ только д.nя узлов, указ.анных а ac
cell.db
relayma.llfrom Разрешает Р"3трасЛЯЦ\olЮ. 'foIтыф е\.nи отправитель указаН е
списке АЕ1АУ базы accI!Is1loAb
sт,.h ИСnО11ЬЭОSЗl-+ие оrраl-lч.енной обоЛОч1<И tиtr'ldmaft
use.;.cCflte При t.a3Ш»Ч ?lmй фуш.rжи undmllll будет обращаться к файлу
sendIt1aii ',::I:.:щ (;IIIJCQM д.os.epCI1HblX по.1t.зоsателеii
uocwfile Пр" )'K2t.1l1нr1-l эroh ф"НktпlИ t'ndmiI будет riбратаТbl:Jt !( файлу
Ser\d:tOdi 1 ,:'.\ 3o:t СIШСКОМ ОКI!JlbJ1bIХ y1J!O!J
\'Ф1usertablе nреобра'!ут адрес поnyчатеЛfl 8 адрес локапЬНОП1 1l0льзоваТеЛR
в файле /etc/mail/ serldmail. cw перечислены все псевдонимы вашеrо
ПО'IТовоrо сервера. Предположим, что имя вашеrо сервера mail.dhsilabs.
ru. Если отправитель отправит почту по a.llpecy dеп@пшil.dhsilаЬs.ru,
письмо БУ.lIет без проблем доставлено полЬЗователю den. А если кто-то
отправит письмо по адресу den@dhsilabs.ru, то ero доставка вызовет
определенные труднОС1'И, так как не ясно, какому УЗЛУ домена dhsilabs
адресовано сообщение. Для решения этой проблемы в файл sепdmаil.СW
нужно поместить строку:
мsllаЬв . Пl
Теперь, KOrдa будет приходить почта формата usеr@dhsilаhцu, она будет
доставлена почтовому серверу mail.dllsilabs.ru.
Напомню, что перед IfЗменеиием файла s",!ldтail_ cf желательно оста-
HOBllТb лроrpамму sendmaiI. Это делается с помощью комапды:
# /etc/init.d/sendmail stop
411
LINUX: ПОЛное РУКОВОДСТIЮ
Конечно, удобнее сначала отредактировать файл sendrna i 1 . с f с помо-
щью m4, а потом выпoJ1юlть команду /etc/init .d/sendтail restart
ДЛЯ перезаl1уск:а ПРОтраМмЫ sendmail.
14.2. Аутентификация в sendmail
14.2.1. Установка и настройка SASL
Проrрамма Sendmail 8.10/8.11 поддерживает SMТP AUTH соrЛ/lСНО
станларту RFC 2554. Аутенщфикация базируется па SASL (Simple
Authentication and Security Layer). Она позволит вам несколько ПОВЫ-
CllТb безопасность вашей сетн, но создаст определенные неудобства для
пользователей, потому что не все ПО'iтовые КЛI"'!IТЬ! (пользовательские
areHTbl) ее поддерживают.
Первым делом убедитесь в том, что ваша сборка sendmajJ поддерживает
библиотеку SASL:
# sendma11 dO.l -bv root I grep SASL
При отсутствии поддержки SASL от вас потребуется перекомпилировать
sendmail. РаСlIШФвависходные кtЩЫ в каталоr sendmail-x.xx.xx, создаЙте файл
sendrnai lx .xx.x/devtools/Si te/ 91 te. cOnfig .rn4, в Котором не-
обходимо прописать следующие строки:
APPENDDEF('confENVDEF'. "DSASL')
APPENDDEF ( , confsendmailL:tBS', ' -1 sasl ' )
АРРЕNDDЕF('сопfLIВDIRS'. '-L/usr/lib/')
APPENDDEF ('conf1NCDIRS', 'I/usr/include/ '1
После этоro запустите сценарий Build:
# . /Build
# ./Build install
Если вы все сделали правильно, ваш sendmall теперь должен поддер
живать SMTP AUTH. Теперь вам потребуются библиотеки Cyrus SASL,
исходные коды которых вы можете найти по адресу ftp: / / ftp. andrew.
cmu.edu/pub!cyrusrnail.
Соберите библиотеку Cyrus SASL, ВЫПОЛlшв следующую последователь-
IЮСТЬ действий:
# tar -xzf cyrus-sasl-l.5.24.tar.gz
# cd cyrussasl1.5.24/
# ./configue --prefix/usr
412
rпaвa 14. Почтовый сервер
j/ rnake
# make install
После установки библиотеки отредактируйте файл /usr!libIsasl/
Sendmail. conf. Если он не существует, создайте ero. В конец ЭТОfО
файла необходимо добавить строку:
pwcheckmethod: sasldb
это укажет sendmail, что аутеНТИфliКацию нужно провоДИ1'Ь с использова-
нием SASL. Теперь займитесь созданием базы данных всех пользователей,
которые MOryт отправлять почту. Для ЭТОfО ислользуютсядвс проrpаммы:
saslpasswd и sasldbIistusers. Они должны находиться 8 каталоre /sbin.
Запускать их нужно от имени суперпользователя.
# saslpasswd a sendmail newuser
раsswоrd:<пароль ДЛЯ neWUser>
Эту процедуру нужно провести JUlЯ всех пользователей, которым раз-
решено отправление почты. Утилита sasldbIistnsers предназначена для
лросмотра всех записей в базе данных. После ее запуска вы должны
увидеть что-то наподобие этою:
user: newuser realm: dhsilabs.com тесЬ, CRAМMD5
user: newu.ser realm: dhsilabs.com тесЬ, DIGESTМD5
user, newuser real.m, dhsilabs .сот тесЬ, PLAIN
Отобра.жеlUIая IlНформация означает, что пользователь newuser М;О;кет
аутентифицироваться тремя методами: CRAMMD5, DIGEST-MD5,
PLAIN. Рекомендую использовать метод CRAM-MD5, но в крайнем
случае подойдет и PLAIN.
14.2.2. Настройка se"dmail+SASL
в файл "endmai 1. те внесите следующие строки:
TRUSTAUTHMECH('GSSAPI DIGESTMD5 CRAMMD5 PLAIN')Ql
definel'confAUTHMECHANISMS', 'GSSAPI DIGESTMD5 CRAММD5
PLAIN' )dnl
define('confDEFAUTHINFO', '/ete/mailJauth/authinfo')dnl
FEAТURE('nodefau1tm"a')dnl turn off default entry for МВА
DAEMONOPTIONSI'Port=25, Name=MSA, MoE')dnl
Метод PLAIN, как самый ненадежный, можно было бы убрать из списка
авторизации, но я рекомендую вам ero оставить для совместимости с не-
которыми почтовыми клиентами.
Запустите интерпретатор т4:
# т4 sendmail.mc > sendmail.cf
413
LINUX: ПО11ное руководотв!:>
Скопируйте новый файл. sendma i 1 . с f па место стзpQl'O, церезапустите
sendmail и проверьте ero работоспособность. Для этоrо запустите клиент
telnet 11 Прllсоединltтесь к порту 25 вашеrо компьютера:
telnet localhost 25
Tryiflg 127.0.0.1...
Соппесt.еd to localhost
Escape character i9 .}.
220 1()саl.sепdщаil.ОRG ЕSМТР Seдdmail 8.10:.0/8.10.0; Thu,
9 Бер 1999 10,;18,44 0700 (РОТ)
ehlo localllOst
250local.sendmail.ORC; ИеНа .localhost [127.0.0.1],
pIease(] to meet YO\J
250. ENHANCEDSTATtJSCODES
;?,50l)SN
2,,0 АПТН DIGESTмD5 CRAМ.MD5 PI.AIN
250 HELP
чuН
Теперь желатеЛЫfQ добавить оШIClllUfЯ подцеРЖlIваемых ващпм сервероМ
методов аутентнфикаЦШ1. Это делается для TOI'O, чтобы» зaroловке письма
IIШI"ВИЛОСЬ такое сообщение:
(al(t.htype is CRAМM05, l1ser denl
ОткроЙте файл "епатаН. с! в любом текстовом редакторе и найдите
слелующие строки:
##1"####11#'.#.'#####'#'
.ff FО.!"IПаt сЕ [lеаде1Б If
'###########'..1"#######
После НИХ вам нужн() добавитr,слеJ\YIOщее:
$.$?{a\Jtrltype) (aut.htype is $(тип), user
:; {ЛОIп;;.зова'l'ель) $. )
14.2.3. Настройка почтовых клиентов с
ис"ользованием аутентификации
я р<lССМОТрЮ 1i8СТрОЙКУ трех самы:< ПОПУЛЯРIiЫХ ПОЧТОВЫХ клиентов:
1. DleBat!. Создайте учетную заIШсЬ (Ac(:ount New). В качестве имени
и пароля введитереrистраЦIIOlIНые ДЗlШые пользователя, УСТЗllо.вден'
ные на серllере С помощью команды passwd. СеРВерОМ входащей и
ИСХОДЯщей почты назначьте только что созд8f1ный ПОЧТОВЫЙ сервер
dcn.dhsilabs.com. Нажмите кнопку Mort' (pIIC. 14.4). В окне Advanced
SMTP Options установите режим Perform SМТP authentication. Если
414
rлава 14, Почтовый сервер
имя пальэователя и пароль на cep!le РОР совпадают с именем поль
зоватеЛJI и паролем на сервере Sмтp, а это обычно так, установите
режим Use РОР server login. в I1РО1ИВНОМ случае укажите нужное
имя пользователя и параль.
PIю. 14.4. НаСТРОllка Тhв&ttl
2. Outlook Express. Создайте У'IСТНУЮ звшtСЬ (Сервис .... Учетные за
писи, кнопка Добавить). В окне СDОЙСТВ учетной записи перейди-
те на вкладку Серверы. Включите режим Проверка подлинности
пользовател., нажмите кнопку Настройка и установцте параметры
аyreнтификаuи...
3. Netscape Messenger. Выбер"те пункт меню Edit .... Preferences. В окне
Preferences (рис. 14.5) перейд"те в раздел Mail servers и укажите He
обходимые вам параметры. Ilарамстры протокола РОР можно задать,
выбрав почтовый сервер н нажав на кнопку Edit. Netscape Messenger
версии 4.76 поддерживает только метод авторизации PLAIN.
Рис. 14.5. НасrрОЙКд Netscape Мвэsвпае,
415
LINUX: попное pyj<OBOДCТIIO
14.3. AreHT доступа fetchmail
Проrpамма fеtcbmailИCnOJlьзуется: для затрузки сообщеlШЙ с сервера вхо-
дящей почты в почтовый ящик пользователя. В ДОмащнем катзлоrе Toro
пользователя, от !lмеlШ KOToporo будl;'f запускаТI>СЯ fetchmail, создайте
файл. fetchmailrc. Добавьre,в нею следующие строки:
Set postmaster wmail
poll provider.ru proto РОРЗ ПО аnэ
user "mail" раээ "щуаsswоrd' to mail here
options fetchal1
Provider.ru ЭТО иlllЯ почтовоroсерlЩрц, откуда вы будете забирать почту
по протоколу РОР3. При этом lIы'будете использовать имя ПОЛl>зователя
таН и паролl> mУ"р!Щwоrd. Директц!i'аJеtсhаll У1QЗЬШВет nporpaole по.
лучить всю по'!Ту и потом удЩПIт.ь полученные сообщения с сервера.
Запускать nporpaMМy fetcbmail можно как демон, а можно с помощью
nлаНИРОВЩИ1Q cron. В перо ом случае просто выполните 1(0МaJЩУ:
$ fetchmail д 12000
При этом fetchmail будет прооерять Наличие ноnой почты через каждые
20 минут.
Во втором случае отредактируйте пользовательский сrопtаЬ-фаitл и !ше.
дите иовое задание:
$ crontab -е
0,20,40 . . . * /usr/hin/fetchmail
14.4.Автоматическа.сортировкавходяей
почты npOrpaMMa procmail
Лучше Bcero объяснять работу любой nроrpаммы lIа практичеСКQМ при-
мере. Допустим, 11 вацюй орrани3аlЩИ Три отдела, и JIX адреса depl@firma.
ти, dep2@firma.ru и Щ:рЗ@firmа.ru. У в;1С также есть пользователь шаН,
На имя котороro будприходить вся Щlчта. Вам нужно сортировать при-
ходящую почту цо цззванию отдела: нanример, если в теле письма ИЛИ
в одном !IЗ ето ззroлОВкоВ упоминается назваНllе отдела, отравить это
сообщение одному из пользовзreлейотдела. Кроме тото, вы хотите, чтобы
рассылка проекта IinuxRSP отРраltlD!Лась вам по адресу adm@firma.ru.
Создайте в домашнем каталоre Щ.IJ\ьзователя тшl фаllл . рrОСЛ1зi lrc,
примерllое содержание КОТОРОТО показано в JllIстинrе 14.2.
416
rлава 14. ПОЧТОВЫЙ сервер
ЛИСТИНr 14.2. Файл .procmallrc пр.а:sилз СОрТlifРО8КИ ПОЧТЫ
:()
* ЛSuЬjесt:.*dерl
! depl
:0
* AS u bject:.*dep2
! dep2
:0
* Лs u Ьjесt:.*dер3
! дер3
,о
* ЛSuЬjесt:.*LinuхRSР
! adm
Правила О:lначают следующее: если в теме (заrоловок Subject) присут-
ствуt!'rназвание отдела, то сообщение будет отправлено НУЖНОI,CУ пользо-
вателю, I<OТOpl.>!iJ должеtl быть зареrистр"рован !I системе. Вместо имени
пользователя можно указать адрес электронной почты.
Можно выnолнliТь сортировку ПО любому ДРУТОМУ полю. Например, по-
следнее правило моrло бы выrлядеть так:
: О
AFrorn:.* Subscribe.Ru
! adm
в этом случае, если !(То-нибудь IIЗ пользователей вашей СИСТСмЬ! также
подпишется на друrую рассылку на сервере Subscribe.Ru, то вся почта
понадет к пользователю adm.
А т'еперь создадим почтовый автоответчик. Существуют два mпа автоот-
ветчиков. Первые ПОСЫJIaIOт автоответ только на определенllыe сообще-
ния (НЩТрЙМеР, ОТправляют клиенту праЙС-ЛIIСТ вашей орralп.защщ по
ero требовшшю), а вторые На все (например, сообщают, что вы сейчас
заняты, прочитаете письмо тоща-то). Автоответчик нервото nша настра-
ивается при помощи правила
о:
. лsuЬjесt.*Рriсе
I (formai1 r ; cat $HOME/pricel i st,. zip) I sendmail t
А второй тип создается еще проще. Вы не опредеJUlете никаких условий,
поэтому файл info. txt, содержащий ваш автоответ_ будет послан лю
бому оmравителю:
14 'J\J(> 388
417
LINUX: полное руководство
о:
I (forn\a i 1 r; cat $НОМЕ/ info. txt I I send.mail t
Владельцем файла. procmailrc должен быть пользователь rnаП, Права
ДОСТУПа следует установить «600».
Вызывать аreит поставки procmai) можно с помощью правил nporpaMMbl
scndrnail, но сеЙчас мы рассмотрим друrой способ. В этом же каталоrс
($НОМЕ/rnаil) создаЙте фаЙл. forward с такими же правами доступа, как
у . pr.'ocmai lrc. В файле. forward задаются правила пеРСllаnравлеnия
поЧтЫ. Добавьте 11 Неro слепующую строку:
I IFS'' , && ехес /usr /bin/procrnail USER= <mai1:>
Используйте ртостаil с большой осторожностью, потому что ссли вы
неправилыю укажете условия сортировки, почта будет просто утеряна
без возможности восстанО!шеНIiЯ.
Строки файла конфиrурации .procmailrc, которые начинаются с сим.
пола решетки (#) считаются: комментария:ми.
строки, начииающиеся С последовательности символов :0 ИЛII :0:, опред
ляют правила, на основаИIIИ которых procrnail ВЫПОЛН\lТ деЙСТllие иад
сообщением. После СIIМВОЛОВ :0 можно указать опции поиска и IIСПОЛ
пяемый файл, которому будет передано сообщение, Общий синтаксис
такой:
:0 [опции) [: проrрамма]
Опиия Н (headcr') означает, что условие будет применяться к заroловку
письма, а опция В к телу. ОПЦ\lЯ D указывает протрамме раЗЛ\lчать
нижиий и верХНIIЙ реП!стры СИМDолов. ПО умолчанию используется опция
Н, то есть условие применяется только к заroловку, а верхний и нижний
реrистры не различаются. Подробнее об опииях вы прочитаете на тап
страниие проrраммы procmail.
Условие задае"IСЯ С помощью реrулярных выражеН\lЙ. Каждое условие
иачинается символом · и записывается в отдельной строке. Реryлярные
выражения задаются как обычно, а именно:
. Символ л указывает на начало строки, а $ на ее конец.
. СИМВОЛ. обозначает любой символ, кроме CR (lIOзврат каретки).
. Символы 7 и . читаютсЯ KaII: «ноль или более раз».
. Символ + «один или более раз» .
. СИМВОJl I оБОЗllачает лоrи'!ескую операцию ИЛИ : xly х или у.
. [a-z] определяет любой символ из диапазона a..Z.
. [Л azJ задает любой символ вне диапазона a..z.
После условия указывается одна команда. Если первый символ кошн'
ды ,,1», то сообщение будет l1еренаправ.1еио иа все указаtIные почтовые
418
rпBBB 14. Почтовый сервер
адреса, а еслИ «1 », то сообщение будет передано исполняемому файлу
(проrраlМе), который указан после символа 1. Вместо исполняемоrо
файла можно указать переменную окружения, В которую будет записан
результат.
Переменная окружения MAILDIR устанавливается в файле .procmailrc.
Обычно она имеет значение $НОМЕ/Маil.
Кроме перемеюlOЙ окружения МAILDIR, вы можете указать переменные
окружеНИJI SENDMAIL и FORМAIL, которые содержат полный путь к
проrраммам sепdmаil и formail (фцльтр-преобразователъ сообщений в
формат mailbox). Переменная окружения LOGFILE содержит имя файла
протокола nporpaMMbI procmail, а переменная DEFAULT имя файла,
в который будут записываться сообщения, к которому рсосmаil не может
примеюffЬ ни одно из правил.
Для иллюстрации я ПРliведу свой файл конфиryраuии procmail.
Листиt.tr 14.3. Мой файл .procmailrc
PATH=$HOME/bin,/usr/bin,/usr/sbin:/bin,/usr/local/bin,.
ILDIR=/home/den/rnail
DEFAULT=$МAILDIR/mbox
LOGFILE=$МAILDIR/from
LOCKFILE=$HOMEI . lockmail
: О
, ЛSuЬjесt.'Рrivеt
privets
: О
, 'subject. 'Job
I I forI11ai 1 r : cat IhOI11e/den/vakancy. txc I I /usr /sbin/
sendmai1 . t
Если в теме сообщения было найдено слово «Privet», то все сообщення
будут сохраняться в файле /hОI11е/dеп/л\аil/рrivеts. Если тема со-
общения содержит слово «Job», то по адресу отправителя будет автома-
тически отправлен файл vakancy . txt. Файл vakancy. txt должен быть
текстовым это не вложение.
Файл протокола, в который nporpaMMa procmail запишет адрес отправи-
теля, тему и размер сообщения, называется from.
419
UNUX; полное рУКО80ДСТIЮ
14.5. Создание списка рассыпки
Обычно системы рассьUlКИ создаются специально предназначенными
для этоrо средствами: например, идеалыю подходят РНР в связке с
MySQL.
Язык проrраммнровШ!ия РНР,предuазначен JЩЯ создаl'ШЯ веб-приложс-
ИlIЙ и оснащен всеыи необходимьщи для этоrо фУНКЩIIIМII, а сервер баз
naflНblX М ySQL оспешт поддержку базы данных ;lДpecoB подписчиков
и парамстры рассылки. Таким обрa:iом, если вы хотцтссоздать собствен.
ный MailList.Ru, воспопьзуitтссь ТОТОВЫМII рсщеницми илИ НЗПИinитс
собствениое на РНР или Perl.
Однако IIноща бывает ПClllезно создать небольщую рассылкy внyrри одной
орrаНИЗalЩИ. Приведенное далее рещение не отличается ОРIlТИНалыщс.
тью и не претеllдует на зваffllе лучщеЙ системЫ рассылки. Это просто
пример, 113 котороro ВЫ узнаете также, как испопl>30вать стандартную
почтовую утилиту Liпuх maH. Этот пользовательский areиr входит в
состав практически ,каждой, UNJX-сцстеМbl.
ДОПУL'ТИМ, у вас есть три отдела: отдел маркетииrа, цр6u,зводственныЙ от.
дел" аДМИ"ИСТРЩIIЯ. К первому отделу {УТНОСf\Тсяно.лЬЗОЩlТеди nащеl\ C"
стемы mд.ri.па и oleg, ко второму i.gor, drnitry, olya, а к тpeтьeMY
presidel1t, director, sесrеtаr.ПеРIIОЩlчеСКII вам нужно отправ!lЯТЬ
сообщения в один из отдепов. Число ШlJlьзоватедей небольшое 11, возмож
но, отпраВИТЬ сообщение МОЖ\lО было бы с помощью rpупп пользователей
почтовой 11porpaMMbl, которую вы используете. Однако сейчас я покажу,
как ЭЛеrантно это можно сделать средствами Linux.
Создайте файп .mailrc в вашем домашнем каталоrе И добавьте в Hero
строки псевдонимов (убедившись, ЧТо в ващеЙ системе нет пользоватепей
с именами market, proizv и office);
alias шаrkеt m.arina oleg
аНав proizv igor clmitry olya
alias office director secretar
в дальнейщем, чтобы отправить сообщеlше в производствеЮIЫЙ отдел,
просто введите комаиду:
$ mai.l proizy
ПРOl'рамма mаillЮIlрОСНТ вас ввести тему, а заТеМ текст сообще"llЯ. дпя
окончания ввода нажм"те Ctll+D, и maH отправит сообщеиия 110ЛЬЗО
вател!!м.
Бел" пользователей MHoro, использовать механlI3М псевдонимов не очень
удобно. [ораздо удобнее, чтобы проrрамма mail брала список ПОДПlIСЧII-
ков 1!3 какою'нибудь файла. К сожалению, разработчики lIе предусмо-
420
rлаss 14. Почтовый сервер
трели такойвоэможности, однако с ПI)МОЩЬЮ иебояьщоrо сценария мы
можем эту возможиость орrанизоnаrь.
Созпайте сценарий sJ11aile:' n своеМ домашнем Ka1'aJ10re (листинr 14.4).
Листинr 14.4. Сценарий smail"r
#!/bin/bash
DT'date'
echo $DT » log
fQr user ill cat user8
do
echo "Sending message to SU5er
mail $иser ...g Subscribe < msg 2» log
done
Сообщение, которое вы XOTIITe оmравить, запишите в файл П\sg, а список
подписчиков по QДHOMY В строке D файл users.
ПрОI1>амму mail можно IIспользовать 11 для чтения nO'lTbl. Для этоrо
просто введите команду mail. Если в вашем ПО'lтовом ящике есть новые
сообщения, проrpамма выведет на экран нумерованный СЩIСОК, и вы CMO
жете ввести номер сообщения, которое XOTllтe прочитать. Для удаления
сообщения используется команда d <номер> ИJlИ d <диапазои>. Выйти
l1З nporpaMMbl можно, введя команду q.
Проrpамма таН это искJIючитслыю ПЩЬЗ0вательский areHT: она pa
ботает только с вашим локальным ящиком. В npyrne nO'lTOBbIe клиенты
обычно встроен и areHT доступа, забирающий сообщения с Dнещнеrо
сервера, например. pop.mail.ru. Я советую использовать в качестве no
'1TOBOI'O клиента ПрОУрамму kmail, входящую в состав КОЕ.
Эта проrрамма поддерживает несколько учетных записей электронной
1I0'lTbl, в том числе и локальныЙ ЯЩJfК, отправку сообшений с ПОМОЩЬЮ
SMTP If локальною транспортноrо areHTa, а также сообшения D формате
HTML.
14.6. Защита nporpaMMbI sendmail.
Проrрамма smrsh
Однажды неl1звестиый ха\Сер может застаl3ИТЬ ваш sendmail выполнить
какую--нибудь проrрамму. Какая это будет nporpaMMa зависит от ею
фаНТВЗIШ: безобидная команда echo или «rm rf 1». О том, как это сделать.
я писать не буду лучше разберемся, как этою не допустить.
421
UNUX: полное РУКО80ДСТ80
По умолчанию ДJ1Я запуска внеШНIIХ протрамм ИСПОJU>зуеТся оболочка
/bin/8h (или /bin/bash), которая ПОЗВОJlЯет запускать любые про
траммы без оrpаничения. Вместо оболочки /bin/sh рекомендуется ис
пользовать защищенную оболочку smn;h, которая позволяет определить,
какие npOrpaMMbl можно запускать, а какие Нет.
Определим списо!t проrраММ,КQторые можно запускат". Б нето IIОЙдУ1'
пользовательские атенты (mail), аrентдоставки procmai\ и, может быть,
что-нибудь еще. Катеrорически нельзя разрешать запускать командные
оболочки (sh, basb, tcsh и друrие), ПОТОКОIIЫЙ редактор sed, интерпрета-
торы perl, рЬр и протрамму uu\!ncode.
Создайте в каталоrе / etc / 8mr8h ссылки на протраммы, которые можно
запускать:
$ cd /etc/smr8h
$ 1" -8 fbin/mai1 mail
$ ln -8 fU5r/bin/procmail procmail
Откройте файл 5endmail . с f и замените строки:
Mprog, P/Ыn/8Ь, F=lsDFMoqeu9, S=EnvFomL/HdFomL,
R=EnvToL/HdrToL, D=$z:/,
T=X-Uпiх/Х-Uпiх!Х-Uпiх,
АэЬ -с $и
строками:
Mprog, P/us/5bin/smrsh. F=18DFMoqeu9, S=EnvFromL/Hdr-
Fr"omL, R=EnvToL/HdrToL, д"$ z: / ,
ТХ.Uпiх/Х-Uпiх/Х-uпiх,
A=sm5h -с $u
После :нorо перезапустите протрамму send\1lail:
# service sendmail restart
422
rлава 15
НАСТРОЙКА
СЕРВЕРА FТP
СЕРВЕР WUFТPD
СЕРВЕР PAOFТP
УТИЛИТЫ ОБСЛУЖИВАНИЯ
FТP-CEPBEPA
ВИРТУАЛЬНЫЙ УЗЕЛ FТP
ЗАЩИТА FТP
LINUX ПОЛНОЕ РУКОВОДСТВО
FТP (File Trarlsfer Protocol) одии из стареЙШИХ протоколов Интср'
нета ИСПОЛЬЗуется ДЛЯ обмеиа файлами между системами. Обычно
на FТP'cepBcpe размещают СВQбодно распространяемое протраммное
обеспечеНllе, документацию, оБЦО8леНIIЯ протрамм, драйверы И про'
чую публичную информацИЮ. Прl(Мером РТР.сервера может послуЖJIТЬ
сервер ftp, 11 ftp. redhar.. СОlщJ{а,этом сер13ере вЫ можете иайти "ак
саму оперaullOlПiУЮ систему Linux Red На!, так 11 оБНОВЛCl!llЯ ее l1акстов,
а также ДОПОЛНllтеЛЫlые проrрамыы.
Доступ к cepDepy FТP осуще'11!ЛltетCIIС помощью FТр.l<!tиента. В любоЙ
сетевой операционной системе есть простейший FТР'клиент про'
l-рзмма ftp. Обычно ДЛЯ Toro, что бы начаl'Ь работу с РТР'сервероы, вы
должны зареrиcrpироваться на lIем, то еС1'Ь вве(.'Ти имя пользоваТеЛЯ и
пароль. После реrистрации "Ы получаете доступ К своеыу каталоry. Су'
ществуют также общедоступные (аНОЩI/,lНые) серверы, к которым имеют
доступ все пользоватеЛII. Для perllcrpanlIlI на таких серверах обы'шо
нужно использовать ИМЯ пользователя anonymous, а в качестве пароля
адрес электронной почты,
Над фаЙлами и катаJюrаМI1 вы можете производить обычные операЦIIИ:
создание. удаление, копирование, перемещение, переимеllование. Как
праВIIЛО, Прll выполнеНIIИ операции копирования вы либо копируете
файлы!!а сервер (команда put) заrpужаете на сер:вер, тlбо копируете
фаЙлы С сербера на свою локальную мащину (команда get) ска'шваете
с сервера, Работа с FТР'КЛllеIlТОМ рассмотрена в 11.6.4.5.3, а в этоЙ rлаве
я покажу. как создать FTP'cepnep.
15.1 . Сервер WUFTPD
Сер:вер FTP wu.ftpd, разработанный в ВашинrrОIlСКОМ ушщерситете,
очень широко раСПрОСl'ранен. Он устанавливается из пакета wu.ftpd,
вхоляшеrо в состав практически каждоrо ДИСТРllбутива.
Демон in.ftpd МОЖe"I' быть либо постоJUШО заrpуЖеН в память (режиы
stапdаlопе), Лllбо вызыватьсясуперсервером xinetd (iпеtd) по мере не-
424
rЛ1ва 15. Настройка сервера FТP
обходимоCТII. Режим standalone и лрименяется, как правило, если FТP
серперу нужно часто обрабатывать запросы клиентов, ВтороЙ режим
используется в целях ЭКОНОМIIИ памяти, Korдa наrpузка на FTPcepBep
Не очень велика.
Чтобы запускать сервер FI1' юпод супердемона, добаnьте в файл inetd,
сап f следующую строку:
fcpst>;cam tcp nowait root, lusr'/sbin/tcpd ln. ftpd l a
Таким образом, PTPcepBep вызывается не напрямую, а черезТСР-wrар.
per, чем обеспечивается ДОПQJIнитеJlьная безопасность, Если вы исполь'
зуете сулердемои xinetd, описание FTPrepBepa должно выrлядетъ так
(локтянr 15.1).
J1ис"tинr 15.1. Фраrмент файла xтetd.coпf
ger-vice. ftp
(
sockettype stream
wdi,t = ПО
user = root
serve'r ;;;- /usr/etc/ iп. f,tpd
SE.>rver:.....args ::::
instatlces 4
logol1success
logotl.fa i 1 Ule
accesstimes
+ DURNrlON USERLD
+ IJSERID
2.0D8:S9 12iоD2з.59
nic:e
)
; .10
Ключ I реrистрирует все сеансы FTP в службе syslog, Друrие ключи, с
которыми можно запускать FTP'cepBep. перечислены в таблипе 15.1.
Ключи КDМЭНДНОЙ С1Р(Ж» серВера wuftpd Та6лllща '5, 1
I<пооч Ha3HaeHM.
.р 3апl'l1;:ывавт D1'i1ВДО4'НУЮ Io1НфОРМЭЦИЮ В журНa/I $\,sl1J
-, РеrиtТРиРVВТ все FТP'Cea.HCы 8 ЖVрнаfle sVI[)g
-L Реrистрирует 8 журмаl1е syslog все команды. отпраsлеН'ooIе серверу FТP
Устаffa611ИВаеТ rlрl'lДеn i1ремени Q)I(lo1дания i1ЛЯ пщ;сис,НbI)( 1(f1иеНТЩI
.tсекунДЫ (по умолчанию 15 МИ'i)'r). Если эа этот праме.жyrок времени ОТ j(,Jlи&нта
не rаJCf)'пиr ни ОДНОЙ КQМRИДЫ. ТО F!P---<;еВнс t:eepeepOM будет разорван
Т<;;екунды МаК(.Iмапыю ДО'nустимое время CfI!1HCa FiP. (n.о умолчанию:? Ч3с.8}
'. РаЭРttl.!Jэет ИСПО11.ьзоrx1НlAе файа.lCанфиrypации ftpa\.ces;;:;
.А Заnрuщает ИСnljnьэоваие фаWiв ко,.фиryрациt.t .ftp-1lcr.'$,".
ЭТа опцИЯ y<;iI'lHt"Jt:lneH<'i по УМQЛ'НlНj.!1Q
-1 Реrиt;.трир\,ет е. )4I;урнале xferlt1q файltbl. получE'lkные сереероМ FТP
.о РеrИi::трреr 8 Ж:УРНt!Ulе xfrlog' файлы. переданные серевром ео bpem$lCE-анса
425
UNUX: полное рукоеоАСТВО
15.1.1. НаСТpQйка WU-FТPD.
Конфиryрационные файлы
Сервер wuftpd использует пять файлов конфиryрации:
. /etc/ftpaccess ОСНОJ\Е!ОЙ файл конфиryрации;
· /etc/ftpl"JQsts файл, позволяющий запретить ДОСтуп к wuftpd с
определенных узлов IIЛИ определенным пользователям;
. / etc / ftpusers этот файл содержит список локальных пальзоШl
телеЙ (заре,'истрированных на сервере), которым запрещается взаи-
модействовать с wuftpd;
. / etc I ftpservers позволяет задавать и использовать раз.'lичную
конфиrурацию FTP-сервера для различных узлов;
. /et.c/ftpconversions определяет типы файлоu архивов, "о""
торые будут lIспользоваТЪСI! при сжатии (врХЩ'проваНlШ) crер,:ща
ваемых данных. Само тщ! щ,лючается и выключается в ф;.Iйле
letc / ftpaccess.
ОоновноlI фаilл ftраооеss.Директивы оервера WU.FТPD
в этом файле содержатся Дllректпвы, которые управляют правами дo
ступа и реrистраЦ/lеЙ пользоватeJtей, задают параметры ТСРIIР-взаи-
модеЙствия, виды реrистрируемhIX событиЙ, используются дш! КOIlфИ-
rурирования aHoHIIMlloro доступа к FTP-серверу и Т.П. Пример файла
/etc/ftpaccess приведен влистинrе 15.2.
Листинr 15.2. При мерный Файл ftpacceS$
class all real.guest.anonymous
*
email root@localhost
loginfails 3
readme
readme
README*
README*
login
cwd:;;.*
шеssаgе fwelcome. msg login
message . message cwd=*
compress уеЕ all
tar yes all
chmod по guest,anonymous
delet.e по guest, аnоnуmоиБ
426
rлава 15. Настройка сервера FТP
overwrite
rename
по
по
guest I аrюnуmоus
guest, anonyrrlOus
10g transfers anonyrnous,real inbound,outbound
shutdown /etc/shutmsg
passwdcheck rfc822 warn
Директива class определяет класс пользователей, которые будут иметь
доступ к серверу FTP. В примере 11.3 задан класс all, который состоит
из следующих типов пользователей: настоящие (real). rости (guest), ано'
нимные (anonymous). Под настоящими пользователями подразумеваются
те, которые зареI'J1стрированы на сервере, то есть иХ учетные записи
хранятся в файле letc/paS8wd.
С помощью директивы email можно указать адрес администратора сер-
нера.
Директива loglnfails задает максимальное количество попыток реrистра-
IIИИ. Если это количество превышено, пользователь автоматически будет
отключен. Значение по умолчанию д;lЯ этой директивы равно 5.
Директива message определяет фам и событие, Korдa он должен быть
отображен. Например, можно создать несколько файлов, один l!З которых
будет отображаться нри реrистрашш пользователя, а друroй при входе
ero в опредеJlенный каталоr.
Директи.вы chmod и delete определяют, MorYT ли пользователи исполь-
зовать одноименные команды FTP. А директивы overwrite или delete
разрешаюТ или запрещают онределенным пользователям переззписывать
или удалЯТЬ файлы на сервере. В припеденном нримере пользоваТели
классов guest и anonymous не мотут выполнять НИ одну из УПОМЯНУТЫХ
операций.
Общий список директив сервера WU-ftpd перечислен в таблице 15.2.
.дирекrnвы сервера wu..ftpd Таблица 15.2
AмpeI{fМ8a Описание
autogrobp ИМЯ rpynnw арешает ДОС1)lП tlhОНИМI1ЫМ попьэоватеЛМ ооре.деленttых IU!ЭССО8
.имякnас.са [...1 IC файлам. OTopыe примэ.дrtЕ!Ж8ТК уr;аэнно rpYf'1ne
Co:maeт ПсевдонИМ ДЛR кп-ranоrа на FТPcepPope. Псевдоним ПОЭfЩ
.а.. псеВАОНМ r;алоr ляеr быстро (ук.аэas только псеВАОНИМ) переП1 е. соответствующий
ему кaYlU10r из 11I0боrQ ApyrorQ К6ТаlЮrа НEI сврВtфе
Указывает кaTMQf, который будет ИСnQltЬ30ВаТЬСR i:\ .:ачеС'Тu l<орнееО 4
ro ДJ1A эаде.нноrо Кl!:Цсса ПQщ.зоватвле. посла УСflеwиой. РGrиетраЦИИ
.nonymous-root kВlТелor noпьзоsа:rеля на пРо{;Elрввре ОН 6е.roМаТ"Iвски I10паде-т в СОО1Вет-
["МЯкI1а(:i::Ql 1"8УIOЩИЙ е.О КЛассу кarlUlOr. ЕClJИ имя КЛ0.et:а Не у-=взано. то данная
ДIr1рекrиВ8 будет задавать KopHe9 lI:В1аЛоr дпя анонимны)! noпb30Ba
-Теl1'ей. д11 KQTOPblX Корне80Й to;ате:Щ'Jr ие опредвлен fJBHO
427
, . .,OI ,,
LINUX: Полное руководства
продолжение табл. 15.2
ДИр8ктме8 OnноанНIII
banner /аБСОJIIОТНЫй/ Перед реrистрацие ICли&н.а ему будет "оказано сообщение Н3 yJШ-
пуtt;./К/файлу 3Вl1tюrо Фай.rщ
УстанаВf\ивэ.е'f сrpвничиние fia опlotчес1'ВО переыл.аеМО информа.
LU1И в байтэх цлq попЬ30В!:'IТЕ!nей YlCa$Ii>tHoro класса. Если ИR t:J18Cce.
bIt-llmJt lraw) in I out нв Уl(ззаtъ, 10 цаННЩ1 оrpl.lничвние будеТ ПримвНЯn'СR 1<0 9C(tM поль-
:.!оеаТl1l1ЯМ, дnя t<ОТЩ:И;>IХ оrрзничение На укаЗ8НО A.Stio. Нео6яЭiПli!пь-
1 tQ1a1 маItСI(ОЛбйй't ный щ\рамеТр tIfIiI ПО380лltет оtрl1ИЧП1> SЩ:Ь (Jбьем пересыnaeМой
IИМЯкllасса] информации (е том ЧИСЛе и спужебной), а не ТОЩ,i<О пврвсылаемых
фаЙ/lОS. 3наЧI!НИl'ftn,оut, total yt:азы6ЭIOТ nQTOIC даННЫХ ()-13 СЕРеюр,
ОТ С&РВQрэ-м1tк_оба.о.,а.ноеременно). пoд.n учеТу
Соэлае1 KMCC-.ПОЛЬ:I088Т&лвй (: У'ЦIЭlЩМЫМ- именем. В KfNeC1se п.па
fЮЛЬЭQвз'rв,n&й' спQl1i1.3уюТСЯ !U!Ю'i&sые cпasaanonymous (анонимнЫе
пользователи), gumlrOCТ>flBbIe пользователи) и n:а} (зape.h1стриpouetl.
ные nолt.308аТЩI-I1).:ticI1И укааЫ8йI1!ТсЯНескоJ\bКО Т)tпоа тосжи П
ляются чере-э-Пя-PJ!Q без про6е110В. В fJo.nесаj'злоа Y1«iВ8JQroR
аДРеса уЭЛQQ, flQ!lьзos.НелИ TObKO G l<отОРыХ 6Y,qyт Пptlll'lвдм*aтiI
clau ИМR","ас(;<'l данному КtlQщ:у,СМВ"11 3EJtп.ДI)ЧК" ....... -оэначавт все уэпw. Адре.;а уама
типы пользоваrелей MOryт укаЗblва'fься В ВИде oOДHoro из следующих формаrов:
адреса У3ЛОВ . IP.aдP8(;:. О:тдеnьн:й Paдpec.
. IР.1!ЧU».е:масЦ.сети,
. IPaдpe<;/ddr. 'р-вр,рес с МСКой СIDЯ.
. ! rwd . y ",roro ;1jЩj.тlфi'1111:ПOpii nриеодит ICТYДQ-
стум со 9се)( иt.tен.а: It01фЫХ не удаетс:й fЮ1JY'МTh от DNS-црвtфQ-.
. jммяф.п УКQЗ8ае:rсl'! абсолтное IIIЯ Tel(CТOBQro фама, е
"О1'ором.содri::R cnl'lcolt IP--адреCQS (по 'одному 8 _строке)
cdpath I::.атnлоr О11редJ3'ЛЯ-ет .цiт ',Qi1'Bi:oI edpath аыpsjt:ение, t: riомQщыо I!;OToporO
эадаеttм "у1'Ь ПОИ(Ж$ при пере)(QДе & УI(...зl)ННЫ I<З.Тatloi
com9fes8 ')19'$ \ по Р(!,зрешае1" И з-аПРGщает сжатие дaныx Пep;iдотпраакай (OМ8HДf!!
ИR ICfIQcca eompПt$$) дr/-Я :укцзамНQrо КJlессЭ; ПDlIьэооатеnei:!
defau'hervet pПvate 3;апрещnМ- i3HOi#II.IJHt>ti; доступ" СерЕЩРУ'
ЗаПРЕщает AOC1Vn ti: серэеру ДjlЯ У':"ЛОfJ G D.мн.ыми а;дреСdМИ. При
этом будвт arQepЦe'fQ сообщение f.t3 файnс.ообщения. Anро:!С6 ЭJ1DВ
MOtyт YIia3t>1f,Jsf1:,Qq:_Q е.Мо t;JДноrо из С1\f;lДУЮЩI1Х формцтое:
dепуадресаj'ЗЛОВ . IР.8ДРес
/пvтЬJ.:/файлсообщенWR . IР.адрее:м'IС8ТИ
. IР.адркJcЖI-
. tпаm@"tvtИf
... IM"'R фай1ia
emall адрес почты ПQЧ'Т'ОI;\t>lЙ адрВс-it,w.tицисrратора ClilpBl;lpa
1Uelimlt [raw} in I оы! Уurамавливаеr оrpанИЧ8ние на коllи'шc::тв(l nepecblllaeMblX: фВР--ЛОI:'IД11Q
tol.<l/ коnичеСПlофffi11!ОВ ПОf1l,,:ЗО8i!oтеneЙ)'dlIOJoUolоrо ЛQ.сса. П1:tрамIПРtl.оnмчф
[ИМЯk!lасс:а1 и задаеr O ДОПус-tИмоп r;QJlичеС"r90 файлов. $"'8чекие
OCTMbl-lblХ порамет-рое такое Же. t.:al': и ДlISI. директивы Ыtlimit
guea1gtOUp ИМЯ rруппы Всем ПОЛPl.тrвJ1RМ. рхоДЯМ е rpynny с уквзанным vtM13HB/I,I, будет
[ИUR rpynnhl I рА;)рRЩР.foI rcтQfl.ol.\ ltQt:Тy1"l !о.' t':i'!PIi!"'PV qp
Orpa-НI'l'ше.ае1 'tксло одноврщ"tенжз рвБQтаюЩiot< nOfil:i3OватеЛе. при-
tlmlt IIIмкласса надлежащих (З.33I1Ному классу. 8 onpeдenefolae времА C)'I"OI(, ntфaМfl1"р
м;:н::симум nерi.ЮДbl- MaJU:.ММYМ ;;ItЩeeТ мах;СИМa.f\bl-IО допустимое KC1'BO OДНOВpil;M8H11Q
фаЙI'!.сообщвНИfl раб0т4ЮЩИХПQl'1ьзователеl4. Пвраметр hepМoДIII задает вреМ9жые ин-
f.epвaпbl. Клиенту, которому э.snрещ.ае-тся дocтyn к F'ТP-cepвepy е резуль-
тате дейсr&l ДаННОЙ директиэы. &/Ает ПО1Q1Зa!-40 t;ootSще из фaйflа
Оnредел!"еr МО1k:СИМllпЬНое <;"I-'tС1l0 8yдa<fI:<I)( nOnblTOI( реrnсrрации
loginfailfl 1("000Ш"'lЕ!СТВО nОЛЬ3()8ател, nаt:;лв kOtOPblJO; 0/1 будет оtIU1Ю'lен. По уМОflчаtll'l'1O I(ОЛИ
'Ч(:!сТ"во ПОПЫТОК pao 5
109 cortlmands РвrисrplllРУ8Т е ж.УРtШ.л;;! К:OMQНДЫ. КО1'орые еводИЛlо!СЬ f10f!ЬЭQsатвIlЯ""J.t
Уl<аза'НbiК: ТИn'ОEl, В l(a"'-еСrВQ 'I'n08 поJ-tЬЗ0еЗ1елей указЫ8aiOrс клюЧе-
'l'ипыпольэоаателей 8ые ИJQВа anoI1YP1OU$ gUe'$I, real
428
rлава 15. Настрой.а сервера FТP
продолжен»е табл. 15.2
Дмре-тм8<f;1 OnМс:а....е
РеrИl;-fР"'РУ1Т 8 Ж'iрапе neрвдчи файлов nощ.зоватеЛf!МИ yt<s.
юg transfera типJОIlЬЗО- заtiных ТиПов. В Ka'.ecte(! rf'lnOP паЛЬ30f.!GТо.лсй УКВ3t.1IЮЮТоf! lU1щоые
IЮrепей списсжнаправ. слова 8nonymoul. 9U8.t, ,.81. В попе спмсаlC:напралени 38Д8eTCfl:
nI1Ий аnраеl1ение n:вреда'4И, nQдлежащее протоколированию: iпЬочnd
tахоцяе ФаlJ.l1'Ы), outbound (ИСХОДЯЩиo!Jo). Если YJ::ООываIClТЯ оба мв.
прамеНИFf; 'То ани долж:ныбыtb разделены эаnRТОЙ без пробепа
Отображ.аеТФ8Alr..,;,t»Oбщ.eнкR 80 8р.емя.рerМстраМ или пPtinерехо-
m.ssag4J файлсообщt1 де 6 пруrой Kl9lтaпor. Co()1eerCf8eMI'IO аЧl)нИQ в пале А8Астаие мажеr
НИН деr;:т5Ие быт!> либо LOGJN (реrИСТРiщt1) ИЛИ СWD=крталor (nереХQД а KSтaIlQt).
Запись CWD"'. мдает ЛlO60Й Ка1алсr
поrеtrlе [ClasS""I1M" Запрещает ПОny'j9ние y-J:8Э8I1fo1Ь1); 8 Cf1иеке фаI1ЛО9. Если yt(ВЭ4 пара-
пассаl CftИСОj(ф8йrtав метр cЦaS$, То Э1'М .3ЭлреТ pacnpOCTpBH!:Ie1CA ТОЛЬКD на ПDiНa:.J{lво.твJ)ви
эаданноrо JCла-сса
ВО bpeмli р.еtис1'piЩИи ИЛИ njJY! cмet';4i II:цro.tюra noльзоватмtt nМучw
readme файл деЙCПIие ссюбl.ЦфlИe CI ИИ и вpeмetwl мо.аиФИI(8.ЦМИ yкaзaнt1C(O фeJtna.
Параlolетр Д8Йc:тIIМ& IщрОД8J1яеroя так же, J(,v;r,: j.1 в дире.ктиве тeмoage
Разрешает 'Или Зi!;nещает мСпользОМНI!IО комакДы tar- ДfJtt.Уj(Qзвtiноrо
tar yes I ПО ИМ<:t\(J1асса класса ПОЛЬЗО8атепей, то eCT разрешает Иl1l-1 запрещает арХИВИpQsа-
нив фаЙЛО8 архиватором tar перед И)( переСblЛJ(ОЙ
VlrtUal адРеС РаЭа8шв&r испоflЬЗО8анив 8иртуаЛьнаrо FТР'-узnа
"
Кроме общИх диреl<'i'Ив, сервер wu"ftpd имеет директивы, которые управ-
ляют оравами доступа. Директивы прав дocтyna определяют, какие ОПе-
рации мосут выполнять пользователи TOfO или иноrtl типа. Эm директивы
перечислены в таблице 15.3.
Директивы np8.BAdc1}ina
Таблица 15.3
Диpeцtt В III "aa'ttjl""e
chmod y&S I по РВi!lрewаОl"и.nизапрещает е.ыnОJiН'А1'j..kQМaнШ chmod ;цnяпопиоМ-
Т;.1ПЫnQl1ыюватеnей телей vказанНЫIC ТИnО', В качестве rипо flМI:oЗ.o9Э.телщ71 У.!UJ:Эbl,ЮТCR
КJtlO'fet!ble CJl'0fI2JI anqцymOUIi, gЩtsf, ,.,.-
(felete уев t по Pa.1pebl;!iei и1i 3iti'1Щее1' йЫПОI1НRТЬ 'lCо.мэндv dlete МRПciль-Эомтелей
Тl.1пыrюль.эоsателей УII:а.з.анных: ТЩ'6
Qverwri!e увэ I по Р8:зрешавt иnи запрещаеТ пОЛьзаlШ'(в-IIFIМ УК<1:ЭаН'НbIX типов пере..]аnИfЬ/.
TnЫ поnоваiепей ввТЬ ф8йnы НЗ сервере
rename yes I "с) Разреwет 1ItJ1.И запРIi!IЩВет ПОЛЬЗ0ва1еляц )'КЭЗilНi-ц:.lХ n'f1Q$ ПереИМ0"НО-
ТЛЫПОhьзоей ebl8a1D файлы наliIере
eT YPQl;I;eHb прщрQl. n'pQI1'R.. пр", :ПQМЦ аЧесt1JS nepвoro пвраме
трЗ yJ:8.эыезеТСI1 метод провер"м паром: .
. "ОМ оТКJtюч.е,В1 npoeepl<.Y "apo;
. trMal Elсе мpon должны о!5R:зателы1О с.ОДGржать СИМВОЛ 'О';
.:tf..- B..'{М n<\pQлеЩ)__QaТ,IЩp.,_fXlН"
Pr!bcti8J:li нp.,,,.Ы. ;tаА6JЩ,t,1Ь1ta сoma,.С'ЩНДЩ)iY ЯFсе22_(IС.М'itO
tfc'822ItrМa!lno,e исiюль:эoеаn.'Име-нНо !!JТO З+J8ЧEtмиаf,.. .
Вторым nараМеТроМ ;jeдaeTC: деЙСТ!lИе, 1(OTOPOiOl ДОI1ЖнО nplWl3Bo.
oenforcelwam ДИТЫ:Я 9 'е)!: {;:ЛY'f8.RХ, КOfП$ nОllьэоеател'Ь 8"eДT М@(lра8!А,Щ.нI.IЙ парощ..
Значение _atn (ое.оркт о ТОМ. что ПОllьзоваТSIН. просто будет Проино
форМiotрооон об ошибl(е napQJ19 и далее ему БУДЕТ позволено эаНQlЮ
зареrмстрировз.ться на FТP-cepeepe. Еслlo1 }l1C.8эан, зачен", iМ\force, то
nОI1ЬэоеЗТеmо будет еыдана СОQl)щен.,е 1) неnравильНQм napOnQ и ему в
даnьнешем будеr запрещен доступ к серверу
uptoad уез , по Разреwает ил... э.щрещае-т Э3I1iЗЧк-,. фа'trtОВ на сер81;1р flQЛЬЭОват&лям
"fИПЫ nal1t.:J{)8e.Tel1e ytt.aз.знмы); тИПОВ
429
UNUX: попиое руководство
Файп ftphosts параметры доступа
Дn<l пользоватепе" с указанных узлов
Файл ftphosts используется для разрешения или запрещения доступа
определенных пользователей с указаl!НЫХ узлов. НаlIРllмер, вы можете
разрешить ДОСТУII пользователю admin только с компьютера admiп.
domaih. ru и запретить со ВС<1Х остальных. А для друrих пользователей
разрешить доступ со всех компьютеров. Таким образом, в файле мшут
быть записи двух видов: разрешаЮШltе и запрещающие. Формат записей
в файле ftphost s следующий:
a110w I deny пользователь узеr. [узел...]
Разрешающая запись allow разрешает пользователю реrистрироваться
с узлов, указанныJ\ в списке, но запрещает реrистрацию со всех осталь
ных. Запись deny, наоборот, запрещает ДОСТУII с оlIределенItыx узлов, но
разрешает со всех осталыtх.. В 1lИстинrе 15.2 приведен ПрИМер файла
ftphosts.
Лис-rИllr 15.2. Пример ф""fI" ftphosts
allow adrnin 192.168.1.1
deny user 192.168.1.2 192.168.1.3
Файл ftpusers список покапьных пользоватепей, которым
запрещено пользоваТЬСА WUFТPD
Файл lexc/ftJ;>users содержит список локальных пользователей, KO
торым запрещается обращение к серверу wu.flpd. Эти пользователи не
Mory-r зареrистрJlроватъся на сервере. При попытке реrистрзции будет
ВЫtlедено сообщение об ошибке Login Incorrect, даже если подьзоватедь
ввел правильный пароль.
Из соображений безопасности этот файл лолжен содержать хотя бы имена
пользователей rool, Ып, nobody. dэeтоп. news. uucp. Пустые строки, а также
стрОЮI, начltнающиеся С сИМвола #, lfI1l0рИруются. Полностью корректный
с точки зрения беЗОlIасности файл представлен в ЛИСТlшrе 15.3.
Л\1СТ\1нr 15.3. Фа"" ftptlsers
root
Ып
аdrn
1р
sупс
shutdown
430
rлаеа 15. Настройка сервера FТP
halt
таН
news
ииср
operator
games
nobody
Фам прзеТУеrз разные настройки ftp-сервера
дnяраапичныхyзnов
По умолчаШIЮ настройки wu-ftpd ПРlIменяются ко всем клиентам, под-
ключающимся к нему. Файл /etc/ ft.pservers позвОЛЯет задать режим,
е котором ДJIЯ определеШiЫХ узлов будут I1римеl1ЯТЬСЯ свои индивиду-
альные настройки.
Файл /etc/ftpservers состоит из записей следующею вида:
IРадрес(или имя узла) Каталоr
Если какой-либо пользователь подключится к ftp-серверу с одноro из
указанных в файле узлов, то для Hero будут примеllЯТЬСЯ конфиrураци-
Оllные файлы /IЗ соответствующеro каталоrа. Например, если в файле
присутствует запись 192.168.1.2 / etc / ftpd/user3 4, то при обращении
клиента 192.168.1.2 ДЛЯ Hero будут использоваться конфнrураЩlOнные
файлы из каталоrа /et:c/ftpd/l!Ser34.
Файп ftpconverslons форматы сжатия
в файле /etc/ ftpconversions задаются форматы сжатия, разрешен-
ные ДЛЯ использования во вре/,(я сеанса РТР. Обращаю ваше ВНllмание
на то, что само сжатие передаваеыbIX данных включается и выключается
соответствующей дирекТllВОЙ в файле ftpaccess. Стандартный файл
ftpconversions представлен в Лllстию'е 15.4.
Листинr 15.4 Файл ftpconversions
,.z, ,/bin/carnpress d -с %s;ТREGIТj\SСП:ОUNСОИРREss,\JNСОМРRESS
,.Z,/bin/coтpress c %s:TREG:OCOMPRESS:COMPRESS
"gz: ,/bin/gzip cd %s,TREGITASCII;OUNCOMPRESS:GUNZIP
,.gz:/bin/gzip 9 -с %s:1REG:OCOMPRESS:GZIP
: .tar,/bin/tar c E . %s,TREuITDIR;OTAR;TAR
,.tar.Z,/bin/tar '0 -z .( . %s:TREGITDIR:OCOМPRESSIOTPR:TAR'COМPRESS
, ,.tar.gz'/bin/tar c ' ! %s:TREGITDIR,OCOМPRESSIOTAR:TAR+GZIP
431
LINUX: полное рУКОВОДСТВО
Каждая запись этоrо фаЙла состоит из оось"и полсй. Поля раздсляются с
помощю символа ДRоеТО'IIIЯ. Эти поля содержат префиксы и постфиксы
удалеиия и добавления, внешнюю команду, тип операции и описанИе.
Например. ежатый проrраммоЙ gzip файл 1Jолжен иметь имя с суффик-
еом gz, Чтобы к именн фаЙлз был лоб38J1еl\ СУффl'КС gz , запнсь в файле
ftpconVExsioHS должна HleTb ПОСТфИКС gl.
Файл xferlog журнал FТP-cepBepa
в файл xferlo\'1 записьшаются нсе тран'ззк1П1И, которые были произвс-
дены в ходе сеансов работы нолзователей. С помощью ключей --о и i
сервера FTP можпо выбрат тип траюакниЙ. записываемых о журнал.
Рассмотрим ЛИСТИ!{l' 11.7, в котором IIрсдставлен фраrмснт фаЙла
xferloq.
Листикr 15.5. Фраrмеl<Т фnйла xferlag
Wed Jап 9 11: 4 9: 3') 2002 1 'LосаlЬлs::.. localdomai,n
home/dell !VТl1Ware. htrr",l i'.J. о r den ftrJ о * с
Wed Jao 9 11:50:0B 2002 1 locd.lrl05\:.localdomaii:l
hоmе/r.:lеll/т....Оllt d .:) r de!l ftp () ' с
Wed ,.Jan 9 1.1.:50;1'::, ;?002 .1 local.r--lo3t..loca,lciomain
home/;jel1/N.ott а .i 1 deH flp О .,. с
Wed .Ja!1 9 llS,2;Ob 2002 1 loci:ill-,(Jst::..1ocal{lomain
rютеidеп/flрhоsts .ht:шl Ь i r dоп ft_p О '" с
1490 I
28" I
281 ;
888 I
Из первой записи ВИШЮ, '!тО пt\лзователь den был зареrистрирован с
улаленноrо узла lосаJllОst.10саldопшiп. Начало передачи файла П'lOmеl
den/vmware. ht!IЙ проюorшю В среду, 9 ЯlIваря 2002 rода 1111:49. Общее
IIремя передачи oДlla секунла. Общий объем переданной информации
составляет 1490 бай.t.
Для передачи файда ИСПОЛf,Зовался режим ASCIl (а), не было ПрОИ3ВедеlЮ
никаких специальных операций С). Файл Vffi'"",e. html полЬзоваre,lЬ
заrружал с сервера. На что указrвает напрамение передачи (о). Поль
)ователь <ien Яf\Jшется зареrистриронаНIfЫМ пользователем системы (").
Символ g На этом месте означал бы rостевую реrистраНIIЮ, а символ a-
анонимную. Название службы, которая проюводила операнию ftp.
Тепер расемотрим четuертую заШIСЬ. Тот же пользователь den переД(\JI
На сервер файл ftрlюsts ,lltml, Напраl.ление передачи на сервер (i).
Режим передачи дlЮИЧllыii (Ь), Вторая 11 третья заllИСII сообщают о
заrрузке с сервера 11 На сервер файла "'. o"t. В текстовом (а) режнме.
Остается только отметить. что файл xtel1o(j используется обоими cep
оерами FTP wu-ftpd и ProFTPD.
432
fпaBa 15. Наотрой.а оераера FТP
15.2. Сервер ProFТP
15.2.1. Установка и запуск ProFТPD
Альтернативой, и, на мой взrлял, достаточно хорошеЙ, серверу wu.ftpd
является сервер ProFTPD. Он намноro проше в КОНФИ1'Урировании, чем
сервер wu-ftpd, и обладает достаточно rибкими возможностями. Для ero
УСТЗНОВ!\}I достаточно установить пакет proftpd. Полобно серверу wu.
ftpd, ProFTPD может запускаться аDтомати'Н?СКИ при .запуске системы
IШИ выьlватъсяя СУПерсерnером ПрИ наличии .запроса на y'CTIJ,1i()By со.
еДИНЩПIЯ. pBep ProFТPD Может ВhlЗЫЩIТЪСЯ с l<Лючами, УКllзаlIНЫМИ
" табл. 15.4. .
ПеР<iМUТlJЫ cePtJepa. ProFТPD
Тu6лнца 15.4
КЛ"'"' Назначение
-t, СправочнOIЯ ИМфОРМЭЦИ-n
.п Эапускаетсерsер s автономномрежИ'мв, Дnя эт-оrо а-файле конфиrypa.
И НУЖIolQ 'УJ(i;lааfb,ре:жим зsl1Yска standafone
d уроэеНь ОТJ1аДIШ Уerамв.лИ9ает ypOBel'lb оrni'Щj()oj се-рмра <1 .:5)
c фай:пконфиryр$ЦИИ ')адает ИСnЦ;Ь)ОDаИilе ilЛ4Терliапшносо фаiiлв- '"ОНФЮУРi'ЩИИ H(I 1<1'3""
!1.зрти{)ru 18\:'';:: /proftpd .o;l:>nf
Эапрвщает (О) lo\1tи разрвшавт Р) исnощ.ЗОООtiие посrояноrО'Пi;lроЛi;i.
-ро 11 ДnJ.1 ПОfJучем\.!<я БОлее naдробной иНформации СМQ1'рите ды:умеm'3ЦИЮ
по серверу
., ВЫIIOД\ll.Т CnИС;О!< ЬсеХ,моДуЛеЙ. ()fКОмnИ/lированныJt ДЛЯ иCnОЛblJова;IИЯ
cepseJIO:M PraFrPD
." ВЬ!вомт 62РСI1Ю
15.2.2. Настройка ProFТPD. Файл /etc/proftpd.conf
Сервер ProFI'PD исполь.зует Bcero один файл КОНфl'ryраЦИll /etc/
proftpd.conf.
В листинre 15.7 пред ставлен простейший файл конфиrураllИИ сервера
ProFTPD.
Л"стинr 15.7. Прим<>р файла КDнфиrурации !etc/plDftpd.conf
11 Этот.файп уста.навливает ОДИН сервер и одну учетную запись
ServerName 'Му ProFTPD server"
ServerТype standa10ne
DefaultServer оп
11 ИспользуемстаflДартный порт
Port 21
4ЗЗ
LINUX: полное руководство
Uщаsk 022
Махlr:stаПСifJS 30
# Попьзоаатепь и rpynna, обслуживающие сервер
User nObody
Group nobody
# Параметры КОрН8Боrо каталоrа. Блочная дирекива Directo,
<Directory /'>
# Директива, определяющая парамер AllowOverwrlte
AllowOverwrite оп
</Directory>
Директивы коифиryрации делятся на две ,руппы: директивы, определяю
\ЦIIe параметры, J{ блочные директивы. ВЛО'lНые диреКТIIВЫ конфиrypиро'
вани.. похожи иа тэrи язЫка HTML: конечная директива имеет то же ИfЯ,
что и начальная, но с наклонноil чертой в начале. Например, начальная
директива <Directory /* >, а конечная </ Directory > (листинr 15.i').
Действия каждой пары диреКТlfВ распространяются только на БЛQК, рас'
rюложснныi! между ними. Директива <Directory> определяет свойства
какоrо'нибудь KaTaJlOra. В вышеприведенном листинrе определяются
свойства корневоro каталоrа.
В таблице 15.5 представлены все директипы файла КОllфиryрации сервера
ProFrPD.
ДМ'реICtИВЫ файла КQнФиrypaции cpBepa P(oFТPD
tа6тща !!i.5
Директива Описание
Oтgeoe сообщение, которое будет отправлено полъзова-
AccessGrantMsg сообщеНО1е те",о EI СЩ'ЧЩll ero р(!rViстраци "IJЩ nt;I)1vчеНИR aMQHMHoro
Дocтyna. СИМf!сты %u БУДУ'f зме'iе.IЫ н..". ИМ'R ПОЛь301U11'еля
1(оторое ОН 8en пр., реrlo1страциl'l
A/low from alj t host t Ис.rн'}льзувт- 8:tiy1PH блокв Llma. Оrраиичиеаеr Дocтyn
networi( [,hostj пetwork[, ..,]] к сере_еру (а имеl"НО, разрешает доступ). По умолчвН\IIЮ
uJlow from 011
AlIQwA1 Разрешает доступ 1( блокам Oireclory, Anonymous, Umlt
Раэрешаеt клиl!н1)I ук<.t:!ывзrь при устанОВке соеДинениЯ
AllowForeignAddress оп I off адрес, I<UfОрЫЙ не соотеетствуе1 MY, По УI.lОflчаН\-I1O off.
МоЖ(ft ИСnОl1ЬЗОватьМ в блоках VirtUBll'4os., Апоnymоцs,
<Global>
.
AHowGroup СПИСОJрупп Р.зрЩ1,lаеr ДI)СТУП оnределЕ'ННI;.IМ rРУnЩIМ Испольуетс
в блоке Umfl
A.tIOWUset С"ИС{)"ПОj1Ь30МТt!леЙ Раэрешет ДО!Лу(1 опре-делщНым flОflЬЭQ8ателяМ. Ис"опьзу
ется b-бriОlCе Umп
Требует ПSPf)ЛЬ при Sl-10;.J"'МНОЙ реrистрации. Паро,т" допже"
MOr1RuquirePasswol'd 01' I off соsПад.аТЬ (: ПаропеМ -roro ПОllьЭ'ОЬотеl1R, которЫЙ заПустил
демон. По умоiiчаtщю oQOHr4ii опция выключена
<ДПОПУn1ЩIS directory> Создаст аонимную ,"iIЭ-ТНУЮ запись, dlrecfcuy КорневоЙ
KaTaJ10r a.HOl-!iIIМНОrО сервера
MthGroupFite nytb ПОЗВQляет укаЭi30'ТЪ пуп. к алыерн8ТИ8НС)МУ файлу grOUp.
ПО УМОЛi.lаfoiЮ ИСпО1'\ЬЗУ&l'С" файл l€otc/9rOjp
434
rлзва 15. Настройка сервера FТP
Продолжение табл, 15.5
ДиP*«f'tt.. Оnиca......
AumUserFlle путь Vl\aablвae'l' альтеРI1в.тивны фа;t\л p.ass:wd
8il1d IР.ащюс Рsзрешаеr I,ривяэr;у ДОПQлнитеЛЫiоrо 'Р.адреса Ii. ООНОВНОМУ
ИЛИ еиртувльному Jl;GCТy
OetaиttRoot nranor 'Задает корневой k:arвпor ПО умолчанию
Denyfromi!dll host I neтwork Запрещает ,noc1yn J( серВерУ. Ис;польэvется в 6noj(e Umlt
DenyAl1 Запрещает анонимным nОЛЬЭО8l1теnм доступ к объектам,
Уl(l.ЦВliНЫМ е БЛОl<е Umlt
DеnyU$в'ССОf(пОЛЬЗО8а1&леи Запрещает ДDСtyn оПреДеленНым nОllЬЗl)взтвЛRМ
Исnользувl'С е Vir1uatHo!Jt I AnonymoU$ для 1oro. чтобы
<DireC1:()f)I'> Ity'1b опреД€lЛИ,Ь особенные параметры доступа к 8tалоry И era
поnквталоrам
Уka:Jl1litО"'Й ТОКСтt\Вый файn БУДQl 8ЫЯС.циться, KOr.цa nOllb-
OfsplayFirstChdir фаЙЛСОQбщения зозаr-eль епеРSbi(! за врем>! сеанса 80йде"}' в даННЫЙ каталоr.
ИспользуеН,>J:I Е! Virtu.IHost, Direl;:tofy', Anonymous
ОISРlзуLоglп фaRпсооБЩQНИЙ Этот фал будет оТобра)(ен, KorДa полt;ЭOSатель зsреrис:тр"
рует\;;я
Используется ДЛА задвНI4Я ПElраметров, которые будyr
<Globat> использоватъся как ОСНОВНЫМ, -rtl 01 всеми Bpтyaпbl'tblM"
cepeepaM1II
<UmJt cornmand> Оrр.ани"ене на выnОl1ненис данной F1"Рl(омвнды, .епри.
мер, LOO1N, WRIТE. АЕАО, SТOR
Qr\.Nение Н;'Il(опичеcrE'lQ l(Лio'IGНТО!J. Превденное сообще-
МзхСliвп(S numbet I oone Сl,)о6щеив ние будет оroбрзеНо, если пользователю бдеt ОТICЭ3ЗНО е
доrУПQ. Блоки ,,"onymoU$, Global
M.»:log/nAttcmpt& МЗkсимапыюв количесmо "ОПЫТ()I( зар€trмстрИрОва1ЪСЯ;, По
умоп'l3Н"'Ю З, 5nоки VirtuaJHost, G1ob;a1
Order al!ow. dBnY I deny, allow Пордок i1ЫI10ЛfiЕ-и>t.. директив Allow 1'1 Deny в блоке Umlt
nP'ot ЗМ3'КtНИИ оп БУАУТ И-спольюваны си(;Т&МНЫе фалы /etr:;!
PersistentPassword йм I оН passwd и /etc/group, tie'CMOTp!i8 то, что комаtiДОЙ (::hкюt
!{оРtiевой К3fалот был изменен
RequlreValid$hell оп I оН Разрешает nи запрещает pe..-и<:!-rр.а.ЦИЮ"JWI споnьзоsaНИ
060почеl(: {$he1Is), r;ЩОРbl13 не yкa.aHt>I в файлs Jf31сjshеll-з.
$erv&rAdmln omBil ОпреДеляет mail ЗДМИНИс'Jраторн серВера
Определяет режим работы серВера stвndalone (по УМQЛ'iа.
SeJVorTypg ""ию) или Ine1d Вперво", случви с.армр будет ЗаnУС8Ты:;'sI
авrouаfИЧElСkИ И:} CТ6pTOilЫ сцвнаРИ0В C"'CTeM. 608tOpoM
. Ш. ero будет эanу?кать серащэ Inetd при nonbIn.:e ООGДИМDНИ
Timeoutldl9 секунды Bpe""Q в ceкyдa.x, в течени I/;Oroporo nQЛЬЗQf!;аТI;!ЛЬ f'\MI;!i!T
flpa80 Н@ nРО"'ВИfь аК'tИВК{)Сffl. f/o уМОЛчаниЮ 60 (1 минyrа)
Опредепqвr nра8Э д-оступаАМ,соэда.lfiО"-О файла. Масц
Umask Ч6СЦ ЧИСЛQ 6 ВQСЬМер\llЧНОЙ системе l опреДВЛQющее набор ПраВ
дос(см_rnаву2'
User им,,nопЬ308атепR Имя nопьэоеате.nя, присвоеНQЕо дeMOY ProF'Т'P
UserA1ias ПСS6ДЩiИМ I'\Ollbo30lla'fetlh СQздэ.еr YKa8HHЫ" псеВДОНИМ ДЛq уr:азй.ННОto nОI1Ь30fJel";>ЛR
<VlrtublHost addre$$> Создаот оирryаflьНЫVl серевр
435
UNUX: полное рУКОВОДСТВО
15.2.3. РазrраничениеАоступа к серверу РroFТР
я СЧИТlIЮ необходимым подробно рассмотреть бло'rную директиву Limit.
Эта директива определяет вид и параметры доступа к тому IU\И иному
каталоrу. Рассмотрим листииr 15.8.
Листин.15.8. При мер ИСПОЛЬЗО83НLilЯ директивы Lilnrt
<Di.rectory incaming.>
<I...irnit WRITE>
АН awAll
<tricnit>
<]Jюit RЕ,ltп>
D<,oyl'.11
</Limit.>
</DJ.rectoIY>
Директива Directory Определяет С!lоЙФJ\ !Uпалоrа incoming, а директиВд
Limit задает вид дoa к этому ка:талоry. КомаАда WRIТE директивы
Limit вместе с директивой AllowAII. разрешает всем ПОЛьзователям за-
писывать информацию в этот каталоr. Кома1lд:а READ директивы Limit
задает оrраНИ'Jение на ЧТение ЭТo;:lr<ikаталоrа. В раССМаТрllDаеюМ случае
'пенне запрещено ДЮI всех IIОЛЬЗОllателей.
Кроме команд WRITE и READ, IIдрективе Limit можно задавать ко-
манды STOR и LOG1N (табшща 15.6).
Команды ЛИДеХ7ИВЫ Limit, Оrpal4WfМВаlOЩНe пpaдacryna
Таблица 15.6
КОМ_НАа На"вче....е
LOGIN ()rpВНiIJ'tИ8sеr PSrblСтрацию
WAJTE QfPИ8аетэanись
АЕд!) Оrр,+иаае:i ч:riJН\IIQ
STOR Оrpll!i"ЧИ(lат np\II"'''' Ф8Й110а
в блоке Limil можно зздавзтьдиреКТИ/lЫ AlIow, AJJowAJl, AllowGroup.
AIJowUser, Deny, DenyAII, DenyUser. Например, в листинrе 15.9 33rтpe-
щается доступ всем пользоватеi\ЯМ, кроме den. Пользователь den может
реrш:трироввться со всех компьютеРОlI, кроме компьютера с IP.aApecoM
J Il.11l. t Il.lll. Тзкже запрещена реrистрация из сети 192.168.2.0
436
rJJaBa 15, Настройки сервера FТP
Лнстинr 15.9. При мер блоко Limit
<Limit LOGIN>
DeпyAll
A110wUser deI1
Deny from 111.111.111.111
Deny from 192.168.2.
</Limit>
Для кокфиrурирования отделы!Оrо каталоrа может также использо
ваться файл. ftpaccess, которыЙ расположен в ЭТОМ каТ3ЛОJ'е. В нем
содержатся таКИе же директивы, что и в файле proftpd. conf, но файл
. ftpaccess ИМеет nриоритст перед файлом proftpd. conf.
ОрrаНИЭ8ЦИЯ анонимноrо FТP.cepBepa
Анонимный FTP-серlJер можно построИ1Ъ с помощью w'Uftpd, установив
пакет anonrtp. Этот пакет кеJlЬЗЯ использовать вместе с сервером ProFrPD.
Пакет апопЙр поставляется. в составе большинства ЛllстрибyrИ!lОВ.
Сейчас рассмотрим, как орrаЮIЗОАаТЬ анонимный ПР-сервере помощью
сервера ProFrPD. д;ш орrанизаЦIjИ анонимноrо доступа сервер ProFrPD
имееТ директиву АПОПУIПоив. При этом в блок АПОПУIПоив нужно по'
меспr1Ъ директивы, конфиryрируюиrnе аноНJ.IМНУЮ службу. В самоЙ же
днрективе Anооутооо необходимо указать каталоr, которыЙ будет исполь-
зоваться в качестве корневото ДJШ аНоНИмНОЙ <:лужбы. Сервер ProFТPD
выполнит ДЛЯ этоrо каталоrа команду chruut, Ilреllращая этоТ каталоr
R корневой для удаленною пользователя. Перед тем, как сделать это,
сервер ProFТPD ПРОЧlIтает все необходимые ему файлы конфиrурации
из реальною каталоrа /etc.
ПрианоНИ!.tНой реrистрацИII по умолчанию в каЧеcrве ИМеНИ ПОilЬзовате-
ля укаЗЫJj"ется anonymous, а вместо пароля адрес электронноЙ почты
пользователя. Вы же можете измеНJПЬ параметры аИОIlИМlIоrо доступа,
добавив проверку пароJUI дiIЯ анонимноrо пользователя С помощью
дllрективы AnonReqиirePassword. В следуюшем примере преДСТlIвлен
ТIШИЧНЫЙ блок AIIODymous, полходящнЙ ДЛЯ БОJlЫПlllIства аIIOIШМНЫХ
серверов (см. ЛIlстинr 15.10).
Листинr 15.10. Типичный блок Anonymous
<Апопуmоиа /var/ftp>
User пр
Group ftp
UserAlias апоnуmоus пр
RequireVa1idShel1 off
437
LINUX: полное рУКОВОДСТВО
<Directory *>
<Limit WRITE>
DenyAll
</Limit>
<Iirнi t STOR>
AllowAll
</Li.mit>
</Directory>
<-/АnопуmоU5>
Директивы User и Group задают Иt.iS\ пользователя для аНОIJИМlJоrо ДО-
ступа. В обоих случаях примеRЯ6ТСЯ !щяftр. Для имени ftp определяется
псевдоним апопуmоus. Вместо пароля нужно указать адрес электронноЙ
110ЧТЫ.
Директива RequireValidSbell отключает проверку KOM3HAHOro интер'
претатора пользоватеЛЯ. По умолчанию сервер ProFI'PD ищет список
допустимых интерпретаторов в файле /etc/ shells. Если используемыЙ
пользователем интерпретатор не указан в файле/еtс/shеlls, то со-
единение будет разорвано. Директива RequireValidShel1 о" ОТКJlючает
такую проверку.
Директива <Directory *> определяет своЙства для всех каталоrов. При
этом всем пользоватеЛЯМ запрещено записывать файлы на сервер, но
разрешено скачивать фаЙЛЫ сервера на своЙ локальный компьютер.
Желательно также добавить в блок Anonymous директиву MaxClients,
которая указывает маКСИМaJlьное число клиентов. Нужно УЧИТЫШ!'l:ь на-
rрузку на сервер и проnyскной канад для определения максимальноro числа
анонимных КJlиентов. НаcrОЯЩИХlJол!>ЗователеЙ сервера FТP по возмож
Iюсти не следует оrраничнватъ, в отличие от анонимных. При медленном
канале связи, например, 33 Кбит/сек, установите максимальное котlчесТlЩ
апонимных КJlиеитов неболышlМ, UJ3,прllмер, 5 или даже 3. Конечно, число
клиентов также зависит от объема информации, расположенной на сервере.
Если размеры файлов невелики (напрИмер, зто текстовые файлы), то число
клиентов можно установить несколько боJIЬШИМ (10-15).
15.3. Утилиты обслуживания FТP-cepBepa
При работе с серверами wuftpdn ProFТPD вы можете использовать
прOl-раммы ftpsbut (останавливает сервер), ftpwho (выводИт lшформацию
о пользователях), ftpcount (сообщает о КОЛИ'lе"Тве установленных co
единений). Инструментальные средства обоих серверов имеют похожие
оrщии, но вспомоrательиые проrраммы для ProFTPD выводят больше
полезной ии формации.
438
rлава 15, Настройка сервера FТP
я рекомендую использовать расширенный вывод утилиты ftpwho. В этом
режиме предоставляется больше информаllИИ (ЛИСТlШI' 15.11).
Л",стинr 15.11. Результат работы проrрэммы ftpwho
# ftpwho v
Master proftpd pJ:"ocess 759:
1113 2m55s proftpd: Нр 10ca1host. localdor.\ain:
anonymous/den@den.com: IDLE
(host: lосаlIюst.lосаldоmаiп (127 .0.0.IJ)
(cwd: !I
1150 0m20e proftpd: den . localhost.localdomain: IDLE
(host: 1ocalhost.localdomain (127.0.0.1J)
(cwd: /home/den)
3ervice сlаЭ8 2 uэсrэ
15.4. Виртуальный узел FТP
ВнртуальныЙ сервер это сервер, не существующий фюически, но
представляющийся пользователю как реальный сервер. ОС Linux может
поддерЖlmать несколько IP-адресов, блаrодар" чему имеется возможность
созда1'Ь виртуальные узлы. ЕСJlН вы раС1l0лаrаете дополнительными lР-
адресами, то онИ как раз Moryт ИСl10льзоватьеи ДЛИ создания виртуальных
узлов. При конфиrурировщши оиртуальных FТР-узлов I<JIЖДОМУ вирту
альному узлу нужно присвоить отдельный IPaдpec.
Виртуальные FТР-узлы нужны, если вы, Hanpl\Mep, хотите орrанизовать
нескольКО узлоо FTP например, для разных рабочих rpynn и для
анонимных пользователей. Обслуживать сразу несколько FТР'узлов по-
зволяет все тот же демон proftpd.
Настройка виртуалЫlOrо FТР-узла очень похожа на настройку виртуаль-
Horo вебсервера, которая будет рассмотрена Il следующей rлаое. Даже
используется одна и та же директива VirtualHost, еодержащая [paдpec
или доменное имЯ,проmfсаНlюе в службе DNS. IP-аJlрес должен Указы-
вать на узел сети, на котором запущен ProFТPD (см. листим 15.12).
Листинr 15.12. Пример использоваННS'I директивы VIr1ualHost
<Virtua1Host ftp.1ibrary.com>
ServerNarne #rO n 1ine libr'ary"
MaxClients 15
MaxLog1nAttempts 1
439
LINUX, пепнев руководство
DeferWelcome оп
<Liml t LOGIN>
A11.ow from 192.168.1
Dепу from all
</Llmit>
<L.imit. I'.'RITE>
AllowlJser libadmin
DenyAll
</I.i:т.j. t.>
<Аrюnymоus Ivar/ftp/library /books>
User 1ibrary
Group 1ibrary
Ar1OnReqll)TePaSsword оп
<. / }\ЛОnУ-InОUS>
<Ar:onyrnous
Usel
G{OliP
ИЕеl'ДНаэ
</Аnопуmоиs'>
</Virt.ualHost>
/var/ftp/library>
ftp
Нр
anonymous ftp
в примере 15.12 также конфиrypируются Дllе анонимных учетных записи
library и ftp. Причем учетная запись library требует IIlIода пароля при
реrистрации. Пароль должен соnшщать с паРОllем 'l'ofO пользователя,
который запустил демон. Доступ к виртуалыlOМУ серверу разрещен толь-
ко для подсети 192.168.1.0. Записывать данные на сервер может только
пользователь Iibadmin.
15.5. Защита FТP
Очень полезной, особенно, IIРИ орrанизации виртуальных узлов, Яl!ляется
конфиryраUИOllНая лиреКТliВа DefaultRoot, позволяющая указать l<aTaJlOr,
который предcrавлялся бы пользователям каК корневой. Например, значе-
ние DefaultRoot .." настраивает сервер так, чт'обы корневым каталоrом
каждоrо пользователя был ero собственный домаШIШЙ каталоr.
А что делать, есJIИ нам нужно, чтобы пользователи видели все дерево
файловоЙ системы'! Например, чтобы каждый Mor посмотреть, в каком
каталоrе находится та или Iшая nporpaMMa. В этом случае целесообразно
ОI'р<IНИЧИТЬ действия иад файлами 8 корне80М каТaJюrе (точнее. 80 всех
каталоrах, кроме домашнеrо каталоrа пользователя). Делается зто так:
440
rлвва j 5. Настройка сервера FТP
<.Directory 1*>-
<ЫNIТ WЮТЕ READ STOR>
DenyAll
</LIMIT>
</ DiTecto"y>
Пример файла коифиryрации с ИСПОЛЬЗОВalшем директивы DefaultRoot
I1риuсден ниже (листинr 15.13):
ЛИС1'ИН( 15.1 З. При мер ИСПОЛЬ30(J,энип директивы DеfэultRооt
(/et<Ofproftpct.conf)
ServerName "Му ProFTPD server"
ServerТype standalone
[)efaultServer оп
i; Корневым для пользователя будет ero домашний каталоr
[Jefau1tRoot ""
# Используем стандартный порТ
Port 21
iJmask 022
t1axInstances 30
" Пользователь а rpупna. обслуживающие сервер
I.Jser 110body
(;тоир nobody
if Пар-аме'1VЫ KopaeBoro катаЛо.!'а. Б,почная директива Directory
<Directory /*"
# Директива. определяющая параметр Лl1оw()vеrwritе
AllowOverwrite оп
</Directa:ry>
'# Чтобы избежать атаки На ОТКаз. нужно ус'rаис>вить
;f максимальное число клиентов, а также. максимаJIhное
# чИсло иеУДdЧНЫХ попыток реrистрации:
ИахСНепts 10
ИахLоg;.nАttеmрts 2
» ИНОI"да ДЛЯ йзло'ма злоумышленник пыr:rается использовать
# в качестве оболочки какуюнибудь npотрамму, наnp!р.
# . оболочку " rm H /.
Обычно эта брешь в защУtте закрыта, На все же ждательно
# требовать использования только заКоRНЫХ оболочек:
RequireVa1idShell оп
441
rлава 16
НПР-СЕРВЕР
А РАС Н Е
УСТАНОВКА, НАСТРОЙКА АРАСНЕ.
ФАЙЛЫ конФиrУРАЦИИ
ФАЙll РЩЩ1И ЖУРНАЛОВ
/ЕТС/LСЩRОТАТЕ.D/НТТРD
СИСТЕМНЫЙ ФАЙЛ КОНФИrYРАЦИИ
/ЕТС/SYSСОNFIG/НТТРD
СЦЕНАРИЙ ЗАПУСКА СЕРВЕРА
АРАСНЕ /ЕТС/INIт.D/НТТРD
rРАФИЧЕСКИЕ КОНФиrУРАТОРЫ
АРАСНЕ
КдТАЛоrи ПОЛЬЗОВАТЕЛЕЙ
ВИРТУАЛЬНЫЙ HТТPCEPBEP
SSL И АРАСНЕ
ПЕРЕКОДИРОВАНИЕРУССКОЯЗЫЧНЫХ
ДОКУМЕНТОВ «НА ЛЕТУ»
СЕРВЕР КНТТРD ВЕБСЕРВЕР
УРОВНЯ ЯДРА
LINUX ПОЛНОЕ РУКОВОДСТВО
Эта шава 110священа популярному HТТPcepBepy АрасЬе. Этот сервер
ВОЗНИК из вебсервера NCSA, разработанноrо в Национальном центре
разработок суперкомпьютеров ИШIIIНОЙСКОro уннверситета. В 1994 !'Оду из
проекта NCSA ушел rлавный разработчик, оставив мноrих последОвателей
самостоятельно разбираться в своем сервере, Со временем Начали появ
ЛJlТься исправления и дополнения к серверу NCSA заПЛаТКИ (патчи).
А в апреле 1995 rona ВЫШЛа первая версия сервера АрасЬе, OCHoBaHHoro
па версии 1.3 сервера NCSA, которая просто вобрала в себя все извеСТНЫе
на тот Момент исправления NCSA. отсюда появилось и само название
АрасЬе «А PatCHy». Позже АрасЬе стал самостоятельной разработ
кой, и сейчас он поддерживается rрушlOЙ проrраммистовдоБРОВO!IЬцев
АрасЬе Group.
Сервер АрасЬе разрабатывался МИ ОС Linux и UNIX, но со временем
былн вьюущены сто версии И МЯ ОС Windows и OS/2.
Хочу Также отметить, '11'0, кроме АрасЬе, дЛЯ ОС Linux существуют и
друrие вебсерверы: Red На! Secure Server, Apache-SSL, Netscape Еп!е-
rprise Server 11 т,д.
16.1. Установка Apache
в зависииости ОТ дистрибутива, пакет, из которото устанавливается веб-
сервер АрасЬе, может называться арасЬе или h!tpd, а пакет с nOKYMetIТa
цией apachedocs или ht!pd-manual соответСТВеННо. В первом СЛУ'lае
вам понадобится установить еще пакет apachecDnUnon, содержащий
необходимые файлы для запуска сервера.
После установки сервер конфиryрируется ДЛЯ запуска в реЖI!ме standa-
lone, то есть он будет постоянно находиться в памяти. Я не рекомендую
измеиять этот режим. Для запуска и останова сервера АрасЬе вы можете
воспользоваться командами:
# /etc/rc.d/init.d/httpd start
# /etc/rc.d/init.d/httpd stop
443
UNUX: полное pyt(OBOACТВO
После успешноЙ установки сервера отредактируйте файл letc/httpd/
с оп f / h t t pd . с оп f. В неМllсправьте BCeJ'O одну директиву
ServerName. 3начеШJем ее должно быть имя, зареrистрироваf!Ное в службе
DNS ваШей Се1'II. После 3Toro запустите серВер. Оrкройте любой браузер
и попробуйте обратиться к сернеру С локальноrо компьютера (пе t Бсаре
ht t Р , Illoca lhos t), а потоы с друrоrо коыпьютера вашей СеТИ
(netscape http://server . f irma. ru). Если в обоl\X случаях вы увиди
те приветствие сернера (рис. 16.1), значит, lIаш сернер АрасЬе нормаш,но
работает и можно Прllступать к С!"О дальнейшему конфиrурированию.
Если 11 первом случае у вас произошла ошибка, зна'lllТ, IIскать ее нужно
на локальном ypOBJle. ПРI' этом еСЛИ сеть нормально работае1'. то, скорее
"сеro, вы просто забыли запустить сервер. ПО>lмеНlfе ошибки во Bro
ром случае може1' быть связано с иеnpаВIIЛЬИОЙ установкой директивы
ServerName (наприыер, назначенное ваМИIfМЯ веб""Сервера не прописзно
в службе DNS).
'fJI:.i'.,::.щ':
"',","" ,
:jf,i,:6д&':f'
'A -"
i ::,1/wеbfA"4-#,;'фj::,.t'if-'-'
...,"". IISa-.oU,',"1>4I
ИIio",ok4c.wt<hw.
f , ' ",эWН<.\iI:JI" Nо1оо.-м1tLRи.МuJ!n<r,",а,I.fь.,""Ь'U'ff:\'I.и.ro1d"'"IpotI6:""
' C* ' Ыпих I I....dnмlрti1hL.....,.t1:llt,..,fUЩщ'nI....f"'II'rlllJ.,..-"..му;Омt.МIIwa!l
! '. М d k .!Ш.о..1ЧIr4o.l:""'мtJl"".мЫ.""'!\IIb"'lId8Ф.....L",I....ort!h.,..t,,,I.iщъ'I
!,' (Щ ra е,
. .. .... ..... ,.......,......."....!
a],botl
:'#""",. ....,.. ,:...', _'i, '!S'fili;/:,\:i'Н:Ыf'1Q\Уi;'!ИУ,\tА:Ji]::Щ.
,1:)'....ш.,,уwJ!\"'1'JI."..- .,;;;;;;w.'IO;,... lчlol.Ща'. '''''''''hr.м3'..n.l...-
j1е;'iurт,Щi:& tшеd ri'{ Set"
;::ь::=..;t :::'I:-:::;'
...........:?...tuf<"'Ibl'U,!I,"IIIЦfll!lr"""N.w..........oiI.ы..,*,"''''dl>'''''АЬ.iIo<W'<I''""t.,.;,oI.
р..,,"""".....м.р."'j..t";.qx\'3."I'рm,J.owo....'''''"''6...iнIfIIl,du.f'''''uoпl''''.ы..
Doк""""'......!.,.."'.-"\t...........u....1IIds....w...:u.
f;
fL. ' r. ..... ."A l _
wь.lblh<eEstni.a.d&rnr'
'1\. "иbo. Wol$eN...'...... ..'*'IWIC\но..'..,.о.,ц........"е=""..s....-мpojoet.1!oio1*....ikW,.iIoЩp........I..\tIoin.-t'"'о..
'.О,,,,,"С1'ЩjI,,
....4v....сtS..ООI...-О"ItIIIk.oJrtМ'O
.D.t.r.ao......
.c.....,.......(""'!OOЦ"'""a...
.Aw.....<lIJ....
.SM.I{;'.f..lI>.iIt:m>.МbllIIOrrJ;1It
п...........""...;IIoI...........
l '
" '.' ,:"-' ,; :'i!i.:;' ',,', ' ..
,-"'е";
,,', , ,,,.)IO.4...e
Рис. 16.1. приветствие сервера Apache
444
rла68 16. HТТP,c€p6ep Apache
16.2. Настройка Apache.
Файлы конфиryрации
После установки АрасЬе следует отредактировать следующие файлы;
. letc/httpd/conf/httpd.conf основной файл конфиryрации.
Дл:я АрасЬе 2.Х. этот файл может также называться h t t pd2 . соп f;
. I etc!10grotate. d/ ё\расЬе или /etc/l0grotate. cl/httpd (в вер'
сии 2.0) фаЙл ротащщ журналов;
. let,c/sysconfig/httpd сucrсмный файл КОllфиrурации;
. letc/init. d/httpd фаЙл инициализации АрасЬе.
Для старых версий АрасЬе (до версии 1.3) характерно наличие фаЙлов
rт. conf и ассез s . conf. Обычно эти файлы находятся в I'аталоrе
/etc/httpd/conf. В файле srm. cO!1f задаются параметрыдокументов,
которые размещены на сервере. ФаЙл access . conf содержит параметры
доступа к серверу. Начиная с версии 1.3 рекомендуется все директивы,
которые раньше находились в фаitлах srm. conf и aCCQSS. conf, по.
мещать в файл ht tpd. conf.
Файл ht tpd. cO!1f это основной файл конфиryрации сервера. В нем
содержится техническое ОПИсаНИе работы сервера. Начиная с версии
J.3 появилось несколько дополнительных конфиrурационных файлов;
apa.c11e'miIr1e. types, vhosts Ivhosts. conf, vhots/VirtualHomePages.
сап [, vhosts/DynamicVНosts. conf. В фаЙ.llе apachemime. types
l'ОдеРЖ<lТся пmы MlМE, поддерживаемые сервером АрасЬе. файлы vhost s .
cOlf I VirtUд.1ИоmеРаgеs. conf I Dynam.icVНosts. conf ОПIОСЯТСSl К
КQнфш}'рированию виртуaJJьныx веб-серверов. о которых речь пойдет не-
чиоro позже.
ei "'l.нjI[ . hJ ' IШita.
. MIME (MuНipurpose Jnternet МаН Extensions) мноrоцелевов расшl-tреНие
элек.тронноVt почты в сети Интернат. Используется Не ТОЛЬКО при работе с
электронной ПОЧfОЙ, НО и служит для описания различных типов данных., наПРИМер,
текстовых, rрз,фИllеQки..описание типа MIME включает в сеБR наименование типа,
подтипа и расширение (Налример, 1ext/plain txt).
16.3. Основные настройки.
Файл httpd.conf (httpd2.conf)
Как уже ome'taJJocb ранее, этот файл содержнт практически все дирек-
тивы, необходимые для работы сервера. ДиреJcrlffiЫ конфиrураЦИОIIНОro
файла сервера АрасЬе можно условно ращелить на такие rруппы;
445
UNUX: полное руководство
1. Общие. К общим директивам относятся rлобальные директивы,
влияющие на работу Bcero веб--сервера. Это директивы ServerName,
Se!verType, Port. User II Group, SеrvеrАdшin, ServerRoot, PidFile,
DocumentRoot, UserDir.
2. Директивы протоколирования; ErrorLog, TransferLog,
HostnameLookups.
3. Директивы оrраничения доступа: AllowOverride, Options, Limit.
4. Д"рективы управлен"я nрОIlЭВ(Щllтельнuтью:
StartServers, MaxSpareServers, MinSpareServers, а также директива
CacheNegotiatedDocs.
5. Директивы обеспечения ПОСТОSlнноro соединения е клне,IТОМ:
Timeout, KeepAlive, KeepAliveTimeout.
6. Директивы настройкн отображении каталоrа. ОФОРI>ЩТЬ отображе
нне каталоrов можно с помощью диреКТIIв настройки отображения
каталоrов: Directorylndex, FancyIndexing и AddlconВyType.
7. Директивы обработки ошибов:. ДИрективой обработки ошибок
Н1ТР.сервера является директива ErrorDocument. С ее помощью
можно установить реакцию на любую ошибку сервера, например,
на ощибку 4j)4 (документ не найдеlt).
8. Директивьr переиаправлеиия:.Rеdirесt, Alias n ScriptAlias.
9. Директивы для работы е мвоroSlычными документами: АddLaпguagе
1\ LanguagePriority,
10. Директивы обработки МIМЕтипов. Настроить свой сервер для
обработки раЗЛIIЧНЫХ МIМЕтипов можно с IIОМОЩЬЮ директив
Defau1tType, АddЕпсоdiпg, AddТype, AddHandler И Action.
Н. Директивы еоздаJIИЯ виртуальных узлов: VirtualHost, Listen,
BindAddress.
Все эти директивы редактировать Вам вряд ли придется по умолчанию
они содержат ШЮJlне разумные значения. Нужно будет задать TOJlb1(O
значения директив Server-Name и ServerAdmin. Далее приведено описание
дирекпш, используемых в файле httрd.сопf.
16.3.1. Общие директивы
Общие директивы изменяют rлобальные параметры сервера ero nМЯ.
тип, порт, адрес админнстратора. Значения. указанные rло6альными ди'
рективами, влияют На работу Bcero сервера.
. ServerName директива, которая определяет имя сервера АрасЬе.
Здесь должно 6mh указано ОФIIЦlUulЬное ИМЯ сервера в таком виде, в
котором ПОЯВИТСЯ в адресной строке браузера. Это имя должно быть
зареrистрироваllО в службе DNS вашей сети.
. ServerType директива, которая определяет тип сервера, По умол'
чанию используется ЗНЗ'lение slandalone. Если вы ХОПIте достичь
446
rла88 16, HТТPcepBBp Apache
максималъной произвопительности вашеrо вебсервера. не изменяйте
это значение.
. ServerAdmin пиректива, которая задает электронный адрес
вебмастера вашеrо вебузла. Если возникнут какието проблемы,
связанные с работой сервера, то по этому адресу бупет отrtpавле
но соответствуюшее сообщение. Обычно используется значение
webmaster@YourHost.com. Пользователь webmaster, как правило,
не существует реально в системе. Для опрепеления имени (nceB
понима) webmaster используется файл псевдонимов электрон
ной почты /etc/aliases. Формат этоrо файла следующий:
<псевдоним>:<реl11страционноеимя>. После модиФикаЦlШ этоro
файла нужно ввестИ от имени суперподьзователя KOMallIlY newaliases.
В Windows псевдонимы создаются с помощью проrpаммы настройки
установлеmlOrо почтовоro сервера.
. Pot1 директива, задающая номер порта, который будет использоваться
для установки соединения. По УМШlчанию используется порт 80. Если
вы X011t"re запустить сервер АрасЬе с ИСПШlЬЗОВaJшем этоro или любоro
друroro порта, номер котороro меньше 1024, вы ДОЛЖНЫ обладать пра
вамИ сynерпользователя. Но даже если у вас нет таких прав, вы можете
запустшъ сервер для работы с портом, иомер Karoporo преВЬПllает .зиа
чение 1024. Обычно используется номер 8080 юш 8000.
. User и Group. ДиреКТlIвы User и Group определяют идентификато-
ры пользователя и rрYIШЫ, от имени КОТОРЫХ будет работать сервер.
Данные Iщент"фикаторьr присваиваются серверу, если он запущен в
автономном режиме. Можно использовать как имена пользователей,
так и их числовые эквиваленты UID. По умолчанию иепользуется
ИМЯ пользователЯ nobody. Из соображений безопасиости не рекомен-
дуется изменять это значение и указывать имя реальноrо пользова-
теля. В этом случае веб-сеРI,ер получит поступ ТОЛько к тем файлам.
которые разрешены для чтения всем пользователям. Нужно заметить,
что указаиный пользователь и rруппа должны существовать в вашей
системе. Ни в коем случае не запускайте сервер от имени пользователя
юо!!
. ServerRoot I! этой диреКТlIве указывается местонахождение файлов
конфиryраЦlfИ сервера АрасЬе, По умолчанию для этих целей исполь
зуется каталоr /etc/httpd.
. PidFile с поюшью этой директивы указывается имя файла, в KO
тором исходный процесс сервера будет реrистрироваться. Этот файл
содержит свой идентификатор процесса (PID). Данную инфОРМЩlllЮ
можно исполъзоВать для останова или перезапуска сервера при Ha
писании собственных сценариев. Этот файл будет создан, только если
сервер АрвсЬе anущен в автономном режиме.
. DocumentRoQt директива, определяющая местонахождение KopHe
BOro каталоrа документов вашеrо серпера.
447
UNUX; полное ру<оводс11К!
. UserDir Э1:а директива задае1: названия подкаталоrа n домашнем
каталоrе пользователя, из которото берутся документы. В этом СJlУ-
чае IIbI аКТИllизируете возмоJЮlОС1"Ь использования пользовательских
KaTMorOB. Если вы Не XOТJiTe включать эту возможность, укажнте
UserDir DlSAВLED. Более подробно эта диреКТIlRa будщ' рассмотрена
IIОЗЖС.
16.3.2. Директивы протоколироввния
Директивы протоколироnания управляют процессом протоколирования
работы сервера. С ИХ IIОМОШЬЮ вы можете определить, что нужно заю!.
сывать в журнмы, а что нет.
. Hostll3meLookups оп I оff.Сер!щр АрасЬе ведет журнал доступа дру'
('ИХ КОМlIьютеров. Если вы JiКЛIQЧИте данную опцию (оп), то в журнал
будет записано доменное J/МЯ компьютера-1<ЛИецта. Еслн ЭТiI опция
ВЫКJ!ючена (off), в журнал будет .Щ1nИсан IP.aдpcc КJ1llею'а. Включение
данной ОПЦЮI замеддяет работу сервера, так как требуется дополни'
тельное время на ожидание ответа от сервера DNS.
. ErrorLog и TransferLog эnr,.диреКТIlвы опредеJlЯЮТ раСПOJlоже'
ние журналов сервера АрасЬе. Обычно для эТI!Х целей нспользуется
каталоr !etc/J"lttpdl1ogs, ,!ЩТОрый является ссылкой на каталоr
/var !log!httpd !!ЛИНа любой.друrой. В журнале errorIog про.
токолируются днаrnостическиесообщення, а также сообщения об
Шllиf)ках, KnTophIe порождают СGI...-с(tlарии В Р'iале t raJ=: fpr'log
ПРОТОКОЛИРУЮТСJIзапросы клиентов.
16.3.3. Директивы управления производительностью
ПОЭКСПСрИМСf!тировав с этими диреКТJшами 11 выбрав оптимальНые зна.
чеНlIJ!. можно добиться существенноrо повышеllИЯ произвощrrелыIстии
пашеrо сервера.
Сервер АрасЬе для каждоrо ссеДlillения запускает отдельную копию,
КОТорая будет обрабатывать запросы клиента. УПРl!ЛЯть зanущеuными
копиями rюзволяют ДllреКТИ!lЫ StartServers. MinSpareServers, MaxSpare.
Servers.
. StartSen'rs, MaxSpareServers, MinSpareServers. Для каждоrо но.
Boro соединения создается новая копия ароцесса сервера. Дирек-
ТI1Вll StartServers задает количество копий, которые будут созданы
при запуске исходной копии сервера. При этом исходная копня
сервера получает запросы и передает IIХ свободным копиям. Это
позволяет равномерно распределить наrрузку между отдельными
процессами 11 повыс(пь производительносl'Ь сервера. однако на
448
rла8а 1 б. HтrpcepBep Apache
пракТllке все Не Так хорошо, как хотелось бы. Суше'Твенноro при-
роста производителъности можцо добиться только в случае большоЙ
зarрузки сервера. По умолчанию запускается ПЯТЬ копий сервера,
Если ЧИсло IЮСТУПЩОЩИХ запросов превышает колнчеCТ1l9 запушен-
ных КОПIlЙ сервера, запускаются дополнительные процеccысерверыы.
Эти процессы не завершаются ПОСЛе обработки cBoero запроса,
а продолжают находиться 8 Памяти. Директива MaxSpareServers
ПОЗВОЛяеТ указать максимальное число таких процессов. Если
это количество превышено, то ЛИШllllе процесс,ь. завершаются,
Если КОШlчество «серверов на подхвате" мсньше, чем залаllО ди-
рективоЙ MinSpareServers, запускаются доrюлнитедьиые копии.
Для работы этих директ!ш необходимо, чтобы сервер бьU1 запущен"
авТОНО!.fЛом режиме.
. CacheNegotiatedDocs эта директива позволяет проксисерверу, на-
пример, SQUID, Не кэшировать документы, которые не rенерируются
аВ1'оматичеClШ, то есть в I1роцессс вьшолнениЯ раЗЛНЧIIЫХ Сценариев.
Соrласно прarоколу НТТР/I.О, сервер АрасЬе С каждым пакетом no
сылст 3alОЛОJIOК «Pragma: по-сасhе» проксисерверу, что позволяет
отключить кэширование документов (в протоколе HTrp/l.1 вместо
Pragma используется СасhеСо!\t.-оI). Если вы НКJlючи're данную ди-
рективу, то вы разрешите ПрОКСIIсер6еру КЭlllнроватъ документы. К
сожалению, далеко не все проксисерверы ОТКЛЮ'IЗIOТ КЭШllроваJПlе
после получения JIaннoro заrоловка. При наПисашш cnoera CGI-
cneHapWl вам, скорее Bcero, прндется самому 8ЫBOДUТЬ заrолавок
Pragma (ИJШ CacheControl) и мета-тзrи, которые указьшают на дату
послсднсrо обновления документа.
16.3.4. Директивы обеспечения ПОСТQЯнноrо
соединения с клиентом
Эти директивы обеспечивают ПОСТОянное соединение с клиентом, а также
управляют параметрами установленноrо соединеюш.
. Timeout задает промежуток времени в секундах, " Te'leHHe кото-
poro сервер продолжает попытки возоБНОllления IIриостановленной
передачи naHHbIX. Значение ШlреКllffiЫ Timeout распространяется не
тояысо на I1ередачу, но 11 на I1рием данных. ЕСДII 8ВМ НУЖF!О lIолучать
болJ,nше фаЙJlЬ!, рекомендую увеЯIl'IIIТЪ дJ1HIIOe значение.
. KeepAlive разрешает постоянные соединения, то есть такие coeJlII
нения, в KoтopыJ< ПРОИЗ80ДИТСЯ более OnHOro запроса за один раз.
. KeepAliveTimeOut даниая ШlреКТl!ва Оllределяет таймаут для по
СТОЯННOI"О соеДlщеНI!Я.
. MaxClients. Иноrда поступающих запросов настолько MHOro, ЧТО
компьютеру не хватает ресурсов длязаrРУЗКJI новых копий сеРllсра 8
1;' .:l1f )/j'1I
449
L\NUX: ПОflное pyкoeoACТIIQ
память и их выполнения. Дире".ива MaxClients (значение по умолча-
нию 150) определя""Т максимальное число копl!Й сервера, которые
MOryт выполняться одновременно.
. MaxRequestsPerCbild. После обработки определенноrо колнчества
запросов, указaJШOI"О в этой директиве, копия сервера завершается,
а вместо Нее запускается НоваЯ.
16.3.5. Директивы создания виртуальных узлов
Довольно часто пользователь Ее МОЖI'Т позволить себе такую роскошь, каК
собственный физический веб-сервер, то есть отдельный компьютер, по-
стоянно подключенный к Интернет, на котором запущен сервер АрасЬе.
Поэтому современные nеб-серnеры поддерживают виртуальные УЗЛbl. У
вас будl'Т собcruенное имя, нвпример, www.firша.ru.новдействlIТeJIьНОСТ1!
ваши файлы будут помещены Ile нв. отдельном ком:цьютере www.firma.ru.
а будут находиться lIa сервере провайдера (или хостера) www.isp.ru.
Блаrодаря теХНOl\оrии виртуальных узлов один сервер хостинr-провайлера
обслуживает сотни IIЛИ даже тысячи сайтов.
На своем домашнем nеб-сервере Вы также можете создать один или не-
сколько виртуальных узлов, если, конечно, вам это нужно.
Listеп эта дире"ТИ8а nОЗ80Шlетвам связывать АрасЬе с определенным
lP-адресом и/или дополнительными портами.
BindAddress эта диреКТlша сообщает сер8еру, какой IPaдpec следует
прослушивать. Значением данной директивы может быть «О. (любой
адрес), IPaдpec ИJIJf полное имя домеиа.
Блок директив VirtualHost будет рассмотрен позднее, при описании
создания и использования виртуальных узлов.
16,3.6. Директивы настройки
отображения каталоrов
Эти директивы позволяют украеить ваш веб-сервер, например, сопо-
ставить значок типу файла IIЛИ определить оформление каталоrа.
. Direсtоry[П(lех позволяет задать название документа, который будет
возвращен по запросу, не содержащему имени документа. Например,
если вы введете в строке адреса броузера http://!ocalhost, то будет воз-
вращен один из указанных в директиве Directorylndex документов.С
помощью данной директивы можно задать несколько имен файлов.
Значениями ПО умолчанию являются index.htm1 index.php index.htln
index.shtml index.cgi Dеfаult.htш default.htm index.php.
450
rлава 16, HТТPcepBep Apache
. FancyIndexing. При получении запроса, не содержащеro имя ДОКУМetl
та, сервер передаст один из файлов, указанных в директиве Directo
ryIDdex. ЕСЛlr такой файл Не существует, клиенту будет возвращено
оrлавление каталоrа. Прll включенИИ директивы Fancylndexing !I
оrлавлешш каталоrа будут использованы значки 11 описания файлов.
Если директива FancyIndexing выключена, оrлавление будет пред
'Тавлено в более простом виде,
. AddIoonByType (ТЕХТ, URL) mime-type сопоставляет значок ТlШУ
файла. Значок будет использоваться при выводе каталоra, если вКJIЮ
чена директива Fancylndexing. Параметр ТЕХТ определяет текстовое
описание Тlша, которое УВIIJIЯТ пользователи, использующие текстовый
браузер или пользователи, у которых отключено отображение рисунков.
Параметр URL определяет адрес значка. а параметр mimetype это
тип файла, с которым нужно сопоставИ1'Ь значок. Полньщ l1еречень
МIМE"'I'Ипов npиnеден в файле apachemirn",. types. В К3'1ествецыен"
файла можно задать не только МIМЕ-тип, но 11 СИМВOJ1ы. которыми
заканчивается имя файла (см. листинr 16.1), 110 для зтоrо нужно "C
пОЛЬзовать директиву AddIcon вместо AddlconByType.
Листинr 16.1. Фраrмент файла l"Ittpd.conf
AddlconByType (VID,/iс<щs/mоviе.gif) video/*
Addlcon /icons/blnary.gif ,bln .ехе
Первая директива в листинrе еоnоетамяет типу video значок /icons/
l11ovie.gif, Вторая директива сопоставляет бинарным файлам · .bin и
* .ехе значоК /iconslbinary.gif. Значок по умолчанию задается директивой
ПеfаultJcоп.
16.3.7. ДиреКТИВbI обработки МIМЕтипов
Как вы Пщ.шите, в Windows Существует такое понятие, как расширение
(или тип) файла. По расширению можно связать какую-либо протрамму
с определенным типом файла. Например, коrда вы щелкаете на фаЙJ1е
с раСШllрением .Ixt, запускается Блокнот, а при щелчке на файле .doc
будет запушен Word. Точно такой же механизм реаЛllЗопан в АрасЬе.
Вы можете сопоставить типу файла проrраммуобработчик зтоrо типа.
Коrда не был разработан модуль modphp, проrpамма рЬр объявлялась
обработчиком фаЙла с расширением ,рЬр. Сервер запускал рЬр, пере-
давал ему файл, а потом возвращал пользоватеJJЮ реЗУЛьтаТ.
. Defaulffype. Если запрашиваемый клиентом тип не соответствует
ни одному из МIМЕ,типов, используется МIМЕ-тиn, указанный в
Дllрективе DefaultТype.
451
lINUX: I1ОЛое РУКОВОДСТВО
. AddEncoding. для сокращения ]lpe{(mt передаЧИ файла клиентам ис.
пользуется сжатиеданных. Браузеры имеют встроенные проrpаммы
ДЛЯ распаl<ОВЮI, запускаемые при получении арJШВОВ определенных
MlME-типов. Именно эти MIME-ТИllЫ и указываются в Дl1ре-rиве
АddЕпсоdiпg.
. AddType с помощью ЭТОЙ директивы можно добавить новый М1МЕ-
тип, который не указан в файле apache-mime. types.
. АddНапdlеr JI ActjoJ>. ДиреКТlJIJа AddHandJer позволяет сопоставить
определенному MlME-типу каКОЙ-lШбудь обработчик. А с ПQМОЩЬЮ
директивы Асtiоп можно определить какое-иибудь действие для об-
работчика. Использование ЭnIX директив, я' думаю, ЛУЧlllе BCCro про-
деМOIн:трировать на nримере (ЛI!С1'1Шf 16.2).
Листииr 16.2. Применение директив AddH,тdler и Actlt)"
Аdс1На"dlеr tехt/dht.ПЙ dht.ml
Action text/dhtml Icgi-bin/dhtn\l',parse
16.3.8. Аиреiqивы для работы
с мноrоязычными документами
Если ваlll саЙт имеет несколько языковых версий например, русскую 11
анrлиЙскую, целесообразно насТроить директивы управлещUl ;JЗЫКОМ.
Torna Iюльзователю не нужнО будет щелкать по ccытiaM «Iп El1glish/Ha
Русском» сервер, исходя из насТроек браузера, сам определит, какой
язык nрелпочИ'Тает пользователь, и отобразит нужную страницу.
. AddLanguage. В больщинстnе браузероn можно задать преДnОЧИТае
мый язы.. Директива AddLanguage СОПОСfаюrяет расширение файла
аббРЩlИатуре языка. Для русското языка используется аббревиатура
ru. ДЛЯ анrлиЙскоrо еп. При этом в корневом катзлоrе оашеr'о cep
вера MOryт нах(Щl!1Ъся несколько индексных файлов на разных языках.
Например, для pyccKoro языка нужно Iкполъзов<trь имя файла il1dex,
Iltml.fl1, а ДIIЯ .анrлиЙскоrо iлdех.html.еn.
. LangнagePriority. Естl на вanreM сервере размещень! дoкyMeHTы на рюных
языках, то С помощью диреJcrИВЫ l.anguagePriority МОЖНО указать при-
оритeты РВ;JJIJlЧНЫХ языков. Клиент вводит в адресной строке Jrttр:/Л\ww.
server.com/. Если в свойствах браузера имеется В03МОЖJюсть зада'lЪ пред-
почитаемый язык, то возвращен будет файл на нужном языке, есЛИ такой
существует. Если же браузер КЛиенra не ПО)lJlерЖllвает эту ВОЗМОЖJIOClЪ,
будет возвращен фаЙл На языке. имеющем наиболее высокий IlРИОРИТет.
для 1'Oro, 'побы сервер ПQЦДерживал НУАШЫЙ вам язык, Ilредварmeлыю
установите правильное значеllllС директивы Addl.anguage.
452
rлвва 16. HnpcepBep Apache
16.3.9. Директиаl>l перенаправпения
ДОВОЛЬНО часто нужно перенапраВI!ТЬ пользователя на друrой ресурс:
например, вы сменили хостера и изза этOlО изменилось имя Bal1lero свй
та. оБыноo при таком «переезде» у вас есть определенное время, чтобы
сообщить ващим пользователяМ об ЭТОМ. Проще I1сето установить на
старом сервере перенаправление на IIОВЫЙ lюпервых, пользователи
узнают ваш новый адрес, а BOBTOpbTX, ИМ не нужно буnе1' ВБОДIlТЪ этот
адрес вручную сервер сделает все автомаТИ'1ески
Возможно, вы просто перенесли фаЙлы в друrой каталоr вам так
удобнее, 110 пользователи не знают об этом и попрежнему обращаются
"стаp<.JЦУкаталоry. Тоща сQ;lдвйте редирект на новый каталоr, и cepjjep
ш!Томатическп перенanр<uшт пЬ.лъзователей на нето.
. Redirect. Используйте эту директиву. коrла НУЖНО перенести ДOKY
менты в друrой каталоr или на друroй сервер. Например, вам нужно
перенести данньте .fЗ катмота /usеrs/dеп в каталоr /den. Если при ЭТОМ
старый URLадрес бbVI hitp://www.host.com/users/flen. то новый станет
httр://www.hоst.СОm/dеn/.ИспользуЙтедля этоro следующую дире!..,иву:
Redirect /users/den /de". Можно также перенаправить запрос
иа друroй сервер: Redirect /\Isers/den/ www.de11.don1ain . сот.
При этом допускается использование как новото, так и старото
URL-anpeca.
. Alias с помощью директивы Alias можно предоставить доступ lIе
только к файлам, находящимся n каталоre, указаПИQМ директивоЙ
DocumentRoot. и erO подкаталоrах, но 11 в друшх каталоrах. По умол
чаlШЮ определен только псевдоним ДЛЯ каталоrа ЛСОПБ.
. ScriptAlias аналоrична директиве Alias. но позволяет задать Mecтo
расположение каталоra для СG!сценариев.
16.3.10. Директивы обработки ошибок
Такая директива Bcero одна, 110 Оllа очень полезна. Например, ПрОIlЗО
шла ощибка.404 (файл не.нз.йден). Вы можете сопоставить ЭТОЙ ошнбке
URL, на который будет перепаправлен браузер пользователя. Обычно
перенаnpавле1Ше устанавливают на документ, содержаЩИйлоrотип СВЙТа
и сообщение об ошибке.
ErrorDocument дlipектива, сопоставляющая код.ы ошибок сервера
URL-аnресам На этом же сервере.
453
LINUX: полное рУКОВОДСТВО
16.3.11. Директивыynравления доступом
к отдельным каталоrам
Вы можете определцть отдельнЫе параметры ДЛII каждоrо каталоrа
uашеl'О сернера uформление каталОl'а, параме'l'РЫ доступа к этому
каталоrу.
Бдок директив Dlrectory
Блок директив Directory определяет своЙства каталоrа (см. листинr
16,3).
Листинr 16_3. Директива Oirectory
<Directory />
Optio1!s Illdexes Iпсllldеs F01l0WSYIfiLitlks
AllowOverride None
<JDirectory>
Свойства каталоrа МОЖНО ука:Jывать В директиве Directory или в файле
. ht.access, который наХОДIIТСЯВ ТОМ каталоrе, для KOTOPOro необходимо
устаИО8ИТЬ нужные параметры.
В блоке Directory MOryт находиться директивы упраl!ЛеНIIЯ доступом. К
ним относятся директивы AlI()w(h<errlde, Орtlощ, Llmlt. Рассмотрим по
порядку все эти директивы. Диреi\;Тщщ. AllowOverrlde может принимать
значения, указанные 11 таблице 16.1.
Знач8НИЯ Дf1рек'rИ8Ы A/lowOw"тide:
Таблица 16. t
3Ha"feHмe OnмсаНИВ
None С@р8ерАрасhебудетмI'НОРИptJВВ1Ъфайлы .ntaccess. Рекомендую устаНОВИТiI
данную ОПЦИ,Ю, так как ЭТО nО,Sli!tl{)ит ПРQl.1зводи-rелышсть серl;lера
ПОЛМIJSАтели ИМG/ОТ право nереопределяn. s ф.sйл.n: ,htассоБS rлooanыые
ДII паре.метры доступа. Из соображений t)eЭОЩlСI--IQСТИ ЛуЧше HI,} ..,СnОЛl;>30еать
3ТОТ режи.м
Option$ Раз:решат исf1QЛЬЗОвать .директиау OptID"$
Urnil зреШаеТ иСПОllь:юватl:.дирraКf11ву UmIt
АцtltС<.щftg РазреШIJ8Т ИСnОnЬ308ЗWf'lе ДКрltrn1В AиthN8me t Authtype, AuthUserFlle
и AuthGroupFlle
Fll&!nfo Ра;реШаеТ использовать It фа"JJ8.Х ,hlaCce$$ ДJ.1рfll\Тивы AddТype и Addi::ncodJng
с помощью директивы Options МОЖНО определить функции сервера,
которые будут доступны для использования в определяемом ка'l'злоrе.
Данную диреКТIIВУ можно иСПОЛЬЗОВать как 11 файле httpd.conf, так и
в фаЙлах. htaccess. допустимыe опции для директивы Options пред-
ставлеНbI в таблице 16.2.
454
rлава 16. HТТPcepBep Apache
ЗначенНЯДl1pqlffifвЫОptiопа ТабпиЦ31б.2
Значение Описаки",
None Не ра.эрешатся С11-ол..эое.анIМt каких-либо ФУНIЩИЙ
AII Разрешаются асе ФУI-IICЦ\IIИ
FOltowSymUnks Ра.1решвеТСА IACnощ.заеаrь СИМВОIiИЧiЭ'ские ССЫflИ С rОЧj(И зрения
безопаСНQСТИ e рекомендуется испол\,.эоваrъ эtoJ режим
РазреЩi!lетсм ИСПО1!ЬЗОВ8НioIе симвоnических соt:.W[Ж.,&с,лYl ОНИ
symlinkslrownerмatch \'1(а!ЫВЩОТ На.обьеj(fЫ, КОТорые принадлежаТ тому же ПОllь3()мтеnю,
14)"0 " сам"" ссып;::и
8!всСGI Раэ;реШ8iJ:ТСЯ вЫnQлнвнив СGI,СЦ,ери&в
Inde)(es Если ЭТа оnцИ" BblkJlIO<teHa, СlфВер Нв Оудет Передэ:мтъ СОДQржимой
кaтanora при ОТСУТСТВИИ фаАла ndex.html
IncludEs РрЩjjено "СПQльзованиа сврвврных ВIUIJDений. Р8к:омвнДYJO
ОТКЛЮЧИТь :пу ОПЦИIO, ПОСkОЛЬК)l это сипо наrружает сервер
Include$NaExec Разрещает I<Iспользоввнив сеРВВРКЬ!Х 81UJ1O'19НИЙ, НО зanрещаеТ-
запу.ск 143 них I!Iнешнюс nporpaмM
Директипа Limit оrраничивает доступ к фаj'mам n определенном KaTa
лоrе:
Llmit метод
Параметр «метод» определяет метод передачи: GET или POST. Дllрек
пшу Limit можно использовать пиутри блоков Directory, Location или в
файле .htacccess.
Бпок директив Limlt
В блоке Limit можно использопать такие директивы: allow (разрешить),
deny (запретить), order (порядок), require (требуется). После директивы
3\1ow следует слово from, после KOToporo можно указать IPanpec, адрес
сети, домен или просто ИМЯ компьютера. Слово a\l обозначает все компью
теры. Директива order определяет порядок выполнения директив a\low
11 deny. Например, вам -rpeбуется запретить доступ всем компьютерам,
кроме компьютеров, которые входят в домен ru (см. листинr 16.4).
Листинr 16.4. Дирокти"ы allow, deny
order deny, allow
deny from аll
ill10w frorn ru
Следующий пример показывает, как разрешить доступ компьютерам
только из вашеЙ сети.
455
UNUX, полное PYKOBOдcтllO
Лиетиltr 16.5. РаЗРNU"ltие доетупа ПОДеети 192.168.1.0
order de!lY, a11o1
de!lY from а11
a110w from 192.168.1.
Кроме значений anow,deny и deny,allow, директива order может содержать
значеНllе mutuaHaiJure. В ЭТО!.d i:.nУ'lце ь доступе будет отказано всем
компьютерам, которые явно не Yi'!Щ/Щblв списке a/low.
Дllрективу require можно ИСПОДЬО8ать для защиты каталоrа паролем.
После названия диреКТИВЫ'ДодЖЦ,',С:;Jlедовать список элементов: име
на ПОJlьзователей, rруnл, КQТорыеза,цаны в дирекТИIIЗХ AuthUserFlle и
АuthGпшрFilе. МОЖJiо ИСПОЛЬЗО/!ll'l'lIараметр valid-user, КоторЫЙ укажет
серверу предоставить дщтуп любщ,-у" ЦOJIьзователю, имя которосо Имеется
l' лирективе AuthUserFile, если' 011 00едет правильиый пароль. Пример
использования приведен в листинrе 16.6.
Листинr 166. ИСnОfCьзов.nни.е диреКl'ИВ:Ы require
<Directory *>
AuthUserFile /Varls<,>",ut<iI:ht'passwd
AuthName Security
A\lthТype Basic
<1.irпit GET>
order deny,allow
cieny [олn а11
a110w from mydcmain.ru
req11ire validu5er
</Li.rnit>
</Directory>
в лнстинrе 16.6 ДЛЯ аутеНТИФКIЦЩИII используется Файл паролей
. htpasswd, который, можно создаn; с помощью проrpаммы htpasswd.
Директивы блока Limlt разрещают доступ к любому катзлоrу сервера
только пользователя,"" домеllа mydоmаiп. rcc.
Кроме параметра valid'user доriУСIffi6ТСЯ использоваиие параметра users
или groups. Данные nарамеТРbl раЗрl!шаlOТ доступ только определенным
пользователям или rpуппам пользователей. Пример ИСПОЛЬЗОВ31IИЯ пара-
метра users приведен в ЛИСТlшrе 16.7.
456
rлава 16. НПРсервер Apache
Л,,!стинr 1 б. 7. Применения параметра users
<Directory /users>
A\lthType Basic
АаthПsе.rFilе /var/users/.htpasswd
AuthNam!' Us!'r8Dir
<Limit ОЕТ POST
requ.i.re 1JSerS denis igor evg
</I,imit>
</D'irecto-ry>
6локдиректив Location
С помощью директив, расположенных в блоке Location. можно задать
определенный URLадрес, предназначенный ДЛЯ обозначения каталоroв.
фаЙлов или rрупп файлов. Обозначить rруппу файлов можно с помощью
шаблоцов, напрцмер. шаблон . .htm опредеJIяет все файлы, имеl{Ц KOТO
рых заканчкпаются на .html. В URLадрес не вкщочается протокод к имя
cepl!Cpa. f1pllMep ОПИСЗНlШ блоКJ\ LQcation предстаплен в ЛИСТllнrе 16.8.
Лttстииr 16.8. Блок Location
<Lосаtiоп URL>
диреК'tИ:БЫ управлеftИя досту-по!'1
<!Lосаtiоп>
16.4. Файл ротации журналов
jetcjlogrotate. djhttpd
Файл /etc/logrotate.d/!'It tpd (или /etc/log:totate. d/apache
лли верс.ю1 АрасЬе до 2.0) задает параметры ротаЦИJИI<.урtlaЛОВ неб
сернера, что позволяет подлерживать порядок 11 журнаJ/ъном хозяйстве.
Прffмер этою файла nPJmеден R листинrе 16.9.
листинr 16.9. Файл /etc(logrotatc.d/httpd (Apache 2.0)
/Var /1og Ihttpd/ * ..log
missingok
notifempty
sharedscli. pt's
postrotate
/usr/bi1!/ki11all HUP !!ttpd
endscript
457
LINUX: полное руководство
Убедитесь, что рl;JIЩrd ni>cryna к <.\1 !etc/logrotllte:d/httpd равен 0640
и владельцем зтоrо фаЙла является Пощ>зователь тоо!.
16.5. Системный Файл конфиryрации
/etc/sysconfig/httpd
Этот файл позволяет передать серверу АрасЬе систеМНую информацию,
например, параметры запуска.
Предположим, '1то вы хотите запустить сервер АрасЬе с ВКЛЮ'1еНlЮЙ
поддержкой SSL. Для 3Toro в фaйJl /etc/sysconfig/httpd добавьте
строку:
OPTIONS="DSSL"
Вам нужно только добавить нужные параметры в диреКТlIву OPnONS, а
обо всем остальном позаботится сценарий запуска / etc/init. d/httpd.
Нужно отметить, что файл letc/sysconfig/httpd появился в версям
АрасЬе 2.0.
16.6. Сценарий запуска сервера
Apache /etc/init.d/httpd
Стандартный сценарий запуска -неб-сервера АрасЬе устанавливается из
Toro же пакета, что И сам сервер. В верею! АрасЬе 2.0 можно вызывать
сценарий запуска со следующиМи riараметрами:
. st8rt запуск сервера;
. stop завершение работы сервера;
. res!art переЗцпуск сервера;
. status инФормация о работе сервера;
. condrest8rt Ш"резапуск сервера при наличии файла Ivar/runl
httpd.pid. Этот файл создается при запуске серверц и удаляется
при ero останове. Если Фllйлhtt:рd.рid не удален, значит, сервер Не
был OCl'aHOВJIeH lCoppeKmo: 1\1ШРимер, nPОИЗОWСл сбой систеМbI иди
банальное отключение IштаНJfiI.
Что же касается более старых версий Apaclle, то сценарии запуска по.
:!ВОЛЯЮТ указывать куда больше параметров, чем во второй версии:
. start запуск сервера;
. s!op зцвершение работы сервера:
. restarL перезЦIIYСК сервера;
458
п,ава 16. НПР.сервер Apache
. reload перезаrpУ:JI\а сервера. В отличие от перезаllуска, кш'да сервер
сначала останавливается командой юll (то есть, IIpO-ТO «убивается»), а
потом запускается, при перезаrрузке серверу tlередается сиnfал HUP.
Переэаrpузка может понад06иться при изменении файла конфиryра-
ции сервера, чтобы изменения вступили в силу;
+ condrestart то же, что и одноименный параметр, описаиный
выше;
. status информация о работе сервера;
+ fullstatus БO.llее 110дробlIая информация о работе сервера;
. help подсказка;
+ configtest провсрка файла конфиryрации.
1 б. 7. rpафические конфиryраторы Apache
Практически все параметры веб-сервера АрасЬе можно установить,
используя конфиrуратор netconf (11.14,1.1). ЗапУСТlIте netconf от ИМею!
сynеРIlO.llьзователя И выберите Server Tasks, а затем АрасЬе Web-server.
С tlомощью netconf вы леrко можете Оllределить виртуальные узлы, на-
зНачИТЬ параметры ПОДКаталоrОБ, определить спецификацию каталоrов
и модулей, а также установить параметры модуля modssl (см. рис. 16.2),
настройка котороro рассмотрена далее В этой rлаве.
Рис. 16.2. КонфнrypИРОВ8ние модуля тodssl
459
LINUX: полное рУХОВОДСТВО
в дистрибутив FedoraCore включеН более удобный конфиrypатор system-
contig-httpd (рис. 16.3).
v
.
ФаАtJ б"<?,,нроао.::.
1 ."'k/hItl'1;.,ck
:,::.:.
. l nl!<\O",poт.... 1
..'17:1 1 !
. "!!,"-,""fpOТ1>.
EJ I #.!t.peт.{ f ;'
ФЗ1I РIO;
r-..
KaT9f1Df' ФIiЙ,.Сonr. .I,.",..,.."..,..,....,....",,.',,
ПОАыOlk1iеIlЬ; -.
[;_;ne
.he . .
.
j
Тру""",
I
L
1 . ii1Qn p '
Рис. 16.3. systет-солlig.httpd
16.8. Катало.rи пользователей
Директива UserDir БК1IIOчает noMepJlgty пользовательских каталоroв Эта
директива определяет общее назщUЩ!i!llодкаталоra 11 домаШНИХ ка'I'aЛОfах
всех пользоватсдей. По УМОЛ'laнщ6:IIСПОЛ-ЬЗУСТСЯ кaT3JIOr publichtml.
Данная ВОЗМОЖНQСТЬ очень уд6бfЩПРИ использовании ее в большой кор-
порации, rJIe каждый сотрудтUl' IВI!i!erсобственную странич!.)'. Раньше
эта возможность часто использовалась на серверах, предоставляющих
бесплатный ХОСТИНr. Может быть, помните адреса Bllдa http://www.chat,
,"/mypage?
СеЙчас же все чаще используется,reхнолш'ия виртуальных серверОВ, ко-
торую мы рассмотрим в следующем пункте, но знать, что такое каТ3JIоrи
Iюльзоватедей и как с ними работать, тоже не помешает. Тем более что
домашнне каталоrи настраиваются HaMHoro быстрее и Проще, чем вир-
туальный сервер нужно Bcero .lllIЩь опредеЛIIТЬ Дllрективу UserDir 11
указать местоположение домащних !\аталоrов.
Доступ к файлам, расположенным в ЭТIIХ каталоrах, ПРОlIЗводитея с ПО-
мошью указания реrис'!'раЦlIонноrо IIмени пользователя лосле имеНII
460
rлава 16. НТТР.сервер Apache
сервера через тильду-слэш. Напрllмер, пусть имя сервера www.server.
cOln, имя пользователя denis, тоща URL-anpec будет выrлядеть так:
y,t. "р: I/www.aerver.com/dehi... При этом сервер самостоятельно
опредеЛlfТ, ще имснно раСПQJЩЖСН домашниЙ каталоr пользователя. Если
зто KaTMor /home/den, то сервер передаст lUlиенту файл /hрще/dеnl
PU1)1ic)1tml/ index. html. .
16.9. Виртуапьный НПР-сервер
Кшщепuия виртуальных уздов позволяет одному сеРВерУ Арафе под-
держивать несколько еайroв. Пользователи видят отделыlевеб-узлы' и
получается, что один веб-сервер заменяет н.есколько. Это очень удобно,
если нужно орrанизовать персонзльные веб--сайты пользователеЙ или
собственные узлы подразделений компании, например, develop.mycom-
рапу.сощ.
('pBep АрасЬе мож»о наСТРОI!ТЬ неСКОЛЬКИМII споСобами: Лl!бо так, чтобы
запускалея один сервср, который булет прослушивзтъ все обращения к
виртуальным ссрверам (такоЙ вариант настраfшается при помоши ди
рективы VirtualHost), либо запускаТЬ ОТДСIlЬНЫЙ процесс ДЛЯ каждоrо
виртуа.",..lfOl'О сервера (в этом Сllучае примеюuQ'ТСЯ дире:кТИВЫ Listen и
ВindAddress). В этом параrрафе я буду рассматривать первый вариант.
I3нутри блока директивы VirtualНost можно использовать любые дирскти-
вы. кроме. ServerType, BindAddress, Listen, NameVirtualНost, ServerRoot,
TypesConfig, Pidf'ile, MinRequestPerChild, MaxSpareServers, MinSpare-
Servers, так как нскоторые IIЗ них ОТНОСЯТСЯ К ОСНООflОМУ HтrpccpBepy
(например, ServerType), а некоторые ко оторому варианту настрой-
ки вирт)'алы!ых серверов I! здесь иеприсмлсмы. Обязательно должны
ПРllсутствоваТI, директивы ServerName, DocumentRoot, ServerAdmin и
ErrorLog.
В завиC1lМОСТИ от flepcnн и от настроек АрасЬе виртуальные узлы MorYT
"РОШlсываться либо I1 фаЙJIе htcpd. сопf, либо в фаЙле vhoSC$ .соп f.
ВI!Р'fYальные серверы можно Iщентифицировать по имени или по IP-
алресу.
16.9.1. Виртуапьныесерверы
с идеН11tфИК8цией по имени
l1лентификаuия по имени имеет сушественн.Ge преимущество перед l!дeH
тификаuиеЙ по IР-здресу: вы не оrраничены :количеством адресов, имею-
щимся в вашем распоряжении. Вы можеТе и,-пользовать любое количсство
461
LINUX: полное РУКОРОДСТIlo.
виртуальных серверов, и.при этом вам не нотребуются дополнительные
адреса. Taj(.oe l!Oзможцо 6даroдаря использованию протокола НТТР/1.1.
ДанныЙ протокол поддерживается всеМи современными браузерами.
Поддержка виртуальных узлов обеспечивается диреj(.Тlшами VirtualHost
и NameVirtualHost. Если ваша сис;rема Имеет только один 1Paдpec, ero
нужно указать в директиве NameVirtualНost. Все блоки VlrtualНost будут
использовать этот IP-аJIрес.
Внутри блока VirtualHost заПИСЬЦjаеtc>J ДИреКТlmа ServerName, задающая
доменное имя длясомаваемоrо ВI{I>Туальноrо сервера. Ее обязательно
нужно записать, чтобы избежать шщска службой DNS вы же не хоти
те, чтобы при неудачном nOlrCKe виртуальный сервер был заблокировац?
Друrие директивы в блоках VirtualHost описывают параметры каждоrо
виртуальноrо сервера в отдеЛЪНОС11i (JiИстинr 16.10).
Лист"нr 1 б. 1 О. Два ""РТУЗJ1ЬНhtX С<феора www и lib
ServerName deh.dhsilab9.cofu
<Na!neVirtualHost 192.168.1.1>
<virtua1Host 192.168.1.1>
ServerNarne www.dhsilabs.co!n
ServerAdrnin webmastex.@den.qhsilabs. СО!n
Docu!nentRoot Ivar/httpcj/www/html
ErrorLog Ivar/https/www/logs/error.log
ТrаПSfеrLоg 10gs/access.log
</VlrtualHost>
<VirtualHost 192.168.1.1>
ServerName НЬ. dhs НаЬа. соrn
Sеrvеr.Аdrniп webmaster@den.dhsilabs. соrn
DоснrnепtRооt /var/!ottpdllibJhtrn1
ErrorLog Ivar IhttpsllibJ10gs/error. 10g
TransferLog logs/access.10g
</virt"\lalHost:.>
Если ваша система имеет только один IР.адрес, доступ к основному cep
веру напрямую будет невозможен: нужно включить ето IIМЯ (в примере
www.dhsilаЬs.соm)вчцсдовиртуащ.II.Ь!){. Эти имена должнь\ быть IIрОПИ
саны в службе DNS. При наличии Д13ух IPaJIpecoB МОЖНО один присвоить
основному серверу, а друrой виртуальному.
462
rлааа 16. HТТPcepaep Apache
Сервер АрасЬе позволяет ИСПОЛЬЗО)l!n' !fесколько доменных имен Ддя
доступа к одному серверу, например:
ServerAlias www.dhsilabs.comwww2.dhsilabs.com
При этом запросы, послаиные по IР'адресзм, которые присвоены вашим
виртуальным узлам, должны соответствовать одному 113 указанных домен'
I1ЫХ имен. Чтобы зафиксировать запросы, не соответствуюшие ни On!fOMY
из этих имен, НУЖl10 с помошью опuии default:* создать виртуальный
узел, который будет обслуживать такие запросы:
<VirtиalHost default:*>
16.9.2. Виртуальные серверы
с идентификацией по IP вдресу
в директиве Virt\lalHost в качестве адресов можно использовать домен'
ные имена, но лучше указывать IР'адрес, причем действительный, а не
виртуальный. В этом случае вы не будете зависеть от DNS при разре!llении
имени. Также потребуется ОДИН IP'aдpec ДJJЯ пашет OCHOB!!OrO сервера.
Если же распределить все адреса между виртуальными серверами, то
нельзя будет получить доступ к основному серверу.
Листи»r 16.11. ИДентификация по IP'aApecy
cVirtua1Ho8t 192.168.1.2>
ServerName ].dllsilabs.com
Ser"verAdrnin v.1ebmaster@de.n.dhsilabs.com
DccumentRoot /vаr/httрd/wwи/htm1
EITorLog !var /https/www/ 10gs/ erro.r .10g
</VirtualHost>
<virtulHost lib.dhsi1abs.com>
ServerNme lib.dhsilbs.com
ServerAdmin иеЬmstеr@dеп.dhsi1аЬs.соm
DocumentRoot Ivr/httpd/1ibIhtml
ErrorLog /var/https/1ib!10gs/error.1og
</VirtualHost>
При коифиrУРllровании виртуальных серверов можно использовать
ОПЦИЮ ExecCGI, которая разрешает выполнение СGIсценариев на
виртуальном сервере. ЛИСТlшrи 16.12 и 16.13 демонстрируют настроЙку
110ЧТQвоrо веб'Jlнтерфейса.
46а
UNUX: полное Р'Уководст'i3'
Лиcrnнr 16.12. Файл 11ttpd.conf
<Dirесrлrу /home/httpd/mail>
order deny,allow
dепу [rоtп al1.
allow frorn localhost
illlow froro 192.16.!,
allow fron 123.123.123.123
Qp\:.ions ЕХ'есССП':
</Dir"ect_ory>
Лис,инr 16.13. Файл vllosts.cDnf
<VI rtua lНost 123.123.12'1.123:>
ServerAclmin webmaster@den'dhsilabs.com
DОСUПlerlLRооL /home/htctpd/mai1
SeTverPa th /mail
Serve ,r"Name wwwmail. dhs i l-abs-. сот
ErrorLog logs/rrorlog
ТrапsfеrLоg '1og:s:/access......,log
# Еrп,:н. 403 " ошибка дос-туu изв:r:е, ТО есть почтовый
#: интерфейс будет доступен только ИЗ локальной сети
f:.lтоrDосu:пепt 403 http://www.dhs.i1abs .сcrn/п!Вssagез/errоr403 .h:ml
</Virtua1Host>
16.10. SSLи Apache
16.10.1. Установка SSL
SSL (Secure Sockets Layer) является методом шифрования, разработillUIЫМ
компаниеЙ Netscape для обеспечения безопасности передачи данных.
Этот метод поддерживает несколько методов шифрования и обеспечи-
вает аутентификацию "ак на уровне клиента, так и на уровне сервера.
SSL работает на транспортном уровне и поэтому обеспечивает надежное
шифрование все" типов данных. Более подробно о реализации SSL мож-
но прочитать на сайте !tомпании Netscape http://home . пеt есаре.
COm/:L пfо! 5€tcuritydoc. html.
Протокол S-HTTP Яllляется еще одним «безопасным» интернет-про-
ТОКОJlОМ. Ои был разработан ддя предостаВЯСЮ1Я конфиденциальности
ШН!ИЬ!Х, передаваемых через соединение. Коифиденциальность нужна,
например, при передаче иомеров кредитных карточек и прочей I!ВЖНОЙ
информации.
464
rлава 16. НПР-сврверАрасhе
МОДУЛЬ щоdssl реМIf3Ует в сервереАрасltеслой SSL, который осущест-
вляет nшфрование BCCro потока данных между клиентом и сервером. Дnя
всех остальных частей веб-сервера модуль щоdssl явмется ПрозраЧным.
Для работы в этом реЖШfе требуется браузер, поддерживаюЩI!Й меха-
низм SSL'(этому условию удовлетворяют все раС"lJостраиенНъrе сеrодня
браузеры);
Что касается установки, то вам необходим цакет OpenSSL (bttp' /!www.
openssJ.. org), хотя, возмО)кно, у вас В системе уже установлен этот пакет
(в современных дистрибутlIВах он устанавливается по умолчанию). Если
вы будете собирать OpenSSL из исходных текстов, то последовательность
ваших действий такая:
# tar zxvf opensslx.y"z.tar.gz # x.y.z номер версии
# cd opensslx.y.z
# ./config.
# такс
# такс install
# ldconHg
Перед выполненнем команды Idconfig убедитесь, что в файле
/"tc/ld.so.cO!1f прописан путь к библиотекам OpenSSL (по умолча-
нщо Э'l'о./ц"х-/10саl/ssl/1iЬ).
16.10.2. Подключение SSL к Apache
Версия modssl, которую вам нужно установить, должна быть совместима
с вашей версией Apaclte, иначе модуль mocCssl будет некорректно рабо-
тать или вообще откажется что-либо делать. Последние цифры в названии
модуля указывают lIа совместимость с определенной версией АрасЬе.
Например, для АрасЬе 1.3.14 нужен фаЙл modssl-2.7.1-1.3.14.!ar.gz.
Для сборJШ modsslI!1I1CXOJIHblX текстов выполните команду:
N. /c.'oпfigure withapach07. ./apac.'1el. 3 .14 wir.hS81. ./cpensslO.9.5
В данном примере я использую OpenSSL 0.9.5. Теперь nepel!дlrre в каталоr
с АрасЬе, ОТКОМП1Uшруйте ero и установите сертификат:
# cd ../арасhе1.з.14
# таке
# таке certificate
# та.ке i!1stal1
Таким образом вы устаНО!lите АрасЬе в IC8Ta1/0r, указанный в опции
--prefix (по умолчанию lusI'/1ocal/apache).
465
UNUX: полное руководство
Теперь попробуйте запустить АрасЬе. Это можно сделать с помощью
команды:
# usr/local/apache/bin/apachectl Btartssl
Параметр startssl необходим для I!хлючения SSL. Сервер АрасЬе уже
функционирует, однако обраТИТЬС!l по протоколу HTTPS вы еще не
можете. Для этоrо вам нужно сконфцrypИРОRать виртуальиые узлы, ко-
торые будут ИСПОЛЬЗОRать протока)) НТТРS. Но для начала неоБХОДIIМО
настроить АрасЬе для прослущиваfIИЯ порта 443 (это стандартный порт
для протокола НТТРS). Добавьте в файл letc/httpd/conflhttpd.
соnЕ следующие строки:
l,isten 443
NamevitualHo5t х.х.х.х:443
ТеПерь непосредственно np!lCТYnHTe к созданию sиртуальноrо сервера,
работающеrо по протоколу НТТРS, д!IЯ чеro продолжите редактирование
файла letclhttpd/conflhttpd.conf. Пример тoro, что неоБХОДliАЮ при
этом пвеС1"И, приведенв лиcrинте 16.14. После этих обязательных директив
вы можете конфиryрировать свой виртуальный узед как обычно.
Листинr 1 б. 14. Виртуальный HTTPS-cepsep
<VirtualHost Х.х.х.х:443>
# Эти строки нужны для поддержки SSL
SSLЕngiпе оп
SSLLogI,evel warn
ssr,Opt ions +StdEnvVars
SSLCertJ.ficateFile lusrl1ocal/apache/conf/s81.crt/server.
crt
SSLCert ificateKeyF'ile /usr/localjapache/confj8s1.key /server. key
SS;"Log luS!"/locall apache/log$/8s1eng.i пе10g
I ..........................
Seve r.Name WWW. dilS i labs. сош
ServelAdmin webmaster@aen.dhsilabs.com
Docum<'"'tRoot Ivar/httpd/www/html
Er:rorIJog I'lar /https /vJYM/logs/error. lo)
</Vi.r"tualHoSL>
Теперь НУЖIIО пере запустить сервер httpd. При запуске АрасЬе потребует
пвести lIароль. Если вы не ХОТlIтевводить ero при каждом зanуске систе"
мы, то переЙдите в каталdr, rде находится фаЙл 581. key, и ВЫПОЛНlIте
следующие команды:
466
rпaBa 16. НТТР-сервер Apache
# ер server.key server.key.org
4 орепззl rsa .in server. key. org out se.rver. k:ey
. chmod 400 server.key
Почти все roтово! Теперь сервер не должен запрашивать пароль и будет
работать в нормальном режиме_
Чтобы АрасЬе по умолчанию стартовал с поддержкой SSL, исправьте
в фаЙле apachectl (он устанаllЛиваетея в каталоr /bin, /sbin ишf
lusr I sbin, см. rpm ql <naKeTApaehe» условие start на startold,
а slarlssl на просто slarl. Затем, находясь в каталоrе /usrl1oeal/bin,
установите ссылку openssl:
# lп B /usr/local/ssl/bin/openssl openssl
16.10.3. r'eнерирование сертификатов
Сертификат raрантирует безопаСliое подключекие к веб-серверам и/ltлn
удостоверяет личность владельца. Идентификация обеспечивается путем
применения личноrо ключа, известноrо только пользователю данноЙ
системы. Korдa пользователь посещает защищенныЙ узел для передачи
секретной информации (например, номеров кредитных карточек) по
протоколу HТТPS, узел автоматически посылает ему сертификат.
Итак, давайте приступим к rенерированию сертификатов. Для этоro
сначала выполните команду:
# openssl genrsa dеsЗ out server.key 1024
Она создаст файл server. key. После этоro вы должны подать запрос
в службу верификации:
openssl req neW key server.key out server.csr
Здесь вам придется ответить на вопросы. Если вы ошибетесь Шfчеrо
страшноrо, все можно будет повторить заново. В том случае, если запрос
сrенерирован правильно, вы должны получить такую надпись;
Уои now have to send tr,is Cert ificate Signing Request (CSR)
tQ а Certifying Лuthоritу (СА) [or signing
Отвечая на вопросы, будьте очень внимательны ваши ответы увидит
весь мир.
По всем правилам вы сейчас должны подписать сеРl'ификат у серти-
фицируюшей орrанизации, Это услуrа платная, и оказывает ее ком-
пания ThawTe (www. thawte. сот), которую В России представляет
www.solutions.rbe.ru. Бесплатно вы можете получить только «са-
моподлисанный" сертификат. Скопируйте sign . sh из пакета modssl 11
каталоr с ключами и подпишите себя сами;
467
UNUX: ПоЛное pyKOВOдci1вO..
# орепээl req new x509 days 365 Key зеrvеr. key out server. csr
#./sign.sh server.cSr
Если на экране появится f!аднись
Now уои have two files: server.key and server.crt.
These now сап Ье used аэ followiпg
то это означает, ЧТО псе собраИОltpjlВИЛЪНО. Затем скопируйте HO)Jble
файлы server ,кеу 11 server . cJ:Ct.lta место старых. Выпощщте команду
make в каталorе с .сrt-файлом.
В итоrе вы получите полностью работаюший АрасЬе, защищенный SSL.
Для сбора полной информации (} работе SSL введите:
# openssl sclient connect localhost:443 state debtlg
16.11. ПРИМt!рф",йпа httpd.conf
в этом lIарarpафе ПРfщеден nримрli,,-ндартной К(Jнфцryр"-lIIЩ сервер"-
АрасЬе. К,,-ждому бдщу дистинrа ЦЦ СОПУТCТD}'IQт к(Jмцентарии, KOTO
рые помоryт вам раэобратъся: сра:щпчиыми иастроliкаМ\I cepJJepa.
Листинr 16.15. ПРlIмерф::tйла htt.,d.conf
##
## httpd.conf файл кофиурации серэера нттр АрасЬе
##
#
# Установите имя серВера
SQrverName www.dhsilabs.com
ResQurceConfig /dev/null
АссеssСопfig /dev/null
# Поддержка динамИческих раздеемых объектов (Dynamic
# Shared Object О50)
# для более подробной ииформации d DSO прьчтите фАйЛ
« README.DSO,
# ВХОДЯЩИЙ Б дистрибутив Apache
« Модуль расширяет возможности сервера Apaerle,
# добавляет в ero состав новые функции.
« Подключить модуль Можно так
# LoadМodule foomodule libexec/modfoo,so
ii Вы можете найти документацию по МОДУlIЯМ В фаЙле
# "ivar/www/manual/mod"
468
rлава 16. Н1ТР-сервер ДP.che
LоаdМоd\Йе mmapstaticmodule modu1es/mod._J!U1,apstatic. во
LoadМodule envmodu1e modu1es/modenv.so
## The first modu1e activates buffered 10gs.
# Первый модуль обеспечивает протоколирование.
# Он заПИШеТ информацию
# в протокол accesslog, коrДа буфер объемом 4К
# rrереполнитсЯ.
#LoadМodule configbufferedlogmodu1e modules/modlog
configbuffered.60
)ooadМodule confj.glogmodule modules/mod...logconf ig. 90
LoadМodule agentlogmodule module9/modlogagent.5o
LoadМodule refererlogmodule modules/modlogreferer.so
#LoadModule юimеmаgiсmОdulе люdulе5/mоdmimеrnagiС.$О
LoadМodule mime...modu1e modules/modmime. 50
IooadМodu 1 е negotiationmodu 1е modules/modnegotiat ion. 50
LoadМodule statu$modu1e modules/mod5tatus.so
LoadМodule infomodule modules/modinfo.so
# Вы должны выбрать директиву modinc1ude
# или modiпc1udexssi,
# но не обе ОДНОВреМеННО! ДИректива moqinclude более
#- безопасна, но xxsi содержит больше ФУНКЦИЙ.
LoadМodule includesodule mоdulеsJщоdiпсludе.sо
#LoadМodule includesmodule modulesJrnodincludexssiso
LoadModule autoindexmodule
LoadМodu1e dirmodule
LoadМodu1e cgimodule
LoadМodu1e asismodu1e
I,oadМodule imaprnodu1e
LoadМodule actionmodule
#LoadМodule 5pelingmodule
L,oadМodu1e userdir module
LoadМodule proxymodu1e
LoadМodule dliasmodule
modulesjmodautoindex. 60
rnodules/moddir.so
юоdulеs/mоdсgi.sо
modu1es/modasis.so
modu1es/modimap.so
modules/modaction5.5o
module$/modspeling.so
inodlJ,les/m()duse::t;:"dir. 80
modu1e/libproxy.so
moduleB/moda1ias.so
# Модуль modjserv должен быть объявлен до modrewrite.
"' IfDe f irle HAVEJSERV>
LoadМodule jservmodule modUles/modjserv.Bo
<lIfDefine>
LoadМodule rewritemodule
LoadМodule accessmodule
l.."oaclМodule aut!'Imodule
modules/roodrewrite.50
modules/rnodaccess.so
rnodules/modauth.so
469
UNUX: полое P'l"080ACTO
LoadМodule nonauthrnodule
#LoadМodu1.e dbrnauthmodule
#LoadModu1.e dbauthmodu1.e
LoadМodule digestmodule
#LoadМodule cernmetmodule
LoadМodule expiresmodule
LoadModule headersodule
LoadМodule usertrackmodule
#LoadМodule exarnplemodule
#LoadМodule uniqueidmodule
LoadМodule setenvifmodule
щоdulеs/mоаuthаnоП.sс
modules/moautdbm.so
modules/modauthdb.so
modules/modigest.so
ЩQdulеs/mоdсеrпmеtа.sо
modules/moexpires.so
modules/modheader8.so
modules/modusertrack.so
modules/rnodexarnple.so
modules/moduniqueid.so
.modules/mod8etenvif.so
# В попном списке модулей пжflЫ быть ПереЧkСПеНЫ все
# доступные модули (стаТИЧеСКИеИПИ раЗДеляемые)
# в праsипьиои ПОрЯДКе выполнеНИя.
ClearModuleList
# AddМodule modJl\U\apstat.ic.c
# AddМodule Moabp.c
# AOdМoOиle modhp3.c
# AddМodule тobp4.c
# AddМodule moderl.c
# LoadМodule phpmodale moduleJ>!mod....Php.so
# LoadМodule phpmoml1e mОduеs!mоd....Рhр4.эо
# LoadМodule рhр4mоdulеrnОdцlе's/mоdhр4. 80
AddМodule modenv.c
AddМodule modlogconfig.c
#AddМodule modlogconfigbuffered.c
ddМodule modlogagent.c
AddМodule modlogreferer.c
#AddМodule modmimemagic.t
AddМodule modmirne.c
AddМodule modnegotiation.c
AddModuJ.e modE;tatus.c
AddМodule modinfo.c
AddМodale modinclude.c
#AddМodule modincludexssi.c
AddМodule modautoindex.c
AdoduJ.e moddir.c
AddМodule modcgi.c
AddModule пюdа8is. с
AOdМoOцle modimap.c
AddМodule modactions.c
#AddМodule modE;peling.c
Ad,iМodale moduserdir.c
AddiV,odule mod....Proxy. с
AddМodule modaliaE;.c
470
rлава 16. НПР-серверАрасhе
# Модуль modjserv должен быть объявлен до modrewrite.
<IfDefine HAVEJSERV>
AddМodule rnodjserv.c
</IfDefine>
AddМodule modrewrite.c
AddМodule rnoдacceBB.c
AddМodule modauth.c
AddМodule modauthanon.c
#AddМodule rnod....authdbrn.c
#AddМodule rnodauthdb.c
AddМodule moddigest.c
#AddМodule modcernrneta.c
AddМodule modexpires.c
AddМodule modheaders.c
AddМodule rnodusertrack.c
#AddМodule modexample.c
#AddМodule moduniqueid.c
AddМodule modso.c
AddМodule rnodsetenvif.c
# Name Space апд Server Settings
# НастроЙКИ пространства ИМен и сервера
# В этом разделе ВЫ определяете, какие имена будут видеть
# полЬзователи BamerO HTTPcepBepa. Этот файл также
# опредеnяет настройки сервера,
# KOTope раньше содержались в ОТДельном файле srm.conf.
# Теперь этот файл входит в состав httpd.conf
n Директива DocumentRoot опредепяет местонахождение
# кориевоrо каталоrа документов вашеrо сервера.
DocumentRoot /var/www/html
# Директива UserDir задает названия подкатапоrа s домашнем
# каталоrе пользователя, из KOToporo берутся документы в
# ТОМ случае, коrда вы активизируете ВОЗМОЖНОСТЬ
# ИСПОЛЬЗОЕания пользовательских KaTanorOB.
UserDir publichtml
# Директива Directorylndex позволяет aдaTЬ название
п документа, который будет
# возвращен по заПРОСУt который Не 'содержит имя документа.
Directorylndex index.html index.php index.htm index.shtml
index.cgi Default.htm default.htrn indех.рhрЗ
471
UNUX: попиое P\'!C080ДOrвo.
# Директива Fancylndexing определяет ОфОрМЛение
# КатаЛаrа стандартное или индексируе!1ре.
Fancylndexing оп
# Директивы AddIcon' укаЗNвают серверу, какие пиктоrрaмuы
#, использовать ДЛЯ hоказа различных типов файлов
AddlconВyEncooihg (СМР ,/ icons/campressed.gif) xcampress xgzip
AddlconByType (TXT,ficons/text.gif) text/*
АддlсопВуТуре (IMG, (ieons/iffiage2. gi f) iшаgе/
АддlсоnВуТуре (SND, /icohs/sound2 .g10 ацРТо/*
АддlеопВуТуре (VID,fieans/movie.giO video/*
Аддlсоп /icons/bihary.gif .Ып .ахе
Addlcon /icons/binhex.gi! .hqK
Addlcon /icohs/tar.gif .tar
Addleoh /icohs/world2.gif .wrl .wrl.gz ,vrm1 .vrm .iv
АдсНеоn /iCohs/compressed.gif . Z .z . tgz .gz ,zip
AddlcOh /icans/a..gif .ре .а; .ерэ
АдсНеаа / iCOhs/1ayout. gif..htm1 . shtml . htm .pdf.
AddlcOh /icOhs/text.gif .txt
Аддlсоп /icons/c.gif .с
АддIсоа licahs/p.gif .р1 .ру
Аддlсоп /iсопs/f .gif . for
Addlcon /iCOhS/dvi.gif .рУ;
Аддlсоп /icons/uu.encoded.. gif . ии
АддIсоn licons/script.gif .соn! .sh .shar .csh .Ksh .tcl
Addlcon /icons/tex.gif .te.
Addlcon liсолs/ЬЬщЬ.gif core
AddIcOIi /iconsfback. gif .,
Addlcon fiсаЛS/hаnd.right.gif README
Addlcon ficons/folder.gif ADIRECTORY'
Addlcon ficons/blnk.gif AELANKICON"'
# Директива DеfацltIсап ОЦРедедяет пиктоrрамму
#. ПО УМQлчаЮ1Ю.
DefaultIcon liconslunknown,gif
# директива AddDescription Задае оrсаНие файла
# Формат: AddDescription осание' filename
11 Директива "eadmeName опро:.деляет. имя Файла README
# по умолчанию
# Формат: ReadmeName пате
472
rлвВI! 16. HТТPcep8ep Apache
HeadтeName README
Heade:rName HEADER
Директива IndexIgnore определяет набор файлов, которые
# будут npоиrнорированы при индексировании
# Формат, IndexIgnore патеl пате2...
IndxIgnore .??* * * HEADER* READМE* RCS
# Директива АссеsэFileNamе определяет имя файла, содержащеrо
# директивы управления доступом
AccessFileName .htaccess
* Директива ТypesConfig заДаеТ местонахождение
# файла mime.types
lyPesConfig letc/httpd/coпf/apachemime.types
. С помощью директивы DеfацltТуре Можио указать
# МlМЕтиn по умолчанию для документов., тип которых
# серВер аnpедепить Не МОЖе
D'i'fau1t'1'ype text/p1ain
ff Директива AddEncoding рарешает браузеру распаковывать
# ИliфОРмацию 'на лету'
AddEncoding xcompress Z
AddEncoding xgzip 9Z
" лddLапgцаgе разрешает определять язык ДOKYMHTa
AddLangUage еа .еЛ
AddLanguage fr .fr
AddLa!lguage де .де
AddLanguage да .аа
AddLangиage е1 .е1
AddLanguage it .it
# Директива LangUagePriority определяет npиоритет языков
1anguagePriority еп !r de
# Директива Redirect позволяет переНаправить кдиента
# на друrой URL. Вы можете перенаправить КJlиент"
# На друrой узел ил» на Uщ." который Нi!L1{ОДИТСЯ В вашем
# npос'Т'ран:стве име'Fi, то есть на до-КУМен:т',
# который находится в одном из подкатапотов катаЛОrа
473
UNUX: попное руководство
# DocumentRoot. Вы не MoeTe, например, nеренаnpавить
# клиента к каталоrу /etc, потому что он не
# находится в вашем пространстве имен.
# URL это идентификатор ресурса, поэтому ВЫ должны
# ero указывать В виде
# протокол://адрес.домен, например, http://www.linux.ru.
# Если вы укажее просто _каЛQr, например, /images, этот
# каталот должен быть подкатадоrом каталоrа DocumentRoot,
# а не корневото каталота вашей основной файловой
# системы. Формат: Redirect несуществующийurl url
# С помощью директивы Alias можно предоставить доступ
# не только к файлам, находящимея в каТdлоrе, указанном
# директивой DocumentRoot, и ero подкаталоrах, НО и в
# друтих каТаЛотаХ. Формат;
# Alias иесущеСТВУDщее Nормалъноеимя
Alias /icons/ /var/www/icons/
# ScriptAlias оnpеделят раСnОЛQжение каталоrа сценариев CGI
# Формат: ScriptAlias nодставноеимя настоящееимя
ScriptAlias /cgibin/ /var/www/cgibin/
ScriptAlias /protectedcgibin/ /var/www/protectedcgibin/
# С помощью директивы АддТуРе можно добавить новый
# тиП MIME, который не уКазаН В файпе apachernime.types.
# Формат, AddТype type/subtype extl
# Обычно для модуля РНР4 (он не является частью Apacrle)
# директива AddТype используется так,
Addlpe application/xhttpdphp4 .рhрЗ .phtrnl .php .php4
# АддТуре аррliсаtiоп/хhttрdрhрЗsоurсе .рЬрв
# Для PHP/FI (РНР2),
# AddТype application/xhttpdphp .phtrnl
# Scr ipt.Alias / hp/ /usr/bin/php
# Action application/xhttpdphp /usr/bin/php
# Action аррliсаtiоп/хhttрdрhрЗ /usr/bin/php
# Action application/xhttpdphp4 .
# Директива AddHandler позволяет сопоставить
# определенному типу MIME какойнибудь обработчик.
# Формат: AddHartdler actionnarne extl
# Для использования сценариев С(Н:
AddHandler cgiscript .cgi
474
rлава 16. НПР.сервер Apache
# Для использования rенерируемых сервером файлов HTML
AddТype text/html .shtrnl
AddHandler server-parsed .shtml
# Раскомментируйте нижерасположенную строку,
# чтобы включить функцию
# АрасЬе 'отправь-как-есть' (send-as-is)
#AddHandler send"asis asis
# Если вы хотите ИСПользоваТЬ карты изображений:
AddHandler imap-file тар
# Для включения карт типов используйте:
#AddHaпdler type-map var
# С ПОМОЩЬЮ дрективы Action можно оnpеделить
# какое-нибудь действие для обработчика. Например, вы
# можете заrryстить какую-нибудь nporpaммy
# для обработки файла данноrо типа.
# Формат: Action media/type /cgi-script/location
# Формат: Асtiоп haпdler-name /cgi-script/locatioп
# Директива MetaDir оnpеделяет имя KaTanora, в котором
# сервер Apache моЖет найти информационные файлы meta.
# Эти файлы содержа дополнительные заrоловки HTT,
# которые будут добавлены к документу
# перед ero передачей клиенту.
#MetaDir .web
# Директива MetaSuffix определяет ИМЯ суффикса файла,
# который содержит
:# mеtатэt'и.
#MetaSuffix .meta
# Здесь можно определиь сообщения об ошибках.
# Это можно сделать тремя способами:
1) обыкновенный TeKCT СИМВОЛ кавычкаИ обозначает текст
# и клиенту не посылается
# ErrorDocument 500 'ошибка сервера.
#
#
#
#
#
2) локальное
ErrorDocument
ErrorDocиment
перенаnpавление на документ ИЛИ сценарий
404 /missing.html
404 /cgi-bin/missinghandler.pl
475
UNUХ:.!10ЛНое pyкOIIOA<m19
# 3) жнешиее перенаnpаВЛе
# ErrorDocurnent 402 http://sQme.otherserver.com/
# subscriptioninfo.html
#
# Модуль modmimemagic ПОЗВQдяет сеРВерУ использовать
# различные подсказки ИЗ файл для оnpедепе ero тИПа.
# MimeMagicFile /etc/httpd/conf/rnagic
# Следующие диреКТИ8Ы не06ходиI<IЫ ДЛЯ 6раузеР08 Netscape 2. х И
# Internet Explorer 4.0Ь2
BrowserMatch "Mozilla/2" noeepalive
BrowserMatch "MSIE 4\.ОЬ2;* n Q keepalive downgrade1.0
forceresponse1.0
# Следующие директивы откЛIOна ответы HТТP/l.l для 6раузеров,
# которые не ПОДДерживаютцротокоп HTTP/l.l
BrowserMatch "RealPlayer 4\. О" forceresponsel. О
BrowserMatch "Java/l\.O* fоrсеrеЭРОПsеl,О
8rowserMatch "JDK/l\.O" foJ::c<1:responseI.0
#H Настройки. доступа _.и.
# В этом разделе оnpеДеляюТС!{'наСТрОЙКИсеРЭера,
# которые упраВJ1:ЯЮТ ДОСТУПО1\!iК серверу. РаНьШе ЭТИ
# настройки нахоДИЛИСЬ в файле access.conf.
# Каждый каталоr, к которому АрасЬе может получить
# доступ, Может 6ыть сконфпryрпрован оnpеделенным обраЗ0М.
# Можно запретить выnолнее яеоторых oцep, доступ
# определенных пользоВателей ИЛИ узлов сети.
# Установки доступа распространяются на весь каталоr
# и на все ero подкаталоrи.
# Прежде Bcero коифиryрируем корНеВОЙ катаЛоr
# для установки nОЛНОМОЧЙ дотупа.
<Directory (>
Optlons Indexes Includes FollowSymLinks
AllowOverride Nопе
</Directory>
<Directory /home>
# Здесь ДОЛЖНЫ быть определены директивы "lncludes.,
# " FollowSymLinks", " ExecCGI " , "MultiViews" ИЛИ любая
476
rлаваtе. ИТW-сервер ДраФе
# комбинация "Iпдекев"
Options IndeKes Inc1udes Fol1owSymLinks
A11oWOVerride Аll
# Разрешает доступ всем
order a11ow,deny
allow frcm аН
</Directory>
# Каталоrи /var/www/cgi-bin и Ivar/www/protected"'.cgi-bin
# ДОЛЖЦЫ БЫТЬ определены с пЬмощьn дирехТИВЫ$riрtАliаsеd
<Director-Y /var/www/cgi.bin>
AlloWOverride All
Options ExecCGI
</Directory>
<Directory /var/WWW/protected-сgi-biп>
order deny,al1ow
делу [тот аН
allow frcm localhost
# al10w from . yourdomain . сот
AllowOverride None
Options ExecCGI
</Directory>
# Разрешает ОТЧеТ о СОСТОИ сервера
<Location Iseverstatus>
SetHandler severgttus
arder deny,allow
депу [тот а11
allow [уот localhost, 127.0.0.1
# Установите здесь имя: Вашето домена
# al1cw иот . YO\lr.::$omain. сот
< I Location> .
# Разрешает доступ кфайлat>' докуме"тaци>I'щiя локальной машины.
Alias /дос /usr/share/doc
<Directory IHsr/share/doc>
оудеу deny,allow
471
UNUX: полное руо:овоAC'nЮ
deny from а11
allow from localhost, 127.0.0.1
# allow from .yourdomain.com
Options Indexes FollowSymLinks
</Directory>
#................ Конфиrypация сервера ...................
# Тип сервера: inetd или standa1one.
ServerТype standalone
# Если вы используете тип inetd, перейдите
# к директиве 'ServerAdmin'
# Директива ?ort только для standalone'cepBepa.
# Если вы хотите запустить
# сервер Apa.che с использоваfIИем этоrо или любоI'О
# друrоrо порта, номер
# KOToporo меньше 1024, вы должны обладать npавами
# суперпользователя. Но
# даже есЛИ у вас неТ таких прав, вы можете запустить
# сервер ДЛЯ работы с портам, номер KOToparo npевышает
# значение 1024. Обычно используется
# номер 8080 или 8000.
Port 80
# Сервер Apache веДет журнал доступа друrих компьютеров.
# Если вы включите следующур .опцию, то в журнал будет
# заПИСаНО доменное имя комnьртера'клиеН$а. Еспи зта
# опция выключена, то в ЖУРнал будет записан IР.адрес
# клиента. ВКЛРчение Данной опции замедляет рабоry
# сервера, так как et требуется дополнитеЬНDе время
# на ОЖИДание ответа от сервера DNS.
HostnarneLookups off
# Директивы User и Group оцредедяют идентифиаторы
# пользователя и rруппы O имени которых запускается
# сервер в автономном режиме. Можно использовать как
# реrистрационные имена, так и UID. По умолчанию
# исподьзуется имя пользователя nobody или apache. Из
# соображений безопасности не рекомендуется изменять
# ЗТО значение и присваивать имя реальноrо пользователя.
User apache
478
rл.в. 16. НТТР.сервер ДPBche
Group apache
# Директива ServerAdmin задает электронный адрес веб
# мастера вашето вебузла. В случае возникновения ошибок
# именно по этому адресу будет отправлено сообщение.
SеrvеrАdmiл root@localhost
# В директиве ServerRoot указывается местонахождеиие
# файлов конфиrурации сервера Apache. По умолча1ЩЮ
# используется каталоr letc/ht.t.pd.
ServerRoot let.c/ht.tpd
# Следующая директив" используется ддя J<омnьютеров,
i которые имеют несколько IPaдpeCOB. (}БЫЧНQ данная
# директива используется для конфиrурирования
# виртуальных узлов.
# BindAddress .
11 ПРОСЛУJIIИвать порт 80
Listen 80
# Директивы ErrorLog и TransferLog определяют расположение
# журналов сервера Apache. Обычно используется каталоr
# letclpttpd/logs, который является ссылкой На. каталоr
# Ivar/log/httpd или на любой друrой..
ErrorLog logs/errorlog
# LogLevel: устанавливает уровень npoтоколирования.
# Протоколируются предупреждающие сообщения сервера (warn)
# и ошибки. Если вы хотите npотокоовать только ошибки,
# 'r<тановите error
LogLevel warn
# Определяет формат файлов протокола, то есть ииформаuию,
# которая будет ПРОТОКОЛИроваться. Обычно измеНЯТЬ эти
# значения Не нужно..
LogFormat '%h Н %и %t \'%Т\' %>8 %Ь \'%{Referer}i\'
\"%{UserAgent)i\.'combined
LogFbxmat '%h %l %и %t \'%r'" %>8 %Ь" common
Logrorrnat '%{Referer)i > %U" referer
LogFormat .%(Useragent)i" agent
479
LINUX: nQJ1Hoe рукреодство
# Можно определить тип протокола
# Если вы хотите протоколировать общую информацию
#CustomLog logs/accesslog ccmmon
# Если вы хотите ПРоТОКОЛоваТЬ referer
#CustomLog. logs/refererlogreferer
# Если вы хотите прОТОКОЛИРОватЬ название пользовательс!Х
# areHToB (браузеров)
#CustomLog logs/agentlog agent
# По умолqанию используется комбинированный тип
# протоколирования, то ecь
# будет протоколироваться вся информация
CustomLog logs/accesslog combined
# С помощью дективы PidFl1e указывается и. фаа, в
# котором исходнЫй
# процесс сервера будет рrисироваТЬС$.
PidFile /var/run/httpd.pid
# ScoreBoardFile: Этот файл используется для сохранения
# внутренней ин:формациИ nроцесса сервера.
ScoreBoardFile /etc/httpd/httpd.scoreboard
# Директива LockFile опр.;ц(i!iщет фаЙп бдокировки, который
# используется сервером. Сервер должен быть скомnидирован
# с опцией
# USEFCNTLSERIALIZEDACCEPT иди
# USEFLOCKSERIALIZEDACCEPT. Файл блокировки доджен быть
# сохранен НА ЛОКАЛЬНОМ ДИСКЕ.
#
LockFile /etc/httpd /httpd.lock
ServerName new.host.name
# Директива UsеСanопiсаlNаще появилась в версии
# Apacl1e 1.:0. Она разрешае
# использовать каноничеСкое имя для сервера узла.
UsecdnonicalName оп
# Следующая директива позвоцяет проксисерверу, HanplЯdep
# SQUID, не кэшировать документы, которые не rен.ерируются
# автоматически, ТО есть а npoцессе выполнения различных
# сиенариев.
480
rлааа 16. НТТР.сераер Apacl1e
CacheNegotiatedDocs
# Директива Tiroeout задает промежуток времени в секунд"""
# в течение KOToporo серВер продолжает попытки
# возобновления приостановленной передачи данных.
# Значение директивы Timeout распространяется не только
# на передачу, но и на прием данных.
Timeout 300
# Директива KeepAlive разрешает постоянные соения,
# то есть такие соединения, в которых производитя более
# одноrо запроса за один раз.
КеерА 1 i Уе оН
# MaXKeepAliveRequests: Максимальное -количество -заnPОСО8,
# разреmенное в течение постояниоrо ооединения. Установите
# О для снятия оrраничения.
MaxKeepAliveRequests 100
# Директива Keep1\liveTiтeout опредеМет таймаут для
# nостоянноrо соединения.
KeepAliyeTimeout 15
# альнсе и максимальное чисnо серэеров в очередИ
MinSpareSeryers 8
MaxSpareServers 20
StartServers 10
# Оrраничивает общее количество
# будет превышеНО,новые клиенты
#" число не должно быть СЛИШКом
клИентов. KorAa 31'0 число
поДУЧаТ отказ, поэтому это
мапенысим.
MaxClients 150
# После обработки оnредеп€нноrо копичесва запросов,
# указанноrо в д>ективе MaxRequestsPerChild. копия
# сервера завершаеся, а ВМесТо Нее ЗаnyскаеТСЯ НОВая.
MaxRequestsPerChi1d 500
# Директивы конфиryрации проксисервера
# ProxyRequests Оп
11$ :зu.зs
481
LINUX: полное РУ1<ОВОДСТВО
# Для включения кэширования раскомментируйте строки ниже:
# СасЬеНоос /var/cache/httpd
# CacheSize 5
# CacheGclnterval 4
# CacheMaxExpire 24
# Cac!1eLastModifiedFactor 0.1
# CacheDefaиltExpire 1
# NoCache adornain.com anotherdomain.edu joes.garagesale.com
11 # # # # # #11* 11 ## ## 11 #11 #### ###11####'11#### ##
# Настройки npоизводительности SGI #
##1I####1I#1I####JI#####################
#
11 Для использования этой функции рас комментируйте модуль
11 rnodmrnapstatic в разделе описания модулей.
<IfModиle modmmapstatic.c>
QSC 011
</IfModule>
# Если ВЫ ХОТИТе использовать буферизИРованное
If npотоколирова1>Ие, раскqJ,!Ментируйте >lОЦУЛЬ
11 rnodlogconfigbuffered в разделе описания модулей.
# Для использования карты памяти раскомментируйте эту строку:
# rnrnapfi1e /Var/www/html/filetornapinrnemory
#
# Если вы хотите настроить npоцессыпотомки, пожалуйста,
# прочитайте документацию на вашем сервере
# http://localhost!manual/misc/perfrnja.htrnl.
# ЭТа страница объясняет, aK приsязать определенный
# IPaдpec или порт к npyroмy процессору.
# SingleListen Оп
###############..#####11####.########
# Виртуальные серверы .
####'#########JI#*#I##JI#JI#####I######
«
# Поддержка модуля perl
# Замечание: не удаляйте расположенные далее строки,
« иначе это может разрушить вашу конфиrурацию.
<IfDefine PERLPROXIED>
proxypass /perl/ http://12/.0.0.1:B200J
ProxyPassReverse /perl/ http,//127.0.0.1,8200/
</НDеfiпе>
482
rл.sa 16. НПР.сервер Apache
# Файл, в котором находятся директивы конфиryрирования
# виртуальных узлов.
IJ1clude conf!vhosts/Vhosts .conf
#
# ДЛЯ поддержки динамических виртуальных узлов и
# виртуальных домашних каталоrов, раскомментируйте
# с!!еДу:ющие строки:
# Load'!odule vhostaliasmodulemodule5/modvho5talias .50
# AddМodule modvho$talia5.c
# Include conf/vho5ts/DynamicVhosts.conf
# Include conf/vhosts/virtualHornePages.conf
# Директивы конфиrурирования РНР
lnclude сопf!аddопmоdulеs/рhр.сопf
16.12. Перекодирование русскоязычных
документов «на лету»
с тех пор, Korдa в руа:ком языке появилось слово «кодировка», появилась
и проблема перекодировки. Стаидартной кодировкой pya:кoro языка для
большинства UNIX'cpBepPB ЯВЛЯеТС!! КОИ8.R. Для при",енения в DOS
компания Мiсrоsоft разработала альтернаТIIВНУЮ КОЮ'Р08КУ (ALT), из.
вестную также под названием СР-866.
Потом та:же Мicrоsоft создала КОДИРОJJКУ Windows-1251 (ANSI), чем обе-
спечила проблемы с перекодировкой уже на локальном уровне: файлы,
соэданные в DOS, без nреднаритеЛЬНОI'О перекодирования нельзя бьulO
прочитаrь в Windows, и наоборот. Заметьте, об Интернете и АрасЬе я
еще не сказал ни слова.
Кроме Microsoft, «облеrЧIiJ1И" нам жизнь также компании Apple и 5un,
разработав соответствеюlO кодировки Applc '! IS088595. Комnаl!ИЯ IВM
не отстала от них, разработав собственную кодировку pycCKoro языка.
В Интсрнете все эти кодировки смещались. Возникает задача: иастро'
ить автоматическое перекодироваНllе документов из одной кодировки
fI друryю. Для начала необходимо настроить хотя бы перекодирование
«на лету" из KOI8 в Windo\vs-1251, так как большинство клиентов в
Ссти используют "мсино зту КОДИрОflКУ (от Windpws, к!\к от смерти, не
уйдешь).
48з
UNUX: полное руководство
1 б. 12. 1. Russian Apache: установка, настройка,
использование
ОбыкновенныЙ ашдоязычныЙ АрасЬе, входящиЙ в состав БоJ1ыllнс1'R8
дистрибу-rивов, не поможет вам решить эту пробдему. Для корректных
операциЙ по перекодироваНJ\Ю НУЖ1l0 заrрузить и установить сервер
Russian АрасЬе или МОlI.уль Apache-RUS. Скачать как модуль. так и roтoвый
сервер можно по адресу: Еср: / /араспе. Iеха. тн/рнЬ!араспе-тиэ.
При этом старшая часть версии COOTJJeTcTByeT ориrиналыlOМУ серверу
АрасЬе, младшая версии модудя Apache.Rus.
Рассматривать процесс ycraнOBIO! Ц настройки я буду на примере не очень
новой версии сервера 1.3.3IPL27.3, это ие пршщшrиально. ПослеДОJlа-
тельность деЙствий для сборки сервера I!З исходных кодов стандартная:
# Са!: xvzf apache1.3.3rusPL27.3.t.al'.';lz
# cd ar,ac!'le..l. 3. ЗrusPI,27 .3
# . /(,:ofli'igl,ll+e
#- make
# make instaI1
Настройка Russian АрасЬе не отличается от настройки ориrllиальноrо
АрасЬе за ИСКЛЮ'lением настроЙки модуля перекодировзния.
1 б. 12.2. Настройка перекодировки
русскояэын,,,хx документов
Директивы перекодировзния (оии нах<щятся в файле httpd.cont.) можно
разделить на три rpупnы.
Первые указывают, в какой кодировке хранятся файлы на диске. Их
можно включать в блок Location или в файлы . htaccess:
# Все фаЙлы, кроме ..txtj- хранятся 6 кодировке ko.i8r
Charset.so-t1rсеЕnс koi8-r
#' все файлы . tx:t. хранятся в .кЬ"дировке windows1251
СhаrsеtВуF:кtеnsiОП w.indQws1251. . t,xt
Вторые определяют названия (CharsetDecl) и псевдонимы (Charsc.
\AHas) кодировок и таблиц символов (CharsctRecodeTable 11 Charset.
WideRecodeTabJe). Они находптся u блоке <lfМodule mod charset.c> ...
<t1fМodиle> и не требуют изменений. Название языка (rи)должно быть
определено в директивах AddLangиage и LangиagePriority.
Charset,Decl windi..l'i';s1251 .LU
ctlarsetAl.ias windows1251 win =<,.cp123,1 ср1251 cp1251
484
rлава 16. НТТР.сервер Apache
С помощью третьей, самой мноroЧИCJIенной, rруlШЫ вы можете настро-
ить сервер для автоматической перекодировlШ символов на основании
llНфОРМации о клиенте. Например, определив, что клиент работает в
операционной системе Windows и кодировкой браузера щ) умолчанию
RВJ!яется Windows-1251, сервер самостоятельно перекодирует файлы в
нужную кодировку. Если сервер сделает выбор неправильно, пользователь
BcerJIa сможет сам изменнть кодировку вручную.
Существует три способа выбора кодировки:
. по катЗдОry:
http://www.server.ru/koi/fi1e.htm1
http://www.server.ru/win/fi1e.html
... rю имени серверз
http://koi.www.server.ru/file.html
http://win.www.eer',e,- . ru/fi 1" .html
· по порту:
http://www.server.ru:8000/fi1e.htm1
http://www.sel.ver.ru : 8001! [; 1e.htm1
Для liерекодирования по каТЗдоry (точнее, по ею префиксу) нужно до-
бавить в блоке VirtualHost псеВЛОНIIМ. например:
Alias Ikoi /www!docs
Ияи же просто создать в нужном каталоrе ссылку на caмoro себя;
j, cd Iwww/docs
,1 1.!l :> . koi
Несмотрина свою простоту, этот способ лмеет множество недостатков.
Если у вас небольшой сервер, вы можете использовать перекодировку по
катзлоry. В JIpyroM случае ЛУЧlllе используйте пере кодировку по имеНII
сервера ИЛIIUО Пt:>рту.
При использоваlJИИ переКОДИРОВЮI по Iщени сервера следует обратить
ВНlIмание На то, чтьбы указанный вами сервер был прописан На сервере
DNS. После реrистраЦlШ ПОдllомена (в качестве имени KOТOpOro нужно
использоваТЬ один из псевдонимов кодировки, указанНblЙ С помошью ди-
рективы CbarsetAlias, например, koi или win) внесите следующие строки
8 lIаl1l файл httpd. conf:
fi Естественно, укажите здесь свой IР'адрес
Virtuа1Ноst 111.111.111.1>
Se:rve:rNaJrie vl'f.N',;oJ. se rver . ru
ServerAlias *.www.server.ru
# далее следует обычная конфиrурация
<!Virtua1I!ost
485
LINUX: полное РУКО80д.ство
Если сервер DNS администрируете не вы И возможности проnисать нОвь1Й
nOJXJXOMel! у вас нет, то ИСПОIIьзуЙте I1СРСКОДИровку 110 порту. Для 9ТОСО
за комментируйте директиву Рос! в файле h t t pd . ct>nf и вместо нее до-
бавьте следующие директивы:
Listefl 80
Listefl 8000
Listen 800],
List.en 8002
Listen 8003
CharsetByPort koi8r 8000
CharsetByPort windows1251 Вооl
C!)arsetByPort ihm8бб 8002
CharsetByPort iso88595 8003
Номера портов при этом не очень ВаЖНЫ. Правда, есть одна неприят
ность: если сеть клиента защищена брандмауэром, Не позволяющим
обращаться к выбраlUюиу BaMI' пор1'у, клиент не сможет установить Co
единение с вашим сервером.
Схема (порядок) выбора кодировки определяется директивой Charset
Selec!ionOrder:
. CharsetSelectiollOrder Dirprefix Useragellt Portnumber Hostname
UriHostname. для выбора 110 каталоry;
. CharsetSelectionOrder Hostname UriHostname Usel"agent Portnumber
DirprcflX ДJIЯ выбора по имени домена;
. Cl13rsetSelectionOrder РосtnцтЬес Useragent Hostname UriНоstпаше
Dirpretix для выбора по порту.
16.1 з. Защита сервера Apache
По окончаюш настрОйки сервера запретим изменеШlе и удаление файла
КОНфllryраЦIIИ:
[root@webserver]j chattr +i /etc/httpd/conf/httpd.conf
После Этоro вы (и ни!CfO друrой) не сможете IIЗменитЬ этот файл даже с
ПОМОЩЬЮ конфиryратора.
Желательно также установить права 511 для исполняемоro файла сервера
tl1tpd:
# crl!nod 511 /usr/sbinihttpd
486
rлввв 16. НТТР.сервер Apache
Далее, Не нужно, чтобы ПОСТороннне rлаза смоrлИ посмотреть, а руки
юменить (и выполиить) файлы, находящиеся в каталоrах /etc/ht tpdl
сапf и /var!log/httpd:
, crиnod 700 letc/11ttpd/confj
!i смод 700 Ivar !log/httpd I
16.14. Сервер kНПРd
вебсервер уровня ядра
в операционной системе все процессы можно разделить на два типа:
процессы уровня ядра и пользовательские процессы. Процесс уровня
нлра запускается и работает очень быстро по сравнению с отнОСИтельно
неIlОВОРОТЛИВЫМ пользовательским процессом. Однако пользовательские
процессы безопаснее для здоровья системы, нежели процессы уровня
ядра. ЕClIИ произойлет ощибка в пользовательском nроцессс, то на работе
системы это обстоятельство никак не отразится. А ошибка в процессе
уровня ядра чревата «крахом» системы, который вам обойдется во мноro
раз дороже, чем ВЫИl-рыш на быстродействии пропссса уровня ядра.
Процессы уровня ядра позволяют существенно повысить ПРОllзводитель
посТЬ веб-сервера, то есть скорость обработКJ\ HTfP-запросов. Начиная
с версии ядра 2.4, в состав ядра входит веб-сервер kHТYPd. Скорость
<'1"0 работы зиачителыю выше скорости веб-сервера АрасЬе, который
выполняется как ЛOJlЬЗОВR'!'ельс.кий процесс.
16.14.1. Настройка kНТТРd
Так как kHTTPd является процессом уровня ядра, ero настройка вы-
rюлняется путем записи информации в файлы, хранящиеся в катаЛОrе
!proc/sys/net/khttpd.
Сначала нужно перекомпилироввть ядро (этому процессу посвящена от-
дельная шава), вк!Jючив в еro cocraB kHnPd. Для этоrо включите опцию
Kernel HnPd Acceleration в меню Network Options.
После этоrо нужно настроить пеб-сервер АрасЬе для работы по порту
8080 (директива J>ort в файле ht. tpd. conf) и перезаПУСТIfТЬ ero:
# service httpd restart
ЗаrРУЗJ\Те модуль ядра khttpd:
# insm6d khttpd
Укажите серверу kHТYPd, что запросы клиентов нужно обрабатывать
через порт 80, а те запросы, с которыми он не может справиться, пере-
давать АрасЬе;
487
LINUX: полное руководство
# echo 80 > /proc/ys/net/khtpd/serverport
# echo 8080 > /PFo/sys/pe/cientporL
Какие запросы lIе может обработать'kН1ТРd? Ему «не ПО зубам. запро
сы, преДПОЛaI'ающце запуск сценария. Все такие запросы будут перена-
правлены АрасЬе. Поэтому, если ващвебсервер предполаraет в основном
запуск СGIсценариев (в том числе и РНРсценариев), использовать
kHTTPd нецелесообразно. !Змеc:rgповышения ПРОИЗВОДltтельности 8Ы
лобьетесь обратноro. ..' '. ....
Сообшltте серверу kIl'I'ТPd, rIte Нужно искать веб-страницы (в том же
каталоr'е, который указан в директнве DocumentRoot сервера АрасЬе):
# ocho /var/www/html > /proc/sys/net/khttpd/documcntroot
Если на вашем сервере у.,.анопл"ш РНР, укажите каталоr, В котором
хранятся РНР-сценарии:
# echo /var/www!htJ/scripts > /proc/sys/net/khttpd/dynamic
Для запуска kHTTPd введите слеДУЮЩУЮ команду:
# echo 1 :> /рr'ос/sуs/пеt!khttрd/stаrt
Всю эту работу можно автоматизировать, написав сценарий kIlttpd-stаrt
(листинr 16.16): ..
Листинr 12.16. Сценарии автоматическоrо запуска kHnPd
#:! /bin/bash
# 3аrружаем модуль kHTTPd"
insrnod krlttpl:1
# Указываем порт кНТТРд
ecJlO 80 :> /proc/ sys/nct /khttpd/ seIverport
# УкаЗЫЕаем порт Apache
ecno 8080 :> /proc/sys/n",t!clLentport
# Корневой катаЛQ вебсеРБера и каталоr
# дпя хранения сценариев
ocha /var//htrnl > /prac/sys/net/khttpd/dacumentroot
еспа /var/www/htrnl/scripts > /рrос/sуs/пеt!khttрd/dупаmiс
# Заnyс,аем kHTTPd
oche 1 :> /рrос/sуs/пеt/khttрd/stаrt
Так как kHUPd это процесс уровня ядра, к тому же эксперИ1dеll1'аль
ныЙ. есо использование может отрицательно повлиять на надежность
работы СИСТеМЫ. Помните. что сервер kHUPd не может обеснечить такой
же уровень надежности, как АрасЬе. kHUPd следует применять только
п том случае, еслИ ApadJe НеспраlJЛЯется с наrpузк()й и на вебсервере
не 'шст'о запускаются СGIсценарии.
488
rлава 17 УСТАНОВКА
И НАСТРОЙКА
MYSQL.
СВЯЗКА АРАСНЕ+
PHP+MYSQL
УСТАНОВКА МYSOL
. КЛИЕНТСКАЯ ЧАСТЬМУSОL
УСТАНОВКА РНР И НАСТРОЙКА СВЯЗ
КИ APACHE+PHP+МYSOL
ЗАЩИТА СЕРВЕРА MYSQL
ВВЕДЕНИЕ В ЯЗЫК SQL
LINUX ПОЛНОЕ РУКОВОДСТВО
Ни один серьезный интернет-проект нельзя построить без использовання
баз данных_ Большинство провайдеров предоставляет хостинr вместе с
одним из серверов баз данных. Самыы популярным IIЗ таких серверов счи-
тается MySQL, получнвшнй цшрокое распростраяение блаroдаря своей
простоте. Здесь я не буду ни рассматривать технические характернстики
MySQL, НII сравнивать есо с друrщ\щ серверами баз данных (lпtеrВзsе
Server, ШМ ОВ/2, Oracle) достаточно сказать, что InlerBase Server И11И
Oracle более масштаб"руемы н по"тому лучше подходят для орrаннза-
ЦИИ распределенно!! системы обработки информации, но для обычноrо
Иlпернет-проекта MySQL подходит практически идеально. В зтой rлаве
я опишу ero установку, настройку и использование.
17.1 . Установка MySQL
Прежде псеro IIУЖНО установить пакеты, неоБХQдныые для работы MySQL.
У меня MySQL версии 4.0.15, поэтому я устаНОВЮI такие пакеты (номера
версий у вас, возможно, будут друrllМИ, и я их обознаЧ1l1l символамИ «х).):
. МуSQLGРL-4.х.х
. МуSQLGРL-сliеnt.4.х.х
. MySQL GPL-shared-libs-4.x
. МуSQl.GРL-Ьепсh-4.х_х
. MySQL GPL-resolveip-4.x.x
После установки пакетов НУЖIlО создать системную базу данных mysql,
содержащую таблицы db, host и шес. Скорее всеro, она уже создана, но,
чтобы окончательно убедиться в этом, впедите команду:
# mysqlil1stalldb
17.1.1 . Назначение паропя суперпопьзоватепя
Учетные записи и пароли всех пользователей, которые имеют право ра-
ботать с сервером, содержатся в табтще user. Сра.зу же после создания
базы mysql в "ту таблицу внесен только один пользователь rool. По
490
rлава 17. Установка IЛ настройка MySOL . СВАЗК. Apache+PHP+МySOL
умолчанию он не нмеет пароля. Этот пароль нужно установить шмед
ленно: не нужно объяснять, как это важно для безопасности системы.
Для изменения пароля запустите сервер командой:
# safemysqld &
ЭТа команда запуС111Т сервер в режиме деМЩlа и освободит консоль. Если
все пакеты были установлены правильно, вы увндите сообшеШlе:
mysql: ready for connections
Затем введите команду:
$ mysql u root mysql
Эта команда запускает клиент MySQL (МуSQLМОIlИТОр) и соеДИIlЯется с
сервером от имени пользователя root, даже еCJШ вы работаете под дрyrой
учетной записью. Последний aprYMeHT указывает базу данных, которую
требуется OТKpr,rrh.
SQLзапросы можно набирать в строке приrлашения МуSQLмонитора,
.заканчивая ввод точкой с запятой IIЛlf командой \g (go), а можно peдaK
щровать в текстовом редакторе, введя команду \е (edit). Список команд
МуSQLмонитора можно получить по команде \h (help).
Измените параль суперпользователя С помошью следующеrо запроса:
UPDATE user БЕТ Password=PASSWORD( 'новы>Сnароль') 'WНERE
user=/rootfi
Как вы заметили, это обычный SQLзалрос, обllОВЛЯЮЩИЙ полеРвs:>wоrd
таБлlщы riser для пользователя юоt. При вводе запроса обратите ВНима
Iше на реrистр названий полей: сервер МуSQLразличает прописные и
строчные буквы!
Теперь нужно, чтобы MySQL nРИНIIЛ IIЗменения. Для этоro BblnOiIИllТe
еще один запрос SQL:
FLUSH PRIVILEGES,
Заверщmе сеанс работы с МуSQLмонитором, введя команду \q (quit). В
следующий раз зареrl!стрироваться На сервере без пароiIЯ вы уже не с.lO
Жете. Теперь иужно запускать МуSQLмонитор следующей командой;
$ mysql u root p mysql
Ключ p запросит при решстрацин пвроль. Имеilте в внду: забытый па
роль l!елЬЗя восстановить. Единственный выход из этою положения
удалить каталоr /var/liblmysql/mysql If создать базу mysql заново
командой mysqипstalldЬ.
491
LINUX, попное РУКОВОДСТВО.
Для принятия И;Jменений можно также ИСПQльаОllать протрамму
mysqlаdmiп с apryмeнтoM reload. Вызвать проrрамМУ;МQЖНО так:
$ rnysqladmin p reload
Параметр p вам обязательно НУЖНQ использовать, так как вы только что
устаНОВIIЛII паролъ для пользователя root.
Установите права nocTyna к cIIeHap\l!(j lete/re. d/init. d/mysqld:
# ehmod +х /ete/re.d/init.d/mysqld
Теперь можете перезаnyСТlrrь сервер комаl!ЛОЙ
# /etc/re.d/inic.d/mysqld restart
17.1.2. Автоэаnyск сервера MySQL
Последнее, что вам осталось сделать это доБЮJIIТЬ сервер MySQL в
аВТQзапуск. с этой цеЛI>Ю перейnитев каталоr letc/rc .d/rеЗ.d 11 соз.
дайте СИМВОJlИческую CCЬVlKY на файл / есс I те. diini t . d Imysql:
# ln !'; S14mysql /etc/re.d/init.d/mysql
ПрефllКС Ы4 определяет очереДНОСТI> запуска серВера mysqld. В данном
случае он заПУСТIIТ<:Я после сервнсов network (SlO) 11 portmap (511). У вас
эти значения MOryT быть друrиМII.
17.1.3. ПОI1Ь30вате11И сервер в MySQL и их права
После установки сервера нужно завеСТII полыоватeJtей, которые IIмеют
право работать с сервером баз данных. ВвеДlIте следующий запрос:
GRAN1' A.Ll. PRIVILEGES ON *.* ТО admin@J.ocalhost IDENTlf'IED
ВУ . пароль . WITH GRANT OPTION;
ВведенныЙ па ми запрос создаст ПОl!ьзопателя admiri, который будет
иметь право выполНJТrЬ любые операции со всеми базами даНН!>1Х. ЭтОТ
пользователь будет IIметь право подключаться к серверу с компьютера
localhost, используя пароль.
Маска '.' определяет, к каким базам данных и таблицам имеет право
подключаться тот м» иноЙ ПОдЬзопатель. Первая звездочка опредеJlЯСТ
базу, а вторая таблицу. ЕсЛ!l вам нужно, чтобы пользователь admin
IIмел прапо подключаться с любоrо узла, используЙте знак процента
вместо IIмени компьютера:
GRANT АЫ. PRIVIl,EGES ON '.' ТО admin@"%" IDENTIFIED ВУ
'пароль' WITH GRANT OPTION;
492
rлвва 17. У<:твновка " Hacтpoкa. MySQL , СВRЗ!СаАрасl1е+РНР+МySQL
Высею всех П(}JllfОЫОЧИЙ вы lOжете.()цределить, какие деЙствия может
ныrлIl>!ть с базоЙ тот или иноЙ пользователь. Если вы лвлястесь хостинr
провайдером .11 цредоставляете доступ ПОЛЬ301!ателю к eJ'o базе данных,
то вы можете Ilспользовать следующllй запрос:
CRANТ CREATE,DROP,SELECT,INSERT,UPDA'J'E,DELETE,INDEX ON
t;ser. * ТО \15fr@%- IDENTIFIEO ВУ I л:ароль' ;
:':hOT запрос позволяет ПользоВателю user ВЫПОЛЩlть Все операшlИ с ero
базоЙ данных. ..
ПолныЙ список полномочий представлен в табтше 17.1,
ПQЛНОМОЧIfЯ noльэоввreлей сервера MySOL
ТаблиЦе 17. 1
nOIDfOUO'tКR Onисамме
sa,ECТ, IИSЕRl; UPDAТE, OEl.EТE Право ПРOf.:мцтрИ"i'J.ТЬ. аQt'JaЩlТЬ. МQДl1фt.tирать. удаляТь
данные 8 mбrtwцах ба:::аы Щlf1НЫX
'NDEX Праsо nРОИ380диrь оrrврEl,J;МtfДеl(<:.цми табllиц.
REFEЯENСES np9() рабоraл. со ссыпками 8- базах данных и ТI16l1orЩах
свЕАТЕ,ОВОР Право СQЭДВIЩТЬ И удалять 1'цl1tJИLlЫ и ба.;!;t>I "pI-IНЫ;К
GRAN1', AlTER Пptt8<:1 Ol1peд.efllHb ПОПномОЧИf!
RELOAD,SHUТoOWN,PROCESS Право nервзarpужать" оcrанааливатъ Ulp86'lp И,npocмatpttSSn"
все rlроцвr;:t;I;i.(IWAI'ЛlO<4l\1tЩ1t)
&.ли зanрr.>c GRANT у вас не работает, то вы мо)Кете внести пользователя
непосре-дствеНIIО В таБЛlЩУ user базы даНfll4 rtlysql. Структура таблицы
user выrлядllТ следующим обраоюм:
Host USE!r Password Select....priv I!1sertJJriv tJpdatE'JJriv
uelete....priv Createpriv Drop....priv Reload?riv Shutdown....priv
Process.....priv Fi1e.....priv
Поля Иоst, User. Password это,.соответственно, узел, 113 JЮТОрОro
пользователь может получить доступ, имя и пароль пользователя. lke
оста!\ьные поля задают IIOЛНОМО'II!Я. Если выполиение какойнибудь
операции разрешено пользователю, значение подя должно быть равным
"У»,.,в протцвном случае «N»,
Например, нам НУЖНОСОзда1!> lIользоватедл аdm.оторый должен иметь
все полномочия. Это можно сделать с помощыoтакоrоo запроса SQL:
INSERT INTO нее" (Host. Uael' ,Password, Select....Priv. Insert
priv, tJpdate....Pliv, Delete....Priv. createJJti'v. Drop....Priv,
Reload....priv, Sr\utdown....priv, Process....prlv, File....priv)
VALUES ('localhost', 'admin', paSSW6rdl'4td561s12'),
'У', lY', 'Yl, 'YF 1 'У', 'у' I 'У' I 'У'. ,yt1,y,};
493
LINUX, полное рУХО80ДСТВО
Для создания оБЫКНQвеннOI'О пользователя используйте следующий за-
прос:
INSERT INTO user(Host, Oser, password, selectriv,
lnsertriv, Updateriv, Deletepriv) VALUES('%',
'user' r password( '123456') ,'У', 'У', 'У', 'У');
17.2. Клиентская часть MySQL
Удобной nporpaMMoii для просмarра структуры базы данных является
mysqlshow. Введите следующую iшманлу:
$ rnуsqlsiюw p mysql
В ответ вы увидите список таблиц, которые находятся в базе даниых
mysql,
Проrpамма mysqlsbow можетвызываться с дополнительными ключами,
перечисленными в таблице 17.2.
Ключи nporpa:MMbl mysqlshow
Тa6nии,. 17.2
Ключ На3Нlчение
.hоstмяузла DДaeT ИМЯ узла, rдec раБQ1'ет серВер MySQL,, которому вы хотите
nOДк.nЮ'iиrЫ::$I
..port"HOMepnopTa Опрвделяет номер ПОрТа ДЛR сервера MySOL
..socket=COI(Eli YК83ывaH СОКеТ
-oU$;et=ИМ<;t nольэоввтt:tлfl Y.ывae1, мод КЩ,",М I1МаНем зврвrnC"tpl4р08G1ъС titl серворе Мy$QL
.р Запрашивает ввод nароЛА
Для самих же операцнй с даЮIЫ"И нсполъзуется ПРQrpа....а mysql. О"а
понимает те же ключн, что 11 mysqlshow, и MHoro друrих, средн которых
очень полезный ключ -5. Я рекомеидуlO ВаМ всеща ero нспользовать.
Этот КЛЮЧ подавляет большинство ненужных сообщений, выводимых
MySQL-клиентом, что существенно повышает производителЬНОСTh на
медленных линиях связи.
17.3. Установка РНР и настройка связки
Apache+PHP+MySQL
СеЙ'.ас ..ы пронзведем не только установку РНР, которая не вызывает
особых проблем, но и настройку связки Apache+ РНР+ MySQI. Эту связ
ку. очень полезную при создании ве6проектов. можно настроить двумя
способами. Первый иcnользованне проrрамм, которые входят в состав
дистрибутива н, как правило, устанавливаются из пакетов RPM.
494
rl1aBa 17е Установка и настройка MySQL" СвязкаАрасhо+рнр..МуSQL
Второй способ заключается в заrрузке последних версий АрасЬе,
MySQL и РНР и в самостояте!!ьной их сборке IIЗ исходных текстов. Пер-
вый способ я MOry порекомсндовать начинающим по!!ьзоватс!!ям, так как
он проще. Если же вы чувствуете уверенность в своих силах, пристynайте
сразу к чтешоо аторооо способа.
17.3.1. Первый способ: из пакетов АРМ
Первую часть связки в дцстрибутивах Red Hat выше 7.2 и Mandrake
выше 8.1 настраивать не нужно: все настраlШается во время установки
системы. Поэтому вы можете сразу нриступить к тестированию связки
АрасЬе+РНР (листинf 17.1).
Убедитесь, что сервер АрасЬе установлен и корректно функционирует:
$ lynx http://localhost
Текстовый браузер Iупх должен отобразить стартовую страНfЩУ АрасЬе.
После успешной проверки работы сервера остановите ero командой:
# /etc/1nit.d/httpd stop
Проверьте наличие бибЛИОТеКИ gd она необходима для работы с тра-
фикой в РНР:
$ rpm -qa I grep gd
$ rpm -ihv gd-l.8.44.i386.rpm
Заrрузи1'Ь последнюю версию РНР 5 можно 110 адресу http://Www.php.
net/downloads.php.
Скачайте (www.php.net/downloa.ds . php) и установите пакет рЬр, если
Ilbl ero еще не установили. Вам также понадобится пакет php-mysql, обе
спечивающиЙ 110ддерЖ},'У сервера MySQL ЯЗЪП(ОМ РНР, и модуль АрасЬе,
обеспечlШaIOЩИЙ поддерJКкy РНР (пакет mod"'php).
Затем в файле ht:tpd. conf раскоммеитируйте следующую строчку. По
сле этооо файлы с расширением .рЬр будут правильно обрабатываться
сервером:
AddТype application/xhttpdphp4 .php
Теперь можно проверлть правИJIbНОСТЬ настройки двух компонент связки:
АрасЬе I! РНР.
Напомню, что в большинстве современных серВеРllЫХ дистрибутивов
сервер АрасЬе уже установлен вместе с модулем modphp, поэтому вы-
полнять вышеизложенные шати совсем необязательно, достаточно только
проверить корректность работы модуля mod"'php.
495
UNUX: пол@е pylCoeOACTeo
Для I1роперки работы модуля. modphp создайте. тестовый фаЙл
tesc. php с таким содержимым:
Листинr 17.1. Файл test.php
<7
pr!pJ.nfo() ;
!>
Это-r фаЙ'1 сохраните n каТ8ЛOI'е DocumentRoot сервера АрасЬе. Обычно
это l\атзлоr /var/wwwJhtml. Затем запустите любой браузер и введите адрес
http://1ocalhost/test,php. Вы должны увидеть в Ol\He браузера сведения о
РНР, сервере АрасЬе и друrих компоиентах 11 библиотеках (рис. 17.1).
Функпия phpinfoO Очень ииформаТИ1lна: внимательно изучив информашtю,
которую 0113 предоставляет, вы Мfюrо узнзете О своем веб4::ервере.
Теперь HeMHoro настроим РНР. С nомошью функиии phpinfoO узнайте,
rAe расположен иниииалюаtlИОШIЫЙ файл РНР. Обычно он называется
Р!1Р. ini и находится I! KaTaJIOre fetc. Откройте этот файл в любом
теКстовом редаl\торе I! раскоммеНТ!lруйте следуюшую строку, убедив'
шись, ЧТО в вашеЙ системе есть файл myr,q1. .50 (он устанавливается при
установке php.mysql):
extension=mysql.so
Рнс. 17. '. ФУIiЩИЯ p/)piпfo()
496
rMBa 17. Установка и настройка MySQL . Свпзка Apache+PHP+MySQL
После этоro переЙдите п сеКIIИЮ MySQI. файла рЬр. ini и установите
параметры сервера MySQL по умолчанию:
:nysql. defaultort =
mysql.defaultsocket =
mysql.defaulthost =localhost
mysql.defaultuser =
Tnysql.defaultassword
Эти параметры будут IIСЛОЛЬЗОDаться при установлении соединения с
сервером, если в функциях РНР они не будут явно указаны. Никоrда не
указываЙте пользователя rool (а тем более есо пароль ) в качестве поль-
зователя по умолчанию!
Теперь можно лриступить к настройке cepDepa MySQL_ Им:еет смысл
использовать версию MySQI. не ниже 3.23, поскольку в этой версИИ
появилась нормальная поддержка транзаКЦIfЙ. Если вы устанавливаете
MySQL верСИIf 3.23 IfЛИ выше, то установите еще пакет modauthmysql,
обеспечивающиЙ базовую аутеНТИФИКЩIfЮ для сервера АрасЬе с исполь-
зованием таБЛИll MySQL.
При добавлении сервера MySQL Il сценарии заrрузки (/etc/rc.d!) обра-
тите внимание на то, что сервер MySQL должен быть запущен ПЕРЕД
сервером АрасЬе.
17.3.2. Тестируем созданную конфиryрацию
Теперь можно проверить работу IlсеЙ связки Apache+PHP+MySQL.
С этоЙ целью создайте небольщоЙ TecT08bIll файл mysqltest. рЬр 8
каталоrе DocumentRoot (Ivar /www/htпll):
Листинr 17.2. ФаЙл mysql lest.php
<7
/1 Исrюльзуется имя пользователя root и пароль password
if (!mysqlconnect (l.Ilocalhost.. , Hroot.. I ",password....))
(
echo I.IHe Mory соединиться с сервером\n.;
echo mysqlerror();
exit;
)
echo "Работает!
7>
Как вы уже успели ДОlйдаться, если 8 окне браузера вы увидите слово
«Работает!., значит, вы все сделали правильно.
497
UNUX: полное PBOДCT80
17.3.3. ВТОРОЙ способ: из ИСХОДНЩ текстов
у этоrо способа есть С8011 преимущества. Вопер8ьtX, у вас ПОЯ8ИТСЯ
80ЗМОЖНОСТЬ использовать самые последние версии серверов АрасЬе,
MySQL и интерпретатора РНР, KOTOpьtX нет в составе даже caMoro HO
BOro ДИСТРllбутива Linux. BOBTOpЫX, вы сами сможете контролировать
процесс сборки и включаТь поддержку необходимых вам функций, ис
клЮЧив такую ситуацию, KorRB, например, разработчяl\и пакетов RPM
при сборке интерпретатора РНР забыли включить поддержку сервера
MySQL. Мне попададся такоЙ лакет рЬр: ФУНКЦIIи mysqlconnectO в нем
просто не было.
Скачайте IIЗ Интернета последние версю! АрасЬе, MySQL и РНР. Предва
рителъно удалите из системы старые версии, если они были устаиоалены.
После заrpузки распакУЙте исходиые тексты в каталоr ISfC.
Сначала установите сервер MySQL. С этоЙ целью переi\дите в Ilаталоr
с ИСХОДНЫМII теllСТами MySQL 11 введите следующие "аманды (первая
команда включает поддержку пауМQЛ'!аШIЮ К()ДИр0ВIШ koi8'f):
# ./configure with'charset=koi8rIl
# mаке
# rnake install
Затем аналоrично устаН08ите АрасЬе. Для получения информации
обо всех ВОЗМОЖНЫХ КлючаХ сценария configure введите команду
COI1figure help.
После 31'OrO распакуйте РНР tI соберtlте cro следующим образом:
#. ./configure oowith''''Y5ql ...withapach"=. ./apache2.0.D
-wi thmodcharset
# make
таке jn$ta1-1
Первая KOMallДa IЮf!фиrУРИР}'\!1l$терпретатор РНР ДJJЯ'работы с cepBe
ром баз ланных MySQL и вебсерllером АрасЬе. Естественно, 8Ы ДОJrАШЫ
праllИЛЬНО указать путь к исходным текстам АрасЬе с помощью ключа
'''with''apache.
Затем вернитесь в каталor, содержащий исходные тексты АрасЬе, и вве..
лите команду:
# ./coпfigure "activate,,,odule=src/moduleslphp4/1ibphp4.a
Перед этим нужно убедиться 8 существовании фаЙла libphp4.a (если
рЬр собрался успешно, этот файл должен существовать). Если сценарllЙ
configure успешно завершил свою работу, введите команды rnake 11 make
install.
498
rпaвa 17. Установка и настройка MySQL. СВRзквАрасhе+РНР+МуSQL
Проверить, подк.лючился ли модуль НЬрЬр, вы можете после установки
сервера с помощью команды:
r flttpd 1
В списке модулей должен быть модуль IiЬрЬр4.с, а TalUi\:e модуль
mоdсJщrsеt.с ero вЫ подключили при первой сборке. После этоrо
МОЖ;НО отредакщровать файл / etc / php. 1111 и установить пароль Д)lЯ
пользователя тоо! серпера MySQL (не путайте пользователя roo! всей
системы с пользователем roo! сервера MySQL!).
Теперь ТОЛЫса остается добавить запуск серверов в сценарии автозarpузки
CllcтeMbl. Нщ!ОМНIO, что сервер MySQL доJDt<:еи запускаться до сервера
АрасЬе.
17.4. Защита сервера MySQL
По умолчанию лля файла СОКе1'а mysql. sock, который используется
соединениями сервера MySQL, установлены права доступа 0777. Это
О3I'13'lает, что КТО YI'OJJHO может удалить этот файл. Если данный файл
будет удален во время работы сервера, то ии один пользователь HeCMO
жет поДIUIЮЧИТЬСЯ к серверу MySQL. Установите «бит'прилипчивости»
(stiсkуБI\Т) для катзлота /var 11 1bImysql, чтобы предотвратить удале
>ше файлов из этоro каталота:
# chmod +t /var/lib!ijsql
Из соображениЙ безопасности рекомеl!.<1Уется удалить базу даиных test,
которая создается при установке сервера 11 используется для еТО про
верки:
# n\ysqladmin drop' test p
Не забудьте также удалить заПIlСЬ, соответствующую базе lIamIых test, 113
таБЛIIЦЫ db базы даины)!: mysql:
. mysql u root nrysql p
:nysql,> DF.l,F.TF, * FROM ОЬ WRRF: пt)="t.еst lr ;
rayBql> DELETE * FROM Db WHERE Db=.test\%';
mysql> qu;i.t
499
LINUX: полное рукоеодCТIЮ
17.5. Введение в ЯЗЫК SQL
17.5.1. Общие ПОНятия
Если вы раньше работали с какойСиибу,IJЬ СУБД (Система Уrтранления
Базой Данных), IIЫ смело можете проnyстить этот пункт НИ'lеrо IЮ80ro
ДJ1я себя 8Ы не ПРО'lитаете. Но СCЛll вы стз.лКlfваетесь с СУБД впервые,
без основных терминов вам не обойтись.
+ Поле (field) ЭТО неделимЬ!Й элемент данных в БД. Поле имеет ИМЯ
и ТИП. Подробнее о Тlтax полеltмы поroворим чуть позже.
+ ЗаПIlС (record) набор полей, содержащих связаннyio IIнформацию.
Например, ЗaJПlСЬ с полями C--,No, CName I1 CAddress содержит
информацию о клиенте ero номер, имя и адрес.
+ Твблица (table) это набор записей Одl!Нвковой структуры. Если У
нас есть запись структуры C;N(), CName, C:Address, то все записи
в таблице Clients будут иметь такую структуру.
+ База данных (database) это совокупность связацньu< таблиц. Ha
rтример, в одной таблице может :храниться информация о клиенте, а
в друroй информащНl о З1IЮlЗе, который сделал клиент.
· Иlfдекс (index) IIСПОЛl>зуетСJl; /IдЯ БЫL"I'pOro поиска нужной 3Вl1IIси
В базе данных. Обычно поиск произuoдится по значению одноro подя
или по значению нескольких полей.
. Первичный индекс (index) управляет порядком отображения за
ПиСен в таблице. Поле перВ1fЧНОro 1fНдeKca должно бьnъ уникалЫIЬ!М,
то есть в одиой таблице не должно быт/> двук записей, в которых это
поле принимает одно и то же значение. В нашей таблИце Clients,
очевидно, первичный индекс должен СТРОlПъся по полю CNo по
номеру клиента, который должен быть уникален.
. ВТОрllЧИЫЙ индекс (secondary index) в OTilll'lНe от первnчноro IIН-
декса может строиться по нескольким полям n не обязан быть уни-
кальным. Вторичные IlндекСЫ используются ддя связывания таблиu.
Индексы также называются ключами.
. Звпрос (query) оператор, выбирающий записи и поля, удометво-
ряюшюl заданному условию, из одной или иескоЛl,КИХ таблиц.
17.5.2. Краткий практический курс SQL
Как работает сервер SOL? Клиент посылает запрос. в котором указывает,
какую информацию хочет получить от сервера или какую операцию с
данными собирается выполнить. В ответ сервер nОСЫllает кдиенту ответ,
в котором указывает, выполнил ли сервер ero запрос, и, еСЛИ выполнил,
сообщает реЗУЛl>тат запроса.
500
rлава 17. Установка и настроЙка MySQL, С8ЗI(8Драсhе+РНР+МуSQL
Для описания запросов клиента был разработан целый язык SQL
(Structured Query Language. Структурированный ЯЗЫК запросов). С по
МОЩЬЮ запросов SQL вы можете:
. Создавать базы данных И таблицы.
. Добавлять информацию в таблицы.
. Удалять информацию.
. МОДИфицИровать информацию.
. Получать нужные вам данные.
В этой книrе мы не будем подробно рассматривать язык SQL ему по
СDящены отдельные КНИПI, н дна раза толще этой, в которых описываются
различнwе варианты языка SQL.
Перед началом работы с SQL вам нужно интуитивно понимать, 'По такое
база данных. Если вы имеете представление о ней, можете смело про
пустить этот абзац. База данных состоит из таблиц, как книrа MS Ехсеl
соСТОИТ из ЛИСТОВ. Каждая табтща состоит из зamtсей, а каждая запись
из подей. Каждое поде имеет сной домен, то есть тип данных. которые
можно записать D это поле. Поле типа INТ может содержать только целые
числа, а поле типа СНЛR строки.
Вот теперь можно ПрИступать К созданию новой базы даиllыJ<. Для соз.
дания баз данных и таблиu в языке SQL обычно используется запрос
CREATE. В случае с MySQL для создания базы нужно использовать
проrpамму mysqladmin:
:) rnysq1ad.min и a.drr.i.n p create sklad
Естественно, пользователь admin должен существовать и обладать соот-
ветствующими правами. ОткроЙте созданную базу:
$ nwsql и adrnin p sklad
Каждый запрос MySQL должен заканчиваться точкой с запятой. Если
вы введете SELECT . FROM test, клиент mysql будет ждать ввода точки
с 'JапятоЙ:
->
ДаваЙте доroворимся, что будем писать запросы сотласно стандарту SQL,
то есть для улучщеюlЯ восприятия будем разбивать их на ЧастИ. Про-
rpaMMa туsчl доцускает нвод запроса но всю строчку. Hanpl1Mep, запрос.
записанныЙ В стандарте SQL.
SELECT .
FROM S
WНERE Q '" 10
в проrpамме mysql можно записать так:
501
LINUX: полное рукоsодс"ПlO
SELECT . PROM S WHERE Q > 10
Теперь создадим три таблицы Товар, Клиенты и Заказы.
CREATE TABLE CLIENTS
(
CNO
ПО
ADDRESS
CITY
PHONE
);
int
NOT NULL,
NOT NULL,
NOT JII"ULL,
NOT NULL,
NOT NULL
char" (40)
сhаr{ЗО)
char(15)
c;har(lli
Таблица CLIENТS содержит ЛO.JII! CNO (номер КJJJlema), FIO (ФаМИIIIIЯ,
Имя, Отчество), Лдрес,ТородиТелефШI. Все ЭТIIщшяне MOryт содержать
пустоro значения (NOT NULL).
Бол.шиство сераеров нет&уюТЯ"ЩШ) У"SЭSllИЯ r.l9T NULL, II() при ЭТОМ
3На\.\GНие fЮ умолчанию м<.)жеt-быть.ра3НЫМ: ОДНИ сервер ИНIAЦИализ'ИpytOТ cro1\бцы
ЭII"чением NULL. s друrие ООТ NULL. Поэтому nyчще ."110 yt<aЭ8ТЪ NOT NULL.
CREATE
I
TNO
DSEC
PRlcE
ОТУ
1;
TABLE ТОVЛR
int NOT NUJ"L,
char (40 I NOT NULL.
I1HmeI"ic (9 ,21 NOТ NOLL,
щunеriсl9,21 NOT NULL
Эта таблица будет содержать данные о товарах. Тип numeric (9,2) означа
СТ, что 9 знаков отводятся под целую часть и два под дробиую. ОТУ
ЭТО количество товара на складе.
CREATE TABLE ORDERS
1
ONOin10 NOT N\JLL,
ОАТЕ data NPТ N\JLL,
CNO int 'NOT N\JLL,
TNO int. NOT NULL,
QUANTITY nl!meric 19 ,2) NOT NULL,
MOUNT nHmeric{9,2) NOT NULL
1,
Эта таБЛllца содерJЮlТ сведеllllЯ о заказах номер заказа (О NO), дату
заКаза (DATE), (юмср КЛllента (CNO), номер товара (r NO), количество
(QUANТITY) 11 стоимость заказа AMOUNT.
502
rлава 17. Установка и настройка MySQL , С8!!зка Apache+PHP+MySOL
Теперь добавltМ данные в наши таблицы. Добавить данные Можно с по
мощью оператора INSERT:
INSERT INТO CLIENTS
(l,'Иванов И.П.'; 'Ленина 6', 'Кировоrpaд', '80522111111');
Добавляемые значения должны соответствовать тому порядку, в KOTO
рОМ поля перечислены в операторе СREЛТЕ, Если вы хотите добавлять
информацию в RpyroM порядке, то вы должны указать этот порядок в
операторе INSERT:
INSERT INTO CLIENTS IFIO,ADDRESS,CNO,PHONE,CITY)
VALUES (1 Петров', 'Пушкина 9',2,' 1 , I Кировоrрад') ;
с помощью lNSERT Мы можсм устанавливать значсния только HeKOTO
рых lюлей;
INSERT INTO CLIENTS (CNO, FIO)
VALUES (l,'Петров'):
в НiШ1емпримере этот запрос выплненH не будет, поскольку все остальныс
цодя. раяНbl NULL (пустое зна\JСНИС), а Наша 'fаблица пустых значений
нс допускает.
Добавuм данные в табщщу TOVAR:
INSERT INTO TOVAR
"VAI,UES (1, 'Монитор LG' ,550.74) ;
Обратите внимание. чтu мы пuка еще не указали первичныс КЛЮЧ!! Ta
блицы. поэтому нам никто не мешает добавить в таБЛlЩУ одинаковые
записи.
Дuбаюnъ дату 8 поле ОАТЕ можно с помощью Функиии TOOATE:
INSERT INTO ORDERS
VALUES {l,ТОDАТЕ('Оl/Оl/а2,'DD/ММ/УУ'),l,l,l,550.74);
Данная запись означает. что перяоrо января 2002 rода Иванов И.П.
(CNOl) заказал один (QUANТIТYl) монитор LG ('CNOl).
Предположим, что нам нужно обновить запись, например. клиент Иванов
переехал В дрyroй roрод. Это делается так:
UPDATE CLIENТS
ВЕТ CITY 'Киев'
WHERE CNO 1:
Теперь удалим всех клиентов, номера которых превышают 10:
DELETE FROM CLIENTS
WНERE CNO > 10;
503
LINUX: полное РУХОНОДСТВО
Если вторая часть запроса DELE;ТE WHERE. н!! укаЗaRа, ЗИВ'IИ:Т,
действие оператора распростраli$lется на все ЗaI!ИсиУказаиной таблицы.
Добавление, цзменщще и удалеНие записеЙ Э1'Q, безусловно, очень
важные команды, иочаще Dcero ВЫ БУ/l.ете нспользоввn; запрос SELECT,
которыЙ выбирает из таблицы Д;:ЦiНЬ1e, удовлетворяющие УСЛОВИЮ.
НаПРlfмер, для BыIIoaa всех 3аlЦlсей 14З таблицы CLIENTS, введите:
SБLЕСТ * FROM СЫБNТЗ;
В резуш,тате вы ПOJIучите такой OТ)JCТ от сервера;
CNO ПО ADDRESS СIТУ
1 Иванов И.П. Ленина 6 Кираsаrрад
1 Иванов И.П. П<аЮЩв 6 КИРЬ8Щ'Рад
2 Петров В.К. Пушкина 9 КировоrраД
PHONE
80522111111
80522111111
80522112111
Обратите внимаlПlе на первые две записи они ОдИнаковые. Теорети
чески добавление одинаковыхзаписеii возможно мы ведь не указали
nepBlI'Iиыii КЛЮЧ 'raблицы. &:JЩ ВЬ!)(ЩIIте исlUlЮЧИТЬ оди/:шковые записи
из ответа сервера (но не из таБJUЩЫ!), введите запрос:
SELECT DISTINCT *
FROM CI.,IENTS;
Если вы ХОТИТе вывести только некоторые поля, то запрос лолжен BЫ
rлядеть так:
SELECT DIS'rlNCTFIO, PHONE
PROM CLIENTS;
Теперь займемся усложнеиием наших запросов. Выведем все товары,
цена которых превышает 500 рублей.
SELEC1' *
F'ROM TOVAR
WНERE PRICE > 500;
Вы можете использовать друrие операторы отношений: <,>,=,<>,
>=,<.:::.
Если ваша компания обслуживает несколько однофамильцев и вы хотите
вывеСТИ информацию обо всех Ивановых, используйте шаблон LIKE:
SELECT *
FROM CLIENTS
WНERE PIO LIKE '%Иванов%';
Запрос 'штается так: ВЫВеСТИ всю информацию о клиентах, фамилия
которых похожа на 'Иваиов'.
504
rлаsa 17. Установка" настройка MySQL. Связка Apache+PHP+MySOL
Следующие два оператора эквивалентны:
SELECT ·
,"ROM TOVAR
WHERE (РНIСЕ > 100) AND (PRICE < 200);
и оператор
SELECT .
F'ROM ТOVAR
WHERE PRICE BETWEEN 100 AND 200;
Ec..1JI вы хоnпе выбрать данные из разных таблиц, перед именем поля
НУЖIfО указывать имя таблицы. СледующиЙ запрос выведет имена всех
клиенtов, КО1"Орые хотя бы раз 11ОКУПали у нас товар: .
SELECT DISTINCT CLIENTS.FIO
FROM CLIENТS. ОЮJЕRS
WHERE CLIENТS.CNO ODREDS.CNO;
При работе с оператором SEI,ECТ ваМ доступно несколько полезных
функцнЙ, ВЫ'lИСЛЯЮЩlfХ количество элементов (COUNТ), сумму эле-
ментов (SUM), максимальное и МИНlIмальное значение (МАХ и МIN), а
также cpeДJIee зиачение (AVG).
Следующие операторы выведут, соответственно, колнчествоззлисей в
таблице CLIENТS 11 самый дороrои товар на складе:
Si':LECT СОПNТ{+)
FROM СЫЕМТЗ;
SELECT МЛХ(РRIСЕ)
FROM TOVAR;
Оператор SELECT позволяет rpуппировать возвращаемые значения.
Например; клиент Иванов (CNOl) несколько раз заказывал у нас
какойто товар. Значит, ero номер встречается IJ таблице ORDERS не-
сколько раз.
Выведем имена всех клиентов, а также сумму заказа каждоro Imиента.
SELECT CLIENTS.FIO. SUМIORDERS.AMOUNT) АЗ ТОТЛLзuм
FROM. СИENТS, ORDERS
ERE cLrENТs.cNO ORDERS.CNO
GROUP ВУ ORDERS.CNO;
[руппнровку выполняет оператор GROUP ВУ, который является частью
оператора SELECT. Оператор GROUP ВУ можно OIрЗНИЧIIТЬс помощью
HAVING. Этот оператор используется для отбора строк, возвращаемых
GROUP ВУ. НAVING можно считать зналоrом WНЕRБ, но только для
GROUP ВУ:
505
UNUX: полное РУКОВОДСТВО
НAVING <условие>
Например, нас интересуют только lШIIенты, которые заказали товаров на
общую сумму, превышающую 1000.
SELECT CI.IENTS., FIO BUМ (ORDERS. АМоимт) АВ TOTALSUМ
FROM CLIENTS, ORDERS
WНERE СЫ ENTS . CMO = ORDERS. CMO
GROUP ВУ ORDERS.CNO
НAVING TOTALSUM > 1000;
ПримаНИQ
ei
в этом запрщ;е, МЫ ИСПОЛЬЗОtЩJИ nt?евдоtiИМ стопбцв. ТOTALSUM, В некоторых
вариантах SQl Дnя определения nceеДОliима не нужно писать служебное СЛО80
AS, а дрyrив требуют примененне знака равенства:
SШI (ORDERS. AМOUN'r} TO'I'ALSUN или
TOTALSUM SUMIORDERS.AМOUNТ.
Пока мы не установили первичный ключ, сортировка пашей таблицы не
выполняется. Записи будут отображены в порядке их заненnя в таблицу;
Для сортировки по полю CNO результата вывода таблицы CLIENТS liC-
пользуется следуюший запрос (сама таfiJuща Прll "roм !le сортируется):
ББi,ЕСТ *
FROM CLIEN'!'S
ORDER. ВУ CNO;
Предположим, что кто-то добавил в таблицу CLIENTS запись
1 Сидоров EropOBa 11 КировоrраД80522345111
у Нас получилось, ЧТО один I! тот же номер е{)поставлеn разныM КJlиентам.
Тоща как определить, кто IfЗ IU<II заквзал монитор LG? Чтобы избежать
подобной путаницы, нужно использовать пеРВЦЧllые IUlючи:
ALTER TABLE CUSTOMER
АОО PRIМARY КЕУ (CMO);
После 31'01"0 запроса поле CNO может содержать только уникальные
значения. В качестве lIервичноrо IUlюча нельзя использовать поде, до-
пускающее значение NtJl.,L.
Создать первllчныйлючч можно проще при создании таблицы. Это
делается так:
CREATE TABLE cTENTS
(
506
Ji1aвa 17, Установка и настройка MySQL, Связ.аАрасhе+РНР+МуSОL
CNO int NOT 1>.'ULL,
ПО char(40) NOT NULL,
ADDRESS char(]O) NOТ NULL,
С1ТУ char(15) NOT NULL,
PHONE char (11) NOT NULI"
PRIМARY КЕУ (CNO);
);
Таблица ORDERS содержит сведения о заказах, ПО полю CNO этой
таблицы идентифицируется заказчик, Предположим, что в таблицу OR
DERS KTOTO ввел значение, которою иет в таблице CLIENTS, Кто же
заказал товар? Нам нужно не допустить подобиой ситуации, поэтому
воедите следующий запрос на СОЗДЩПlе онешиеro ключа:
ALTER TABLE ORDERS
АОО FOREIGN KEY(CNO) REFERENCES CLIENТS:
BoeдeНlIыe n таблицу ORDERS номера клиентов CNO должны сущестоо'
вать о таблице CLIENТS, Аиалоrичио нужно добавить онешщ!Й ключ по
полю Т NO. Эта оозможноcrь назыоается декларативной целостностью.
Команда ALTER используется не только для добавления ключей. Она
предназначена для реОРl'анизации таблицы в целом. Вы хотите добавить
еще одно ПOJlе? Или ycranOBlfrb список допустимых зиачений для каждоro
из полей? Все это можно сделать с помощью команды ALTER:
ALTER TABLE CLIENTS
ADD ZIP сhаr{б) NULL;
Этот запрос добаnляет n таблицу CLIENTS новое поле ZIP типа char.
Обратите внимание, что nbl не можете добавить нопое поле со значением
NOT NULL в таблнцу, в кото!'ой уже есть данные.
Наша коыпания работает с клиентаМl1 ТМЬКО и Киепа 11 КIlропоrpада,
потому целесообразно ввести СПИСОК ДОЛУСТIIМЫХ зпачешtй Д)1я таблицы
CLIENТS:
ALTER TAВLE CLIENTS
ЛDО CONSTRAINT INV1\LIDSTATE SHECK (CITY IN
('Киропоrpад' ,'Киев');
Вам уже надоело рабо1'ать с этой базой данных? Torдa с помощью запроса
D1SCONNECТ отключиrecь (Jf нее, и,используя ЗаПРОС CONNECТ, пQ!tКJOOчн
тесъ кдpyroй базе д,alIных. В некоторых вариантахSQL запрос DISCONNECТ
не работает, а ВМСС!'О CONNECТ нужно испOJIЬЗОВЗТI> оператор USE.
Теперь, Korдa вы уже знакомы с основами SQL, немно1'О уrлубнмся. мы
уже знаем, как добавляТь первичный ключ, теперь добаоим онеllt!tИЙ
КЛЮ'I при создании таблицы:
507
UNUX: полное РУКОElодства
CREATE TABLE Т
(
1* Описания полей таблицы */
FOREIGN КЕУ KEYNAМE ILISTI
REF'J::RJ:;NCJ:;S ANU'l'HER'l'AHLJ:; [1 LlST21 j
ION DELETE OPTION]
ION иРОАТЕ OPTIONJ
1;
Здесь КЕУ NAМE это имя ключа. Оно не является обязательным, но
я очень рекомендую ero указывать; есди вы не укажете имя ключа, то
потом не сможете ero удалить.
LIST это список палей, входящих во внешний ключ. Список разделя
етсл запятыми.
ANOlliERTABLE это друrая таблица, по которой у.".знаВЛlIвается
Jшешний ключ, а необязательный элемент LIST2 это список полеЙ этой
дрyrой таблицы. ТИПJ>J полей в списке LIST должны совпадать с типами
полей в списке LIST2.
Необязателъные параметры ON DELEТE и ON UPDAТE определяют дей-
ствия, которые нужно произвести при удалении информации из таблицы
и при ее обновдеНИ\l, Например, иедьзя так просто Удалить клиента из
таблицы клиентов, если в таблице заказов присутствуют записи ero за-
казов: иарушится целостиость базы. С помощью параметра ON DELETE
мы можем указать серверу реакцию на удалеиие таких данных:
ON DELETE OPTION
Параметр OPTION может принимать одио их четырех значений;
CASCADE, NO ACnON, SET DEFAULT, SET NULL.
Значение CASCADE означает, что номер удаЛi!емоrо клиента будет
удален из всех связанных таблиц. Нанример, если вы удалите клиента с
номером 10 из таБЛIЩЫ клиентов, то из таБЛШIЫ заказов будут удалены
все заказы этоrо клиента.
Опция NO ACTION не разрешает удаление клиента до тех пор, пока ero
номер присутствует в связанной таблице. В нашем случае 3'Ю означает,
что сначала должны быть удалены все заказы клиента с номером 10.
С помощью ОПЦЩI SETDEFAULT вы можете указать значение по умол-
чанию. Например, еCJШ вы укажете SET DEFAULT 1, то при удалении
клиента с любым номером ero заказы будут npи-писываться клиенту с
номером 1, которЫЙ, разумеется, Bcerna есть в таблице CLIENTS.
Опция SET NULL устанавливает значение NULL в качестве номера
клиента, если тот удален из таблицы CLIENТS. В нашем I1римере это
значение ие допускается.
508
fhщ17. Установка HaQТJКli\!цl MySOl . Связк.вАР!lсhе+РНР+МуSОl
Две страни а::ЩД мы добавили n9J!<';цI'. А как ето удалить? Стандар.
том SQL Не преду!;мотрено удалеНlI.еCtiтбцов, но в MySQL мы !\Се же
можем это сдедать:
ALTER TABLE CLIENTS
DROP ZIP;
Как удалить все записи? Очень просто:
DELETE *
FROM ORDERS;
Удалить таблицу еше проще:
DROP ORDERS;
В первом случае вы не уда.пя:сте таблицу: фаЦ)I табли все еще остается
на пискс. Вы уда.пИЛII только СОДСРЖ.IМОС таблицы. Во втором случае вы
полностью удаляете таблицу.
Естественно, удали1'Ъ таблицу можно только при наличии соответству.
ющюс прав.
Напоследок рассмотрим два полезных примера. ПрепполоЖJIМ, что нам
нужно ycтaHoBIfIЪ оrраНllчеНllе на количество товара, которое можно
продать клиенту. Допустим, в данный момент у нас нет 18KOI'O КOJШчеcrва
топара на ск:даде, следовательно, МЫ не !<IOJКe", оформить заказ. Оrpани.
чение данноro типа можно определить с помощью запроса:
CREATE ASSERTION LIMIT
СНЕСК (ORDERS.QUANTITY <" TOVARS.QTY);
Установить минимальное количество для заказа :Можко так:
CREATE TABLE ORDERS
(
/* Определение полей */
FOREIGN КЕУ КЕУ1 (CNO)
REFERENCES CLIENТS
ON DELETE NO ACTION
СНЕСК (QUANTITY >" 1)
) ;
Следующий запрос устакавливает минималЬНЫЙ размер заа, если
таблица уже суще"ТВует; .
CREATE ASSERTION LIMIT
СНЕСК (QUANТITY >" 1);
509
rлава 18
ПРОКСИ..СЕРВЕРЫ.
SQUID И SOCKS
ЧТО ТАКОЕ ПРОКСИСЕРВЕР?
УСТАНОВКА SQUID
НАСТРОЙКА SQUID
ЗАПУСК SQUID
СПИСКИ ACL
ОТКАЗ ОТ РЕКЛАМЫ.
БАННЕРНЫЙ ФИЛЬТР
РАЗДЕЛЕНИЕ КАНАЛА
С ПОМОЩЬЮ SQUID
НАСТРОЙКА ПОДДЕРЖКИ
ПРОКСИ У КЛИЕНТОВ
ТЕХнолоrия SOCKS5,
ИЛИ КАК ИСПОЛЬЗОВАТЬ
АСЬКУ ИЗ ЛОКАЛЬНОЙ СЕТИ
LINUX ПОЛНОЕ РУКОВОДСТВО
18. 1 . Что такое проксисервер?
Проксисервер (серверпосредник) это проrраммз, которая выполня
ет нтrРIFТРэапросы от имени клиентов. ПРlfменение прокси--сервера
дает 1!ОЗМОЖНОcrь использовать фиктивные IPaдpeca во внутренней сети
(IРмаскарадинr), увеличивает скорость обработки запросз при повтор
HO( обращении (кэпшрование), а также обесие'lиВает дополнительную
безопасность.
Нет смысла устанавливать "рокси на своей домашней машине, так как
фунfЩИИ кэширования ВЫflОЛИЯет сам браузер. Проксисервер СТОИТ при
менять Л!ПllЬ в том случае, если в вашей сети есть неекалько компьютеров,
которым нужен ВЫХОД в Интернет. Если один из них уже запрапrnвал
какой-то интернет-ресурс, то следующий пользователь, 06ратившийся
за этим же ресурсом, получит ответ не из Интернета, а из кэша ирокси-
сервера, то есть значительно быстрее.
SQUID это нечто большее, чем просто посредник. Это своеобразный
стандарт кэширования информации в сети Интериет. В силу повсеместной
распространенности SQUID, в книrе я удешш ero конфиrурированию
больщое ВНИМание.
Проксисервер SQUID образуют несколько протрамм, D числе которых
сам демон squid, а также проrрамма dnsserver проrрамма обработки
DNS-запросов. Korna запускается squid, то СНа'!ЗЛа он запускает заданное
количество "роцессов dnsserver, каждый из кoTopых рабо'rает самостоя
тельно и может осуществлять только один поиск В системе DNS. За С'1ет
зтоro уменьшается общее время ожидания ответа DNS.
511
UNUX: полное рУКОВОДСТВО
18.2. Установка SQUID
я использую версию squid 2.5. Пакет squid входит в состав cOBpeMeH.rыx
дистрибутивов, а если ero У вас ПО'lемуто нет, то скачать можно с ,,",м.
squidcache. org.
При сборке SQUID из исходных кодов первым татом ДОдЖна быть KO
манда
# ./configure prefix=/usr/local/sid
SQUID будет установлен в каталоr, заданный ключом prefix. ДРУl"Ие кmoчи
сценария configure перечислены в таблице 18.1.
Ключи сценарШl coпfJgure
Таблица 18. f
Кmoч Назначени.
.en8bl$jcmp Измерять путь lJP хаждQrt> HТТP'cpBepa при .эаn с помощью 'СМР
'.Mabl$-.snmp ВКIJЮЧИ1Ь SNМFi"мониторинr
.еnаЫе..аеlaу-роо1$ .'Vl1paanaн..... трефи.кQМ
..disabIewccp О1IЮЧИ1"\> b Сас11е CoordinfJ1ion ProtocoJ
-enabIе .kill--parent ha(:k Боnеа lCорре""ный'shurdOWl'
--enablе-s:pJаweе Позволяет 'УЭ&п1АЧИТЬ ClCopoCTh о!5рабоncиJ\СL
18.3. Настройка SQUID
Сервер SQUID использует фа,ur конфиryраЦlПl squid . сопЕ, который 06bl'l"
но раСПOJlaraercя В каталоre /etc/squid (или /usr/local/squid/etc
более ранние версии). Подробнее на отдельных настройках мы ocr.!HOBHM-
ся чуть позже. А сейчас просто по шаrам произведем настройку SQUID.
Отредактируйте в этом файле следуюшие cтpoКll.
Укажите ПрОКCI'"провайдера (тот серв(!р, который CТllНeт вашим «coce
дом» (neighbour, реет)):
cacheeer proxy.isp.ru
Установите объем памяти, разрешенный для кэша squid, в байтах, Ика
талОr для дисковоro КЭша:
cachemem
cachedir
6553 б
ufs /usr/local/squid/cache 1024 16 256
rде 1024 количество меrабвйтов, отводимое ПОД КЭШ В указаниом Ка-
талоrе. В этом каталоre будут храниться КЭlllироваlfНые фа,urы. Стоит
ли rоворить, что если у Вас несколько жестких дисков, ТО КЭШ нужно
разместить lIа самом БытромM из них.
512
rnaBB 1 В. npo<c,,cepBepbl. SQUlD" SOCКS
УкажиТе узлы, которым разрешен доступ к прокси"серверу:
ас! a11owedhosts src 192.168.1.0/255.255.255.0
acl !ocalhost src 121.0.0.11255.255.255.255
Укажите разрСnJснные SSL"поpna:
ас1 SSLorts port 443 563
Запретите метод CONNECT ДШI всех ПQРТО8. кроме указанных в ас!
SSL"'pQrt s :
httpaccess deny CONNECT !SSL""ports
Запретите доступ всем, кроме тех, кому можно:
httpaccess a110w loca1host
httpaccess allow a11owehosts
httpaccess a110w SSL""ports httpaccess deny а11
Пропишите пользователеЙ, KOTOPЬW разреmеНQ ПQJlЪзоваться SQUID (в
рассматриваемом примере:'3'ТQ den. ;tdmin и developer):
idепt10а)шр оп
acl a11.owedusers uэеr den admin developer
httpaccess al10w al1owedusers
httpaccet"sdeny а11
тэrн mmnJщnоЬjectsizе иmaximwn object устанавливаlOТоrpаниченWI
на размер передаваемых объектов.
Ниже приведен пример з;tпрета доступа к любому URL, который соот-
ветствует шаблону games, и 'разрешеНия доступа ко всем остальным:
acl ()аМБ ur1.regex games
httpaccess deny GaМS
httpaccess Al10w аl1
18.4. Запуск SQUID
Первый раз squid нужно запускать с ключом ...z, чтабьrсозд!IТЬ и очистить
каТЗJlоr кэша:
# lusr!lot'al/squid/bln/squid '
Еще несколько полезllЫXключей, с которыми можно запускать squid,
пеpeчnс.IIеныв таблице 18.2.
11 3аК.388"
513
LlNUX: полное РУКО60ДСl1Ю
Ключи запуска squJd
Тsбп,,1.IiJ 18,2
КN"'" На3НВЧ8НМ8
a порт Задает 8ЛI;.терНt.liН"fsнЫЙ ПОРТД1lЯ 8)(ОДЯЩJ( НТТРэапросоВ!
.Ш
-о ВКnlO'lаетр9Ж!4М 9ыводаотnaдoчной ИНфОРЧilЦИИ в стандарТНЫЙ поток ошибок
fфl'iЙfl Зада.вr мы'наrи6tfыый файл ксжФиrypации, который ДOlJ}Кв". 6удвт
исnальэosаrЬСR в-место стnндapтноrо sqиjd.cont
." Выдаеt справочную инфQрмаю
k roccI1figUrEI nQCt;.lлаеr СИrNал HU чТО пр,,",uoдиr k ТоМу. '410 SQUIO заново npO'4мte:.e1" свой
II'ОМфYltypa:ЦИQНI1ЫЙ файn
.k shutoown 3а8ершеt1$'рабоfЫ прсжси.сервра. I1ри этом он ПОДQЖД&Т. nOICQ бу.nyт
эаворwеНbl все соем}lеиЯ
K interrupt HeMeдneHHO '3Э.аерШИТЬ рабату nрОКСИ -сервера. без QЖ:ИД8НI>1R заМршеНИR
СI)ЕЩинений
4< kЩ 3аверr.uе:нив без ззкрытия журналов
-UrШрl Зедцеi W1Ь1ерН8ТИВНЬ\Й nOp"f дnя ВХОЩII.ЦИХ ЮР. запросоВ
.; ВКЛlO'4э&r журнanИро&внИs с помощью sys!og
-' Выдает нформацию о -9iерсии SOU/D
., Очищает KeTMor j(ЭШ&
.D Ззлреща:ет DNSfecT при ЭйЛ)'СК&
.N Запрещает становffiЪcЯ деМОНОМ (фоновым процессом)
.у Болео быстрое еосстановnение лtJсле сбоев
18.5. РасширеННblе настройки SQUID.
КонфиryраЦИОННblЙ файл squid.conf
18.5.1. Параметры сети
в файле squid,conf MorYT быть заданы следующие параметры сети:
. httpport порт ДЛЯ запросов клиентов. С этоrо порта прокси-сер-
вер будет ожидать 11 обрабатывать запросы клиентов. Значение по
умолчанию равно 3]28;
. icp"'port порт для общетfЯ с соседями 'Iерез ICP. Если «соседей»
(peer) нет, то установите iep"'port О. По умолчанию исподьзуется зна-
чение 3130. При использовании этоrо параметра нужно установить
КЛЮ'I --епаbIе-htср для директивы htcp,..port 4827;
. tсроutgоiПlLаddrеss при отправлении информации указанный
адрес будет использован в качестве исходиою_ 3начеиие по умолча-
нию: tcpoutgoingaddress 255.255.255.255;
. udp outgoinlLaddress то же самое, что и предыдущая директива
но только для ICP. Значение по умолчанию: udpoutgoin!Laddress
255.255.255.255 _ То же, 110 лля ICP при приеме директива "др )n-
cOl11ing address со значением 110 умолчанию 0.0.0.0;
514
rлааа 18, Прокси-сераеры. SQUID" SOCКS
· passiveJtp оп I off по умолчаfПfЮ этот режим включен, но еСЛlf
прокси-сервер находится за брандмауэром, то параметр passive jtp
нужно вык.лЮЧlnЪ.
18.5.2. Параметры соседей
«Соседи» это друrие кэширующие серверы, в кэшах которых SQUID
ищет запрошенный ресурс перед тем, как обратиться к нему напрямую.
Так, SQUID-сервер локальной сети может обратиться к серверу провай-
дера, реrиона и Т.д. В расчете на то, что чем больше пользователей, тем
больше шанс найти копию запрошенных данных ближе, чем по ориrи-
налъному адресу. Существует два Тlша «соседей»:
. parent (старший): еCJIИ запрошенных данных не оказалось в кзше у
parent, тот переСhfЛает запрос дальше и возвращает ПОДЧШiеlffiОМУ
roтовый ответ. Если SQUID получает отказ (ТСР DENIED) от parent,
то обращается к ресурсу напрямую;
. sibling (равный): если запрошенных даШlЫХ не ОКазалось в кэше у
sibling, то он просто возвращает сообщение об этом, ие предlIpИН!lМ3S1
IUfК3КИХ дальнейших действий.
каждый «сосед» npописывается отдельной строкой следующею формата:
cacheer hostname type proxy-port icpport options
]"Де: hostname имя узла-«соседа»;
!УРС ТИП соседа: parent старший, sibting одноro уровня;
proxy-port порт I1рокси-сервера;
icp-port порт ICP;
орtiопs параметры.
18.5.3. Управление кэwем
За управление кэшем отвечают следующие директивы:
. c.acbemem <число> задает размер оперативиой памяти, ОТВОДllМой
ПОД кэш. Размер этот указыоастся о байтах, хилоозйтах, мсraбаЙ'ta.х (МВ)
или fllraбайтах (GB). По умолчанию используется зна'fение 8 МВ;
. cachedir <тип> <каталоr> <размер> <lУРОБняка'r> <2уров-
някат> задает местоположение кэша на диске и ero параметры:
. Тип тип хранения. ПраКТИ'fески BcerRa используется значеlше оfБ;
. каталоr задает имя каталоrа, в котором будет храниться кэш;
. размер размер (о меrабайraх) отоодимоrо ПОД кэш пространства
на жестком диске:
. lуровнякат максимальное число подкаталоroв 1 уровня, которое
может быть в указанном каталоrе кэшз;
515
UNUX: полное рукоеодство
. 2УрОВНЯl>ат М/lКсим<tilьпое j())lИчество подхаталоrов, которое MO
жет быть в каждом из ПОДl>аталоI;Oв 1 уровня.
Значение по умолчанию: cachedir ufs /usrllocaVsquid/cache 100 16 256.
Допускаетс>! использопание нескольких записей с директипой cachedir
для определения неC,i(ОЛbJUlХ KaT1I.I\P,!;RIJ для разиещеция хэща;
. cacheswaphigh <'шсло> щ:кщевт зarlOJUlения кэща, по дости
жении котороro начинаетс," УСJ>Oренный процесс удаления старых
объекroв. Значение по }'МОЛiJaЩup равно 95;
. cacheswapl\tw <число> ....., ЦpQр;ещ запощ!ения кэща, по ДОСТI!Jl<е
нии. КОТОрOl'О прекращаетсяущение старых объектов. Значение по
умолчанию равно 9();
. maximumobjectsize <'lИСЛО> к.в максимальный размер КЭIl1ИрУ'
емою объекта. Значение по}'м(lJ:lчвнию равно 4096 КВ;
. ПliпimumоЬjесtsizе файJ\ыеньшеrоo размера не кэшиpy1o'l'ся.
Значение по умолчанию: О КВ.
18.5.4. Протоколирование
Ниже перечислены режимы протоколировани.я SQШD с указанием cooт
ветсrвующих журналов. Если какой'тожурнал вам Не нужен, установите
попе вместо имени фаЙла.
. cacheacce.ssJog Jusr/JocaJJsquid/logsJaccc5s.log протоколирование
запросов к SQtЩ);
. cacheJog JU5r/JосаllsquidЛоgs/сасhе.lоg протоколирование запусков
ПрОllессов;
. cachestoreJog Jusr/JocaIJsquidJIog5J5tore.log протоколированне за
I1I\СИ объектов в кэш.
18.5.5. Пвраметры внешних npOrpBMM
Б ковфиrураЦIIОНН(!М файле squid. сап f MOryт быть заданы следующие
параметры внешнихпроrрамм 11 eepBI!CoB:
. ftpuser сщЩj.адрес этот етаН'адрес будет использоваться вместо
пароля Прl! анонимном доступе к ftp'cepBepaM;
. dnsnameservel'S СIШСО!( IРэ.дреСОD этот список используется
Вместо тоro списка DNS'cepBcpoB, который определен D фаЙле
letc/resolv. conf; знаЧение по УМОЛЧa1lЦЮ попе;
. cacbedns"'program IUSrJlocalJ5quidJbinldn.sserver указывает проrрам
му разрешеШIЯ имен (сервер DNS);
. aulbenticale"'program попе ПОЗllоляет произВQДИТЬ аyrelmlфШ(аЦИЮ
клиентов, делающих запросы. При этом должсц быть Определен ACL
proxy auth;
516
rла"" 18, ПроКс....""рВеры. ооиlD и БОСКБ
. authenticate..program /usr/local!squidlЬin!ncsa auth !usr/locaIIsquid!etc!
passwd традиционная протрамма аутентификащш. Определеца в
../authmodules/NCSA.
18.5.6. Параметры адМИНИСТрирований
Параметры адмщшстрирорания, которые можно задать р файле sqUid.
conf) таковы:
. сасЬеIПgr email ПОЧТОВЫЙ адрес, на коroрьпl будет ПОСЛaJIО IШсьмо,
если SQUID перестанет фУНЮ'nЮ1i\lровать;
. cacheeff&tiveuser noЪody при заllУСке SQLЛD от имени root из
менять illD на укзззШ/bIЙ в параметре cacheeffectiveuser;
. cacheeffective..,group nogroup при запуске SQUШ от имени root
измеllИТЪ ош на указаlШЫЙ Б параметре cacheeffective...81'0up;
. visibIebostname имя узла это имя будет упоминаться Б сообщениях
об ошибках;
. bostnamealiases имя этот параметр задает список СИНОИИМОIl для
имен}! узла.
18.6. Списки ACL
ACL (Access ControJ LislS) СПИСКИ контроля доступа. Довольно ча.,.о
возникает необходимость rруппировки однотипных параметров в единое
иелое дЛЯ IIХ последующей обрабОТКII. Для эффективноrо рещения этой
задачи используются СПИСКИ ACL. Например:
acl SSLorts port 443 563
Эта запись означает, что создается список SSLyorts ТlIпа port. Элемен
тами CnllCKa ЯВЛЯЮТСЯ номера портов 443 н 563.
ДобаВIIТЬ иовый элемент к уже существующему списку можно так:
acl адд SSLports port 999
Удалить ненужный элемент можно с помощью операции del:
acl del SSLDrts 999
Переименовать список позволяет операция ren:
acl ren SSLorts AllDwedorts
Удалить все СПIIСI(II вместе с IIX содержимым позвOJIЯет оперэЦlIЯ f1ush:
ас1 flush
517
UNUX, полное руководства
Стандарт ACL требует, чтобы передимснем списк:а обязательно был
указан символ $. Crporo rоворя, всеперечисленные выше примеры без
этоro символа неnравильны. Однако большинство фильтров, например
SQUID, I1ренебреl'аю't этим требованием, и вы toжете указыватъ имена
СПИСКоВ без знака доллара.
Итак, ACL это определение списка доступа, имеющее следующий
формат:
acl <ИМЯ> <ТИП> <реrупярноеыражеиие>
Типы, которые можно ИСПОЛЬЗ0ватъ дри составлеlШИ СlШсков ACL, пере-
числены в таблице 18..3.
Типы ACL
Таблица 18,3
Тип Н.sн.....Ние
Sr jPaдpecJMact(a 'Paдpec .lU1и"нiов
Src IP1.\P2jM8CK8 ДШ:ЩВ:Щt! ЦЦРесов
DstIPaдpe/мaкa UЯ уз!/08
Time [ден..) fЧ1:М1Ч2:М2] epeM, ще д.еНь 3"/'0 одна буква И3 SМ1WНFA
РМ CnlllCOK ЛQР'fQВ
POf1t'POI'12 Диаni!.30Н "opTDВ
PrQto Проrошл нттр или FТP
MlJthod М.'''А 'ЭSТ \!ЛИ'PGsт
Browser I-{1 per 8ыражQН\IIе З8fОnОВОk бра.узера lC11иеп;а. (-1] иn;орируется perKCТp БУJ<В
18.6.1. Параметры доступа
Параметры доступа в файле squid. conf задаются следующими дирек-
тивами:
. httpaccess allow I депу aclname разрещать доступ к прокси по
HТfP;
. icpaccess aJ10w I deny aclname разрешать доступ к !ТРОКСII !ТО
ICP;
. missaccess allow I депу aclname разрешать получать ответ MISS
(<<не наЙДСIi») от вас;
. cache....Peeraccess cachehost allow I deny асlпamе оrpаничить за-
просы к даннщ!у соседу расширение для cache,.peerdomain;
. pro"yauthJealm Squid proxy-caching web server строка Teкcra.
которая будет выдана на экран клиента при запросе имени/пароля
доступа к кзшу.
518
rЛ8В8 18. Про.си-серввры. SOUID и SOCKS
18.7. Отказ от рекламы. Баннерный фильтр
Вам не хочется тратить лишнее время на затрузку рекламныхбаннеров1
Мне тоже. К счастью, SQUID позволяет достаточно просто решить
эту проблему. Просто вставьте следуюшие строки в свой фаi\'л squ i d .
canf:
acl goodurl urlregex '/usr/local/etc/squid/acl/goourl'
acl baurlpach urlpathregex '/usr/local/etc/squid!ac/
badurlpath'
асl badurl urlregex '/usr/local!etc/squid!acl/badurl'
httpaccess deny badurlpath !goodurl
httpaccess deny badurl!goodurl
Соответственно, нуЖflО будет создать три файла: goodurl, badurl
path И baurl. В файл badurl следует поместить URL с плох.ой
репутацией, например:
'http://.*doubleclick
'http://.*ad.flycast.com/server/img/
'http://IOOO.stars.ruJcgibin/100G.cgi
'httр:1112.1б.1.10/wеЬапi!
А В файл badurl.JIath «nЛОХl!е» пути, например, такие, которые часто
бывают у баннеров:
881<31. *gif
88x31.*GIF
100х80. *gif
lOOx80. *GIF
lOOxlOO . *gif
100хl00. *GlF
120хБО. *gif
120хБО. *GIF
17 9хб9. *gif
193х72. *gif
4БВхБО. *gif
Примеры файлов goodurl, badurlpalh и badurl можно взять на lOей
домашней crраlU4Чке http,! /dJ<ws .narod. ru.
18.8. Разделение канала с помощью SQUID
Допустим, вам нужно IIЗCI'poИТЪ проксисервер таким образом, чтобы одна
ТРУlUlа комuьЮТt)ров работала в Интернете с одной СlCOростью, а друraя
с друrой. Это может пarребоваться, например, для разrраничения поль
519
UNUX: полное рУКО80ДСТВО
зователей. которые'иCflQ1lЬЗУЮТ канaJJдЛЯ работы' И пОЛЬЗователей, ко-
торые используют реСурСЫ канала в ЛИ'IНЫХ целях. Естественно. первым
ПРОПУСКIlМ способн<ютьк;rnала важкее, чем вторым. С помощью пракеи-
серllсра SQUID можнораздслить канал.
Для начала в файЛе конфиryрацйll sqliid. conf укажите, сколько пулов,
то есть rрупп пользоватсдей, у вас будет:
de1ay _.1)Оо1э 2
Затем опрелелите классы пулов. Bcero существует три класса:
. Используется одно оrраничеlще ПРОПУСКIIОЙ способности канала на
всех.
. Одно общее оrранlJчение и 25S отдельных для каждоro узла сети
класса С.
. Для каждой подсети класса В будет иснользовано собственное ol'Pa-
ничение и oTдe1lЬHoe оrpаничеНItt1 дЛя каждоro узла.
В файл squid. conf добавьте следующие директивы:
de1ayc1ass 1 1 # оnpедеЛЯ$':1' первый пул клаСса 1 ДЛЯ
# домашнИхпопьэователей
delayclass 2 2 # определяет второй пул кпассц 2 ДЛЯ
# служащиХ
Теперь задайте узлы, которые будут ОТНОСИТЬСЯ к пулам:
ас1 home src адресn
acl workers src адреса
delayacce5S 1 аl10" name
delayacce5s 1 deny а11
de1ayaccess 2 a11o..... worke.rs
de1ayacces5 2 deny а11
Затем укажите оrраничеиия:
de1ayparameters 1 1440О(14400
de1ayarameter5 2 33600(33600 16800/33600
Для пула класса 1 использустс![ одно оrраничсl;tис ДЛ![ вссх компьютеров,
ВХОДЯЩИХ в пул 14400 байт. Первое число залает скорость заполнекия
ДЛЯ Bcero пула (байт/сек). Второе максимальное оrpаничение.
Для пула класса 2 используются оrpакичения на всю полсеть и отдельно
на каждоro пользователя. Если бы у нас был определен пул класса 3, то
ДЛЯ Hero оrpаl.iНЧния ВЬJrлядеЛJJ: ()ы примрно так:
de1ayarameters 3 128000(128000 64000/128000 12800/64000
Первые лва числа эалают соответственно скорость заполнения и мак.
симальное оrраничение для всех. Следующзlt пара чисел определяет
520
rлава 18, Прокси-серверы, SQUID и SOCKS
скорость заполнения ДЛЯ каждой подсе111 и маКСlIмалЫlOе оrраничение,
а третья скорость заполнения и маКСlfмальное оrраНII'Iение для ииди-
IШДУальноf'(J Ш)Jfьэователя.
18.9. Настройка подаержки
прокси у клиентов
После TOro. как вы иастроllЛИ прокси'сервер, остмось напомнить проце-
дуру настройки использования ПрО1<СИ для некоторых pacl1pocтpaHeHHых
браузеров.
Настройка Internet Explorer ПОД использование ПРОКС.If-сервера произ'
водится следующим образом: в окне Сервис Свойства обозревателя
Подключение HaCTpollкa сети устаНОlНпе необходимые параметры, то
есть ИМЯ ирокен""'''рв''ра и "ro порт.
ЕсЛII вам НУЖJЮ настроить ИСПOllЪЗование прокси-сервера ДJlЯ Netseape Со-
шmuпiсаtоr, то выберlrrе из меню Edit .... Prererences 4 Advanced -4 Proxies
.... Мцпuиl Pru:<y Сопrщuratiоп View (рис. 18.1). В ПОЯВИUUIемея ою<е уста-
ИОUllте неООХОДИlоlые параметры, то ecrъ ИМЯ прокси-сервера и ею порт.
Рис_ 18. '; I1scтpotlKa NelSC8pe Coтmипrcaror
521
LtNUX: полное рукоаодство
Теперь nocMOтpltM, как настроить "спользование прокси-сервера для по-
пулярноrо Linuх-браузера Konqueror. Выберите в строке меню команду
Нас"tройка ..... НаС1'рои"tь Konqueror ..... Прокси (р"с. 18.2). Нажмите
кнопку Настроить и укажите имя прокси-сервера и el'O [юрт.
.
w..ф...
:;
'.......,.- -.--'. .",' :,-:.:.,-.....,.<:..,-'.-":---':".
... O!I'JI":,,,.,, ! ,;,::,: .:
е....
.".. .
._ww...,
f!iJ
-:..i!:'',,Ь..;А.rc.a'Ч,_'тpokJ n ',' ,.: .. '.,
;",;6Ке-jIWi: ' ' ' ii.iJ ..
...-
; 1
COII.ращ.... ..
.""..,., ....,.....
@
".:",....". .
° o :Z:: , '. " . '..:;'; i . ''7=З:iJ
..F....1Ч'ID'......,_..... .' .'. ._"'"3, J ..ii]
@}!JI'lэаПtI1ар8М8тpbl'пpIJI!:оа8рУ\1If)'JO .... j. -Нtc'..,;;., J :
. ;.' ' .. ='-1
О!:':,. ...; ;;,,;i;;,\,; :!i-j';'I-"''';'(;' ;,<,-,,;-, ;"._,i";"";;>;!_.'"('i:_!">!., '.
l',,,,,', .. !"::?"-"\;;:f;' :{i;::," .:." .:, '''-.', -: " ". -.-:. .:,) ;-:
.;,;,;, I,:.. ;:"'...
.. т о ... ::,...;..,.. '000......' .....; . . ) i
Ьс.е._ naНWI" a'tJIN&1t8
""'....
{,,\ . . . . .
""""'''''.
&;:i
kрмntorрфм_
..
1II......п........А.......,......."
I .. I
I "JЖ !1 ...... II .Q".... iI
Рис. 18.2. На.стройка Koпqueror
18.10. Технолоrия SOCKS5, или как
использовать асы<у из локальной сети
18.10.1. Введение в SOCKS. Проксисервер SOCKS5
ТехнолOl'ИЯ SOCKS основывается на использовании одноименных про'
токола и прокси-сервера. Может ВОЗIfИКНУТЬ вопрос: "Зачем нам еше
один прокси-сервер, если мы уже рассмотрели SQUID?». А дело в том,
что проксиеервер SQUID работает На протоколах BepXHero уровня
(НТТР, FTP) и жеС1'КО к ННМ привязан. ОдНаКо существуют приложения,
работаюшие непосредственно на транспортных протоколах тср и UDP
и ИСlfытывающие проблемы при взаимодействии. Для решения этих про
522
rлава 18. Пр{)кс.сер.еры. SQUID SOCKS
блем и был разработан протокол SOCKS. Он ПОЗВоляет приложениям,
работающим по тср и иоР, ИСПOJlьзоватьресурсы сети, доступ к которым
оrpaJшчен в силу архитектуры ИЛИ настроек сети.
Классическим и основным ПРИldером является иеПОЛЬЗО!Щlще интернет'
пейджера ICQ из локальной сети, защищеИ!IOЙ брандмаузром (межсе-
тевым краиом). У локальноrо пользова'i'еля цет реальноrо IР-адреса
и прямоro выхода в Интерне'i', а весь трафик направляется через сер-
вер'шлюз сети, на котором установлен брандмауэр, не nропускающий
трафика от ICQ.
Решает проблему пересечения Межсетевых экранов клиент/сервеРНЫМII
Ilриложениями, работаюшими по протоколам ТСР н иор. установка
сервера SOCKS на шлюзе. При этом через сернер SOCKS будет осу-
шествляться перенаправление запросов на удаленную маШIIНУ, а также
прозраЧfiая передача трафика после установки соединения.
НУЖllо отметить, что оба прокси'сервера (SOCKS5 и SQUID) Moryт быть
установлены на одном сервере и функционировать одновременно, не
мешая дрyr друrу.
ei Ill.lJНИ'''[Ц:!f'$l:JI-;8
, . Теоретически ДЛR решения проблемы пересечения бастиона МОЖНО было бы
, исполь:юввть IРмаскарадинr. При ЭТОМ TCP/UDP.nBl(eTbl nаковались бы 8 НПР
сообщения (или дрyrив ПрОТОlCопы eepXHero уровня) И шnюз записывал бы в НИХ
с.вои ;!8fOЛQSКИ (свой IР-здрес), В реЗ)lльтаrв к.а:тлос."бw. ЧТО ЭТИ паКЕПы'исходяrОl
Heto СЗМOfо. Но такое решение имеет MHoro минусов, обусловленных протоколами
aepx.-;ero уровня и свйэаННЫМИ G ними 3аМОРОl(КЗМИ. Кра.ме mro., 8 какой*то
степени теряется анонимность: е.едь при I-tСПОЛЬЭО8аНИИ SOCKS Иjo4формация
об 'Р IIOOбще не передается (это t-!e предvсмотрено самой rехн"лоrией). А еще,
ПОСКОЛЫСУ в SOCKS заrо1ЮВКОВ НП-Р нет совсем. никто не смажет опреД811ЮЬ. ЧТО
вы ИСПОЛЬЗС8аЛИ прокси-сервер.
Прежде чем мы перейдем непосредственно к рассмотрению У'таIIOВКИ
и настроll.lШ сервера SOCKS, стоит отметить еЩе одно ero достоинство,
Оно заключаются в том, что SOCKS-cep8ephl MorYT без проблем вы-
страиваться в цепочку, позволяя вам еше эффективнее замеСТ!f следы:
направьте свой трафик через несколько проксисерверов> !! ваше со-
общение уже ЮIКТО не выследиТ. Некоторые прокси-серверьr"НТТР тоже
Moryт выстраиваться в цепь, но o сопряжено с болъщими сложностями
И проблемами. Кроме тоro, браузерами официально не предусмотрена
поддержка таких пепочек.
Что касается версий протокола, то они DТЛlrчаю'i'СЯ следующим:
· SOCКS4 DСI!ОВЫuaется на ТСР;
. SOCKS5 работает как с ТСР, ТаК и с ООР. Кроме TOJ'O, в нем рас'
ширена система адресации, поддерживэется авторизация и удаленные
DNS-зanросы.
523
LINUX: полное руководство
Клиентами сервера SOCKS5 являются популярные 1tJ!иенты ICQ и Ilcq,
клиентсКдЯ верси!! оболочки ssb, а также друrие проrраммы.
18.10.2. Настройка сервера SOCKS5
Популярный ПрОJi;СJ.l-сервер, работающий по протоколу SOCKS5, ПОД,
держивает компания Permeo (www. еосКВ . реппео . сот). Я пользуюсь
socks5 vl.O release 11 и настройку рассмотрю на ero примере. Этот
сервер не в полной мере некоммерческий (лицензия не GPL), по-
этому вам может быть удобнее использовать альтернативы DeleGate
(www. delegate. org) или Dante (www. inet. no/dante). О последнем
я скажу в 11.18.10.4.
Все настройки сервера socks5 содержатся в конфиryрациоином файле
/ о!'! 1: С I 90С 1<9 5 . соп [. В БОЛЬШИЩ.'1'Jjе случаев IIвраМе1рЫ 110 умолчанию
вполне приешемы. Сейчас МЫ рассмотрим ПрlU>Iер Ji;онФurураЩIOННШО
файла (листинr 18.1), а [ютом разберемся, что все это ознаЧает.
Листинr 18.1. Файп ietc/sD<Oks5.conf
set SOCKSSNOREvERSEМAP
set SOCKSSNOSERVICENAМE
set SOCKSSNOIDENТ
set SOCKS5CHILD 128
set SOCKS5ТIMEOUT 10
auth u
permit u
interrace 192.168.0. ethO
в первой cтpol(e мы отменяем обратное разрешение адресов, блаrодаря
чему сервер будет работать заметно быстрее. Вторая строка означает,
что мы будем протоколировать номера портов вместо имен сервисов.
ТеореТlfческн это тоже должно повыеить эффективность работы сервера.
Параметр SOCKS5NOIDENT запрещает рассылку 1C.J1Иентам idепt-за-
просов. Четвертая строка устанавливает маКСlfмально допустимое чИсло
потомков сервера не жаДflИчаИТе. Пятая строка, как вы уже успели
доrадаться, устанавливает тайм-аут (10 секунд).
Вся остальнаЯ настройка сервера выполняется с помощью директив auth
11 permit. Первая устанавливает тип аутентификации. а вторая разрешает
доступ Оl1ределеННЫМ узлам и пользователям, Полный формат директивы
allth такой:
a"tt, <исхолныйззел> <исходныйпорт> <метод....аутентификации>
524
f"aea 18, Прокси-серееры. SQUIO и SOCKS
в приведенном примере'мьrбудем запраШlIвать пароль у всех клиентов.
Формат директивы permit:
permit <аутентификация> <команда> <ИСХ""'узел> <узе.11
назначения> <исхпорт> <портназнач> [СПИСОК
ПОЛЬовq,'I'eJIей)
В щ)т.\!реilразР\!I113Ю доступ всеми отовсюду с Iiсподьзован"еМ ау'
теНТllфцкации. Следующий прnмер использования директивы реТПlil
демонстрирует rибкостъ этото проксисервера:
permit: u cpubt 192.168. " , [100.1000] деп
В зтом примере мы разрещаем доступ пользователю den (с использо
ванием паРОЛJI, коне'шо). Полыователь деп имеет право I{СПОЛЬЗОвать
Connecl, Ping, UDP, BIND и Traceroute (cpubt) с адресов 192.168.....
Диапазон ВХОДRЩИХ (f1ервый «.,,) И исходящих ("торой «',,) портов от
100 до 1000.
В дополнение к директиве permit можно ИСПОЛЬЗОВаТЬ директиву deny та'
КОЮ же формата, но противоположною назначения (запрет доступа).
Дирекm.ва iDterface в ПРllIlеденном примерераЗРеШает все соедlШСЦi!JI
оТ компыQтровB с адресами 192.J68.0.' (наша ilнутреннЯJI сеть) ка ВСеМ
пар'Там интерфейса ethO.
Имена 1I пароли пальзователей сервера socksS садержатся в файле / etc /
воске5. passwd n формате <ИМЯ> <незаПiИфрованныйпароль>. После
создания ЭТОЮ файла настройку socksS можно считать законченной.
18.10.3. Запуск сервера socks5
ЗаnускаетClI сервер СJ)едующей командой:
# /usrJ1ocal/bi.n/socks5 E '.
При запуске с этими ключами демон должен перейти в фоновый режим
и выводить диаrно.стические сообщения на стандартный вывод (в НalПем
случае это экран). Если сервер СКОНфИryрирован правильно., вы ДОJ!ЖНы
увидеть Прli/.{ерна следующее:
11410: Воске5 sr.arting 5!: Моn Мar 4 19:13:552002 in norrna1rnocte
После УДачноro запуска остановите сервер (kil1al1 воскв5) и добавьте
е[-О запуск в сценарий аnтозатрузки системы.
525
UNUX: f10лное руководсТ80
18.1 О .4. Dante еще один сервер SOCKS5
Этот сервер считается более ПрОСТI>IМ в настройке. Он использует файл
конфиryраuии J etc J sockd. conf (листииr 18.2).
Листинr 18.2. Примерный фзйл ietc/sockd.conf
internal: 192.16e.0.l port = 1080
externa1, 111.111.111.111
clirтt раБВ {
from: 192.168.0.0/16 to, 0.0.0.0/0
}
разз (
from: 0.0.0.0/0 to: 192.168.0.0/16
с ornrnand, bindreply udpreply
l()g: conпect er:ror.
}
ДиреКТlШа intema1 определяет ваш внутренний инreрфейс (точнее, ннутрен-
НI!Й IP-aдpec),aextemal ваш настоящий lР (111.111.111.111). В блоке cllent
pass указьшаются возможные КllИеНТЬ! вашеrо сервера (сеть 192.168.0.0), а в
блоке pass имена узлов, I(()'fopble MOryт «общаТЬС>I» С вашими КШlентаOI. В
приведенном примере разрешается отвечать К.JШенrам со всех узлов (0.0.0.0).
Протоколироваться будут только ошибки соединения.
18.10.5. Настройка клиентов SOCK55 (ICO и licq)
Настройку клиентов будем рilссматривать на примере двух самых, на-
верное, популярных SOCK$-Кдllентов. Сначала рассмотрим настроЙку
Протраммы [СО для Windows, а потом licq IСQ'клиента для Liпuх.
Запустите проrрамму ICQ и иа.жмите иа кнопку ICQ. ИЗ появившеrося
меlПO выберите команду Preferellces и перейдкте в раздел Соnпесtiоns
на вкладку Server (рис.18.3). Включите режим использования rrрокси-
сервера и установите тиП ПРОКСИ-Сервера SOCKS5. Потом перейдите
на вкладку Firewall и установите парамеТРbI прокси-сервера: имя, порт,
тип (socks5), имя пользователя и пароль (рис. 18.4).
С проrpаммой licq будет немножко сложнее. Во-первых, нужно установкть
на компьютере пользователя nporpaMMY ruпsосks, пхрдя:щую в состав
пакета прокси..сервера (эту проrрамму ыожно также найти в Интериете
отдельно), и переКОМПИЛllровать liсч, включив поддсржку SOCKS5. Для
этоrо псрейдите в катмOI', содержащиЙ исходные текстЬ! Нсч, If запуститс
спенарий сап f igHre С параметром --еnаbIе-sосksS:
$ ./configure --enable-socks5
526
rлав. 18. Проксисер.еры. SQUIO и SOCKS
РИс. 18.3. Свойства соеlJ,инени;:; 'СО
Рис. 18.4. Парзметры lIpOKcucepBepa
После этоrо выполните пр"вычные комаtщы: шаkе; п-Iакс,; i!l$tall.
Теперь нужно создать файл / f:зtс,l 1 i l'JSO( К$ s. сап f и 110баШfТЬ о Ht?i"O
строку:
socks5 192.168.0.1:porc
192.168.0.1 ЭТО адрес вашеrо SOCKS5cepBepa. porl IJОрТ. необходи
мый клиенту (обычно 1080).
527
rлава 19
МАРШРУТИЗАЦИЯ
И МЕЖСЕТЕВЫЕ
ЭКРАНЫ
ВВЕДЕНИЕ В МАРШРУТИЗАЦИЮ
проrРАММЫ МАРШРУТИЗАЦИИ
В LINUX
РАСШИРЕННЫЕ СРЕДСТВА
МАРШРУТИЗАЦИИ.
КОМПЛЕКС IPROUTE2
ЧТО ТАКОЕ БРАНДМАУЭР
ЦЕПОЧКИ ПРАВИЛ
LINUX ПОЛНОЕ РУКОВОДСТВО
1
19.1. Введение в маршрутизацию
Маршрутизация является очень ответственным механизмом, отвечаю
щим за то, как будет происходить обмен данными, как будут пролrать
информационные потоки. Скорость и эффективность обмена данными
80 MHorOM за8ИСЯТ от Toro пути, по которому ОНII следуют от ОJ1НОЮ
компьютера сети к npyroMY.
Маршрутизация имеет смысл 8 сидьно разветвленных сетях 11 основыва-
ется На использовании таБЛIШ маршрутизации. Такая табдица имеется на
каждом узле, выступаюшем в роли марщрутизатора. В ней содержится
информацl1яоб окружающИ!( узлах 11 известных маршрутах, на основе
которой маршрутизатор будет 8ыбирать ОЛТИМВlJ.ьный путь для передачи
данных.
При оценке и выборе маршрута используются так называемь!l.' метрики
СТОIIМОСТИ. В качестве тзкой метрюш вы,упают какиелибо критеРJШ. по
которым можно оценить маршрут. Различные протоколы маршрутизации
MOryт исподьзовать рвзди'шые метрики, то есть выбирать оптимальный
маршрут. осиовываясь на анализе разных пар;щетрсв. PaCCMoтplIМ OCHOB
ные протоколы маршрутизации:
+ RIP один из старейших пparoколов маршрутизвщш, разработанный
компанией Хеroх. Метрикой сТоимости у этi>rо npoToKOJJa явллется
количество пере ходов, которое доджен совершить пакет данных от
отравителя к получателю. Этот npoTOKOJJ разрабатывался во BpeMe
на не60Jrьших сетей, поэтому все узлы, находящиеся на расстоянии
больше 15 переходов, он воспринимает как недосяrаемые. Это эначит,
что в сетях, в которых в одну цепочку MOryт быть выстроены более
15 маршрутизаторов, использовать протокол RIP нельзя. Данный
протокол использует в своей работе демон routed, который будет
рассмотрен чуть позднее
+ RIP-2 представляет собоЙ улучшенную версию протокола ЮР. Одно
из основных улучшений заключается в том, что вместе с адресом
следуюшеrо перехода передается сетвая маска. Блаroдаряэтому
упрощается управление сетяш, в которых есть подсети.
529
LlNUX: поЛое руководство
. OSFP является самым популярным и широко используемым протоко
лом маршрутизацШI. В еro основе лежит специальный математический
алrОрlff!d, который позволяет высчитывать оптимальные маршруты.
Этот протокол является тополоrическим, то есть учитывающим co
стояние канала. По сравнению с ЮР он обладает следующими дй
стоинствами: возможностью управления несколькими маршрутами и
возможносТью разделения сети на сеrменты, которые будyr предо-
ставлять друт npyry только высокоуровневые данные маршрутизации.
Этот протокол рекомендуется использовать в сетях с разветвленной
СТРУl<1'урой, в КO'I'Qрой может ВОЗНIIкать большое количество ду5ли
РУЮЩlIXся- маршрутов.
Следует понимать разницу между маршрутизацией иперенаправлением
трафика. Маршрутизация представляет собой сложный процесс просчета
и выбора наилучшеro На данный момент маршрута. При ЭТом использу
ется большое количество входной информации, оснонывающейся Как на
предыдущем опыте работы маршрутизатора, так и на текущем состоянии
сети. Значительная- часть этой информации предоставляется соседними
узлами, поэтому синхронизация таблиц маршрутизации у соседних узлов
представляет собой существеннуlO проблему.
Перенаправление трафика же является простой операций, нanравJlЯЮ
щей пакеты данных в соответствии с определенным условием. Никакоrо
выбора" расчета при этом не про изводится. Можно сказать, что перена.
правление Это простейший (статический) метод марwрутнзаЦИI!. Мы
раССМОТРI!М еro в параrрафе, посвященном брандмауэрам.
19.2. Проrраммы маршрутизации в Linux
19.2.1. Демон routed
Стандартной Проrpаммой маршрyrизацин в Linux является демон routed.
Этот демон, как правило, настраивается саМ (дшшмически) и не требует
конфиryрироваНI!Я. Обнаруженные маршруты 011 заносит в маршрутную
таблицу ядра.
В своей работе демон routed использует протокол RIP. Чтобы восполь
зоваться преимуществами протоколов ЮР2 или OSFP, вы должны ис
полЬЗовать друrой демон gated. Демон routed может работать либо в
режиме сервера (S), либо в режиме подавления сообщений. Во втором
режиме он будет только получать от соседей маршрymую информацию,
но сам ее отсылать не будет.
530
rлава 19. Маршрyrизвция и межсетевые экраны
Для добавления статических мартрутов вручную служит команда
route. Рассмотрим пример TaKoro маршрута. Пусть у нас есть две сетевые
платы ethO и eth!:
# ifconfig ethO 192.168.1.1 ир
# ifconfig ethO 192.168.2.1 цр
И нам нужно обеспечить маршрутизацию между подсетями 192.168.1.0 и
192.168.2.0. С этой целью объявляем, что машины, которые находятся в
вашем локальном сетменте 192.168.1.*, «сидят» на первом ннтерфейсе и
общаться с ними нужно напрямую:
# route add net 192.168.1.0 192.168.1.1 netmasK 255.255.255.0 О
А с машинами с адресами 192.168.2. * будем разroвариnать Через ethl:
# route add net 192.168.2.0 192.168.2.1 netmask 255.255.255.0 О
Последний apryмeHT команды тои t е это метрика. Ее можно понимать
как «расстояние до шлюза назначения» или «сколько пересадок между
IlUIюзами придется сделать пакету по пути туда и обратно». Т.к. адреса
192.168.1.1 и 192.168.2.1 являются нашими собственными адресами, то
это расстояние равно нулю.
Сетевые пакеты для IPадресов, которые не лежат в наwей локальной
сети, будем отправлять на машину 192.168.1.11, а оиа сама будет разби-
раться, что с ними делать:
# route add default 192.168.1.11 1
Таким образом мы объявили маршрут по умоmанию со значением ме-
трики, равным 1.
Не забудьте только добавить выЗовы команды route взаrрузочный
сценарий, потому 'по при перезаrрузке правила маршрутизации ядра
теряются.
Забеrая uесколько вперед, замечу. что такой статический маршрут
представляет собоll обычное правило перенаправления трафика,
поэтому ero можно реализовать и средствами пакетноrо фильтра
IPTab!es:
# iptables p FORWARD DROP
# iPtables A FORWARD B 192.168.1.0/24 -d 192.168.2.0/24 ) АССЕРТ
# iptables A FORWARD B 192.168.2.0/24 d 192.168.1.0/24 ) АССЕРТ
А вот более сложный пример, приведенный В документации по IPТables.
Пусть у нас имеется одно-единственное соединение с Интерllетом и мы
не хотим, чтобы кто-либо вошел в нашу сеть извне:
## Заrрузим модули для отслеживания соединений
# (не нужно, если они встроены в ядро)
531
UNUX: полное руководство
# insmod iрсщщt!"",сk
# insщоd ipconnt.racJcftp
## Создадим цепь block, которая будет блокировать
It соединения извне
. iptables H block
# iptables A block m state state ESTABLISHED,RELATED
j ДССЕРТ
# iptables A block m state state NEW i ! рррО j АССЕРТ
# iptables A block j DROP
## Весь входящий и маршрутизованный трафик будет
# ПРОХОДИТЬ через block
# iptables A INPUT j block
# iptables A FORWARD j block
19.2.2. Демон gated правильный выбор
в последнее время демон gated ИСПO)lьзуется чаще, 'ICM стандартный
rouled. Объясняется это тем, что gated более rибок в конфиryрировании
и обладает большими возможностями, в частности, им поддерживаются
протоколы RIP-2 и OSFP.
Проrрамма gated быда разработана rpуппой амеРlfкацсlЦ!X университе-
тов для работы сет>! NFSNET. Оllа позволяет орrаНИЗОllать мноroфу"к
циональныЙ шлюз, обслужиnаЮlЩlЙ как внутреннюю, так и внешнюю
маршрутизацию. На данный момент gated поддерживает следующие
протоколы маРШРУТllзации:
. RIP nерснй 1 и 2
. HELl,O
. OSPF версии 2
. EGP персии 2
. BGP версии 2, 3 и 4.
Таблица 19.1 поюжет вам сравиить возможности демонов routed и
gated,
Протоколы. поДltержнsaемые gatвd н foиted
Таблица 19. ,
Протоко,nы 8нyтpetf.М101)( марtЩJОРО. ПроТОI:OЛW 8Нewних
Демон М8fЩlРyтм:unoро8
R,P HEl.LO оа"" ВОР ЕаР
rouled V, . - . .
ga'te-d, eepclltR 2 V, + . V1 +
gated. версия 3 V1,V2 + V2 V2.VЗ +
532
rлава 19. Марwрyт>tзация и межсетевые экраны
PaccMoTpIM классическое подключеЮlе ЛОlUlJJъной сети к Интернету.
Пусть адрес натей локальной сети 143.100.100.0, а на шлюзе установле-
ны две сетевые платы с IР-адресами 143,100.100.1 и 143.100.200.1. Пусть
в иатей сети ecr:ь машина с lP-адресом 143.100.100.5, На J(ОJ'ОрОЙ J'акже
установлен gated. Настроим gated сначала lIа этой рабочей станции, а
потом На сервере. Для иастройки может использоваться утилита gdc,
постаВJIяемая вместе с самим gated.
Настройка gated осуществляется путем редактирования файла конфиrу-
рации letc/gated.conf. Содержимое этоrо фаfша для рабочей станции
приведено в ЛИСТИНl'е 19.1, а для сервера в ЛllСТlfнrе 19.2.
ЛИстИнr 19.1. Ф.айл конфиryрации Jotc/gated.conf длS1 ра60ЧОЙ станции
# ЭТо 'Xp'aдpec раббчеЙ СТ;,ШЦИИ
interface 143.100.100.5 passive;
# используем протокол RIP (Route Internet Protoco11
rip уеэ;
Листинr 19.2. Файл конфиryрации /etc/gated.conf ДЛЯ сервера
# Описываем интерфейсы и протокол
interface 143.100.100.1 passive;
interface 143.100.200.1 pa5sive;
rip уев;
export proto rip interface 143.100.100.1
proto direct
{
апnоиnсе 143.100.200.0 metric О
}
} ;
export proto rip interface 143.100.200.1
{
proto rip interface 143.100.100.1
(
аnnоипсе аН :
}
} :
Первая директива export объявляет под сеть 143.100.100.0 (l1awa сеть)
через интерфейс 143.100.100.1, который объявляется шлюзом в данную
!lOдсеть, то естьсчитастся, что ИRтерфейс 143.100.100.1 nрииадлежитузлу,
входящему в эту сеть. Директива proto direct rоворит О том, что пакеты
5ЗЗ
lINUX: полное рУКОВОДСТВО
для под сети нужно посылать непосредственно на интерфеЙс, а нулеllая
метрика означает, ЧТО интерфейс стоит на шлюзе в подсеть.
Вторая директива export сообщает всем узлам подсети через интерфейс
143.100.200.1 все марщруты, которые данный ШilЮЗ получает из подсети
143.100.100.0 через интерфейс 143.100.100.1.
При Нatшсании директив ехром внешняя конструкция всетда определяет
интерфейс, через который сообщается информация, а внутренняя ИС'
точник, через который эту информацию будет получать gated.
Рассмотрим ПрlIМер из докумеlПaцRИ по gated, 11 котором нашу сеть через
подсеть подключают к Интернету (листинr 19.3).
ЛИСТИНr 19.3. ПоДt\лючение через подсеть
rip yes;
export proto rip interface 136.66.12.3 metric 3
{
proto rip interface 136.66.1.5
{
аnпоиnсе а11 ;
)
} ;
export proto rip iпterface 136.66.1.5
(
proto rip iпterface 136.66.12.3
(
allnounce 0.0.0.0 ;
) ;
Первая директива export rоворит о том, что gated получает все, что
передается в подсеть, связывающую данную сеть с Интернетом, через
интерфейс 136.66.12.3 (речь идет о маршрутах, а не о самих данных).
Вторая диреКТИllа export определяет место назначения куда по умолча-
нию нужно отnр3ВJIЯТЬ информацию из сети, чтобы она доститла aдpecara,
который расположен за пределами локальной сети. Адрес 0.0.0.0, СООТ-
ветствуюший любой машине за интерфейсом 136.66.12.3, определяется
через интерфейс 136.66.1.5 для всей локальной сети.
После настроЙки gated нужно перезanуст.rrь:
# service gated restart
534
rлавв 19. Маршрутизация и межсетевые экраны
19.3. Расширенные средства
маршрутизации. Комплекс iproute2
19.3.1. Пакет iproute2
Начиная с версии ядра 2.2, сетевая подсистема Linux бьта значительно
переработана, в нее было добавлено миоrа новых возможностей управ-
ление трафиком, маршрутизаuия на осноне правил и т.п. ДОСтуп К ЭТИМ
возможностям предоставляется паЕ;етом iproute2, входящим в состав
большинства CQo ременных дистрибутивов.
В случае необходимости можно скачать этот пакет с сайта
ftp: / / ftp..inr.ac. ru. / ip.routing.
19.3.2. Утилита ip
Утилита ip. входящая в состав пакета iproute2, объединяет в себе 8се 80З'
МОЖНQCТи команд ifeonfig, атр и route. Формат ее вЫзова Такой:
ip (ключи] объект ( команда [аРРументы команды) J
Ключи можно указывать следующие:
. .s вывод статистической информации;
. .f выбор протокола:
· .f inе! протокол IPv4;
. .f inet6 протокол 1Pv6;
. .f link сетевое устройство;
. 'Т разрешать IP'Mpeca 8 имена УЗЛОВ;
. -v печать версии проrраммы.
Артумент Объект позволяет выбрать объект, с которым будем работать:
. адрес IPv4 или IPv6 адрес устройства;
. IInk устройство;
. neighbour ARP'aдpec;
. route маpwpутизация;
. rule база данных правил марщрутизации;
· madress uщр())ц:щещательный адрес;
. tunnel туннель через IP.
Артумент Команда описывает действие над Об1.ектом:
. ip Jjnk конфитурация сетевоуо устройства;
. ip IInk set изменение параметрОIJ ceTeBoro устройства;
. ip link show просмотр параметров ceтeBoro устроЙства.
535
UNUX: полное руководство
При изменении парaJliетров ceтeDoro УСТрОЙС1'JJа вы можете задать сле
дуюшис apryMeIObl:
. up включн.ть;
. доwn выключить;
. arp оп или arp off изменение фllаrа NOARP на устройстве;
. dynamic оп иди dynamic off изменяет фдаl' DYNAМIC на у("рой
стве;
. multicast оп или multicast off изменяет флаr MULТICAST на
устройстве;
. пате изменяет имя устройства;
. mtu <Число> изменяет зНачение мти на ус:тройстве:
. address <Адрес> изменяет адрес На устройстве;
. broadcast <Адрес> И:Jменяет широковещательный адрес На
устройстве.
19.3.3. Про смотр параметрО8 ceTeBoro устройства
KOMaliJtY ip link sbow лучше всеroраССfатривать на примерах. Для П(l
лучения Иliформации о состоянии устройства еёЬО введите команду:
. ip link 16 dev есЬО
ect.,o: юt'l 1500 qdisc сс,,, qlen 100
J.ink/ether 00:44:б7:91:Зl:ld brd ff:f.f:ff:ff:ff:ff
Получить статистику устройства ethO можно командой:
#i[1 э J.ink 1. dev ethO
2: ethO: mtu 1500 qdisc cbq чlеn 100
liпklеthеl' 00:44:67:91:31 brd Н:Н:ЕЕ:ЕЕ:ЕЕ:ЕЕ
кХ: bytes packets errors dropped overrun mcast
хххххххх хххххх О О О О
ТХ: Ьуtеэ packets errOrs dropped carrier collshs
хххххххх хххххх О О О 132934
Вместо хххххххх х:ххххх вы УВИДите количество принятых(RХ)lпередан
IibIx(TX) байтов 11 пакeroв.
19.3.4. Операции над адресами: команда ip address
Команда ip address управляет адресами на устройстве. Объект ДЛЯ нее
это IPv4 или [Рvб адрес. Эта команда показывает адреса и их свойства, а
также добавляет новые адреса.
Чтобы добавить адрес 192.168.0.1/24 с маской подсети 255.255.255.0 со
стандартным широковешательным адресом и именем ethO:Alias, введите
команду
536
rл,ва 19. МаршрутизаЦj.1 и Межее,""ы" экраны
# ip ааш add 192 .lб8. О .1./24 brd + аеу etil0 1аЬеl ethO :АНае
Исrюлыуются еще следующие варианты команды:
il) addre55 delete предназначена для удаления адресов. ДЛЯ удалени>!
адреса 192.168.0.1/24 с устройства ethO введите КОШНДУ ip addr ае 1
192.168.0.1/24 аеу ethO.
ip addre5s show выводит информацию об адресе.
19.3.5. Управление таблицей маршрутизаци...
Команда ip route управляет та6шщей маршрутизанни:
ip route add лобавить новый маршрут;
Ip route change изменить маршрут;
Ip route replace заменить маршрут.
Добавим маршрут к сети 192.168.0.0;24 'rерез 192.168.1.1:
# ip route add 192.168.0.0/24 via 192.168.1.1
19.3.6. Динамическая маршрутизация
Команда Ip route позволяет добавнть динамический маршрут: шлюз будет
выбираться в зависимости от текушей наrрузки на Hero. Всеrда будет BЫ
бираться ШЛюз С МНнимаЛЬной наrpузкой.
Пусть у нас ecrь два устройства рррО и pppl. Маршрут по умолчанию
через устройство рррО, но если этот маршрут недоступен, будет исполь
ЗО8аТЬСЯ рррl:
# ip roиte add defaи1t есоре g1oba1 nexthop \
аеу рррО nexthop dev ррр1
Для УJ!аленnя маршрута используйте ((оманду ip route delete:
11 ip ro\Jte аеl default $соре global nexthop \
,. dev рррО nexthop dev ррр1
19.3.7. Управление правилами маршрyntзации
Для решения этой задачи предназиачена комама ip rule. Маршрyt'iвация
ПРОИ3ВОДJlТСЯ в зависимости от:
. адреса получателя;
. адреса отправителя;
. IРпротокола;
. TpaHcnopTHoro протокола.
537
LINUX: Полное РУ'ОВОДС'ПЮ
По умолчанию испальзуются три таблицы правил маршрутизации:
. Local содержит таблицы для докальныx и широковешательных
адресоВ;
. Main самая обыкноВСНltая таблица маршрутизации;
. Default пустая таблица по умалчанию.
Артументы команды ip rule:
1. адрес отправителя;
2. адрес назначения:
3. имя интерфейса, с кoтoporo П\ЩУЧеИ пакет;
4. метка [щкета, которая устаиaJlJlШlaется брандмауэром;
5. идентификатор табшщы маршрyrизawrn: им может быть номер или
строка из файла /etc(iproute:<irttables;
6. приоритет таблицы (число).
Вот несколько примеров. Требование пересылать пакеты с сети
192.168.0.0124 соrласно таблице Main:
# ip rule add from 192.203.80.0/24 table щаiп prio 100
Теперь допустим, что у нас есть два канала в И[пернет (два провайдера):
ррр1 с адресом 193.168.99.99, который связан с 193.168.99.100, и ррр2 с
адресом 193.168.100.99, связанный с 195.1.1.1. Пользователь ivanov ХОЧет.
чтобы мы еТО пакеты отправляли чере3 ррр2 (BTOpOro провайдера):
* echo 200 ivanov » /etc/iproute2/rttables
# ip ru1e add from 192.168.0.10 table ,уаl10У
# ip Лllе 15
о: frощ а11 lookup 100а1
32765, Erom 192.168.0.10 lookup iVa.nov
32766: from а11 lookup rnain
32767: frorn аl1 100kup defaи1t
Теперь мя этоrо пользователя назиачнм маршрут ПО умолчанию и очи
соим кэш'таблицы маршрутизации, чтобы наши изценения вступил\{ 8
силу:
# 'р route add defau1t via 195.1.1.1 dev ррр2 table ivanov
# ip route f1ush cache
Рассмотрим еще ОЛ\{Н npактическ:!lЙ пример. Направим весь трафик на
rюрт 21 через УС1'ройcrво eth1:
# iptables A PREROUTING i ethO t mangle p tcp dport
21 j МARK setmark 2
Теперь нужно создать правила для помеченных пакетов
. echo 202 21.tbl » (etc/iproute2/rttables
538
rпаез 19. Маршрyrизация и межсетевые экраны
ff ip rule add fwark 2 taыle 21.tbl
ff ip route add default via 192.168.О.10 dev eth1 table
21 . tbl
# ip route flush cache
19.4. Что такое брандмауэр
Брандмауэр (межсетеВQЙ экран, бастион, firewall) это компонент систе-
мы, обеспечивающий защиту сети от несанкuионпрованноrо доступа.
Как известно, весь трафик в сети состоит из пакетов. Каждый пакет
состоит из двух частей; заrоловка и тела. Б заroловке пакета находит-
ся информация об источнике, адресате, типе накета, а также прочая
информация, которая характерна для па кетов определенных типов. Б
теле накета находится собственно передаваемая информация. Так пот,
брандмауэр представляет собой пакетный фIШЬТР: он ПРоСм;iТРlшает за-
l"Oлопок каждоrо ПРОJlОД!llдеrо через Hero пакета, а потом решает, что с
этим пакетом делать: принять, иrнорировать или отказать с уведомлением
отправителя.
Обычно брандмауэр IIспользуется на шлюзах, соединяющих две сети.
Например, на шлюзе между локальной сетью и Интернетом можно запре-
тить передавать или прииимать пакеты некоторых катеroрий, отrpamrчив
таким образом свою хорошо орrаНIf30ванную сеть от всемирноro хаоса.
Фильтрация пакетов встроена в ядро ОС Linux. В старых ДИСТрllбупlВах
(ядро 2.211 ниже) стапдартным брандмауэром служит IPChains, в новых
(ядро 2.4 и выше) IPTabIes. Оба ОНII позволяют защититься от TaКIIX
распространенных атак, как I1Иllr смерти, атака на отказ, IР-спуфинr,
Фраrмеllтация пакетов. Возможности пакетноrо фильтра IPТabIes значи
тельно шире, чем у IPChains, 110 иа праКТlIке дополнительные возмож-
",ости используются редко в ОСIIОВНОМ применяются средства, при-
сутcrвоваВШllе уже в IPChains. Поэтому я начну изложение "ринциnов
и приемов настройКII брандмауэра с этоrо устаревшеrо фильтра.
19.5. Цепочки правил
Ядро стартует с тремя списками правил: input, forward, output. Эти прави-
ла называются firewaIl-цепочками ИJШ просто цепочками. Цепочка это
набор правил вида «заrоловок пакета: действие». ЕCJШ заroловок l1акета
соответствует зarоловку, указанному в правиле, выполняется заданное в
правиле действие. Если первое правило к этому пакету неприменимо, то
рассматривается следуюшее правило в цепочке. Если ни одно правило
539
UNUX: ПОЛНое PYК080/!C'1t10
не применимо к паiery, то па1.е1', \жорее всеro, будет oTBeprHYТ, Если
какой-нибудь пакет. 6тверraется, то сообщение об этом ПРОТОКОЛltруется
службой syslog.
Пакет, поступающий извне, сна чада проходит предваРlfreЛЪНУЮ проверку.
Она включает в себя сверку контрольной суммы (не поврежден ли пакет
при пересылке) и «сацитарную ПjX>IleРКУ» (не на,рушит ли некорректный
пакет работу кода проверки правил). Поврежденные инекорректные
пакеты отверrаются.
Принятый пакет поступает на входной фильтр (цепочка input). Если
входной фильтр ПjX>пускает П;lКет, то i<PJI маршрymзации проперяет адрес
ПОЛУ'lателя, прсле чеrо пакет либо передается локадьному процессу,
либо маршрути:эируется На друryю мatщшу. Пакет, предназначенныйдJIЯ
друrой машИffЫ, должен пройти через цепочку перенаправления forward.
Если правила этой цепочки разреl.ЩllOТ пакет, он будет маршрymзировац,
в противном случае oтвeprHYТ, ПI\i<7Т также будет отnерrнут, если ядро
не поддерживает мnршрутизащш. . .
Прежде чем пакет выйдет из ceTeBoro интерфейса, он должен пройтн
цепочку output. Любая проrрамма может отправить пакет. который будет
направлен в эту цепочку. Если она пропускает пакет, то он lюпадет в сеть
станет исходящЩ\l пакеТЩJ. Отверrнутый пакеТ не выйдет за пределъr
компьютера он будет УНИЧТОJКен.
Пакет, предназначенный для Иffтерфейса 10 (обратная петля или шлейфо'
вый интерфейс), сначала ПРОХОДИТ в\dJ()ДПУIO цепочку, а потом попадает
во входную цепочку интерфейса 10. ПРQхождеJJие пакета через цепочки
правил схематично представлено на рис. 19.1.
Сетевой
интерфвii"tc
Иктеpфeйl:
10
""с. 19.1. ПРIIНЦИЛ работы пакетнorо фильтра
540
rлаО8 19. МЗРWРУТ1ЛзациSl-и. межсетевые экраны
19.6. IPTabIes пакетныи фильтр
для ядер 2.4.х. и 2.6.х
Фильтр IPТabIes, очень rrохо)юm на lРChаШs, называется так потому, что
хранит иепочки nравllJI в таблицах. rлавной таблицей, в которой хранятся
rrраВlfла обрабоТКJI всех стандарrnых тиrrов трафика, является таблица
filter. Именно с ней мы и будем работать. К стандартным таблииам OT
носятся также:
. таблица nat используется для rrостроения NАТпреобразова
телей;
. таблица mangle задает типы nреобраЗОВaffИЯ некоторых IШКетов.
ДJ[Я иросыотра COJIepJКIIMOro таблицы служит следующая команда:
:фtаы1ss L t <имятабтщы>
19.6.1. Что изменилось в IPTabIes
по сравнению с IPChains
. Имена cтaндaprnьoc цепочек INPUТ, OUТPUТ и FORWARD теперь пи
шутся в верхнем реrистре. Имена паль.зователъских цепочек по соrлаше--
иию ШlIll}'ТCя crpoчными буквтцl И MOryr lulСТЬ дlшну до 31 cиr.шола.
. Действие «отклонить nаке1'» теперь называется не DENY, а DROP.
. Действие МASQ называется МASQUERADE.
. Для перенаправления пакетоВlIа лользовательское УСТРОЙCТllO ИСЛOJlk
зуется цель QUEUE (раньше ДIЩ ЭТОI'О ИСЛOJIl>Зовалась ОПЩIJI --;J).
. Опция теперь означает входящий интерфейс и работае')' только в
нелочках rNPUТ и FORWARD. ПраВlIJIа в цепочках FORWARD и
OUTPUT, которые использовали ОПIщю i, следует rrереШIсать с ис.
польЗОваНИеМ оnuи» wo.
. Если обнулить DС1Р()еННУЮ (стандартную) цепочку, 10 оЧиСТЯТСЯ также
и счеТЧI!КИ rrолитик.
. Правила ДIЩ протоколов ТСР и ООР должны использоваться вместе
с флara!d1l ----soиссероп и --destinationport (--sport и port). Эш флarn
далжны иcrЮllЬ3000ТЬСЯ 1'ОЛI>l(О с ука.З3lщсм npomкола, нanример, p Icp.
. ОJЩИЯ --у теперь Называется ---syn и должна указываться после флата 1'.
. Действия RБтст и LOG реализоваJiЫ отдельными модулSIМИ ядра.
19.6.2. Настройка ядра Linux для поддержки IPTabIes
Новые параметры конфшурации ядра, включающие поддержку IPTabIes,
я нредстаВIIJI в .rамице 19.3. Возможно, в вашем дистрибутиве некоторые
из них отключены, тоща вам придется пересобрать ядро, Следующая
тлава подробно рассказывает о том, как это сделать.
541
UNUX: ,\Олное руководство
ПЗD8меrpы I<QНфИrypaФ.fИ.1ЩPa
Табмца f 93
Параметр Н.............
CONFIGJP NF JPТAВlES "QБХQДИМ Д1iЯ р.ботыlРТаЫеs, Не 8kJ1ЮЧиQ ЭТОТ Параметр,
&ы вообще не сможете исnопьэODCТЬ Iртаы13
ПОЭ8С1nj:lет иWGЛт" npl)rpeMMbl. кoropЫ'" рабо'rВlOt
CONFIGPACKEТ непосредственно ссете6ЫМ ycтpo.l1CТ80M, Лримером
таКОЙ nporpaмfdhl может. ПОСЛУЖИ1Ъ tcpdump
CONFIGNEТFILTER 8клю,",ите ЭТОТ napaM8ip, есл... 8Ы ctJбраЕ)тесь ИСПОЛhЗО1Ъ
ваш компыоерp D ecТlle W11l0эа.
Позволяет QТCJJежииап. (;()едJotеКИА, ЭТCJТ naрвметр необ.lщqим ДЛ
CONFIG-'PNF CONNТRACK работы фующиАNAТ или Н>.маСК8Р8динra, Ha-lCомт.юrере.WIlЮЗEl:
ВI(J1ЮЧ1l!ТEt 3ТМ пврв.метр
ИЗ-М БОДbWоrо копм'«!ства FTP-запрQCОВ мо,цуltь
IPNF CONNТRдCK не 8 СОС10RНИИ ПрОСllеДИ1Ь ВС6 FТPоецие.
CONFGJPNF fТP ния, поэтомv в ПОМОЩЬ ему добавлеН модvль CONF1GJP NF FТP,
отслеЖИ8ЭJOщиА ТОЛьк'О fTP-<:оединенlttЯ. Включите этот nэрВt.tеrр.
веnи не ваШеМ компwo-rерв устанОеМН FТp.cepввp
Неоl5заТОЛЬНЫЙ ПараМетр. nОЗ60мет оrрани"iИТЬ !::оличество
CONFIGJP NFМATCHlIMf1 nакв10В. передаsaeмьос/nринмм.е8МЫХ ЭР OnРUД8/1&нныЙ
nромвжyro" времени
CONFIGJP NF MДTCHMДC nОЗ80I1F1'ErJ' б1IОJ(кp.Oв.Irtь пaкeTbI, испом.эуя МАе-адРеС
(а не IР.,.aщиrс)
Все остальные опции, связаННJ,lе с lPТabIes, содержат в своем названии
слово МАТСН, например, CONFIGIP NF MATCHМARк. Эти ОПЦИИ
разрешают выполнять над пакетами определеННJ,lе действия.
Фильтр IPTabIes может заrружаться как модуль при первом запуске
iptabIes, а может быть встроен в ядро постоянно (что рекомендуется).
Модуль фильтра fllter называется iptablefilter.o.
у вас может быть установлен модуль ipchains.o и соответствующий ему
сервис ipchains. Этот модуль несовместим с iptabIes, поэтому вы долж
ны выбрать, какой из них вы будете использовать.
19.6.3. Первичная настройкв IPTabIes.
Задание политики по умолчанию
Если к пакету не может быть npименено ни одно правИ1JО ИЗ стандартноЙ
цепочки, то судьбу эrorо пакета определяет ПОЛlIТика цепочки действие
по умолчанию. Значением поЛlIТИКИ может быть либо АССЕРТ (прщштъ),
либо DROP (отклонить), либо REJECT (отклонить с уведомлением ис
точника). Первоначально встроенные цепочки не содержат ни одноrо
правила, а политикой имеют АССЕРТ, поэтому первое, что нужно cдe
лать, это установить в целях безопасности деЙствие DROP:
# iptables P INPUT DROP
# iptables ..р ООТРОТ DROP
# iptables..P FORWARD ОЕОР
542
rлава 19. Маршрутизация и межсетевые экран ы
19.6.4. Действия над цепочками
Рекомендуется создавать отдельные цепочки для различных объектов
фШIьтрации. Это ПОЗ80ЛЯет лоrически rpуппировать правила. Для созда-
ния новой цепочки используется опция N, за которой следуe-r имя 0011011
цепочки (напоминаю, что имена пользовательских цепочек пишутся
строчными буквами):
iptables N имяцепочки
Ключи проrpаммы iptabIes, предназначенные для манипуляций с це-
почками и правилам и в них, точно такие .же, как у проrpаммы ipchains
(таблица 19.2).
19.6.5. Правила фильтрвции
Задание правил фильтрации IPTabIes похож:ена задание правил в
IPChains. Для создания правила используется опция --аррепд (или -А).
После этой опции указывается нмя цепочки и критерий выбора пахетов
в этой цепочке. Затем указывается опция jump (или -Н, значением ко-
торой служит действие (АССЕРТ, DROP и тд):
iptableB A INPUT критерийвыбора -j действие
13 качестве критерия выбора обычно указываются либо порты, Jшбо IP-
адреса, либо МАС-адрес. По этим параметрам и будет «вылавливаться»
пакеты из цепочки. Можно задать сразу несколько критериев выбора,
переЧIIСЛIIВ их Apyr за друrом.
Фильтрация по портам, IPaдpecy н МACaдpecy 8 IPТabIes задается с
помощью следующих критериев выбора:
. p протокол задает протокол, по которому будет ПРОI-IЗВОДИТЬСЯ
отбор пакетов. Может принимать значение а11, что означает «все про-
ТОКОЛЫ»;
. -s адрес (шш -.source адрес) задает исходный IР-адрес, по которо-
му будет ПрОИЗ80ДИТЬСЯ отбор пакетОD. В качестве значения может
указываться сетевая маска IfJШ ПОрТ;
. -d адрес (или --dеstinatiоп адрес) задает IP-адрес получателя, по
которому будет производиться отбор пакетов. В качеcтt>е значения
может указываться сетевая маска или порт;
. -j интерфейс задает входной шrrерфейс (ethO, рррО и т.п.), с ко-
TOporo будет ПРОIIЗВОДIIТЬСЯ отбор пакетов. Этот критерий работает
ТОЛЬКО 8 цепочках 1NPVТ и FORWARD. При задании интерфейса
может Ilсполъзоваться знак «+», означающий «все интерфейсы за-
данноrо типа». Например, заIUfСЬ ррр+ озиачает все интерфейсы ррр
(pppO-рррN);
543
UNUX: полное pj'1(08oACтeo
. -о интерфейс зiщает выходной интерфейс (ethO, рррО и т.п.), с
KOTOpOro будет npоизводиться отбор пакетов. Способ задания такой
же, что и для преды:дущеrо случая. Этот критерий работает только в
выходных цепочках (OVТPUТ);
. --sport порт [:порт) ()IJIИ -'source--port порт [:щ)ртJ) задает исходный
порт или диапазон исходных портов, ПО которому будет Проll3водиться
отбор пакетов. Эra опция может использоваться только после опций
-р tcp или -р udp. Диапазон портов задается иомером nepBoro 11 ко-
нечноrо портов, разделеннPJX. двоеточием;
. dport порт [:порт] (или destlnation-port порт [:порт]) задает порт
на:ша'lения ИЛИ диапазон портов назначения, ПО которому будет про-
I!3ВОДlIТЬСЯ отбор Лакетов. Эта ОПЦИЯ может использоваться только
носле опциЙ -р !ер иди -р udp. Диапазон портов задается номером
перпоrо и конечноro портов, разделенных двоеточием;
. --рос! порт [.порт] позволяет задать порты, которые будут воспри-
ниматься и как порты источника, и как порты назначения. Исполь-
Зование этоrо критерия возможноroлько после использования -р {ер
ИлИ -р udp и опции -т mulllport;
. -т состояние задает состояние соединения. В качестве состояния
возможно указание большоroколичecrва вариаllТOВ За подробной ин-
формацией обращайтесь к справочной системе. Некоторые варианты
исnолыоваНIIЯ AaнHOro критерия приведены ИliЖе, на практических
примерах;
. --mac-sourc:e MaKaдpec задает МАС-адрес, по которому будет про-
изводиться отбор пакетов, Возможно только после ИСПOJIыоваlШЯ
критерия -т таС.
Рассмотрим теперь npaктические примеры. Выделить пакеты, ПРIIXОдЯШl\е
от узла с МАС-адресом 11:12:13:14:15:16, можио с. помощью правила:
iptables A INPU'l' maC9{)Urce 11,12: 13: 14: 15: 16 j "'....
Потом вы уже сами определите дей-твие после опции j. Если же нам
нужно выделить все пакеты, кроме тех, которые Пl'исылает узел с этим
МАС-адресом, то нужно использовать символ инверсm/ «!".
IPTabIes позволяет указывать иесколько портов (ие больше 15) через
запятую. например:
iptables ..А INP1YТ p ..ер m multiport sport 22,53.80,110 j _._...
Вместо портов истоЧНИка вымажете указать порты назначения, используя
опцию --dpor!.
Если вы хотите одновремеlLИо указать как порты источника, так и порты
назначения, используйте опцию port:
ipt:.ables A INP\JТ -р tcp m пшН ipor!: роП 22.53.80,110
544
D1щщ19. Маршрyrnэациq и межсетеаые экраны
19.6.6. Фильтрация по отдельным пользователям
Если IPCbains умел отфильтровывать только пакеты, исходящие от
определенноrо компьютера, то теперь мы можем выделять пакеты oт
дельных пользователей. для Toro предназначены слеДУЮЩI!е критерии,
КО1'орые MoryT использоваться только для исходящих пакетО8 в цепочке
OUТPUT:
. ..uid-owner UID отбор шкетов по UID пользователя;
. --gid-owner GID отбор по rруппе (GID);
· -pid'owner PID oroop по идентификатору процесса;
. --sid-owner SID oroop по идеитификатору сеанса,
Например, выделить все пакеты, исх:одящие от пользователя с uш 500,
можно так:
iрtаЫеэ A OU1'PU1' т owner uidowner 500
Аналоrично мы можем оrраничивать исходящие пакеты rРУПIIЫ или
процесса:
iрtаыlээ A ОО'1'2и1' т o\'/11er -gid-owner О
iptables -А ои1'РО1' -т o\mer --pid-owner 78
Естественно, мы можем сделать это только ДЛЯ исходящих пакетов, по
СКОЛЬКУ',МI>I'."ltе ЗNIlСМ., к;t1l:0ЙUЮ имеет пользователь друrой системы:
информащlЯ об этом ие передается по протоколу ТСР,
Ig Зu:..зsg
545
rлава 20 НАСТРОЙКА ЯДРА
М ноroОБРА3ИЕ ЯДЕР LINUX
ЗАЧЕМ НАСТРАИВАТЬ ЯДРО?
ДИНАМИЧЕСКИЕ ПАРАМЕТРЫ ЯДРА
ЗАrРУ30ЧНЫЕ ПАРАМЕТРЫ ЯДРА
КОМПИЛЯЦИЯ ЯДРА
LINUX ПОЛНОЕ РУКОВОДСТВО
20.1. Мноrообразие ядер Linux
в Дереnе развития ядер Linux достаточtlо MtlOro nеток. И хО1Я в больumн
стне случаев nридеРЖl(ваются ОфНЦi!альных версий ядер (ветка 2.6.х),
YrIycкaTL из внимания все остальные ни в коем случае не!lЬ3Я.
2.6.х
Это rлавная веТка IIдер Linux на настоящий момеит, которую ПрИИIIТО
считать официальноЙ и которая поддеРЖl(вается самим ЛIIНУСОМ Торваль-
деом. Политцка этой ветки более либеральна по сравнению с полиТIIКой
ветКи 2.4: в flee включаются не только IIСrIравденця ба1'ОВ, 'Ю и TaKlle из
менеНIiЯ, для которых раньше заводили отдельную, экспериментальную,
ветку. Все ядра этой ветки можно наЙти на саЙте WWW. kernel. org.
2.4.х
в свое время ядра 2.4.х БЫЛII ОСНОВНЫМI( они встраl(валисъ во псе
ДlIстрибутивы. Однако им на смену пришли ядра 2.6.х, и о IIдрах клас
Сl(ческой ветки не стоило бы rOBopllTb, если бы не их исключительная
стабильность (по сравиению с ядрами 2.6.х). И Хотя ЩШ не облалают
мноrими ДОСТОИНCТI!ами и качествами 2.6.х, для тех, кому важна стабиль-
ность они еще служат хорошую службу.
Более тоro, даже в некоторые современные дистр"бутивы еще Dстраива
етея эти ядра (например, в Slackware 10.1). На сеrодняшний момент эта
ветка по прежнеlo\У очень активно поддерживается, а руководит данным
процессом Марсело Тосатти, очень молодой проrр!lММИСТ бразильской
компании Coneetiva.
В качестве обновлений выступают исправления обнаруженных ошибок,
ну и периодически новые драйвера.
Так же как и ядра 2.6.х, ядра ветки 2.4.х. можно получить на сайте www.
kernel .org.
547
LINUX: полное руководство
2.6.х.у
Выше было сказано, 'по ядра ветки 2.6.Х Не отличают<:я особой стабиль-
ностью по (-'равнению с теми же 2.4.х. Даже были намерения смеиить схему
именоваlШЯ ноных ядер. Однако этоrо не произошло, просто создали
ДOfIOЩIIIТельную ветку, которая выступает под rpllфоМ «stabIe» (то бишь
стабильная), и которая известна под именем 2.6.х.у.
Ведут встку tаbIе товарищи по нмени Трет Кроа-Хартман н Крис Райт.
В ней появляются только те обновлення, которые непосредственно ка-
саются повышения стабильности ядра и решают конкретные проблемы.
Никакие обновления с HOBblMI' ФУНIЩнональными вОЗМожностями и Т.п.
в ядра ЭТОЙ веткн не ВНОСЯТС!!.
2.6.x-mm
Если в предыдущем разделе мы рассмотрели наиболее стабильную ветку
ядер Linux ПОКОЛенИЯ 2.6, ветку 2.6.х-тm можНо считать наименее ста-
бнльноil. Она включает в себ!! всевозможные патчн ядра. которые были
выпущены.
Данная ветка является скорее экспериментвJlыlil,' нежели имеющей
практическое значение. O'leHЬ MlIoroe к ЛIIНУСУ в ero ветку 2.6.Х по-
падает нменно через фильтр 2.6.xmm. В частности t;е.i\час в этих ядрах
уже нмееп:я поддержка файловой системы Reier4, которая с леrкос-
тъю выиrрывет все тесты по производитеЛЫlOСТ1l, 11 технолоrии FUSE
(hrtp://fuse.sourceforge.nel), реВJIизующеll поддержку файловых CIICTeM в
ПОЛЬЗовательском пространстве.
Ведет ветку Эндрю Мортон, а lIаТ'lИ ветки доступны в двух видах:
. "все в одном» еднный меraflатч;
. "каждый сам по себе» аРХll11 патчей, которые можно применять по
отдельности.
Скачать их можно 110 адресу http://kernel.org/patchtypeslmm.html.
2.6.x-mm-jedi
Ветка 2.6.x-111m-jedi !!вляется, как ЭТО можно понять из названия, ответ-
влением 2.6.х'тm. И 110 сути считается stаЫе-версиеЙ последней. Здесь
собираются самые критичные исправления по различным версиям ядер
2.6.x'ml11.
Доступ к данным пат'ЩМ можно получить по адресу ftp://ftp.c9x.org/pub/
lil1ux.kernel.
548
rпSBS 20. Настройка ЯДра
2.б.хрre и 2.6.x-rc
Ядра ЭТlIХ веток представляют собой предварительные версьи ядер,
которые впослеДСТВIШ должnы стать официальными. При этом принято
с'штать, что ядра pTe являются наиболее «сырыми» и в НИХ MOryт быть
привнесены существенные изменения, а ядра TC уже более-менее
стабильными.
2.6.xtiny
Автор и ведущий данной ветки, Мэтr МэкоJU1, поставил себе задачу ми-
/шмизировать занимаемые ядром дисковое пространство и объем памяти.
Автор утверждает, что еТО ядро может быть запущено даже на машине
с 2 Мб памяти.
Детально ознакомиться с этим направлением и получить само ядро
можно на сше http://selentic.com/tiny.
2.6.x..c
Эта ветка, ведомая Аланом Коксом, прюваиа аккумулировать все ис-
правления и паТ'ш, касающиеся в основном драйверов. Кстати rоворя
именно это ядро ИСПOJIЬЗУется в дистрибутивах Fedora Core.
Проект доступен по адресу http://kernel.orglpatchtypes/ac.html
Прочие
Среди прочих следует таlOl(е отметить:
. 2.6,x"ck в этой ветке аккумутtруются патчи к диспетчерам ввода/
вывода, а также направлеШlые на общее повышение отзывчивости
системы. Адрес: http://ck.kolivas.orglpatchesl2.6.
. 2.6.xKT данная ветка направлена На обеспечение использования
Linux в системах реальноrо времени (мяrкoro и жесткоrо), насколько
это вообще возможно сделать nрименитеЛ1>НО к Linux.
20.2. Зачем настраивать ядро?
в rлаве 7 я уже roворил о том, что I! обязанности ядра ОС Linux входит
не только реализация концепций процессов, виртуальной памяти, фай-
ЛОВОЙ систеМЫ и тому подобных составляющих UNJX, но и орrанизация
взаимодействия с оборудованием компьютера. Это взаимодействие
осуществляют драйверы устройств, которые в современных (выше 2.0)
549
UNUX: полное рУКОВОДСТВО
ядрах Moryт как встраиваться в ядро статически. так и подключаться в
виде модулей.
Хорошо известно, как мноrочисленно И разнообразно оборудоваЮlе "ер-
сональных компьютеров, на которых и работает ОС Linux. Ядро должно
уметь адаптироваться к любой шшаратной среде. Этой цели служат па-
рамстры ядра динамические иди сообщаемые ему при заrpузке и
мсханизм ДlIнаМllческоrо ПОДКJ1JO'lения модулей.
Производители дистрибутивов поставляют ядро в некоторой базовой
конфнryрацин, работающей иа миожестве вариантов оборудования, но
не ОПТИМlIЗнрованной нн под одии из них. Переконфиrурировав ядро
именно под свою аппаратную среду и зада'lII. можно существенно повы-
сить ПРОlIЗводитсдыюсть И увеличить ющежность системы.
В этой rлаве я рассмотрю Трll основных способа настройки ядра:
. модификация динамических параметров ядра через псевдоФайловую
систему Iруос;
. ИСПОЛl>30вание заrpузчика ДЛЯ передачи ядру параметров на этапе
начальной заrрузки;
. пере сборка ядра из исходных кодов.
20.3. Динамические параметры ЯдРа
ФаЙды в каталоrе'/рrос это на самом деле информационные каналы,
реаЛll3ующие интерфеЙс между ядром и пршшадиыми проrраммами.
Они разработаны для повышенltJl rибкости ядра, позволяя системному
администратору корректировать ero поведение «иа дету". без переза-
rрузки. ФаЙловая снстема procfs называется виртуальиой, потому что в
деlkТDительности это карта раБОТ3IOщей системЫ в иерархическом виде,
создаваемая ядром И присоеДl.няемая .. обычной файловой системе. Не-
которые команды (например, ps) I13влекают информацию о состоянии
системы. не прибеrая к системным вызовам. а читая непосредственно
из /proc.
ХОТЯ часть виртуальных файлов содержит текстовые даниые, для их
просмотра 11 измеиения обычныЙ ASCII-реJIактор иеприменим: ведь они
мало Taro что ие существуют физически, так еще и ядро может В любое
время внести в них измеиенWL Читать такие файлы нужно командой са'.
а записывать перенаправдЯЯ вывод команды есЬо. Например, чтобы
увидеть максимальное количество файлов, которые можно открыть в
одном процессе, введите команду
$ cat /prDc/sys/fs/filemax
Большинство параметров ядра, предиазна'lенных для динамической
настройки на работающеЙ снстеме, представлены файлами в каталоrе
550
rлава 20. Настройка RДPa
/proc/sys. Эти файлы доступны для записи суперпользователю. На'
пример, если у вас обычный домашниЙ компьютер, подключенный к Ин'
тернСТ)' по DSL I!ЛИ локалыюй сети, то проиэводительность сетн можно
повысить, ВЫКlIЮЧlIВ некоторые параметры:
# echo "О" > /proc/sys/net/ipv4/tcpsack
# echo "О" > /рrос/sуs/пеt/iрv4/tсрtimеstаmрs
Особый интерес с точки зрения повышения нроизводителыlOСТИ систе.
мы предcrавляет коэффиuиент подкачки. Ilаходяшийся в псевдофайле
/рrос/sуs/vm/swаррiпеss. Этот коэффициент, значение котороro
может быть от О до 100, указывает ядру. как часто следует вытружать
С1.раницы памяти на диск (свопить). Высокий ко"ФФициеflТ подкачки
уместеН в тоМ случае, если вы работаете с нескольк.ими ТРОМОЗДl\Ими при.
ложеЮIЯМll1i переключаетесь между ними нечасто: каждое приложение
будет работать быстрее. ио переключение займет больше времени. ведь
приложение, которое 8Ы оставили без 81шмания на несколько минут,
давно выrружено в своп'раздел. Например. еСЛи вы дизайнер и с утра
до вечера Не вьпюднте IIЗ GIMP, то установите значение коэффициента
равным 100:
# echo "100' > /proc/sys/vm/swappiness
Производительность вашеro основною приложеНIIЯ (GIMP) cтW!eт маси
мальной. Если же вы ILелый день работаете с небольшими проrpаммками,
между которыми часто переключаетесь, то установите КОЭффliциент под'
ка'IIШ ооло 20. Значение но умолчанию равно 70. Возможно, Bat больше
BCcro подойдет именно это значение.
Значения динамических параметров ядра при перезаrрузке не сохра'
няются. Чтобы сделать их постоянными. нужно ВШIсать строки вида
<параметр> = <значение> в файл / etc / sysct 1. соп f, откуда их в ходе
начальной заrpуэки прочитает ут"лита sysctl.
Имя napaMetpa это имя Вllртуальноrо файла относительно каталоrа
/proc/sys, 8 котором СIIМВОЛ слэша заменяется на TO'IKY: vm.swappiness.
Команда sysct 1 a выводит список всех параметров, nocrYnHblX для
изменения.
20.4. ЗаrРУ30чные параметры ядра
Полное описание параметров, которые можно передать ядру в ходе
начальной заrpузки, заНl\Мает достаточно MHom места, поэтому в зтом
параrрафе я рассмотрю только ОСновные 113 НИХ. За более подробным их
описанием вам следует обратиться к докумеиту ВootPrompt'HOWТO ИЛII
к справочной системе (тап bootparam). БольunfНСТВО ЭТllх параметров
551
UNUX: полное рУКОВОДСТВО
предназначено для тoro, чтобы сообщить ядру харакистИlШ устроЙств,
которые оно не может или не дWlЖliО определить само.
Если ядро заrружается средстваЩ\ ВIOS (например, с дискеты), то пере-
дать ему парамстры невозмоЖJЮ; нужно ИС!ЮJlЬ30Ilать какоЙ-либо зarруз-
чик Linux. В rлавс 9 описано примснснис диспетчеров заrрузкн LILO и
GRUB, то есть Вы уже знаете, как указывать lIараметры в комаНдIЮЙ
строкс заrpуз'JИКЗ или в Cj'o конфщураUИОНlIОМ файле. Осталось разо-
браться с тем, какие это MOI)'T бц:r ь парамстры.
Напоминаю, что синтаксис строш цapaMeтptlB следующиЙ:
"".я [ =значениеl) [,значеНИе2...) [имя2 [=значение2.1] [. :;начение2.2..,]]
Значения разделяются запятой без цробелов, а параметры пробелами.
При мер строки параметров:
root=/dev/hdal ether=9,Ox30Q,OxdOOOO,Oxd4000,ethO
20.4.1 . Пара метры корневой фвйловой систамы
. root=ycтpoiiCTDO: указывает устраЙL'ТlЮ, на котором находится корне-
вая файловая система. В К8чecrве уcrроЙcrва допустимо указывать:
/dev/lldaN ... fdev!hddN ДJlI!IDЕ-дисков;
/devfsdaN... fdevfsdeN дJщSСSI-дИСКОВ;
fdevfxdaN ... fdev/xdbN ДJlI! хт --совмеcrимых дисков;
fdevffdN Ф.!IРПnИ-ДИСКОВОД, rдe NO соответствует
дисКу А;, а N = 1 дИску В:
!dev/nfs псевдоустроЙство, указывающее ядру,
что нужно заrружаться по сети;
. со: требует монтировать KopHel!yIO файловую сиcreму в режиме «ТОЛЬ-
КО rтеНlfе». ИспользуетсS{ ПОУМOJI'tJзиию;
. rw: задает монтирование KOpllel!oil: фаЙловоЙ системь, В режиме «чте-
ние/запись),. При ИСПОЛь;ЩЩЩИИ этоrо параметра нельзя запус&ать
nporpaMMbl типа fsck. Перед запуском проrpаммы fsck нужно "ере-
монтировать кориевую фаЙловую систему в режиме со.
20.4.2. Объем памяти
Иноrда нужно указать объе/,lQЗУ, отличныЙ от ТОсО, юлорыЙ имеется
на самом деле. Например; у вас чипсет Intel 810 с интеrрировщшоЙ
видеоплатоЙ. TOrдa вам нужно Уl(3зать объем ОЗУ на 1 Мб меньше (а
!lносда даже на 2 Мб). Это связано с аппаратноЙ особенностью Чltпсе-
Та. Более подробно об этом вы можете узнать на сaltте J(О/dпаНИll Iпtеl
(www.il1te1. сот).
552
rЛ8ВЗ 20. Настройка ядра
Объем установленной памяти МОЖНО указать с помощью параметра
тет:
:nеП\::: <ЧИСЛО>
Чнсло оnpeделяет объем nа(Яти, установлешiOЙ IJ компьютере, например,
mст=16384К или mет=16М.
20.4.3. Управление RAMDISK
ПРIi создании заrрузочных дискет для ОС Linux необходимо, чтобы на
эти дискеты было помещено нужное nporpaMMHoe обеспечение и чтобы
для этоrо nporpaMMHoro обеспечения хватило места. Обычно посту-
пают следующим образом: создают сжатый архив Bcero необходимоrо
nporpaMblIiOro обеспече'fIIЯ 11 !юмещают ero на эаrpузочный диск. При
заrpузке системы в памяти создается виртуальный диск, на который это
npolpaMMHoe обеспечение распаковывается и записывается. ЭТот вирту-
альный диск называется RАМ-диском.
Ядро не может быть включено в сжатый образ фаЙловой сиc-rемы RЛМ-
диска, так как оно должно быть записано начиная с нулевоro сектора,
чтобы BIOS моrло заrру.зить заrрузочный сектор и ядро моrло продол-
жить заrрузку.
Если вь! используете несжатый образ RAМ-диска, то мро может быть
частью образа файловой системы. Такая дискета может быть заrружена
с помощью L1LO.
в том случ:".., если "ь! ДJ!Я заrрузки используете ДВе ДИСRСТЫ (первая
содержит ядро boot, на второй находится обра файловой сиc-rемы
rool), образ файловой системы должен начинаться с нулевоro сектора
(смещение О).
Оtlисываемые далее параметры задают реЖl1МЫ работы с RАМ-диском.
. loadramdiskN: указывает, использовать RAМ-диск (N=l)!!Ли нет
(NO). Значение по умолчанию равно О.
. promptJamdiskN: сообщает ядру, нужно ли запрашивать дискету,
которая содержит образ файловой системы (N = 1). Значение по умол-
чанию равно 1 (запрatПИвать).
. ramdiskstart= <смещение> : разрещает мру находиться fШ лискете
вместе со сжатым образом RAМ-диска 11 указЫRает номер блока, с
котороro начинается RAМ-лиск.
. ramdisksize=N: указьmает маКСИМальный размер (в Кб) RAМ-диска.
Начиная с версии мра 1.3,48, память под RИРТУальный диск выделя-
ется динамически. Значение 110 умолчанию равно 4096 (4 Мб).
. noinitrd: заrружаться без использования initrd (см. п. 9.1.1.1).
553
UNUX: полное руководство
20.4.4. Управление планировщиком ввода/вывода
Каждой nporpaMMe, работающей под Linux, l'pe!>UI от времени иеобходим
доступ к диску. Ядро Linux решает, Koraa именно nporpaMMa получит
этот доступ. Часть ядра, отвечающая за плаНИРОВание ввода/вывода, Ha
зывается nлаЮIРОВЩИКОМ вводa/!lЬtвода. Параметр i!levator предназначен
для указания планировщику мroритма работы. Существует четыре раз-
личных алrоритма работы планировщика:
. Режим по умолчанию (поор) для HaCТOJlbHoro компьютера 011 не
подходит, и мы ero даже раССМtlтривать ие будем.
. Упреждающее nланиронаllие (A/!ticipa/ory ScJled/.lling) при чтении
проrраммой даllНЫХ с диска sщро пытается предуraдатъ, какие даllные
проrрамма будет читать при следующей операl\ИИ ЧТ6ШIЯ. Если ядро
правильно уrадало «мысли» проrpаммы, зтcrr алroритм IIОЗJ;юляет
существеНIIО понысить ПРОИ1I0дителыюсть системы. Кроме Всеro
прочеrо, эффективность 3ТОf()aJJТОрИТl.lа сильно зависllТ и от лоrики
проrpаммы.
elevator'=as
. «Спранеминзя» очередь (Coтplete Fairness Queuing) ранные права
мя всех nporpaMM. Ядро равцомерно планирует операции ввода/вы-
вода мя каждой проrpаммы, здесь нет каких-либо проrpамм, которые
MOryт МОНОПОЛlIзировать доступ к диску. Если несколько проrpамм
одновременио запросят доступ к диску, все протраммы получат ответ,
Данный метод в некоторых случаях позволяет повысить производи-
Тельность системы, а в дрyrиx, наоборот, снижает общую производи-
тельность ВСе зависит от набора задач, решаемых на конкретной
системе.
elevatorcfq
. Dеаdliпе-l1лаlIирование или планирование крайних сроков (Deadliпe
Qucиillg) все приложения,заnросившие доступ к диску, ",анятся
в очередь. Из очередИ извлекается одна проrpамма, которая И IЮЛУ-
чает практически МОIIОПОЛЬНЫЙ досту" К диску. Пока эта проrрамма
работают, нсе остальные ожидают В очереди. По истечеиии опреле-
ленноro времеии планировщик переволит эту nporpaMMY в состояиие
ожилания и l1ереКJlЮ'Шет<:я на ДРУI.УЮ проrрамму следующую в
очереди. Теперь вторая I1porpaMMa получаеrДОМИffilРУЮЩИЙ доступ
к диску. Потом треrья, четвертая И т.д. Этcrr метод хорощ МВ сервера
баз данных, но lIе МЯ рабочей СТЗ}lЦИИ.
e.l evat or:::deadl ire
У каждоrо алrоритма есть свон пренмущества и недостатки, Но только
дна из иих подходят мя настольноrо компьютера (рабочей станщш)
второй и третий. В Инrернете ВЫ можете найти данные о том, что для
насrольноrо КОlПьютера более подходит нто рой алroритм.
554
rлаеа 20. Настройr:а ядра
Для выбора нужноro режима перезаl'рузите компьютер и при заrрузке
ядра Linux передайте ему параметр elevator с одним 113 перечисленных
ВЬпltе значений.
20.4.5. Дрyrие параметры ядра
. debug: сообщения ядра (важные и не очень) передаются через
функцию printkO, Если сообщение очень важно, то ero копия будет
передана на консоль, а также функции klogdO ДЛЯ ero реrистраЦИ\I
на жеСТJ(ОМ диске. Сообщения передаются на консоль, потому что
иноrда невозможно З3Пр<)Токолировать сообщение lIа жестком Диске
(например, отказ caMOro диска), Предел Toro, что будет отображать
ся на консоли, задается перемеНIIОЙ consoleJoglevel, По умолчанию
на консоли отображается все, что выше уровня DEBUG (7), Список
УрО8ней мОжно найти В файле kernel,h,
. iпitо;/путь: по умолчанию ядро пытается запустцть HeMOHi1Iit, которыЙ
продолжит заrрузку соrласно стартовым сценариям, Если проrрамма
init повреждена. то для авариЙно-восстановительных работ вы можете
запустить вместо Нее /tомандllЫЙ интерпретатор (inito;/bin/sh), в ко-
тором и будете ремонтировать систему.
. nlrhlt: процессоры 386 (и выше) имеют инструкцию hlt, КОТорая
лереводlIТ процессор в режим пониженноro потреблеиия энерrии,
rlIe он ожидает прерывания от устройства, Параметр no-hlt отклю-
чает ИСПОЛЬ3(Jвание цнструкции hlt, Существование этоrо параметра
обусловлено тем, '11'0 некоторые чипы 486ОХlOО имеют проблемы с
этой инструкцией. Кроме TOro, параметр по-Ы! позволяет использо-
вать Liпuх на бракованных процессорах,
. по387: отключает использованне математическоrо conpoLleccopa.
. no-scroll: ОТКЛЮ'lает функцию прокрутки экрана 80 время заrрузки.
. rеЬооt<режим>: параметр, задающий режим nерезаrpузки, Воз
МОЖНЫе значения: cold и warnl, то есть «холодная» иJIU «fорячая»
перезаrрузка, ПоддеРЖlffiается ядрами версии 2.0 н выше,
. siDgle: заrpужает систему 11 одноnользоваreльском режиме напри
мер, ДЛЯ ремонта.
20.5. КОМПИЛЯЦИЯ ядра
20.5.1. Зачем 06ноапять tДpo?
Linux развивается быстрее любой друrоЙ оnераШlOliНОЙ системы, Pe
ryлярно появляются новые версии ядра, реализуюшие новые функции.
Например, едва успел выйти дистрибутив Fedora Core 4 на ядре 2,6,11, а
555
LINUX: полное руководство
на www. kerne1 ;org' уже лежит crабильная версия 2.6.12.2. Еще чаще
появляются драЙверы к НОВЫМ уcrроЙствам и :lаnлатки с исправлением
обнаруженных ошибок (например, прорех в системе :lащиты).
Допустим, новое ядро целиком еще MOIt'JiO установить И:l бинариоrо RPM.
пакета (см. п.7.4.2). Но для ПОДlUlюqеfll1Я новото дрilЙвера недостаточно
просто скопировать ero 11 квталоr ядра: нужно интеrpировать ero код в
структуры даНJlЫХ и таблицы 1IДpa, для чето ядро придется строить за-
ново из исходноrо кода. Исходные коды тем более необходимы для при'
ltладыllнияя :lвплатки (см. п. 7.4.3).
Пакет исходных. текстов ядра может быть ВКЛЮЧеН в ваш дистрибу-
тив. Если это не так, скачаЙТе apXlIВ с ftp: i (ftp. kernel. org(p'.lbI
linux/kernel (е)'о размер 3Q.4Q 1\<1б в :lависимоcm .от версии) и распа-
куйте ето в тот катадот, в KOWpOM будете IIРОИЗВОДlIТЬ сборку (обычно
/usr I src/ liпuх<версия».
20.5.2. Конфиryрирование ядра
Котда вы строите из исходников ПРИlUlалную llротрамму, первым шаrом
сборки обычно бывает выполнение сценария configure. Ядро wже нужно
конфиryрировать. Ето настройки нахОДЯТСЯ в тeKC"I'OnOM файле. config
11 каталоrе исходных кодов. Этот файл можно peдaKТllpoBaTЬ вручную, но
это крайне неудобно, поэтому предусмотрены диалоrовые конфиrypаторы
(п.7.2.З, рис. 7.2).
Если вы работаете в среде GNOМE, ВЬШОЛlIIlТе команду make gconfig,
и вы увидите Дllалоroвое окно, 11 котором можно lIыбрать нужные фуикции
и драйверы у'Тройств (У) и отключить иенужные (N), а также указать,
как следует включать в ядро выбранные устройства: статически или в
виде модулей (М).
Осталось переЧИСЩI1Ъ модули, дщ:тупные ДЛЯ конфиrypироввния, Н дать
рекомендации по их включеиию 11 отключению. Я расскажу об этом на
примере современиоro ядра 2.6. О настройке ядра версии 2.4 рассказано
в третьем I13дании моей КШIЛl «СаМОУ'lIIтель Linux», lIышедшем в 2004 r.
11 I13дательстnе «Наука 11 Техиика», а если вы все еще ИСПОЛЬ:lуете ядро
версии 2.2, то lIaM нужно первое издание этой книти.
20.5.2.1. Code maturity 'еуе' options
Этот раздел Позволяет IIКЛЮЧИТЬ 11 ядро экспериментальные модули, на-
ходящиес>! еще 11 стаднн разработки 11 предназначенные не для широкой
публики, а дЛЯ тестеров.
556
rпaBa 20. Настройка ядра
20.5.2.2. General setup
Sиpport (о, paging о( aпoпyтoиs тeтory
r рошо звучит, не так ли? Я сначала даже не понял, что зто. Оказывается,
зто просто 110ддержка свопа свопустройств и своп'файлов. Настоя
тельно рекомендуется не отключать эту опцию сколько бы ни было
оперативной памяти, а своп все равно приroдится.
Systeт V 'РС
Поддержка средств межпроцессноro взаимодеЙСl'ВIi>1 (/nterPracess Cи
ттипicatioп) System У: очередей сообщений, сем,афоров, разделяемой
ШlМ>lТИИ т.Д. Orключать не нужно, иначе процессы не CMOryT «общаться»
дру]' С npyrOM.
BSD Process Accoипtiпg
Y'leT процессов. С поюшью снеl1иальноrо системноrо вызова пользо
вательская nporpaMMa может нопросить ядро записать в специальный
файл систеыную информацию: премя создания процесса, идентнфикатор
владельца, командную строку, ИСl10льзопание ресурсоп, например, памЯПf
и терминалов и Т.Д. Чтобы псе работало как нужно. не отключайте эту
ОJlЦИЮ.
Sysctl sиpport
Включает поддержку проrpаМldЫ Sysctl, ПОЗВОДЯЮЩей IIзменlIТЬ l1apaMe
тры ядра 6e:J l1ерекоыпилироваНIIЯ по премя заrРУЗКII. Поддержкз Sysctl
упеличивает размер ядра на 8Кб. Если ядро, которое пы КОМПИJщруете,
не предназначено для дисков заrРУЗКII/восстановлеНИR, включите эту
опUlrю.
Kerпellog bиffer s111e
Задает размер буфера протокола ядра в заВIIСIIМОСТИ от зна'lения, YKa
заllноrо в проrрзмме конфиryрироваНИR ЯДр3:
. 17 128 Кб (по умолчанию)
. 16 64 Кб
. 15 32 Кб (рекомендуется ддя SMP)
. 14 16 Кб
. 138Кб
. 12 4 Кб.
557
UNUX: полное руководство
Kerпe/.coпfig вирроп
Поддержка файлов. соп f ig, содержащих конфиrypацию ядра.
20.5.2.3. Loadable module зирроп
Если вы планируете использовать зarpужаемые модули, включите Все
функшш. Можно создать компактную версию ядра, которая вообще не
использует модули, при этом поддержка всех необходимых устройств бу
дет ВlUlючена непосредственно в ядро. В этом случае можно отключить
все функции в этоМ разделе.
ЕпаЫе /oadabIe modиle support
Включить поддержку заrружаемbIX модулеЙ. Рекомендуется не отключать
эту опцию, если вы собираете обычное ядро для настою,ной системы или
сервера, Если же вы собираете компактное ядрс>, можно эту опцию BЫ
ключить, а все необходимые модули включпть В состав <{ара.
Modu/e uпloadiпg
Разрешить удаление модулей из II.IIра. Если эта опция выключена, вы не
сможете удалить модуль нз ядра после Toro, как он был заrружен.
Forced morlule uпloadiпg
Принудительное удаление. Модуль будет удален из ядра, даже если ка-
кой-то процесс ero использует. Такое удаленпе может быть опасным
ведь в результате удаленпя модуля УСТроЙС1'ва, которое в данный момент
используется процессом, очеиь велика вероятность потери данных, по-
этому лучше эту опцию не включать. Наоборот, Koraa вы занимаетесь
проrpаммированием модулей, то есть созданием своих модулей, эта оп-
ция очень полезна, поскольку nOMoraeT сразу же ВЫI-рузить некорректно
работающий модуль.
Modиle vеrs/рлiпg sиpport
Экспериментальная поддержка версий модулей. Включение данной опции
позволяет использовать модули, откомпилировавные для друrой версии
ядра. Нет никакой raравтии, что модуль, откомпилпрованный под друrую
версию ядра, будет работать стабильно с вашей версиеЙ, поэтому лучше
Rыключите эту ОПЦИЮ.
558
rлцва 20. Нцстройка ядра
Aиtomatic kerпet modиte toading
Обычно некоторые части ядра выполнены I! виде модулей ядра. Korдa
ядру нужен тот ИЛJI иной модуль, перед использоваНИеМ модуля оно
должно заrрузить ero (команда insmod). Если данная опция включена,
ядро сможет автоматически заrpужать неоБХОДШfые модули. Поэтому
рекомендуется включить эту опцию.
20.5.2.4. Processor type and features
Здесь можно указать тип процессора и ero функции, например, под
держка паМЯТJI более 1 rб, MTRR, эмулироnание математическоro co
процессора.
Sиbarchitectиre (уре
Тип архитектуры процессора;
. PCcompatible РСсовмеL"rимый процессор, 1'0 есть процессор, ис
пользующий систему команл х86;
. Voyager (NCR) SМР'архитекryра. разработанная компанией NCP
Corp;
. NUMAQ позволяет запускать Linux на архитектуре NUMA (ШМ/
Sequent);
. 50I 320/540 rpафичеСfше станции SO!.
Processor family
Эта функция используется для оптимизации работы процессора. Очень
важно правильно указать пш процессора: после Toro, как я это сделал,
"РШlзводительность системы повысилась пр/!мерно n полтора раза, что
стало замеТIЮ при заrрузке системы. Если вы укажете тип процессора,
например 486, 586, Pentium. PPro, ядро не обязательно будет запускаться
на более ранней архитектуре. Так. есл/! вы укажете Pentium, ядро будет
работать на РРro (хотя и медленнее). но нет никакой rарантии, что оно
запустится на 486. В табл. 20.1 приведены типы процессоров, которые
рекомендуются для получения наиболыней 'Iроизводитет,ности.
Типы процессоров
Табли-ца 20, 1
тип "роцес:соры
385 nроцессоры nрОМ38QДст'Ва AMD/Cyrix(lnlel ЗВВОХ/DXL/SL/SLС/SХ,
Cyr1x 48БОLС/DLС2, UMC 4a6SXS
4Зб/Сх486 AMDjCyriX/lntel/19M 0)(4, 486DX/DX2jSL/SXlSX2 AMD/Cyri:< S8Б
NexGen N.х58б. UMC U5D ИЛИ U5S
S86/К5/5J<86/б><!I6/6х86МХ Обычные (самые nвреЫ6) f1рсщеССQР Pentium. АМО К5,
Не ИСПОnЬЭУIOТСЯ VlНС1'рУI(ЦИИ RDTSC (Rезd rime Stamp Coun1er)
Penltum..ctassic Классические процессоры Pentium без поддержки ммх.
Исnoльзvютс.я ИНCТJ2'fkЦИИ RD"ТSC
559
LINUX: полное руководство
ПродолжеН/lfе табл. 20, 1
Тип "роцесс;оры
!>entium.MMX npaцettopbl Pent1um с ПОДДержкой ммх
Pen1ilJm Pro ПроцессорЫ PentJum Pro/Celoron/Penlium 11
Pentium 1I/Celeron Проuессоры Penliumll и Celeran (twpCиst, kOfOpaA tlblnв. До
(pr'eCoopennjne) Coopermine)
'f-'entlurn т/I:':;;lеroл nроцессоры Репlrum IlIIoi Celeron (Coopermine)
(Coope(m,invl:
',,"",,; ,""
Pentlum М МоБI.tIlЬН ееl)CМЯ npoulJccopa Penlium с ПQf!иженным
энврrопотрвблеЖilвм ДIlA ноутбуков
,...-еntlЦm <> ;..;eleron
(Р4 baSed} I Pentium 4 М I nроцессор PentJum 4. SkЛJOЧая Е!ерсиlO Pef1tium 4 М
..,'"
КВ/Кб IIJK() Ш Процессоры AMD КВ, K611, KfHl1
Atl11on/Duron/K1 ПроцессOj)Ы АМР Athlon/Duroll
i uрtl'JorОn/АtПlOnt)ч/ 64--РВЭРЯДНЫQ процессоры ф"РМЫ дмо
Еlаl1/Сrцое ПроцеСCQРbl BanjCrus.a8
WlnCt'ipC6 Процессо-ры Vv'inChip с6
'МпСЫр 2дlWiпсhip.Э про.цессClРЫ WinСtф 2A,tWinсtl'Р.З
Cyrrx т/сз процессоры IBM CynJ; Ш/СЗ
в моем случае ядро было ОППlМизирооано под 586/К5, После Toro, как я
установил Аthlоn/Durоп!К7, ипик заработала быстрее (ДЛЯ спрааки: тоща
у меня бьUl AMD Duron 1.6 [[ц), Выбирайте именно ваш процессор
ваш классичеСЮIЙ Pentium не заработает быстрее И у неro не ПОЯВИТСЯ
поддержки ММХ, если вы выберете.рl)tium ММХ. Если вы попытаетесь
таким образом нвеС'I'И систему в заб:1ужденис, uиа вuuбше может зшис'
нуть, поскольку будет пытаться использовать ММХ-ИНСТРУКЦШI, которые
lIе ПOjщерживаются процессором.
Generic хВ6 sиpport
Базовая поддержка команд х86,
НРЕТ Т/те, Sиpport
НРЕТ это следующее поколение таймеров, прищедшее на смену
классическому таймеру 8254. Просто включите эту опuию. Даже если
ваша BIOS не ПОддерживает НРЕТ, будет активltЗирована поддержка
классичеСКОl'О таймера 8254.
Syтmetric mи/t/-process/ng sиpport
Скорее Bcero, у вас установлен один процессор, Тоrда эту опцию вам
нужно отключить зачем tIключать лищний код в ядро? Если же вы
счастливый обладатель мультипроцессорной мащины, включите данную
560
rла.еа20. Настройка ядра
опцию. При включении SMP укaжm;е. правильный тип процессора. Вы
должны указать хот" Qbl 586. Ядро не запусТIIТСЯ, если у вас выбрщ ТИП
процессора 486, Также ядро не будет работать, еСJШ ваш комш,ютеросна'
lIIеl{ процессором Pentium, а вы устаНОJцiДИ тнп процсссора .PPro. Если
у вас мульrnпроцессорная машина, вы должны также включить ОПЩiЮ
Enhanced Real Тiтe Clock Supporl. ОПЦИЯ Advanced Power Managamcnt
у вас будет отключена при использовании SMP.
PreemptibIe kemel
Даtl»ую опцию следует включить. если вам нужно ядро для RealTime.
системы,
Loca/ APIC эирроп for иniprocessors
ПоддеРЖl\а B»YTpetlHCro контроллера прерывннйй nроцессора (Adval1ced
Prograттaыe [lIterпlpt COl1tro//er). Если у вас однопроцессорная система
с IIроцессором, оснащенным APIC, включите эту опцию. Если ваш про'
цессор не поддерживает APIC, включе»ие данной опции существеюю
снизит производительность системы.
у вас мноrопроцессорная система? Тоща APIC будет использоваться по
умолчанию вне зависимоCl'И от значения ЭТОI! оиц"".
Mach{ne Check ExceptJon
Позволяет процессору сообщать ядру о ВНytpенних проблемах, напри'
мер, о сбое.
Toshlba, DELL /aptop эирроп
Поддержка ноутбуков фир.. Toshiba и DELL.
jdevjcpи/microcode
Включив эту опцию, oы сможете обновлять микрокод проиессоров
Р Pro/ Р II/ Р 111/ Р4/ ХеОП с помощью устройства /dev/cpu. Для рабо'
ты этой опциu нужно включuть фаltловую.систему /dev в разделе Flle
systems. Информацию о МИКРОl\оде Bы можете получить по адресу:
http://www.urbanmyth.org/microcode. Если вы ОТКОМIIИЛИРОВали
эту опцию как модуль, для ето заrpУЗКII нужно прописать в ваше.. файле
/etc/modprobe.conf строку:
alias c!larmajorlO184 microcode
561
LINUX: ПОПНОО PYOBOДCTBO
/dev/cpи/'/тsr
Поддержка реrиcrpов MSR. Может понадоБИТi>ся в некоторых случаях
для SМРсистем. Вы можете ее со СПОI<ОЙНОЙ СОllестью IjЫIUIЮЧИТЬ иди
хотя бы ОТКОМПllJlИровать I<al' модуль.
/dev/cpи/'/cpиid
Поддержка ИНфОРМации о процессоре. РеJ<омендуется включить эту оп
цию. 3аrляните в файл /dev/cpu/O/cpuid IIbl узнаете МIloro HHTepecHoro
о своем первом (О) процессоре.
High Meтory Sиppoп
Подлержка памяти более lf6.
Math eтиtatfoп
ВКЛЮЧlIте эry опцию, если 8Ы IiСПOilbзуете один из следующих npoцecco
ров: 386SXlDXlSUSLC без 80387, 48БSL/SXlSХ2.
MТRR
В семействе процессоров Intel Рб (pentium Pro, Pentium ПII выше) IIСПОЛЬ
зуются специальные реrистры Memory Туре Range Registers (MТRR).
Они задействуются для управления доступом nроцессора к различным
диапазонам памяти. Включение этой опции может существенно повысИ1Ъ
производительность системы, особенно еся!! вы !!спользуете lIидеокарry
РСl IIЛII AGP. Данную возможность поддерживают "роцессоры 11 посто
ронних производителей: Cyrix бх86, 6х86МХ, МII, AМD K62 (stepping 8
и выше), K63, Centaur С6. Некоторые BIOS устанавливают MTRR для
первоrо процессара, по отключают ДЛЯ BTOpOro. АI<ТИllизация данной
опции решает также и эту проблему. Если вы не уверены, поддерживает
ли ваш процессор MTRR, все равно включите эту опцию. Поддержка
MTRR увеличит объем ядра всето лишь на 3Кб.
20.5.2.5. Power Management Options
В зтом разделе ВЫ найдете 8СС опции, касающиеся управлеllИЯ nитани'
ем. В принципе, с опциями Power Management разобраться несложно \\
самому, В крайнем случае можно все оставить по умолчанию опци\\
вполне приемлемы. Но есть ОДllа очень интересная экспериментальная (!)
ОПЦИЯ Software Suspend. Если она включена, вы Можете приостановить
машину, а при следующей заrрузке сразу же посстановить систему до TOro
состояния, в КОТОрОМ она находилась до приостановки. Работает ЭТО так:
562
rлзsа 20, Настройка ядра
вы вводите команду swsusp или shutdown -z <время>, система заоосыва-
ет образ содержимоrо памяти на своп-раздел (или в СDОП-файл). Затем,
при заrpузке, вы ВВОДlпе параметр ядра rеsumе/dеv/свопраздел,
и система воccrанавливается до исходноro состояния. Если вы не ввели
данный параметр, то будет невозможно задействовать своп-раздел, кото-
рый использовался для приостановки системы (создания образа памяти).
Опция Suspend 10 disk позволяет записывать образ памятИ на диск, а Не
только на своп-раздел.
В этом же разделе можно включить опцию Advanced Power Management.
Если вам нужно отключить функцию АРМ во время зarрузки, введите в
качестве параметра ядра apmoff.
При IIQЗНИКflовении проблем (на старых компьютерах) попробуйте сле-
ilующее:
1. Убедитесь, 'rro раздел подкачки включен, а размер ero достаточен.
2. Передайте ядру инструкцию no-hll.
З. Попробуйте ОТКJJючить поддержку сопроцессора (инструкция
по387) .
4. Передайте ядру инструкцию floppy-nodma.
5. УбеДlrrесь, что процессор не "разоrнан».
6. Установите иовый вентилятор для процессора.
Что же касается АРМ, следует обратить внимание на следующие опции
(таблица 20.2):
OI1UИ АРМ
Таблица 20.2
ОnЦИ. 0""08""
Включает АРМ тю вреМЯ эаrрУзки сисУемы. ЕСJ\И з'Jа onцмя оЬ:lIlОчеНВ.
BIOS "е будет управлять питанием ущройств, 8ХОДМТЬ з .режимы
ЕпаЫе РМ 81 boot ,"тв Stanby и $Und, а Т81О11:8 не буД1 ",Р911$IЮДКТь НИlШJii'lК дейсtвиА 9
ответ на вызовы "рОЦессора CPU (dl.. ЕсЛИ ваш kOMnblOTep зависает
90 время заrри, 6ЫI<Jlючrе тY ОПЦИЮ
Во BpeMs:t, ЦИКJIа "РОсТОА ядра РМр.8ШаеТ 8ызо8ы k АРМ. 8!(JlЮ8НИ9
дaHнoR опции можеТ приеесПt к Э8ВИСаниlO комnьюпtра во время за.
M8ke СРи Idle r-ру3ICИ! ЕСЛ\11(омnыоtер и(;nаfiьэует НООII::(IJ1ЬКО np<Jцоct:оро8 1 3tп ОIЩИЯ
calls Wnen Jdlu иrноJ»1руеlСЯ. 3аметъте, ЧЬ идеТ О ТОМ, сколько процессоров именЩ)
испопЬЗ)l$f компьютер, а не СКОЛЫ;::ОИХ 8 нем YC't6HQМeHO. если у вас
два поц.ессора, а tц,j ..тСПQfiьэует& 10ЛЬКО один И лрm 5МР у Q8C
OТICnючена. данная ОПЦlolЯ иrНОРИРОВЗ1ЬСR не будет!
ИЩ$(JТ "еКСТОsyю КQНСОЛЬ (1'113 rр8.ф'iecqю!} пр ",спQJt:>ЭQваJol.ИИ АРМ,
ЕnаЫе console Некоторые ноyrбуlCИ MOryт использоеать эту ОПЦ"'Ю ДnA 10ro, чтобы ОТ-
bIenking U$irl<J АРМ К11IОЧИTh noIlceeTk)' LСD.ЭХРmiS I "orдa 8.КПltwlз\о!роеlJЧ !Ср$НМТ0ПЬ зкрана
на одной И3 виртуальных консолей UI\U)(,
Если ваш впnэ.рэтный -rайм,,*р сохраИдет Время е формате GMT, SltпЮ'4И.
АТС slores IIme 1" GМТ Т& 3tY оrщ,ИЮ, а пporooн()м случае ОтtVJЮЧите ее. Е'=}tИ опцИj:l 6ыкftю>.;ецз.
сохраняется лotanьное аремя
Обпr;НО прерblВ8.НИА внешнWI: YC-TPOCТ8 эапреЩВloj1;>l ао lIремя ЗЫПОЛJiе.
дJlOW Irrterтupts durlrrg НИА проц&дур АРМ, BIQS H0kOTOPbl)( ноутбов разрешает ПрерыванlofЯ
АРМ BIOS са11з SЖtшнихУСтройств, j.fOпрИмер, IBMThlnkPad. по УМОJtч8ИИ!() даННВА
опция ВЫMlO'4eMa, Если 8Ы не уверены. не WCЛ1Очайте ее
56з
UNUX: полное руководство
20.5.2.6. Bus Options
в этом разделе описываются ОПЦИИ, касающиеся поддержки различных
шин PCl, lSA, МСА. Конфиrуратор ядра 2.4 держал нх в разделе General
Setup, а сейчас ОНИ вынесены в собственный раздел. Отключайте все,
кроме шины РС! Не думаю, что у вас есть 15А или МСЛ-устройства.
Примечание
er
мед шина передачи даwных, разработанная 'ВМ, которая ИCnОЛЬЗ0валась 8
системах PS1/pS2. ОНа давно снята с производства, совреМеННые устройст-еа с
ней не работают.
РС, ассезs тodе
Данная опция определяет режим доступа к РСI-устройствам. ЕCJПI значеЮlе
этой опции равно BIOS, значит, ипих будет использовать BI05 дЛЯ опре-
делеmlЯ РСI-устройств и их конфитура!Urй. Однако на некоторых старых
материнских lUIатах BIOS не может корректно определить конфиryрацию
РСI-устройств. В этом случае нужно 1!Ьi6paть значение Direct, и Unих будет
работать с РСI-устройcrnаминanрямую, без BIOS. Если вь, выберете Апу,
то Linux сначала попытается работать напрямую (так быстрее), а потом,
если напрямую Не получится, уже использовать BIOS.
20.5.2.7. ExecutabIllflleformats
в этом разделе АЫ сможете вКJlЮЧИТЪ ноддержку раЗЛllЧНЫХ форматов
исполняемых файлов. Обычно это .l!.yJIЦЮ, если вы ХОТИТе запускать в
эмуляторах nporpaMMbl лруrих операционных систем, например, ОО5-
ми Wiпdоws-проrраммы.
20.5.2.8. Devlce drivers
в этом разделе находятся опщlИ, касающиеся драйверов УСТрОЙСl'Б. Тут
БЫ можете определить, какие устройства У вас устаиовлены и какие вы
хuтите ИСlIш!ьзuвать в дальнейщем. Пu сравнению с прu!'раммой на-
стройки ядра 2.4 АНlOrие отдельные разделы «переехаЛII» 8 этот раздел,
например, РатаIlеl port support, MTD, РпР SuppBrt и 1'.11.
Memory Techпology Devices (MТD)
в этом подразделе вы можете включить поддержку MTD-УСТрОЙСТ8. Са-
мым ярким примеРОf TaKoro УСТРОЙСТАа может послужить flash-iIIIСК.
564
rnaза20, Настройка ядра
Parallelport sиpport
Поддержка параллельноrо порта.,
РпР sиpport
Поддержка устройств Plug and Play.
S/ock devices
В этом подразделе вы можете наcrроить бдочные устройства, то есть
такие устройства, обмен данными с которыми выполняется поблочно
(передаются целые блоки информзщш), а не посимвольно (за одну опе
раuию ввода/вывода передается один байт). Ярким примером блочных
устройств выступают дисковые накOIШтели дисковод для rnбких дис
ков, жеСТКltе Дltски 11 Т.Л.
Horтa' "орру disk sирport
Поддержка обычноro дисковода для rибкнх дисков. Обычно поддержка
aaHHoro уcrройства требуется, но если вы собцраете ядро для сервера
или ноутбука, то «флоппик» ему не нужен, поэтому можете эту опцию
ВЫКЛЮЧИТЬ.
хт herd dlsk sиpport
Поддержка crapwx жестких дисков, которые устанавливались на компью
теры типа IВМ ХТ. Отключите эту опцию она вам не нужна, модуль
тоже вам не нужен. Даже ес}щ вы rJjeTo и найдете такой диск, вряд ЛИ
вы станете ero подключать к современному компьютеру.
Parallel port 'ОЕ devlce sиpport
Поддержка IDЕустройств, которые подключаются к компьютеру по
параллелы!Ому порту. Очень Часто к ноутбукам подключаются внешние
IDЕустройства. Было время, Korдa ШI[tlЫ USB н!: существовало, тоща был
разработан ИIlтерф!:йс ДЩi подключения IDЕустройств по параллеJ!ЬНОМУ
порту (по последовательному порту обмен информацией занимает MHoro
nрем!:ни).
Coтpaq SМARТ2 sиpport
Поддержка КОНТрОЛЛ!:рОВ SМART2 фирмы Compaq. Вряд JШ ЭТОТ пара
метр вам понадобится.
565
UNUX: полное руководство
Compaq Smart А1тву 5XJO( зирроп
То же самое, что и предыдущая опция, но здесь включается поддержка
КOIrrроллеров 5ххх.
Му/ех йАС960/йАС1100 РС/ RA/D Coпtro//er sиpport
Поддержка RAID-контроллера фирмы Mylex.
М/еro Meтory ММ5415 Battery Baeked RAM sиpport
(EXPER/MENTAL)
Поддержка спещtальных карт памяти. Честно rоворя, я эти карты и в
rлаза не видел, и В руках не держал. ЕСЛIi кому-то интересна информация
о них, посеТltТе саflТ: http://www.umem.comJ.
Loopback devlce зирроп
Вот эту опцию я отключать не советую мноrие задачи требуют на-
личия устройства обратной петли. Поэтому, если хотите сделать идро
компактнее, включите эту опцню хотя бы в виде модуля. Модуль будет
называться [оор.
Network bIoek devlce зирроп
Поддержка сетевых блочных устройств. Просто включите эту опцию в
виде модуля. Модуль называется пЩI.
RAM disk sиpport
Это очень полезная опция, позволяющая часть информации, находящейся
на жестком диске, перенеСПI !! операТИВflУЮ память ДЛЯ ускорения до-
ступа к НеЙ. Особенно данная ОПЩLIi полезна при создании заrpузочных
ДИСКО!!, которые используются для восстановления системы. Если вы
включите эту опцию.в виде модуля, он будет назы!!аться rd.
lпitia/ RAM disk (initrd) зирроп
Инициализирующий RAМ-диск ЭТО RAМ-диск, который заrруж:ается
заrрузчиком системы (LILO, GRUB, loadlin) и монтируется как корневая
файловая снстема перед нормальной заrрузкой. Он используется для
за"рузки модулеЙ перед монтир()ваннем нормальной корневой системы.
Включите эту ошnоо. Если же вы создаете заrрузочный диск, то ее ОТ-
КЛЮ'lенне недопустнмо !!ообще!
566
rлава 20. Настройка ядра
Sиpport (о, Large Block Devices
Поддержка больших блочных устроЙств с размером более 2Тб. От-
ключайте эту опцию жестких дисков на 2Тб в ближаЙшее время в
продаже Не предвидится.
ATA/ATAPIIМFМ/RLL вирроп
в этом подразделе вы можете включить/выключить поддержку АТА-
устройств. Тут уж смотрите сами, какие устроЙства у вас есть и какие вы
flЛаиируете использовать. Ненужные следует сразу ОТКЛЮЧаТЬ нечеrо
память забивать. Что нужно? Обыкновенный привод CD-ROM есть у
всех. Даже если у вас в данный момент ero нет, вы рано ИЛИ поздно ero
подключите к своему компьютеру. Не будете же вы из-за зтоrо перском-
пилировать ядро? Поэтому опция Include IDE/ATAPI CDROM oupport
(BLKDEV IDECD) относится к катеrории нужных. А вот поддержка
Silicon Image сЫрое! соцерюенно не нужна, хоть и встроена в ядро по
умолчанию. Поддержку всех АТА-устрой,в следует отключить, если у вас
сервер и все устройства SCSI (только не заБУДЬТе SCSI включить!)
SCSldevlcesиpport
Поддержка SСSТ.устройств. Все комментарии аналоrичны предыдущему
пункту все ненужное отключаем, остаllЛяем самое необходимое. Вот
почему мне нравится Linux можно явно указать, что мне нужно, а
что нет. Ни в одноЙ Windows такое сделать нельзя. Можно, конечно,
удалить всю базу с драйверами, но Я же скаЗaJI «ЯВНО».
Old CDROM drivers (пot SCSI, not /ОЕ)
В этом разделе вЫ можете ВКЛЮЧИТЬ поддержку старых (п Бы сказал,
дрсвних) пр,шодов CD-ROM. но, скорее всею, ЭТО вам не нужно, поэтому
смело отключайте целый подраздел сэкономим место на диске.
Mи/t/-devlce вирроп (RA/D aпd LVM}
Поддержка RATD-массИDОВ и LVM-ТOMOB (LQgical Volllтe Maпager). Если
планируете использовать RAID, включите некоторые опции этоrо раз-
дела. Вы можете Уl(азать, I(акие уровни RAID вам нужны, а какие нет.
/ЕЕЕ 1394 (FireWire} вирроп
Поддержка последовательной высокоскоростной пшны ТЕЕЕ 1394. Если У
вас есть ТЕЕЕ-адатер, включите эту ОПЦИЮ. Внимание: поддержка IEEE
экспериментальна (для ядра 2.6)!
567
LINUX: полное p'I"0eoAcrno
QoS andjor fiI/! qиeиeing
В этом подразделе МОJIOlО включить поддержку QoS (Quality of Service).
IrDA (infrared) sиpport
Поддержка lrDАустройств,
Blиetootlr sиpport
Поддержка ВJuetooth. Обычно требует включения на СО8ременных 110.
утбуках.
ISDNsиbsystem
Поддержка технолOl'ИИ ISDN(Integraied Services Digita! Networks, 80
Франции RNIS). ТеХНОilоrЩI ISDN постепенно уходит 11 прошлое
8место нее используется ADSL. Если у вас есть возможность перейти на
ADSL, сделайте это.
Te/ephoпy Sиpport
Если у вас есть спеЦ1\альная "арта, позволяющая подключить обыкно'
венный телефон для использования rолосоIlых IPпри:ложений, включите
иоддержку телефонии, Вам не нужflо включать поддержку телефонии
ддя использования обычнOl'О модема.
lnpиt device зирроп
Поддержка различных устройств ввода ..:..... ДЖОЙСТИJroв, мышей, сенсорных
панелей, клавиатур.
Character devices
Поддержка символьнbIX устройств, наПрJlмер, стримеров.
Mиltiтedla dellJces
Поддержка TV и радиотюнеров,
Oraphicssиpport
Поддержка rрафичеСКlIХ адаптеров. Выберите только те драйверы,
которые неоБХОДllМЫ для поддержки ваших видеокарт, а остальиые от.
ключите.
568
rла"" 20. Настройка одра
'SOипd
Поддержка систем ALSA (Advanced [jnux Sound Architecture) и OSS
(Open Sound System). Тут же драйверы звуковых плат.
иss sиpport
Поддержка USB.
NetworkJпg sиpport
Это довольно большой подраздел раздела Device Drivers, в котором мож'
но включить поддержку ЮЦ( самой сети, так 11 crrдельных ее компонентов.
ПоддеРЖI<а сети нужна обязательно, даже если у Вас нет сетевой маты
ИЮ! дрyrиx сетевых устройств. Функции печаТII, а также rраФическая под'
С\II;тема Х Window требуют поддержки сети, а это значит, что, если сеть
у вас отключена, вы не сможете НII документ распечатать, Ни работать в
r-рафическом интерфейсе.
Cereoыx опцнй довольно МНОТО, поэтому для их установки воспользуемся
таблицей 20.3.
Опини сети
Таблица 20.3
011...... Н.........еttИe
Netfink device 0n'lulaUon Опця olSрв'ftfOй ООВМGGТИМОСnt. Ci:Opo будет УДМена. но. nom oe нyJI:f18.
Unix domain sockets ПОдAEiржка UN!X.cor::eTo8. Нв ОfКnЮЧsAп эту ОПЦИIO
IPM! sQclI:e!s ПОДОt';lржка IРМI.ООl(еЩ8. Об\iI-lО не чужна
PF КЕУ .$ockets 1"ребувfCA ДnA IPsec, ПОЭТОМ nyчLIJе 118 оnC1lючать ев или $trJ'lIQЧИ1ъ 1:1 BW\8
модуля
TCP{IP nG1:WQJi(;lng ПQnдеРЖКt\ TCP/IP Qбя:ютеЛJ>НО дол.на бt.tTh ВQt.lQчеи,-!!!
"0.380""Т адресоваТЬ сразу неСI(ОЛЫСО ";QМПl:>ютероs" Данная ОПЦИЯ ПО-
'Р: mиtticвstlng ЛНEI, ео.ци 8bI Иi::n()IiЬ::'lуете M80NE ЮlидpyrуlO ....arjol()Jpl:Vlb дJlA uJttpQK(J.
вещате.лbl«l "eeдa"' 8.yp.VI.o. м Вl'ЩeаинФормli5.ЦИИ
8ктОЧМТ8. ее",", npeдnonarBeTG испольэоlIOTh двWНi>lЙ компыотер IJ. виде
маршрyrинroра. а заQДНО нужно еМICЧМТЬ и есе ее !(омпонекты, напри-
IP: dvanced fouter мер, IP: роlIOy rootinQ ДQfIOnЬНО и.НТI!!J)ff(:ная фуНIЩИЯ ap\J.lpyrиэarора
8Д8VXCnOS8JI: ее не опишешь, а Пpol1ИТ8lть>оtfеl:t M0:llЦ10 по адресу;
ttp://WМV.compendium.com.ar/policy,routing.lxt
ВкJtюЧЗ'9Т oEJТOмaтM'«ICItYb конфwyp.щщо 1':'мpeCB Се1евых УCТJX»'сtй и
rабпlotцы маршрутизации 80 sремя ззrруз1( ядРВ НВ основан",и ифор...а-
I Р: kemellwвl цим, П&Р8AitННtlй мру 9 KOMaHДН CТptжа.Или ПО nРОТОl(l>JШu воотр И/lИ
autoconflguraUon RARP, ДaHIfy10 OnЦИIO имеет CMblCn sмючв;ть'топы<o на безnискоВЫХ "'ашм
rшx, noct::onbq' на otiычнЫ/С Сиctем8Х Ic:ОНфИ-typ3Ция сеtи 3вдавтСА
8 зsrpузочных сцеЖJрИflХ
1: tunnelling Данная orщи nOk8ДCl6и:тся flaМ, е(:Jlи вы 6УД6'1'В насrpnиnan. Вирту4tJьНУЮ
частную сеть VPN Vlrtual P,ivat'9 Ne(WOfk)
iP: GRE 'tLlI\!'\e1s ovt)r \Р Данная оnциJi ПолеЗна при I'tсnолb:Wванми МаршpYtИТорО8 CISCQ,
дая ее работы необходимо 8kЛЮ'iиТЬ предыдущую опцию
данная ОПЦИR ПОЗ801tет Шlсtрои-ть работу марwрутиэатора 10)1;, чro6ы он
IP: multicast routinQ отпp.as.nяп 'Р-пакеты ПО НесКОЛоlCИМ адресам, Очень полезно дnя: ШИРОj(О-
ВВЩal-М5J аУДИО-Вr.tДООJolнформации по Интернету
569
LINUX: ПОЛН"" рУКОВОДСТВО
Продол)Квнив табл, 20.3
Опция НаэиаЧ8Име
IP: дяр daemQn suppQf1 Поддержка АRР*деМotiа.Можно 81ШlOЧИТЬ на маршрyтt.t3ВТClре/Шnj(Jзе
{EXPERIMENTALI неболЫuО" сети
IP: тср sy"cool<e ВОТ эту опцию я бы вкnи.л И3 соображений безопасности.
support (diabI0d она поможет 311ЩМПfТb1!ltШJY t.ИСТему О{ raj( Н8зынавмых
рЕI!'dеfiШII) SYN.tiUОДН8IiиА, ТDчнее, сообщит вам эдес атакующеrо хоеТ8
'Р- АН tmЩ,fоrmatiОП Поддерж!Ц1 ДН'Пр90браоованИА ДЛ JPSec, Если не уверены в ТОМ,
ЧТО ВЫ делаете, не DтICлючаЙТ9 эту опциюl -
'Р e:SP transformotion f1оддвржк8. ЕSР.преобразоВ8НИR дпя IPSQc. Если t-I8 увврвны в ТОМ,
<;то вы ,амает&. неоТIClI,КN8ЙТ6 эту опцию!
IP; IPComp Поддержка IРСоmр.преобразоввНИR (сжатие АВННЫХ, описано
IMn$fofJ11ation j! f;СЗ17Э, ДЛ 'PSe. Если не )1SQpeHbl k 10.... что аы делаеТе,
не о't'IOIlOчаЙТе эту OnЦИlOt
Вj(J1lОчние данноЙ опции ПОЭ8011Т вам l1(JqтроИTh аирryaльцы'" сеР80р,
Который будет иcn.ОЛh3DЗaТb ресурсы Н&ClCОnЫСИХ $1эических серВеров.
'Р vlnual servsr sup-port попросту rО80ря. .щIш. (JПЦИЯ МЗ80Лlf9Т собрать к.nвcтep. Раньше Дl\1I
(ExPERIMENTAl) создания d1аctврtJ.6ИCn,ОЛI;o30вались nporpaмMыв ПРОДУКТЫ nOCTOpOIi'
101141: раэрабоl'ЧИКОВ, ,йчас ПClAQержm кnaCTepoB ВСl'роена в ЯДРО, Если
МИНТRреСО8еtlиСЬ, пОQlliilТИТQ. с<\йт: http://W\Wt.llnU)(\IjFtualserver,or>;l/
The IPvб protoco1 (EXPE Поддержка ПРОТО1С:.ола 'Pvб. Пока он практически не используется.
RIМЕNТАЦ ПоэТому можно эту оПЦИtCt СМеЛО ОТ!UllOчиr"
OECnetSuppon Данную DПЦИЮ на rцюcrорах БЫElwеrо СССР 8psIД пи O'rO буде1
ВК1Iючатъ, точнее, sрRAЛИ она кому-то понадоБИТСА
802.1d Ethemet Sridgjng EcJ\и Вы 8ключите эту OnWHO. ваш J.:OMnI;o101QP превраП1'ТСR в EthernI,QCf,
КОТОрЫЙ будет соеДИНТЬ различные сerмвнты 8ашей локаnьной С;QП1
Network packet tiltering Поддержка H06Oro поколения бас.тиона Netfitter, приweдwеrо 1018- замен)'
(rep1aces ipC'1ai!1s) IPChainS. Если вы н-астраиваете мв.р-шр';Тиэвтор, 8k111Очите ..-ту ОПЦИю.
Для обыкновенных сиСтем ее нужно выключить
IPsc Iser СQпfiQura1iОП nомер.ка IPSoc.. Если н& уверены, npocto J;llCЛlO'МJе эту опцию
intf:!rfa(;c
Asvnchronous Trarlsfer ПОМ8рка А,ТМ
Mode (АТМ)
ThQ IPX pro1ocoj {lр>(} Помер.жkЭ ПРО10!(оnа IPX (компаниst Nove-ll)
Appl"'talk pratocol Пo,tr,Aeр.:1Цl протоroщ! i(:ОМПИ Apple. Еcnи 8 IЮ;wей сети fЭ'стt> х.ОТА
Sljpport бы ОДИН Macintosh, вмеочите -пу ОПЦию
сст Х.25 Pe.ck$i layer Данные оrtции- нужж> 8КЛ1O"h'tТЬ, TOI1I:>II:O если ваМ зто двйствитеhыш
(EXPEAIMENTALj (Х251. нElобхо.l1ИМО. Если вы не знаете, что они собой ПреДСТавляют, J1У'1шв
ЦРВ Dз-t8 LirJl( Driv$r
(EXPffiIMENТALj (LAP81 ю( не TPorsTbl
ДaHН8SI опция прщащае't ваш )Сомпыотер в марwpyrиэатор rлобат.ной
WAN rQu\er ceТ}ll, Обы<tные Мltpшрyrи-заrоры не требуюr ВkЛения эroД orЩИ""'
В случае в-люче-ния данноЯ опции 8 виде модупя модуль будет
---- .... tta3Ы8ать.апftИJtеr ........,'"';,"'< . ....
Перед 8ключенnем ЭТОЙ onции hacrO-m'МbIiО рекомендую ПрочИТ8n'
Fast switching ДOMeHTelO_ Данай OnЦIo1i1 8ыБИр8QТ CilМый быстрый СRтеиа"
интерфвЙс ДЛЯ передачИ Д8нны)(. Внимание! Эта опция несоеместима
с ОПцией Network p.clutt fUterlng
Forwarding between hlgh Не 8kлюча.ЙТQ эту onцию1
""peвd interface5
570
rлав8. 20. Настройка Адра
20.S.2.9.Filesystems
в разделе Filesystems вы можете включить поддержку следующих фаЙ
ловых систем:
. Second extended fs (ед2), до недавнето времени бывшеЙ основноЙ
файловой системоЙ Linux;
. Ext3 journallil1g filе system журнзлируемой версии ext2, используе-
моЙ мноrnми дистрибутивами в качестве основной файловоЙ систе
мы;
. ReiserFS файловой системы Reiser;
. JFS filll1!ystem фаЙловой системы JFS;
. XFS фаЙЛовой системы XFS:
. Minix FS файловой системы Mil1ix;
. CD-ROМIDVD Filesystems ISO 9660 файловоЙ СlIстемы, использу
емоЙ для записи информаЦIIИ на CDROM.
Что включить, а что выключить? Первые две файловые системы, а также
фаЙловую систему ISO 9660 включите обязательно. Думаю, Не нужно
объяснять, почему. ФаЙЛовую Сllстему Mil1ix можно сразу отключить
оиа давно устарела }' не используется. Файловые системы Reiser. JFS,
XFS относятся к разряду новых, но редко использующихся. В принци
пе, их нужно включить вдрут кто-то принесет винчестер, на котором
разделы будут содержать одну из этих файловых снстеМ? Или просто вы
захотите поэксперимеllтироватъ и отформатировать раздел в одной из
этих систем.
Не забудьте включить средство автоматическоrо монтирования сменных
lIосителей Kemel аutощоuпUr support, oc06eIiHO для рабочей станщш!
А вот поддержка квот (Quota support) ОКажется полеЗIIОЙ, если вы на-
страиваете сервер.
В подразделе DOS/FAT/NT Filesystems вы можете включить поддержку
следующих систем:
. Файловая Сllстема MS ОО8. Включить ее нужно обязательно в
странах бывщеrо СССР дО сих пор встречаются дискеты,записанные
в этоЙ файловой системе.
. VFAT (Windows95): это основная фаЙловая система операциOlШЫХ
систе!>l Windows 95 11 98.
. NТFS файловая систеМа ОС Windows NТ,2O(JO, ХР. Здесь же можно
включить поддержку записи на раздел NТFS, которая по УММчaниIO
отключена.
В разделе Pseudo fllesystems вы можете включить так нащваемые nceB
досистемы файловые системы Iproc Il/dev.
571
UNUX: полное руководство
В разделе Miscellaneous filesystems находятся ОПЦЮ! включения под
держки друrих, редlЩ ИСПОЛh3ум.щ фafmовых систем, например, HPFS
(Нigh Performance File System), которая НСllользуетСlIlIО умолчанию ОС
IВM OS/2.
Включить поддержку фаi!лоащ систем NF5 и 5MB (используется для
монтнропания удаленных Wiпdоws-разделов, читайте «общих диско.в И
папок,,) можно в разделе Network FiJe Systems.
Раздел Nalive Language Support позволяет включить поддержку раз
личных кодировок, в которых мoryТ быть представлены имена файлов.
Например, отключlIВ кодировку cp1251, при просмотре содержиlOro
Wiпdоws-раздела вы увидите иероrлифы вместо русских букв.
20.5.2.10.Keme' hacklng
В этом разделе для вас найдутся две полезные опции, даже ССJШ ВЫ не
занимаетесь разработкой модулей ядра Linux. Опция Prerer smзll over
fast code позволяет сделать ядро более маленьким, но более медленным.
Маленький, но медленный код может приroднться для создания заrpузоч
ной дискеты там важен каждый байт. Вторую опцию Kernel debugging
также можно отключить, если вы создаете системную дискету.
20.5.2. 11.Cryptographlc optlons
Различные ОПIllIll, касающиеся криптоrрафии.
В разделах Library routines и Unorncial 3rd раму kernel аddШоns я не
нащел ДJIЯ себя Шlчеro интересноro.
20.5.З.Сборка ядра
Тенерь. КOI'Да все устройства сконфиrурированы' нужно сохранить файл
конфитурации ядра и перейти неПQсредствеюlO к этапу сборки ядра.
Для сборки пам понадобится проrраммное обеспечение, необходимые
версии которото перечислены в таблице 20.4.
Необходимое nporpsMMHoe обеспечение
Таблица 20.4
nporpBMM.! Ммнммат.ж.
библиотека дonycтим.'It rдe........
.ерсия
Gnu С CQmpiter 2.95.3 hnp://gcc.gnu.o(\1
QniJ Мiike 3.78 np://ftp.gnu.Of9/gnu/makej
bInutiJs 2.12 ftp://fip.kemel.org/pUbjtinuX/devel/blnutilS(
utl1-linux 2.100 ttР://ftp.кеmеl.Оrg/рUЬЛiUХ/UШ:$/щllИпuхl
rt'Iodule.init.tools 0.9.9 http:/(wNw.kеrпеf.оrg/рuЬ/llпuХ/kеmеl/реорlе/п,sry!mОс!1I1е-з/
572
rJ1aвa 20, Настрой<а ядРа
(1родалженне табл. 20.4
П""'Р ам .. а ; Мини.мanьно
AOnycnt.... rA8 utm.
бмбЛИDт-1t8 аерсоса
p!Ocps 20.9 http://procps.sourceforge.n&t/
?fsprogs (.} 1.29 http://e2fsprogs.source1orge.netj
jfSUIi1з I) 1.0.14 ht11>:/""""'-124.1bm.com(j!$/
reiserfsprogs () 2,1.0 http://WWN.nameSY!J.coml
nfsutlt5 1Д5 hltp://n1s.SOI.Irceforge.nвtf
pcmcltJ-СS 3.1.21 http://pcmcia-с;s.soufC1ill'otgе..П&I/
quоtiИООIs 3.09 hllp://sourceforge .net!projects/llnuxquota/
орр 24.0 1tp://fIp.sarnb..o'O/pub/PI>I>/
isdn4)c;-иtИs 3.11""1 http://\WrN.'isdnoUlnux.de/5wPat.html
°tJf01'IlB 0,5.3 http://oprofUe.SOUJ'cerorge.ne(/
(" ДOHoe "porp8MHoe обеспвченив ЗWlИC1II'f ОТ нcrnОЛЬоЗуемой файЛQЕЮVr систем. Ем" ВbI МСПОl)ЬЗуетв
ТОЛ\,>II;О &xt2, 06H08Ii1Te TOnbkO >:!'2fsprogs. есл.... JFS Та jfSlJtllS. Если Ж8вы ИСПОПl:t3Yете все nеречиСЛ61iНЬ!е
фa&1lnощ.rе CIo'JCT8Ubl B)(t2, JFS, Relserf"S, 88М ft)IЖНо QбнааитЬ Все f1pof"p8i'-'lМbl, отмеченные звй:mочкrn:\.
Ваше старое ядро пока рабmает и, чтобы ие сделать иичеrо непопра!lИ
моro, IIyжIIО собирать нО/юе ядро под иовым именем. НаЙдите 8.Makefile
(в самом Начале фаЙJIа) строчки:
VERSION=2
PATCHLEVEL=6
SUВLEVЕL=<тре"rы!цифра.версиивашеr'оядра>
EX1'RA'lERSION=
EXTRAVERSION это суффикс, которым будет отличаться имя H0801'O
ЯДра. ДаЙте ему значение вроде «new» ИЛИ «test». Это приведет к тому,
'ITO собранное вами ядро будет называТЬСII Iinux-2.6.x-new. Старое IIДРО
никуда не денетСII, и при заrpузке можно будет выбрать нужный вар нант
ядра.
Команда make dep, кoroрая вводилась после конфиryрироваШIЯ ядер
2.4 .. ниже, при сборке ядра 2.6 не используется. Вместо нее выполните
следующую последовательность команд:
$ make bzlmage
$ mэ.kе ro.odules
ЭТII пэра команд соберет ядро fl те модули, которые вы включили в нето
lIa зтаПе КОИфИ1'урированuя. Процесс сборки займет Не меньше 20 минут,
а то и значительио больше в завнсимости 01' быстродействия вашей
си,.емы И количества выбранных модулей.
Можно выполнять эти команды от имени непривиле1'ированно1'О пользо-
вателя. Даже IIУЖНО, поскольку ндео.лоrически праВlUlЫlее работать под
рутом только тотда, кот Да иначе неЛЬЗя. Без ПРИВJlлеrllЙ сynерпользова-
теяя нельзя обойтись только на этапе установки ядра 11 модулей:
573
UNUX: полное руководство
# make modulesinstall
# make i!\s ta 11
Результатом успешной сБОрКl1 и установки станут следующие файлы и
каталоrи:
/boot/vm1inuz2.6.xnew
/Ьооt/Sуstеm.mар2.б.хпеw
/boot/initrd2.6.xnew.iJ1\g
/libImodules/2.6.xnew
Осталось добаВIПЬ в конфиrypШЩОЮlЫй файл вашеro зarpузчика (п.9.1.1)
вариант заrрузки с новым ядром. ЕСЛИ вы используете GRUВ, ВПlшппе
в /boot/grub/grub.conf следующие crроки:
title Linux New Kernel
kernel /vm1il1\.Iz2. 6 .xnew root=/dev/hdaS ro
initrd /initrd.2.6.xnew.img
Если вы вкомпилировали все драйверы, необходимые для заrрузки CII-
стемы, в ядро И поэтому неИСПOJЦ.зуете initrd, то строчку initrd можно
удалить.
В случае. если ваш заrрузчик LILO, впишите в /etc /li 10. соп f
строки:
image=/boot/vmlinuz'2.6.xnew
label='" Linux Ne.w Кеrпеl"
root=/dev/hda5
initrd=/boot/initrd2.6.xnew.img
read'on1y
и занесите изменения в заrрузочную запись:
# 1i10
Теперь иерезаrрузите систему" попробуйте заrpузиться с новым ядром.
При появлении каких-либо ошибок вы Bcerдa сможетезаrpузить старую
версию.
574
rлава 21
СОЗДАЕМ
КОНСОЛЬНОЕ
ПРИЛОЖЕНИЕ
компилятор GCC
СБОРОЧНАЯ УТИЛИТА МАКЕ
ПАКЕТ BINUTILS И друrИЕ
ПОЛЕЗНЫЕ проrРАММЫ
LINUX ПОЛНОЕ РУКОВОДСТВО
21 .1 . Компилятор gcc
88 rлаВе вы ЛОЗЦЩ\ОМЩlllСЬ с языком KOMaИДRoro ицтерпретатора И убе
ДIШIIСЬ, что "а нем МОЖНО писать полезные сценаРИI\. НО если вы раньше
проrраММИРОВaJJИ под Windows, то интерпретатора вам мзловато будет
понадобятся более lI!ощные среДСТJ;lа разработки. Разумеется, они в ОС
Linux есть.
ОСНОВНЫМ Скомrшлятором в Linux служит gcc (GNU С CO!Dpiler). Если
вЫ не установили средства разработки при установке ДИСТР'lбутива, ca
мое время сделать это сейчас. Запустите менеджер пакетов (рис. 21.1) и
установите следующие пакеты:
. gcc сам комшlдЯТОР gcc;
. gccc++ поддержка С++;
. gcc-dQС документация по gcc (очень рекомендую УL-тановить);
. compat-gcc пакет, roдерЖJlWИЙ средства gcc для обратной сонме-
стимости. Данный пакет вам иужен, еСЛи вы планируете писать npo-
rpaMMbI ДЛЯ более старых СИL-тем, чем ваша;
. compat-gcc-c++ то же, что I! compatgcc, только с подлержкой
С++;
. compat-cpp препроцесroр срр для обратной совместимости;
. l>inutils набор вспомоrательных утилит, О которых мы ПOl"оворим
В последнем пункте этой rлавы;
. glibcdevel содержит библиотеки ДЛЯ разработки Спроrpам.м;
. libbfd библиотека дескриптора дuоичноrо файла (8inary File Ое-
scriptor li!Jrary);
. libstdc++.devel заrоловочные файлы и библиотеки ДЛЯ проrpам-
МИРОllания На С++;
. make уrилита, упропmющая процесс сборl<И бмьших проектов.
576
rлзва 21. Создаем Консольное прилож:ение
iij';::::::::',:;;;;,;;;;p
i """"'""'"............
Проrра:ммроВi1Ш<Н:
ЭтИ c;pQ,DCTBa UKJUCNaIOT OOIfOQHble cpnд::'raB
" р.азра60tr;и. tа.кие (Эк а1ilrжn.lkе, 9'с, pretI, руttюn и
Оfna;nчк"'.
[S4I65J i c;;'; I
'..........А,
I
Q]p.noAl'.x
i
i
(1....,Ii
I Эти nп.е'fl:!l nс.зUО:lJlС'r разраli;пtj!lаrt> npnQJkE/lod'lJII !
. #JiP Дn$lt Х Windcw Sys.h!m. 11
-! Q] Pupefo'n:. с мc"oп-м (oOМE (3CI1!1) I
.I.. ,.. : .7 ,N;':."Р'6 ::: .', :.::'7Ш'""'Ш'j . .
.obeM CTaн(C: 4,218 Мara6.r -..
. " т о.Р<@т, Ij Hon,,, J
Рис.. 21.1. Менеджер пак-етов Fedora Core sysreтcoпf;g-packages
21.1.1. BbI30BgCC
Форма!' вь[зова Компилятора такОЙ:
gcc [опцИи] helloworld.c
Вы написали свою nporpaMMY на С++'1 Нет пр06лем: компиляторы С
и С++ являются интеrpированными. Чтобы сообщить КОМRlШЯТОРУ, на
каКОМ языке вы ПИСaJШ свою nporpaMMY, нужно указать определенную
опцию при выовеe компилятора, Но можно поступить проще: по умол'
чанию компилятор считает, что файлы с расширением .с написаны на
языке С, файлы с одним из расширений .С, .се, .сХХ на язътке С++,
а фt.йJIы с расширением .S на языке ассемблера.
Как правило, перед компиляцией ВЫЗЫВается проrрамма ер!> пре
процессор языка С. Препроцессор создаст файл с расширением шi, если
ваша nporpaмMa написана на языке С, 11 файл с раСШIlР"Нtfем .ii, если
ваша nporpaMMa написана на С + +. Если ваша проrрамма уже прошла
препроцессорную подтотовку. ВЫ можете передать компилятору gee файл
е расширением .i нли .ii и gcc уже не булет вызывать прелроцессор для
подrотовки иеходноrо текста. Как прюшло, nporpaMMY ерр редко кто
вызывает вручную,
19 3"11: .)
S77
LINUX: ПОЛное рУКОВОДОТВО
Если не укаЗl>Iвать НИВ;!lЮlХ опций, то КОМПИJlJlторсоздаст в теll;ущем
каталоrе файл a.out, содержащий исполняемый II;OII. для тех, кто изучал
друroй язык, я На I1СЯJQIй случай ПрИl1еду текст перl10Й проrpаммы на С
(листинr 21.1).
Листиш 21.1. Фэйл helloworl<l.c
linclude cstdio.h>
main{)
{
printf("Hello worldl\n'),
}
А сейчас рассмотрим основные опщlИ :компилятора. ОБО всех остальных
опциях вы сможете узнать по команде тап gcc.
21.1,2. Общие опции
Из общих ОПЦlIЙ 8аиболее интереСFlЫ трн: 'К, .с и '0.
С помощью опции 'Х можно указать язык, на котором написан ИСХОДНЫЙ
КОД, например,
gcc x с he11oworld.c
в Ka'leCTBe языка nporpaMMbI вы можете указать:
. с, если ваша проrpамма написана иа с;
. objective с, если ваша просрамма написана Ila Objective с;
. c-header, есл» ваша просрамма является зarоловком с;
. с++. если вы написали проrpaмму на С++;
. assembIer, если ВЫ написали лроrрамму на ассемблере.
Сушествуют и ДРУПlе варианты, но он» не столь важны.
Опция 'с »спользуется, если вы )[отите только ОТКОМI\илировать вашу
nporpaMMY, 80 не вызвать компоновщик. В результате будет создан объ-
ектный файл с расширением. о.
Опция .0 позволяет указать имя результирующеrо файла. Это очень по-
лезная опция, потому ,[то имя а. ou t мало Koro устраивает:
gt:c -о hel1oworld helloworld. с
Очень полезна оппия -v, которая выводит различную информацию о
стадиях КОМПИJIЯЦИИ. Кроме тош, эта опция выводит версию компиля-
тора.
578
rлава 21 . Создаем КОНСОЛbl-iое nриnожение
21.1.3. Опции Азыка
Из всех опций языка мне приrОДlшас), ЛIШ!), опция ANSI, которая вы.
ключает все функции GNU С, несовместимые со стандартом ANSI. К
TaКliM функuиям относятся asm, inline, typeof и друrие.
21.1.4. Опции препроцессора
Эти опции заДают режим предварительной обработки исходноro кода
(до собственно компиляции).
Очень важиой является опция -include <файл:>. Она позволяет «про'
rHaTb» через препроцессор сперва содерЖимое указанноrо файла, а
10ЛЬКО после этоro файл, которыIй передан препроцессору. В результате
указанныЙ файл будет откомпилирован раньше, чем все остальные.
Опция -nostdinc запрещает использование системноrо каталоrа, содер-
жащеrо файлы заrоловков. При ее включении компилятор будет искать
заroловки в каталоrах, указанных в опции -1 и в текущем каталоrе.
Опция nostdinc++ запрещает использование стандартных файлов за-
rшlOВКОВ для языка С++.
21.1.5. Опции компоновщика
Опция компоновщика -1 Позволяет явно указать имя библиотеки, к(ЛОрая
будет использоваться при сборке вашей проrpаммы. Например,
gcc lmylibrary myfile.c
Компоновщик будет использовать файл 1 i bmylibr ary . а, который ОН
попытается наЙти в системных КаТалоrах библиотек и каталоraх, которые
вы укажете с помощью опщ," -L.
ОПЦИЯ -nostdllb запрещает использовать все системные библиотеки. При
ЭТОМ будут использованы библиотеки только из тех каталоroв, которые
вы укажете с помощью ОПЦIIИ L.
ОПЦИЯ .static означает, что будет использовава статическая линковка.
21.1.6. Опции KaTaпorOB
Две важнейшие ОПЦИИ каталоrов: -111 -L. Первая позволяет указать путь
ДЛЯ поиска заrоловков (фаЙJIов с расширением .h), а вторая библио-
теК. Например, если ВЫ хотите, чтобы компилятор использовал файлы
заrОJlОВКОВ, которые находятся в каталоrе Iroot / incl ude, Torдa укажите
579
UNUX: 110ЛНое рУIШВОДСТВО
опцию -I/root/include. Обратите ВШlмание на отсутствие пробела между
буквой 1 и первым символом пути.
ЕСЛlI JlЫ укажете ОПЩIЮ +, то в каталоrах, которые вы укажете в объ-
ЯВЛенной до 31'01'0 опции -1, будет'ПрОИЗВОДИТЪСЯ поиск только поль-
зовательских заrоловков, то есть заrоловков, указанных В директиве
#include «файл". Пути ДЛЯ поиска системных заrоловков, которые указы-
ваются директивой #include <файл>, останутся неизменными.
21.1 .7. Опции отладки
Если вы хотите использовать отладчик, наПРllмер gdb, для отладки своей
лроrpаммы, укажите ОПIщю -g при вызове КОМПllЛятора. Эта опция по-
мещает в откомшшированный файл отладочную информаЦIIЮ, вследствие
"ero существенно увеЛlIчивается объем файла. Поэтому никоrда не ис-
пользуйте эту опцию для окончательной версии продукта.
21.1.8. Опции оптимизации
Компилятор gcc позволяет ОПТИМИЗllровать код нашей проrраммы. Дру'
rими словаМII, gcc сделает все ДЛЯ тото, 'lТобы Ваша nротрамма была
как можно меньше по размеру и как можно быстрее запускалась. Д.ля
ВКJlЮ'!ения режима оmимизации используйте ОПЦИЮ -01. Бы можете но-
экспериментировать с опциями -02 и -03, которые еше больше пытаются
оптимизировать вату проrpамму, однако не перестарайтесь. ЕСЛII "ата
nporpaMMa после такой оптимизации работает еше медленнее, '!ем до нее,
или же некорректно работает, используйте ОПЦИЮ -00 для отк.лю'!ения
оптимизации.
Обо всех остальных опциях "Ы сможете npoчитать в справочной C[IGТeMe.
21.2. Сборочная утилита make
Если вы уже собирали прикладную проrрамму ИЗ исходных кодов, то
обратили внимание на стандартную последовательность команд: make;
таке irscall.
Без утилиты makc lIе обходится создание ни onHoro серьезноrо про-
екта. Эта утилита унравляет сборкой большоrо проеКТа, состоящеrо из
десятков 11 сотеll файлов. Проrрамма make может работать не только с
компилятором gcc, но и с любым КОМПlшятором для любоrо языка про-
!'РаММИрОDI1НИЯ, способным запускаться из командной строкн.
580
rлава 21 . Создаем консол ьное приnожение
ДиреКТИВЫ утилиты. make служат ДJIЯ определения зависимостей между
файлами проекта и находятся в файле по имени Makefile, расположенном
IJ каталoreсборки.
Разберемся, как ПlIШУТСЯ шаkе-файлы. Общий формат шаkе-файла вы-
тядит так:
цепы1: слисокнеобходимыхфайлов
последовательностькоманд
цельN: списокнеобходимыхфайлов
последовательностькоманд
Цель ЭТО метка для некоторой последовательности команд (например,
install) или результирующий файл, который нужно <<построить» ском-
пилироnать ИЛИ скомпоновать.
Цели ДОЛЖНЫ отделяться друт от прута хотя бы одной nyстой строкой.
Список необходимых файлов это перечень файлов Itлll друrих целей,
которые нужны лля достижения данной цели; он может быть и пустым.
ПоследователЪ1IОСТЬ команд это команды, которые IIУЖНО выполнить
для достцжения цеш!. Последовательность команд должна отдеЛЯТЬСя от
начала строки символом табуляции, иначе вы получите ошибку «missing
separator» (нет разделителя).
Маke-фaйJt мфкer содержать комментаРIШ olЦt WlЧlшаlOТCЯ CИМН01IОМ #.
В таkе-фвйлах вы можете использовать макроопределения:
CCgcc
Pi.rrH:; !us:r / iпс 1 Ш.1е Illsr'; s:rc /1 iпuх/ iлс 1 ude
MODFLAGS:= '03 Wall DLIN1JX T$(PAТHI
$ICC) $IMODFLAGS)c proga.c
Чтобы обратиться к макроопределению в команде или в npyroM макроо-
пределеюш, нужно использовать конструкцию $(имя). Макроопределение
может включать в себя npyroe, ранее определенное, макроопределение.
Формат запуска утилиты make:
rnake [! файл] [ключи] [цель]
Ключ f указываer файл инструкциЙ, который нужно ИСПОJlliЗ0ватъ вместо
Makefile. ЕСЛI! этот ключ не указан, то make нщет в текущем каталоre
фаЙл Makefile и начинает roбнрать указанную цель. Если цель не указана,
то I!ыполняется первая встреченная в mаkефайле. Сборка выполняется
рекурсивно: make сначала выполняет все цели, от которых зависит теку-
щая ueJlli. Если заПИСIIМОСТЬ представляет собой файл, то make сраВIIИl!ает
581
lINUX: полное рУКОВОДСТВО
ero время последней модификации со временем целевоro файла: если
целевой файл старше или отсутствует, то будет выполнена указанная no
следовательность команд. Если цеJlевой файл моложе, то текущая цель
считается ДОСТllrнутой.
er a11 * H!!'HJ'H'H:I';U.
Если нужно ..,эбе*;:а-ть пересборки кaKorOTO из фаиnоl3 проекта. ТО МОЖно
; искусственно «омоподитыоо ero командой touch, I<ОТОрая присеоит ему в ICзчестве
вреМени послеДНей МОДификации текущее время. Ecп нужно. наоборот.
принудителt:.на пересобрать цель, то следует "ОМОЛОДКТР ОДИН ИЗ файлов, ОТ
"оторых она зависит.
Работа nporpaMMbl make заканчивает<:Я, KOrna дocтнrнyтa цель, указаиная
в командной строке. Обычно это цель all, собирающая нсе результиру
ющие файлы проекта. Друrими распространенными целями являются
install (установить собранную nporpaMMY) и сlеап (удалить ненужные
файлы, созданные в процессе сборки).
В листинrе 21.2 представден mаkефайл, собирающий небольшой проект
113 ДВУХ проrрамм сliепt 11 server, каждая из которых компилируется из
OlIHoro файла исходноrо кода.
ЛИстинr 21.2. При мерный mаkефайл
СС=чсс
CFLAGSO
all, client server
client: client.c
$(СС) client.c o client
server: serverc
$(СС) server.c o server
Обычно при вызове утилиты make не нужно задавать никаких ключей.
Но иноrда использование ключей бывает очень кстаrn (таблица 21.1).
562
rлава 21. СоздаеМ консольное приложение
КЛючИ J(ОМЭЦl1Ы make
Т.аблица21.1
КN... НаЗНI1I..енМ8
.С KBTMor ПереЙПt в vкa38HHЫ 1!:8ra110r перед tщ'oIМОМ работы
d ВЫПоД DтладО'щои ИltФормrщии
Приоритвт nepeMeHНЪiM окружен.ия. Если у нас YCTaHoBfКlH8 ПеремеН!18Я
.В щ::ружеkVlА. се Makefile 9СТЬ пере....Н8Я С Taк1<I *8 t,(M$Het.t, 1"0 будет
ИСПОЛЬЗ0ена перемвНН8А ОlCружения:
, файл ИСПОЛЬЗQвать указанный файл вместо Makefile.
.; ИrнорироS<lТЬ оwиtЖ:и KOI<lf1W1RTOpa
.1 !(aTaпor е YHOM кaTaпor будет ПрОИ3ВОДИrЬС\t поис.к файлов. ючаеМЫК
а MakefilB
-1" 3Gпускап, не более n команд ОДновременно
-" Продолжить работу nocпe 'Ошибки, если ЭТО возможно
-В 6ыeeCТ ';омiщды' KorOpbI& допж:щ.. (5Р111I4' ВЫПОЛНИТЬСR. НО не выполнять их
-о файл nропустиtЬ даННЫй файл, & eC1trj е M8ke1lle \цt8ззно. "IТо он доткем БЫrь
создан заНQВО
-, Не И(';ПоJlЬЗ0ваrь ВСТроенные правила
-. Не ВЫВОДИТЬ lCоманды перед их BblnoпHeH",вN
-w Вывод ТеqщеrQ кaTatlQra до и после эьтОЛН8t1 "оманды
21.3. Пакет binutils
и друrие полезные nporpaMMbI
Пакет binutils содержит утилиты для работы с бинарными файлами:
. Id компоновщик: проl'Рамма, связывающая объектные файлы и
библиоте.щ в IIСllОлняемый файл;
. ar работа с архивами (создания, модификация и извлечение);
. nm вывод названий идентификаторов из двоичных файлов;
. objcopy копирование и трансляIЩЯ двоичных файлов;
. objdump вывод информации из двоичных файлов:
. ranlib rенерирование индекса оrлавления архива;
. size вывод размеров секциЙ архива ИЛИ двоичноro файла;
. strings вывод строк, которые возможно прочитатъ, из двоичных
файлов;
. addr21ine конвертирование адресов в памяти в строку в файле;
. nlmconv конвертирует объектныЙ код в NLM.
А 'Теперь переЧI!СЛИМ несколько полезных вспомоrательных проrрамм.
583
UNUX: полное руководство
21.3.1. ansi2knr
Утилита ansi2knr предназначена для преобразования текстов проrpамм,
написанных в соответcrвЮI со cтaHдapro! ANSI С, В npоrp1Щмы на «КJшс
сичеСКQМ» С Керниraна и Ричи. Формат вызова:
ansi2knr oldfile.c newfile.c
21.3.2. as
Проrpамма as э'rо GNUверсия ассемблера, предназначенная для соз-
дания объектных файлов из nporpaMM, написанных на языке ассемблера.
Формат вызова:
ав [ключи] файлl [файл2 ... файлN]
Ключи nporpaMMbl as
Таблица2t.2
ключ На3Н8ч-кме
-а BыВQД I1ttC"T"II-iПl
-ed Не ВЫВОДИТЬ отладl-iые сообщения
-вО Включение в ЛИGтикr Te1I.CTS nporp<J.MMbI, нanисаНr10Й нц qЭlolкв Bblcow;:oro
уровНJI"есл", КОМПМЯЦИI1 ПРОflOДИлзсь с КЛЮЧОМ o
-вl Вывод lIистинrе на ассем5nllЭре
-еn Не брэбв-ТЫElаn. форм
-вз ВЫВОД списка СКМ80ЛOS прorpaммы
.афаЙll Вывести ЛIolСТИНr 8, yt:83ВiННЫЙ фал
-' быстрый режим, Директивы препроцосс;ора ЖJ обраб&ТЫlШlOтсg
-Inyrb ДЬбавиtb yKB:-;aнHЫ nyn. к Inс:IUdе.пути
.MRi Обеспечить МRI.совuестИМQСТЬ
o файл Соэдание об'Ьet(llolOf'О Ф8Й'1I1l су!свэанным именем
.А f1C1мecткfъ CвrмeHT Д(jHI1ЫX в ейrменТ kQдa
.. BыВ<lД вареки
-w Не l3ые.оДИТЬ tIовдyr1lJеЖДВttИя
21.3.3. bison
Проrрамма bison это rР1Щматический разборщик (парсер): она создает
Спроrрамму, предназначенную для разбора определенной rраммаl'ИКИ.
Данная проrрамма вам не понадобится до тех пор, пока вы не захотите
наrlИсаТh собствеиный компилятор. Ключи nporpaMMbI представлены в
таблице 21.3_ Формат вызова:
bison [КЛЮЧИ] файл
584
rлавв 21. Создаем консольное приложение
I(пючн nporpaMMbl bisoп
Таблица 21.3
lCJlооч Нuttаченме
.Ь префиt;с ИСПОЛЬЗО6<'I1Ь ук:аэанны nрефикс ДnA имени вх6дящеrо файле
o СО3Д8ТЬ заrОЛО80ЧНЫЙ фа"Л, соnпрж.ащи" )'IНфQрмаuиlO 1) ТИПWC rpaММl1fJ'tчвСI(ИХ
образцов {токеное). которые опредедены е вашей rраммаrиКе
.1 Иеwsвnять КQП а cyщsсrayIOЩИе файлы
-о файл УстаНОВИТl:. файп резуnьrата
., ВкntoЧИ11;. (Ij]ЩЦQЧН}'Ю информацию
. ЗаписаТь созДанную прЫрамму '9 файл y,output
21.3.4. flex
tlex [параметрыj файл
Это еще одна nporpaMMa, КDТорая пищет код за нас. Flex может написать
проrpамму на языке С, которая будет искать заданные образцы текста n
'НЖL,О8ЫХ файлах и выполнять определенные действия, заданные npo
rpaMMlIcтoM. Если вам нужна эта nporpaMMa, тorna самое время прочитать
страНИЦЫ руководства тап Лех.
21.3.5. gprof
Проrраммы вроде gpror называются IIрофаitлерами. Они IIредназначеиы
ДЛЯ определеЮIЯ быстродействия вашей nporpaMMbl Для каждоrо ВЫЗ0ва
ФуикЦlШ вашей nporpaMMbl профайлер выводит время ее ВЫПОЛlieНИЯ. Вы
как проrраммист анализируете полученную ииформаJlИЮ И, если нужно,
оптимизируете исходный код вашей ПроrраммЪ1.
21.3.6. strip
Утилита strip удаляет таблицу символов из oGueKTHoro файла.
21.4. При мер nporpaMMbI на С
в п. 9.2.3 я сказал о состояниях процесса и перечислил среди ЮfХ co
стояние «30"16>1». Зом6и это процесс, который уже заверUШЛСIl, НО
ero родитель еще не получил Сl!тиала о ею завершении и не удалил ero
структуру из таблицы процессов. Такое может произойти, Korna про"
uессродитель почему"либо не тотов к завершению потомка. Сейчас мы
искусственно создадим тaKoro зомби. Процессродитель породит lIотомка
585
UNUX: полное рУКОВОДСТВО
и уснет на 10 секунд. Потомок завершится через 2 секунды, а в течение 8
секунд он будет нахОДIПься в состоянии зомби. Напоминаю, что состояние
процесса можно YВIIACТb по команде top.
ЛИСТИнr 21.3. Файл zornblc.c
Hnc1ude <unistd.h>
#inc1ude <signal.h>
#include <stdlib.h>
#inc1ude <sys/wait.h>
#include <stdio.h>
int rnain {} (
int pid;
int status s diedj
pid=fork () ;
swi tch (pid) (
саэе 1, рriлtf('ошибка fork\n'),
exit{l} ;
саэе О , printf("
printf ('
1/ Ждем 2
э1еер(2) ,
exit(O} ;
defau1t: рriпtf("Я родитель.\п'),
printf ('Мой PID М\п', getpid(»;
11 Ждем завершения дочернеrо процесса
11 через 10 секунд, а потом убиваем ero
sleep(101;
if (pid & 1)
kil1Ipid,SIGKILL};
died= wait(&statusl;
я ПОТОМОК процесса %d\n". getppid();
Мой PID %d\n" , getpid()I;
секунды и завершаемся
СкомпилируЙте файл zошЫе. с И запустите IIСПQ;щяе/dЫЙ файл zo",bie:
$ gcc o zombie 2ornbie.c
$ . 1 zornbie
Я родитель.
Мой PID 1147
Я потомок процесс а 1147
Мой РШ 1148
586
rпaaa.21. Создаем консольн:ое приложение
Запомните последнцй цомер 11 быстро переключитесь На дрyryю консоль,
rдe введите команду top p 1148:
16:0(:22 up 2 1IIiD, 3. uзеrз, l.oad. averi!lge:O..l0.. 0..10, 0..0.
1 p.:ros:Q<s.J,eep:tng, о rЧ-nnЩ,. :1 z:olllbie,. О stopped
СРО 5utes: 4/5.. user,. '1,.6' s}'S1:el'i., О,.М nice, 0,,0' iowait, 81,.8' id1e
ltell.: 12156Dk .", 169921:: used". 50568k :free. Ok shrd, 38121: bu:f':f
22BOk actiye" 19Э2Вk inactY&
swa.p .152576k "'У, О}: ШlЩ 1-52S1бk 1'%: З9JО4k cached
PII> CSER.
1148 den.
I"RI. NI. ВПЕ 1\8s SВADE st'AТ 'Cl'U -\иsи t'1XБ OOИИAНD
11 О D 1) О Z 0,0 0,0 0:00 zalli:de <de1Unct>
Мы видим, что в списке проuессов появился один зомби (STATZ),
который «проживет» В таком состоянии uелых 8 секунд.
567
rлава 22
ОТЛАДКА,
ТРАССИРОВКА
И ОПТИМИЗАЦИЯ
пРоrРАММ
ОШИБКИ И ОТЛАДКА
ОТЛАДЧИК ООВ
ПРИМЕР ОТЛАДКИ проrРАММЫ
ТРАССИРОВКА
СИСТЕМНЫХ ВЫЗОВОВ
ПРОфАЙЛЕР GPROF
LINUX ПОЛНОЕ РУКОВОДСТВО
22.1. Ошибки и отладка
Самыми страшными являются не синтаксические, а так называемые ло
rи'!еские ошибки. Ваша nporpaMMa может содержать хоть сотню мелких
синтаксических ошибок там не так функцию написали, там забыли
указать параметр, а rJIeтo пропустили точку с запятой. После исправле-
ния всех этих ошибок проrрамма будет работать.
Если же ваша nporpaMMa содержит лоrичсскую ошибку например, вы
выбрали неправильный алroритм иllИ непраоИJJЫro ero испо.цьзоозли, то
компилятор может даже не выдать предупреждения. Вроде бы ошибок
нет, npоrpамма работает, но результат выдает непраlllUlЬНЫЙ ИЛИ в какой-
то момент вообще рушится. Мне запомнился один афоризм: «IJporpaMMa
делает TO ЧТО вы ей сказали, но не то, ЧТО вам хочется). Это и есть самое
удачное, на мой взrляд, описание лоrической ошибки.
Если вы заметllЛИ ОШlfбку до Toro, как ваша проrрамма -увидела свет», то
можете считать., что вам повезло. Одно дело, Korдa проrрамма бесплатная,
apyroe, Koraa ВЫ за нее получили деньrи, а заказчик недоволен... А бывает
и такое, что проrрамма может работать один, два месяца и только потом
ваша лоrическая ошибка «всплЬ/вает» наружу. Почему это произошло?
Дать однозначный ответ сложно, даже Korдa видишь код nporpBMMbI: все
зависит от ее специфики.
Например, если ваша nporpaMMa использует какую-нибудь СУБД для
обработки информации, вы моrли установить размер поля меньший, чем
нужно. Первые два месяца nporpaMMa работала отлично, а в один пре-
красный момент оператор ввел очень длинную фамилию очень важною
клиента, и ваша nporpaMMa не внесла эту информацию в базу. Но это
тривиальная ошибка, и ее можно исправить очеиь быстро.
А вот Koraa ВЫ пишете nporpaMMY для управления устройством IJЛlI для
обработки показаний внешних датчиков, ПОдкJlЮ'lенных к компьютеру,
бывает очень сложно найти ошибку, связанную с конфликтом на аппа
ратном уровне. Например, пользователь установил новое устройство,
которое конфликтует с вашим контроллером. Или вы Написали модуль
для поддеРЖКl1 oJIHoro контроллера, а пользователь подключил два, и
оба теперь не работают.
589
LINUX: полное рУКО80ДСТ80
Какие же ошибки часто совершают начинаЮшие (и не только) проrрам
мисты? Самая тривиальная неправильное использование операций
инкремента и декремента. Например, следуюшие выражения не экви-
вментны:
х = у++ + 10;
х ++у + 10;
в первом случае перемеllноii х будет присвоеllО значенне 15, а во вто-
ром 16.
Следуюшей по частоте является ошибка неучтенной единицы. Например,
вам нужен массив, состояший 113 10 элементов, вы ето объявляете:
1nt а[10];
А затем инициализируете ero с помошъю цикла:
for (1O;1<;10;1++) а[1] ; О,
Этот фраrмент кода попытается ИJlIЩИЩШЗllравать несушествуюший
элемент а[1О].
Или еше один ра.спростране!Iный случай: nроrраммистзаБЬ!Вает, что ну-
мерация элементов массива начинается с О, 11 не инициализирует первый
элеМент массива:
for (1-1,1<10,1++) а[1] = О,
Особос место в зоопарке ошибок 3аIlИмают ошибки, связанные с непра-
вИЛЬНblМ использованием указателей. Все эти ОШllбки MOJКHO условио
разделить на три rpyrmbl, которые к сейчас кратко переЧIIСЛЮ.
1) Неправнльное использование операторов · и &. Это самая распростра
нениая rруппа ошибок начинаюlЦИX nporpaMMllcToB. Вот характерныЙ
пример такой ошибки:
1* неправильна */
char *в;
'5 = (char '5)mallocI25);
/* правильно */
сЬа):." *в;
5 - (char *s)malloc(25);
2) Выделеиие недостаточиоrо Дllяадресацяи об'Ъекта об'Ъема памяти.
Например, мы получим такую ошибку, если полытаемся скопировать
в строку s (вышеприведенный фраrмеllТ кода) строку, состоящую 113 30
символов.
3) Использоваиие НeIIинциализирова.llКlolХ указателей. Такие ошибки
часто встре'IaЮТСЯ при работе с динаМllчеСКИМII структурами. Например,
590
rлава 22. Отладка, трассировка и оптимизация nporpaMM
с линейными списками: вы забыли инициализировать rлавный элемент
(head NULL) и пытаетесь добавить в список новый элемент.
Использование реКУРСИВ!IЫХ вызовов может повлечь за собой Qшибку
переполнения стека, если вы непраВI!ЛЫЮ зададите условие завершеШIЯ
рекурсии. Как правило, рекурсивная ФУНКЦ\IЯ вызывает саму себя с Не'
сколько изменеН!IЬ!МИ параметрами. Рано или поздно такая функлия
должна, в зависимости от переданных П<1раметров, возвратить какое-ни.
будь значение, а не опять вызвать саму себя.
Для облеrчения поиска ошибок были созданы специальные nporpaMMbl
отладчиl<И. Одним из самых удачных отладчиков ддя Linux является gdh
(The GNU Debugger). Этот отладчик входит в состав всех распространен'
ных Шlстрибутивов (за исключением их «урезанных» версий для рабо-
чих станций), и для ero устаиовки достаточно устаиовить пакет gdb.
С помощью gdb вы сможете:
. запустить вашу проrpамму с определенными арryменtами;
. запуcnrrь протрамму в пошarовом режнме;
. установить точки останова (breakpoint):
. установить условие останова npOrp<1MMbl;
. узнать, что случилось, еслИ проrpамма неожиданно заверщилш:ь.
22.2. Отладчик gdb
Формат вызова отладчика gdb следующий:
gdb [.help) [.nx] [.q] [.batch] ['cd=dir] [.f] [.ь bps]
[.ttydeVJ ['8 sytrlfile] С.е prog] [8e prog] [.с соте]
[.х cmds] [.d dirj [prog [соте IprocIDj ]
Ключи отладчика описаны в таблице 22.1..
Ключи командной строЮf gdb
Таблица 22.1
!Сп.... "аначенме
-he!p ИЛ" h Вывод Kp8T/l:OrO оnисани5t всех параМ&ТроВ
-пх или " Не обрвбаТЫ88n" КОМанды файла инициапиэвции .gdblnit
'О Не Вt>l60ДИТЬ ПрИООТС"fе и нформацию об авторских правэх
КОМандный режим. Отладчик возвращает О, есп1-1 быnи зыпопНеl1Ы
.ba1ch 800 1I:oмal1Дb1, уаЗ&ННi>lе s файле. эад.анном пвраметром x {и файле
.gdЬinlt, если efO использование разреUlо).ЕслУ! )(8 ХОТЯ бы ОдНа И3
"о",анд не выПолнена, ВозвращаQТСЯ неНУЛ8ВQ9 эчвНИе
'Сd::К8талоr УстаНОRИТh рабо'"lИЙ КаТалоr (по УМOI\чаliИIO и:спользуеrСil ТеКУЩИЙ
каталоrl
Данн1;'IЯ опция нужна, всли вы пnанИРУQТ0 ИспОJJ/;оЗщsaтъ",-нтерфfэйс
-1 или fu!lname rel<:01080ro процессора ЕтаС8 ДЛR аrлв.дю.4 ваших nporpaMM с помо-
ЩЮ gdb, Дnя IЮЛiJ0 ПОдРОбноrо описаний tlбратит&сь 1( (:пpa8Qчной
системе
591
UNUX: полное руководотво
Продолженrиe rабл, 22. t
.Ь bps (Ыts ре' secol1d) YCTiioBi4rb/:J('QPocтъo6M&Ha инФОрмаЩ.1ей по послеДОlЩтельному
мнтерфеЙсу. если аоtIl8)1(И8а€'i азшу nporpaммy удал.еННо
-tty=терминал УСТ,Еlновиrь ТермИнщЦJ KaeC1eE! ствн,цартноrо ввода и вывода
АЛR отлввемой"оо(раммы.
-Sф9ЙЛ ИЛИ Ч,,"ает ra6nllIЦV с,иМЬОnQ8 "3 YJ(8заннаrо файла
symЬо!s=-Фа"п
-write Разрешить riись в мCmолняемые и соro.,файnы
-о nporpaMM.:I Иcnоnьзоеатьуказан!tVIO nporpaMMY в качестве фИnь'фl:l; AaMr1a
.sе=файл Ч'tЭi\:. таблицу С80Лое И3 yil.nзэнноrо файла VI.....сnОnы()ЗS'I'Ь.
уjItШЗанный файn в kЭчеСТf;'Iе испопнимоfо
-torFфз!\1I ИflИ Указать фвйл дaM
.с фa;lЛ
+соmmaпd=файл или 6Ыf10nнИТI;o уКаЗWi.8 файле КОМаНДЫ '"СnQltьэуетr,) IJ KQMaнAНOM
'Хф&йn режиме I
.d I(Эl'sлоr Добавит!;. К8Т8Лоrк спиСIqI поиска исходных Ter.CТOB
ПОСIlВДНИ" Пар.амвтр38Д8IН оБЪ81П, который O оmажИватъ.
[prog fcorelproclO) Вы можете за.цаn. nporpaMМY (prog). кnи дамПфвйп (ccre), который
будет создан В CJ1ytiаеоши6kИ nporf.1aМMbl ($eomQntation faut1), Iofftlof
же подсоединиться к уже запущенн(;му процессу (proclD}
.рРID ПОДКltЮ"'И.ЬСА "Y'I«J эапущенном'1 процессу (ДаНная ОПЦИЯ стала
доступной sseрсии оаь 5.2)
Чтобы использовать gdb для отладки вашей проrpамМbl, нужио добавить в
исполняемый файл отладочную информацию. Для этот ОТКОМПlIЛируЙте
вашу проrpамму с опцией --g:
$ gcc g o prog prog.c
Данная опция включает отладочную информацию в родном для опера-
циоиноЙ системы формате, с которым может работать gdb.
Затем нужно вызватЬ gdb так:
$ gdb prog
Если после запуска вашей проrpаммы произошла Оllll\бка I{ Бы1J создан
дамп-файл (сorе), можно !1средать ОТ.JIадчику и этот файл:
$ gdb prog core
Можно также !10ДКЛЮЧИТЬСЯ к уже запущенному процессу, для этоro
нужно передать ero PID:
$ gdb 1111
Только убедитесь сначала [1 том, ЧТО у вас нет файла 1111, поскольку gdb
сначала ищет исполняемый файл, затем сorе-файл, а уже затем PID.
После запуска отладчика в интерактивном режиме вы можете использо-
вать команды, самые важные из которых перечислеllЫ в таблице 22.2. Об
остальных можно узнать в справочной системе: тап gdb.
592
rлавз 22. Оншдка, траССИрОВkВИ оптимизация nporpaMM
Ком.знды gdb
Таблица 22.2
Команда НазначеНИе
break (ФЗйл:IФУНIЩИR VсraНСВИTh TO"lIo:Y осн!Нов8
run (apryмeнты} Зarryсnm. npOrpS!4MY и пtФielL81'i> еИ уоЗ8ННЫ€! арryменты
Ь! O(ipaTнa тpacC\llp09Ka отобраэйтъ сте1С npOrpiMt.,j:bl
print 8ырв:/tr;еt4ие дЫ8СТИ :JН3ЧfJНие 8Ырд)КвюtЯ.On(l!рштам't Moty1 бы1Ь щtремвннЫl:t.
обыtsленные s sзwей проrpзмме
С Продопжmь En:.InOhHel1\'18 проtpаммы (после останове)
Выполнить СllGАующую строку. ЭТО "8К называЕМЫЙ tiler ..»ад... (step ОУйrl.
No", Если следующая С"ро!Ц1 вызОв функц,",м, ТО МЫ 8Ыпопнмееза ОДИН
шэr ..Перешеrнем» ее
ВыnолниtЬ следующую строку. ЭТО 'МК Н83ымемый шаr...s* (step Iпю).
Step Если C1Iещая CipQt.:8 ВЫЗQ8 фунКЦИИ. то мы бvдеf..4 nqспвдоlJ.a'teЛIooНО
&Ы/'I{JlIняТъ все OnераторЫ 10М функцИИ
help (имя) Вывести справку о. команде отлаДчика ипм ВЫ88СтИ общую tНформациlO
онвм
Quit Выход
в данной таБЛllце прllведены дмеко не все команды. ЕСЛII вас IIнтересует
более полная информация, обраТlIтесь к руководству по gdb.
22.3. Пример отладки nporpaMMbI
Давайте напишем проrрамму, которая обнуляет элементы массива а [) .
Да, проrpамма ничеrо полезноro не делает, но на ее npllMepe можно про'
аемонстрнровать работу с отлаДЧIIКОМ gdb.
Вот ЛlIстинr nporpaMMbl:
I Листинr 22.1. Демонстрационная nporpaMMa, содоржащая ошибку
#inclиe <stdio.h>
int main ( )
(
char developer[j="Denis"i
int. а[10);
j.nt i,
do
(
а [i] o;
i+"';
)
whi1e (i<10);
return о;
593
UNUX: полное рУКОВОДСТВО
Назовем нашу nporpaMMY test.c и откомnилируем ее:
$ gcc g o test test.c
Опция g добавляет отладочную информацию для отладчика gdb, а ОПЦИЯ
o указывает IlМЯ резулъrnруюшеrо файла
Просмотрите листИН1' nporpaMMbl. Проrраыма не делает Н\lчеrо щщозри
телъноrо она всею !Шшъ в цикле do обнуляет все элементы MacclfBa
сначала нулевой элемент а[О) становится нулем, потом первыЙ, второй
и так далее.
Попробуйте запустить nporpaMМY, и вы УВlщите сообшение: SеgП1епtаtiоп
fault. В чем же причlПШ? Попробуем выяснить ее с помошью отладчика
gdb. Запустите отлaд'lик с параметром test (это имя нашеrо исполняемоrо
файла):
$ gdb test
В отладчике gdb введем команду run для запуска JJроrрaю.rы. И что мы
видим? Что JJporpaMMa ПОЛУЧlша сшнал SJGSEGV, то есть имеет место
ошибка Segmentation fault. Эта ошибка произошла!! строке 12: a[i]=O. Но
что может бытъ опасноrо в этом операторе? Ошибка Segmentation fault
может произойти по несколькlIМ причинам, одной из которых является
выход за пределы маССИ!!а. Проверим это: введите команду pril1t i.
Команда print выводит значение указанной переменной (или выражения).
Oro! Оказывается, мы пытаемся обнулить не нулевой элемент массива, а
71591О728'0Й! Почему же так произошло? Может быть, это gdb нашо врет
и вместо значения переменной i выводит непонятно что? Для проверки
на лживость вВедите команду рлп! developer, которая выведет на экран
значение переменноЙ developer. С переменной developer все НОРШlJ1Ъно
ее значение «Denis» (рис. 22.1),
Так что же ПрОИЗОlШIо? Так как переменная i не является rлобальной, ее
значение не обнуляется при запуске ПрOl'раммы. Чтобы избежать подоб
ноЙ ошнбки, нужно иниuиализироваlЪ переменную при объявлении:
int }.;;:О;
Вот мы и нашли ошибку!
Что же еще можно слелать с помощью gdb? Можно установить break
point, то есть точку останова, прерьшающую ВЫПОiшение nporpaMMbI в
указанном месте. Это нужно для Toro, чтобы про следить сосrоянне HeKO
торых переменных и/или стека nporpaMMbl перел запуском какойнибудь
ФУНКJщи или же ДJ1я пошаrовой трассироuки проrраммы. Для !lошаrОБОЙ
трассировки !lporpaMMbl установите точку останова для функции П1аiп:
IJreak mаiп
594
rnaea 2:2. Отладка, трассировка и ОI11"имизаЦИ1 проrpамWI
' .
1::1' ' '.' ,',.' '." . -,...;;.:'",..,,,..... '- . -- ""'",,-.-';-,,"'- =-')("
, ..... ' :1.@,\iiJ'i,,';""',.,. ш -,.,'. ;;,;:,;\i. '''' - 2Q;'bl ' 4j
C.JIIlнt:' Прt!3I<1!I Sv..a Нli\l:rfIOи.:t! По.СНII.I>
St1Cw\, r;:тatwl
I
:1
:1
ij
Рис. 22.1. Сессия gdb
Для установки точки останова на друrую функцию введите команду
break и в качестве apryMeHTa укажите ИМЯ функции. Теперь заПУUИ1.е
проrрамму на вы[юлнение (команда rIlП). Команде ruп можно передать
также apryMeHTN, с которыми должна запускаться HporpaMMa, нанример,
run /ltome/dellis/report.txt.
Коrда отладчик ДОСТИП:lет точки останова, он приостаНОВИi выполнение
l!pOrpaMMbl и буде'r ждать ваlJJИХ инструкциЙ. Затем llведи'rе команлу
пех! ДЛЯ выпол!<ения следующей строки. Команда пех! это команда
трассировки (,над» функцией. то есть оператор вызова функции булет
выполнен за один ша!'. Команда step используется для пошаrовой трас'
сировки функций. Если вы хотите нродолжшъ нормальное Аыполнение
Hpol'paMMbl после точки останова, введите комаиду С,
)ля отображеиия стека IIPOI'P,IМMbI предназначена команда Ы (backtr<lce).
Команда list используется ДЛЯ отображения IlCXOIIHOro текста nporpaMMbI
(рис. 22.2).
Естественно, весь текст проrраммы не поместится на экране, поэтому
отладчик отобразит только cro часть. Чтобы еще раз !ie вводить команду
list, просто нажмите En!er, и gdb выплюпп предыдущую команду.
Команда help предна:JНачена для отображения справки по командам от.
ладчика, а проrрамма quit для выхода из Иеro.
595
lJNUX: попн ое руководство
.
;..;. @ffP,1.!\ ' F , f'1'1I' , l!/41"Щ\tJ !i f',2&l\& ( iW/J> :Й'i ц !, ц\:\!i ;
I' 11;:"1"''' I'IA Нat:tf'l'''''' llaое::",1>
Рис. 22.2. Команда list
;fl.t п\\110
I
i.r.t <'Ii\l:!1:
\.,ti;
f\')r :i;I,.'11:i++j
I
"I',i..1;
rifltfС%с1\Л'.зШ};
rtYrl1 U;
)
.
Pr\lq J iIII\ t',,'j tl!'d IQ"1Ra 11 \'.
(gdЫ '!:I;!p.
ТМ pragr$f\'l1-; rтot ы'lщ 1[.111,
('Jdb) 1
"
Рис. 22.3. ПРОl"рамма KDbg
596
rлаВ3 22. Отладка, трассировка и оптимизаЦИЯ nporpaMM
Возможности проrраммы gdb этим Ifе оrpаничиваются. Отладчик gdb
это очень мошная проrрамма, и я советую вам почаше использовать
команду belp узнаете MHoro полезцоrо ДJIЯ себя.
Ес.1И вам удобнее ИСПOJlЪзовать rpафичetкиil интерфейс, чем СИМВОJlЬНЫЙ, вы
можere воспользоваться OДIIIIJ\IИЗ шrreрфейООIJ к nporpaMMe gdb. Один 113 них
KDbg. Все, что МЫ только ЧТО проделали с помощью команд отладчика gdb,
вы можете сделать, используя меню интерфейса KDbg (рис. 22.3).
Проrpамма КОЬ!! понрашшась мне еше тем, что позволяет удобно про.
сматривать реrистры, потоки, паМilТЬ, стек и прочее, имеющее непо.
срсдственное ОТНОШение к процессуотладки. Однако имейте в виду, что
интерфейс КDb!! сильно оrраничивает возмож:щх:ти отладки, потому что
позволяет выполнять лишь базовые, функции.
Существуют и друтие оболочки ДЛЯ'отладчика gdb, например, DDD. Эта
оболочка обладает чуть 6ольши.ш I!Pзможностями, чем KDbg, но все же
она является лишь надстройкой Ha.!tgdb. Оболочек MHoro, а gdb ОДIШ,
ВЫ можете выбрать оболочку на свой вкус, а я воо6ше предпочитаю gdb
без всяких оболочек.
tl't bl8tnO
I
1nteI10);
tf\ti;
for O;If.1';i+t)
I
э.{ J"'1;
rintt();d\n. .<I[tJ):
Цl'turrt с:
J
PrQIUOn II'xitlld flGrma11\1.
(9<Jli) 'itp
111, pror1\/fl iS 1\Ot Ь$11'!9 r\in.
(9db> 1
Рис. 22.4. Оболочка DDD
597
LINUX: полнов руководство
22.4. Трассировка системных вызовов
Вы коrданибудь задумыалисьь о ТОМ, какие системные вызовы ИСПОЛЬЗует
наша nporpaMMa во врем)! своею ВЫIlолнеНiUl? Если да, то этот пункт как раз
для вас. ВоЗМОЖНО, пока Оli ТОЛЬКО уДоВЛе'1'ВОрю' ваще що60ПЫrcтво, но через
некоторое вреUI эта информЗlI,I!JI crзнет вам понаcroтцему необхсщима.
Проследить, какие системные вызовы используетнаша nporpaMMa, по
зволяет проrрамма strace. Для ее установки ну:жно установить пакет
strace.
Формат вызова команды strace следующий:
strace [ dffhiqrtttTvxx J r acolumn ]
[ otile ] [ ppid ] r sstrsize ]
[ command '[ arg '.. ]
Ключи nporpaMMbl перечислены в таблиuе 22.3,
[ eexpT ]
[ uusername ]
Ключи К"ом.эНДной С7рОКИ.sti1I08
Таблица 223
Кто. НаЗНачение
-с ПодсЧ+tтыеатЬо вреМI1...траченное на каждый вызов и обрабоТJCy оwибок.
В !Сомце трасскров.ки:будет првдставnвн ПОдРоо.нt>lй ОТЧ9Т
-d Выводить оtJ\3.ДОЧktIte COQбщвни caMO ПраrpЭiммы stтce ka стаНДартный
вывод ошибки
.1 Трз.ссирооаrь дочерние процессы, ССЗAilliные ужв раССlI!руемыми
процессами
.ff ДaMHIJ. I)аци орим(!нsпс:я luщ"J{U 8"101.:11:1 r; U(IЦИUЙ LJ ИМ11фай/lа.
Кзжды тра.ссируемый процесс будет 3<:'.1nисан 9 файл \o'IМЯ файла:рld
,F Следовать 9ыэоеам vforkO. Де.нную оntИIO нельзя использовать вместе
(: оnцивй t
-" 8ывест\o'l СnРЭ8"1i
-; ВЫВОДИТЬ УIC83а'fВЛЬ ИНСТР\'kщtи ВО apElMR систвмноrо 8ЫЗОва
.., ...Тихий реЖИМ"'. ПОдавляет ВЫВоД некоторых сообщений
., Выводить относительную MeTI(y Gремми АЛR каждоrо вызова
., Перед каждой строкой выводить текущее ВреМЯ
." То *е. ЧТО н t. но будyr 8ЫВОАИ'I'ЬСМ rакже микросеlCУНДЫ
ПОlC8Зblsат!;< ВРJi/МЯ. nOтpa<.fgHQe 8 {:и(:,.емый ВЫЭОВ (то есть разницу
-Т между временем запуска и временем заеершенИй вызова). Дnй К8ждоrо
6Ы30ОО
-у Получение дополнительной VlНфОРМ3ЦИИ
-у Вывести номер еврсии з!rс;е
-, ВЫВОДИТЬ ие-ДSСII СТроки а шестмадЦ8терИЧНQМ формвrе
-Ю< 8ы0дTbb все СтрОКИ в шеСТНaдцGтериЧноМ формате
";} столбец ВЫРQВНЯТЬ 90JвращаеМЫ9 SЫЗQМИ ЗН6Ч<'i:!НИЯ 8 у"цзанном СТQлбце
{по. умолчанию 40i
e еыражеНИе ПQЭSОIIJ!ет Эад3ТЬ О'fслеживаеМl>/oEi собын'IЯ. Зц более подробной
информацией обратитесь к справочной систеМе
e tt"at;:е"'нnбор Onрвдtпить wабор Q1'СЛЮlLиsвеЦI>/Х вЫ30ВО8.
Наnример.II'ЗСQ;о:ореn,сlоsе,rеаd,wrltе
598
rлвва 22. Отладка, траССИрО8ка и оптимизация nporpaMM
Продолжение табл. 22.3
Кn.... Назначение
.etracв:::flle 6удут С1спеживаТt.СR ТОЛbk.О Вt.rЭООЫ ДJN работы (,: фай.NIМи.
(ореП,s'tat:,Сhmod,UПllпkИ т.,ц.)
- traoe=proces.s Отслеживаются вызовы АЛЯ роботы с процес:с:ами (fork. ахес, waitи др.)
.е 1mce.two", Отc.nQ)I(Иf\8ЮТСЯ сеТовые вызовы
.е trBcsslgnaj Оп,::леживаютс,я ВЫЭОВt;,I АЛ" РвБQ'ТЫ С сиrнМ8МИ
'6 tтt:a""ipc OtCJIожиВВlOТе" I'еызовы
e аЬbfev<=набор СQXращает ВЫ80А I<ЗЖДаrQ "t!leHQ Сlрук1)'ры. t;аnример. 8bbf,,",v::<all иnи
abbrev=none
.в verbo5.e=Jots60p Ра31lича-n' capYKfypbl разJ\И"t.ных системных вызовов, по Умоflчанию
\,Ierbose.-,II
Выводит не дEtКОДИрОQSННЫQ ЭI1З'fI3НИЯ арryмецrщ.'оистемных. DЫЭQ8аR,
.<3 rзw=аеt Данный apryмoHT nОI'\Qэен, если вы нв ДOSliрЯGте декодироааl-\ИЮ
или хотите знаrt. Точное ЧИЛОrJО!;! преаеЛЩ.Iе apryMQIOa
OrIрвделяет набор ТРЗССИDYвмых сиntat10Eli, По умолчaJ.iИЮ sfgпаJ"'З!I.
.е signаl=наБQр Вы можете И-СПОЛЬЗ0Вать еQCЛИцатльный зна" для оrрицаН\otR, цапример.
s\gnal"!SIGIO Qза'lаеf, "!Тосиrнал 51(;10 не. будет треССИрОВI!IН"
ВыполнЯть полныЙ wестнадцатерИЧНblЯ и.дSСJI.дамп всех пр.оЧИТВМНbfХ
.е l'йad=набор вызовом readO даНных. l-fanрИМер. Ч1'обы риДеТь все даЫ-lы0. поcrynаюЩив
через дескрипторы 2 м 7. введите read=2.7
.;;1 writе=набор То же, что И -(1 ad. но ,,"олька ДJ1'" эаписи
.а ",мф.<'МiIа Пере8nравить ВЫВОД nporpaMMbl 8 yt{QзаНt{I;.iЙ файл. ДBHHЫ файл буде,
nOne.seH дли далЬНWеrо аш.лиза трассироеl!:И
.р pid Присоедмнин,с .-; ПРОЦ&ссу с PID=pld и начать rРIa(:СИРОSКУ
YCTaHoт.ITb максимащ"цый ра:,Мер СТpQ"'И (rщ 'ft.tОЛ'lВНИIO 32). ИМНа
'5 разМер феPinО9 Не 1)аС"сМаТРН8аюfCfl ка" строКИ, поэтому e.cerдa будут напечата...ы
ПОnНОСП".Ю
Сортирует вывод rИСТоrраммы, которая l!ыерДИТСR Оl'Щией ...-с, по задан-
.$ IФЦТIJр.ий ному J(ритерию: tima (apeMfI:). с:зfl.$ (ВЫЗОВЫ), пате (имя) и notrnng (бе:$
СОРТИРОВ,I!иj
Запустить nporpaMMY 01 имени укаэаннОro nопьзоватеШI, Эта ОПЦИЯ будет
.LJ КМRПоЛЬ30Ва1еnя nОЛО3НОЙ. есл'" tlbl 1 ареNсtрироваБШI.1.Сь как root, будеrв прО130pяrь
I<OppвKfJ;QCTbt работы nporpaMMbl, nибы ома была ззnywеНа ПОД ,apyrи""
ПОI1ь>эоааТQлем
ВI>I даже не можете себе представить, какие системные uызовы использует
такая маленькая nporpaMMкa:
Листинr 22.2. Фай" p.og.c
#include <stdio.h>
int main ( I
(
printf ('Не110\П' )
return о;
599
UNUX: полное руководство
Откомпилируйте эту I1por'paMMY (gcc o prog prog .с) и запустите
strace: .
$ straoe prog.
Вы увидите следующИй вывод:
exeove("./a.out", [../a.out"j, [/* 21 vars*/J) = О
uname((sys="Linux". node="localhQst.localdoin". ...}} = О
brk(O} = Оха0495Ь4
openi"/etc/ld.so.preload", bRDONLY) 1 ENOENT (No
аисЬ fi1e or directory)
openi"/etc/ld.so.cache", ORDONLYI = 7
fstat6417 . {stmode=SIFREG 10644, stsizе=З1578. '" J) = о
oldm.'11ap(NULL. 31578. PROTREAD, МАРРЮУАТЕ, 7. О) =
Ох40014000
с105е(7) = О
open(" /lib!i686/1ibc.so.6", ORDONLY) = 7
read(7. "\177ЕLF\1\1\1\0\Q\0\О\О\О\О\О\О\З\О\3\0\1\О\0\
а'и\1В4\0..... 1024) = 1024
fstat64 (7. {stmode=SlFREGJ0755, stsize=1401027, ...}} =
О
oldrmnap I ох42000000, 12649:Щ,РRОТRЕАDI PROТEXEC. МAP
PRIVATE. 7, О) = Ох42000000
mprotect{Ox4212cOOO. 36128, PROTNONE) = О
oldmmapIOx4212cOOO, 20480, PROTREADIPROТWRITE. МAP
PRIVATEIМAPFIXED, 7, Ox12cOOO) = Ох4212сООО
01dmmар(Ох421З1000, 15648, PROTREADIPROTWR!TE. МАР
PRIVATEIМA!'FIXEDIМAPANONYМOUS, 1, О) =.Ох42131000
0106е(71 = О
mитnар(Ох40014000. 31578) . = о
brk(O) = Ох80495Ь4
brk(Ox80495e4) = Ох80495е4
brk(Ox804aOOO) = Ох804аООО
fstat6411. (stmode=SlFCHRI0620, strdеv=mаkеdеv{lЗ6. О),
.. . }) = о .
wroap2(rnJLL, 4096, PROTREADIPROTWRITE, МAPPRIVATEIMAP
ANONYMOUS. 1, О) = Ох40014000
write{l, 'Hello\n.. 6) = 6
munmap(Ox40014000, 4096) = О
exit(O} = ?
Читать вызовы нужно так:
имя системноrо ЕЫзова : возвращаемое значеиие
в нашем случае мы вывели на консоль шесть символов, поэтому вызов
write() возпратит значение 6.
600
rЛЗS8 22. Отладка, трассировка И оптимизация nporpaмM
В случае, если системныЙ выэоB завершился неуда'lllО (обычно код опшБЮI
I), просрамма strace выводит не только код, но И описание ошибки:
орепIИ/fоо/Ьаr', ORDONLY) 1 ENOENT (No such file,or
.1irectory)
Стандартные константы ВЫВОДЯТСЯ В ИХ символьном предстамении:
open('file.dat', OWRONLYIOAPPENDIOCREAT, 0666) = 3
Сиrналы также выводятся в символьном I1редставлеНlШ, наl1ример:
s igsuspend I [] <unfinished ,.. >
SIGINT (Interrupt)
<++ kil1ed Ьу SIGINT +++
Структуры, точнее члены структур, заключаюя в фиrурные скобки и
выводятся В формате имячлена",значение, например:
lstat('/dev/nul1", ($tmode=SIFCHRI0666. st
rdev=makedevll, 3), .. .» = о
СИМВОЛЬНые У"азатеЛlI Пl'Ч;lтаЮТC,If К31( I'Троки В С. то есть их значения
заключены в двойные кавычки:
сеад (З. 'root:: о: о: System Administrator: /' . . " 1024) = 422
22,S.Оптимизация проrрамм.
Профайлер 9prof
Вашз просраммз рзботзет медленно? Скорее всеro, причина кроется в
неэффекtивном, медленном алторитме. Сущестilуют просраммы, Позnо
ЛRющие определить врем" работы каждой функции взщей проrраммы 11
всей проrpаммы в целом. Проrpаммы такоro рОД3 нззывзются профайле
рами, В вашем дистрибутиве может присутствовать ОДИН из профайлеров
gprof, prof, profiler.
Сейчас мы рассмотрим проrpамму gprof (The GNU Profiler), 110ЗВОЛЯЮ
щую определить время работы каждой функции. Основные ключи про-
трзммы представлены в таблице 22.3.
601
L!NUX: попное руководство
Кпючи комаНДНОЙ СТРОю.t '
ТдБЛМLlВ 22.3
Кл.,., Назначение
.. Не Bы80Д&m. информ1O g .СТI!ТИ'ЧElСkИ", функЦИЯХ
.. Не 6ЫВОДИ1Ъ Оnи(;8;ни8 кзждоro nnпя в итоrО90 ТQбnИЦQ
.с ВкпЮЧt4ТЬ :эвристический ен1'-'3 rekCToaoro cerмeнTa объ&kТНоrа файnа
с целью СQЭД6Нj/lЯ cm'МчВс!()fо.'rpВ1(8 IЗЫЗО808
-е МЯфУМl(t!ИИ Не 6Ы'8оди.rь ОТ";о"! О работе анной ФУНКЦМИ и 060 8Cf!)t фунК'Ц\Itх,
KoropbIB из нее вызываются
-Е ИМRфУI-IКЦИИ Нв обра.баТblвап. VК83аннуюфункuиlO и все ФНk-ц.ии. II:OTOPbКO она еызываеТ
f ИМя'ФУНКЦИИ ВЫВОДИТЬ ИНфОРМ8Ц1i1Ю ТОЛЬКО об уаэа.нной фyt;lЩI4 и оба все)! ФУНICЦИ,:tх,
I(QТOpЫ6 из Нее SЫЭЫВ8J01"СА
-F I'НЯ ФУНЩИ\I! 06рвбаТЫМiЬ Только указnнную фУНКЦИЮ и 8"СО фунl(ЦИ. ФТ(фЫе из нве
вызываются
.k 1unc1 fU1lc2 Не вывоДить и.НФОРЧl8ЦИto о е..:)068 функцпи funC2 из. IЩИИ funс1
.. СоэМНlotе иrorОQorо фЩlМ.git}oi1,SlJm
., ВывеCJ'ИфунКUИИ с ну.nеsымпрацессар.ным ВQeM8H8M
22.5.1. Использование профайлера
ДлЯ IIспользования профаЙJ1ера нужно скомпилировать просрамму с оп
циеЙ компилятора pg и без апци" ""О' так как профаЙJ1ер по умолчанию
работает с фаЙлом a.out. После этоrо запустите файл a.out, чтобы
он создал файл gmon . ои t. Теперь запустите профаЙJ1ер с параметром
--nograph:
. gcc pg l.c
$ . I а. ou t.
$ gprof ..ь -nograph
Без КJlюча b профаЙJ1ер 8ыведет описание полей итоrовой таблицы:
. Time: время работы функщщ 8 процентнам cooth-ощеНIIII;
. cumulative seconds: сумма числа секунд этоЙ функции и ВЫЗЫ8ающих
ее функций;
. self seconds: число секуlЩ, потраченное на работу этоЙ Функнии В
отдельности;
. Calls: число вызовов;
. self m/calls: количество миллисекунд, на протяжении которых функ
пин ВЫllолня.лась;
. total ms/calls: количество секунд, на протяжении которых вылJпIялась
Функиия И все функшш, которые вызываются данноЙ функцией;
. Пате: ИМЯ функuии.
Чтобы было понятно, ЧТО означает каждое поле, рассмотрим листинr 22.3.
602
rIlЭВt1 22с О'lJ1вдка, трассировка и оптимизация проrрамм
Рис. 22.5. Протрамма урro!
Листинr 22.3. Демонстрационная проrрамма
#iлсludе <stdio.h>
:',nt funсtiод2 I )
int i;
!* rенерируем задержку */
for (i=O;i<9999999:i+'.)
return 777;
double functionlvoid)
(
int i;
dЩlblе х = 7.2323232323, у=324343" 3434;
1* rенерируем задержку *!
for (i=O;i<9999999;i++) к/у;
fuпсtiоn2 I ) ;
returtl х{у;
60З
LINUX: полное РУКОВОДСТВО
int main()
(
iпt i;
double 1;
for (i=0;k10;i++)
(
printf C"%d\b' . i) ;
1= function () ;
)
return О j
)
Как ВИДНО из листинrа, ФУНКЦЦJI function () выэывается 10 раз (см. поле
calls). В свою очередь, она ВI;,)З1>l1Ще1 ФУНКUИЮ f\lnction2 (), сдеДо$В-
тельно, число ВЫЗОВОIIЭТОЙфymщци тоже равно 10. Функция functionO
выполняется 1.09 секунд (5еlf seconds), а так как ее никто не вызывает
(кроме main), то пОЛе <;:umulative seconds тa1CJКe равно 1.09. Функция
function20 работает 1.07 секУнд, но ее вызывает функция function(),
которая работает 1.09 секунд. сЛеДQllатедьно, поле cum\llative эес
onds для второй фупкцци равно 1.09+1.072.16. Поле "е1! m"Jcall
эквивалентно полю "e1f seconds, только ero величина представлена в
миллисекунлах. Поле tota 1 те/еа11 обратно полю еит\11аи ve eaJ.1
и содержит время выполнения этой функции и всех дочерних функцнй,
в то время как lIоле cumulative са11 содсржит время этоЙ ФУНКW111
и всех родительсКIfX.
22.5.2. Как оптимизировать nporpaMMY
в качестве оптими.заЦIIII проrраммы Mory вам порекомендовать предпри'
нять следуюшие действия: .
1. Запустнте профаЙJ1ер, и пустъ он определит время работы всех ФУНК'
циЙ.
2. Перепишите ФУНКЦИЮ (или функции), которые заНlIМают БОJIЪше
всею npOlleccopHoro времени. ВОЗМQЖНО, вам придется изменить
аJlrоритм работы этнх функций.
3. Korдa мrоритм IIзменить невозможно, можно попытаться перепи-
сать часть кода функции на язы!се ассемблера, если, конечно, это не
противоречит идеолOl'ИИ вашей проrраммы (IIОЗМОЖНО, вы ХОТlпе.
чтобы Оllа запускалась на как можно большем количестве разных
rшатФОрм - тут без С не обойтись). Если переработка функции невоз-
можна IШИ помоrла мало, то попробуйте оптимизировать просрамму с
помощью опций КQмпилятора. Прежде всею ВЫКЛЮ'lIIте отладо'rную
информацию (не указываЙте ОIlW1Ю ---g) И размер проrpаммы станС'с
меньше. ИспользуЙте одну из опций оrпимизации o.
604
rлава 23 РАЗРАБОТКА
rРАФИЧЕскоrо
ПРИЛОЖЕНИЯ:
БИБЛИОТЕКА GTK+
ВВЕДЕНИЕ В GTK+
БИБЛИОТЕКА GLIB
ПЕРВАЯ проrРАММА НА GTK+
ВИДЖИТЫ
LINUX ПОЛНОЕ РУКОВОДСТВО
Сейчас мы поrОБОрИМ о создании rpафическorо интерфейса ДЛЯ вашей
LinuxпporpaMMbI. Как вы знаете, среДСТl!ами Одlюrо С нормальный GUI
не построишь, тем более что привычный пользователь Windows очень
треБОl!ателен не просто к наличиЮ GUI, но и к дизайну формы (окна
проrраммы). Поэтому без ДОПОJUfJПe;JЦ>НЫХ библиотек вам не обоЙтись.
Самыми распространенными библиотеками для создания GUI являются
библиотеки отк + и Qt. Рекомендуется использовать только эти библио
теки, поскольку велика вероятность тoro, что они уже будyr установлены у
пользователя (уж GNOME и KDE есть почти у всех). Рассмотрим подроб
но библиотеку отк+, поскольку она, на мой взrляд, проще, чем Qt.
Скорее Bcero, атк+ у вас уже установлена, но вам понадобится допол
НliТелыю установить пакет gtk+devel, содержащий необходимые файлы
для разработки GYКnporpaMM.
23.1. Введение в GTK+
Первонз'I3ЛЫIO бибЩlQтека отк+ (далее GTK) была разработана для
использования проrpаммой GIMP, отсюда и название ТЬе GIMP Tool
kit. Со временем библиотека стала использоваться ДЛЯ разработки ДРУI'IIХ
ПРllложениЙ для среды GNOМE. Сейчас GYК это объектноориеНТllро
ванный 11 кроссплатформенныЙ инструмент для создания rрафическоrо
интерфейса приложений, причем созданные С использованием ОТК Ilpll
ложеJfIIЯ независимы от среды GNOМE. Ваше НРl!ложение, написаиное на
GTK, будет ОТЛIlЧНО работать J} KDE ИJtИ любой друrой среде rлавное,
чтобы библиотека GTK была установлена на компьютере.
Сама библиотека GTK+ Сl'ОIП на трех китах:
. Библиотека Glib предНазначена для оnерироnанllЯ с РаЗЛИЧНЫМИ
типами данных. Данная библиотека будет полезноЙ для разработки
любых нриложений, даже не отк. Эта же библиотека СQЦержит функ
UЮ! лля работы с памятью и для обработки ошибок. О типах данных
библиотеки Glib мы поroворим позже.
606
rЛ8sа 23. Разработка rрафИ4еекоrо приложения; библиотека GTK+
. Библиотека GDK (ТЬе GIMP Drawing Кit) библиотека ЮlЗкоrо УРОВ-
ня, ее ФУНКUlfII взаимодействуют с функциями оконной системы (Х
Window). Используется для построения rpафИ<IеСКlIХ примиТIШОВ.
. Библиотека GTK используется для создания rрафическоrо интер-
фейса
23.2. Библиотека Glib
23.2.1 . СтандарТНblе ТИПbl AaHHbI)( библиотеки Glib
Библиотека Glib содержит типы данных, аналоrичные типам данных
языка С, а также такие структуры, как деревья, списки; функции для
работы с памятью и обработкн ошибок. Это сделано для тоro, чтобы
ваше прю!Оженщ' моrло быть леrко портировано на дрyrую платформу.
НаlIример, на OJlИIlX компьютерах тип int может быть 32-разрадным, а на
лруrn.x 64-разрядным (это зависит от архитектуры центральноrо про-
цессора). А если вы используете тип gint, объявленный в библиотеке Glib,
то можете дальше разрабатывать свое приложение и не беспокоиться о
том, как оно будет работать на RISС-машине под у"равлеНllем Windows
NT. В табтще 23.1 перечислены типы данных библиотеки GLib, которые
соответствуют типам даиных С.
Таблица соопютствня 'типов данных G,iЬ.и С
т.блкц.. 23.1
Тип данных С Тип данных Gllb
char gchar
short gshor1
klllg glot1Q
n1 gint
Ьооl gboolean
unsfgned char Quсhзr
tlпsigщю $hort gushort
unв!gned tong gUlQng
Uns.!grH.!d int guint
floa1 gfioat
doubIe g:doubte
IOn9 dQubIe g!doubIe
void" gpointer
Для использования этих типов данных, как и IIрО'ШХ возможностей би-
блиотеки Glib, необходимо полключить заrОЛОВОЧНЫЙ файл glib.h.
607
LINUX: поЛное руководсцю
23.2.2. ФунКЦИИ ДIIЯ работы с памятью
Функции для работы с памщыо библиотеки GhЪ ВЬ1Подняют те же дей-
ствия, что и соответствующие ИМ функции языка С. Вот их прототипы:
gpolnter gmalloc( gulong slze };
gpoi"ter' greal1oc ( gpointer тет. gulong slze 1;
voic.l gfree ( gpoirlter тет );
23.2.3. СтрОКИ И Glib
Библиотека Glib содержит довольно MHoro функццll для работы со
строками, но я перечислю лищь самые с моей точки зрения интересные
(таблица 23.2).
HeKotQp/:.Je СТpQКО8ЬИJ ФУН;ЩН116нбnиоteкм G!ib
Т8ОлИШl23.2
Протarмn OnНc......
Фуl-lКЦИЯ удаляет все пробелы в строке З, 1;ТDflщМ& В начале стрОКИ
gMt' 9strchЩ (gchar" SI (До nepвol"Q pВ<CilTHoro симВола). ДанtЩЯ ФYtlkЦИR МQжеt nриfоДt1fi,.
СА ММ контроля взеденной ПОЛЬ-З0вате.дем ифармации
Qcпar" s!rchomp(gchar з) ФуНII;ЩfЯ УАМяет все. пробелы в строке s, СТОЯЩИ9 В конце стро"и
gсЩl.," gstrs1:rip(gchar. S I ФункЩtя УAЩIR1Э-Т прo(iQЛЫ в начале и D конце 0''1:101(/11
\юid 9 trdown {gcl1ar. ,} Функция neрево.Ф.!Т e БУц:lbl C-rJ)ОХИ S в- нИжний .реrисrp
void gstrup (gchar. э) ФуНКЦИ<;f переВQДиl.flCе букы C"JPQXМ 8 е J!-eР)сНИ J)ВrИсТр
vaid 9 strr-eVйrSе (gChM"' в) Функ:цияпре()(iраэовываеr npt)ПИоС;l1ыпБУК8Ы Bcтpo"lHblO и наОООрРТ
23.4.4. СПИСКИ
Библиотека GHb содержит средства для работы с одно- и ДВУСВЯЗ/JЫМИ
списками. ОсобеюlOСТЬ двусвязноrо списка заключается в том, что по
нему можно перемещаться В оБОIIX направлениях назад и пперед. В
фаЙле gslist.h (Glib Single List) опцсаны средстпа для работы с односвяз-
ными списками, а в фаЙле glist.h для работы с двусвязным списком.
Вот структуры односвязноrо и двусвязноrо списков:
1/ односвязный
typedef struct
struct GSL.ist
{
gpointer data;
GSL.ist *!lext;
}
список
GSList GSList;
11 указатель на следующий элемент СПиска
608
rл..а 23. Разработка rрафическоrо прило"'....ия: библ"оте"" атк+
11 Д8УСВЯЗНЫЙ список
typedef stЛJсt GList
struct GИst
(
gpointer data;
C;List *next;
GI...ist *prev:
)
GList;
// указатепь на следующий эле*еRТ списка
1/ указатель на предыдущий элемент списка
Поле data предназначено для хранения даlШЫХ списка, причем ОlШ MOryт
быть любоrо типа" пеДL, gpointcr это rnn void lll .
Работать со списками очень просто. Для начала нужно объявить
список:
CList *1.ist ::; NULL;
CSList. "'slist -::; NUI...L;
Затем добавить элементы в список. Это можно сделать с помощью двух
ФунКlШЙ !t..liSlаррепdО или gslist""prependO в зависимоcm от ис
ПОJlьзуемоro типа списка:
gchar *el gstrduр(Кэто первый эпемеЕТ-);
list = glistappend\1ist, el);
Функции K..JistappendO и gslist""рrерепd() добавляют элемент в конец
СПl1Ска. Если вы хотите добавить элемент в начало списка, нужно ис
пользовать функции:
g.l ist.....1reper,d I G!.,i.st 'list, gpointer data)
gslistrepend(GSList '.list, gpointer data)
Чтобы !i,.авить НОВЫIl элемент в (Jпределе}fНУЮ позицию, нужно исполь
зовать функции:
CLi.st. 'glist:insert ( Gl,.ist *list, gpoi.nter data, gint {Х)Эition )
c;s.!..fist *gsli$tinsert ( GSL.ist *li,st., gpointer data, gint position )
Здесь position это номер элемита, перед которым нужно вставить
повый элемент. Если position=O, то элемент будет добавлен 11 начало
списка, то есть перед бывшим первым элементом.
Д.ля удаления элемента используются функции:
C;List 'g.lisLrem6ve(GList 'list, gpointer data)
(SLi st *g51ist,remove (GSList * list, gpcinter data)
Для передвижения по списку используются функции:
(cli.scnext 11, gslist,.,ext 1) На "шаr" вперед
g1i.stprev() назад
20 3JIX 3.88
609
UNUX: полное РУКОВОДСТВО
Вот небольшой пример работы со списком ВЫВОД на консоль всех ero
элементоВ:
// dоublеliзt должен быть определен и содержать элементы
GL.ist 'li.st = doublelist;
while Ilist!=NULL)
(
print[(.'s\n.,list>datal ;
list = glistnext{list);
}
По окончании работы со СПlIСКОМ не забудьте освободить память:
void gHstfree IGLit Чist);
void g_slistfree IGSList 'slist);
Дл сортировки списка использущся функция:
GSList 'gslistsort(GSList * slist, GCompareFunc Е);
Первый параметр это список, !<оторый нужно ОТСОIЛировнть. Второй
ЭТО функция сравнения двух элем.ентов. Вот ее прoтonш:
typedef gint (*GCornpareFunc) (gconstpointr а, gconstpointer Ы;
Данную фУШЩИК) в",-должны наrщC/lть C/lмостоя:reльНQ. Она ДОлжtШ при-
нимать два параметра и возвращать целое значение:
+ если а <l), то 1 (точнее, любое число меньше О);
. ссли а=:; :;t), ТО о;
+ ссл\! а>Ь, то 1 (любое чис;ло больше О).
БиБЛllOтека Glib та!<Же содеРЖ:!IТ средства для работы с деревьями как
бинарными, так и ПрОИЗDОЛЬНЫМИ, но мы эти средства рассматривать не
булем,
23.2.4. Таймеры в Glib
БиБЛlIотека Glib позволяет использовать таймеры в наших nporpaMMax.
}11Я :поrо нужпо:
+ подключить заroлоnочныЙ фaйJI gtimer,h;
+ создать таЙ'lер функцией GTimer *gtimerne\vO;
+ запу,--rить таймер функцией gtimerstart(GTimer *timer);
+ узнать время, отсчитанное таймером gtimerelapsedO;
+ при необходимости перезапустить таймер с помощью функции
gtimer Jeset(GTimer *timer)
. остановить таймер функцией gtimerstop(GТimer *timer);
+ уннчтожить таймер gtimerdestroy(GTimer *timer),
610
rЛ8ва 23. Разработка rрафическоrо приложения: библИQтека GTK+
Стоит остановитЬся подробнее лишь на функuии gtimer elapsed(GTimer
*timer, gulong *mcs). Данная функция 80зврашает число секунд, отсчи.
танное таймером. По адресу указателя *mcs записывается число микро-
секунд.
Пример использования таймера представлен в листинrе 23.1.
Лl'Iстинr 23.1. Использование таймера
#inclu <stdio.h>
#inclцA <glib.h>
#inclu.de <gtimer .h>
.;.пt rnain ()
r
double sec;
gulong ms;
int, :i.;
GTimer *timer gtimernew();
рriпtf('да!пIый цикл будет раБОТаТЬ не более 10 секунд\п" I ;
gtimerstart(timer);
for (il; 1>0;)
(
"ее gtimerelap8ed(timer.&ms);
Н (Бес >101
{
gtimerstop(tirnerl;
printf ("ТаЙмер остановлен. Мкс: %d\n н J ms) ;
break;
gt irnerdestroy (timer) ;
return о;
,
,
611
UNUX: полное РУКОВОДСТВО
23.3. Первая про.-рамма на GTK+
23.3.1. Виджиты
Перед написанием самой простой GТКпроrpаммы нужно разобраться с
терминолоrией отк. Элементы rpафическоrо интерфейса пользователя
окна, кнопки, паля !ЩQда, переКJI'9,!<!-теЛl! I! тому I):о,цобное lIазывютсяя
виджитами,
Основным элементом rрафическоro интерфейса является окно. Виджиты
для размещения в окне помещаются IJ контейнер. В самом окне lJыр3IJНИ
вать виджиты можно с ПОМОЩhЮ вертикаЛhных!rоризонrалhНЫХ баксов
или же таблиц. Второй способ более rибок, ХОТЯ он Может показаться
вам СJlожнее,
Виджиты MorYT реаrировать на сиrналы, например, щелчок МЫШhЮ.
При ЭТОМ вызыuзстся функциябработ'IИК событии (сиrнала), если пы
определили ее.
Работа с виджитами происходи1' по такой схеме:
1. создание виджита с ПОЮШhЮ одной из ФУНКЦИЙ библиотеки отк;
2. определение свойств Юlджита;
3. определение CiП1fалов виджита,. если он должен.реалlpоваТh на сиr--
1l3ЛЫ;
4. размешение виджита в контейнере, то есть ПрlШЯЗка ero к окну;
5. отображение ВИ1IЖIIТа.
Нужно обязательно отобраЩТh ВlfДЖИТ, иначе ero IIИКТО не увидит. Ha
пример, следующий фраrмент кода создает видЖИ'r кнопку с текстом
и отображает ее.
GtkWidget *button;
/"* Рисуем кнопочку с надписью Hello, Аl1 */
button = gtkbuttol1!lewwithlabel (NHe.llo All"):
j* При нажатии кнопки будет вызвана Il'Y-НКЦИЯ hello () * I
gtksigпаlсоппесt I(;TKOBJECT (Ьut.t.опl, .cli.cked'.
(;TKSl(;NALFlJNC 0.1,,110), NULL);
j* Помещаем кнопку в контеЙF.ер *1
gtkcontaineradd (GTK.CONTAINER (wir.dow). bHtton);
j* Отображаем кнопку. "1
gtkwi.dgetshow IbuttOI1I;
612
rлава 23. Разработка rрафичвскоrо припожения: библиотека GTK+
Первый оператор создает кнопку (OOllon), второй добавляет кнопку !I
контейнер. В данном случае контейнером является наше окно. ВИДЖIIТ
window должен быть создан Рallьше: нельзя создать кнопку без окна.
Точнее,. MOJllliO, но тоща она не будет привязана К KaKOМY-JЦlOO окну и
мы ее цеУВIlдIlМ. Функция gtk widget...}how () отображает нашу кнопку.
Не забудьте отобраЗllТЬ и само окно. ПорЯдОК отображения ВIIДЖИТОВ
особой роли не иrрает, но рекомендуется rлавное окно отображать в
lюследнюю очередь.
23.3.2. окна
Сейчас МЫ напишем nporpaMMY. Которая будет формироваn. небольшое
"рафuческое окошко. Начнем сразу с исходноrо кода так будет проще
понять, что есть что.
ЛИСТl'Il'Ir 23.2. Просто" окно (файл f.r51.c)
#include <gtk;gtk.h>
J.пt: mаiп ( i,nt
argc, char *argv[] )
Gtkwidget *window1;
gtkiflit( &argc. &argv );
Wifldowl = gtkwindownew{ GTKWINDOWTOPLEVEL );
gtkwindowset.tit 'е «(;TKWINDOW(windowl) ,'Заrоловок. 1;
gtkwiiJgеtslюw I wiшjО\vl );
gtkтпаif1(J ;
return о;
Сна'laла мы подключаем заrоловочный файл gtk/gt.k. h это необ-
ходимое условие для Toro, чтобы начать работу' с библиотекой GTK. В
вероой строке проrpаммы мы объявляем наш основной (и единственный
в этой проrpамме) ВИДЖIIТ виджит основноro окна:
GtkW.idчеt *Niпdоwl;
Обратите внимание, что ВltДЖllТ объявлен, но работать с ним пока
нельзя. Сначала (обязательно ДО вызова первой GТК-Функции) нужно
613
LINUX: полное РУКОВОДСТВО
вызвать инициализирующую функцию gtkinitO и передать ей два два
параметра арryменты функции mainO, После Toro, как библиотека
инициализирована, нужно вызвать функцию gtkwindownew{), кото-
рая сошает окно (напомню, '!то пока окно объявлено, но не создано).
Tenepl., Korna виджит окна создан, можно установить ero свойства и
определить реакцию на сю'Иалы. УстаНОВIIМ свойство Title (заroловок)
окна. Это делается с помощью функцииgtkwiпdоwsеttitlеО:
gtKwincJowset,_tit.l е (GTKWINDOW (wil1dOWl) , 'Заrоловок') ;
TCDCpb МОЖIЮ отобразить наше окно:
gtkwidgetsI10W( wil1dowl 1;
Чтобы наше приложение МОТЛО реатировать на события оконной среды
(например, щел'IOК мыши), нужно вызвать функцию gtkmainO. ФУНК-
ШIll gtkinit() И gtkmajnO должны присутствовать в любой GТК-про-
rpaMMC.
TeDepb ОТКОМПliлируем наше ПрМQЖ:ение. ДляэтоrOllllедем следующую
команду в командной строке:
$ gcc fiп;t.с -о tirsc 'gtk-config --cflags' 'gtk-config НЬэ'
Флаrи ''1t:K-СОl1fiч --cflags' 'gtk-config .-libs' нужноис-
пользовать при ко,шиляции любой GТК-проrраымы. Если компиляция не
удается, то ироверЬ1"е, 'по вы используете апострофы ('). а не одинарные
кавычки {'}, и что nporpaMMa gtk-СQпftg у вас установлена.
Запустим нашу проrрамму в эмуляторе терминала Х Window (или ОКОНIIОЙ
среды GNОМЕ/КDЕ):
$ ./r:i.rst
Вы увидите окно, изображеНllое на рис.23.1.
Рис. 23.1. простое ОКНО
614
rлава 23. Разработка rрафическоrо приложения: библиотека GTK+
Теnl!p)!ЮtpoeМ окцо и перейдем к терМЩЩJ1У: ОКНО закръrrо, Ы еrо.ролъ
ще.kе'itщ!м, а tерШЩал не освоб ),I. Jf, Наша nPQrраМмацереllrlфует
на событие закрытия ОКНа. По идее, 1Фrда трафическая среда закрывает
окно, протрамма должна завершить свою работу. А наша протрамма
этоrо не делает, Значит, нужно «науч.ить» ее реаrировать на событии
(сиrналы) оконной системы. Для ЭТOI'о нажмите в терминале Ctrl + С и
отредактируйте исходный текст протраммы следующим образом:
Листииr 23.3. Добавим реакцию на заКРЫТ'"1S окна
include <gtk/gtk.h>
i.nt !n<iin I i.nt
(
argc. char. *argv [J )
GtkWidget 'windowl:
gtkini.tl &arg<:, &argv );
wi.nddwl = gtkwindownew( GTKWrNDOWTOPLEVEL );
grksignal<:onnect( GTKOBJECTI windowl ), "destroy",
GTKSIGNl>.LFtlNC ( gtkЛ\аiпquit ). NIJl.L ):
gtkwidgetshowl windowl );
gtkmain () ;
return о;
ФуflКЦIIЯ gtksignalconnectO устанавливает реакцию объекта windowl
на сиrнал destroy и вызывает функцию qtkmаiпquЩ) для завершения
рабаты nporpaMMbl.
А что если нам при завершении работы проrpаммы нужно выполнить
какиенибудь специфич.еские действия, например, удалить временные
фаЙJlЫ? TurJIa нужнuнаписать свою функцию'обработчик события
destroy (листинr 23.4).
Эта функция будет называется destroy windowl {), и мы ,.пропишем»
ее в функции gtksignalconnectO в качестве обработчика события за
кръrrия окна вместо gtkmainquit(). Делать она не будет ничеrо, просто
вызовет стандартную функцию gtkmainquit().
615
LINUX: полное рУКОВОДСТВО
Листинr 23.4. Ao6aS)1geM собственную функцию-обработчик
завершения работы
#include <gtk/gtk.h,.
void destroywindowll GtkWidget*widget, @ointer data);'
int main( int
(
argc. char *argv(] )
GtkWidget *windowl;
gtkinit( &argc, &argv );
windowl = gtkwindownew( GTKWINDOWTOPLEVEL 1;
gtksignalconnect ( GTKOB,1ECT I windowl ), "destroy',
(GtkSignaH'unc)dest,roywindowl, &wiпdowl );
gtkwidgetshowl windowl ):
gt kmаlпl ) ;
return( О >;
void de$troywihdDWI{ GtkWidget *widget, gроiпtеr ааса!
(
gtkInainquitl):
23.3.3. Изменение размеров окна
Вам кажется, что QJ{HO СЛИШКQМ маленькое и ие ПОДХодит для нашей
ПРOJl'аммы? Для изменения размеРОll окна лучше всето использовать
функцию
void gt.kwindoWEetdefaultsize IGt,kWindow *window,
gil1t width. gint 11eIgth);
Эта функция устанавливает ширину окна window равной width, а высоту
heigth.
616
rлава 23. Разработка rрафическоrо прило.жения: библиотека GTK+
для иэмснения позиции ОКН3 На экране ИСПOJlьзуетСЯФУНКЦIIЯ
void gtJcwidget.setupos i t ion (GtJ':Windget 'Vlidget,
gint coordx, gint coord);
эту же ФУНКЦИЮ можно использовать для изменения расположения лю-
бою виджита не обязательно, чтобы последний был окном.
Первая функция объявлена в файле gtk/gtkwlndow.h, а вторая
в файле gtk/gtkwldget, Ь:
#lnclude <gtk/gtkwindow. t\>
#include < gtk/gtkwidget.h>
gtkwi.ndowseCdefaultsi "е (wi,ndowl, 200, 300);
gtkwigdеtsеtuроsitiОП(Wiп'JоWl, 50, 501;
23.3.4. Обработка сиrналов
Перед тем, как перейти к следующему пункту, нужно еще раз рассмо-
треть функцию gtkSigпаlеоппесt(). Данной функuии нужно передать
четыре параметра:
. GtkObject .obJect объект, которому может быть послан,сиrнал;
· сопst gchar *name имя сиrнала, например, «destroy»;
. GtkSigпаlFunс Сцпс ИМЯ функции обратноro вызова,то есть функ-
ции, которая будет ВЫЗВана для обработки СШ'Нала:
. gpointer data любые ДаНные, которые будyr переданы фУЮЩИ!l-
обработчику.
Что такое сиrнaiI? Как только ПОЛЬЗOlштель переfестил МЫШЬ, оконная
среда посылает ПРlшожеНlIЮ С!lПIaJ1, оповещающll/! О том, что МЫШЬ была
перемещсна. Как ТОЛЬКО пользователь щелкнул мыщью, приложение
получит сиrнал об этом щелчке. Обрабатывать все сиrналы может OIшо.
но удобнее для каждою виджита установить собственную реакцию на
события.
Функция, которая обрабатывает сиrнал, иазывается по-разному: функ-
ния-обработчик (мы будем использовать именно это название), функция
обратноro вызова и callback-функция. Такой ФУНКцин нужно передать
два параметра (их передаст сама GTK):
. GtkWidget *widget виджит;
. gpointer data данные.
Параметры, КО1'орые нужно передать обработчику, зависят от передана-
eMoro сиrиала. Например, если бы мы передавали не сиrнал «destroy», а
сиrнал «dеlеtе-еvепt». то нужно было бы указать уже три параметра:
617
LINUX: полное рУКО80ДС1ВО
. GtkWidget *widget виджит;
. GdkEvent *еуеп' событие;
. gpointer data данные.
ВОТ наиболее часто используемые СIIfJi3ЛЫ:
. button.JIressevent нажата левая кнопка мыши:
. buttonJeleaseevent левая кноrпса отпущена;
. mоtiоппоtirуevепt движение мыши;
. deleteevent удаление объекта;
. destroyevent уничтожение объекта;
. keypressevent нажата клавища клавиатуры;
. key Jeleaseevent клавиша отпущена;
. enternotifyevent указатель мыши вошел в пределы объекта;
. lеаvепоtirуеvепt YK<uaTe.J!1> мыШИ вышел заnpenелы объекта;
. focusinevent объект стал активным (получи фокус);
. focusoutevent объект не ю-тивен:
. drabeglnevent начало переМещеlП1Я объекта;
. dralLrequestevent запрос на перемещение объекта;
. dralLendevent перемещеmiе объекта;
. dropenterevent объект перемещен.
Наиболее часто используемые события GDK (используются в ФУНКЦIIИ.
обработчике) переЧl1слены НliЖе:
. GDKNOTHING не ПРОИЗ0шлоникакоro события;
. GDKDELETE улалеиие;
. GDKDESTROY уиичтожеJillе;
. GDKMOTIONNOTIFY уведомленне о перемещении;
. GDK ВUТТОNРRESS нажата любая кноика мыши;
. GDK lВUТfON PRESS нажатие первой кнопки мыши:
. GDК=2ВUТТОN=РRESS Нмщтие второй кнопки мыши;
. GDКЗВUТТОNРRЕSS нмщта третья К\iОЩ;З;
. GDКВUТТОNRЕLЕАSЕ кнопка (любм) отущена;
. GDKKEY PRESS иажата клавиша;
. OOK КЕУ RELEASE клав!ШIа отпущена;
. GDKENTERNOTIFY указатель мыши в пределах объекта (вид
жита);
. GDKLEAVENOТJFY указатель мыши вышел За пределы Bllll
жита;
. GDKFOCUSCHANGE изменения фокуса ввода;
. GDKOTHEREVENТ друrое событие.
618
rлава 23. Разработка rpафическоrо ПРИl10жения: библиотека GTK+
23.3.5. Виджит событий EventBox
Далеко не все видж:иты связаны с окнами. Например, GtkLabel (надпись),
GtkTabIe (контейнер-таблица), GtkHBox (rоризонтальныЙ контейнер),
GtkVBox (верПlкальный контеЙнер) и некоторые друrие с окнами не
связаны.
Если нужно, чтобы эти виджиты реаrировали на определенные ситнмы,
нужно использовать виджит EventВox, позволяющий привяззть сшкал к
не связанному с окном виджиту. Следующая проrpамма демонстрирует
прИ8ЯЗКУ события buttonpressevent к виджиту GlkLabel.
Листинr 2З5. Виджит EventBox
#include <gtk/gtk.h
int main( int argc, char *argv[) }
{
GtkWidget
GtkWidget
GtkWidget
*windowl:
'* eventboxl,-
* label ; //
11 rЛавное ОКНО
1/ eveJ1tbox
надпись
/* Инициализируем GTK */
gtkinit( &argc, &argv ),
/* Создаем окно с заrоловком "Надпись */
windowl gtkwindownew( GTK\HNDOWTOPLE\fEL 1;
gtkwindowsettitle( GTKWINDOWI windowl ), .НаДnИСЬ. 1;
1* УстанавnИваем реакцию a закрытие OKH */
gtksignalconnect(GTKOBJECT(windowl), .destroy',
GTKSIGNALFUNC(gtkexitl, NULL );
1* устанавливаем ширину рамки контеЙнера оКна */
gtkcontainersetcborderwidthIGTKCONТAINE[{(windOW1j, 101;
j* создаем eventbox *!
eventboxl gtkeventboxnewll;
1* помещаем eventbox в контеЙнер */
gtkcontaineradd( GTKCONТAINER( windowl 1, event.boxl J;
/* отображаем eventox */
gtkwi.dgetshow ( eventboXl),
/* создаем надпись * I
label = gtklabelnewl "
Click }1're to exit.
'С );
619
UNUX: полное PY1<0BOДCТSO
/* помещаем надпись в контейнер eve!1tbox */
gtkcontaiheradd (GTKCONTAINER ( evet!tJ>oxl ). label);
/' отображаем окно '/
gtkwidgetBhow(label};
/' устаналиваем реакцию GtkLabel на щелчок */
/*(при щелчке BOД) */
gtkwidgetseteventB (event.Jx>xl. GDк...ВUТТONРRЕSS'!ASК ):
gtksignalconnect( GTKOBJECT( eventboxl ).
'bиttonressevent'.
GTKSIGNALFuC( gtkexit 1. NULL );
gtkwidgetre"lize (eVentboxl) ;
/* изменяем курсор над надписью
курсор превратится В руку *;
gdkwindowsetcиrsor( eventboxl>window.
gdkcиrsornew(GDKHAND1»;
/* отображаем OKHO k /
gtkwidgetshow(windowl);
gtkmain() ;
return о;
ОТКОМШ1Лируйте и запустите протрамму. Над наДПlIСЫQ указатель мыши
должен принять вид руки (Как в браузере над ссылкой). При щелчке на
надписи протрамма будет заКрЬ!'fа.
Если вы ХO'fите создать надпись на русском языке, то ПОДКЛЮ'lите 381'0-
ЛОВОК locale.h и вызовите функдию:
setlocale( LCALL. "ruRU.KOI8R');
Конечно, значение локали у вас може'f БЬffЬ друrим. Эту функцию нужно
вызва'fЬ До ИНИЦИaJ1l13ации GTK+.
Рис. 23.2. Надпись
620
rпзеа 23. Разработка f'рафическоrо 11рилож;ения: бибЛИОТЕка GTK+
23.4. Виджиты
23.4.1. Рождение, смерть и состояния виджита
После создания Вllдж«та управленис ресурсами и памятью, необходи
мыии еМУ. въmолняется автоматически. ВИДЖИТЫ УНИЧТQжаются также
а8томаТ1f'lески при разрушении rлавноrо окна. Но иноrдабывает нуж
но самостоятеЛЬнQ уничтожить виджит. Сделать это можно с помощью
функции:
void gtkwidgetdestroy (GtkWldget *widget);
Эта функщ\Я объявлена в фаЙле gtklgtkwidget.h.ffри уничтожении вид
жита также УШlчтожаются все еro дочерние В1fДЖИТЫ.
Если вы освобождаете ВИДЖИТ из контейнера функцией:
void gtkcontainerremove(GtkContainer 'cont, GtkWidget 'w);
ТО виджиТ также будет разрушен.
Иноrда нужно перемсстить ВИДЖlff из Одlюrо контеЙнера в друrоЙ без ero
уничтожения. Это можно сделать так (мы будем перемещать наДШIСЬ):
gtkwidgetref(GTKWIDGET(label)1 :
gtkcontainerrernove(GTKCONTAINER(contl), label);
gtkcontaineradd(GTKCON'l'AINER(cont2), labell;
«Спрятать» JНIДЖIП можно С помощью ФУНКЦИИ
void gtkwidgethide(GtkWidget .w);
Отобразить ВИДЖИТ снова поможет функция gtkwidgetshow().
Виджит ..Ожет нахОДИТЬСJ! В одном из СОСТОJ!НИЙ:
. GТКSТАТЕNОRМAL норма.льное;
. GTKSTATEACТIVE активное (например, нажата кнопка);
. G1'KSTATEPRELIGrn над виджитом находится указатель
МЬJШIl;
· GТКSТАТЕSELEСТЕD ВИДЖИТ выбраН (уcrюЮI!JIСН фокус ВВОДа);
. GТКSТАТЕJNSENSI11VE внджит не pearиpует на BВQД (Сllrnалы).
Определить состояние виджита можно так:
GTKWIDGET(w)>state
или С помощью макроса:
GTKWIDGETSTATE(wid) .
описанноrо в файле gtklgtkwidget.h
621
LINUX: попное рукОВОДСТ80
Сделать ВИДЖИТ неаКТИВI!ЫМ можно так:
gtkwidgetsetseDsitive{widget. FALSE);
Если второй параметр Функциц gtk:.:widgetsetsensitiveO будет равен
TRUE, ВIIДЖИТ widget СТанет актиlщы..
Чтобы наш ВИДЖИТ цолучил ФОКУСllвода, нужно использовать фymщmo:
gtkwi<1getgrabfocus(widget);
23.4.2. Упаковка виджитов, пол" вводам кнопки
Для размещения (упаковки) виджита 11 окне используются контейнеры.
Существуют два ос;щвных Вllда контеЙНеров. Первый вид в каЧестве
прародитеШI исцользует объект класса GtkBin, а второй объект класса
GtkContainer. Контейнеры nepBoro вида MOryT иметь только олин дo
черний виджит, поэтому они испо.льзуются для создания специфических
ИlIтерфейсов: одноЙ кнопки, рамки, окна.
Контейнеры BТOporo вида БOJlее ФУII1ЩИОНалы!ы оИИ MOryт иметь MHOro
дочерних виджитав. Чаще Bcero пспользуются контеЙнеры:
. GtkHBox позвмяет размещать виджиты roризонталы!;;
. G!kVВox используется ДJU! вертикальноro размещеНИя ВIIДЖJrrоо;
. GtkFixed позволяет размещать оиджиты в фиксироваиных KOOpnlI
натах;
. G!kTable ПОЗllOляет упаковывать IШДЖИТЫ о виде таблицы.
Наиболее удаЧНЫ'I, на мой взrля.д:, ЯВдJIется контейнер GtkTabIe, ПОЭТОМУ
в ЭТОМ параrрафе мы paccMOTplfМ именно ero. GtkTabIe можС1' с успехом
замснить И rОРНЗОRТальный, и вертикальныЙ контейнеры что нам стоит
залать таблицу, состоящую или одной строки или 'одноrо СТOJlбца?
Кроме контейнера GtkTable, о эroм naраrрафе будут рассмотрены:
. поля для ввода текста н обработка введенной шrформации;
. кнопки;
. файлооый овод/оывод.
Сейчас мы иаrшшем небольшой IЮнфиrуратор, который будет 1!НОСI1'fЪ
изменения в фаЙл /etc/resolv.conf. Наl10МНЮ вам формат этоrо
файла:
dOJnain f'irma .l\1
nameserver 192.168.0,1
nameserver 192.168.0.2
622
rлаВ8 23. Разработка rрафическоrо ПРИf10жения:библиотекэ GTK+
Директива domain определяет наш домен, а две директивы nameserver
первый и второй DNSepBepbl, соответственно. Наш КОНфl1rуратор не
будет вносить изменеНlrя в настояшиЙ файл /etc/resolv. conf ДЛЯ
зтоrо нужны права суперпользователя. При желан.ии можно будет потом
скопировать файл resol v. conf, сrен.ерировзнный нашей проrраммоЙ,
в каталоr / etc.
На рисунке 23.2 изображеНа уже I'отовая проrрамма. Работает она так.
Korдa пользователь введет что-нибуль в поле ввола и нажмет Enter, про-
[рамма отобразит введенный им текст на консоли. KorJla пользователь
нажмет Ок, введенная ИМ информаllИЯ будет еще раз выведена IIa кон-
соль И записана в файл. При нажатии кнопки Quii проrрамма завершит
свою раб<ny. Она должна TalOКc завершить работ}' при нажатии кнопки
закрытия окна в GTK проrраммист сам определяет реакции На стан-
Jlaprnble кнопки.
Как видно из рисунка, нам понадобяТСЯ три ЦQЛя ввода, три наДПI!СИ и
две кнопки. ПОЛЯ ввода мы будем хранить в массиве:
GtkWidget *еdit(З];
Создать поле ДЛЯ ввода можно с помощью функции gtkentrynewO:
edit[i] = gtkentrynewl);
, .. rI?5-f)lvеr [!]
00
Domain
ONS.'-
оNЗ" .z-
firtna.ru
192181'1Д1
192, 1 '06Д .._.
ОК
QUil._.J
Рис. 23.3. УчеБNЫЙ КОНФИFYраrор
623
UNUX: полное рУКОВОДСТВО'
ПOC!Jе создания поля необхо1UfМО ВblЗвать функцию gtkelltry set editabIeO,
иначе пользователь ничеro не сможет ввести в это поле.
gtkепtry8еtеditаblе(GТКENТRУ(еdit[i]), 1);
Ну и, само собой разумеется, нужно установнть реакцию на нажатие
КIIавиши Enter ситная activate;
gtk8ignalconnect(GTKOBJECT(edit[iJI, "activate",
GTKSIGNALF{JNC(entercallback), edit [i] );
Весьма желательно lIа этапе отладки протраММЫ Вllдеть введеllНУЮ
Иllформацию на КОIIСОЛН. ддя зтото нужно ШЩИсать такую функцию
enter callbackO, которая ВЫВоДЩЩ бы содержимое поля на консоль. По
лучить введенную 'пальзоваТ\Jлем IШформацию очень леrко;
domain = gtkentrygettext(GTKENTRY(edit[()J»),
dns1 = gtkentrygettext (GTKENTRY (edit [1].»;
dns2 = gtkentrygettext(GTKENTRY(edit[2J),
Реакция на нажатие кнопки Ок будет следующей;
void writetofile( GtkWidget *widget,
gpointer data)
/" С помощью функции gtkentry gettext (1 мы rюпучаем
введенный Пользователем
текст из полей ввода */
domain gtkentrygettext{GTKENTRY(edit[O])I;
dns1 gtkentrygettext (GTKENTEY (edit (1) )',
dns2 = gtkentrygettext(GTKENTRYledit[2J)),
j* ВЫВОДИМ прочитанный текст на консоль */
grint ("Domain %з\п', domain);
g.....print ("DNSl %8\П" , dMl1:,
g.....print ("DNS2 %8\П", dnе2);
/* Пере записываем файл resolv.conf в текущем каталоrе '/
if ({resoiv = fopen("resolv.conf"."w"11 == NШ,LI
{
1* Наверное, ие'r места на диске или прав маловато... * f
g.....print ("ЕНН: Cannot ареп rе8аlvе.сопf О1е\п"):
gtkmainquit (),
}
/* Запись 8 файл */
fprintf(resolv,Ndomain %s\nH,dornaiп};
fprintf{resolv,"!lameserver %з\п" ,drlslJ;
624
rлава 23. Раэрабorка rрафИ4ескоrо ПрИЛQЖения: библиотека TK+
fprint.f {resolv (nnames€,!"v'(O(.l." %S\!1 Л 1 пs2) :
fclo8e<.re-s-о1vJ i
Если ваше ОЮlО должно содержат!> мноro надl1lfсей, то я рекоМендую вам
11О"'упать так: объявить всеroОIlИУ переменную,3атем создать надпись,
поместить ее в контейнер. затем опять создать надпись с ИСПО,1IЬЗованием
этой же перемеииой, поместить ее В контейиерит.д. Примерпотак:
label = gtklаЬеlпеw( "Dоrnа'iп, ");
gtktabJ.eattachdefaults IGТi'LTAВLEltable). label, О, 1, О, 1);
gtkwidget:show (labe 1 J ;
label со gtklabelnew ("DNS "#1, ");
gt:kt:ableatt:ach....default5 (G'l'K..:rAВLE;(tab1e), label, О, 1, 1, 21;
gt:kwiqgetshovl (labell;
label = gtklal)e.l"ew'" DNS #2, ");
gtktableattachdefault:s (G'l'KTAJiLE (t.ab1e), 1а:ОО1, О, 1, 2, 3);
gtkwidgetshow (1abel);
ЛИС"fИнr 23.6 содержит полный код КОllфиrypатора Resolver.
Листинr 23.6. Файл resolverc
#include <gtk/gLk.h>
#includ.. <"tdlib.h>
F-iпсl1.Jdе <stdio .h>
gchar *domain, *dnsl. *dns2;
/* Массив ИЗ ТреХ полей ввода. П&рвое предназначено для
НВОДа ИМенИ домена, два ВТОрЫХ [1] и [2] для BOДa
I.радресо13 cep8epdEI DNS*/
C;t:kWidget *edit [3);
/* Наш файл */
YILE .....1esol v
,-' * ФуНКЦУ'..я записи в файrt * J
void writetofile GtkWidgel;: *widget
gpointer data I
625
UNUX: попное ру1(О80ДСТВО
{
; * с помощью ФУНКЦИИ gtkentry gettext () мы получаем
введенный
пользователем текст из полей вэода */
dornain = gtk....entrygettext(GTKENTRY(edit[O]»).
dnеl = gtkепtryдеttехt(GТКEN'I'RУ(еdit[lj»;
dnе2 = gtkentrygeCtext(GTKENТRY(edit ОН» ;
;* ВЫВОДИМ npочи:таннblЙ текст На консоль */
g....print ("Do:nain %$ \п", domainl;
g""print ("DNSl %$\П', dnеl).
g....print ("DNS2 %$\П', дП$2);
1* Перезаписываем файл resolvcQnf в текущем каталоrе */
if «re$olv = fopen("re$olv.conf",'w'» == NULL)
{
/* Наверное, нет места на диске или прав маnQБато.. */
g....print ("ERR: Cannot ореп re$olve.conf fi1e\n"l.
gtkmainquit ();
)
;* Запись в файл *;
fprintf(reso1v,"domain %s\n',doninl;
fprintf(reso1v,'nameserver %s\n',dn$l);
fprintf(reso1v,'nameserver %е\п',dnе21;
fc10se (reso1v);
;* Эта фУНКЦИЯ будеТ запущена, коrда пользователь нажмет
кнопку закрытия окна или НОПКУ Quit */
gint deleteevent( GtkWidget *widget,
GdkEvent *event,
gpointer data)
1* Функция gtkтainquit() используется для завершения
работы GТКпроrраммы. Не нужно для этоrо использовать
exit () *;
gtkrnainquit ().
return{FALSE) ;
)
1* Каrда пользователь введет текст инажмет Enter t
введенный им текст
будет вывеДЕН на КОНСОЛЬ */
void entercallback( GtkWidget 'widget,
626
rлвва 2З, РазрвбоТl<В rpIlф.....ескоrо приложения: б..блИОТfжа GТК+
GtkWidget *entry ,
domain = gtkentrygettext(GTKENTRY(entry)l;
printt{"Domain: %6\n", domain);
int main! 1nt argc,
char *argv[ ]
GtkWidget *window;
GtkWidget *button,
GtkWidget *table;
GtkWidget *label;
/ * Окно * /
[* Кнопка */
[* Таблица для размещения виджи'I'OВ */
1* Надпись */
[* КаК1ЩЦИте, все lщцll<ИТЫ ОДноrо т;ща GtkWidget:,
поэтому мы моrли бы 6бойтись даже тремя виджитами для
окна, таблицы И для всех ОСТаЛЬнЫХ элементов GUI*/
int i;
1* Инициализация любой GТКпроrаммы */
gtkinit I&argc, &argv);
[* Создаем новое окно */
window = gtkwindownew (GTKWINDOWTOPI.EVEL):;
/* Устанавливаем .заrОПОЕОК окна *1
gtJcw1ndowsettitle (GTKWINDOW !wfhdow), "Resol ver") ;
/* Устанавливаем реакцию На кнопкуакрытияокна.
Сиrнал deleteevent ,Вызываем ФУНКЦИЮ delete"Vent (1 ,
которая ОIТИсана выше */
gtksignalconrlect !GTKOBJECT (window), "deieteevent",
GTKSIGNALFUNC (deleteevent), NULL);
/ * Устанавливаем рамку окяа * I
gtkсопtаjлеrsеtЬоrdеrwidth ((,"I'!LCON'rt\INE;R ,(wnфw), 20);
[* Создаем ,тбnицу 3хЗ */
table: gttaplenew (3, З, TRUE);
[* Ilомеща.еtJ"'таf;\лицу в контейнер. ОбязаТеn!>но!. */
gtkc():nt:aineca.4d (GTKCONTAINER (wit\ФЖ), tablel;
/* Рисуем надписи, помеЩаем их 8 табду и оrображаем.
Обратите внимание, что в этом случае НаМ Не HO
объяв1l.ЯТЬ отдельную перемен:ную для .каждой надписи ./
627
UNUX, полное pyt(08OДCТ80
label ; gtklabelnew('Domain: ');
1* о }{оординатах ячеек поrОБОрИМ после ЭТОI'О листинrа у/
gtktableattachdefaults \GTKTABLE(table),
label, а, 1, а, 1);
gtkwidgetshow (lаЬеl);
lаЬеl = gtklabelnew('DNS #1: ');
gtktableattachdefaults (GTKTABLE(table),
label, О, 1, 1, 2);
gtkwidgetshow (lаЬеl);
1аЬеl ; gtklabelnew('DNS #2: ');
gtktableattachdefaults (GTKTABLE(table),
1abel, а, 1, 2, З»)
gtkwidgetshow Ilabe1);
1* Заполняем наш массив полей ввода. По аналоrии с
De1phi, я Назвал массив edit[J*1
forli=D; i<3; i++)
{
/* Новое поле */
edit[i] = gtkentrynew();
j* Если забыть этот оператор пользоватедь
ничеrо не cмoeT ввести *1 .
gtkentryseteditable(GTKENТRY(edit[i]), 1):
1 * OnpeneтreM одну ддя e)\: реаКЦИl) На сиrнал
activate нажатие Enter*1
gtksignalconnectIGTKOBJECTledit[i]), 'activate',
GTKSIGNALFUNC(entercallback) ,
edit [iJ ) ;
1* ПомеЩаем edit[iJ в абцицу *1
gtktableattachdefaultB (GTKTABLE(table),
edit[i], 1,2, i, i+1);
j* Показываем */
gtkwidgetshow (edit[i]);
}
/* Создаем кнопку Ok., помещаем в таБЛИЦУt
определяем реакцию на нажатие и ПОКазываем */
button = gtkbuttonnewwithlabel ('Ok');
gtktableattachdefaults (GTKTABLE(taЫe),
button, 2, З, О, 1);
gtksignalconnect(GTKOBJECT(button),'clicked',
GTKSIGNALFUNC(writetofile), NULL):
gtkwidgetshow (buttonl;
628
rлава 23. РаэраБОlка rрафическоrо прилож,*,ип: библиотекаGТК+
1* То же С<ll-юе для KI-1QПl{И Qui.t .. I
:Ьuttоп = gtkbuttonne"cwi thlab81 ('ОиН');
gtktabledttach..defau1Lt5 (GTKTAВLE 1 table) ,
.buttOf 2, З, 2, .3) i
gtk..-.sig!talconnect ((j'i'KOJ:jJI::C'I' !button) , 'с lickeid" ,
GTKSIGNACFUNC Idel",te"vent). NULL),
gtkwidgetshow Ibtlttorl);
gtkwidgetshow (table); /' Показываем таблицу */
gt,kwidgetstloW (Wihdow') ( J"* Показываем ОКНО '*1
/Запускаем GTKnporpaммy '/
gtkmain ();
return о;
я стар3JIСЯ писать подробные комментарии, >{(' все же Koe'rr" ш:талось
11 TYMatle. Это координаты ячеек. РаССМОТРIIМljащу таблицу 3х3;
ёаЫ", = gtktablenew 13, 3, TRUE);
о 1 2 3
Domain Попе ОК
1
DNS 1 Попе
2.
DNS2 Попе Quit
3
Сначала указываются координаты по Х, затем. по У. Вот координаты
кнопкиОk: 2,3,0,1. Это означает, что кнопка.буде'l' раСПО'!tожена в no
следнем столБЦе (между 2 " 3), 110 В первой строке (между О и 1).
gtkti\blезt:tафdefаults (шI\..тАвLE(tаыl),, buttoo, 2, 3, а, 1) i
Подробнее рассматривать контеЙнер GtkTi1ble я не вижу смысла;
основиые операции, я думаЮ, вам понятиЫ.'tПo создаllJtетэблицы с
укаЗaIOlеМ ее размерности и д"бавпеиие 11 1'аБJ1iщу 81IДЖll1'Э функцией
gtk....tаыеашlсh.:..:defацltsО, Еще раз напомню о необходимости отобра-
жения ВIIДЖИ'ТОВ, помещенных в таблицу, 11 самОЙ'таБЛИ!lЫ:
gtkwidgetshow( tabl е) ;
Теперь откомпилируем нашу про:rрамму:
gGC П'''91v.с o resQlv 'gtkconfig сПаg5'
'gtk..config .'libs'
I1porpaMMa gtk"'Config сообщает КОМПИJfЯТОРУ асю необходимую инфор
маUIIЮ о библиотеке GTK.
62g
UNUX, полное PY1<0BOДCТIIO
Обратите внимание lIа директиву
#include <gtk/gtk.h>
Обычно файлы заrоловков GTK каходятся в друсо/о! каталоrе, например,
gtk1.2, но это не имеет значения все необходимые параметры укажет
про!,!,амма gtk-confjg.
В заКJIючеиие Этоrо пункта перечислим события, характерные для кнопок
(табшща 23.3).
События кнопок
Таблица 23.3
Co6wткe O"MCI'H
C1ici(Bd ЩВjlЧОК
pressd Кнопка нажата мышью (м nC11\'.1l не Dтпущена)
released Кнопка оmyщеН8
enter Уквэarе11l..МЫWИ в предела 'f(HOnIOo1
leave УкQ3Ц]'&Лс. МЫШИ вышел З пределы КНOnKK
23.4.3. Перекпючатели
Переключатели бывают двух типов: зависимые (radiQ buttons) и незави
симые (checkbultons). Переключатели являются кнопками, поэтому для
них характериы те же события, ,,то и ДЛЯ КНОПОК.
Начнем с независим:I,\Х иереключателей, так как ОIlИ проще в реализации.
Создать такой переКJIючатель можно с помощью ОДНОЙ из ФУНКЦИЙ:
GtkWidget *gtkcheckbuttonnew( void 1;
GtkWidget *gtkcheckblltton....newwithlabel ( gchar *lаЬ,,1 );
Первая создает nерек:лючатель без надписи (если вы хотите указать над-
ШIСЬ отдельно), а вторая с НЗДl1Исью, которая обычно отображается
справа от переКЛЮ'lателя. Затем нужно, как всеrда, поместить виджиты
n контейнер и отобразить.
Зависимые nереКЛЮ'lателll можно создать тоже с помощью двух аJlало
rH'IHblX функций:
GtkW1dget *gtkradiobur..tonnew( GSList *group );
GtkWidget *gtkradiobuttonnewwithlab€l( GSList *group,
ghal- *label );
630
rЛ8ва 23. Разработка rрафическоrа приложения: библиотека GTK+
Параметр group указывает на ПРlшадлежность переключателя к rруппе.
В пределах ТРУППЫ активным может быть только один переключатель.
rруппу можно создать Функцией;
GSList *gtkrаdiоЬuttопrоuр(GtkЭ,аdiоВцttоn *radiobutton );
Однако существует друrой способ, позволяющ"й обойтись без перемен-
ной rруппы Ta. мы сэкономим память, если rpупп мнOfО:
butt:on2 = gtkrаdiоЬuttОnПЕ!wwithlаЬеl (
gtkradio.buttongraup (GTKRADIOB!JT'1'ON
(buttanl)), Ubutton2");
с помощью функции
vaid gtktogglebuttonsetactivel GtkToggleButton
*togglebutton, gint state); .
можно сделать одну из кнопок аКТИDИОЙ.
Следующиi!. }IИСТIIЩ' neMOHcTp1lPYeт работу стремя ЗDЩfCIlМЫМИ пере-
ключателl!.МИ и вертикальным конТеЙнером GtkVBox.
ЛИGтинr 23.7. Зависимые перекnючэтепи
#include <gtk/gtk.h>
#inclllde <glib.h>
.
gint closeapplication( GtkWidget *widget.
GdkEvent *event,
gpointer data)
gtkmainquit();
return (FALSEI ;
int maih{ int argc,
char * argv [ ]
GtkWidget *window NПLL;
GtkWidget *Ьохl;
GtkWidget *Ьох2;
GtkWidget *button;
GtkWidget *separator:
GSList *g!'oup;
gtkinit(&argc,&argv);
631
UNUX, ПOnНООРYtCО8Одспкi,,'
window = \.!tkwindownw (GTKWINDOWТOPLEVEL);
gtjcsignalconnect (ЭТКОВJЕСТ (win<:low).
'deleteevent', .
GTKSIGNALFUNC(closeapplication), NULL);
gtkwindowsettitletGТKWINDOW (window),
"Выберите дистрпбу'З'И!,,*) ;
gtkзопtаiпеrsеtЬоr4еrwidth (GTKCONТAINER
(window), О);
boxl = gtvboxnew (FALSE, О);
gtkзопtаiпеrаdd (GT!CCONTAINER (window). ЬохЦ;
gtkwidgetshow (Ьох1);
Ьох2 = gtkvboxnew (VALSE. 10);
gtkcontainersetborder..J1liqth (G1'К....CONТЛINER (Ьох2) , 10);
gtk.J:юх..Расkstart (Щ'К...J!f:'Щ (boxll, Ьох2, ТRUE, ТRUE, О);
gtkwidgetshow (Ьох2);
button = 9'tk.Jildio...Pц.tj;'Wit1LlaJ;:>e;l (NULL.. *Red Нat');
gtkbox--packstart (G!I'L!'IQX (Ьох2). button.
TRUE, ТRт, О);
gtkwidgetshow (button);
group = gtkradiobuttonroup (ЭТКRЛDтОВИТТОМ
(button) ) ;
button = gtkradiobuttonnewwithlabel(group,
"Mandrake') ;
gtktogglebцttonsetactive (GТКТOGGLЕВUТТОN
(button), TRUE);
gtkbox"'pacstart (GТKBOX (Ьох2), but.ton,
TRUE, TRUE, о),
gtkwidgetshow (button);
button = gtkradiojbuttonnewwithlabe1(
gtkradiobuttongroup (GTKRADIOBUTTON
(button»), "ЛLТ Linux*),
gtkbox--packstart (GTKBOX (Ьох2), button,
TRUE, TRUE, О);
gtkwidgetshow (button);
separator = gtkhseparatornew ();
gtkbox--pacstart (ЭТКВОХ (Ьох11. separator,
FALSE. TRUE. О);
gtkwidgetshow (separator);
632
rлаsа 23. Разработка rрафическоrо пр.wОJКения: библиотекаGТК+
Ьох2 gtkvboxnew (FALSE, 10);.
gtkз:опtаiпеrsеtЬоrdеrwidth (GT!CCONТAlNER (Ьох2) , 10);
gtkboackstart (GТКВ<)х (Ьох1) , Ьох2, FALSE, TRUE, О);
gtkwidgetshow (Ьох2);
button : gtkbuttonnewwithlabe1 ('Ok');
gtksigna1connectobject (GTKOBJECT (button),
'c1icked', GTKSIGNALFUNC(c10seapp1ication),
GTKOВJECT (window));
gtkoxackstart (GTBOX (Ьох2), button,
TRUE, TRUE, О);
GTKWIDGETSETFLAGS (button, GTKCANDEFAULT);
gtkwidgetgrabdefau1t (button);
gtkwidgetshow (button);
gtkwidgetshow (window);
gtklnain();
return (О);
Рис. 23.4. Зависимые переключатели
6З3
LINUX: полное рукоsoдсrво
23.4.4. Список
Виджит CList представляст собоЙ список, состоящиii из НССКОЛЬКlIХ КО.
ланок. Ячейки такою списка МОТУТ содержать текстовые зиачения. Мы
можем обратиты:я отдельно к каждоЙ Я'lеЙке списка. Создать список
можно одной из функциЙ:
GtkWidget *gtkclistnew ( gint. colllmns J;
GtkHid<i,a *gt kclist:jl(\.withtit 1es (gjnt со1 ит!1З,
gchar *tit.les[J );
Псрвая функция создает список без заrоловков, а вторая С заroловкамн.
Параметр соluшпs залает число колонок.
Добавить элемент в сш!сок позволяют функции:
gint o;Jt.kc1ist""prepe1"id ( GtkCI...ist *е} 1st f gcha,r
gir.t gt.kсli,stарреш:l( GtkCList *clist, gchar
*text [) 1;
*сехё[] J;
Первая функция добавляет новый элемент в начало списка, а оторая
в ero конен. Еели вам необходимо вставить элемент в определенную 110-
.зинию, вам нужно ИСIюльЗОвать функцию:
voicl gt,kclist.insel-r._( GtkCList *c1ist, giпt row,
gchar *сехё() J;
Она по.зволяет вставить НОВЫЙ элемент ветроку fOW. НумераЦIIЯ етрок
спиека начинается е О.
Для удаления элементов списка можно использовать одну из функцнй:
void gtkclistremove( GtkCList *clist, giDt row );
vold gtkcl istc1eat. ( GtkCList *cl ist );
Первая удаляет строку row, а вторая очищает oeCl, спиСок.
Рае{;мотрим ЛИСТИНf 23.8, В котором демонстрируется работа со списком
CLisl. Проrрамма снабжена подробными комментаРИЯМII, поэтому реко-
мендую внимательно читать исходный код.
Листинт 23.8. Применение виджита CList
linclude <gtk/gtk.h>
/'" H\'iiiGH дня ФУНКЦ;-;И spt 10са1Е: {) "',1
#include <locale.h>
1* Добавляет С:ПИСО[< оБРд.Бо'I'ЧИК ююпки Добавить * I
void button.addclicke\.! ( 9r'юiпtr cJ.a.ta ")
int. indxi
634
rлава 23. Ра.рабан", rрафическаrа приложени": библИОТека атк+
1* Простой список *!
gchar *dist [4] (2) = {
{ "1., "Red Hat Linux. 1.
{ "2 W , "Mandrake Liлuх },
{ .3.. "ALT Lirщх. }.
{ .4.. .ASP Linux. } };
for ( indx=O ; indx < 4 ; indx++ )
gtkc1istappend ( IGtkCList *) data. dist.( indx} ) ;
return;
/*Обра60ТЧИК нажатия кнопки Очистить */
void buttonclearclicked( gpointer data
(
/* Очищаем список */
gtkclistclear{ {GtkCList *) data) ,
return;
;* Функция прячет/отображает заrоловки *;
void buttonhic'leshowclicked{ gpointer data
{
/ О = сейчас видим заrоповки */
static short int [1а" = о;
if {Паg == 01
{
/* прячем заrоловки */
9tkclistcolurnntitleshide{(GtkCList *) data\;
f1ag++ ;
}
е1ае
(
1* Отображаем заrолоВки */
gtkclistcolutitle5show((GtkCList *) data);
1
return;
/* Данная функция будет вызвана, если пользователь выберет
элемент */
void selectionmade( GtkWidget
gint
gint
GdkEventButton
*clist.
row,
соlшnn,
*event l
635
UNUX: ПО1\нае!,YI<о8ОДСТВ О:\ .,.."" . <.',
gpointer data )
gchar *text;
/*попучаем выбранный т.ексТ {элене1-!'!' списка} */
gtkclistgett"xt IG'rl\CLISTI{\1ist}, row, соlurnn, &text};
1 * Просто выводим ИRфqрИЩfЮ На !<OItсощ, *(
9J>rint('Ebl выбрали ряд'\d. Колонка %а,
текст 8 ячеЙКе %s\n\n'" I lOW. col\1mn, text);
return,
)
int ma.in { i11t
gchar
argc,
*argv () },
GtkWidget 'window;
GtkWidget *уЬох, *hbox;
GtkWidget *scrol1ewindQw, "clist;
GtkWidget *buttonadd, *buttonclear, *buttonhideshow;
gchar *titles(2) = ( "НОМер", 'дистрибутив' );
setlocale( LCALL, 'rЦRu.КОI8R');
11 Нужно вызвать до gtkiпН.11
gtkinit(&argc, &argvj;
wiпdоw=gtkwiпdоwпеw(GТКWINDОWТОРLЕvELI ;
gtkwidget;s"tusiZe (GT!LWIDGET IwindOW;, JOO. 1 SO) ;
gtkwindowsettitle(GTKWINDOW(window), 'Список');
gtkзighаlсопnесt(GТКРВJЕСТwiпdоw) ,
"destroy',
GТI:СsЩN/I.r,FUNС (gtkmainquit J ,
NULL) ;
vbox'.-9't.kyb9new (rSEi' -.?);
gtkcontainersetborderwidth{GTKCQNTAINER(vbox), 51;
gtkcontaineradd(GTKCQNTAINER(windOWI, vbox);
gtk\1idgetshow(vbox);
1* Создаем окно с полосками прок.рутки и упаковываем в
HeI'o список */
scroI1ed\<indow = gtkscrolledwin,:lownew
(NТJLL, NULL);
gtkscrolledwindowsetolicy (GTKSCROLLEDWINDOW
(scrolledwindow), GTKPOLICYAUTOMATIC.
GTKPOLICY"LWAYS} ;
636
rЛ8В& 23. Разрабоnca rрафИl1вскоrо приложения: библиотека GTK+
gtboxackstart(GTKBOX(vbox). scrolledwindow.
TRUE. TRUE, О);
gtkwidgetshow Iscrolledwindow);
1* Создаем список с двумя кодонками */
clist : gtkclistnewwithtitles( 2, titles);
{* Обработка выделения *{
gtksignalconnect (GTKOBJECT (cHst), . selectrow' ,
GTKSIGNALFUNC(selectionmade) .
NULL) ;
{* Устанавливаем тень для рамки списка */
gtclistsetshadowtype (GTKCLIST{clist),
GTKSHADOWOUT) ;
/* Устанавливаем ширину для колонки. Колонки
нумеруются с О */
gtkclistsetcolwidth (GTKCLIST(clist), О. 150);
/* Помещаем список в контейнер *(
gtkcontaineradd(GTKCONТAINER(scrolledwindow). c1istl;
gtkwidgetshow(clist)1
/* Создаем и размещаем кнопки Добавить список,
ОЧИстить, Спрятать/отобразить заrоловок */
hboх = gtkhboxnew(FALSE, О};
gtkboxackstart(GTKВOX(vbox), hЬox, FALSE, ТROE, О);
gtk..Jtlidgetshow(hbox) ;
ЬutФаdd =gtkЬuttоппеwwithlаЬеl('добавить');
ЬuttФrihlеаr = gЬuttоппеwwithlаЬеl{'Очистить'),
Ьutt:<Щ.J'Ishоw =.gtkbutton.....newwith
lаЬеl{'СпрятаьfОТDбраэить');
gbOx"'packstart(G1'KBOX (ЬЬох) , buttonadd,
ТROE, TRUE, О);
gtbo:x...Pa,<:;kst<!\rt (GTlLВOX (hbox). buttonclear.
. TRUE, TRUE, О);
gtbox...pacsta.rt (GTlLBOX (ЬЬс>х) , buttpnhide6how.
'l'RUE, TRUE,O);
1* Связыsаем 06р60ТЧИКИ *{
gtk...вignalconneGt:;object(G'l'KOВJEC1'(buttonadd).
'Glicked.,GTKSIGNALFUNC (button<!\dCCcl1Cked) ,
(gpointer1 clist)r
gtk$ignalconn6<:;tDbje<:;t(GTlLOВJECT(button<:;16ar) ,
'clicked', GТXSIGNALFUNC(buttoncle<!\rclicked).
637
LINUX: полное рУКОВОДСТВО
{gpointer) clistJ;
9 с ks ig!1а.lСtlПI1есt,оЬjесt (GTKaB\'JEcrl' (b1.1t t:'onhide
stlO""'), "clic:ked", "(J'КSI(';NАТ.J,....ПNС (Ьuttопhidеshоw
cl ickeIJ'\, {gрОi.I'1:>]':-) clist);
Jtkwidgеt.$hоw\Ьuttопаdd) ;
gt.kvliljg-etshow \buttO-n91Е.Н"} ;
gt: 1"'LV1idget sho.,; {lJut.tOI1hicleshow) :
gtkwidgetshowlindowl ;
9tК..,П\а.iл () ;
т ",..t[ lirЛ (О) ;
Проrрамма работает так: при нажаТИИ кнопки Добавить СОЗJ[ается СПII
сок, состонuшй из назпаниЙ четырех популярных днстрибутивов 1.iпuх.
Кнопка Очистить ОЧlfшает сr1ИСОК, а Спрятать/отобразить прячет НЮI
отображает ЗЮ'oJЮВКII списка. При шслчке на определенной ячейке СIШ
,"ка на консоЛl, БЫВОДlПСН соответствующее сообщение КООРДlШЗТЫ
ячейки и ее теКСТ.
IJNUX: ПIlIlI.ЮR руковорртво
"clickt.'Hjп, ((;\.:.kЗ.i.gI'Lа11\1rj,С)
{:L.leoki:1(?l, l'ije.cl:lEi1 );
rлава 23. Разработка rрафИ4<!Скоrо приложения: библиотека GTK+
void destroy( GtkWidget *widget, gpointert) I
static void buttonclick( GtkWidget *widget, gpointer data.I';
iI1t main(int argc, char *argv 1) I
(
GtkWidget
GtkWidget
GtkWidget
*window;
'*huttoni
*labe1;
wctr1
gchar
ctrl;
*caption
set1oca1e ( LCALL, .'ruRU. KOI8R') ;
caption gstrdup"'print f (* ДоброI'О времени суток!') ;
gtkinit( &argc, &argv);
window gtkwindownew( GTKWINDOWTOPLEVEL );
gtkeigna1connect(GTKOВJECT(window) ,'de1eteevent.,
GTKSIGNALFUNC (de1eteevent) ,NtJLLI ;
gtksigna1connect(GTKOEJECT(window), 'deetroy',
GTKSIGNALFtJNC (destroy), &ctrl );
gtkwindowsettitle(GTKWINDOW(windowl, caption);
gt kcontainersetbor4erwidth ( Gr!LCONТAINE,R{window),
10 1;
button gtkbuttonnew();
1aЬe1 gtklabelnew ( . Нажмите кнопку . . 1;
ctr1.apPwdOw window;
ctrl.label = labe1; .
gtkcontaineradd( GTKCONTAINER( button ), be1 );
gtkcontaineradd( GTKCONТAINER ( window ), b1.itton );
&ctr1 1:
gtksigI\alconnect ( GTKOBJECT ( button " .c:t.:LckeQ',
GTKSIGNALFUNC ( buttonclick ),
"1 ,З8
641
UNUX: полноеРУКО80АСТ80...
gtkwidget$powll(wipQQw);
gtkmin ();
return(O) ;
11 * '* * *.. '* **** * ** ** *... ****.**:1,.. ** * '* '* * *** ***'*,** * * **** *"* **
void quitconfirm{GtkWidget *widget)
(
GtkWidget *quitform;
GtkWidget *label;
GtkWidget *yesbuttoni *nobutton;
quitform " gtkdialQgn"w();
gtkwindow8et....pos itiQn{G'r!<....WINDOW ( quitform 1,
Gтк....WINРОsсЕNТЕR );
gtkcontainersetborderwidthi GTRCONTA1NER
I quitforro ). 10 i;
label = gtklabelnew I ч\п Вы деЙСТВЦТеЬНQ хотите
выйти? \n 1# );
yesbиttQh " gtkbutto!ЦIewwithlabel ( "Да" );
поЬиttоп " gtkbuttoпl'j.ewwithlabel ( "lIет' );
gtksignalconпectQbject( GTKOBJECT
( yesbuttQl" ), Чсliсkеd', GTKSIGNALFUNC
I gtkwid9'etdestrQY ), (gpointeriwidget );
gtkcQntaineradd IGTKCONTINER( GTKDIALOG
I qиitfQrro ) >actionare" ). yesbtittQnl;
gtksignalcQnnectQbject( GTKOBJECT( nobиt
tQh ). 'clicked", GTKSIGNALFUNC{ gtkwidgetdestroy
). Igpointerlquitform ,;
gtkcontainetadd {GTK...;CONТAINE:R( GTKDIA!.,OG
( quitform i >actiona,.ea ). nQbuttcn1;
gtkcontaineradd ( GTKCONTAINER ( G'rKDIALOG
( quit{9rm '>vbQX ), label);
gtkwindQwsetmodall GTKWINDOW I quitfQrm) ,TRUE);
642
rлава 23. Разработка rpафическоrо приложени.: библиотека ОТК.
gtkwidgetshowall, qцitform );
gint deleteeyentlGtkWidget *widget. GdkEvent *event.
gpointer data)
(
quitconfirm(widget);
return ( TRUE ):
void destroy( GtkWidget *widget, gpoihter
data I
printf(.GOODBYE!.I;
gtkmainquit();
static void buttonclick( GtkWidget *Wldget, gpointer data I
(
static gint i = о;
GtkWidget *appwindow:
GtkWidget *label;
gchar msg(256);
appwindow = GTKWIDGT( «wctrl ')data)>appwindow );
label = GTKWIDGETj «wctrl *)dat)>label ):
i++;
sprintf (msg, Bы нажали кнопку: ',4.,раз (а) '" I i );
gtklabelsettext(GTKABELI label ),msg);
Думаю, текст проrраммы ясен без лишних КОММентариев. Нужно лишь
IIОЯСНИТЬ один очень B!1PMeЦ'f. ОбрlI.тТе'!JRIIмание на то, что МЫ
переопределили обраоотчиlt ДJlЯ события delet",,,-even t.
gtksigпаlсоппесt(GТКОБJЕСТ(wiпdот.,r). .deleteevent.,
GTKSIGNALFUNC(deleteevent) ,NULL);
gtksignalconnect(GTKOBJECT(window), .destroy" ,
GTKSIGNALFUNCldestroy). &ctrl );
643
UNUX: полное РУКОВОДСТВО
Если данный обработчик возвращает FAI.SE, то будет вызвана функ
дия destroyO, которая уничтожит окно. Мы переписаДII функцию
dele1eeventO так, чтобы она всеrда возвращала TRUE, то есть функция
destroyO вообще не будет вызвана. Но в таком случае наше окио вообще
никоrда не закроется, поэтому нужно, чтобы KTOTO позаботился о за
крытии окна. Это будет функция qui!confirmO, отображающая дизлоr
завершения работы.
gint deleteevent(GtkWidget *widget, GdkEvent *еvеле,
gpointer data)
(
q\lit.confirmlwidget) ;
rеt\IПl ( TF.UE );
i
Рис. 23.6. ПроrрамМ8 ТОЛЬКО запущена
Рис. 23.7. Пользователь нажал на кнопку 4 раза
Рис. 23.8. ДИ8лоr завершения работы
б44
fЛАва 23. Разработка rрафИЧG'скоrо приложения: б\'rблиотека GTK+
Теперь рассмотрим обработчики событий кнопок Да и Нет диалоrа:
g':ksignalconnectobject ( GTK08JECT( yesbutton ).
«clicked». GТКSIGNАLFПNС{ gtkwidgetdestroy ).
(gpointer}widget );
gtksignalconnect_object I GTKOВJECT
( nobutton 1. «clicked», GTKSIGNALFUNC
( gtkwidgetdestroy ). (gpointer)quitforrn };
Кнопка yesbut t оп вызывает ФУНКllИЮ gtkwidgetdestroyO и передает
ей параметр (gpointer)widget, то е(.'ть уничтожает rлавное окно приложе-
пия, а кнопка nobutton передает функции gtkwidgetdestroy() пара-
метр (gpоjпtеr)quitfопn. который указывает на окно дпалоrа, то есть прн
!шжатlП' этой кнопки будет закрьrrо само о!<Но нашеro диалоrа.
23.4.7. Меню
Меню nporpaMMb! вручную писать довольно неудобно, поэтому Д)JЯ раз-
работки меню воспользуемся студией разработКи rрафическоro интер-
феЙса Glade.
23.4.8. Иерархия виджитов
G'ckObject
+GtkWidget
I +GtkМisc
I I +GtkLabel
I I I +GtkAccelLabel
I I I 'GtkTipsQuery
I I +GtkArrow
I I +Gt.Jйmаgе
I I 'GtkPixmap
+GtkСоntаi.пеr
I +GtkBi.n
1 .GtkAl igпmепt
+GtkFrаще
I 'GtkAspectFrame
+GtkButton
I "GtkToggleButton
I I . G t: kCh еСКВ!l t t,on
I I 'GtkRadioBLltton
I 'Gt kOpt J.onMen1J
+Gt klt.l':::m
I 'ОС kМепultещ
i I +Gt:kCheck.МenuIt:em
645
UNUX: полное рукавtЩC1:IJo .
I 1 ,,;GtkRаdiоМ"!!Ч
I 'G.tkТеаrоffМепuщimt
+GtkLtstItem . .
I 'GtkTfeeItem
+GtkWindow
I +GtkCDlorSelectialog
I +GtkDialpg .. .
I I 'GtkInputDialog
I +GtkDrwWindow
I+Gt kFileSelection>..'"
I +Gtkoti\:selectiQnti$",log
I 'GtkPJ,ug
+GtkEventBox
+GtkHandleBox
+GtkScrol1edWindow
I 'GtkViewport
+GtkBox
I +GtkВuttonBpx
1 I +GtkНButtonBox
I I 'GtkVButtonBox
I +GtkVBox
I I +GtkolorSelection
I I 'GtkG_aCurve
I 'GtkHBOX
I +GtkCQЦJPO
I 'GtkGtatusbar
+GtkCList
I 'GtkCTr"e.
+GtkFixed
+GtkNotebook
I 'GtkFontSelection
+GtkPaned
i +GtkHPaned
I 'GtkVPaned
+GtkLayout
+GtkList
+GtkMenuShell
I +GtkМenuBar
I 'GtkМenu
+GtkPacker
+GtkSocket
+GtkTable
+GtkToolbar
I 'GtkTree
+GtkCalendar
Б4б
JЛа11!<,23. Р!<зраб<1fI18фччq!«>l'О приложениJI:6иблиоnжa атк+
+GtkDrawingArea
I 'GtkCurve
+GtkEditable
I +GtkEntry
i I 'GtkSpinButton
I 'GtkText
+GtkRuler
1 +GtkНRuler
I 'GtkVRuler
+GtkEange
I +GtkScale
I 1 +GtkliScale
I ,1 'GtkVScale
I 'GtkScrollbar
I +GtkHScral1bar
1 'GtkVScral1bar
+GtkSeparatar
1 +GtkHSeparator
I 'GtkVSeparator
+GtkPreview
'GtkPragress
1 'GtkProgressBar
+GtkData
I +GtkAdjustment
1 'GtkToo1tips
'GtkItemFactary
647
rлава 24
СТУДИЯ GLADE
ЧТО ТАКОЕ GLADE?
ЗНАКОМСТВО С GLADE
РАБОТА С ПРОЕКТОМ
СОЗДАНИЕ МЕНЮ
ИНТЕРЕСНЫЕ ВИДЖИТЫ
LINUX ПОЛНОЕ РУКОВОДСТВО
24.1. Что такое Glade?
в предыдущей rлаве мы рассмотрели далеко це все !lИджиты и далеко не
все Сllrналы, на "оторые должны реаrировать рассмотренные виджиты.
Это было сделано умышленно: для начала вам нужно БЬЩ9 раЗQбраты;л,
'11'0 такое ВИджиТ И «с чем ero едят», а также.I'ЩliЯТЬ, что такоесИПiал
!I функцияобраоотчи,,_ С ЗТQrо момента вам не НУЖНо беспокоиться <)
том, что вы забыли имя Вlшжита, ИМЯ сиrнала или что означает та I!ЛИ
иная масцситцала, вам также не придется писать вручную прототипы
фуик:цийобработчиков. За вас все сделает стуДИЯ разработки rpафИ'lе
CKOI'(} И!lтерФейса Glade. Почему вам не нужно Зllать имя вИJ(жита? B<lM
достаточно .выБР<lТЬ IIУЖНЫЙ Вам виджит lf3 палитры и поместить ero в
контейнер, причем контейнер также представляется визуально. Вам не
нужно риСОваТЬ на бумажке или представлятъ перед собой координаты
ячеек таБЩIЦЫКОl!теliнера Glade, поскольку вы все видите перед собой.
ЕсЛlI вы забьщп (ющ не знаете) имя НУЖIIОro вам сиrнала, GJade прн на-
писании обработчика ПОЗI!(:)ЛИТ вам выбрать нужный сиrнал из списка.
Бел» вам !!ужно замаС!(lfроll/lТЬ определеНllое сьбытие, нет пробле/ol:
Glade не TO!IbI\lJ отобразитII.оступныe MacltЦ, 1ю 11 выведеТ ItJI: Qllисаюш.
Код функцийобрабоТЧJIКОВ Glade также напишет самостоятельно вам
ЛИШЬ нужно булет заполнить тело ФУНКllllиобработчllка. поскольку GJade
пока еше не научился читать ваши мысли.
Что вам нужно ДJ!я работы с Glade? Просто установите пакет glade (011
,;ходит в состав большинства С08ременных дистриБУТlf808) и наслаж"
даЙтесь. Особенно приятно работать с Glade будет тем проrраммиетам.
которые привыкли работать с визуальными средами разраБОТЮf, напри"
мер, Delphi или Visual с.
24.2. Знакомство с Glade
Наше знакомство с Glade мы начнем с разработки калькулятора, но
прежде нужно познакомиться с интерфейсом самой студии. После за
пуска Glade вы УВИl1ите три окна:
649
lINUX: поrtt.юе руководство
. j'ланное окно Glade используется ДЛЯ операций с проектом, напри-
мер, создания, открытия, сохранения, указания опnий.
. Палитра набор ВИЛЖИТОD, которые вы можете помесТ1fТ!. в контей-
нер.
. CBO'iL,Da окно свойств ВИДЖИТОD, D котором отображаются свойсТва
активноrо ВИджllта.
;."",_,,.bii;';
;: .;: ':'?:: ) i;( :ri"i$.,
::::J.oI>1
D,"",'1Iw1
CH.....jJ'.
"r.;СЗffР
;,!!J:t«':' "':}. ""-;'!i'"
"'!!!I
_Ч.';'Е'>
T.!ilc..
;;:j(ЩS:!1ZI
т==$.4:!
",,1.!J
':::;1:1:
Рис. 24. ,. Cryди g Glade
Палитра содержит три набора 8иджитав:
. отк+ OCtlOBa основные виджиты;
. отк + Дополнения дополнительные 8ИЛЖИТЫ;
. Gпоше специалЫlые DИЛЖИТЫ ДЛЯ созлания GNОМЕ-приложе-
ниll.
к основным виджитам относятся:
. Окно основноЙ элемент вашеrо придожения.
. rлавное меню строка меню приложешtя,
. Панель инструментов на этой панели абы'шо находятся кнопки
быстроro доступа к некоторым элементам rлаВНоrо мепю, например,
Создать, Открыть, Сохранить, Выхоа 11 Т.Д.
650
rлава 24 студия Glade
Рис. 4Ф2. палитре
. Ползунок позволяет изменять размеры некоторых ВИдЖитов; обыч
по ползунок ставится между двумя па нелями инструментов.
. Метка надпись.
. Поле ввода текста название ТОВОРИТ само за себя
. Комб. список комбинированный список (СотЬо Бох).
. Текстовый бокс область для ввода нескольких строк текста; может
использоваться в качестве основы простоroтекстовоro редактора.
. Кнопка думаю. этотвдж1fТ в комментариях не нуждается.
. Кнопкапереключатель кнопка, которая МОЖеТ находиться в одном
из двух положений: ВКЛЮ'Iено или выключено.
. Флажок "е зависимый переlUlючатель.
. Радиокнанка зависимый переключатель.
. Список простойcnисок.
. Дерево иерархическая схема элементов.
. Колоночный список это список CList из rлавы 23.
. Колоночное дерево ЧТО-ТО среднее между деревом и колоночным
списком.
. Меню параметров выпадающий список опций, напоминает список
СотЬоВох (см. рис. 24.3. ТИП окна).
. Круrящаяся Кlюпка не знаю, почему ее "ак назами, на самом деле
это поле с кнопками уменьшеиия!уаеличения значения (как поле ввода
ширины или высоты окна, см. рис. 24.3).
651
UNUX: полное рУХОВОДСТВО
Рис. 24.3. Окно свойств
. Индикатор выполнения вы использовали nporpaMMY GnoRPM для
установки пакетов? Пока пакет устанавливался, в небольшом окошке
ползла небольшая шкала, информирующая нас о процессе установки.
Это ИНДIIКЗТОР выполнения.
. Строка статуса иебольшая панель с текстовым полем, точнее. над-
!шсью, содержащеЙ инФОрмацllЮ о t.aтyce I1риложения.
. fоризоmальныЙ,вертикальный разделители эти виджиты также
не нуждаются в комментариях.
. Область для рисования область, в котороЙ можно рисовать мы-
шью.
. Диалоr ПРОИЗ80ЛЬНое Д1Jалоroвое окно.
. Диnлоr выбора файла это наш старыЙ знакомыЙ, работу с которым
мы рассматривали в прошлой rлаве.
. ДиnлО!' выбора шрифта позволяет выбрать шрифт.
. Окно выбора цвета позволяет выбрать цвет.
. fОрllЗOIrrальиыЙ бокс контеЙнер GtkHBox.
. Вертикальный бокс контейиср GtkVВox.
. Таблиuа контеЙнер GtkTable.
. Фиксированная позиция контеЙнер GtkFixed.
. fоризонтnльные панели, вертикальные пансли набор roрИЗО1rrаль-
ных и веРТlIкалЫIЫХ панслей.
652
fлauа 24. Студия Glade
. Записная книжка виджит, состоящий из НеСКОЛЬКИХ страниц, обыч
но НСЛОЛЬ1уется для создания окна свойств.
. Рамка небольшая рамка, обычно используется ДЛЯ объединения
нескOJ!ЪКИХ радиокиопок ИЛИ друтих виджитов, устанавливающих
параметры, в одну труппу.
. Прокручиваемое окно окно с полосами прокрутки.
. Окно просмотра.
Дополнительными виджитами являются:
. rоризонтальная, вертикальная шкала эти элементы похоЖJI на ин
дикатор выполнения, но используются не.для наблюдения за ходом
процесса, а lU!Я установки ЗНачеlШЙ (такие шкалы используются в
диалоrе выбора цвета).
. rоризон'I'альная, вертикадьная линеJlка аналоrичны шкалам, но
немното подрyroму нарисованы (в виде ШlНейки).
. собыrnrrnый бокс это ВIIДЖИТ EventВox, с которым мы уже Знакомы.
. Метка с клавишей ускорения надпись с КJIaJJишей быстроrо Дo
ступа.
. Календарь BIIJVKIIT для выбора даты.
. Ниспадающее меню обычное ниспадающее меню.
. Кривая, rаммакривая служат ДЛЯ отображения различных кри
вых.
. rоризонтзльная. вертикальная полосы прокрутки вместо ЭТИХ вид
JКИтов лучше использовать прокручиваемое окно.
. Предварительный просмотр область предварительноro npОСМО
тра.
. Выбор шрифта, выбор цвета виджlflы выбора шрифта и цвета co
ответственно.
. Диалоr ввода диалоr для ввода информации.
. Изображение используется для ВЬШ0да картинки.
. Пользовательский элемент упраШlения.
. Стрелка.
На вкладке Gnome вы найдете следующие 6ИДЖИТЫ:
. Окно nриложения Gnome создает rотовblЙ шаблон окна приложе
НllЯ С меню, Ilанелью инструментов, кнопками быстроro доступа 11
строкой статуса.
. Диалоroвое окно Опоте ПроlfЗБОЛЬИЫЙ диалоr в стиле Опоте.
. Окно сообщений Gnome используется.для вывода сообщений.
. Окно апоте «О nporpaMMe».
. Выбор цпета Gnоте небольnrая КIIoпкa С изображением выбранноro
цвета, щелчок на которой 11p11ВOД!rr к ПОJlВJ1еliИlO оюrа выбора цвета.
. Выбор шрифта Опоте небольшая КНОпка, щелчок по которой
привод!fТ к появлению окна выбора ШРlуфта.
653
UNUX: попное рУКОВQДСТЭО
. Пиктоrpамма Опоще.
. Кнопка HRef-ссылки Опоще.
. Поле ввода Овоте поле Мя Ц1lОда информации.
. Ввод файла Опоще неБOJl.Ь1I!Qe текстовое поле С ЮIоmcой, щелкнув
по которой, вы увидите диалоr выбора файла.
. Ввод '1ИCJlа Опоще поля 'дmlllвoдa числа.
. Правка даты поле для редактирования даты.
. Шкала красивая шкала, наЩllolпнающая спидометр.
. Часы.
. Строка приложения Опоще $IJIоминает строку статуса.
. Калькулятор уже roтовЬ!Й хащ.кулятор.
. CinomeCanvas область ДmI рисования.
. Список пиктоrрамм.
. Выбор пиктоrраммы раСКРЬnЩЮ!ЩIЙС!! СIШСОIC, позволяющий вы-
брать пиктоrрамму.
. Диалоrовое окно свойств.
. ПОМОЩНИК ОЮlо помощи Gnome.
. Картинка Gnome.
. Аниматор отображает аНИМ!lIн:щанное изображение.
Перечислять свойствц.и сиrналы'iщоo ВIIДЖИТц. я не буду, поскольку в
окне Свойств до такой cтeneНlI всещiосто. что вы разберетесь без моих
коммеffТЗрllеn.
Итак, приступим. Создайте rлав!IblЙ'ВИДЖIIТ оIШО. Для этоro просто
щелкиите мытью иа иконке окна вПалитре. Сразу же после этоrо в окне
СвоЙств вы можете установить свойства пашеrо окна.
Сейчас нас интересуют следуюmli:еСВОlkтва:
. Им!!: имя ВИДЖllТа это идеНТl{фикатор, и оно ДОЛЖНО соответство-
вать праВIIламинanIlсатlЯ имен,идептификаторов,то есть RИкакой
кириллиuы!
. Зaroлооок: зaroловок ОКНа МОЖt'f CQJ1IIpЖЗ1Ъ clIмв(JлыIoбoro алфавlrra. только
пaroМ, в функции main{), не забуш,Те вызввn. фуНJЩlПO ЛОЮlJшзаЦIПL
. Ширина окантовки: ширина рамки окна в ПИКСeJIЯх.
. Тип устанавливает тип окна:
. Тор Level rлаВIIое окно;
. Dialog лиалоrовое окно;
+ Рорнр всплывающее ОЮlО.
. ПОЗIЩIIЯ ПОЦШI окна на экране при запуске:
. None как при разработке;
. Center crporo в центре;
. Mouse в текущей позиции указателя мыши.
+ lllиршlВ, высота МОЖНО yl<aЗaтьзначения явно, а МОЖНО изменшь размер
оЮ{а с помощью МЬПUИ (нropDЙ cnocoб часто О!ill3ываercя удобнее).
654
rЛ8В8 24. СТ'jI1>'" GIBde
Чтобы впоследствии увидеть окно сQOЙcrв !lИДЖИта window (наШeroокна),
нужно перейти в rлавное окно Glade 1f lJыбрать из списка окон иу-жное
Ha1 окно.
Чтобы удалить:
. Контейнер: шелкннте на любом виджнте контейнера правоЙ кнопкой
мыши, выбеРlпе имя контейнера и команду Удалить. Будут удалены
также все дочерние ВНДЖIПЫ коцтеЙlfера.
. 8ИДЖIIТ: щелкните на ием правойкноlЖ<:>Й мыllШ JI выберцте команду
Удалuть.
. Строку контейuера: удалите дочеРIfИЙ вилжи1'. шелкните правой
кнопкоЙ на строке контейнера и 1IыберJПС команду Удалить.
. Окно: в rлавном окне Gla,je выберите нужное вам окно '1 нажмuте
клавишу Del.
Добавьте вертикальныЙ контеЙнер 113 двух строк для размещении вид-
житов. В верхней будет размешено TeKCT01l0e поле 1IIlOда, а в ИИЖlfей
контейнертаБЛlfца, состоящая 113.5 строк J/4 столбцов. В этоЙ таблице
будут расположены кнопки калькулятора.
Поместите в верхнюю строку КОlrrейнера GtkVВox текстО!юе"поле. Пере-
йдите в окно свойств и установите следующиесвойстnа TeKcтoBoro поля
(рис. 24.4):
. Вкл:щкаЭл. .управлении
. РедактИровать: дд
. ВЦДИМОСТЬ текста: Да
. Максимальная ДJlllиа: О
. Текст: О
. Вкладка Обшие
. Высота: 50
. Вцднмостъ: Да
. Чувствительность: Да
. Фокусировка: дд
. Имеет фокус: Нет
. События: 00000о0000000
После 31:01'0 В первую ячейку таблицы добавьте кнопку 11 устаНDвите ее
свойства слеДУЮЩIIМ образом:
. ВкладкаЭл. управ.цеиия
. Ширина о:кaнtовки: О
. Метка: ON
. Вкладка Обшие
. Ширина: 70
. Высота: 70
655
LINUX; полное рУКОВОДСТВО
Рис. 24.5. Вкладка Общие ДЛЯ кнопки
656
У;'"
Ширина:
13!;'ICOTa:
,"'1.;<:.:.;
В'мимость:
Рис. 24.4. Свойства твкстовOfD поля:
вкладка Общие
":.,":,."";",, "
4acrat.IТельн,:
подс.аЗК8;'
Уммчанне: ' ". " ",
, ,
I-1мiiт ума:'"анн
Фокусировка:
Имев, фО"llС:
Собыrия:, ,
Рi>,CЩ.(;DбоIТН':
rоря"не кnзвиш,
rлава 24. СryДИR Glade
Если БЫ забыли (или ие шаете), ЧТО означает тр ИЛ." иное. свойство
ниджита, подведите указатель мыши к метке поля свойства, и рядом с
III1М отобразится [)Одсказка. Если же вам трудно установить маску для
Сl1fiытий, нажмите кнrшку «ш" (рис. 24.5) рЯДОМ с полем ш,tбор" события,
11 вы упидите описание масок событий.
Скопируйте получившуюся кнопку В следующую ячейку (Ctrl+C,
Ct/I+ У,). Для НОВой кнопки устаlll1вите свОйство Метка: СЕ. Проверить,
что находится в буфере обмена, можно с ПОlOшью команды rлавното
меню CНade: ВИд, Буфер обмена.
TO'lHO так же создайте еще 16 кВОIIОК и разместите их так, как показано
на рисунке 24.6.
Сейчас у.,.аиовим функuииобработчики для наших кнопок. Выделите
кнопку ON и перейдите n окно свойств на вкладку Сиrналы.
Рис. 24.6. Калькуляюр
657
UNUX: полное РУКОВОДСТВО
Рмс.24.1. Сиrналы
Выберите сиrнал clicked и Iшжмиrс.О... В поле обработчика введите
имя функции.обработчика, например, onbuttonclick. Можно выбрать
одну из стандартных функциЙ, Н$прftМер, gtkrnаiпquitО, но не для
этоЙ кнопки ЭТО 6едь обрабОТЧИКВКJlючения калькулятора, поэтому
КОД для Hero мы должны будем писать самостоятельно. Теперь нажмите
кнопку Добавить.
Аналоrично создайте обработчики для остальных ФУНКlIИЙ. Советую
давать функциям rЮНlIтные ItМeHa, н<шример, onbutton,"Nclick, r;'le N
число от () до 9, или onpluscIick.
Вот и все, интерфейс калькутrrора построен.
658
rлава 24, Студия Glade
24.3. Работа спроектом
Прежде Bcero нуЖlIO сохранить наш проект. Нажмите кнопку Сохранить
в rлавном окне Glade. Перед сохранением Glade предложит установить
Сlюйства проекта:
+ Вкладка «Общие»
. Каталоr проекта /hоmе/ваше имяlПроекты/Проект сразу Же из.
мените Проекты на Projec\s 11 Проект на имя нашеrо проекта calc.
Использовать наПИСaIrnые кириллиuей названия не запрещается.
но 11 не рекомендуется.
. Нювание проекта: Calc.
. НюваНlIе проrраммы: cak так будет назван исполнимый файл.
. Файл проекта: calc.glade.
. Каталоr исходноrо кода: src (/ProjectsICalclsrc).
. Каталоr картинок: pixmap.
. Язык: С.
. Включить поддержку Gnome: Да.
+ Вкладка "Параметры С»
. Все ОСПIВIITh по умолчанию.
13 результате в каталоrе /ProjectslCalc будет создан файл Ilроекта
calc.glade. Этот файл полностью описывает Нащ нроект на языке XML.
Фраrмент этоrо фаЙла nриведен в листинrе 25.1 просто для общеrо
развития.
Листинr 25.1. Фраrмент фаС1ла праекта calc.glade
<?xml version=Nl.0"?>
<GTKInterface>
<project>
<name>Calc</name>
<progr аrn.....лаinе>саl с< I рт og r атnалlе '>
<directory>< I d.irectory >
<soHrcedirectory>sl.'c</sot1rcedirectary>
<pixmap5directo ry>p i хтаРЕ< I р ixmapsdirec L OlS >
<lапgцаgе>С</lаnguаgе>
<gnomesupport>True</gnamesupport>
<gettextsupport>True</gettextsupport>
</project>
<.widget>
<class>GtkWindow</class>
659
UNUX: ПОI1Ное р}'1<О80ДСТ8D
<:name>wind9wl"'/!'Ie> ./Р,./
<:borderwidth>7<)border"':wfdth>
<:ti t le>wind0"11«tit1e>....,.,.,.
<:tУре>GТк....wЩI)OwТОРLEVE<#:(Ре>
<:роsitiоп>GТк....wINРОsNОNt<jроsitiоп>
<ffiodal >False</modal >
<allowshrink>False<:/allowshrink>
<:allowgrow>True<:/alowgrow>
<autoshrink>False<:/autohrink>
<widget>
<:class>GtkVВox<:/class>
<:name>vbox2/name>
<:homogeneous>Fal sе<:!11ощоgепеоus>
<spacing>O<:!spacing>
<:wldget:>
<class>GtkEntry</Cla$>
<name>entryl<!name>
<height>SO</height>
<canfocus>True</canfqcus>
<editable>True</editable>
<textvisible>True</tevisible>
<textmaxlength>a</txtmaxlength>
<text,.O'</text>
<сЬНд>
<padding>O</padding>
<expand>Falg*and>
<fill>False</iil1>
</child>
</widget>
</widget>
</w1.dqet::>
<:/GTKInterface>
Но кроме этоro файла в катаДQrе Calc Нlfчеrо нет. А еде же исходный
код? А rne картиffЮl? Чтобы Glade сrенерировала ИсХОдНЫЙ код, иаЖМlIте
КНОПКУ Построить в rлавном окне Glade. В результате в каталоrе calc
будет создана структура подкаталоrов, показанная иа рис. 24.8.
660
rлава 24. С;УДИЯ Glade
Рис. 24.8. Струщра катаЛQrов ПрО8/С'та
в каталоrе macros находятся макросы для поддержки среды апоте.
Каталоr ро предназначен только для вас в Hero вы будете вносить
свсдения об изменениях н проекте. Каталоr src содержит исходныЙ код
проекта.
О катмоте эlС нужно ПОf'OlЮрИТЬ подробнее. В нем находятся следую
щие файлы:
. i!lterface.*, support.* эти файлы сrеиеРИРol!аны Glade, и вам не
нужно их редактировать;
. callback.' функцииобработ'rики, Автоматически сrенерированные
фуюшии пер!юна'!аJlЬНО не делают ннчеrо, ЭТО только заrОl'ОВКИ Что
бы паша проrрамма '!То-нибудь делала. аам нужно отредактировать
файл callback.c;
. make.c ВЫ можете редактировать лот файл, если вам ЭТО нужно.
Рассмотрим фаЙл callback.c CJ'O нужно редактировать в первую оче-
редь. Glade создала для вас заrотовКII функцийобрабОТЧИКОБ следующеro
вида:
661
UNUX: полное РУКОВОДСТВО
Листинr 25.2. Фраrмент файла calrback.c
#ifdef HAVECONrJGH
# include <соnfig.Ъ>
#e11di f
# include <gш;ifu""h>
#iclude "callbakg.h
#include "interace.h'
#inclt!de "st!ppptt.h"
void
onbuttonclicked
..!{GtkButton
gpoi.nter
userdati;\)
*button,
void
cebutLonclicked
(QtkBlltton
gpointer
userdata)
*blltton.
voia
onb-utton9clicked
(GtkБut,tоn *button,
gpointer
userdata)
Вписав В эти "jaI'OTOBKH КОД. выполняющий нужные вам действия, можно
1I0пьrrаться собрать nporpaMMY. Для этоrо переЙдите в каталоr саlс 1\
введите команду make.
бб2
rлава 24. Студи. Glade
24.4. Создание меню
Если вам нужно стандартное меню приложения, состоящее из ПУНКТа!!
Файл, Прав ка, Вид" Т.П., ItснользуЙте ВИДЖJIТ Окно при.1Ожения Gпоmе
(рис. 24.9) вы ero наЙдете иа страничке виджнтов Gnome,
Рис. 24.9. Окно приложения Эпоте
Это уже rотовый шаблон окиа с меню, паиелью инструментов и строкой
статуса. Удобно'?
Если же вам нужно нестанлартное меню, то выберите виджит Меню.
который находится на вкладке основных внДЖнтов окна Палитра. В
окне свойств МеНю нажмите киопку Правка меню. В открыllllемсяя окне
редактора вы можете создавать пункты меню.
Дня создаЮIЯ пункта меllЮ нажмнте кнопку Добавить и ввеlllпе следу'
ющую информанию:
. Метка эту надпись увидит пользователь.
. Имя это илентификатор пункта меню.
. Обработчик имя функции'обработчика.
. Иконка иконка, соответствующая ПУНIi:ТУ меню..
. Подсказка обычно эта'полсказка отображается о строке статуса
при выборе пункта меню.
663
UNUX: 110лное рУКОВОДСТВО
File
f:'
;-
::111'
Рис. 24. ЖО. Редактор меню
. Тип элемеm'а обычный, зависимый (радиокнопка) ШIИ независимыЙ
(флажок) переключатель.
. Ускоритель roрячая комбинация клавиш.
е помощью стрелок вы можете изменять положеНИе пунктов меню.
24.5. Интересные виджиты
и,переСНЫJ( ВИДЖИТОI1 llaМНОro больше, чем будет описано в этом пункте,
каждый вилжит посвоему интересен. Но мне БОЛЫI1С Bcero ПОllравнлись
следующие liНЛЖИТЫ:
. Шкала ВИДЖИТ, напомииающиЙ спидометр, нахолится иа вкладке
элсмснтов Gnome.
. Вы.юр цвета если этот ВИДЖИТ расположить в контейнере, то I10
лучнтся окно выбора и8ета, которое очень похоже на стандартное
окно выбора цвета среды Gnome (вкладка ДОПОlllfl!тельно).
. Выбор шрифта позволяет пользователю выбрать шрифт (вкладка
Дополнительно ).
бб4
rЛ8S& 24. Студия Glade
. Диалоroвое ОКНО СВОЙС1'В ""-- ужеrQl'овое окно\;войсТв (щinоминзёт
окно свойств проеnа), солержашее вкладки и кнопки Ок, Примепиl'Ь,
Закрыть, Справка (вкладка Опоте).
Рнс, 24. t 1, Шкала
Рис. 24.12. Выбор цвета
665
LINUX; полное РУКОВОДСТВО
WР,Ф< .
bi'loj(man.
afll)O
aVa!1lg.arde
Ь(tощаn 1
CтlMy $.;hOOI11ooll'.l
Chl/;I'\CH\f1
сh;эrfl'l(
r:heva.r<il
РИс. 24.13. Выбор шрифта
Рис. 24.14. ОКНо СВойсТВ
666
rлаsа 25
ПАКЕТ DIALOG
ЧТО ТАКОЕ DIALOG?
СООБЩЕНИЯ
ВИДЖИТУЕSNО
ОКНО ВВОДА ТЕКСТА
ЗАВИСИМЫЕ ИНЕЗАВИСИМЫЕ
ПЕРЕКЛЮЧАТЕЛ И
ОРfАНИЗАЦИЯ МЕНЮ
КАЛЕНДАРЬ
ШКАЛА проrРЕССА
LINUX ПОЛНОЕ РУКОВОДСТВО
25.1. Что такое Dialog?
Пакет diaJog служит для вывода диалоrовых окон в сценариях bash. Эле
менты пользовательскоrо интерфейса мы булем, КаК И в GТК +, Называть
виджитами. Пакст dialog позволяет использовать следующие виджиты:
. Infobox, Мsgbox выводят ШlФормационные сообщения;
. Inputbox ПРlшимает ввод Текстовоilинформации;
. Calendar позволяет выбрать дату;
. Radiolist СПИС(lК зависимых переКJ\ючателей;
. CheckJist СПИСОК незаВI!СИМbIX нереключателей;
. Menubox используется ДJlя орraнизации меню;
. Gauge шкала nporpecca.
Установив пакет dialog, в катал.оre lusr /shаrе/dос/diаlоg<версия>
вы найдете MHoro примеров применения :поrо замечатеЛЫlOrо пвкетв,
25.2. Сообщения
Начнем с caMoro простоro отображения небольших текстовых со-
общений. Для этой цели моЖнО использовать два ВИДЖlIта Il1fobox или
Msgbox. Первый отличается от BToporo тем, что не ждет подтверждения
пользователя о прочтеНИII, а закрывается через некоторое время. Виджит
Msgbox ждет, пока llOльзователь ш!ж.мст кнопку Ok или клавишу Enter.
Рассмотрим пример использования виджита Msgbox:
Л"ст"нr 25.1, ВИД"'''' Msgbox
#! /bin/sh
DIALOC$IDIALaGdialog}
$DIA!.OG title "MESSAGE Бах" clear \
msgbox НЭТQТ БИДЖWТ испопьзуется для вывода
сообщений. Ждет, пока пользователь нажмет Enter 10 41
сазе $7 in
О)
ecrlO "ОК" ; ;
255)
echo "Нажата ESC.";;
esac
666
rлзва 25. Пакет Dia.log
Теперь разберемся, ЧТО есть ЧТО. Параметр title проrраммы (Iialog задает
заrоловок виджита (рис. 25.1) Параметр rnsgbox сообщает проrраfме
тип lJиджита, который нужно отобразить. После этою пара Метра нужно
указать текст сообщения, заключенный в кавычки. В тексте можно ис
пользовать управляющие последовательности (\b,\n,\t,\a и др.). После
сообщения задаются размеры виджита.
Рнс. 25.1. 8иджитМsgЬох
Конструкция case проверяет возвращенное проrраммой dia!og значение.
Если пользователь нажал Ок (или <Ввод», то nporpaMMB возвращает
О. а если клапщwу ЕБс, то 255.
Виджит IпfоЬох следует использовать так:
Листинr 25.2. Использование виджита IпfоЬох
#; /bi.n/sh
I)IALOO$ {D:rAIIOGdia.log}
# ЖДеМ указанное КОJ1ичеС'rIЗО секунд
}.o?ft:::l0
l1.11it:="сек.унд"
while test $left != О
do
$j)IALOG sleep 1 \
669
LINUX: полное РУКОВОДСТВО
title "INFO вах" \
infobox .Это инфОРМdW10ННЬРА бокс. он отличается от
щsgоох '1'eМ J ЧТО Не ;ащщ, пока пользова HaMeт Enter,
а лрекращает работу ПО истечении времени
(в данном J1римере 10 секунд).
у вас $left $unit чтобы прочитать ЭТо сообщение..." 1052
letc'expr $left l'
сеьё $lеЕс 1 1<& uпit=""'Щ;Qпd"
done
. .
Параметр 'I'le$ri 1 031t1i,,ej"ТQ nPQrpaMMlig.l.j\i.log будет перери-
coBыатьь ОКНО че3 одну смуПараметр -:tii::J.1O задает заroловок
Вl1джита. ,infob?x oцeT ТЩl вищкц:rli,посде определения
ВIIДЖl1та следуетОТQбражасообщение, а ПОТОМ""':' размер 1!liДЖllта.
В ЦИКJlе wЬilеi'lыцроJlel'яем, сtqm.jф секунд OCfl;Ц!ocь, )'Мefli>шМзtl!iчение
l1еременной left.
'25.З.Sиджит 'Уе':-I'10
Часто ВCfреЧ!l!O'l't:l/.диалоrQВ!>lеQ,lQ!а, СПРИIЩIOЩl(еПОЛЬЗОl!ателя, co
rласен ли ОН с действиямц.чРI:!WIIММЫ, н.ащшмер,«ВI>I: точно хотите
выйти?» IlJIи "Удалц:rь ЭТОТФIi.ItliZ>l. пот.,ЗОl!ате,лю!Ке предлаrаеТСЯ два
BapllaHTa ответа Да или Нет; для орrанизацtm TaKoro диалоrа пред-
назначен ВIIДЖII'f yesno.
Dtедующий листинr демонстрирует работу с этим ВИДЖlfТОМ:
Листинr 25.3. Работа с SI.1ДЖИТОМ YQsno
#! /bin/ 5Ь.
DIALOGo$(DTALOG=dialog)
$DTALOG title 'YES/NOX' G1edr \
yesno "Отформатироsатъ /dev/hda1?" 5 41
case $? iп
О)
echo "Да.";;
1 )
ect10 .. Не'!'. .. ; ;
255 )
есt'ю .. ESC. .. ; ;
esac
670
rЛ8ва 25. Пакет Dialog
Рис. 25.2. Виджит уеsло
ВИДЖИТ используется та" же, как" предыдущие: название виджита
(УБПО), текстовое сообшение, размеры виджита. Проrрамма dialog воз
вращает следующие значения:
. О, если пользователь нажал кнопку Yes;
. 1, если пользователь нажал кнопку No;
. 255, если пользователь нажал клавишу Esc.
25.4. Окно ввода текста
Следующим по час'юте применения после информационных виджитов и
виджита уesnОСледует виджит ввода текстовой иnформащUl Inputbox.
Принцип работы даннOl'О виджита СJIедующий:
1. Мы определяем имя временноro файла, в которыЙ будет записано
введенное пользователем сообщенне.
2. Вызываем проrpамму dialog с параметром inputbcx.
3. Перенаправляем BЫIIOД проrраммы во временный файл (проrрамма
выведет введеННое 'nользователем значение).
4. ВЫВОдим ИIIИ обрабатываем каким'либо друrим способом содержимое
времеmiОfофайла.
671
UNUX: полное РУ1<О80ДСТВО
Листинr 25.4. Виджит lnputbo)(
#! /Ыn/ sh
DIALOG=$(DIALQG=dia1og)
ternpfile='ternpfile 2>/devln.ull' i I ternpfil.,=/trnp/test$$
trap 'rrn f $tempfile' Q 1 2 5 15
$DIALOG title 'INPUT BOX.clear \
inputbox »ДаннblЙ ВИДЖИТ используется для ввода
информации\n\n
Введите СВое имя," 16 512>,$ternpfi1e
retva1=$?
саве $retval in
о>
echo "ВЫ ЕsеЛИ 'cat $tефрfilе'";;
1>
echo ИНажата Cancel"jj
2551
if test B $tempfj1e t:hen
cat $tempfi1e
e1se
echo "Нажата ESC."
е'
й
ji
еэас
Рис. 25.3. Внджит JпpиtBox
672
rЛ8ва 25. Пакет Dialo g
:Значения, JЮзвращаемыеnроrраммой dialog:
. О, еCJIИЦOJU>ЗО;lТель что-то ввел и нажал Ent или просто нажал
<ВВод:::>,ие введя ничеrо (тоща временный фlilЙlI будет nycт);
. 1, еCJщJ1оЛьзователь fla Cance1;
. 255, .Cciт. пользователь нзжa.n E.c.
$.$. Зависимые и неэависимы.
переключатеnи
ПРОI'Ра.(!icаlоg позволяет вам ИСПОЛЬЗОllать в СВОИХ сценариях за
Iшс"мы,!ii!иснмыыe lIерекnючатеЛII. ЗавиёШdЫе lIереКЛIPчlil1'ели pea
пизуютсiI:.!!том radiolist, а незавжимые cbecklist.
пстинr 25.5. Независимые l1ереключатели
# /Ып/ g.h
IJТi\!ЛG=$ {DIАШG=сliаlоg}
tempfile't€mpfile 2>/clеv/rшl1' 1: tещрfilе=/tmр/tеst$$
trap 'nn ..f $teтpfile" о 1 2 5 15
$ JIALOG backt it Те 'Пример' \
t.itle .Независимые переключате.rrи" \
checklist 'Данный npимер демонстрирует работу
независимых \п\
переклюqатепей, реализуемых с ПОМОЩЬЮ пакета Dialog \n\
ИСПОЛЬЗУЙ'I'еПРОБЕЛ для включения ип-н выключения
переключатеnей \n\n\
Какие nроизв€дения вы читали? 20 61 5 \
"Почти КаК люди!. "Сайм:вк Л off \
'aYT' "reTe" ОЫ \
.Ma,CTe:p; .и' Мар:раj;jита'" "Бул-rаКQ,вir::.:6ff \
пмир теней п Саймак" off \
"Лемон' "JТepMoHToE' оп 2> $tempfile
r,?tval$ '?
C;']Olce:.::,', cat $telnpfile'
сазе $retva.l in
О J
echo Вы выбрали j 5сrюiсе' " ; ;
1)
ес:Ь.о "Нажа1а Cancel";;
255)
t;cho "Нажата ЕЗС" i ;
€sac
z;; J:it' :ili
673
lINUX: попное РУКОВОДС1ВО
Рис. 25.4. Незэвиснмые переключателн
Выбранные пользователем значения помещаются во временный файл,
который вам НУЖIIО будет обработать. Сейчас мы просто вывеДем ero
на консоль. Элемент списка cllecklist может находиться в одном IIЗ ПО.
JlOжений Оп или Off. Эти значеию\ не чувствительны к реrистру. Во
временныЙ файл выводятся только включенные переключатели.
Работа с Вllджитом radiolist осуществляется так же, как и в ВИДЖIIТОМ
checklist, за исключением Toro, что может быть активным лишь один
элемент и во временныЙ файл будет заПиСаН именно этот элемент.
Листинr 25.6. Зависимые nереключатепи
# /l)i.п/sh
DIЛLО(J=$( DIALQ';=dia I og)
telop,[ i1e= 'tempfile 2>/dev/nul1' j I tempfile=/tmp/test$$
t:cap "1.'П\ .! $tempfile" О 1 2 5 15
$OIA1,OC ... .ba.ckT:itle "ПрИМер" \
Mtitle HRADIOLIST ВОХ" cleal \
l'd.(lioli.st 0.131:'0 СПИСОК заВисимых переКJ1ючателей \п\
Он ПОЭВОJ1Яет выбрать только один Bapvra!T И3 списка \п\
Какую ИЗ эТих КНИJ' БЫ Ч-ИТdпи последней"?" 20 81 5 \
"ПОЧТИ как люди" "Сайма-к" 0[[ \
"Фаус'r" "reTe" off \
674
rлава 25. Па.ет Dialog
"Мастер и Марrарита" "Вулrаков" ОМ \
"Мир теней" "Саймак" off \
"Демон' "Лермонтов" оп 2> $tempfi1e
retval$?
choice-=cat $tешрfilе
саsе $retval in
О)
есЬо "Вы выбрали '$choice",;
1 )
есЬо "Нажата Cancel";;
255)
echo WНажата ESC#;;
евас
25.6. Орrанизация меню
Виджит Ме.lщ.Q(»)I: очеКI> ЦЩQ)Кка radiolist оии..црямоак:и брarья{;лиз
нецы, TOm>KoY menubox!leт слсва переключатщ Iiключе:НО/!Jьщлючено.
ИспощоlЩТЬ МепuВщ.: "У'!'Нoта:к же, как иrщiiоlist, ко не ука:швая оп
или о" Д)IЯ элементов меню,
ЛИСН1I'Н' 25,7. MelHo
,
#! /bin/sh
DIALOG=${DIALOG:dialog}
tempfi:l.e",'tempfile 2>;dеv/,щll' \ I t"mpfile/tmp/teat$$
trap 'nn. ! $tempfi!le" О 1 2 5 15
$DIALOG clear title "МЕNИ ВОХ" \
rnenи NЭтот,эиджит поможетsам орrаищЗО8ать
небольmое МеНЮ \n\
МЕNП noх.'npеДDстаIИI:яет__, р,:апьзоватеrrю 'Ы-бра.ть- а,цИн вариант
из СIЩ91<а \n\ .
Данный виджит также'nО3ВQляет npокручиаатъ возможные
варианты \п\
Вы можете использовать стрепки ВВЕРХ/ВНИЗ,
а также клавиши \п\
19 дпя выбора.\n\
Выберите вашу ОС:" 20 71 4 \
"Linux" "А что, разве есть друrие ооерационные
системы" \
675
LINUX: полное рУКО80ДСПJО
"FreeBSD" "Это лучшая ОС" \
"Windows" "Мы кроме Windows ничеrо не видели..и \
"MSDOS" иНа моей двойке ничеrо друrоrо не
запускается, (' 2> $tempfile
retval=$7
choice='cat $tempfile'
case $retval in
О) echo "Ваш выбор '$choice'"jj
1 )
echo Нажата Cancel";;
255)
еспо "Нажата Еэс.Лj;
esac
Рис. 255 Виджнт тепиЬох
676
rЛ3В8 25. Пакеr Dialog
25.7. Каnендарь
Этот ВIIДЖИТ позволяет пользователю удобно ввести дату. Работать с ним
НУЖИО так: с помошью клавиши ТаЬ выбираете нужный элемент управ'
ления: кнопка Ok, Cancel t поле изме.нения месяца, поле изменения rода,
поле выбора числа; с помошью стрелок вверх/вииз указываете нужное
значения месяu.а; roдa, 'шсла и нa:ЖJшаете <Ввод>. ВыбраШlая вами дата
будет О'fображена на консоли.
ifI*,тинr 25.8. Календарь
#! !bln/sh
: $(DIAI'oGdi.alog}
(jSERDATE'DIJ\I.'oC -std.o;.lt ...tit:l,':' "CALENDAR" calendar
"Выберите дату..." \
О О 1 1 2004'
саэе $? iп
01
echo "Вы выбрали дату: SUSERDATE.";;
11
еС}10 "Нажата Cancel.." ,. ;
2551
echo "Диалоr закрыт";;
E!sac
Рис. 25.6. Календарь
677
LINUX, полное РУ1<ОВОДСТВО
25.8. Шкала nporpecca
Для информирования пользователя о ходе процесса, например, Komlpo-
ванил или обработки фаЙла, целесообраЗ!lО использовать виджит gauge
(шкала nporpecca).
Листинr 25.9. Шкала nPQfpeCCa
#!/bin/sh
DIALOC=${DIALOG=dialog}
РСТ=10
I
while test $РСТ ! 100
do
echo "'ХХХ'"
echo $РСТ
есЬо "Выполнено\п\
ISPCT %)"
echo NXXXIf
1'СТ=. expr $1'СТ + 1 ().
# засыпаем на i секун-ду. 1 секунда это 10%
sleep 1
r10ne
I I
$DIALOG ёH1e "Шк,""а"'-gЗ\lgе "ШКЗl1а" 20 70 ()
РИс. 25.7. Шкала пporpecca
678
rлава 26
ВЗАИМОДЕЙСТВИЕ
ПРОЦЕССОВ
В LINUX
СПОСОБЫ ВЗАИМОДЕЙСТВИЯ
ПОЛУДУПЛЕКСНЫЕ КАНАЛЫ
КАНАЛЫ ТИПА FIFO
ОСНОВНЫЕ ПРИНЦИПЫ SYSTEM V IPC
ОЧЕРЕДИ СООБЩЕНИЙ
СЕМАФОРЫ
.РА3ДЕЛЯЕМЫЕ CErMEHTbI ПАМЯТИ
LINUX ПОЛНОЕ РУКОВОДСТВО
26.1 . СпосоБЬI взаимодействия
Процессы, как и ЛЮДИ, MOryт «общаться» между собой, то ссть обме
IНшаться информацией. В rлаве 3 мы беrло рассмотрели два среД(:тва
мсжпроцесспоrо ваимодействия (IPC, /пtеr-Рюсеss CQттllпicatioп):
полудуплексные каналы (конвейеры) и сиrнзлы' но в UNIХ-системах
таких средств начительно больще. В этой rлаве Я перечислю остальные
средства IPC и покажу, как испольовать их в проrpаммном коде.
С давпих времен существуют 'lМенованные каналы FIFO (First /п Firsl
Oиt) и сетевые rнeдa (соксты). Вместе с конвейерами и сш'налами они
составляют lPC типа BSD. Комцания АТ&Т вместе с операционной си-
стемой SystemV предложила три новых вида !рс:
. семафоры;
. раделяемая память;
. очереди сообщеНlfЙ.
В операционной сисreме Linux поддерживаются оба типа lPC System
V и BSD, то есть в Linux мы можем использовать все вышеперечисленные
способы lPC.
26.2. Полудуплексные каналы
Напомню. что канал это способ связи стзндартноro вывода OJIHOro про-
несса сй стандартным вводом друrOlU. Каналы старожилы UNIX: они
появились еше в самых первых версиях UNIX. Полудуплексные каналы
1I0ЗIЮЛЯЮТ обмениваться информацией только в одном направлеmщ. Если
процесс-предок передает информащоо со cBoero стандарТllоrо lJывода lIа
стандартный ввод потомка это пример полудуплексиоro канала.
Что такое перенаправление ввода/выволз и как ero использовать из
командной строки, вы уже знаете (п.3.4.6). Сейчас я покажу, как осуще-
ствить перенаправление проrраммным путем, то есп, без вмешатеiIЪства
пользователя.
080
rлааа 28, ВзаИМОДействие процессов а Linux
Вызов systemO порожлает дочерний процесс, позволяя ему ЧlffaТЬ данные
со стандартното ввода (stdin) и писать на стандаРТНЫIl вывод (stdощ).
Инота нам нужно передать даиные дочернему процессу ИЛИ, наоборот,
получить информацию от 110рожденноrо процесса. Друтими словами.
мы хотим, чтобы дочерниЙ процесс получал данные не со стандартною
ввода, а от родительскоrо процесса или/и выводил информащио не на
станлартный ВЫlЮд, а передавал ее процессу-предку. Ввод/вывод между
нроцессами осуществляется с помощью системноrо вызова рорепО.
Этот вызов лолжен быть выполнен до вызова forkO, чтобы файловые
дескрипторы были унаследованы дочерним процессом.
F'ILE * !X'pen{const char * команда, const char *' режим-.......цоступа);
Первый параметр . это название проrpаммы, которую мы хотим запу-
стить в дочернемrtроцессе. ВторойiIараметр оnpeделяет реЖИМ доступа.
Установите значение «Т», если вам нужно читать вывод дочернеrо про-
цесса, если же вам нужно передать информацию на стандартный ввод
норожденноrо процесса, установите значение «W». Режима ДВуt,ороннеrо
обмена не существует.
Вызов рорепО возвращает указатель FП.Е* или пустоЙ указатель NULL,
если вызов не улался. Так же, как и при работе с обыкновенными файла-
ми, после заверщения операции ввода/вывода вы должны закрыть канал
вЫзовом pcloseO. Во время работы с Потоком рекомендую ИСПОЛЬ.1ОDaТЬ
LlblJOB fflush(), 'lТобы предотвратить задержки ю-за буферизации,
Теперь несколько простых примеров. Предположим, что нам нужно вы-
вести на t'ТЗндартный вывод имена всех текстовых файлов, содержащихся
в текущем каталоrе. Это можно Очень ПрОС1'о сделать с номощью ВbIзова
systemO:
system("l" *.txt"l;
Это уж совсем тривиальная задача мы просто выводим данные, но
ннкак не обрабатываеы их. Как получить все имена текстовых файлов И
обработать их в проrрамме?
/! открываем поток
FILE *fp = рореп("lэ *,txt", "r"l;
/! в цикле читаем имена всех текстовых файлоэ
"Ь йе I ([пате = fgets ( , . . ,fp) :) ! = EOF)
(
1I обрабатываем полученное значение переменной fname
)
11 закрываем ПОТОК
pClose{fp) ;
681
LINUX: полное руководсто
Это1' фраrмент кода. в особых комментаР!lях.не.нуждается. Сначала мы
создаем поток ддя чтеНIIЯ (доступ <ф» \J!формаЦИи от порождещщro
процесса (15 . .txt). Затем в ЦИЮlе while чнтаем имена файлов до тех пор,
пока не будет достиrnут конец файла. После окончания операции ЩIO
AalnbIBOAa закрываем поток вызовом pclose(fp).
Вот теперь мы rOToBbl к тому, чтобы рассмотреть более серьезный npи
мер. В этом примере мы будем передавать данные дочернему процессу.
Задача такова: у нас есТь две nporpaMMbl. Первая Dp9rpaMMa передает
второЙ какую'нибудь информацию, вторая обрабатыlетT ее и ВЫВОДIIТ
на стандаРТlIЫЙ вывод результат.
ftистинr 26.1. Родительский процесс
#include <stdjo.h>
#ir\clude <sys/wait.h>
#include <unistd.h>
int тaln 11
{
char buff[1024]:{O};
FILE . ер; 11 ер child proct=ss дочt=рний процесс
i.nt st_atus;
1/ Открываем ка.н.ал. Дочерний процесс jusr /hinj ch i ld
cppopen (" 111sr/bin/chi1d", "w");
if (JCp)
(
printf("He Mory открыть каНаЛ.\п");
exit(l)
J
pr'int f ("Введите информацию для передачи дочернему
процессу " 1;
!! читаем ВВОД пользователя
fgets(buff, sizeot (bl1ffl, stdinl;
1/ передаем Данные дочернему npоиессу
fprintf(cp. "%s\n". buff);
1I Н8Ь!талкиваем" содержимое буфера 13 канал
Eflush (ер);
1/ закрываем канал й nроверnем Состояние вызова pclose()
statuspclose{cp);
682
rлава 26. Взаимодействие процессоа в Unux
if (!WIFEXITED{SI;aLиs))
рrintf(.ошибка при ЗdКрЬt'rИИ канаnа\лfl');
рriпtf('Завершение работы родитепьскоrо процесса\п');
,return о;
Листинr 26.2. Дочерн"й процесс - исходный kOA /usr/bih/child
#include <stdio.h>
.int main ( )
(
char buffll024){O);
fgets(buff, sizeof (buff), std.in);
Рl'iпtf{"'ПРОЧ:И'l'dЛ СО С'I'dндар'I'НОl'О ввода: %s\п'" ,bu[[):
рriпtf("'Завершение работы ДQуернеrо ilpQцесса\п ll };
rei:urn О;
26.3. Каналы типа FIFO
Канал FIFO это канал, основанный на прииципе очереди: «первым
вошел, первым вышел». ОТ обычноrо ка!",ЗЛII канал FIFO отличается
слеДУЮIIЩМ:
. Канал FIFO сохраняется в фаftловой системе 11 виде файла, поэтому
каналы FIFO называются именованными.
. С именованным каналом, как с обычным файлом, MOryT работать все
процессы, а не только предок и ПОТОМКИ.
. В отличие от !ЮЛУДУlшексноro канала, flаходящеrося в ядре, канал
F1FO находится в файловой системе и остается там даже после за-
вершения обмена данными. Для следующеro использования Канала
ero не нужно заново создавать.
Создать именованный канал можно с помощью командноro интерпре
татора:
$ mknod тyFIFO р
$ mkfifo a=rw myFIFO
или системноrо вызова mknod():
iпt mknod ( char *раthпаmе, modet тоде, dev..t dev 1;
ФУНКlIИЯ mknod{) используется не только ДЛЯ создания каналов FIFO.
Она может создать любоЙ j'узел (inode) файловой системы: файл, устрой
ство, канал FIFO. ФУНКЦИЯ возвращает О, если СОЗДЮlне узла ПрОШJIо
683
UNUX: "от..ое РVКО60ДС1ВО.
успешно, I!ЛИ l, если произощла Щlшбка. ПрощrЗ.lIи;щровать ошибку
можно с помощью переменной еrr;ю, которая ра!lШ:
. EFAULT, ENOTDIR, ENOENТ неправильнозаданпуть;
. EACCESS У вас непостаточно прав;
. ENAMETOOLONG с)шшком ДЛIIННЫЙ путь.
ПРlfмер создания FIFО'канала:
ml<nod ("РIРО., S:!:FIFO I QQQi1/Ю i
в текущем каталоrе будет создан канал FIFO с оравами доступа 0666.
Указывая права дOCfупа создаваемоrо файла, ПОl>lните, что они находят-
ся под влиянием umask. ПОЭТОМУ, если вы хоuце.'УI;:"rЩ!О'ЩТЬ ИСТllНllое
зна'lение прав доступа, используйте системный I!ЫЭОII umask(O). чтобы
временно отключить I\JIИЯНИС umask:
umask(O) j
rnknod("FIFO', S'IFIFОIОбб6, О) 1
Рассмотрим проrpамму, создающую FrFO-канал и ожидающую данных по
этому каналу. Проrpамма ПОСЛС создания канала БУI\СТOЖllДатъ данных по
этому каналу И НС завсршится да тех пор, пока ВЫ не: «убьете» прОЦС<:с.
ЛИGТинr 26.3. ПРОЦеСС'читатот!ь
#include <stdio.h
#include <stdlib.h>
#include <sys/stat.h>
#include <unistd.h>
#include <lil'шх/вtаt .h>
/* Наш канал nазываетсЯ FIFQ, рн будет создан_ Б текущем
KaTaJ10re '/</
#define FIFD F!FO
void main(void)
{
FILE 'Ер;
1* Буфер для чтения *!
Ch.dI- J:)\l.f (128) i
!* Coд&eM канаn, если он еще Не СОЗДаН J цpaa ДOCTYn
0666 .;
UП'.аsk(ОI:
rnk!1Od(FH'O, SIF'IFOI{).б6б, о),
684
rлавв 26. Взаимодействие процессов в Linux
/* Ожидае данные */
while(J,.)
(
Ер = Еореп(РIРО, Ву");
fgets(buf, 128, Ер);
рriпtf("Получена строка: %в\п", ЬиЕ);
fclose (Ер);
Теперь рассмотрим процессписатель, который будет заrшсывать даниые
fj HPOKaнaд. .Этот процесс Не завершится до тех пор, пока процесс'1И
татель I1е Про'lnтaет иХ:
Лl1стинr 26.4. Процессписаrель wtitefifo.c
#include <stdio.h>
#include <stdlib.h>
#define FIFO
"'FIFO"
void rnain(int атчс. char *argv(J)
(
FILE *Ер;
if ( атчс ! = 2 ) (
printfl"USAGE: writefifo <string>\n');
exit(ll;
)
Ер . fopen(FIFO, "w");
fputs(aygv[l], Ер);
fclose (fp) ;
Запустите проuеСС'1итатель, затем перейдите на друrую коисоль И за
ПУСТliте <<писателя» с арryмеитом строкой «info». На первой консоли
вы увидите сообщенщ::
Получена строка: info
685
LINUX: полное РУ"О60АСТIЮ
При исполыовании каналов FIFO нужно учитывать механизм их блоки-
рования. Если процесс открыл канал для записи, то он блокируется до тех
пор, пока друrой процесс не откроет ero ДJНI 'lтеНljЯ. АналоrIIЧНО, если
какой-то процесс откроет FIFO-каIШЛ для чтения, он будет блокирован,
пока друrой процесс не запишет в канал данные. Если блокировка про-
цесса нежелательна, можно использовать опцию О NONBLOCK
open (fd. ONONBL,OCKI;
Ясное дело, что Torдa нужно немиоroмодифиuировать исходный код: вы-
зовы fc]oseO, CputsO, CgetsO использовать уже нельзя, вместо них нужно
использовать соответствуюшие ВЫЗОЩ>I closeO, writeO, readO.
И последнее, что нужно помнитыIйпроrраммировa1Iии FIFО-канал()в:
идеолоrия FIFО-каналов предполaraеТ наличие «читателей» И «писате-
JlеЙ}. Если <.:писателЬ» ЦИlllет в канал, у xoтoporo Нет {("tfитатеJtя», .[3 ядра
будет послан сиrнал SIGPJPE.
26.4. Основные принцилы System V IPC
КаждыЙ объект IPC, то есть семафQр, очередь сообщений или разделяемый
cerMeHT памяти, имеет свой l{ДеIПИфroр, позволяющий ядру однозначно
идентифицировать объект. ИдентифЩщтор уникален только для объектов
даИilоrо типа, а не для всей СИC'rеМЫ. Например, 8 СИCfeме может быть
очереIlЬ сообщений с. идеИlllФИКЗТ\)рОм «111» и семафор с 'О «11\», но
иикоrда не будет двух раЗНblХ очередей с идентификатором «111».
Для 11OЛУ'lения уникальноrо идентификатора системе нужен ключ (IPC
Кеу), который СоrласОвЬffiаетСя с процессом.сервером и процессом'клиеl1'
том. Ключ осущеСТI)ЛЯет связь между процесс ом-сервером 11 l1роцессом'
клиеНТОМ подобно тому, Как маРЩРУТllзатор осушеcrвдяет СВЯЗЬ между
двумя компьютерами в разных подсетях.
Ключ reнерируется приложением самостоятельно. Для этоro используется
Функиия ftok():
keyt rtok ( c11a! *pathname, с.ьqТ proj );
в случае успеха возвращается ключ, а в СЛУ'lае ошибки -1.
При создании ключа нужно учитьruать, что crенерированные ключи MOryr
повторяться, поэтому после l1олучения HOBoro IUlюча нужно проверить,
не используется ли он. уже.
Ключ rенерируется иа основе номера inode первоrо артумента 11 симво-
лов 8Toporo. Это не rараНТИff уникальности, поэтому и получается, что
ФУНКl.1ия может возвращать уже используемый ключ.
686
rЛ8ва 26. 8заимодеЙСТВ!о1е процеССQБ 8 Unux
keyt
keyt
keyl;
key2;
keyl = ftok (./tmp/app", 'а');
key2 = ftok (".', 'д' J ;
Про смотреть статус всех объектов IPC можно с помощью команды ipcs,
выводяще:i\ состояние всех разделяемых сетментов памяти, семафоров и
очередей СО(lбщений.
Для удаления объеl<та 'РС используется команда
ipcrm <msg I Бет I shm> IPCTO
Так как Ilдентификатор IPC уникален только для объектов IPC определен'
но'о типа, вы должны указаТЬ 1'lШ объекта (msg очередь сообщений,
sem семафор, shm се,мент памяти) '1 ето lIдентпфикатор.
Для работы с объектаМII IPC не забудьте ПОДКЛЮЧll1ъслеДУЮЩllе заrо.
JIOВОЧНblе файлы:
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <$ys/ipc.h
#include <sys/msg.h> /* для очередей */
#include <$ys/sem.h> /* для семафоров*/
#include <sys/shm.h>/* ДЛЯ разделяемых ceTMewтoB памяти */
26.5. Очереди сообщений
26.5.1 . Основные структуры ядра
для работы с очередями
Очередь сообщений это связный список, находящийся в адресном
пространстве ядра. Каждая очередь ИМеет спой уникальный идентифи'
катар IPC.
Структура ядра msgbuf (описана в файле /usr Isrc/ linux/includel
lj.nux/msg .h) является буфером сообщений:
st.ruct. msgbuf (
long rntype;
char mt.ext[lJ;
1* тип сообщеня *!
/* текст сообщения *(
);
687
UNUX, полное РУКО80дствd\.
Тут все ясно: тип сообщения И само сообщение. Иcnользуя тип сообще-
ния, вы можете помещать в одну очередь разные сообщения, а не созда-
llaTb еще одну очерсlU>. Например,;, нас есть два ПРИJlожеН!fЯ КЛИСIП
И сервер. Вы можете ИСПМЬЗ0ватьдля них однуи ту же очередь: сооБLuе-
ния клиента будут с номером 1 (mtype 1), а сообщения сервера с
номером О (mtype = О).
Ясное дело, что COQбщения из О)Ц{QfO символа нас не.устр.аllвают, поэтому
вы можете переопредеЛIIТЬ структуру msgbuf в Сl1оейnporрамме:
st rlзсt ту buf {
]ong mtype;
char mtext[12B],
}
Бы также можетещ)бавлять новыеrюля в эту структуру (но талько в
сооей прое.рамме!Код ядра МОДIIфицировать не нужно),
st)uct mybuf {
lOl'1g mt.ype;
char тtext[128]j
char infoI50Ji
int status;
)
Не бойтесь создавать свои сТруктуры: ядру все равно, с какllШ данными
работать, вам нужно учитывать ТOЛi>КО максималы;lйй размер сообщеюlЯ,
который определен В файле /usr/src/1inuxJincludet1inu.x/msg.h:
#deUne MSGJ.'J\X 4056
4056 байтоо ЭТО максимальныЙ размер lIе ваших дШiiшх, а осей струк-
туры, включая ТIIП сообщения. Размер типа long равен 4 байтам.
Сами сообщения хранятся ядромlicrpуктуре msg; которая также опреде-
лена в фаiU!е msg.h:
struct msg (
struct msg *msяnехt;
в очереди */
long msgtype;
char *msgspot;
(текста) * /
sllOrt !'.1sgts;
1* указатель на СЛ€Дr сообщение
J* ТИП сообщения */
1* адРес caMoro сообщения
1* размер сообщения {T<KC'I'a) ." /
};
СообшеНIIЯ хранятся 11 виде односвязнorо списка. Первый член структуры
msgrlext это указатель на следующее сообщение о очереди. Второй
член msgtYre это тип сообщения, такой же. как 11 структуре I11sgbuf.
688
rЛ8ав 26. В38ИМОАеilCf8ие npoцecC0fl8 Unux
СледующиЙ член структуры это УКllщreль На начало теКСТII сообщения,
а послеЛШIЙ член rns&...ts размерТе!ф1'а roобщеЦIIЯ.
Каждый ТЩI объекта !РС представляеТCIIl< ядре определеlllIО <:тpyктy
рой. для очередей сqqбщеllllЙ :ПО структура IТI8qidЩ;(Оllис:ща 11 файле
!usrlsrc/linux/i61udeJlinux/msg.h).
struct msqidds {
struct ipc.......:pertn msgerm;
struct rnsg *msgfirst;
/* информация о правах
доступа */
(* указатеlIЬ на первое
сообщеRИ в очереди */
1* указатель На последее
сообщеНие" очереди*/ .
/* время последнеrОВ$ова.
msgsnd */
/* время последнеrо вызова
msgrcv */
./* время !Iоследнеrо измеНения * /
*wwait,;
*rwait;
struct msg *msglast:
timet msgstime:
timet msgrtime:
tiтet m$ctime;
struct waitqueue
struct waitqueue
ushort msgcbytes;
ushort msgqnum;
иshort msgqbytes;
ushort msglspid;
1* MaKcaДЬEoe ЧИСЛО байтов
на очередь */
/* рidП6слднеrо
исnYстившео msqsnd */
/ * !IОСЛДНИЙ !10лучен;Jый pid * /
ushort rnsglrpid;
};
. msк...re rm
Эrn cтpyктypa'i1inaiPC...J'C11l1 (ipc...,perm опредciIeнa в файле linux/ipc. h).
Данная структура содержит информацJlIO О владельце и правах ДО--
ступа:
struct ipcerm {
key t key;
ushart uid;
ushort gid;
ushort cuid;
ushort cgid;
щ,hоrtJ1\C>tlЕ! ;
ushort seq;
/* uid й gid владельца */
1* uid и gid создателя '/
/* режим доступа;*/
/:Ir СИС"ТеМНое rIOJIe", .Вас ОНО не касается. * I
}:
. ms&.,.f1rst. '. ..
Указатель на первое roобmение в очереди.
689
LINUX: полное руководстао
. rns)ast
Указатель на последнее сообщение )J очереди.
. mSjLstime
Время oтnpaBlG1 последнею соо6еНfIЯ из очереди.
· msgJtime
Время последнеro изъятия сообщеlПlЯ из очереди.
. rnsg ctime
Время последнеrо изменения очереди.
. wwait и rwait
Указатели 8 очередь ОЖИДаНМ идра, которые используются, KorAa
очередь переПОЛllена 11 процесс вынужден ждать из-за Э1'01'O.
. mS!L cbytes
Суммарный объем 8сех сообщений 8 очереди.
. mS!Lqпum
КоличеСТ80 сообщений в очерeдll
. rnsg qbytes
Максимальный размер очереди.
. тsgJspid
PID процесса, который послал помеднес сообщение в очереди.
. msglrpid
PID процесса, который получил сообщение из очереДИ.
26.5.2. Создание очереди сообщений
Для создания очереди сообщений IfСПОЛЬЗУется системный 8ЫЗО8 msggetO.
Этот же вызов используется мя подключешlЯ к уже существующей оче-
реди:
int л\sggеt ( k"yt "еу, int msgf1g 1:
Первый apryMeHT это КЛЮЧ, который мы получаем с помощью систем-
HOI'O вызова ftokO. В1'ороЙ apryMeHT это режим доступа к очереди:
. IPCCREAT создать очередь, если она не бьuш создана ранее.
· IPCEXCL если использовать вместе с IPCCREAT, то в случае,
если очередь существует, мы получим ошибку.
690
rлава 26. Взаимодействие процессов в linux
Если использовать только ПССRЕАТ (без [PCEXCL), то вызов
msggetO всеща возвращает идентификатор очереди, даже если очередь
уже существует (происходит подключение к очереди). Если ИСПО!IЪЗовать
[PC EXCL вместе с IPC CREAT, также будет создана Новая очередь, НО
если очередь уже сущеСТJ!ует, подключения не пронзойдет, а функция
msgget() возвратит -1 (ошибка).
Вместе с режимом [РС CREAT можно указывать права доступа к очереди
с помощью операции OR:
1PCCREAT I 0660
Если произоuта ошибка и msggetO вернул -1, то переменная eerno уста-
навливается следующим образом:
· EACCESS у вас нет прав доступа к объекту IPC;
. EEXIST очередь уже существует, создание неВОЗМОЖIfО, 110 воз-
МОЖНОПОДКJIЮчение к очереди;
. ЕЮRМ очередь помечена для удаления;
. ENOENТ очередь не существует (в случае подключения);
. ENOMEМ не хватает памяти для создащfЯ очереди;
. ENOSPC Не хватает aдpecHoro простраIlства (то есть превышено
максимальное количество очередей).
Следующий код создает очередь сообщений:
keyt key; ;* ключ 1PC *(
i.nt id; ;* 1D очерели сообmений *;
/k создаем ключ */
key со ftok (.... 'd'1:
1* создаем очередь */
if ((id msgget ( кеу. 1РССRЕЛТ I 0660 11 11
(
printf ("ошибка ПрИ создании очереДИ\fl" 1 ;
26.5.3. Постановка сообщения в очередь
Для постаНовки сообщения в очередь используется ВЫЗОВ msgsnd():
i nt msgsfld I iлt msqid. strUct msgbuf *mзgp, int msgsz, iлt msgf1g );
Первый apryMeIIТ ;11'0 и:де:нтификатор очереди, в которую нужно доба-
вить сообщение. ДаНИЬ)Й идентификатор мы предваритеш.но подучаем с
ПОМ!)ЩЪ19 систеМ1l0fl;\lI!>!30ва rnsgget(). ВТОрОЩlрЭ,Метр этQ указатель
на буфер сообщения. Третий apryMeHT это дЛина сообщения без учета
типа сообшения (4 байта). Последний apryMeHT обычно устанавливают
равным О или IPC NOWAIT, если БЫ не хотите, чтобы процесс был бло-
691
lINUX: полное рУК080ДСТВО
кирова и при постановке сообщеНИJlВ оч.ередь, в случае переполнеlШJl
очереди. По умолчанию (ко,'да флэ.r р$вен О), есJIИ очередь переПОJJиейа,
ващ npOllecc будет блокирован до тех пор, пока сообщение не будет no
ставлено в очередь.
Как обычно, в случае успеха ВblЗов возвращает О, а если: произоuша ОЩI(б
ка, то 1. С помощью епоо можно аЩlJlизироватъ ошибку:
. ЕАаАт очередь переПОIli{ена, а вы использ ф.щir IPC NОWлrr,
то есТЬ сообщение будет удадено и вам нужно заново поставить ero В
очередь (отсюда и название оlUllбки AGAIN (опять»;
. EACCESS У вас недоста-ro'Щ9 ПРаВ для зarurси сообmения в оче
редь;
. EFAULT неверный адрtю буфера msgp (невозможно ПОЛУЧIIТЬ до-
ступ К этому адресу);
. ЕШRМ очередь сообщеllИitУдалена;
. EINVAL ошибка в арryменtаж, НаПрlrмер, неnpавильное значение
идентифнкатора очереди, IЛplЩаtеЛЫ!blЙ ТIIП сообщеИIIII, иеправИJlЬ
ный размер сообщения и Т.д.
. ENOMEM не хватает памяти.
Следующий фраrмент кода деМQnqрирует постановку сообmеНI:IЯ Б
очерель:
it1t res. 1et1gth; 1* результа.т операUl1И и ДШ1f!а
сообщения */
struct, mybuf *buf; 1* caМQ, сqобщение */
/ * определяем длину ссюбщения: 4 баЙта *' /
1engtl'j sizeof (struct mybuf) slzeof (long);
it I I ,"еЕ mEgsnol id, &buf, lengt!l, О» = '"1)
(
рri!ltf("Ошибка при постановке сообщения в очередь\п");
)
Наверное, вам уже не терпится увидеть реально работающий пример, а
не куски кода, которые только отчаСТll связаны между собой. В Лllстинrе
26.5 представлена проrрамма, создающая очередь сообщения и записы
Бающая Б нее сообщение.
Листинr 26.5, При мер работы с очередью
#:l..псludе <stдlо.h>
#i..I1cJ.\l\le <std1ib.h>
692
rлаfla 26, Взаимод"i\C11!И!! "роцессов в Unux
#..iпс1ш:lе.<lj,nuх( 11'С. h>
#iпclUq ;.<l.inux/ll1sg.h>
",..1п ()
(
1nt Ac;t; ;. (* Идентификатор Q!J,ереди *;
keyt кеу; ;* Ключ *(
intrss, . lе!щth; ;* Результат операцИИ :и длина
сооБЩЕ=!:Ц1Я .1
struct щуЬuf (
long rntY1'e; /* тип сообщения*(
/' Далее.слецуют npоизволыw:е. ПОЛЯ <жизависят от
СООбщет-щ *;
.int optype; /* тип операuии */
i;;.t. lop: 1 * nep!lWl onepqнд * 1
int. rop; ; * ВТОРQЙ onep«<tA * 1
rnsg;
. - ,
l' rенерируем IРСключ *;
кеу.,; ftQk(.... 'd');
/* СОздаем очередь или присоединяемся к уже
существующей */
if I(И = msgget ( кеу, I?CCREAT 1'0660 » li
(
рriпtf("ошибка при создании очереди\п');
ex1t{1}; ,
}
/* Заполняем сообщение */
msg.type = 1; /* тип сообщения; должен б&ть
положительным! */
rnsg.optype = о; (* тип операции *;
m"g.l':"op 6;
'msg.:C6p = s;
;* ОI!pедеЩ;i:':1if;:.i!л;щу. сообщения 4 байта' */
1-ength = sizeoflstruct тybиE) sizеоfЦьng):
Н( (l'es = msgsnd( id, &ЬиЕ, length, О) I == "'1)
{
рrint:f('ошибка при постановке сообщения в очередь\п');
exit(l);
)
)
693
UNUX: полное рУКОВОДСТВО
После запуска этой проrраммы запустите протрамму ipcs и посмотрите
на статус только что отnравленноrо сообщения. Теперь напишем про
rрзмму, которая получит это сообщение.
26.5.4. Получение сообщений очереди
Для получения сообщения используется системный вызов msgrcvO:
int msgrcv( int msqid, strut msgbuf *msgp. int msgsz,
long тсуре. int msgflg)
Первый apryMeHT определяет оче]reДЬ, из которой ну.ж.но получить co
общение. Второй артумент это адрес буфера, в который будет заШlса
но сообщение. ТреТlЙ ap')lMeHT ЭТО оrраничитель ДЛИНЫ со05щения.
Четвертый aprYMeHT это тип CQo{jщения. Ядро будет искать в очереди
иаиболее старое сообщение JIaHHoro типа и веРliет ето копию. Если
mtype=O, то ядро вернет саlOестарое сообщение независимо от типа.
После успешноrо получения сообщения оно удаляется из очереди.
В случае успеха вызов msqrcvO возвращает число байтов, скопированных
в буфер, или 1 в случае ошибки. Перемеиная ermo устанавливается
следующим образом:
. E2Вla длина соo{jшения больше, чем оrpаиичитель msgsz;
. EACCESS У вас недостаточно прав;
. EFAUIT недоступен адрес буфера;
. EIDRM очередь уничтожеliа ядром;
. EINТR операция прерваliа поступквшим СJlf»алом;
. EINVAL опшбка в арryмеитах, НaIIpимер, отрицательный размер
сообщения или неверный номер очереди;
. ENOMSG нет сообщения, удовлетворяющеrо условию. Посылает
ся, если уста»овлен флаr IPCNOWAIT. в ПрОТИВIiОМ случае процесс
будет ждать нужиоro сообщеНШf,
Последиий api"YMeHT предоставдяет ДОПОЛliительные возможности по
работе с сообщениями. Если устаиовлеи бит MSGNOERROR в msgflg,
то если размер сообщения больще, чем mgl, оно (jyneT обрезано и вы
получите только msgsz байтов. Если флаr SMGNOERROR не ycтaHaB
ливать, вы получите ошибку E2BIG.
Следующий код получает сообщение из очереди:
int id; /* ID очереди */
int res, length; /* результат операции и длина * /
strllct ту buf bllf; /* буфер '1
int type.l; j* тип сообщ!ния */
694
rпaвa 26. ВзаИМОАействе процессов в Unux
lenqth sizeof(struct mybuf) sizeof(long);
if{lres msqrcv( id, &buf, lenqth, type, О ») 1)
(
рrintfl"ошибка!');
/* можно проанапизировать ошибку *!
if(errnoE2BIG) рriпtf("Сообщение слишком большое\п");
if(errnoEACCESS) printf("HeT доступа\п");
/* и "rд. */
exlt(ll;
26.5.5. Проверка наличия сообщения в очереди
НаВерное, вы не хотите, чтобы ваша nporpaMMa ждала, пока в очереди
fЮЯВИТСЯ lfyJ!QIoe сообщение. Используя особеllliОСТИ системноrо вызова
msgrev(), можно написать код проверки наличия сообщеНИIl опреде-
ленноro типа в очереди. Напишем функцию mSlLe$tsO, которая будет
возвращать TRUE, eCJ!1J сообщение есть в очереди.. !V/И FALSE, если
сообщения в очереди Нет.
int msgexists(int id, long type )
{
int res;
ifl{resu1t = msqrcv( id, NИLL, О, type, IPCNOWAIT 1) -- -1)
{ iflerrno = E2BIG)
return(TRUE) ;
J
return (FALSE) ;
в вызове msgrcvO отсутствует адрес буфера и длина сообщения. Этим мы
специально провощrруем ошибку, а вызов lPCNOWA]T отказывает от
блокировки процесса. мы проверяем етто; еcщr ОН равен E2В1G, значит,
сообщение есть в очереди. Ошибка E2В1G порождается потому, что мы
установили размер сообщения равным О.
695
LINUX: ПDЛНое ру!<оводство-'
26.5.6. Тотальный контроль
До сих пор мы рассматривали только системные ВЫЗОI!Ы для работы с
сообщениями очереди, сейчас рассмотрим системный вызон msgctlO,
преllназначенный для контроля самой очереди.
int msgctl ( int msgqid, int cmd. struct msqidds *buf );
Первый apryMem ЭТО ID очереди, второй команда, которую нужно
выполнить:
. IPC ST АТ записывает в буфер buf структуру msqid ds для О'lереди
сообщений с идентификатором msgqid.
. IPCSET устанавливает значение ipcyerm структуры msqid. Зна-
чение берется из буфера buf.
. IPCRMID удаляет очередь.
Системный вызов l1озвращает О в ,случае услехаи '1, если ПРОlIЗошла
ощибка. Переменнаяеrrnо устапа1ЩlШается следуюtци:мобразом:
. EACCESS nедостаточно прав;
. EFAULT невозможно полyчwrь доступ к адресу буфера buf lU1и
неверный адрес.
. EIDRМ очередь была УШlчтожена прямо во I1ремя запроса.
. EINVAL ощибка в apryMemax, например, нещ>авилъный Ю-о'{е"
рели или отрицательный размер сообщения.
. EPERM У вас нет прав на запись н очередь.
Структура msqidds уже рассматривалась ранее, поэтому не вижу смысла
приводить ее описание еще раз.
Если подытожить, то все, что мы можем сделать с очередью это удалить
ее и измеtlИТЬ права доступа или инФОрмацllIO о владельце (е1'О UID и
GID). Как удалить, думаю, понятно. Напишем функцию changemodeO,
которая будет изменять права доступа к нашеЙ очереди. Ей нужно пере-
дать два параметра идентификаroр О'lереди И нQвый режим доступа в
пиле строки, иапример, . 066 О' .
int changemode( int id, Gh4r *mcde )
(
struct msqidds buf;
1* Получаем копию структуры В буфер Ьи! *1
jf I msgctll id, IPCS'I'AT. /iibuO == 1 )
(
return(l) ;
696
rЛ8S826, Взаимодействие процессов в Linux
1* Изменяем права ДQступа */,
аасаnЕ Iтоде, "%ho", &rщf . msg....P)erm.шоdе) ;
/' Модернизируем внутреннюю структуру */
if( msgctl( id, IРСЗЕТ, &buf } == 1 )
{
return{l);
returnlO) ;
Наша функция возвращает О в случае успеха или 1, если произошла
ошибка.
На этом обзор средств IIдЯ работы с очередями COQбщениЙ можно считать
законченIO>IМ, теперь с ЧИСТОЙ совестью перейдем К следующему средству
(РС семафорам.
26.6. Семафоры
Семафор это объект [РС, управляющий доступом к общим ресурсам
(устройствам). Семафоры не ПО:ЩОllЯЮТ одному процессу захватl1тЬ
УСТрОЙСТ.80ДО тех пор, пока с эти!.j устроЙством работает ДРУI'ОЙ процесс.
Семафор может находиться в двух положениях: О (УСТРОЙСТВО занято) и
J (устройство свободно).
ОДИНОЧЦЫЙ семафор используется редко, практически никоrда. Для KOH
троля доступа к ресурсам обычцо используются мцожества семафоров.
паже если это множество состоит Bcel'O из одноro семафора. Например,
пусть у нас есть три принтера. Коrда вы посылаете заДalше На печать,
диспетчер лечат!! просмаТР\iвает маожеСТIIQ сt':мафоров прщперов и вы'
ясняет, ecrь ли свободный прИliТСр. Если да, то онна'lИнает печатать lIаше
задание, если же нет, диспетчер став!!т ваше задание в очередь печати.
Еще одии пример ИСIlользования семафоров это счетчюш ресурсов.
Представим, что вместо пр!!нтера есть некий контроллер, позволяющий
IIЬЩОЛНтъ 100 заданий одновременно. KorIla он свободен, значение ce
мафора равно 100, По мере IIоступления задаюd! дцспетчерконтрOJтера
уменьшает значение семафора на 1. а по мере их выполнения увеличивает
на 1. Котда значение доститает О, новое задание ставится в очередь до
освобождения контроллера.
697
LINUX: полное руководство
Как и D случае с очередями сообщений, для семафоров в ядре Linux есть
своя структура semidds, которая оПиса\tа в файJtе /usr /src/linuxl
include/linux/sem.h:
struct seidds {
struct ipcerm semerm;
timet seotimej
операции */
timet:
изменения */
struct sem
семафор '/
struct waitqцeue *ventn;
struct waitqueue *eventz;
struct 8emundo *\lпdо;
массиве */
ushort
Мdссиве 1< I
};
/* права доступа */
/' преМЯ последней
semctirne;
/' время nоследнеrо
*эетЬазе;
/* указатель на первый
/* ОЧеРеДН ОЖИДания */
(* запросы undo в этом
sernnsem5;
/* номера семафОРDВ в
Обратите внимание: в структуре ещь указатель на первый семафор. Тип
указателя Бет. Данный ТIЩOЩIсывает семафор:
struct: эет {
short sempidj
ushort semvql;
ushort semncnt;
освобожд. рее */
ushort semzcnt:
всех рее. */
(* pid последней операции *(
(* 'I'еl<ущее значеи>!е семафора '(
1* ЧСО процессоS, QжидаюЩИХ
/* число процессав, ОЖИДаюЩИХ осв06.
};
. sem ..J1id
РЮ процесса, кuri:Jpый ПроllЗD<:>t ЦQCJ\eJUПOЮ олерацюо над семафором.
. sem semval
Текущее значение семафора.
. semsemncnt
qисло процеССОD, ожидаЮЩИХУDe1lИчения значения семафора, то есть
освобождеНИII ресурсов.
. sem semzcnt
ЧисЛо проnессов, ожидаЮШllХ освобожденИJI всех ресурсов:
698
rЛ8i'JЗ 26. Взаимодействие процессов в Unux
26.6.1. Создание множества семафоров
Для создаНЮI множества семафороп ИЛИ подключения к уже существую-
щему множестпу используется системный вызов semgetO:
int sernget ( keyt key. int nsems. int sernflg );
Первый apryMeHT это ключ IPC. который, как обычно, создается си-
стемным вызопом ftok(). ОН сравнивается с ключами друrих семафоров
и в зависимости от значения semflg рещается, создаnать новое множество
ПЛИ nОДКЛЮ'ПIТЬСЯ к уже сущестпующему. Значение semng:
. IPCCREAT создать новое множество семафоров;
. IPCEXCL при использовании с IPCCREAT порождает ошибку,
если семафор уже существует. .
При создании семафора, как и при создании очереДII сообщений, мы
можем указать права доступа:
IPCCREAT I 0660
Второй арry",ент системноro вызова seтgetO задает требуемое кали'!ество
семафоров. Оно оrраничено в файле sem.h:
#деfiпе SЕММSL 32 /* <= 512 */
Данный apryMeHT иrнорируетс>!, если вы nодключаетесь к уже существу-
ющему ,!Ножеству, а не создаете ноnОе.
Функция semgetO nозnращает идентификатор семафора иди -1 В случае
опrnбки. Переменна>! errno устзиаВJПшаетс>! следующим образом:
. EACCESS у ВаС lIе хватает полномочий ДJIЯ выполиеlfИЯ опера-
ции;
. EEXISTS множество сущестпует. ero нельзя создать;
. EIDRМ множество помечено ДЛЯ удаления;
. ENOENТ множество не существуе'r, не было ии одной операции
IPCCREAT;
. ENOMEM не хватает памяти;
. ENOSPC достиrнyто максимальное количество семафороп.
Функция для открытия существующеro семафора может выrлllДеть так:
void opensem(iпt *aid, keyt keyl
(
lf((*sid=sernget(key, О, 0666)) ==1)
(
рrintf("Семафор Не существует !I! !\n"};
exit(l);
699
LINUX, полное PYK080ДCТIIO,
}
Для создания множества семафоров можно использовать следующую
функцию:
void сrеаtеsgm(iпt *sid. keyt key, int n)
(
int с=О; 1'* счетчик * I
union semun sems;
if (п > SЕММSL! (
рriпtf("Превыmен лимит. Максимальное чисп6 семаф6РОВ
%d\п" ,SЕММSLI;
exit(1);
if «*sid = semget (key. п. IPCCREAT I IPCEXCLI 0666» 1)
(
рriпtf("МЕожество уже существует\п"};
ехН (1);
sems.val = SEMRESOURCEМдX;
/* Инициализируем все элеМеНТЫ ОДНИМ значеНием *1
sетсLl(*sid,с,SЕТАLL.sел\вl;
J* Если нуна_устаноgиь разные значеgЯI нужно
использовать SETVAL,
например
for{c;O; c<n; с++}
semctl(*sid. с, SETVAL. вете);
*/
26.6.2. Выполнение опервций над оемафорами
Для выполнения операций над МНQ)t;.jЮflЮМ семафоров служит системный
вызов scmopO:
int ветор( int Bemid, struct sembuf *sорз, unsigned пзорз) ;
Первый apryMeHT это иден'ntфикатор семафора, возвращаемыЙ вы-
зовом semget(). В1'ОрОЙ ЭТО Массив операций, которые нужно выпол-
нить над семафорами. Последний арryыент это количество опера пиЙ
в массиве.
700
rлава 26. Взаимодействие процессов 8 Unux
Второй aprYMeHT лредставляетсобой массив типа sembuf:
struct sembuf {
USf1.0rt sеmrшm;
яhоrt. Rp.moPi
short semf1g;
/* номер семафора в массиве *!
j* операция над (",:р''М;;,фпром */
1* Флаrи */
);
. semnum
Номер семафора, над которым нужио ОЫnОЛНIIТЬ операцию
. semop
Выполняемая операция. Может. быть отрицательным IfЛИ ПOJlожи
те,щ,I{blМ 'U\с.пОМ. ECJJU число отрицательмо, зна'lе.lИе семафора будет
уменьшено, а если положител"НЬ!м увеличено. Не забывайте, осво-
бождая ресурс, увеличивать значение сеМафора за вас нцкто это
не сделает. Если semop О, то процесс «засмет» И не «проснется»
до тех пор, пока значение семафора не ста!!ет О.
. sem Jlg
Флаш операции, например, IPCNOWAIT. ЕслиIPСNОWлrr Не ycra-
НOIlЛен, то процесс «заСнет» до тех пор, пока не OCIJободится указанное
количество ресурсов (пока друrой npOllecc не освободит их).
Чтобы лучше понять, что такое semopO, вернемся к нашим принтерам.
Пусть у Нас есть всеro один принтер, умеюший выпоЛНЯ1." только ОДНО
'Jадание за раз. Начальное Значение семафора nрмнтера будет равно 1.
Перед посылкой задaнw; На приптер нужно убедиться, что он свободен,
то есть получить от семафора значение 1. Заполним массив sembuf He
обходимой для выполиения операции информацией:
struct sешЬufрrпJосk = { О, l, IPCc.NOWAIT };
.здесь о это номер семафора: у нас Bcel'O одип принтер, а нумераuия
на'lИнается с нуля. 1 это операция, запрашивающая единицу ресурса.
Если npЮlТер свободен, то nOCJJe выполнения этой операции значение
семафора принтера будет равио О.
Мы ТакЖе установили флаr IPCNOWAIT. чтобы вызов прошел немед-
ленно. Если принтер занят, вызов вернет ошибку:
if(semop(sid, &prnlock, 1) 1) рrintf("Принтер занят\n");
701
LINUX: nопное Р"<ОВОДСТIЮ
ПервыЙ aprYMeH'!' это идентификатор объекта !РС, второй это
массив операций. Последний арrумеит ветор{) .оворит о том, что у нас
есть только одца структура пша sembuf, то есть нам нужно выполнить
только одну операцию.
После выполнеНIIЯ задания мы доЛ""G!Ь! сообщить семафору об освобож
дешПl ресурса:
strucL ';embuf prnunlock. : ( О, 1. IPCNOWi\IT );
semop(sid, &prnun1ock., 1);
В случае УСПеха, Korдa выполпеllЫ рсе операЦJIII, Cl!cтeмllЫЙ IJЫЗОВ semopO
возвращает О. В случае ошибки возвращается 1, а еrrnо равна:
. Е2ВЮ КOJшчество операций (ар.умент nsops) превышает разре
шенное число операциЙ;
. EACCESS не хватает IIОЩIОМОЧНЙ;
. EAGAIN ошрация не может быть вьmолпена (при ИСПОЛЪЗО8aJJИИ
флаrа IPCNOWAIT), такую операцию нужно ПоВТОрlПЬ снова;
. EFAULT указатель ворв указьmает на ошибочный адрес;
. EIDRM множество помечено на удаление;
. EINТR прервано сиrналом;
. EINVAL неверный semid;
. ENOMEM не хватает памяти для создания стрУКТУРЫ Undo"{)ne
рации;
. ERANGE зна'!ение сеМафора ВЫIШIО за пределы доцуст\\мых зна-
чений.
26.6.3. Контроль семафора
Для контроля семафора используется системНЫЙ Вызов semctl():
int semctl ( int semid, int semnurn; int crnd. union Бemип arg );
Первый apryMeHT ЭТО идентификатОр семафора, второй номер ceмa
фора во множестве семафора!! (нумерация начиняется с О). В отлИЧие от
очереди сообщеlШЙ, rдe nocтaтo'!llo было указать только идентификатор
очереди, при работе с семафорамн нужно обязательцо указывать номер
KOHKpeTHoro семафора, над которым вы хотите выполнить операцию. Tpe
тиЙ apryMeHT ЭТО команда, которую нужно выполнить над семафором.
Возможные команды представлены в таблиuе 26,1.
702
rпaвa 26. Взаимодействие процессов в Unux
КОМВНДЫ упрв8Лвни g семафорами
Табл...ца 26. 1
Команда Н.:tШtчение
IРСSТДТ За"QМlo!не"f c.Tpj'КТYPY 'S.emidd5 Дt1A МНQжесt8а по .&Дрес.у buf объединения semun
(ЧУТЬ позже мы подробно рЗl;:смоrрим эту c.rp)'KryPV и обоеnинение semun)
IPCSEТ УСТilНЩ!.I'1раfП ЗФiSЧЩiие члена ipc..,perm Ctpyt<ТYPbl .semidd$
'РС НМIO Удаляет МНQжеСТ8Q
GEТALL nQ;июпяеr nоnучи-rь ЗНечеНИR ВС;EI)( сеМафоров. 3начеlItj:l EJО3ВpI1ЩЗЮТСА в аИДе
масс!,>1:ва unsfgned .shon. на который укаэt:oi9ner l1eH объедиtiения ",пзу
GEТNCNr ВозsраЩ3l3f чисltQ nрtЩI3(;(;О8, IШfорыl3 оЖИДаю-r ресурсы В ДatlЫ МОМВНТ
GET?IO Возеращает РID процесса, sыnолнившеrо последНиЙ 8ЫЗОQ semop()
GEТVAL Ваэsращаеr значвние одноrо семафора
GEТZCNT Возвращает <l;испо прQЦессов, КоТорые ожи;и.ют полиоrо QСВQбо}I(ДВИ ресурс;а
sEТALl у'СТi\НЗВnIlt88ВТ :эначеНИ(t семафороа. 3начеНИII fiepyТr;sI из ЧllоВка army Q!5J;>ВДИНВНIllЯ
зетип
SEТVAL VCТ8iнэ.влиеает эО(ач..ие КOHt(peToro семафора. ЗИa'lение берется]ol3 элеМlOнта
"'.вl объвn,инеl'llll'Я: S;Bmun
Последний артумент это объединение (union) аР''Ументов, которые
можно использовать ДЛ" управленн" семафором. Рассмотрим подробнее
это объединение, объявлеНllое в фаЙле /usr/srcll.i!1ux/i!1clude/
1iпuх/sеm.h:
union Еетип {
int vali
struct sernidds
ushort 'array;
struct seminfo
void *.........,padj
1* значение для SETVAL */
*buf.; /. буфер для IРСБТАТ и IРСБЕТ */
/* иассиn дпя GETALL и SETALL */
'b1Jf; /' буфер ДЛЯ IPC_INFO */
};
Первый член этоro объединени" vаlисполъзуетс" ДЛ" установки значения
ORHOro семафора при иепользоваНlШ команды SETVAL.
Член buf используется командами ТРС ST А Т и IPC SET. ЭТО копия вну-
треннеЙ структуры данных семафора.
Указатель на массив array IrСl10льзуется командами GETALL и SETALL
ДЛR получения или установки значений всех семафоров во множестве.
ПослеДНJ<е два члена объединения специфllчны талько ДЛЯ Linux в пру-
('их UNIХ-системах вы их не найдете. Эти элемеиты использует ядро.
В случае успеха системный вызов semctlO возвращает наryралыюе число,
а I! случае ошибки -1. Переменна" ermo равна:
. EACCESS не хватает ПОJIIЮМОЧИЙ;
. EFAULT адрес arg ошиБО'lев;
. EIDRМ множество поме'lено 1L1" удалеНlШ;
703
UNUX: полное рУКОВОДСТВО
. EINVAL неправltllЬный aprYMeHT semid;
. EPERМ у вас 'нет прав для выполнения комапДJ,1 cmd;
. ERANGE знаЧСIIИС семафора вь1шло за пределы доnyсI1!мыxна
ченнй.
Пример получения значения семафора с lюмером.Nиз множества si!1:
j.nt valj
va1"semct1 (sid,. N. GETVAL, О);
Предположим, чтоцам нужно вывеe'J'И.COCroянне вее", трех имеlOЩltXся
принтеров:
int с I val;
for (с"О; х<3; с++)
(
va1 =semct.l (sid, с, GE1'VAL, О) ;
рrintf(Принтер %d %d\n"/c,val):
А ВОТ код инициализации всехi:емаФОРQ\I множеСТ\l!\$еmid:
union sеrnllЛ optS.l
int с;
opts.val 1; /* первоначальное значение семафОРОЕ *1
fOJC Iс=О;с<5;с++) semctl(semid, c,SETVAL,opts);
Довольно часто возникают опреJщлеЮlые СЛОЖНОСТlfС установкой прав
доступа к множеству семафоров. РассlOтрИМ следУ1\>11UIй код, позволя
ЮЩIIЙ установить права доступа к множеству semid. Права доступа за
даются в виде строки, например, «0660».
void sen1changeII1ode(iht, semig, сЬа::: *тоае)
(
int res;
strиct sernidds semdsi
ипian semun optSj
/* нужно указать нашу локальную копию структуры */
optsbuf &semdsj
if «(:res о sem<;tl (semid, О, IPCSTAT. opts) I ..... l)
рriпt f (UError" J ;
exit(ll;
704
rлава 26. Взаимодействие nроцессоа в Unux
printfl"CTapыe права дос,ут1а %о\n", opts.buf>ser\LP€rm.rrode};
1* Изменяем права достуиа */
sscanflrnode, "%110., &opts.buf>semperm.mode);
1 * ОР!Jовняем внутреНН1JЮ структуру * 1
semctl(sid, О, IPCSET, opts);
26.7. Разделяемые cerMeHTbI памяти
СеJ'менты паtяти разделяются между несколькими процессами. ОДИН np<r
I1есс СОЗД3е1' cerмeHT памяти, а дрyrие в любом КiЗЛИчестве исп0Jlb3УЮТ.
Разделяемые CerMeltTbl паМЯ1"И ЭТО самый быстрый способ U'C.
Для каждoro разделяемоrо сеrмеита паМЯТI! ядро поддерживает специ
альную структуру shmidds, описанную в файле lusr Isrc!linuxl
iпсltldе/linuх/shm.h:
struct shmidds (
struct ipcerm shmerm; 1* права доступа *1
int stlffisegsz; 1* размеры. cerмeHTa в байтах * 1
timet shmatime; 1* время последней привязки */
timet sdtime; 1* время последней отвязки */
timet srctime; 1* время посдеднеrо изменения */
unsigned short shmcpid; /* PID создателя *1
(* PID nосл:еднеI'() процессапользоватепя cerMeHTa k /
unsigned short shmlpid;
short sr@hattch; / qиСДО привязок */
uhsigned short shmnpaes;
1* размеры cerMeHTa (8 страницах) *1
/* массив указателей на $frames > 5$*/
unsigned long 'shmages;
struct VТ!iаrе<lstrчсt *attaches;
/* дескрипторы для nрИБЯЗОК */
};
я IICMfforo сократил эту структуру, оставив описание только нужных нам
"олеЙ. Полаrаю, что ВЫ.В нем разберетесь. Возмож:н.q, вас заинтересовали
термины «иривязка» I! «отвя.зка», Привязка ЭТQ размещсние cerMCHTa в
адресном пространстве процесса, подключение к разделяемому cerMeHТY
flамяти (РСП). ОтnязЮl, соответственно, отключение. Поле shmnattch
содержит количество привязок к рсп на данный момент.
3 31t1t 3H
705
LINUX; полное руководство
Для создания HOBoro РСП используется системный вызов shmgetO. Этот
же вызов ИСПОJlьзуеТСJl ДЛJl ПОJlКЛючения к уже существующему РСП.
iпt shmget I key t key, int size. int shmf 19 );
Первый арryмеlП :это ключ !РС, ПOJI)'ченный с помощью ftokO, второй
размер реп в байтах, а третий флаrи системноro вызова shmget. Если
установлен флаr IPCCREAT, систС'мный вызов создаст новый РСП или
подключится к уже существующему cerMeIПY, если обнаружится, что
уже еСТь такоЙ сеrмеит (с таКlЩ же 3аачением КЛIOча). ЕСШI установлен
ф!шr IPCEXCL вместе с IPCCREAT (сам по себе оа бесполезен) под-
ключение к существующему Реп запрещается.
СистемныЙ вызов shmget(} возвращает идентификатор РСП или -1, если
произошла ОШl!бка. Переменная errno устанаВШIllается так:
. EACCESS не хватает полномочий для доступа к cerMeHТY;
. EINVAL неправильно заданы размеры cerMeнтa;
. EEXISTS cerMeHT уже существует, создание невозможно. Вы по-
лучите зту оши.бку, если будете использовать флаr IPCEXCL вместе
с (РС CREA Т при услов",r, ЧТО cerMeHT уже существует;
. IDRM cerMem помечен на удаление или У'.ке удален;
. ENOMEM не хватает памяти для создания ce.rмeHTa.
Приведем пример функции открыn!Я/создания РСП:
int ope!1sht:ts( keyt key, int size )
(
retuln (shmget ( key. size, IPCCREAT I 0660 ) I ==1));
ПОСJ\е [ЮJ\учеНllЯ Iщентификатора РСП МЬ! должны «ПРИllязаться» К
зтому cerMellTY, то есть разместить cerMellT в своем адресном простран-
стве. Для зтоrо используется системный вызов sbmatO (shared meтQry
allacl,rneпt);
int shmat I it shmid, char *shmaddr, int shmf1g );
ПервыЙ арryмсlП зто ИДСИ11lфикатор РСП, который мы получаем с пою-
шью предылущеro ВbIЗOI!а Второй арryмеlП зто адрес п!,,,вя,ки Если ука-
зать вмссто адреса ноль, То ядро само найдет нсраcnpeделенную область.
Третий aprYMeHT это флаrи. Обычно используется ДВа флаra:
. SHMRND переданный адрес будет ОКРУrlIен до ближайшей стра-
IIIЩЫ (сели вы сами указываете адрес);
. SHMRDONLY РСП будет доступен только длЯ чтения.
706
rла8а 26. Взаимодействие процессов . Unux
в случае успеха shmatO Iюзвращает адрес, по которому сеrмент был
привязан к npolleccy, или - J, если произошла ошибка. Переменная еrrnо
может принимать Beero три значения:
. EACCESS нет доступа;
. ENOМEM не хватает памяти;
. EINVAL ошибка в параметрах, то есть неправильное знаЧение ID
илн адреса припязки (shmaddr).
Пример привязки:
char *ptr;
prt shmat(shid,O,OI;
После привязки cerMeHTa к адресному простраНСТIlУ доступны операции
чтеНlI>1 и записи, которые очень напоминают работу с простыми указа-
телями.
Для СНЯТИЯ привязки используется системный IIЫЗОВ shmdt():
il1t shmdt { char *shmaddr 1;
В случае ошибки данный системный IIЫЗОВ возвращает -1. Значение errno
только одно: EINVAL, то есть вы непраВЮIЬНО указали адрес привязки.
После отвязки значение элемента shmnattch структуры shmidds умень-
шается на 1. Если больше нет привязок, то есть shmnattch = О, се!'мент
будет удален ядром.
Для управления РСП используется системный вызов shmctJ();
iпt shmctl ( il'!t shmid, int cmd. struct shl1tidds *buf );
ПервыЙ apryMellТ это идентификатор реп, второй команда, а третий
буфер для команд IPeSTAT/IPeSET. Команд для управления три:
. [PCSTAT сохраняет структуру shmidds по алресу buf;
. [peSET берет значение элеме,rrа ipcJ1erm структуры shmidds и
устанавЛlШает ero для cerMeHTa. Значение берется из buf;
. IPeRМlD помечает cerMem для удалеНI\Я, само удаление про.
изойдет, как только последний проиесс отвяжется от cerмeHтa. Если
сетмент помечен на удаление, ни ОДЮI щхщесс не сможет привязаться
к cerMeHТY.
l3 случае успеха системныЙ вызов shmctlO lIозвращает О ИЛИ -[,если про-
lIЗошла ошибка. Переменная еппо устанавливается так:
. EACCESS нет прав;
. EFAULT ошибочный алрес buf;
. EIDRМ cerMeHT помечен на удаление;
. EINVAL иеправильный идеllТификатор cerмeHTa.
707
LINUX, попное РУКОВОДЩl30
ВОТ теперь мы rотопы к наШlсаНIIЮ демонстрационной проrpамм1oIДJ!Я
работы с р<uделяемыми cerMeHTaMII памяти.
Листинr 26.6. Демон<:трациаННtJR проrрЙММ8 sllm demo.c
#inc),ude <stdio.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/shm.h>
1* размер нашеrо cerMeHTa 256 байтов */
#define SIZE 256
int main(int argc, char *argv()
{
key t key,
int shrnid, с;
cl1al *'ptr i
1* ключ */
1* идентификатор *1
j* указатель, через кторй мы будем
работать с Cer'MeHTOM * /
1* Еспи apeHTЫ не указаны */
if(argc o = 1)
{
pJCil1t f ("shmdemo usage: \п');
printf("shmderoo w string записать строку в сеrмент\п");
prinrf(NsLdemo r .пРочитать инф. из cerM€HTa\nPI;
Рl:jлtfl"shпldеrnо д удалить сеrиент\п");
printf("shmderno m rnode изменить права доступа\
n") i
exitl1.);
)
1* rе»ерируем КЛЮЧ IРС */
key ;::: ftok(".", 'П'};
1* Пытаемся'создатъ CerMeH'l'*/
ifi(shmid = slпgеtlkеу, SI?.E, IРСJREA:l'iIРСЕХСLI06БО) == 1.)
(
prinUI"CerMeHT существует, подключаемся к нему...\п');
(* Используем shmget без IPCEXCL */
i.f{ Ishmid = shmget(key, SIZE, О)) 1)
(
рriпtf("ошибка в shmget\n"j;
708
rлава26. ВзаИМОДl1ЙCТ1Iие ПРОЦессо8 в linux
ехН (1);
)
}
е1ве
[
рriпtf("СОЗДаем новый сеrиент\п");
}
1* Привязываемся к cerMeHTY */
if«(ptr shrnat(shmid, О, О)) :: 1)
[
perror("shmat");
exit(l) ,
/* Разбираем параметры командной сроки:
W запйсь в cerMeHT
r чтение
d удаление cerMeHTa
m изменение прав доступа
*/
switch(to1ower (argv[1] (1))
[
Саае 'w' : shmwrite(shmid, ptr, argv [ 2 ] ) ;
break;
саэе J:r': shmread(shmid, ptr) ;
break;
Саэе 'd' : shпlJrn (shтid) ;
break;
case 'm' : shтchangemode(shтid, "rgv[2] 1;
break;
)
/* ФУнкция для записи в сеrИент: ей HO передать ID
CeI'MeR'!'a, адрес nРИВяз1tи и записЪ!вае_,фОJ?мa.rrk1Ю */
shтwrite(int shтid, char 'ptr, сЬау *info)
{
strcpy(ptr, info};
;* Фунция чтения информаи из ceYMTa*/
sread(int shmid, char *ptr)
(
printf ("Информация ИЗ cerмeHTa, %э\n", руу);
}
709
UNUX: полное РУ'Ф80ДСТВО
1* ФуНКЦИЯ удаления cerMeHTa * I
shmrm{ir1t shmid)
{
shmctl{shmid, IPCRMID, О);
printf("CerмeHT помечен на удаление\n");
)
(* Функция изменения прав доступа. Ей нужно передать
идентификатор сетмента и права доступа в виде строки,
например, "0666" */
sk'Псhаngеmоdе(int shmid, char *тоде)
{
struct shmidds mdsj
shmctl(shmid, IPCSTAT, &rnдэ);
printf("CTapble права доступа: o\n". mds.sbдLperm.mode);
sscanf(mode, -%0.; &mds.shщLpеrm.mоdе);
shmctl(shmid. IPCSET. &mds);
printfl"Hosble права доступа: %о\п', mds.shmerm.model;
Использовать проrрзмму нужн!) так:
./shmdemo w строка
запись строки в CerMe<lT
.Ishmdemo r
чтение строки из cerMeHTa
.Isl1mdemo т права
изменение прав доступа
./shm demo ---d
удаление cerMeHTa
Выполните команду
$ .fshmdemo w string
А затем заПУСТllте утилкry ipcs.Bbl увидите, что наша проrpамма создала
разделяемый сеrмеит памяти:
H Shared Метоту Segments _.
key shriid a-.ner pmrs Wtes
Ох44063781 О root 660
nattch
256
status
О
710
rJЩва,26. Взаимодействие процессов . Unux
Semaphore Arrays
key semid owner рет"
nзетв
status
MessagQueues
key msqid owner реrщs
Затем выполните команду:
$ . /shmdemo r
Вы получите информацию:
Информация из cerMeHTa, string
usedbytes messages
Попробуем изменить прапа доступа, а затем просмотреть информацию
командой ipcs;
$./sdemo rn 0666
Shared
Щ sl'm:i.d
Ох44063781 О
,
MemDry Segments
cr.<1€'r penre
root
еэ
666
nattch
256
statuв
О
Semaphore Arrays
key semid OWner perтns
nselns
status
Message Queues
key msqid owner реrщs
usedbytes . messages
711
rлава 27
СОЗДАНИЕ
CETEBOrO
ПРИЛОЖЕНИЯ
в LINUX
ПРОТОКОЛ TCPjlP
ПРОТОКОЛ 'СМР
проrРАММИРОВАНИЕ СОКЕТОВ
LINUX ПОЛНОЕ РУКОВОДСТВО
в rлаве 6 J! ввел основные сетеВЫе понятия, Пере'!ИСЛИJl самые ПОnyJlЯplJЫе
протоколы и вкратце рассказал об основе сети Интернет протоколе
ТСРПР. Б этой славе я собираюсь подробнее остановиться на протоколах
TCP/IP и IСМР н покаэать, какие средства вы можете иcnользовать для
написания собственных приложений для работы в СеТИ.
27.1. Протокол ТСР /IP
27.1.1. Мноrоуроанеаая архитектура стека TCP/lP
Протокол ТСРЛР был создан в конце 60-х начале 70-х ('адов МенТСТвОМ
DARPA Министерства Обороны США (U.s. Dераrtщепt of Defense Ad-
vanced Research Projects Аgепсу). Основные этапы развитилэтоrо про-
токола отмечены в таблиuе 27.1.
3мпы pifэеиrйя протокола TCP/IP
Таблица 27. 1
roд Собып.е
1970r. Вееден в ИСПОЛЬ.ЗОS8iН\4е ПРО1'ф,:а" NCP (NetwOrk Con'trot Protocol} дn уэnOfJ се"",,, Arpsnet
1972r. ВЫWl1апеРВЗR СП6циФикаЦИS'l'Теlnt (cf,f. ЯFС 318)
1973(. ВвеДен npOfOIo;QJ1. ПР (FC 454)
1974.', Разрабоrана nporpaмMa тср (Тrзпsmissiоn Control Progmm}
1981 r. Onyf5nIllK08.aH сrандщrr nратокаnа IP (RFC 791)
1982 r. ОбъединениlI3 I'РОЮКОIIОВ тср И IP в ОЦ,НО це1l06 ТСРIIР
'\983r. Сеть ArpnnEtt r\ереаедеЖl жt,nрОТDI(ОЛ ТеР {ранее исm:тЬ3QваJ1СЯ протокол нср)
1964r. Введеl10lдоменнм EI/IC<Tet.ta имен DNS
Как видите, все стаlЩарты интернет-nротоколов оrтубликооаны в доку-
ментах RFC. Документы RFC (Reqиest [or Coттeтs) зто ДОКУАtенты,
в которых описывается устройство сети Интернет. они создаются со-
обществом Интернет (IlIlernet Society, ISOC). Любой 'шен ISOC может
оrтубш!ковать своЙ стаlЩаР; в документе RFC. Документы RfC делятся
на пять типов:
713
UNUX: полное рУКОВОДСТЗО
1, Требуется (Rеqшrеd) данный стандарт должен бmь реализован
на 8сех основных vзлаХ ТСРIIР.
2, РекомеlЩУется (Recommended) оБы'lоo такие спецификаЦI\И RFC
также реализуlQТ<:Я,
3, Выборочно (Elective) реализация не обязательна.
4, Оrраничеююе использование (Limited use) не рекомендуется для
всеобщеrо nр",мснения,
5. Не рекомендуется (Not recommended) не ре"омендуются,
Прото"олы семейства ТСРIIР можно npeitcTaBtTb 11 виде модели, co
стоящей из четырех уровнеЙ: ПрИJ(Jlадноrо, OCHoBHoro, межсетевоrо и
сетевою (таблица 27.2).
Уровни CftЖ8 прстоколов TCP/IP
Табпица 27.2
Уровень 1 f1РИК:lЩД!-lQPI УРОВQь,tурОвf.Жl:.nрИ!lОЖ:.ения. Арр1lСЗ;tiоn. Layer)
Уро88НЬ. 2 ОсНGВНОИ (транспортный} урОВйНЬ (1ranspc>./'t. L.ayerl
Уровень 3 Межсете90Й pOBeHb (уровень Internet, Inteme1 Layerl
Уровень .4 УрО8ОНЬ Cer8St;i.lt интерф&Дсоэ (Network intqrface Lз'J'l9!r)
Каждый из этих уровией выполняет определенную задачу ДЛЯ орrаииза-
ции надежноЙ и ПРОИЗВОДlIтельной работы сетн.
27.1 .1.1 . Уровень ceTelloro интерфейса
Этот уровень лежит в основании всей модели протоколов семеЙства ТСРI
IР. Уровень сетевоro интерфейса отвечает за oTnpaBКY в сеть 1I Ilpием из
сети кадров, "оторые содеРЖАТ информацию, Кадр (frame) это еДИНlща
данных, KOTOPblMI\ обtениваются КОМlIьютеры в сети Ethernet. Для обо-
значения блоков данных определенных уровней используются термины
"вдр (frame), nакет (packe!), дейтаrрамма (datagram), сетмент (segment).
Все эти термины обозначают транспортируемые отдельно БЛОЮI даниь!х,
и их можно считать синонимаМII. Название блока пересылаемых данн\>!Х
ИЗМеняетс>! в зависимости от уровня (рис. 27.1).
27.1.1.2. Межсетевой уровень
Протоколы Интернет инкапсулируют блоки данных в пакеты (деЙ'tВ-
rpaMMbI) н обеспечивают необходимую маРЩРУТIIЗIЩI\Ю. К основным
ннтернет."ротоколам относятся:
. IP (/пlerne/ Pro/o<:ol) предназначен ДЛЯ отправки и марwруrnзащш
пакетов.
. ЛRР (Address &so/U/ioп Protocof) используется для получения МАС.
адресов (аппаратных адресов) сетевых адаптеров.
. ICMP (/тете! Canlro/ Message Pra/oca/) предназначен для отпраВlrn
IIЗвещсниЙ и сообщений об ОIJJибках при передаче пакетов.
714
rпaBa 27, Соэдание ceTe8oro приложения 8 LJnux
ПРМlUJВДНые протоколы
l'pacnop.l)otыe nporOkOl1h1
тор и ив?
Протоn 'Р
м'вт
Сетевью интерфeйct.l
""""
G
Рнс. 27. 1. пересылкэ блока данных в стеке протоколов TCP/IP
. IGМР (lnteтe1 Gюuр Managerneпr РЮtосоl) используется узлами
для сообщеиия маршрутизаторам, которые. подлерживают rpупповую
передачу, о своем участии в rpуппах.
. ЮР (Лои1е In1eтe1 PrQ1ocol) и OSPF (Ореn Shor1es1 Palll First) про
токолы маршрутизации.
На этом уровне реализуется передача пакетов без установки соедине
нил дейтаrраммным способом. Межсетевой уровень обеспечивает
перемещение пакетов по сети с использованием наиболее рациональ
ното маршрута (протокол OSPF). Основная функцил межсетевоrо
уровня передача пакетов через составную сеть, поэтому этот
уровень также называется уровнем Интернет.
27.1.1.3. Транспортн..." (основной) уровень
Этот уровею.обеспеЧlIвает сеансы связи между компьютерами. Существу
ет дватранcnоpтRШ протокола: ТСР (Tral1Sтissidn Contro/ Pт/ocol) и UDP
(User Da/agrarn Protocol). Протокол ТСР ориентирован на установление
соединенlUI, то есть перед передачей даНlIыхкомпьютеры «доrоварива
!отся» между собой. Обычно по этому протоколу передаются большие
объемы да11НЬ1Х IIЛИ даниые, для которых требуется подтверждение их
715
LINUX: полное ру\<оводство
приема. Э'юr ПрОТОКОЛ используеТCSiQoЛЬШИИC11l0М сетевых npиложений,
так как обеспечивает доcrаточную.надеJКНОСТЬ при передаче данных.
Протокол U ОР не орrlеИТИрОn8Н на соединение и не rapalmlpycт доставку
пакетон (neftTarpaMM), зато он работаст быстрее ТСР. Обычно по этому
протоколу передаЮТС51 небольшие <:>бъемы данных. Отоетстоенность за
доставку данных несет сетевая проrрамма.
27.1.1.4. УРО8ень ПрИПQJI(еttlo1Й
Этот уровень являетс" вер1ПIIНОЙ мОделrr ТСРдР. На этом уровне рабо'
тают практически все распространенные утилиты 11 CJJ}'Жбы: DNS, Telnet,
W\VW. Oopl1er, WAlS, SNMP, FТP, ТРТР, SMTP, РОР, IMAP.
Таб}[ица 27.3 показывает соотuеТС1'uие уровней стеКа протокола TCP/IP
сеМИУРОВlfевой модели OSI.
CQOT8eTC"reUe урOlтей стека ТCP/IP мo.t:IВЛИ' 051
Таблица 27.3
Уровень Пpotoк:оп Уроню. стек.
модели OSI lCP/1P
. W>IWI (HrtPJ, FТp, TFТP, SMТP,POp, 1.1""1. WAIS, SNMP 1
5,4 тср, оОР 2
з IP, ICMP; R!I!()SI'F, ДАР з
2.1 Eih()me.PPP',SllP 4
27. 1.2. CTPYкryp пцкетов IP и ТСР
Протокол IP не ориентирован на соединение. поэтому не обеспечивает
надежную JtOCl'aBКY дщшых. П(lJ1Я, iini«:аllие которых npиведено в табmще
27.4. предстзюmют собоЙ IР'ззI'ОЛОВОК и добавляются КlJакету npи ero
получении с транспортною УРОВНЯ.
Cтyкrypa за/'О.fIО8/(8 lPnaкeтa
Таблица 27.4
Пола OnИС8нМе
Soиrcc IP-otd<Jrnб$ IР-а,щюс отnрaвmСl1й пакоТ8
Destiт:Нi0l1 rp.addre$S 'Р.адре.с ПОllа"еля пouета
ProlQCC1 ПPUТQК:ОЛ: iCP или иор
Check5um КОНТРОЛЬН8$1 сумма дпяпроаеркм целостности nВKeT8
Вре""я ЖVl-3t+JII fЩК-е'Лi: 'ОnреДМ'А8Т,1;:II:(ШI:>КО Cif.lk)'Нoaпe)WaI'pQМMQ h4QЖ8Т
rrl (Tiтe io li...e) НElХОДИ'ТЬСfl в сети. Предотвращает бесконечное БJ1уждание паJtетоз
в СQrи 3Н<lчеНIffi ТТLавтомат.иЧIЗСJ(И УМfН1ьшавТ<:i! нв одну или 6OJl8f!l
ce.Нд при npl:lXO:Ae через каждый Ме.рШР)lТИ38.ТОр сати
Versipn ВеРСИЯПРQтоколаlР 4",ли 6 (4 бита}
H8der L-fll,gth ДпИfШ звrОf10ВII(В I'Шкеf.а (4 БИl'вl Минимальный размер )8rol109K8 20
байтов
716
rilasa 27. Создание ceTeBOIO nрипожениS! в Linl..lx
продренив rt'6л, 27.4
non. ОПКС:8ние
ТИП оБСЛУ.1<иванмя: обоЗ1-laЧel-iие rребуемоro ДlJй Э1'оrо nакв1'8 r«(.iчесrва
ТyfX' 01 Service (J оБCJIуживаНИfl пр"" ДQСТОmt:c"jЩД'13 t.'It1рUiрyrиоо10ри IР"еТИ. Здесь
оnреДВЛАК)lСЯ приоритет, .3аДерЖ:Кi, пропускна смсо6ноСТь (8 б\ltТОS}
Total LenQth Длина деЙТаrраммы IР'протокола (1 б бктов)
!dentiflcation ИдеНТИфИJCзrор ПЗj(ета, Если лаке'!' ФР2irмеiiТl-1роаан (раэБИ'f;.l8 чесl'\o'I,
ТО все фраrмнrы имеют ОДИНЬХОЗЫl1 I-IдеkТИФИК&ТОР (16 tштое)
Frngmentetlon AщJs 3 битв Д11Я фnsrО9 фраrМQнтацин и 2 БИТа д1IЯ 'rе!l.ущвrо ;!СПОЛ1030вания
СМеЩение фр.а.rмеита: УК83ыэае-r на riопожеt1ИtJ фраrмеиroа ОrtЮСИ1"ElЛЬ-
Fragmentation Ot1Mt но Ha"lana поnя дамны)( IРПакета, Если фраrмвнтв.ции не!; смещвние
ра8НО 0:0;0 (13 б1'uвJ
Opttons and Paddlng ОПции
Протокол тср в отличие от протокола IP ориентирован на установление
соединения и обеспечивает надежную доставку данных. Структура TCP
пакета описана в таБЛJmе 27.5.
Структура эаroлOiJ«а TCPпaKeтa
Таблица 27. 5
По.. ОПМСatUlВ
Sour<:&pClf1 Порт ТСР УЭЛаОТЕ1ра8И'1'еIlА
D6slina.non Рon Порт тср узла-получателя
Sequenc& Number Номер ПОСi1еДЩJё:iтеJ1t>ноеТI-I nекетов
Дr:;knowjеdgвmеnt NшnЬеr Ко...еРПС:ШТе'&Р)I(ДенSI;: ПОРДКО8ЫЙ Номер бsта. КQ'fорй ЩЖaJIl:>Н\:АЙ
У3М росt;ЧИТЫRaО1" fюnУЧИТЬ спе,цУ1ОЩИМ
Odta LеПфh Длина ТСР.пакета
RР.зеrved Заре3ервироВ-2НО АЛ1=! будущеrо использоваНIo1J1
FJags Флвrи: описанИй оодерхиМorо Cl'!rмeHTI1
WindoW ПОI<8ЗЫ&ав1' достуr\ное Me-ro Б Оl(нв проr()kОЛG тср
CllQcksultJ КОН'ТРОАьная суммэ: ДnA проаере:и ЦGflостнаст na;.:ef8
Urgent F'Qjntsr О Указатель СрО"lНО::1'И: при QТnjUliElкe СРОЧНЫI( данных (поле FtagsJ в
ЭТОМ Поле з:!да€!тся rранице: обласl'И (;рочны)( Дi)HHЫ)(
27.2. Протокол ICMP
27.2.1. Для чеrо используется протокол ICMP
Протокол межсетевых управляющих сообщений исrlOЛI,зуется ДЛЯ диа-
rНОСТИ'lеСКIIХ целей, Например, система А передала системе Б неnерныЙ
пакет. СИС1"ема Б с помощью протокола ICMP может «сказать» системе
А, что посланный ею пакет нскоррсктсн, Также ПО этому нротоколу
ПРОИЗВОДИТСЯ диаrностика сети. Мноrие из вас ИСПОЛЬ'Jуют утилиту pillg,
717
LINUX: полное РУКОВОАства
чтобы определить, доходят ли отпраuленные вами пакеты до какоilто
определенной машины, даже не подозревая о том, что ping использует
КаК раз ПРОТОКОЛ ICMP.
С помошью протокола [смр можно определить не только тип неиспрan
ности, НО 11 маКСllМально УТОЧНИТЬ ее причину. Например, тип сообще
НIIЯ 3 (<<Адресат неДОСТIIЖИМ») свндетельствует О TO(; что посланНЫЙ
нам пакет не может «добраться» до адресата. Кроме Тllпа сообщения,
возврашается ero код, ПОЗВОЛЯЮЩИЙ детализироца'l'Ь неисправность.
Например, код D означает, что сеть недоступна, 1 'узел недоступен, 2
протокол недоступен и Т.Д. В таблице 27.8 ниже перечислены ТIШЫ и
коды сообщений IСМР.
Обязательно ли посылать сообщенне об ощибке, I!ОЛУЧИВ некорректный
пакет? Нет, из шаны 19 вы узнали, что такие пакеты (иапример, OTnpaц
леННЫе на заnpешенный для доступа нзвне порт) можно просто III1Ю
рнровать, Первый IJОДJШД «вежливее», второй безопаСllее. ПредстаIIЪте,
что злоумышленник отправляет с 1000 машин 1000 пuетов с указаllием
иеверноrо порта на вашу систему. Torдa ваша система только те", 11 будет
заниматься, 'ПО отпраDЛЯТЬ сообщения об ошибках. Это называется aTa
коЙ на отказ. Конечно, современные брандмауэры nоэволяют избави1'Ъся
от этоrо неприяТllOl'О I1влеНIIЯ, но не у всех они устанОDЛены И настроены
должным образом.
27.2.2. Структура IСМР-пакета
Для ЛУ'lшей диаrностики ошиБКJI вместе с ICMPпaKeTO'" передается
заrоловок исходноro пакета, вызвавшеrо ошибку. Также передается спе
цизльный указатель на ПОЗIЩИЮ за.roловка, позволяющиЙ опредеJШТЬ,
что Именно вызвало ошибку. В случае се непраВИЛЬНIi1М номером порта
указатель будетУСТallOвлен 11<1 поле, содержащее Il()Mep порта. Блаroдаря
этому системаисточник может ЦЫЧИСJll!ТЬ процесс и сокет, вызвавшие
ошибку.
Структуры различных ICMPnaKeTQI\ отличаются друт от друта в зависи
мости ОТ типа пакета. Например, nакет, сообщающий о недоступности
адресата (Destination Unreachabte Message), Rыrдядит так:
СоабщеНl-fе Destiпаt;QЛ Unreac/Jable Message
Таблица 27. б
Тип I Код I Koн-rpoпbHa. сумма
Не ИСnОЛьэуетl.:i'j
Иt11'ернеТ L заrОЯQВQI{ I1J1ЮС nеР8ые 64 .бита QриrиЖtЛhНоrа сообщеНИА (Л4I\:в1'.Q)
718
LINUX: полное рукОВОДСТВО
Поля Идентификатор 11 Последовательность Moryт использоваться ис
'roчником эха ДJ\Я передачи вспомоrательной информации. Например,
идентификатор может использоваться как порт при использовании про
токолов ТСРЮОР для идентификации службы, а номер последователь
НОСТII может увеличивается на еДllliJЩУ при отпраВКе каждоro запроса
(то е,'Ть выступать 8 рОЛII счетчика).
27.2.3. Тип и КОД IСМРсообщения
в следующей таБЛlще перечислены все ТIIПЫ IСМРсообщений. Об их
структуре вы можете ПРОЧlIтать в документе RFC 792. Типы 1711 18
ОПllсаны в документе RFC 950.
Т",пы (СМРсоо6щеНtlЙ"
Тамица27.8
Тип Код HaSIlaH_ с:ообtцеи",,, Onмcaнмe
" Ec.h<J RePly Metst\g@ Эха..отввr
О "'Од ilCerдa равен О
З Oestinatlon UnreachabIe АцресаТ" пен
MSSSi$ge
О Сеть HeдocтynHa
1 Узел неДОС:1упен что-то СЛу<1;МПОСЬ с )(омпьютером,
8<)3МОЖ.tО. (ж прОСТQ ВЫК-ЛlQ"lеН
2 ПрОТClКО'n tifЩостynен запрашиваемый Протокол jo4Q
Пt)дц-ерживаеrся
3 порт нЩ1QCТynен на M8WJ1fi& НМ oдl'la C/lужб4 Нв
смзана_С укаэаННЫМftОМерам порта
ДnИКВ naк&Тв МишкоМ ВеЛИU. а в IiIro звrUЛОВf(в
УСто1Новлен: флаr DF' (Don't Fragmen1), то есть f"e
. фрE»ftирое.ап.. Дnя nереДQ'IИ (Ющ.Цlоrо nвкета ero
Н)/:ltЩQфраrмеliТioIрClВЗТЬ (разбить на части), а T3JC)CaK
}'t;Тt1НОIJЛен: фЛ8f DF. ФРarl\,fеf{Т'liцИJl, ц следовэfеЛl.но,
и переДаЧа naera 6iЮ30
5 Оwибo..lный маршрутистОчНИIC8
4 SoШС6l.Quеnch Мезsзое Обрыв ИСТОЧНИП
О /(од ecerдa,pae.eH О
5 Rеdiпк;t Mes&ag8 П:еревдрв(:
" Пврc;;sци'А nак&ТОв АМ ceТ14
1 ПIi!lР-.цресацмя naкeros дл.R уэna
2 Пер(!аДрll!сация Пl:1lсетов дns. свти JII типа Qбслу;живания
ПОS, Туре of Servic'9)
3 Пере,адр&С:аци nв,кеТО8 ДJ1R узла и 'fиnа обслуживnнм
(Т05. Тy 01 SeNice)
8 Echo Message Эхоэапрос
О КОД scerдa ра..еен О
1, Тiтe Exceedeu Me$5atl пpeBblweH лимИТ epeMeHJII
О При n€lpe.Qa'to npaflblwetlO -е;pt;lМ$I )l(l.-tзни" (11l, 'Hme
То Uve)
720
rлвва 27. Создание сетеваrоприлож:ения в Unux
Т". К'А Название оБЩI!ИМЯ ОnмcaJftШ
. Прееыweноtlрея реассембflИРОЕШНИЯ (сбоPIC)
1 фрarм.ентов
12 Paraп1eter Prob]efJI Оwибо'1twЙ nQромстр
Message
О УI<а3SТСЛь на-ошибочный nареМ8Тр (т.ебл.27,71
13 Tlmestsmp MSS8ge Запросаременной етки
О КОД Bcerдa рааан О
f--. ..p IЩ>Iy М...."" Отоото eOOMI;i!HH-QЙ МfJ1ft6
14
.0. Кад OOj3fM"O
15 Infoпnation Request Информационны\1lзanрос (з.апраwttМ номер
наwей сети)
О КОД Bcerдa раевн О
f--.. ИНфорМfЩИОЮЫЙ ОТВеТ t80звращаеfС номер каШай
16 Information Aepty МgssagtЭ сети)
О КОД Bcerna раейн О
17 Infol'1'Т\atlon Request ИНформацио"'ныА пnрос (ээлраWИ8а"ТСЙ масжа
(') anpйса)
О КОД ecerдa равен О .
16 Informalior1 Repfy Mes-sage ИНфоРмационный ОТМТ (ВО38рвщается-""аска адреса)
(')
О КоД 8cetдa равен О
27.2.4. ФУНКЦИИ для раБОТbI с ПРОТОКОЛОМ ICMP
Для работы с протоколом [смр существует 1:z основных ФУНКЦИЙ. Все
эти функuии описаны в файле /usr/src/l inuxfnetl ipv4/ icmp. с. У
вас нет этоro файла? Тоrда установите ИСХОДНИКИ ядра (странно, почеыу
вы до сих пор этоro не сделали).
. icmpaddress() отправка ответа на запрос о ыаске адреса;
. icmpdiscard() удаляет IСМРпакет;
. IcmpechoO эхозапрос;
. IcmpinitO инициализирует служебные подпроrpаммы протокола
IСМР в операl1иониоi! систеые;
. icmpoutcountO унеJшчивает СчетчИК отправленных пакетов;
. icmPJcvO прием IСМРпакета;
. icmpredirectO отравка сообщения переадресации;
. IсmрsепdО отравка IСМРсообщения;
. icmptimestampO ответ lIа запрос о времени СОЗдаНия;
. icmpunreachO отправляет сообщение об ошибtre;
. xrlimallowO решает, отправlIЯТЬ ли IСМРпакет IlЛи нет;
. xrlimJпitО оrpаНlIqение СКОрОcпI передачи [СМРпакетов (в Bep
сии ЯдРа 2.0).
24 :1l1k 1x
721
UNUX, полное PY1'080A<:nlO
27.2.4.1. Технические подробности
Прежде чем перейти х рассмотрению функций ICМP, разберемся, как же
IСМР-пахеты ПРИlщмаются операционной снстемой. Собственно, ICMP-
пахет принимастся операционной системой ипщ так же, как и любой
ДРУI'ОЙ пакет. Драй!!ер сетевой платы (или Apyroro сетевото устройства)
собирает полныЙ пакет данных, затем ои строит структуру skbuff.
Л'1СТ'1>!r 27.1. Структура sk.buff
stJctlct skbtlff {
/* Эти два члена должны быть первыми */
stJcuct skbuff* next;/* Следующий буфер в списке'/
stJctlct skbuff*'prev;/* Предыдущий буфер в списке'/
struct skbuffhead * list; 1* rОЛОВа списка */
stJcuct sock 'sk; /* сокет ./
struct timevalstampi 1* Время прибытияnакета *1
sLruct netdevice *devj 1* Сетевое устройсво */
1* 3аl"ОЛОВОК 'rpafiCnOpTHOI'O уровня * /
union
(
strHct tcphdr *th;
5truct udphdr *Uhi
strHct icmphdr'icmph;
struct igmphdr'igmph;
struct iphdr *ipiph;
struct spxhdr *врхЬ;
unsigned char *raWj
h;
/ 3аrоловок ceTeBora- УРОВЦЯ *1
union
strllct iphclr *ipl1;
s-trllct ipv6hdr * ipv6h;
struct arphdr *arph;
struct ipxhdr *ipxh;
urшigпеd char *raw;
nh;
tlnion
722
rлава 27. Со3Д!lние ceтe80ro приложени. в LinU1(
struct ethhdr *ethernet;
unsigned char *rawj
тас;
t_r.\lct: d$t-ent ry *dst;
char сЬ[48];
uЗ2
atomict
c.tcp.c
uhsigned
unsigned
unsigned
1..lnsigned int len; /* Длина данных */
unsigned int datalen;
llnsigned int сеwп; /* Контрольная сумма */
unsigned char unused, / * Не исnЬльзуется * /
cloned, /* Заrоловок должен клонироваться */
pkttype, /* Класс "акета */
ipsummed; /* контрольная сумма IP*/
prioritYi /* Присритет пакета */
usere; /* Счетчикпользоватедей см. datagrarn.
*/
short protocol;
short security;
int truesize;
1* Протокол цакета */
/* Уровень безопасности */
/* Размер буфера */
llлsignеd char *head;
unsigned char*data;
unsigned char *tai1 i
unsigned char *end;
/* Заrоловок буфера */
1* Указатель заrоловка дaНRыx */
/* Укаатель XВOCTa" */
1* Коне.чнblЙ указаель */
void
#ifdef
(*destructor) (str\lct skbuff *);
CONFIGNETFILTER
uni9ned 10n9 nfmark;
/* Cache 1nfo */
uЗ2 nfcache;
/* Ассоциированное соединение *1
struct nftinfo *nfctj
CONFIGNETFILTERDEBUG
unsigned iцt nfdebug;
#ifdef
#endif
#endif /*CONFIGNETFILTER*/
#if defined(CONFIGHIPPII
uпiсщt
uЗ2 ifie1d;
} private;
#endif
723
LINUX: полное РУКОВОДСТВО
#ifdef CONFIGNETSCHED
и32 r.cind€x;
трафика */
#endif.
};
l' Индекс контроля
Данная структура описана в фаЙле /usr /8 rc Ilinux/ incl ude/lifiJx/
skbutf .11. После формирования структуры skb\!ff она передается
драЙвером функции netiCrx.
int netifrx {str\!ct skbuff 'skbl;
Функuия netiCrxO описана Jj файде /u.srlsrc/1inux/net/core/dev.c.
Она получает пакет от драЙвера eTeBoro устройства И ставит ero в оче
редь (очередь называется backlog) протокола высшеro уровня. Функция
возвращает следующие значенм:
. NETRXSUCCESS пакет удачно ноставлен в очередь;
. NEТRXCNLOW имеется небольшая «пробка» при постановке
пакета в очередь, но скоро она «рассосется";
. NET RX CN MOD «nPОбка" чуть больше среднеЙ «ДJlИIIЫ»;
. NET RX CN ЮGН очею, большая «пробкз>,;
. NEТ=RX:::DROP пакет Был удалеll.
Если !I очереди backlog иаходятся более 300 пакетоп, новыЙ пакет будет
удален без kakorO-lIибо предупреждешНl.
ДраЙ5ер ceтeBoro устройства при формировани\! структуры sk...bu f f ycтa
наВlIивает ее поле protocol. Функция netif]xO, как уже было сказано,
передает lIакет «наверх", затем функция netbhO использует значение
поля protocol, установленное драйвером, ДJlЯ вЬ!зоВ<l соответствующей
npOTOKOJIY nporpaMMbl 11 передает Qй просрамме пакет. Для протокола
ICM? такой проrpам:моЙ является функция icmPJcv(}. оnисаиная в фаЙЛе
IUBrlsrc/linux/net/1pv4/icmp.c.
iлt icmprcvlstruct skb\!ff 'экЫ;
ФуНКUIIЯ iсЛ1р JCv ВЫПОlIняет Сllедующие деikr5ИЯ:
!. У5еЛИ'lивает значение счетчип 5ХОДЯЩIIХ пакетов
lСМР INСSТАТSВН(IcmрlnМsgs).
2. Удаляет Ilакет, если ero размер слишком М3>l.
3. Проверяет контрольную сумму: еС1I1I она ошибочна, увеЛИЧи&ает
счеТ'IИК некорректных lIакетов.
4. Проверяет 'пm ICMPnaKeтa. Если тип пакета превышет Максимзль
ное значение 18, то пакет удаляется. При этом увеЛIIЧIШЗется счеТ'l\!К
некорректных пакетов,
724
rлава 27. Соэдание ceieвoro hриложения в Unux
5. Вызывает фуикцию.обработ'IИК IСМР-сообщения ь зависнмости ОТ
значения типа сообщения.
Соот&еп::твке номеров типа служе6ным Функ-циям(опнсаffЫ 8 файле icтp.c)
Таблица 27.9
тмп ...",....... Onис.....
0,1,2,
б. 7, 9, void 'cmpdfscвrd
1D.12, (struct skbUff $kb) Удалer пакет
14.16,
16
Данная Ф'f)itЩМЯ onpeдeпAeт мs.ICСИМD1'tЪНЫ размер модуля
3,4.11 \iФd Icmp,unreach пер"'дачи (МТU. Махlmuп, ТfЗnsmiss$оо Uni11. а таюк& ПередаеТ
(struct skb(Jff .skb) инфо.рмацlltlO об ошибке любому lvIодулю. которому Нужна мз
информ.аЦИЯ
vofd icmpr9direC1 ПакеТ перea,t:фaСац,.иИ, IШТОpblй o.зik8чaGТ ПрИМli!рНо CJ1sд)1оЩвв:
5 ($truc .sk):1Uff $k.b) ..Не посылат мне naJ(P.T"O адрElСУ ХХХ.ХХХ.Ю<Х.ХХХ. потому "ТО
он б)'nт отпраEU'lВН обратно_
6 voldjcmpho ФУНIЩIo'IЯ дnя оmрasки эхозanpq. Эко-отает (lИП О) о-mраanя-
(&trщ;t$kЬUff $kb) ется APOМ аSТОМ8;тичесКи (еСIIМ'ВЫ не ОТlU1!ОЧиJjи эту iJОЗМОЖ-
I1OCТb)
Запрос Q 8eН11 C03ДШfКЯ П ОДИН 1\13 caмbl.I(: эффе!СТиа-
ных Mf;tl"OAOВ rtзереНИR nРОyj.3JOд..пеЛЬНОСТ!1 r'лс.б<LnЬ.Нык CQтltio1
s реалы1мM времени. МеТОАзаюООчаетс е СllедУюЩ,ем; на те.
13 "'Qid ictt"lp\im(,>5tamp сmруемый e_1l ПоCbll1аюroя. нВ6<щt.UJие nl(efЫ. !l:OJQpI}IQ Ср.93у'
(strиct skbt.lff 'skb) же vдалIOТСЯ. Информация Н3 noc.пeднera na..:ета КОП+lруеТCR 8
лакет З:I(QОТQ8Т.е,. 1;1 'ЭТОТ naщ:r nц:ж.e I;IСТ8НпяeJCЯ т1фQpмЩfl
о текущем 8ремеи. После зтоrо па,",т стаВИтСЯ в очереДЬ t(aI<
обычно
17 wid 'с:тр _Qddss Ornpaea ответа на запрос- о масже адреса
{struct I$k buff 'skb\
РассмотреЩIl,Iе ьыше функини обрабатывЗ1ОТ IJ,ХОДЯЩие IСМР'ЩIIСеты.
Но мы ведь можем не только прииимать IСМР-лакеты, но и лередавать,
fЮЗТОМУ ecrь также и исходящи(!»функции.
Для отправки IСМР.сообщений используется функция
void icmpsend (struct skbuff *skbin, int t.ype, int. code.
uЗ2 info):
Даниая функция отправляет сообщения типа type, с кодом code 11 телом
in/'o.
После отправки пакет НnЛОХО бы про верить, будет ли он реально от-
правлен. Это МОЖНо сделать с помощью фующии
int xrlimallow(struct dstentry *dst, int timeout);
Эта функция определяет, отправлять или нет текущий пакет из очереди.
Если пакет должен быть удален, фУНКWiЯ возвращает О, иначе 1.
После отправки lСМР'пакета нужно увеличить счетЧИК оmравленных
пакетов. Это можно сделать с помощью функции kmpoutcountO:
725
LINUX: полНое рУКОВОДСТВО
void .iСПlРОlltсоuпt (int type);
Данная функция увеличивает счетчик оправленных пакетов типа type.
На этом обзор протокола ICMP в Нпих заканчивается и мы переходим к
рассмотрению мехаНИЗма rнезда (секета), с помощью KOТOpOro МОЖIIО pea
лизовать двунаправлеШtЫЙ обмеn данными между двумя компьютерами.
27.З. Проrраммирование сокетов
27.3.1. Что такое сокет?
Сокет это двунаправленный канал меЖдУ д!!умя компьютерами в ceтn,
который обеспечивает конечную точку соединеник. «Двунаправленный»
означает, что данный MoryT передаваться в двух направлениях от
клиента к серверу и наоборот. Понятие сокета абстрактное, это как
бы прorра!dмный соединитель, '!ерез который обмениваются даиными
nporpaMMacepBep и проrраммаклиент.
Сокет'интерфейс используется для получения доступа к транспортному
уровню протокола ТСРIIР и представляет собой набор системных I1Ы'
3060В операционной системы и б,tблиотечных функций на языке С. Все
эти функции можно УСЛОВlЮ разделить на три rpynl1ы:
. управляющие функции;
. функцин установления связи;
. функц!!и ceтeJtorQ щюдэ!вьmода.
ОбщиЙ алl"OРИТМ работы сетевой проrраммы' использующей сокеты:
1. Подro'fовить (создать) сокст ФУНкцИя socketO.
2. Связать СОКеТ ФУНКЦИЯ ЫиdО.
З. YcтaHon,rrь связь С удаленным КОМПЬютером (клиенту установить
связь, а серверу ожидать установлеиия связи).
4. ПроизвесПl обмен данными функиИI! recvO и sendO.
5. Завершить сеаНс С6Ю!! closeO и shutdo\vnO.
Библиотечные функции для работы с сокстами находятся в зarQЛОВОЧllОМ
фаЙле syslsocket.h, поэтому для любой сетевоЙ nporpaMмы обкз.ателъиа
следующая директиuа'.
#irtclude <sys/socket .I'l).-
726
rпaaB 27. Создание ceтesoro приложеНИА в Linux
27.3.2. Создание и связывание сокета
Основная зада'13 управляющих Фуикций орrаflизовать взаимодействие
дпух компьютеров, ТО'lНее проаессов, а также завершить сеанс связи этих
процессов. К Y1lравляющим функаиим относятся функцml;
. socketO создание сокета;
. bindO связывание сокста;
+ closeO и shutdownO заверщение сеанса сВязи.
Начнем по порядку, а именно, с функuии socket(). Ее пporonш следующий;
#include <вуе! typee. [1>
#include <sye/socKet.h>
extern int socket lint domain, int type,
iпt rotocol) THROW;
Первый aprYMeHT определяет набор протоколов. Особо вдаваться в
подробности Не будем просто Bcerna п качестве параметра domain
передавайте значение АР INET. что означает использование стека про
токолов TCPIIP.
Артумент (уре позволяет установить режим работы: с установлением co
единения и без TaKoBoro значения SOCKSTREAМ и SOCKDGRAM
соответственно. Для непосредстненнOI'О доступа к протоколам IPv4 ис
пользуется параметр SOCKRAW. Для ero использования нужно под-
КЛJOчить заroловочный файл;
#illclude <пеtiпеt/in.h>
ТреПIЙ параметр лучше Bcera установить равным О. В этом случае будет
выбран протокол по умолчанию в зависимости от режима работы;
ТСР, еСЛlI мы пыбрали режим SOCKSТREAМ;
UDP, если мы выбрали SOCКDGRAM.
Если вы установили значение SOCKRAW, вы Можете указывать в каче-
стве последнеrо параметра непосредственно значения из файла /etc/
protocols, Фраrмент этоrо файла приведен НИЖе.
Листинr 27.2. Фраrмен' файла jetcjprotocols
j.p о IP
icmp 1 ICMP
igmp 2 IGMP
# Протокол Интернета
# Протокол ICMP
# Про'окол ШМР
# (IntCI'net Group Management protocol)
# Протокол GGP (gatewaygateway )
# Протокол ТСР
# Протокол UDP
ggp з GGP
tcp 6 ТСР
\1др 17 UDP
7V
UNUX: попное PYl(OBOAC1lJO
Если сокет создан успешно, функция .возвращаетдескриnтор сокета
целое ПОЛОЖJiтельное чнсло. В случае О!J.!J.iБКII фyн:JЩlIJ! возвращает зна-
чение 1 (отрицательное '!Исло). Вот иеБОЛbUlOЙnPlIмер:
int sock;
ЭОСК socket (AFINET, SOCKSTREAМ, О),
iE (зоск 11 (
рriпtfl"оши6ка при создании сокета\п"';
exit(ll,
)
Чтобы связать созданныЙ нам.!! сокет с локальным портом, Hanpl!Mep,
1234, нужно использовать системный вызов bind():
#include <sys/types.h>
#inc1ude <sys/socket.h>
#include <netinet/in.h>
extern int bind (int fd, struct sockaddr addr, socklent
1епl THROW;
Первый apryMeHT Функцни задает дескриптор нашеro сокета. Второй
это указатель на етруктуру типа sockaddr. Все структур'ы данното типа
определены в файле воске\:. h: '
# define SOCKADDRALLTYPES \
SOCKADDRONETYPE (sockaddrl \
SOCKADDRONETYPE (sDckaddratl \
SOCКADDRONETYPE (Bockaddrax25' \
SOCКADDRONETYPE (Bockaddrdll \
SOCКADDRONEТYPE (Bockaddreonl \
SOCКADDRONETYPE (sockaddrinl \
SOCKADDRONETYPE (sockaddrin61 \
SOCКADDRONETYPE (sockaddrinarp) \
SOCKADDRONETYPE Isockaddripx) \
SOCКADDRONETYPE (sockaddriso) \
SOCКADDRONETYPE (sockaddrns' \
SOCKADDRONETYPE (sockaddrunl \
SOCКADDRONETYPE (sockaddrx251
мы проrраммируемД;IIЯ сети ТСРIIP,поэтому будем lICnолЬ:!овать С"фУК'
туру sockaddrin (для lPv4) ИЛИ sllclmddrin6 (дiHI IPv6).
Последний арсумеllТ зто длина выбранной нами структуры
(sockaddr in) n баitТ$(.
Структура sockaddr Jn определена в файле in. h так:
728
rла8а 27. Создание cereвoro приложения 8 Unux
struct sockaddrin
SОСКADDRСОММОN I sin) ;
in.'portt siп"роrt;
struct inaddr' sinaddr;
J* Номер порта *1
/* IРадрес
*/
uпsignеd char sinzero[sizeof (struct sockaddr'
SОСКАDDRСОММОNSIZЕ
sizeof linortt)
sizeof Istruct inaddr)];
};
/* Для IРvб. *(
struct sосkаddriпб
{
SOCКADDR СОММОN Isin6);
inportt siпброrt; /. Порт TpaHcnopTHoro уровня */
uintЗ2t siпбflоwiпfо; /* Информация ПОТОКа IPvб */
struct iпбаddr siпбаddr; /* аДрес ТРvб */
uiпtЗ2 t siпб5сореid; /. IРv6ИДентификатор *1
};
Поля структуры sockaddrin означают следующее:
. sin набор используемых протоколоо. Так как мы IIСП()ЛЬЗУСМ ТСР!
[Р, данное поле должно содержать значение AF [NET;
. sin...JIOrt номер порта;
. sinaddr структура, определяющая адрес узла;
. sinzero обычно не используется.
Структура struct inaddr, определяющая адрес узла, также описана в
фi1йле in. h:
sttHct inaddr
{
inaddrt эаддт;
};
оБыноo поле saddr должно принимать значение INADDRANY сей-
час поясню почему. CТPYlCтypa sockaddr in ДОЛ1plа быть заполнена до
вызова функции bindO. Если поле sinaddr.saddr принимает значение
INADDRANY, то функция blndO автоматически ПРfшяжет к сокету
адрес локальноrо компьютера и lIам не "УЖRО будет указывать ero явно
так наша проrpамма будет универсальной,
Функция bindO возвращает О в случае успеха, и 1, если произошла
ошибка. Вот небольшой пример использооания этой функции:
729
LINUX: ПОЛН"" рУКОВОДСТВО
strl!ct sockaddrin client;
client.sinfamily = AFINET;
client.sinaddr.$addr = INADDRANY;
client.sinort = 1235;
bind Isock, (atruct sockaddr *i&client, sizeoflclient));
27.3.3. Установление связи
с удаленным компьютером
УстанаВЛlIвать связь можно как на стороне сервера, так 11 на стороне кли'
ента. На стороне клиента используется только один вызов connectO,
который «спрашивает» у сервера: «Mory ли я подключиться?», то есть
передает запрос на установление соединения. На сервере используются
функции:
. !isten{) ожидание клиента;
. acceptO подтверждение запроса клиента на установление соедине-
ния.
Сервер должен постоянно прослупrnвать сокет ожидать НОВЫХ клиен-
тов. Как только НОВЫЙ КЛИент посылает запрос на установление соеди-
неlЩЯ, сервер может либо разрешить ему подключиться (connect), либо
запретить (например, если сервер уже обслуживает друrorо клиента).
Функции Ilsten()
ВЫЗОВ IistenO «заставляет» проrрамму-сервер работать. в режиме ожи-
дания запроса На соединение от Клиента. Прототип этоЙ функции еле.
дующиЙ:
#include <sys/socket.h>
extern int 1isten lint fd. int п) THROW;
Первый параметр это дескриптор сокета, а второй максимальное
количество запросов на установление связи (друтими словами, макси-
МaJlыюе количество клиентов).
Как и функция bindO, ФУНКIIИЯ listen() 11 случае успеха возврашает О.
Пример вызова функции;
if <listen 150ckl, 31 !:О) (
рriпtf("Оmибка при вызове 1istеп(sосkl,З) \П");
ех; t (11 ;
};
730
rлавв 27. Создание сетевоrоприлож:ения 8 Unux
Функция connect()
Используется проrpаммой-клиентом для отпраВlШ запроса на подключе-
Iше К серверу. Прототип функции следующий:
include <sys/types.h>
include <sys/socket.h>
include <netinet/in.h>
extern int connect (int fd, struct sockaddrin *addr,
socklent len) THROW;
Первый параметр это дескршrтoр сокета, создаIПIОro функцией socketO
и привязанноro функцией bindO. Привязку сокета функцией bindO йы-
полнять не обязательно: если сокет Не был "рнвязан ДО вызова connectO,
ПРИ6язка будет ВЫПОЛlJена аВТQматнчески.
Второй параметр это указатель lIа структуру типа sockaddrin, со-
держащую информацию о сервере: ero IР-адрес, номер порта, а также
семейство протоколов.
Последний параметр это размер структуры sockaddrin в байтах. В
случае успеха функция возвращает О, а в случае ощнбкн 1.
Вот прнмер нспользоваlJНЯ вызова connect:
struct sockaddrin server;
struct hostent *п;
11 определяем IP-aдpec сервера
h gethostbyname (*server.domain.ru');
memcpy (Ichar 'I&server.sinaddr.h->haddr.h->hlengthl;
Ji ОnpедеЛЯеМ порТ сервера
server.sinort 1234;
li оnpеделяем сеМеЙСТВО протоколов
server. $il,fa.rnily АР INET;
11 Вызов ФУНКЦИИ соппесt 1)
connect (sock t &server, sizeoflserver);
Еслн ВЫ ИСПOJlb3уere режнм без установления соедннения (SOcк....DGRAM),
ВblЗОВ connect О необязателен.
Функция acceptO
Если максимальное число клиентов не превыщеио, сервер может при,
нять запрос клиента. Для этою I1сrюлъзуется Функцня ассер!(). Данная
ФУIJКЦНЯ нспользуется только прн работе в режиме с установленнем со-
еLll1нения. Прототип функции следующий:
731
LINUX, полное руковод<>11!О
#ihclude <sys/socket.h>
#inc1ude <netinet/ih.h>
extern int ассер!;: (int fd, struct sockaddrin *addr,
socklent *restrict len) THROW;
Первый параметр это дескриптор сокета, второй указатель на
структуру, еде можно разместить адрес клиента, причем данную структуру
инициализировать Не нужно. Последннй параметр размер структуры,
указанной во втором параметре.
Системный вызов BCceptO работает так. Сначала он ИЗlJлекает из очереди
listenO запрос на соеД1l11ение и создает новый секет, через который будет
про изводиться обмен данными с клиентом, например,
1/ получаем сокет клиента
sock2 = accept (sockl, &client, &anslen),
1/ передаем клиенту информацию
write Isock2, MSGTOSEND, sizeof(MSGTOSEND»;
Если вызов atceptO завершился успехом, структура addr, задаваемая во
втором параметре, будет содержать IP-аАрес клиента.
Если очередь listeo() пуста, то наш сервер будет ОJjЩдать появления
HOBoro клиента. В случае ошибки ФУ1IКЦИЯ accept() возвращает отрица-
тельное зна'lение.
27.3.4. Функция gethostbyname()
Пользователям обычно удобнее указать символьное имЯ сервера, чем
еro IP-aapec. Для разрешеиия имени служит функция gethostbynameO.
Вот ее прототип:
#include <netinet/in.h>
#include <netdb.h>
struct hostent *gethostbyname (char *name);
Данная функция возвращает указатель на структуру типа hostent, со-
держащую следующие поля:
. char *bnaтe доменное имя узла;
. char **haliases псевдонимы узла, если таКОllые ОIlределеиы;
. char *haddr IP'aapec узла;
. int haddrtype набор используемых протоколов (в нашем случае
AF JNET);
. int hJenght длIIна адреса узла.
Примеры использования функции:
struct hostent *hj
h<gethostbyname {*argvl;
732
rлзва 27. Создание сетеиоrо ПРYlла:ж.ения В Unux
if (h=."NULL) {
printf (NНевозМОЖНО разрешить имя: '%s\n#.*argv);
ехН (1);
// ВЫВОДИМ IРадрес. ВЫВОД в виде: имя > адрес
printf ("%8 > %6 \n".*argv.inetntoal'«struct inaddr
'lh:>haddr1ist [OJ) 1):
Узнать свой собс113ецнЫ/l адрес можно с помощью функции getsockname():
extern int getsockname !iпt fd. SOCКADDRARG addr.
secklent 're6trict len) THROW;
Ей нужно передать три параМe'fра дескриптор сокета, адрес crpyKТ'YPI>l,
которая будет содержать информацию о нашем узле (ero адрес). Третий
параметр будет содержать длину адресной структуры.
27.3.5. ФУНКЦИИ ceTeBoro ввода/вывода
После успешноrо устаиовлеНИI! соединения можно начать обмен дан-
ными. Для отправки и получения ДП1IЫХ можно использовать обык-
HOBelIНble ФУЦ1щии для работы с файлами readO 11 writeO, только
.место десКриптора файла нужно указывать дескриптор СОКета. ОДIШКО
рекомендуется использовать системные вызовы sendO и сеСУ{), которые
предназначены именно nля работы с сокстами; Эти системные .вызовы
будут рассмотрены ниже.
Если "ы работаете в режиме без установления соеnинения, "ам нужно
ИСПОЛЬЗОllать функлии sendtoO 11 recvfromO. Первая Функuияoтnравля
ст ланные, а вторая принимает. Функuия sendto(} вместе с данными
позволяет указать адрес получателя, а rеcvfroщО возвращает не только
полученные даниые, но 11 адрес отправителя.
обмен данными в peJIGIMe SoCКSТREAM
Для отправления данных используется функция sendO:
#inсlцdе <sys/types.h>
#lnclude <sys/socket.h:>
eKtern ssizet send (int fd. con8t void 'buf,
sizet 11. illt flags) THROW;
Первый параметр дескриптор секета, второй указатель На область
rтаМЯТII, которая содержит передаваемые данные. Третий параметр это
размер передаваемы]( данных 8 байта](. ПослеДlШllпараметр позволяет
определить поведеюш функции sепdО: если он paJ!eH О, то вызов sendO
полностью аналоrllчен IIЫЗОВУ write().
7ЗЗ
UNUX: попное РУ.О80ДЩВО
Нужно отметить особенность работы этой ФУIl1щи\t: eCJII\ буфер сокета
fd переполнен, функция переводит nporpaMMY в состояние ожидания
освобождения буфера. Такое может случиться, если узелприемник по
каким,то причинам не успевает принять данные.
Функция возвращает число байтов отправленных данных или 1 в случае
ошибки.
Для приема данных используется функция recvO:
#i!lclude <sys/types.h>
#include <sys/socket.h>
extern 8sizet recv (int fd, void *buf, sizet П,
int flags) THROW:
Первый парамеrр, как обычио,Задает десжриптор сокета. В случае усnещ-
Horo приема данных они будут размещены в буфере buf второй
пара метр функции recvO. Третий пара[етр задает размер обласТl!, На
которую указывает второй параметр, Есличетвepтblй пара метр (флаrи)
принимает значение О, то вызов recvO анадо['ИЧ,\:нвызову readO. Четвер'
тый параметр может принимать следующие значеШ1Я;
. MSG ]ЕЕК прочитанные данные не удалтотся. Следующий 8Ъ130В
ФУНКЦИИ recvfrom() опять возвратит зти данные.
. MSG WAIТ ALL процесс будет блокирован д() пооучения Bcero
запрошениоro объема дан:иых, а не до получения nepвoro сообщения.
Только для сокетов SОСК)тRЕАМ!
Если через указанный сокет ничеrо нельзя принять, функция nepeho'
ДlIТ nporpaMMY h состояние ожидания до появления данных в канале
связи.
Функция 8озпращает количество nplllfЯrыx баrrroв ИJШ 1 в случае ошибки.
Об",ен данны",и в режи",е SOCKDGRAМ
Функция sendtoO позволяет отправить данные по протоколу UDP (без
установления соединения), указав при этом узел' приемник:
extern ssizet sendto (int fd, const void *buf.
sizet nJ
.i.nt flags. CONSTSOCKADDRARG addr.
socl<1ent addr1en> THROW;
Назна'/ение первых четырех apryMeHToB такое же, как и фуlJ1tЦИ/l send{),
а последние два aprYMeHTa задают структуру типа struct sockaddrin,
содержащую информацию об адресе узла'приемника, и размер этой
структуры соответственно. AprYMeHT adclr зто адрес структуры
sockaddr in, а не она сама!
734
rлава 27. Создвние ceTeBoro приложения в Ui1U)(
Как и фуикцил sendO, фУНКIIИЯ sendto() ВQзврашает количество байтов
отпраменных данных или l, если произошла ошибка.
Функция recvfromO позволяет IlОЛУЧИТЬ данные по протоколу UDP:
extern ssizet recvfrom (iп.t fd, voic1 * restrict buf.
$izet пt iпt flags,
SOCКADDRARG addr.
sDcklent *restrict addrlen> THROW;
Назначение первщ четыре apryMeHТOB такое же, как и у функции recvO.
Предпоследний apryMeHT позволяет указать структуру, в которую будет
записана информация об адресе узла-отпраuителя. Помюrrе: нужнопере-
дать aдpeCcrpYKTypbl, а не саму структуру. Последю!й параметр задает
длину этой структуры.
Функция возвращает КOJIичество принятых данных юш 1 в случае ОlШ!б'
КИ. Проверитъ ОlПибку можно и по-друrому: ест! структура адреса узла
отправителя пуста (равна NULL), значит, произошла ошибка.
27.3.6. Завершение сеанса связи
Дм закрытяя сеанса связи можно использовать один из двух.системныx
Bbl30I!OB: closeO IШ}I shutdоwп{).
СИ(,'ТемныЙ ВЫЗОI! closeO также используется для закрытия файлов. Вот
прототип ЭТОЙ функuии:
int close(int fd);
данной функции нужно передать всею один параметр деСКрlIlJТОр
сокета.
Однако вызов close() использовать не рекомеlЩУется из-за специфики ею
работы: 011 закрывает сокет rрубо, Не дожидаясь завершения передачи
данных. В результате использоваИIIЯ closeO вероятность повреждения
принимаемых или передаваемых даНIIЫХ очень высока. В пршщипе, ис-
пользовать close() можно на клиенте, 110 на сервере зто недопусrnмо:
сначала нужно использовать shutdownO, а потом уже closeO.
Вызов shutdоwпО используется ДЛЯ завершения сеанса связи, при этом
еше не переданные данные будут переданы ДРУТОil стороне. Прототип
фуикции:
extern int shutdown (iлt fd, irlt how) THROW;
Первый lIараметр ЭТО дескриптор сокета, а второй может принимать
одио из трех значений:
735
UNUX: полкое РУКОВОДСТво
. SHUТRD (шш О) передать данные, которые еще не переданы,
но их отправка уже началась, и больше Не принимать данные для
чтения.
. SHUТWR (или 1) передать даНные и запретить прием дюшых
через сокет.
. SHUT RDWR (или 2) нередать дщшые и запретить вообше обмен
через сокет ни приема, 1IИ передачи.
27.3.7. npOrpaMMaCepBep
в этом пункте мъ! иапишем две npоrраммы сервер и клиент. Проrpам
MacepBep после запуска сразу же переЙдет в режим ожидания (<<про
слушивания» ) новых клиентов. Максимальное количество клиентов 3.
Как только подключится клиент, сервер отправит ему сообщение «What
is your пате?», в ответ на Ko'ropoe клиент передаст свое имя «Denls».
Сервер прочитает переданную клиеНТО1 IIIIфОРМацшо и выведет ее на
консоль, Клиент, В свою очередь, выведет На консоль запрос сервера.
С целью упрощенlШ исходноrо кода как сервера, так и клиента, обработку
ошибок производИТЬ Не будем, ПОЭТОIУ будьте rотовы к тому, что ваш
клиент выдаст сообщение Sеgщеп!аliоп fаи!! в ответ на неверно задаН
ные параметры. Я рекомендую в качеСТве имени сервера использовать
loca1host и обе nporpaMMbl запускать на одном компьютере это же
только демонстрация.
Вот исходный код nporpaMMblcepBepa:
Листикr 27.3. np"rpnMMacepB"p
Hnc1ude <;sys/types.h>
#inc1\1de <;netdb.h:>
#inc1\1de <memory.h>
#include <sys/socket.h>
#lnclude <netlnet/in.h>
#include <stdlo.h>
#define SERVERPORT 1234
#define BUFSIZE 64
#defifle M$GrOSEND "WClat is your l'ldПН?\ПН
int. mail1 () (
int sockl, 50ck2;
int anslen, total=O;
736
rлава 27. Создание cereaoro nрИfюж.ений в Unux
сцау ЬuffеrrБUFSIZЕJ;
structsockaddrin sin clien;
,
Еоскl.= эосКес (AFINET, S(KSTREAМ, О);
теrnэес. «(char *I&sin, '\0', si2eoflsinl);
sin.sinfarnily = AFINEТ;
sin.sin&ddr,saddr = INADDRANY;
sin.sin...port = SERVERPORT;
bind (эоскl, (эСуиес sockaddr *J&sin, Si2eCflsin});
printf(*Server running...\n");
listen (sockl, З)
"'hile П} {
апэ1еп = sizeof(clientl ;
восК2 = асеерс (зоеkl, &client, &anslenJ;
write (воеК2, MSGTOSEND, si.zeof(MSGTOSEND));
tota1+=1;
апэ1еп = read (Еоск2, L,u f f еу, ВИР SIZE 1 ;
write (1, buffer, ans1eni;
printfl"Client по %d\n',tota1J;
shutdown (sock2, 01;
close (sock2i;
);
Уесиуп о;
)
Теперь разберемся, что есть что. Сначала мы определяем некоторые мз-
красы: номер порта, который будет ПрОСЛУШlIвать серllер, размер буфера
передавае. дaHЫX и текст запроса КJIHeЦTY.
Стандартные но!о<ера портов определены пфwе пetinet/in. h:
enurn
Ij>j>O!<:t'.J>.G!iP" 7, 1* Echo serviCIi,. *1
. .JPJ?QRT;.p+ =.9, /* Discard transmissions service. ,I
IPPORTSYSTAT = 11, 1* Systern,.et"tus service. *1
IPPORTDAYTIME о 13, /* Time оЕ day service, */
IPPORTNETSTAT = 15, 1* Nec.work.status service. */
. I'J:iPORTf'TP = 21, ;* File Transter Protoco1. * /
IPPORTTELNET = 23, /* Te1net prdtoco1. */
IPPORTSMTP = 25, /* Simp1e МаН 'rans fer Protoca1.
737
UNUX: полное руководство
';
IPPORTTIMESERVER ;
IPPORTAМESERVER =
IPPORTWНOrS = 43,
rpPORTMTP = 57,
37, 1* Timeserver service.
42, 1* Domain Name Service.
/* InCernet Whois service.
,;
'/
'/
IPPORTTFTP = 69, /' Trivia1 File Transfer Proto
со 1 . ' /
IPPORTRJE = 77,
IPPORTFINGER = 79. ;, Finger service. */
IPPORTTTYLlNK = 87,
IPPORTSUPDUP = 95, ;* SUPDUP protoco1. *;
IPPORTEXECSERVER = 512, ;*
IPPORTLOGINSERVER = 513,
IPPORTCМDSERVER 514,
IPPORTEFSSERVER = 520,
execd service. */
/* rlogind service.
'/
/, UDP ports. */
IPPORTBIFFUDP = 512,
IPPORTWНOSERVER ' 513,
IPPORTROUТESERVER = 520,
/' ports 1евв than this value ere reserved for privi
leged processes. */
IPPORTRESERVED ' 1024,
/' Ports greater this value are reserved for (non
privileged! serVers. ,/
IPPORTUSERRESERVED = 5000
);
Нам понадобятся сразу два сокета: IIЕфВЫЙ Это сокет сервера, а через
второй сокет мы будем производить обмен дaHНЫМII СJЩllентом.
int sockl r sock2;
Следующие переменные: anslen используетСЯ для хранения размера
передаваемой клиентом информации фактическоro размера cтpyк-rypы
struct sockaddr in, а total это счетчик числа клиекrов, используемый
для вывода порядковоro номера клие1lТа.
Лереме11ная Ьи f f er размера вт SIZE Это наш буфер для обмена
информацией. Нам нужны две структуры типа sockaddrin одна для
сервера (sin) и одна Д1IЯ клиента (client).
738
rлава 27. Создание ce1'eВQro приложеНИR е linux
в строке
50ck1 = socket (AFINET, SOCKS1'REAМ, О);
мы создаем наш, «серверный», СОКL-Т: набор протоколов ТCPJIP, режим
с установлением соединения.
Затем мы инициализируем структуру sin:
юеrnsеt ((char *1 &8in, '\0', 81zeof (s1n» ;
i n . s inf атi1у : AF INET;
,,1n.sinaddr.saddr : INADDRANY;
sin.sinport : SERVERPORT;
11 TCPIIP
11 можем работать на
11 любом адресе
11 указываем порт (1234)
После создания сокета и инициализации структуры sin, нужно связать
наш сокет с адресом и портом сервера:
bind (8ockl. 18truct 8ockadd.r '1&81n, 8izeof('sin);
Оператор li8ten I sockl, 3) означает, что мы будем прослушивать
сокет sockl (порт 1234) и максимальное число клиентов не должно npe
иышать 3.
Как и любой HOpMMbl!blll сервер, МЫ дшIжны работать в бесконечном цнкле,
постоянно обрабатывая запросы клиентов. В бесконечном цикле мы:
1.пОДУЧIЩМ размер cтpы client
anslen : 8izeof(c1ientJ;
2. создаем сокст soсЦ через который будем обмениваться данными с
клиеlЛ'ОМ. Если в очереди listen нет клиентов, мы переХОДIIМ 8 co
стояние ОЖllдания
sOCK2 accept (воск1. &cl1ent, &anBlenl;
3. как только подключится клиент. МЫ отправим ему сообщение
MSG ТО SEND
write (аоск2, MSGTOSEND, sizeof(MSGTOSEND)I;
4. увеличиваем счетчик J(ДиеllТОВ
total-.t'.:l:
5. получаем размер ПРО'lllтанных данных, сами данные записываются в
буфер buffer
апslеп : read (восК2, b1lff.er. BUFSIZEJ;
6. выводим ПРОЧИТallНые данные на стандартны!! вывод
write 11, buffer, anslen);
739
UNUX: полное руководство
7. завершаем сеанс связн
shutdown isock2, О);
8. закрываем сокет
close Isock2);
Конечно, любой нормальный серВер при поступлении определенных
сиrналов, например, SIGHUP, ДOJЦlCеR корректно перезапуститьсяили
вообще завеРШИTh работу. Наш серneр этоrо не делает обработку
снrиалов, я надеюсь, вы можете добавить сами.
Теперь мы можем откомnилироватьнашу nporpaммy:
$ gcc () ser'.rer' s"!:rVer. с
Запускаем:
. I server'
Проrрамма перешла в состояние ожидания ноных клиентов.
27.3.8. Проrрамма-кпиент
Проrpаммаклиеит несколько проще, чем сервер. Вот ее листинr:
Листинr 27 .4. Проrраммаклиент
.inclucle <$ys/types.!l>
#include <sys/socket.h>
#include <f\st ine/iJ1. Ь>
#lnc1ude <nedb.h>
#include <tnernorY4h>
#inclllde <stdio.h>
#detine SER\rF,RHOST "localho$t'"
#с1еипе $ERVERPORT 1234
fkieti.nl3: ClrIEN'I'PORT J.235
"де f jne MSG "Dетй s \ n ..
mail1 11 (
int sock;
iлt аnslел;
i,nt BUF'SI2'.E 64 i
C!:lH. buff!: [БI)F.SIZЕ1;
740
rлав.а 27, Создание сетевоrоприложения в Unux
struct hostent. *Ь,
struct sockaddrin client, server;
БОСК = socket (AFINET, SOCKSTREAМ, 01,
mernset «сЬа!: *) &client, , \0', sizeof (cllel1t) 1 ;
client.ginfaIt1ily= AFINE'J";
client.sinaddr.saddr = INAPDRANY;
client.sin.J>ort = CLIENТPORT;
bind (ВОСК, Istruct soekaddr *I&elient, sizeof(client));
mernset «сЬм .*) &<::Ij",nt, '\0', Бizео (serverl);
h = gethostbyname {SERVERHOST);
server.sinfamily = AFINET;
,"еrnеру «сЬа!: 'I&server.sinaddr,h>addr,h>hlength);
server.sin.J>ort = SERVERPORT;
connect (sock, &servrt sizeof(server}};
апв len =.reCv (БОСК, buffer, BUFSIZE, О);
иritе.'.{l. buffer, ahslen);
Gend (ВОСК, MSG, sizeOflMSGl, 01;
('1ове (sockl;
exit (О);
1
,
Константа MSG это сообщение, которое будет передано серверу. Как и
в случае с сервером, нам понадобятся две структуры тиnаsoсkllddriП:
struct hostent *h;
struct sockaddrin client, server;
Структура типа hоstl:пt нам нужна ДЛЯ получеНlI!I адреса сервера.
Создаем сокет, заПалн!lем информацию о клиенте и связываем сокст:
50ck = so.cket (АР INET, SOCKSTREAМ, О);
Л\етsеt (char *.), &client '\0', sizeof(cIjent) 1;
client.ginfarnily APINET;
clienl::;sinaddr.sadd.r INADDRANY;
,clil::.siort = CLITPORT;
Ыпа (sock, (struct sockaddr *)&client, sizeof(client));
741
UNUX: полное PYKOВOДCТ1IO
Перед подключением к серверу нужно определить еro IP-aдpec:
h = gethostbyname (SERVERHOST)r
Подключаемся к серверу:
server.sinfamily = AFINET; 11 набор протоколов
mecpy I (char *)&server.sinaddr.h>haddr,h>hlength);
11 задаеМ адрес сервера
sеrvеr.siп...,роrt = SERVERPORT; 11 указываем порт сервера
соппесt (sock, &server, sizeof(server»;
После псщключения к серверу лринимаем ero запрос, выводим на стаидарт--
ный вывод, отправляем серверу свое сРО6щение и закрываем сокет:
апslеп = Тесу (sock, buffer, BUFSIZE, О);
wr"ite (1, buffer, anslen);
send Isock, MSG. sizeofiMSG}, О):
сl0зе I sock) ;
27.3.9. Установка опций сокетв
Поскольку мы используем набор протоколов AFINET, то в этом ПУJiкте
будем paCCMaTpIIBaTI> только те ОПЩIИ сокетов, которые ОТНОСЯТСЯ к этому
набору. Для работы с ОПЦИЯМИ сокета используются две ФУНКЦИИ:
. getsockoptO получение ОПЦИЙ сокета;
· setsockoptO установка ОПЦИЙ сокета.
Прототипы этих функций выrлядят так:
#iлсludе <sys/socket.h>
int getsockopt (int эд, int level,
int optionпame,
void *restrict optionvalue.
socklent *restrict optionlen) :
int setsockopt (iлt sd, int level,
int optionname,
const void *optionvalue,
socklent optioI1len);
Первый параметр, sd, это дескриптор сокета. Второй параметр ypo
вень доступа (существует только один уровень SOL SOCKET). Следу
ющиЙ параметр, optionname, это название опции, значение которой
742
rлава 27. Создание CSTeвoro ПрИJlOжеНИR 8 Unux
ВЫ ХЩ)(ЩUI1'ь (см. таБЛJЩУ :2.7.10). ЛQследИlН д\щ параметра ....., ЭТО
значение ОIЩИIIII ero размер.
Наиболее часто НCfЮльэувl\ofьте опци.... оо.квТОВ
Таблица 27. lО
Н.3....ие Описа..ие
О"......
50 ОЕвио ВmlOЧТt;./ВbI'КJ11Q1М11:. {1/О) 3ВnИСЬ DТлцда"1НОЙ ИНфОРМ811,И"'1 Д}lA CI)KJa
50BROADCAST Sml1n.Jвt.fК1lЮЧИTh (1{0) OmpadКY ШИРQкоевЩа1аЛЬНЫJ( сообщ&н
50 RE\JSEADDfI ()IЩия pa:,pewaer/aan ИСnQЛЬЗc;tЕ\еН)II8 ЛОКW1ЬНЫ)l IЩPЕФО8
СО:фQ!1яет weakТIot8Hble соедиНi!'НИЯ Ме ЖИВЫХ" nV'feM nосыt!ки СDо6Щений. Еепи
50 KEEPд1J\fE данный сокет не о-тве"lelет,на сообщения, соеДИНe;.iие будет ра.эораано. в про-
цесC)l, kОТОРЫ:Й ОсуЩеС:rntlЯfl ЭВnись е СО!(ОТ. бvn.еr 1'10c.n8H сиrнanSlорlРЕ. ДпR
ВКlllочения KEEPДUVE нужно устаноЕМТЬ значение 1. дnя выключения О
SO SND6UF УС1аН8МИвает РIJЗМер pa 01'tфаВ1(И:, значение целоrо П1nа
80 RCVВUF УсТВНмltИВl!lет р4Змер 6уферd "риема. ЭНа..енив ЦeJIоrо тИПе.
$0 SNDTJMEO Y(;fa1'tOSk-а таймаута Д1IЯ отправки со06щен"й. По ум&лчению таймаут р8вен О,
-щ ecn" '9to BOO6ttJ,(t НЕ/Т. н-ужн.о nepМ<iтъ ЗНЗ9fJние тиПа strucl t)ffil;Jval
50RCVТIMEO YCTaH08 TaAMayre ДflЯ приема сообщений. По умоnчанию та"маут равен О, '1'0
ecrb 13m ВO<:Iбще н.ет. Нужtю J1ерrЩ<ln' знвчен-ие -типа $1nд;t tiПW'Ю1
Оtli:лючи1ь (1 I МeJQ;1НИЗМ 6уфвризации сообщ,ениi:\, то всТ.. они r'iyДyТ отра8-
TCPNODELAY JtЯТЬся сразу, без задержки. Для Вj(/Iючения М8Х4Ниэма буферизации нужно
)'1CaT\" з.ta\lЧt!ие О
ТеР MAXSE::G YCТQI1Q81-'!Тb Мttj(СИМaJ'rЬНЫЙ cerмeHT двН....ых, 3,Qче"ие ЦoJ1oto Tl<fnIl
TCPNOPUSH Не кcnоt1ЬЭOfIaТЬ nроталкмеаi'lие (1)
ТеР NOOPТ Не СПОllЬ306атъ. ОПЦИИ теР (11 Для ИСПnЛьзО8&I1КЯ ОПЦИЙ пере.а.аАт-е значение О
в случае успешной установки параметра фкuия setsockoptO ВQзвращает
о; в GЛy'lае ошцбки возвращается -1, а переменная errno устанавливается
слеДУЮЩIIМ образом:
. ЕВЛDР неверный дескриmор сокета;
. ENOTSOCK указанный дсскриптор является файлом, а не COKe
том;
. ЕFЛULТ нет доступа к адресу, на который указывает Уl'a3атель
optval, то есть данный адрес находИТСЯ за пределами ВИДIiМОСТИ
приложеНIIЯ.
ФуНКЦИЯ getsockoptO возвращает значение параметра. Кроме выше
перечисдеlШЫХ параметров, ФУНКЦIIЯ getsockoptO может IIспользовать
следующие параметры:
. SOERROR возврawает номер ошибюr (будет D возвращаемом
значеНиll );
. SO ТУРЕ возвращает mп соке та.
Рассмотрим небольшоll пример работы с ОПЦИЯМИ сокетон. Мы установим
размер буфера ТСР.
743
LINUX: полное РУКО80Ц'Н.ВО
Лиотинr 27.5. Установка опций СОКСНI
#iпсll1dе Hsock-hlf-
.*include stdio4h"
mа:iп ()
{
int sd;
iat optval;
int opt1en;
/* дескриптор сокета */
1* з.начение оrщии */
/* длина optva1 "/
int J1ewt>uffeize 8192;
/* новый размер буфера */
1* СОЗДdем СОХеТ */
"с1 = socket(AE'INE1', SOCKSTREAM, О);
/* считывание длины буфера ТСР */
opt1en = sizaofloptva1);
getcsockopt{sd, SOLS()CKET, SOSNDBUF, &optva1, &opt1en);
printfl'Size of send bl1ffer %С\I1', optval);
getsockopt{sd, SOLSOCKE1', SORCVBUF, &optval., &optlenl;
printf('Size of recv buffer \а\I1', optvall;
/* изменяем длину буфера "/
set:sock{)P1: (sd, SOLSOCKE, SORC:VBUF /
&Ш1WЬuffsizе, sizeof (newb:lffsize) ) ;
setsockopt (I5d, SOI..SOCKET t SOSNDBOF,
&newbutfsizetsizeof(newbuftsize));
(* ВЫВОДИМ изменеНhЮ информацию */
getsockopt(sd, SOLSOCKET, SOSNDBUF. &opLval, &optlen);
pri,tf ("New size of send buffer %д\n", optval);
getsockopt I sd, SOLSOCKET, SORCVBlJF, &optval. &optlen);
printf("New size о! recv buffer %д\п", optvall;
}
27"3" 1 О" Сиrнапы и сокеты
с сокетами связаны три Сllrнала:
. S[G[O сокет r(У]'ОБ к вводу/выводу. Сиrнал посылается проuессу,
который связа.н с соке.roм;
. SIGURG сокет IIОЛУЧИЛ экспрессдаШlЫе (мы их использовать ие
будем, поэтому особо останавливаться иа них нет смысла);
744
rлава 27. Создание OOTBoro Пр1ло)КеН1i в Linux
. SIGJ>IE . запись в COl;eт 6о.щ.ш невозможна.. Сиrnал IIОСЫдается
rJpotIeccy, связанному с сокстом. Например, функция wrileO вызывает
сиrна.л SIGPIPE, если удзленный процесс завершен или связь ПО сети
невозможна.
Пример обработки сиrнала SIGPIPE ПРllведен ниже.
Листинr 27.6. Обработка сиrна1lа SIGPIPE
#include 'sock.h'
#include <signal.h>
/* обработчик сиrнала SIGPIPE
sigpipehandler()
{
*/
еrrquit(ИПолучен SIGPIPE \n)i
тain(J
(
int sock;
1* дескриптор сокеТа */
/* установка обработчика сиrнала SIGPIPE */
$ignal (SIGPIPE, sigpipeI,andlerJ;
1* работа с сокетом I
27.3.11. Мультиплексирование
в этой rлаве мы рассматривали пример проrpа!<lмысервера, обрабаты
нающей запросы только от одноrо клиента. На праК1'ике нсе ВЫI'JJЯДит
HaMHOrO сложнее: серверу приходится одновременно обра6а1ъrвать за
просы мноrих клиентов. Для мультиплексирования запросов клиентов
используется системный вызов selectO. Этот вызов использует, например,
суперсервер xinetd.
Листинr 27.7. МУJlьтиплексированис запросов
#include . sock .1,"
#include <sys/tcime.h>
main()
{
745
UNUX: полное PyкoBoДC11lO
int sock; /. деСКРИnТОРR:JfЧ;Rq: .со!';ета · /
int newsock; /. дескриптор. попучеЩ!Ыl!:с. Щ:>МОЩЬЮ accept · /
int retval; /* возвращаемое знаЧее */
struct sackaddrin server; 1* адрес сокета */
fdset readv; (* перемеННаЯ дпя select */
fdset writev; (* переменнаядляsеlесt */
struct timeval tout, (* таймаут для select *(
(* бескоие1ЦЩi:t цШ:Л о!t:JЩация */
for (;,) {
(* процесс ждет операцию
одновременно МОЖНО ждать
FDZERO(&readvJ;
FDZERO(&writev);
FDSET(sock. &readv);
FDSET(sock. &writevl;
tout.tvsec = 10;
BBOДaBЫBOДa на сокете
И друrие операции */
/* 10 секунд *(
retval =- select (sock+l, &t..eadv. &wri tev, О, &to);
j* если select возвращает нулевое значение, значит
'l'аймаУт*1
iE Iretval == О) (
errret(Wtimeout");
contiпue;
)
/* в противном случае, ищем соответствующий дескриптор *;
if { (FDISSET{sock, &readv» I I {FDISSET(sock.
&writev)) {
1* прием СВЯЗИ с сокета */
newsock = accept(sock. (struct sockaddr *) О, (iпt *)0);
(* работа с СО!';етом newsock */
j* закрытие текущей СВЯЗИ */
clase (newsock);
) else (
err"let ("Это Не сокет! Проверьте Все Дескр'Иnторы\n/f) j
)
746
rЛ8ва 27, Создание сетевоrоприложения в Unux
Системный вызов selectO принимает 5арryментов:
int select(int fd l fdset *input, fdset *output,
fdset "error.
strtlct. timeva1 *timeout);
Первый aprYMeHT, fd, зто файловый дескриптор, КОТОРЫЙ может быть
сокетом. СлеДУЮЩllе три арryмеита задают множества файловых дескрип-
торов для ожидания усдовий ввода (input), вывода (output) и ошибок
(error). Последний apryMeHT это таймаут.
Множества файловых дескрипторов инициализируются с помощью трех
макросов:
r"DZERO (fdset) ;
FDSET(fd, fdsetl;
FDCLR(fd. fdэеtl;
ПервыЙ макрос пОлностью очишает множесщо, следующие два макроса,
соответственно, добавляют и удаляют файловый дескриптор. Мы ИспoJJь-
'Завали два макроса для ввода и два для вывода. Сначала мы полносТЬЮ
очистили множество, а потом добавили в неro соответствуюшие деСКРIШ-
торы:
FDZERO(&readv);
FDZERO(&writevl ;
FDSET(sock, &readv);
FDSET(sock, &writev);
Особоro разrовора требует rюследииЙ параметр таймаут. Таймаут
можно задавать в секундах и миллисекундах. Например, следующие опе-
раторы объявляют таймаут .длительностью 2 секунды и 5 миллисекунд:
struct timeval touti
!* таймаут для select
tout.tvsec = 2:
tout.tvusec 5;
*;
;" 2 секунды ";
1* 5 миллисекунд */
Если вы хотите не исrlOЛЪЗ0вать таймаут (то есть ждать бесконечно).
укажите NULL в качестве последнеro apry[ema.
Функция selectO возвращает число файловых дескрипторов, на кото-
рых выцолнились ожидаемые условия (ввоД/вывод/ошибка) или .1 при
ошибке.
Вот еше один пример использования функции seJectO. Мы будем ожидать
ввода из файла и из сокета. Если будет достиrнут таймаут в 20 секуцд,
пользователь увидит соответствующее сообщение; в противном случае
он увидит сообщение: «Получен ввод из файла/секета".
747
UNUX: полное pYJ(OBOДCfl!O
Листинr 21.8. Еще один при мер и:сПоЛЬЗОВ<НШ'Я selectO
#lnclude <unlstd.h>
#incl иде <sys/types. h:>
1Iiпсludе <sуs/tlще.l»
#include <sys/select.h:>
lnt
int
int
int
fdset
st ruct
К;
sock
Ед;
fd;
inptlt;
timeval timeoutj
j* иициапизация файла и сокета *!
/* Инициализируем множество ввода */
FDZERO (input) ;
FDSETlfd. input);
FDSET(sock. inputl;
maxfd (sock :> fd ? SOCK
fd) + 1;
/* Задаем таЙмаут *!
ti:rпеоut. tvsec ;: 20;
k sеlесt(щахfd, &input, uLL. JLL, &timeout);
if (к < О)
реrrоrl'отиба при вwзове $elect.);
else Н Iк О)
puts I "TlМEOUT') ;
else
(
J* Получен: ВВОД */
if (FDl$SET (fd, lnput))
рriпtf("Получен ВВОД из файла');
it (FDISSF.T(sock. lnput})
рriпtf("Получен ВВОД из сокета");
}
Вроде бы КОД nporpaMMhI очень прост, но комментария заслуживает
макрос FD lSSET. С еro помощью t.!ы проверяем, ecrь ли во множестве
ввода ввод из какоroлибо источника.
748
rпааа.27. Создание ce-тeeoro ПрИЛDжеНИR а Lit1Ш(
27.3. 12. Небl10РУl!)щме операции
Некоторые функции для работы ";;6кетамиблоируют проrрамму н
случае, если удаленный процесс не осуществил требуемую операцию.
ПРllмеры таких функний:
. acceptO;
. соппесtО;
. readO;
. writeO.
Блокирование пропесса очень нежелателъно, поскольку но время ожида
НЮI можно бblJJО бы заняться чемнибудь друтм: например, обработать
шнjюрмащlЮ, пocryпившую с npyroro сокста. Вы можете 06'ышl!ть сокеты
неблокирующими с помощью СИС're!\IНоrо вызовы loctl(}.
Особенности работы не)(оторых функUlfЙ в иеблокирующем режиме:
. ФУIIКЦIIЯ ассерЮ сразу же завершает работу с ОШI,бкоlI
EWOULDBLOCK;
. функцlIЯ connectO тоже завершает работу, но с друrой ошибкой:
EINPROGRESS;
. функции чтения (read(), recv(}, rrom(» 803враш3IOТ 1 ИJШ О, еслИ
нет считываемых данных.
Ясное дело, что в таком режиме нужно периодически Пр08ерять наЛII
«ие данных Beдь теперь процесс Це будет их ожидать: если их нет, то
функции просто возвратят 1 или О.
Ilример создания неБЛОКIlРУЮЩИХ сокеТО8 приведен ниже:
Листинr 27.9. Использование системноrо выовDD юсtlО
#include Nsock.h
include <sys/ioctl.h>
'fOid mainO
,
int ,ВОСК;
int оп :;; 1, off --::: о; 1* значеНие для ioctl() */
1* Создаем не5локирующий сокет */
ioctl(sock, FIONBIO,&On);
749
rлава 28 проrРАММИРО-
ВАНИЕ ЯДРА
КАРКАС МОДУЛЯ
КОМПИЛЯЦИЯ МОДУЛЯ
РАБОТА С УСТРОЙСТВАМИ
ОПЕРАЦИИ НАД УСТРОЙСТВОМ.
ПОИСК УСТРОЙСТВ
LINUX ПОЛНОЕ РУКОВОДСТВО
Из rлавы 7 вы узнали, что драйверы устройств в Linux выполнены в
виде модулей ядра, и познакомились с пакетом moduleiniHools (он же
modutils для ядер 2.4), содержащим утилиты для выполнения OCHOB
ных операций над модулями ядра. В этой rла8е я покажу, как создать
собственный модуль, ПОЗ80ЛЯЮЩIIЙ расширить возможности ядра опе
рационной системы.
28.1 . Каркас модуля
Что будет делать ваш модуль, зависит от 8ас это может быть драйвер
УС1'ройства ИЛИ просто небольшой модуль, дополняющий ядро нужноЙ
вам ФУНJщией.
Для начала напишем каркас модуля на языке С. Этот каркас можно будет
СКОМПИЛИрО.llать. но в результате ПOJlучится МQДУЛЬ, КОТQрыйне делает
ничеrо. ОИ ПРQСТО послужит Вам основой для написания настоящих,
серьезных модулеЙ.
Лис,и", 28.1. Кэркас МОДУЛЯ ядра Linux (тodLlle1.cl
#defiпe MODULE
#define KERNEL
#include <linux/module.h>
int initmodule(1
(
return о;
void cleanLlpmod"le()
(
751
LINUX: ПОЛное РУКОВОДСТВО
Теперь раэберемся, что означае1 каждая строчка кода нашеro будущеro
модуля. Первые две строчки делают обыкновенную nporpaммy модулем
Ядра L.inux. Это директивы преПрОllессора срр, обязателыrые для каждоro
модуля. Есди вы не укажerе IIХ, компилятор сrенерирует совсем не тот
код, KOToporo мЫ ОТ Hero ожидали.
Третья строка подключает затоловочный фаЙл module.ll, в котором Ha
ходятся все необходимые для создания модуля определения.
Функция inilmoduleO вызыnается при заrрузке модуля ядром. Если
заrpузка модуля прошла успеuпщ, фуныщя возвращает О, в ПрОТИВНОМ
случае она должна возвратить любое друroе ЗНачение код ошибки.
Функция cleanuprnoduleO вызываеТСЯ при уцалеиии модуля. Тип воз
вращаемоro еЮ зцачения не определен, ПQЭТОМУ провt1рить, успешно ли
произOlШЮ удзлщще, Сама ФУИIЩUЯ ае позволяет.
Названия функций initmodule() и cleanupmodule{) необязательны BЫ
можете назва1Ь 11" 11OдpyrOMY, но для зтоrо вам IlyжllО использовать
функции tnodule.JnitO н moduleexitO, которые определены в заroдо
BO'IHOM фаЙле init.h.
Переделаем нащ .шаблон так, чтобы анне использовaJI. стандартные имена
функций initrnodule() и cleanupmoduleO:
Листинr 28_2. Шаблон МОДУЛ51 с; переименованием
стандартных функции (n\Ooule2.cj
#de'EirH t-1-ODIJLE
#define KEHNEL
#inсludе<linцх/щqdulе.h> 11 для модуля
#include<Hhux/iri1t. Ь> /1 l11oduleinit () Ид1()dulеехit ()
if1.Z: sta!'t: \) [ r(ttl.t-!1 О i
voi(l 5tOp 1:) {}
moo\.l1 E_i:r),it; (3tart) ;
пюdLlеехit(stор);
Функциям mOdl1le )nitO " пюdulе exitO нужно передать имеQа функций,
которые будут вызваны при ИЮfЦllалllЗации и УД3JlеНЮI модуля cooТВeT
ствеНIJО. Зачем ло нужно? Так, для обшеrо раЗБИТИЯ чтобы вы знали,
для 'Iero IIС110JlЬЗУЮ1СЯ ЭТJ\ функции. Ваш модуль Не станет работать
лучше, если пы переименуете стандартные функции инициализации н
удаления.
752
rпaBa 28. ПроrраММVtрованив ядра
Помните, для чеrо используется проrраlМа modinfo? Да, дл!! получе-
ния Iшформации о модуле. Давайте добавим эту информацню в наш
модуль.
пистинr 28.3. Информация о модуле (тodlJle3.c)
#de Ппе MODULE
#define KERNEL
#i_nclude <linux/module.h>
MODULEAU'I'HbR(.Denis Ko1isnichenko dhSilabs@mail.ru'J;
MODULEDESCRIP'rrON ("Linux kernel modu1e") ;
int initmadule\) (return о; )
void cleanuprnodule() ( ret.urn о;
Макросы MODULEAUTHOR и MODULE DESCRIP'I'ION определены в
3аrllЛОВОЧНОМ файле module.ll, IЮЭТОмУ никаких дополнительных заrо-
ловочных файлов подключать не нужно.
При необходимости молуль может выводить на консоль сообщени!!,
например, о всвозможности ИНfЩЩIЛизации устройства. Выводимые
модулем сообщения будут запротоколированы службой протоколирова-
IIИН ядра . демоном klogd. ВыводИТЬ сообщения нужно не с помош-ью
функции рrшЩ), а функцией pril!tk(). В этом случае сообщения не только
окажутся на системной I<ОНСОЛИ, но И будут запротоколированы в фаЙле
!var/log/messages.
Сейчас МЬ! напишем модуль, который будет выводить сообщения при
заrрузке и при удалении.
ЛисТl'Ю- 28 4. ИспопьзоваНllе фУНКЦИИ printk() (nlodule.c)
#define MODUl,E
#define KERNEL
#iлсludе <linux/module.h:>
'iпсludе <1 inuxlkerne1 .1',> 11 printk
МОDШ,ЕА(]ТНОR( "Denis Коlisпiсllепkо dhsi1abs@mail.ru");
ИОDUI.,ЕDЕSСRIРТIОN (" 1.;.1 ННХ kernel rnodule H ) ;
int iпitmQdu.le. ()
1.
printk ('Му nюduIе: stюtiпg... \n') ;
:5 Зu. j8
753
LJNUX: полное рУКОВОДСТВО
return о;
void cleanupmodule()
{
printk(HMy то4цlе: Stopping...\n H );
return о;
28.2. КОI\iIПИЛЯЦИЯ I\iIОДУЛЯ
КОМПИJ1ировать мы будем файл module.c. Для этоro понадобится уста-
новленный компилятор gcc, ззrОЛОВОЧЮ>lС файлы 11 1Iсходцые TeJ{cTы
Я1Iра. Если вы дочитали книry до этой rлавы. то у вас уже должны 6ыть
установлсцы пакеТbI:
1. срр I1репроцессор срр;
2. Ыппtil5 набор различных УТИJ1ит (а5, gprof, lд);
3. glibc-kerheaders заrОЛОВQчные файлы ядра;
4. glibc-devel вспомоrатедьцые файлы для разработки прw!Ожений с
использованием стандартно!! библиотеки с;
5. gcc компилятор gcc.
Осталось установить пакет kеrпеJ-sоurсе исходные тексты ядра Linux.
КрОМе ТО/'О, нужио убедиться, что ваше ядро поддерживает динзмичеС1Ш
ззrружземые модули (п. 20.3.2.3). Если опция ЕпаЫе loadabIe module
support выключена, ее цужно включить, сохранить файл конфиrурацrш
ядра И llереКОМПИЛI'ронать ядро.
Компилятор gcc нужно Вblзвать со множеством ОПЦИЙ, поэтому для 06-
леrченИЯ себе работы мы напишем mаkе-файл (п. 21.2):
Л"СТИНТ 29.5. Makefile ДЛЯ сборки МОДУЛЯ
cc.gcc
P1\TH"'"/u'i',f:1 inсlцd-е /tlsr-/src/l iпux...2. 4/ iпсlцdе
HODi'LAGS:= оз Wall DLlNUX DKERNEL." I$(PATH)
I11o:i1.11e .0: n1Qdule.c
$(ССI $ (MODFI,AGS) -с modHle.c
Оппии компилятора означают следующее:
. 03: булет использован третиЙ уровень ОПТIfМlfзаЦIШ (что это такое,
вы узнаете в справочной Сllстеме сес: тап gcc);
. Wall: включаем все предупреждения;
754
rпaBa 28. Проrраммиро"ание ядра
. DLINUX: rенерируем код ДЛЯ Linux;
. I$(PATH): определяем путь поиска заroловочиых файлов. По YMOk
'!ЗlШЮ компилятор ишет файлы заrOlIОВКОВ n каталоrе /usr/include, но
там может и lIе бbrrь нужных файлов. Наприцер, ДЛЯ дистрибутива
ALT Liпux (ядро 2.4.21) файлы Jаroловков наход>П'ся в каталоre /usr/
include/linux- 2.4.21 rel-std-up.
Поместите mаkе-файл в тот же каталоr, rдe находится module.c, и выпол-
ните команду make. После ее выполиения вы получите файл module.o,
который будет находиться в том же каталоrе.
# insmod module.o
Вы увщште сообщение Му module: stаrtiпg... Это же сообщение
будет заlIИсаио в файл протокола !vаr!lоg!mезsаgеs.
28.3. Работа с устройствами
Мы только что написали модуль ядра, который можно установить, уда-
лить, который выводит сообшения, но ничеrо полезноro он не делает.
Усложним нашу задачу: напишем модуль, управляющий некоторым
устройством !dev!device. Данноrо устройства в нашей системе нет,
поэтому нам ero нужно создать, 110 этим мы займемся чуть позЖе.
Перед тем, как при ступить к написанию драйвера устройства, нужно по-
IОНОрИ'l'Ь о Cl!Мих УС'fройсtВ!iХ. УС'I'рОЙt:'ша БЬШВЮ-f трех типов:
. Символьные: чТение и запись устройства выполняются посимволыl..
Примером TaKoro устройства может послужить последовательный
порт.
. Блочные: чтение и запись устройства выпOJiНЯ}t)ТCя блоками, IGIJ( прави-
Ло, по 512 или 1024 байта. СамыЙ яркиil npимер блочною устройства
жесткий диск.
. Сетевые: файлов этих устройств вы не найдете в каталоre /dev, по-
скольку использование файловой системы, то есть работа с этими
устроЙствами как с файлами, неэффективно. Пример сеТевая карта
( ethX).
Существуют УСТРОilства, которые нельзя отнести ни к одному Тlшу, по-
скольку ОIlИ не принимают и не передают данные. Пример: RTC (Rea!
Time Clock).
Чтобы сделать устройство доступным для системы и пользовательских
проrрамм, нужно ero зареrистрировать. В заrодовочпом файле f s . [1
определены ФУIIКЦПИ для реrистрации символьнblX и блочных устройств.
Все они начинаются с префикса register. Наше устройство будет сим
755
LINUX: полное руководство
вольным, поэтому для ero реrистрацииМЬ! будем использовать функцию
register chrdev. Вот ее прототип:
extern int registerchrdev(unsigned int, const char *,
struct fileQperations *-);
Первый арrумеит это старший иомер (тajor number) устройства,
определяющий еro Т1IП. Если старml!Й номер равен Р, 10 функция возвра
тит свободный <.'Тарmий номер для устройства иашеrо вида (символьное
устройство).
Чтобы понять., для чеrо нужен стаРШllЙ номер, вспомним каталоr /dev,
содержащий фаЙлы устройств. Файл / dev I t tyl зто терминал с HO
мером 1. Старший номер определяет тип устройства термииад (tty), а
младшиЙ ето номер в системе (1). ЧелоJJCКУ проще работать Не с KOмe
рами. а с символьными именами устройств, ПОЭТОМУ каждОМУ старшему
номеру соответствует символьное ОООЗllзчение.
При реrистрации устройства нужно указать cro тип старший иомер
устройства. Но для Э1'оrо нужно знать, какие IfOмера свободны. Проще
всето указать первым apryMeHToM О Torдa функщfЯ возвратит первый
свободный старший номер символьноrо устройства для вашей системы.
Если старшиJi номер указать ЯВНО, может ВОЗНII1Шyrь конфликт номеров,
и наше устройство не будет зареrистрировано.
Второй параметр определяет имя устройства (<<device»). Последний па
раметр очень важен. Это структура указателей на Функции для работы с
наШIIМ устройством. Наш модуль содержит таблицу ДOcтyl1HЫX фУНКЦИЙ,
а операщюН1/ВЯ сцстема вызывает uужную функцию, косда пользова-
тельской протрамме цужно ВЫПОЛIIIIТb операщ!ю с фаl1ЛОМ устройства
(открытие/закрытие, чтение/запись). Таблиuа функцнй символьноrо
устройства хранится в структуре fileopera[ions, которая передается при
реrистращш устройства.
После реrilстраuи!\ драйвера устройt.'Тва происходит поиск устройств
двнноro типа. Причем этот поиск должен произвести саМ модуль. Для
простоты будем считать. что у нас Bcero два устройства. Нам нужно
C03)laTI, ЭТII два устройстnа, предварительно вычислив старший номер
устройства. Напишем модуль, который помимо реrИС1РDЩШ УСТРОЙС'I'ва
выводил бы ero С1'арщий номер потом МЫ еl'O будем ИспользоваТЬ при
создании Уt.'Тройствв.
756
rлава 2.ЛрorpaММИро8ание !!Дра
Листинr 28.6. Драивер устройстsа jdov,device
(без структуры fiI"op,,,ations)
n<Jefine MODULE
naefine KERNEL
Hnclude
#include
#include
#include
#include
Hnclude
<linux/module.h>
<Нпихl inlt. h>
<linux/kernel.h>
<llnux/fs.h> // реrистраЦИЯ устройсв
<linux/ioport.h>// рабоа с портами ввода/вывода
<linux/sched.h> // резервирование прерывания
// имя HamerO устройства
#define DEVNAМE 'device.
/1 Порты в.BoдaBЫEoдa нашеrо устройства
ndеНпе POR'I'STAR' Ох2000
#define PORTQTY 10
// Память нащеrо устройства
#define MEMSTART Ох20000000
#define MEMOTY Ох20
1/ Номерпрерывания длЯ нашеrо ycpOCTBa
#define IRQNUM 9
MODULEAUTHOR ("D'щis Kolisnlchenko dhsl1abs@тail.ru.) ;
MODULEDESCRIPTION("Linux kernel тodule");
1/ Старший номер файла устройства
static int Major;
// Структура fileoperations пока пустая,
11 НО вскоре мы ее напишем
struct fileoperation$ fO;
// Обработчик rrрерывания
void lrhandler(lnt irq, vold *devld, strцct ptregs
*regs)
(
return;
757
UNUX: попное PY1COllOдcтao
:i.nt iпit1ПоdulеО
{
11 Реrистр>фуj3МУСТРОЙСТВО
printk ("Му module: startingo.o\n");
Major " registerchrdev(O, DEVNAМE, &FO);
if (Major < О) {
11 Устройство не зареrистрироваНQ
printk("My module: registration failed\n');
return Major;
}
printk ('Му m::dule: device registered, oojor n1.m1ber '" %д\п' ,Мajor) ;
// Резервирование портов BBoдaBЫBoдa
printk("My rnodule: allocating io ports\n');
if (checkregion(PORTSTART, PORTQTY)'
{
printk{'Мy rnodule: allocat1on 10 ports faild\n');
return EBUSY;
)
requestreg1on(,PORTSTART, POHTOTY, DEVAМE);
printk {'Му module: 10 ports allocated\n');
/1 Резервирование ПаМЯТИ
if (checkrnem,:",region (МЕЩSТАRТ, МEMOTY»
(
printk("My module: memory al1ocation failed\n');
releaseregion(PORTSTART, PORTQTY};
return EBUSY;
rеquеst....mещ...rеgiоп IMEMSTART, MEMQTY, DEVNAМE);
printk ('Му module: rnernory allocated\n");
1/ РезеРВИРОВание прерываЕЯЯ
if (requestirq{IRQNUМ, irhandler, О, DEVNAМE, NULL»
{
printk("My module: IRQ al1ocation failed\n'};
releasememregion{MEMSTART, MEMOTY};
releasereg1on(PORTSTART, PORTQTY);
return EBUSY;
)
758
rлвва 28. Проrpаммироввние ядра
printk (.Ну module, IRQ allocated\n.);
rеtщ;п о;
)
void cleanupmoтl1e{1
(
1/ Освобождаем порты BBoдaBЫBoдa
releaseregion(PORTSTART, PORTQTY);
printk("Hy module, release io ports\n.) ;
1/ Освобождаем память
relea5ememregion (МEMSTART, МEMQTy.,);
printk("My module, release memory\n"),
1/ Освобождае прерывание
freeirq(IRQ..N{JM,NULL) ;
printk("My module, release irq\n"J;
1/ ОТеняем реrистрацию устройства
if (unregi5terchrdev(Major, ОБVЫАМЕI < О){
prlntk("My щоdlJlе, cannot to unregister device\n");
)
printk ("Му module, device unregistered\n") ;
returnj
)
При заrрузке "шдуля вы УВИДИте следующее сообщение:
Му module, device registered, major number = 255
Конечно, I!:)X)Me этоrо соqбщения будут и друrие, но нас они не интере-
суют. Почему ,{менно это сообщение так ВВЖНо,ЦЛЯ нас? В первой частн
сообщения roворится, что наше устройство успешно зареrnстрировано,
а во второй сообщается старщий номер устройства, который мы будем
IIспользовать ДЛЯ создаНIIЯ устройств /dev/devic:eO и /dev/deviCel.
Вы не забыли, что нам еще нужно создать два устройства типа device,
чтобы проrpамм:ы моrли работать с ними? Перейдите в каталоr / dev и
от имени сynерпользоват:еля выполните команды:
# mknod device с 255 Q
# mknоа device с 255 1
Здесь 255 это старший номер устройства (у вас он будет дрyrим), Ои 1
младщие номера устройств. После выполнения данных команд будут
созданы два файла устройств /devJdeviceO и /dev/devicel.
759
UNUX: полное РУК""ОДСТВО
После реrистраuни устроЙства ФующиеЙ registerchrdevO МЫ пыта
емся захпатить диапазон портов. Для этоrо I1редназначена функция
requestJegiol10, ко перед ее пызовом мы ДОЛЖНЫ убедиться, что нужныЙ
нам диапазон не используется (функция checkJegionO). Затем, если нуж
но, мы резервируем память для нашеrо устройства. Для резервирования
памяru используется фунКlЩЯ requestme!1lJegionO, а для прооерки I!ОЗ
можности захвата памяти преДIlазнаqена ФУНКЦИЯ checkmemregionO.
После успешной реrистрации памяти можно попытаться захватить IRQ
фУНК!lИЯ requestirqO.
Предположим, что на KaKOMTO этапе реrистрации модуля произошла
ошибка. Если мы не смоrли зареrистрировать JЮрты ВIЮJnI!вывода, вряд ли
имеет смыслпродол:жать работу. Если Же ошибка ПроЮОI1VIЭ при резерВIf
ронании памяти, то перед завершением работы модуля нам нужно освобо
ДИТЬ порты ввода/вьшода, которые мы зареrистрировали на предыдущем
этане. Аналоrи'JНО поступаем при ошибке захвата IRQ освобождаем
порты и память. Функции rеlеаsе".....шещ.....J:'"еgiоn () f releaseregion
и f !:ee." rq (1 используются для освобождения памяти, портов и LRQ
соответственно.
Обратите внимание: мы написали драйвер та", QTO ои захватывает порты
и память от IIМеftи одно...) устройства DEV NAМE. В реальности все
rора'Здо сложнее: нужно 'Захватывать ресурсы для каждоrо устройства
данноrо типа. К тому же придется предусмоч,еть поиск устройств MQДY
лем: в нашем случае мы знаем, '!то УСТРОЙL,В только два, но у КОIIечноrо
ПОЛЬзователя таких устройств может быть больше или меньше, 110ЭТОМУ
наш модуль не будет универсален, еСШI он будет поддерживать только
два устройства.
28.4. Операции над УСТРОЙСТВОМ.
ПОИСК УСТРОЙСТВ
Наш модуль пока еще не может называться «драйвером» В прямом смысле
этоrо слова: устройство--то он реrистрирует, но не позволяет ВbПJОЛЩlТЬ
ни OJIHOlf операции с ним ведь структура filеореrаtiолs пуста.
Кроме структуры fileoperatjons нам еще понадобится структура ДЛЯ
хранения информации о состоянии устройства, а так Как устройств у нас
два, то нужен также массив структур для хранения состояния каждOfО
устроЙства. Индексами массива будут младшие номера устройств.
/1 Структура для хранения состояния устройства
5t: ruct device.......state
\
760
rлава 28. Проrpаммрование ядра
iпt dev.....open;
ssizet byteread;
11 1 устройство открыто, О aKPЫTO
11 Количество прочитанных
/1 ИЗ устройства байтов
! / КОJIичест'[ю записанных баЙтов
ssizet bytewrite;
};
1/ Массив для хранения ""формации о состоянии устроЙств
static struct devicestate state[2];
в принципе, можно обойтись и без кода поиска устройств без Hero
модуль будет ПРОЩе (а зна'щт, надежнее), да и работать он будет быстрее.
Обойти поиск устройств можно следующим образом. Мы ие зиаеf-{, сколь.
ко устройств типа device будет у конечноrо поЛь:iоватслл. ПоэТому вместо
массива state (он будет описан ниже) нужно использовать динамический
список, который будет содержать информацию о каждом устройстве Тlша
device. При заrpузке модуля список будет содержать Bcero одии элемент
для YCТPQ!!.:ra {d!"'v/deviceO. Если УСТРОЙС"Il.Iоrо типа BC1:\s:тeMe нет
вообще,будеМ:.!1РОСТО СЧИТаТЬ, что устроilеtIiО'q!:;уiсеОз<lJqJ*О, а при
попытке обращения к нему будем сообщать, что оно занято. По мере
поступлеиия запросов nporpaMM на открытие друrих устройств I dev I
cleviceX будем доба"лятъ в наш список повые эдементы.
Если же вам все'такИ хочется узнать конкретное КОЛН'Iе(.'Тво устройств
Idev/deviccX, установленных у ПОЛЬЗ0вателя, можно просто просмотреть
содержимое кзталоrа Idev и посчитаlЪ количество файлов devicc*.
Вес I"OTOBO для Toro, чтобы написать функцию открытия УСТРОЙства.
Листинr 28.7. ФУНКЦ"SI открытия ycтpoiilC"fBa
sr::.at.ic irlt deviceopen (stC..:Lct iпоdе *irюdе. st.r:uctfile * Ер)
(
struct devicestate *devstatei
printk: (JI'My rnodul(: try to op:п. dt:vice Witt1 mihor number
%d\n", MINORlinode>irdev);
devstace о &state(MINOR(inode>idev)J;
if(devstate>devopen)
{
princk("Devise is busy\n"} ;
return EBUSY;
}
dеvэtаtе>dеvореn 1:
devstate>byteread = о;
devstate>bytewrite = О;
761
UNUX; попное руководство
MDDINCUSECOUNT;
Ieturn о;
Младший номер устройства мJ,I получаем с ПОfOшью вызова MINOR
(inode>iJdev). Если устройство уже открыто, мы выводим сообшеНllе:
Devise is busy. В противном случае устанавливаем флат открыти.я УСТРОЙ
ства, обнуляем byteJead и bytewrite, а также увеличиваем СЧеТЧИК ис-
ПОЛЬЗОваниЯ naHHOro модуля (MODINCUSECOUNТ).
Функция закрыТIIЯ устройства сбрасывает флаr devopen 11 уменьшает
счетчик использованиЯ устройства.
Листинr 28.8. ФУНКЦИQ з.аtфЫТИЯ УСТРОЙСiRЭ
staLic int deviceclo$elstruct i!'\ode *inode, struct file Чр\
\
struct devicestate *devstate;
printk('My module, try to close device with minor nurober
%d\n'. MINOR(inode>irdev));
devstate = &stаtе[МINОRliпоdе->irdеv);
ifl!devstate->devopen)
(
printk('Device i5 not open\n');
rеtUПl О j
)
dev state- >д.еу ореп=О;
MODDECUSECOUNT;
return Oi
)
Теперь нам нужно указать ядру, какие фУНКШIII нужно использовать для
открытия и закрытия устройства:
st.Ttlct file.operations РО :::.
(
ореп: deviceopen.
.telease: deviceclose
);
762
rЛ8ва 28. ПрorраММИРОВ8Ние RДPB
Полный КОД МОДУЛЯ устройства device вместе с функциями открытия и
закрытия устройства, а также структурой fileoperations ПРlIведен в сле
лующем листинrе:
Листинr 28.9. Модуль устройства device (тodllle.c
#define MODULE
#define KERNEL
#include <linu:x/rnodule.h>
#include <linu:x/init.h>
#include <linuxlkernel.h>
#include <linux/fs.h> // реrистрация устройств
#include <linux/ioport.h> // работа с портами ввода/вывода
#include<linuX/5ched.h> // резервирование прерывания
// Имя нашеrо устройства
#define DEVNAМE 'device"
1I Порты BBoдaBЫBOДa машеrо устройства
#define PORTSTART Ох2000
#define PORTQTY 10
11 Память нашеrо устройства
#define MEMSTART Ох20000000
#define МEMOTY Ох20
// Номер прерывания для нашеrо устройства
#define IRONUМ 9
МОD{JLЕАUТ!ЮR("Dепis Kolisnichenko dhsilabs@mail..ru"),
MODULEDESCRIPTION('Linux kernel module" I ,
11 Старший номер файла устройства
static int MajoT,
1/ Структура fileopeI'ations пока fJYстая, но вскоре мы
ее напишем
struct fileoperations FO
{
ореn: deviceopen,
release: deviceclose
},
763
UNUX: полное pyкoSOдcra<).
// CTPYKTYPq Д Храаения СОС:УОЯНИЯ YCTP99Ba
struct devicestate
{
int devopen: // 1 УСТрОЙСТВО открыто, О закрыто
ssizet byteread: (1 Количество ПРОЧИ'l'анных баЙ1'ОВ ИЗ
устройстаа
ssizet bYtewJ:!Jte; IIКФ.IU1Ч,е,СТВО з.;цt\\с;i,;ffiых байтов
),
// Массив ДЛЯ хранения информации о CDCTO устройств
stat1c struct devicestate state[2] ,
1/ Обработчик npерываНI-Я
void irCLhandler(iht irg, void 'devid" struct ptregs
*regs)
(
retu.rni
}
int initrnOdule()
(
11 Реrистрируен устройство
printk ('Му rnodule: starting".\n' 1;
Major = registerchrdev(O. DEVNAМE. &РО);
if IMajor < О) (
// Устройстно Не зареrИСТрирОВаНО
printk I 'Му П10dtйе: registration faHed\n');
re,t urn Maj or ;
}
printk('Мy module: device registered, rnajor number = %д\
nN,Major)j
/1 Резервирование портов BBoдaBЫBoдa
printk I 'Му тодиlе: allocating io ports\n'),
if (checkregion(PORTSTART, PORTQTY»
(
printk('My rnodule: allacation io ports failed\n');
return EBUSY;
}
requestregion(PORTSTART, PORTQTY, DEVAМEI;
printk ('Му module: 10 parts allocated\n');
764
rла.а 28. Прorpаммироваии.. ядра
/1 РезеРВИРС>1;iание памяти
it I checkmemregion (MEMSTART, MEMQTY I )
(
printk('Мy module: memory allocatioп failed\n");
release:...regiOIJ I PORT--,START, PORTQTY);.
return EI!USY;
)
requestmernregion (MEМSTART. MEMQTY ,iDEVNAМE);
pr1ntk ("му люdиlе: rnemory a110cated\n");
1/ Резервирование црерывания
if (request1rq(IR(LNtJМ. iI.Q....handler,O. DEVNAМE, NULL))
(
printk("Мy !nodule: IRQ allocation ЕаНед\п");
rеlеаsеmЕЩIrеgiоп (MEMSTART, MEMQТY);
releaseregionIPORTSTART, PORTQTY);
return EBUSY;
)
printk ("Му module: lRQ allocate(j\n");
return о;
J
void сlеаШJр!nоdulе ()
(
11 Освобождаем порты BBpдaBЫBoдa
rеlеаSЭrеgiоп{РОRТSТARТ. PORTQTYI;
printk("My rnodule: release 10 ports\n");
// Освобождаем память
releasernernregion(МEМSTART. МEMQTYII
printk{"My rnodule: release memory\n");
// ОСВОQождаем npрывание
freeirq(IR(LNUМ.NULL);
рriпtk("Иу module: release irq\n"l;
// Отменяем реrистрацпю устройства
if unregisterchrdev(Major. DEVNAМE) < О) (
printk("My rnodule: cannot to unregister device\n");
prin{'М,y rnodule: 9vice unregistereq\n') ;
rе1:;цrn';
)
765
UNUX: ПОАНое руководство
static int deviceopen(str\.tct inode *in<:><re, .struct file Чр)
(
struct devicestate *devstatei
printk("My module: try to ореп device with minor number
%d\n" , MINOR(inode>irdev»);
devstate &state[MINOR(inade>irdev)J;
ifldevstate>devopen}
{
printk ("DeviBe is ыlу\п");;
return EBUSY;
)
devstate>devopen = 1;
devstate>byteread = о;
devstate>bytewrite = о;
MODINCUSECOUNT;
return О;
}
static int deviceclose(struct inode *inode, struct file
*fp)
{
struct devicestate *devstate;
printk ("му module: try to claBe device with minor number
%d\n", MINOR(inode>irdev»;
.devstate = &state[MINOR(inode>irdev)];
if (! dеvвtаtе>dеvореп)
(
рriпtk("Dеviсе is not ореп\п");
return о;
devstate>devopen=Oi
MODDECUSECOUNT;
return о;
}
Теперь модуль для абстраКТRОСО устройства device сотов. вы можете
написать неБОЛЫllУЮ проrраммку, которая пыталась бы выпQЛНИТЬ опе-
рации с нашим устройством: открыть есо 11 закрыть дрyrих операций
мы не определили. для определения ДРУПIХ действий используется та же
структура fileoperations. Листинr 28.10 показывает, как она объя!'ле1!а 11
фаЙJlе (иsс (src /1 int!x2. 4 / i ncl ude (liпuх I Es . h.
766
rлзва 28. Проrраммирование ядра
Листинr 28.10. Фраrмент файла !u$r/$rcili"\IX2.4!includo!linuxifs.ll
struet fi1eoperations (
struct mod1l1e *ownerj
10fft (*llseek) (atruet [Не *, 10fft, int);
S$izet (*read) (struct file *, char *, sizet, lofft *);
ssizet (*write) ($,truet [Не *. const char *,
sizet, lofft *);
int (*readdirl (struet [11е *, void *, fi11d1rtl;
unsigned int (*poll) (st ruct f Не *,
struct polltablestrиct *);
1nt (*10ct11 (struct irюdt' *, struct f11e *. Ll!\signed
1nt, unsigned 1ongl;
1nt (*mmap) (struct f11e *, struct vmareastruct *).
1пс (*"реп) (str'uct 1node *, struct [11е *).
1nt (*fluahl (struct ЕНе *);
int (*.1eaael (всуцсс inode *, struct f110 О);
int (*fsyne) (struct [11е *, struct dentry *
int datasync};
int (*fasync) (int, atruct [11е *, int);
int ("1ock) (atruc[ fi1e *, 1nt, struct fi1elock ");
ssizet (*readv} (struct file *, const st:ruct iovec *1
Lшs1gпеd long, 1oEEC *).
ssizet {*writev} (struct file *, const struct iovec *,
llna 19ned 10ng. 1 of ft *);
ssizet (*sendpage) (struct file *, Etruct page *, i-nt,
зizсt. lofft * I int);
uns1gned 10ng (*getunmappedarea) (struct fi1e *
unsigned long, unsigned long,
uпsigned long, ипsigned loпg);
};
Как использовать структуру filе operations, думаю. ясно. Например, нам
нужно ОlIисать обработчики 3аllllСII и ЧтенИя устроЙства функции
dcvicewriteO и deviceJeadO:
struct fi1eoperations РО =
(
ореп: deviceopen,
release: dev1ceclose
read: deviceread,
write: devicewrite
};
Обработчики 'lТения и записи пишутся «по образу и подобию» обра
бот'lИКОВ открытия и закрытия устройства, то есть сначала нам нужно
определить младший номер С помощью вызова MINORO. а.затем про
извести операцию с устройством.
767
Приложение
ТАБЛИ.ЦЫ ...
СООТВЕТСТВИЯ
WINDOWS-
И LINux-проrРАММ
РАБОТА ВИНТЕРНЕТ
РАБОТД С ФДЙЛАМИ
ПРИКЛАДНЫЕ И СИСТЕМНЫЕ
проrРАММЫ
ОФИСНЫЕ ПРИЛОЖЕНИЯ
МУЛЬТИМЕДИА
РАЗРАБОТКА проrРАммноrо
ОБЕСПЕЧЕНИЯ
СУБД
КОМПИЛЯЦИЯ МОДУЛЯ
МАТЕМАТИЧЕСКИЕ ПАКЕТЫ
иrРы
LINUX ПОЛНОЕ РУКОВОДСТВО
с ПОМОЩЬЮ приведенных ЮlJКе таблиц вы СМожете подобрать достой
ный аналоr для вашей Wiпdоws.проrpам:м:ы. При ззполнеНltи таблицы
я руководствовался npoстым правИЛОМ: чтобы Wiпdоws[!роrрам:ма и
се Liпuxаналоr были ВОДНОЙ веСОВОЙ катеrОрЮI, то есть обладали
примерно одииаковыm возможностями.
Работа вИнтернет
WIndows- Unux.AHМOf'" Koмiнm8f)f4'A
"рМр8Nf1П1
N_ts<Щoe Думаю. что обе 9'fИ пporpaмM в ПрВДC'JЭR1lеtп:wt
Nэ>Agзlor IМGzll1a и особых коммнтарlotях не нyж.ДcIЮТGI1 МЫ w: 3KaM
еще со еремен WindOWS
ВРМ ли Зэsооватl'm!. CM"! 8bIСrут-f1b п рал Inteтet
Konqueror &:ptoter'a. но ДЛR ПОХОДО8 на t-iэ ОЧS-НЬ "'1nopo'1eHHble"
(с исnользоsанием Ftash, VRML. апметы Jeva) с:ай1ы
Internet 8фlOrer ero ВОЭМI)ЖI.ос;ей аnолне хваrит
Galeon ДаНН"-iЙ браузер ОС110ВОН на деИЖke Mo;1lja, поэтому он
с успехом может 3аМeI01ТЪ СЭМOt"О Мсni!l'у!
КоМпанШI Мicrм,oft портировмз nporpQMMY JE. на
LE for U"ux платФорму Unux. ЧеСТЖ) rOЩlря, «ос.лq ид дм Лину"с"
Я е rfla38. не 1ЖД6n. но судя "О ОТЗblВClМ. nporpnМM3
lWIнуксоиДаN не flOНpщмnЩ:ь
Уже вышла s.oсъмая аерсиязтorо пОПУЛJрноrо брауэвра.
Ореrз Opera tor Unux и ОН<lДОCТ)'f1ма n:о1tЩваТi&ЛЯМ Uf1UX. Но реl(омеНДТСR
в.осПОЛЬЗ0saтъсs< спБИ1JЬН(lА версией. 7 .54 зто
nр'О8ереМн&l вреМенеМ, нв.n.eжNaя версия
МщJ!lо for WindOWS !VIozlJla tor Unux Uпuх-аН;;tЛоr облет всеми ВQ3МО)ЮjОСf\1М
WiпdQws.проrPi!ММЫ
)(Jm;an EvolutlQn Полный аналоr знаменитой nporpaMMbl OullQok
npor-рамМbl по"ожtt ДPYf на дPyr'a как дne калл..., воды
к: МаИ вполне (:праеится С.800ложенной И<I нeiQ задачей
Clty'.«iII1Ъ эаМetlиretlQМ ДАЯ Qut!ook., Орrани.ззЦия учетн).
Ouflook записЕ3д К Mall ОЧень изnоммнаsr OUllook. ЧТО делает эти
KMaiI две nPOrp8MMbl месКОПЬКО ПОХОЖИМИ APIIi" на.др:vrз, Конечно.
н: Mail и Outtook H очень ПоХожи ВtlеШ\--lе. НО ЯОС1"аетСЯ
nрежн&й. Нужно заметить, чro К М:зll rll';! замениТ nOЛН'{IO
версYlЮ Outtook. CIII;Opee вc::ero. ОН "ПОТНет" на PQn'" аКЗl1Of8
Outloo$c 8tpres.s
npaMMa Dбладает достаточно удобlibtJ-l ИtlтерфеАсом.
Кпоde '110 n0'380JtS:le1' c-тae;1k1Ъ ее 8 оДИН Д С kJJМCН1'PJo1 КО8ОСтей
OutIook flporpaMMbl Outlcюk
('tТDние НОВОСтей) NetsQ:ilpe Messenger это более- зрелbjЯ. по сравнению с Кnodе-.
M П. ПОзIlЬ"ЯЮщИЙi.t не ТОЛbi(О "O'fТY ПО
np<Jr'OfCолам РОР3-и IМРЗ, но и H080
769
UNUX, rlOЛно€ руковоД(:тво
Windows. L'nux.Manor Ко..etfТаJЖi\
nparpaMMR
npt,JrpOJ.lM8 тпе ВаН дaBI10 СТМ8 r>yllЬТОiюЙ. е ее раэрэбо-т-
ИКИ. ВИДНО, не спешзт nарпtроВit-Т проrpэмму на nлэт.
ФОРМУ Unux. К СЧ3СТЫQ, мир нео боа добрых nlCЩeЙ:
The Ва!! SY'pheed разраБOТ'iМК Htayul« VэmаmО!Q «Жорее Bcero, японеЦ)
напиcan LinUX-81-tМ0f nporpaMMbI 1'he B.at! пporpSMM&
Syipheed эаС1lyЖИвае'f ОТДМЬнО(О ра;эroвора, поэтому о нe
мы norOB()pM tleMHOfO f1O
np.orpMNlaKMaJI Тоже можеТ выступать в РOl1И ",Н8ЛOl'a
Тhe Ва!! КМаН ДЛЯ пporрзммы The &t!, 110 с: менbUJИМ y<:nnxoм.
чеМ nporpaMMa Sytpheed
Мне ОЧОнto пьнравиnас:ь :)та nPQrpaMlda ПО своим
DownICtader for Х 800МОЖНОСТ0М она ....е уступает НИQДkCl И3
AashGel. Reget. пеисnlЖНЫХ Wlпdоws-проrрамм
Go!:tllla Кge! (МИ Ceitoo Домпьно не"ло заrруNИ;С; ф0ЙllOs
мемеджеры
&в.i<8ЧКИ фаЙ1\ОIl) ДаНt-lЭR щ)оrpамма работае-r в I(OHCQт1, то есть 1-18 имеет
WgSI rpафичооlCOfO "нrврфейса, 110 8О3МОJКНо(""ТИ даннОй
nporpaмМ'bl 3аСЛ'jЖИ'ВЭЮТ уаажения
Teleport Pro Dowt1lощ:1еr fO( Х Проrpаммз Downloader fo, Х может ИCnDЛЬЗО8ЭJЬCJI.как,М'R
(полнаfl эаrру:;»:\'J Qдноrо фаЙJlЭ. 1Эl( '" AМI"K&'tК., цenыx сайтоа
заrрv:жа свАта) Wget ТО же саМоа можНо СJo:эзэтъ М О пPDrPaMMe wgel
1.Gftp Первые Аве лроrpэммы боnее удoбtiы, ПОСI(()nЬКу (Ж
FТP'M'1eHTЫ 1IQЛЯlOh;$I rpaфИ"iескими ПрИЛQЖ&Нт1МИ. Tpe1Ы n;ЮI"рам-
(Su!let Proof F'ТP) 2.ffgp ма пспр работает 8 IiОНСОnИ, но обnадает ДО80ЛЬНО
3.ncftp поле:,нhlЫИФУн.JЩИ.ЯМИ:, мапри.мер. докэ.чка фаЙll8 е случае
pa::\p\>ie0. нeH\.1j:1 \.1ЛИ ЗЗ1Ц)'4k(,t файr.oo по wз6.rtоиу
'.I!cq
2. .aicq
'са, MSN, А!М З.tn«Щ СУЩf!СТВувт MHoro раюоидностей jСQkJ1ИеН1а.
4. Galm B можеre выБРать ОДИI1 a.fЗ НИХ 18 св.ой вкус
5. Simp{e I"stant
mеэsепger
Mlrc (IЯС-kЛиеН'f1 Xhal. Kv\rf;, Ksirc С IAC-миещаМII! :rацс I-II-forдa I-Iе было rsраблеМ......
TO тolit.>'(O три Жtибl;lЛае YAlJ6t1W6 не мой езrnяд IRС.клмен1'8
Обе :пи пPDrpaмMb/ QВ'nЮТСЯ стандартным" и усп"..эвли.
F!rew:tll hanр.и YCТW:looxe It!обоrо дистрибyrи6Э Unux.
(BJack!CE. IptabIes Иr;;ПQ1!iIIЗCI:ать rрафи..есlCИ<'l 060nOЧl(И дпя IptabIes И
ATGuard. илИ' IpchalnS Ipch3:inS p<myflrewall, Firewвfl BU!lder) я не реl(DМендую,
ZoneAJerm) ПОС1(CJlЫСУ ни a ооолочltз не позвоnяет rибко наСТрСЖ1Ъ
flrew;щ
Xtrace!:oute. Прorpэ.МУ "suaIRoute с УСПОМ можно 3аме..п..
V1$I.iIROtrtfj, VlsualRout 1ы пРOfрвммойХ1rасerVlJtс ИЛ"" e reк.стоаой sсрсие"
CyberKit Unшс,lrасеrQutе. IracefQule. Пз1t8Т CyьerKlt МС>ЖКQ заменить наБQРОМ
ping,lcpdt;mp CTaн.д3pтHX проrpэмм traceroUle, plng, nslookup
tcpdump: nOl1Qнная. смесь будет МQщwее. чем CyberКi.t
ФиltЬТРШJ,ИЯ Обе эти nporpaMMbl АDЛЯЮ,СЯ СТiJfщаР,НЬ/f,/М и обладаЮ1
даННЫХ и рDytинr Squid и route stta......tilt\M«) 6W1bWМи IJОЗМОYl(\'\QCrями,
(BlaCkCE, ATGuard.
WinRoule, WinGale) чем их WjndOVr'sаl1ал(:lrи
VenraFax 01.. Эти npDrpc1ммы CMClryт замен\.п.. 3I-1aMH l'IporpaMM)/
Шах VentaFax
Vdialet, E-type Кррр Зеони'tl;o провайдеру unu)( rакжl;I' умеет не самневайтесь,
dla!er (доэвон Gppp 8BдJo U"UX Создан дn". СGТИ, 1(4j( птица ддя "мете
IC nРОО8йдеру) Kintemet
770
Приложение
Windqws Linu..Aнanor Коммеtn8РМЙ
""M.
Зarpyзto:i1Qfiала kpppload Перва пPoii):амма ото6ражает rрафИК з.аrруэки РР'Р'кзна.nа.
1<lsdnloo.(:I а BTQpaQ !\1INM-a ISDN
Wln1 В ОТIINив от WIl16OWS. rдe ДДJlдалеНt1(Jrо адмИНИ(;Трlt
Re1\1ote Aйmlnl'Stmtor з," ptJbaHI1A-Нужно УС:1';!Н8мие;;1ТЬ отделы/у1о nporpaMMY, в Unux
X.termlnal ест.. сrаl'tДЩJ:тн средства. с помощblO которых мо;tC.ЧQ
ynР<tВ1JЯf Удa1lенной маши.нЕ.»1
HY!)erТ.mn",,,, тinlcom Не60IlЬШSЯ пporрамма с 60m.wими 8QЗМО)lGoЮCТStМ14
Работа с фаilпам"
WI.......... Llnux-Анa.nОt KoмtiIp..t\
nporp8MM.
Пporpa,..мэ Mkjnight Соmmaлdеr nOllноетью заменяет
пonуnярН)'Ю проrpзмму NC. Интерфейс прorрзмм
Nar10n Commander, npaKTIlt'tBCKL'I одииаК08bfЙ: МС. как и NC, 06nаДаМ ДВУМЯ
Volcov Commaпder, Midnight панелями си:неrо W1IElT8 и работает з rettTOrsoм ре»:име.
Cornmander Так "'ак МС это фапОf!b(Й Mel-ltUl)l(ер UniJt (unux), то
FAR он обnaдaет сnецифl4'-!ЩЖИЦИ д.nя :пolil ос фyltкщ.utМИ:
l>rюрации с праВами ДOcтyr1, 003ДАI1Иor;l СИМUI)СКЮС
CCblпOl(, noддержка сет", (NFS, F"-P)
Проtраммз 'ме Qt5лада ЩJAИ ф)/НКЦИilМИ ytWэaнliblX
Wjl1d(W,fSnpofpaMM. Правда,." отличив crrW\f1dow$
Midnlghl coтт9nde' мс ра.ба-raет в текстовом режиМе. Хоiй
Commandef ИМдеТCfI IЮЭМQЖНОС1'Ь запуска МС 8 терминале )(: при :ЭТОМ
nporpaMM8 будет реarирое.атъ на со6ыти" )( (налркмер,
WindoW$ щеnчок МЫШI-t на f10nxe к'Qnиро-ваты
Comm'arntcr UnComm3der Vдо()ный ф$VIOl3Ь1'1 МенедЖер. Проrра......адocтynНQ
(101<\1 Сommэndоr) по адРЕЮуtrttР:/twмч.lJ'$Sf.fu/RUSSЗ/Wi/IСmd.tJtml
Прorpамма обпадает YДOCЖblM интерфсом и nредн<lЗНQ+
'нша ДЛ:R работы в КОЕ. nо,ц,д(!"рЖИRaf!Т ра:'mИ'4ные
Kru&ader форматы apn1S0B, 06ла.даеr ВСТРООI1'НЫМIf FТР.Ю'lиентом и
просмаrpщиком rрВфических файлов. Проrрзммз ДОСУУПНEI
по адре!:у httР://krUsader.зo-un::еrorре.nеt/
Прикпадные .. системные nporpaMMbl
WlпdoWв. U"vx.Aнanor КомментариQ
проrpaм...
6лDICНОт kedit. (ledit. хооН Лооая З :);И)I, пpo.rpамм 8 состоянии заменить 6nOl(Hof
Проrрамма Kate nQддерЖиЕЮет 36 рЗЛUЧНЫ:J( КОДИроВQjt
Bred, RраdЗ2. Aditor Ка'" HoAcaeTJI.)' сlrtнтаlClИса Af'IяС,С++, Jav.., P.ascal, РНР. НПAL,
eash "д.рyrи:< ЯЗЫКОВ nроrpI!lММИР()l!а.I"
ПРQrрЭММЫ ПОКа l4e't
nepeaoд<tlitOi OAНOI' о
I!'rOmPl1 норальноrо
персводчи"<!
СЛOQЩЖ Mueler. I\4QV<:1:. Любой из ЭШ); словарей способен змеиитt. Ungvo.
ISocrai. u..gvI'.1j Кsocrat )(О1'й не 06ещэю, -4ТО замена будет раВНQЦеНI1ОЙ
771
UNUX: f10Л,ОО руководство
WlndoWs Unux..Aкaпor КоммантарнА
nporaMM.
RДR for t-Inu:( Вepcl'1A nОПУЛЯРНО'1;) ;apxмвcrropa дlIЯ Unux КОММeн1ёIp+lИ
юrмWНИ
RАR/VJrnRдЯ I1porp.aMMa ВХQДИ'- в COC1na yП.,m.п I<:DE (naКе1 kdev\il)
"'" и nО,адеpжloЮаеТ распрос,-р.аненНЫ8 формвrы ар.ивов
ArI< 8се тот же ArJ<:
WlnZIP Удобный дРХЩlатордпя среды GNOME. Лporрзмму МQЖI-ICJ
GnOZlP ICl:IlfBTh по вдрооу httpI/WМW,geooItiM,CQm/SiliconVajiey/
9157;tlMzlp.html
PGP юр 1m' Uhu)( ПОl1ю;Jй aHaIIor Winао'тН:tерсии
OrWeb, AVP OrWeb 1Ы UЛ!)Х, Проrpaммы ДООТУПНЫ по адресам httР//'oWМI.drweb,r\.lЛщixf
AVP fo, Unux и http:/,М..hW.kaspeisky,ru/. сО:О:тветственЖ)
DТakConf.
UnuXConf
Mscoпflg (BM"",""k.) Думаю. с J:;ОНфиrypaторами пробnему sвc не буде'!"
setup (8 Rad Hat)
"""",.OOI1fig.)OQO(
(В ен В.О)
UЩ ПеРВые два заФЧИf(а Я9Л'J1,ЮТС"" о'fанАщпными. И вы
Sysrem COl'rlfrlaMer, Gtub М<JЖerе иcпoJlЬ30eatЬ J1ю6ой кз HIO: на свои В"УС.
PowвrOuest дSPLoader Третий зто СтВiНДдрn..ый ззrpyзЧИj( ОС дSp Uпux, .э:
8001 Magk:. Acronls OS пщ::nед.нИ'Й э't9 anbrтернетИ8НЫ 'Э8.I'P'fЗ.Ч"'К, АOCТ'j1'\ный
Selector ПО адресу httР://WNW.эсronis.ru/
СПеТЧGР :що.ач РЭ. Тор. Glор, 6еэ IWIIIIМ'eHTa:plol.eв.
t<tQP".
MBMonitot. PCдlert
(измерение ieмn KHeallhCare ПроrpaмМiI не входит 8 СОСТВ8 КОЕ. поэтому ее нужнCJ
pa'ryp "НЗПpl'lЖ8ниА (Дn КОЕ) 3IЦНать сосТtПIтеI1Ы-lO hl1p,//f1Qmepag:oofhWl,'!sseп.del
на матвриНСкОМ ...ho7229jkhea1thcare/main,html
ПЛЭ1е)
Oi.skDrake Пмный эналаr PQ Partitlon Мawо.8хо,д.ит g состаа Мзпdrаkе
11 MandrakentJД06Hbl ДИСТрИ.бyn.\!воа
постаелмся ;t.i icомnкт диае с' дмcrpмбyтиВаи /(oмnaи
PowerQuest Aed На! до версии 9.0. СеЙчас rry пporpaмиу МФkНО наЙТИ
Purtjtion Mglc FIPS в t'lнтepнeтe. но стоит Ш!? Ведь она уже не ра.зе:мвaerся.
ПIUТС»4У nyчtUe-уйтесь.nporpaмм GNU Parted
Оче/'!Ь, l>уДQбнаfl npoM'''3.
GNU Рэrt.d I1porмa дocrynн8 по адресу
http://www.yT1u.-org/$Qftwal'iз/раrt/J*teQ.htmt
5uj{e
Мониторинr Нd!1tйтр.о.з ОЦl.'НkПh patjoту даННЫХ nporpaM C cor
IDEload--tJ.2
S.М.А.R.Т.аtpибутое Ide.SMart. по техничlЭ:(ЖИМ причинам МОЙ вижестер
ВJAнчестера Smaf1sujte2 1 не: о1'носи1сй IC ра.зрму ..ум....ых.. (stt\O.rtl
Smar1montoo1s
Fdisk Fdlsk Практ"чески ждая ос обладает csoим аналorом n.porpaM-
мы fdlsk ОС U"UX не 1!i!\е,.Сй OНko1eM из, npailW\
nроrpзмма fsc,", умеат nposepAТb не ТОЛЬКО файлоаые
Scandisk fsck C-'СТОЦ»l ext2 и еxtЗ. но.и лlOбt.кt дpyrие при НМИ"4ИИ
плэrИr<<I Ф<tймо()Й C1I;;TE"t.l1;o1
772
Приложение
Офисные припоJltения
WI .......
пporp-мм- Unux.Аиапоr Комментарий
Oj:)en Offic:e Дaw1ЫЙ паквт б'УlJfiТ дос.'ТойнОЙ' мменой oфИc.tfOМY стандарту
де.фаlCТD М$ 0Jfice, HatI,e-IOCb, l!Iы у..;е ycnenl1 8 этом
,оод,мы::.
Эrо kомuерческиi1 Ариан, OIJen Qffice. ТОЧНf;/е, Оре"
Office это бесмЭ1ныА еариаН7 Ореn Offic.e. Не э,н8Ю
MSotfIre S1arOmce "!)Чему. НО М+te больше нраВШС Ореп Offic.e. Нет, не
"otoму. чта он беСМЗ:1НЫЙ. а I(aJ;:,ОЙ-ТО более дРуж.ес'tаный
и wмe _ШУСТРЫЙ.
Ciroрее. 8cero. дaHHbiR "вет не сможет Удoe1l9ТООРioПЬ осе
К ОtПсе I!8WIif запросы, осое.ен"о; если вы до зrorо работали с MS
Offlcв
мy GIMP можно с yonexoм использовать а Henpo-
фeCct4oнаnьны)( цom.x 61о11есто ?l1OhQP. Почему", нООРО-
МоЬе Photсstюp GIMP a.nbНыx'? GiMP HeHoro' "npрэМhlеоот'"
1'IP" IЩnнl5p08kе цае-тоВ: и р.ззмеров. поэтому з
nрофессионanой фми ero использование чpesзтu
t10бoitы.uими (VlЛ\'l60tlbUlИМ") неf1ри«fНOCТМи
МСЬе Acraba1 К OfflCe. ТеХ, Мноrие Uпuxмпporpaммы.раоотEUOtЦИe с ДОК)'МI!!НТ3МИ.
LVX.,. uoryt I(()нвeptирosа;ъ их & фйрМI.Н PDF
д.нtf,, nporpaMMI1: {fJ.f!рсия 0,9) поддерживает форма1Ы
-PDF 1,3, '.4 (ДCrobnt 4, 5, COOT&eTCtseHI-Ю). XPdf npиcyroт
Xpdf -ауе.т во все!( ДИС1рИбyrива:.:. поэтому ea.J.4 e придо1"'::fI' ее
МоЬе Acr1 ДОnto cкaтb е Интернет Она уже yc:t8Н09fIв+«i взашей
Reader """'.....
Асn:Юat Re8der Тп уж вообщ61tOМмтrrрии И3J1ИWНИ I(OMffi,1H1МI "дdQb&o
for Unux м-ано ПЫnУ<::lC8еr ВЩ)СИИ дCr(Jb;;tt'Q (Н34И'Н31'1 с версщ 2.0)
дnя unш: и друrи){' Uпbtnl1i.1ТфоРМ
как ВЫ, н.аItЩ')l;iое. $Ноете. «омпа Corel давно аыпyc-rnла
версюо Corel Oraw дп.. U"W<:. Честно rоворя, мне npOfpSMMB
не.-noнpaеotnэсс.. Во.nерзых.. nроrраммз довольно медм3IO-13.
потому <iT() она запускается nО!:рвдстЗQЫ ЭМУflsrтора Wlne
",'ев неЛ!:>:JЯ нaзearьLmu)(.nроrpaммol\" nOJ\НOM CМbiCJ\\9:
Corel Draw :norl) СЛ06з.8Q8fОРЫх., мне Q\leH нв nонраеl.1JЮC:b.ICa"
forUnuJC "poтpaMa работает с рУССJ::ИМ" UlрифТв-t,Щ .pytС1Ш" АЗЫJl;
бо-n-ьUle похож нз lfН'I'ские иеропифы. Причем nроrp.зм",з
f10.o,naeTCA Hacтpot1lt&."OF'lbKO а оnераUYIОннсй СИCfвме Corel
Un... В.Ypef'b.ИX, пpal):laMM;! ","ень не c-табилЫ<it. "СХОДЯ из
Corel DraWI вcero зтоrо, noaEU)llтe мне отрекомендоваТь
вам следующую nporpel:MMY .
Дажа n1Юrр.амме. ВХОДИТ в СОcirЭв nBi':eт8 Оре" Offlce.
Оре" 0n1w ЗО3МQЖНО. ока'неаамЕЖUТ Core Draw поItНОСТЬЮ, однаlФ
$C111ot 8ыбирa1io между СOf61 Dr:aw 10( Unux и Оpen- Оrзw,
fI бы 'Выбрал nocлt):АЩ'1Э>
НемохОЙ8I!КЩЖЫGt peд<I!(rо-р, f1CЯМВШИЙС:Я в; KDE: З.З (ДО
ro t!eЮ'орны poeдi!КТI)jXIМ КОЕ 6ыn К IIJ'Л1rаtоr)
Каrbo<1 ПроrpaН'fllliJ МPOC:tiJ Д;'jже проще, Чet'i 00 DraW. nО;П-ОI1У
рассчеаПfна:'еа. ФУl-fКW10НaJ'IЬнос:тъ. f1PИXOДИft:я. Однако
no"робуйте с nporраМfoIOЙ вдpyr sa,ч понравится
Изда1епb(Жas'CtЮ1'eМi!I ТеХ. рзэрз60таt'tК д. Кнутом.
ЯВnR01"С:Я ЩILlЬ( ЛУ"ших иэдатеflЬ(:kи-..; (:истем.
ТеХ. LateX щ:тценньще')-1едоста'fO" .:ПО Оп.утстиие rpдФ'ЧОО,
I(oro 1N>11ерфейс.. подьзоэатеЛfl. Хотя, ЭТОТ t-tеАОСТi'lТQJ(
раое Mker иноrда перерастает в ДОС1DI-tНс1зо nporpaMMY МQЖНО
И(:nОЛЫJЩ"".Дi),Же. на стареJ1bkИX З8tiх. kOМnЫOTi3paK
ДаннаА npotpaмма обладает инуерф:,ЙСоМ noпьзаD.'l,.еfl,
$cribl.Js СИСТ8М elol цn.cTOM (Color М.аnаgеmелf System).
достаточно удoбffit Е! ис.nОJ\ьзоазнии
i
l'NUX: ПОЛНое РУКО_ОДС1Во
:
W1ndOWs I UПЩС.Aftапоr kОМ"'еwrapид
"Porp......a
О'е,," РОКощ,НДУJQ """""'R НТМI."""""'ТОР. С П<>МОЩыо
КОМflQзеры /of Qu."r"'.... "" ТО"..О OTP"i!""'pyeT. ""'У cr""""чу
HrMl,peдarI)Pbl Quaпta Plus и OiSмt).s""rj Не Dвшем сервере, Н() 'н пРО8еpи-rе
"""""".""''''', а "'<Же со"","'...... н.пис.,и",о <оду
НТМl.craНЩor.
Pa 6ora .l1!><>tpa"Mbl Као,," ООТ.""".,. "'"".,. ЛI"IW",о. К ТОму
"'" KOoI<a .. ''''''.те, OCR, . "'п.<о СК""'рует ДО"УМвнт.
riпe Aadet' Kooka Я бы .... ПО""..,О.." заПУ'''"т. "п. Ае",,", че""" Vm W",e
"л. Wl04U n . Кро... ПРОС..М".. Коо,," ."..тс, П."'р.".....
Gocr, но О.. Ум.., Р"СПО""а..", ""'''''" аиспийск,. т.кст
lп"O,"!I"n · "опl>Oй "ер. не """'иит еа.. 30 М.х. ио "'0""0
30 Ma I'1ПOVaООI1 3о ,<qo 8 Ck;opOM времени, ЭТО СДУЧmся 8
npprpa,..
'nпovalion ЗО МОЖно ДобаaJflo1Ть ПlJarн»i;.t
ACOS ee аоVIew GQVlвw l1Oопу,.,,, "".HO""H"oR """""PI\ ПОПУЛ'''''''У
ПРQCМофщ.,;ку tpaФиеСI(НJi 8 .... ACOSe-е
MS Money GNU"",," НОб"л"",зя ",,"'.a"'MI<8, по"""пяООЩо.ynр..".," с....Ми
ФИнаНсам.,
Финансы без ФИН&Нсы nОР1'l1рО9aIi'DеРсИА "ФИf-lakСОеrt:'д1IЯ LJпш,
без npQOпeц
проблем Mst ипЩf ПроrpэММа ДQcrynN8 Н,а k:QМnd:fr<r.
Не CJJ8ДYeт ltl:fдe1trocя, ';то Anапаз попностыо 3дMeHJ.rт
1 C 6)')(rЛ"&Р"'1} Ananas- 6""""'''1'1<10 от ТС. ПОО;Р.ММУ ''''''''0 с",,,вт. по адрвру
httР:II&аЩt!iJlniJх.ru.пеt/
В Интеpнerе ,ВЬ! HaeTe lie iOm:.kO Э nt "j:iOrpaMMbl, но "
AutoCAD Ю\<10, ОСА1), СОПро"""",,,lOtцyIO "" МКУМ""Т>Ц'Ю """''".Р""eнrи
Varcon.... с ""Мн, ""'МОЖНо, дn. ееб, .'" н-iiдвro дoctyn"YJO За",,",
АщоCAQ
Winda.!II LJ"IIJ{AHanor КoMMeH'rap",,,
nPWp"MMa
Grip пPorpaMMa Grip lЮлe" ф)н"""'онапы;а, ...... AuOloGraь.,. а МРЗ
AUdfoGraber cdda2ww ."""'" 10",0 oбecn...ИII.>er к"'ОСm.и.... """'''''' "Узы,", . Фо"",.",
мрз
Wlr1AMP ХМмв про,р,,,,,,,. хммв .тo "о""",. а"ало, """""'''''''Ы WI"Amp.
XMMS даЖе nOддeaaeT IJltцны W/nAМp
ПРоиrРыеO'frепt> I<sCO Проrра"'М8 8пIJЩястатным прокrРЬ48атепец
AUdJo СО 'Ф'-4пакr 'днсков:В ЦПЦ)(
Windows Medl3 Xine XIne по"".р",.,з"" фо"",.т", ВИД"" МРЕа. МР4, D\lD,
"'ауе, AVt (V,oeQ for Windows)
Nero. Хсdrоаэt Спомощ.ю ЭТИХ про""..", В'" е",о"... зап.,,,,,. Соботв"""ЫR
Eas}' СО Creator КonCd СО. подРобно о "роцесс. З'ПИои СО Вы СМО""те ПРОЧ",.,. .
Cdrecord ЭТой IC;wиrа
ПреО6разовэние dVdrlp ПраrР8ММа пЩ:аCIпRет преО6РВэоаать од..,,., DVDдИШr
DVo 8 DivX е несколько ДИсх08ФОРМ8r<! DiYX
Плаrины Мв 6оауэеры Nе!',,"""IМОlШ./Коnquе,о, об"ада",т 8 C Тl>""HH"""
Aas:h PJaycr Netscape/MoliJ/Sj плаrmtамч ДпЯ пPOCM()tpa Аaзh
Kcmqиeror
МупЬТ"""едиа
'4
п риложение
Wlndows UпuxАнaлor КОММflнтариli\
nporpeMM*
MaetomedlQ GIM? Проrрамма Rrcworks с ycnexQM ;!амени-tся тем же GIMP'OM
Аrewon<s
ДАЯ "por-pаММbt Mai" ЛctОr IWI;JttO СО3ДаН ее полноценный
Maln Actor Main дctor аМалOf" Дnfl UnUK, nparaмMa НичеМ не уступает аналоrичной
forUnux Wlпdows.nроrpэмме. Мбl" Aclor 10r llnux может также
J\OСnУЖИТь заменой nporрамие Windows Movle Мзkсr
nporpaMМbI Xawtv f1porрамм<& Xwatv ВJlяетс'il етандарn-юЙ и обладает боЛЬШИМИ
nроомотра Gпоmв1V ваЗмОЖНОС1ми ПО сравнению с GnomeТV и KwinТV. Xawtv
теneпсреда Kw!nТV рэссма"'РИiЮeтсSl в rnaвe 17 ..Вмдео и l'I>1ДеОмонта'" в UnW<
"!ереэ.1Vоонер
RealPJayer АезlРJeyer l10pтированнай 8Срсиs:l RealPlayCr. СКЭЧЗТЬ МОЖНО здесь:
10fUnUX hПр:/ /scope$.real.c:om/rea1/pfayer!unixjunl:o:.hlml
OuickTime Рlзуе( OuickTime Player f10AНЫЙ эна.лor WIПdCW;S-S:ерсии
для Linux
ДЗнне nporpaMMbl можно. СJ(Q\!.ЭТio по а.щ:юс-ам
SOUnd Foroe Wave Forge. hp:/;WWW.lfm.rojWa"efOrgel и
h1tp:/ /home,sprynet.com/cbagwell!sox.html СОDТ9еТСТЗSННQ
Lam,,:(МРЗ- lame for UnLbt f1oрr"'РОIl:щ.аft евPGИ
К(}ДЩ)
Рааработка nporpaMMHoro обеспечеНИА
WlnclOWI LlnuxAн8llQr kомментарии
nporpaMM8
Oe!phi Kyllx и КYUX Kylix РеП>оЛдl EdtJon ЯSJjяется 6есппатной nporpaMмOO
Personal Edltioo
?aSCaI Freepa1 СэоООднорасnостраняемыPi З2.бит.ый ICОМПWlятор
Freepascal + Motor ЭТО реnaкторсподсеетко cтiT8XC!ollCa, подо6иый
Т\ЛЬоРascаl Motor тому, IФтор.ый исrюnьзуетСя fI средь Turbo РаscэJ,
Motor ДОСТУПОН по csдpecy http://konst,Qrg.ua/motor
Turbo С ОСС + Motor GCC :эrо the GNU С Compi1er
0tЗ Designer .;- В nОЛН croneHIot QtЗ D:g:r есе же заменить С Builder
не может. ..0 tlзnисаlЪН ШD0 при1tОЖ6"ие
e-orland С++ 8uHder KdeveJQp с испоnьзоеанием библиотеки 01, можно
Сodв Forg Среда разраt'.iС11КI-1 nJж.пожении
НЬзsiс Лю6ите1lЯМ 6сика рвкомендую эarПЯнУТь' на странчiК)'
Saslc http/ {hbasic.solJrceforge.ne1/
Sm..ttB8slC Есnи Hbasi<: вам k& поfфaВto'Jтtя. 3аrлян-пе сtOДЗ
http:/ fsmaIIЬзsjс.ourсе-rоrgе.nеt/
ViualProlog GNU Prolotj flpQrpSMUB достvnна ПО адресу
h1tР:/lрзuIIIЗС.lпriВ.Щ"dJazlgnu'prОlоg
Тито ДSsembIer NASM Проrраммз S:О:ОДИ1 е сос:уае мнон\1<; дисrрибyrИЗQ8,
Домашнgq с'раНИl(а I,ttp:/{wwwwcb.sile::..co.vk/nasm
FfQntPage Mozffia Сотрозе' КОМI'Юэер Мохillа ООДD.ерЖ'ивает rринциn WYSIVIYG
J 8uilder J Bui1der 'о, linu>o.: ПортироваННЭ:fI версщ
Hiew Blew nрorрзмt.tз доcтynнэ па э.npесу t,ltp://biew,saurcefarge.nelj
?н? РНР tor ипих ВХClДИТ EJ CI)(:ТaB f1юбоrо дисr!)ибyrинз
775
LINUX: "олное р)КО80ЦСТ80
СУ6Д
WIndows- ..
nporpaMM8 UrшХ,оr КОММ8нтериА ,
Ореп Offiсе 1 Ореп ;Offlc:e МожнС ИСПOJ1Ь3CtВЭТЬ В КачеСТве rрафичеci:oro
MySOL И"Н'"'Р Дm:I C6Д М)I$Qt..Поnyч(Wl-I8Я Сf.lесl:> буДfi<1'
бonее. ощН3st. 'iБМ дc.ces!";
аавм ВoзtoIQЖНО. 8 ващем дистриС)ут..,ае б)'дет СУБД GOBM
MS Access ЗмеИЯ1)о_Досess- t."'YSД от 18М 3ТD все равно, что с
по eopOtМ!M ИТЪ. НО !lceTaкH. ISM О82 06nадает
!ВМ DB2 for Unu)( yдotjH_MM. нanиСанЫМ ка,,J<:wiэ. ЕДИI-ЮТВЕ'!НИblЙ
HeдoToК rpвcKa версия Кла-. u О1'nчие
ОТ текстОвQtSl"притормвоот саается
lфоссмarфo:рмеН"1ОСТЬ
InlerBas.e SeМ" lnterВaSe Sefver Портироl:Шttная зерс
torUnu:r:
IBM DВ2 IBM ОВ2 fklртроsaнЖilЯ СИЯ. Версия.цnя Unux. UК" дnA WJndows.
.-, .... ш..w .._._'W . f, , . .""."..,.."",.-.......-..
8от lIiieМНQrQ CQМIЩJ3IIЮb.. ((:D1!',Шt nporpa.мa 6wrщ
MySQL РiЩ)Qооrat1а,р8ИblOO: W\'И Win. IФ был
MySOL fOf Windows for' Llnux nOPnCPOаана на Unux. иnи наобороТ, лично А оначапа ytlИДeЛ
UПUICВej:ЮйIo, а nofОМ у* 8еpcи'lO.дnя Windows. 8 fflOбoм
случае замена есть
Qrэсlе OracJe 10r Linux В.ерс:ИR дnя-Unuх. kЗК и ДflA wmd0W5. пnэтная
Математические пакеты
Wlndawэ UfJU}(Аt"'лоr КоМмtDПарd
*,pOfp8MMa
Mapio МаР\е: fur UIiUX Сущзст\\уеr перс м.apl0 Ад'?! u"ux
MathCAD G.P ПО своим ФУНlщи9tМ. nporpa"""raGap npиб"ИХi!tПС
n9f\VЛ9РНо.мv "",а.теме:fиеском;у п,iJ;t::етv
PeдaКfDp Формул 00 Malh 00 Math В:tОДИТ а OOCТiiS оФиСtfClrо макета Орем Offlce
РтЬ""ШIy and проrрщ4мtt Aa:Cfyr1HS по адресу
St3tl$tlcS Utllltles
for Unllx u&вrs httР;!/ШN(.gщlсltles.со r n/SiIIСОI1Vеrlev/NеtwoflЧб885/
$tatl"tlca
Я, конечНО,',Дllllе«: ОТ IЩПРОСQ& математической стэ.т,
Gnumeric но мне nO«a3W1oc.., чТо проrpaмма Gnl,Jmetlc смо*е... noмочt..
решить эада'tИ S этой области
П6
ПРИfюжеНIЛе
Mi-!w
Wlndowa . '( :-,,!..,.
nfМЩI8ММ8 Unuх.Aнa.nor. . ...... нтарlltй
Ouake 1, 2, 3 OUD:ke 1,2.3 ПUРlиWi.pr.:иидnЯ,ра60fЫ этих ВЩJСИ НУЖНbl
for Unux неj(ое,е:рсии
'-"ОООМ, ПрorpttММ:w',I{,Щl. ,аДре сэм
DOQМ DOOМ сеое<>у ttp://IX<IOom.lI..."""""
UP:lldoom.пetl
COunterStrike cs Unux Прошу ИНEI; ,''!,;rlo1Тenb мrр,l'\OЭl'm.ty оценИТЬ.
nрorРЭ:М!'IIYtteСМor'
Retum 10 Castle Aerum to Cast!e Портиро;.:e-n МОЖНО прооЩтаТЬ.
Woifen$te$n WoIfoosteln здесь
Д!Иt, Unux htt'P://WWW.attМЫOn;cqipjOiJs{Wotfenstein
Urban Теrror UtbS:n iепоt nOр'fирООаНtЧUl'''',:,r,:,.
дпя UnuK
Unreal Toиmament Unreat
2{)ОЗ Tcurnatnen1 Порrnроеанliая sеpcюt
2003 fQr Unux
CMllzaIion FreeCiv ДоеО1JЫЮ неПIlФеаЯ иrpywка, O"IeHb похожая на СМ1Jzаt!on
StarCratt FreeCraft Сi<aчать можно эдесъ t1ttp://frее<:rзft.оra/
СтэttДaPТНblв и."...КDЕ Эт.. иrpы nOНpa&sUСЯЛIO&tte1l'AМ н.йб01lЬШи)( иrpyt11etc:,
иrpы Windows (пЗJCeТ nомorающих ..убить" МЯ
kdegomes)
Эмулятор sony
P1ayStotlon еР$Хе for U"ux ПЩnИiIOВtlННU версий
(ePSXe forWlndoМl
7п
LINUX-
сервер
своими
руками
ISBN: 5-94387-103-9
Размер: 165х235
Объем: 752 С.: ил.
Д.Н.Колисниченко
.
Издание З-е, переработанное и дополненное
Вы держите в руках третье издвние книrи, ставшей бестселлером в своей
области. В ней вы найдете подробное описание настроек сетевых сервисов,
позволяющих на основе ОС Linux создать сервер требуемой конфиrypации и
функциональности. Узнаете, как должен бын.орrанизован Uпuх-сервердля вы-
rюлнения тех ипи иных задач. Ознакомитееь с практическими примерамина-
стройки. Научитесь администрировать Unux. Блаrодаря этой книrе вь, сможете
настроить сервер любоrо типа: от сервера локальной сети до Интернет-еерве-
ра и сервера yAaneHHoro доступа.
Во третьем издании книrа была HeMHoro дополнена и существенно обновле-
на (в соответствии с появлением новых дистрибутивов Mandrake. Fedora Сorе).
Более широко стало рассмотрено создание Uпuх-сервера для Wiпdоws-сетей.
Книrа подойдет как Щ1Я профессиональнык, так и Щ1Я начинающих админист-
раторов, поскольку изложение материала начинается с установки ОС Unux, а в
первой rлаве дано описание основных сетевых технолоrий и протоколов (курс
молодоrо администратора).
в одном из множества блаrодарных отзывов по первому изданию rоаорится;
.Наконец-то нашел <нш'у, в которой все понятно и толково описано". И ЭТИМИ
словами можно выразить общее мнение читателей о ней. Так что если вам нуж-
но настроить сервер на основе Linux. узнать ero внутренний мир эта книrа
для вас.
серия CeepМN .-Yvt#U>iiielи серия
Издательство .Наука и Техника-
Д,Н.Колисниченко
Самоучитель
LINUX.
Установка,
настройка,
использование
L - CAМO'i'&l1tJ!Ь
' , .. . .... I ' O .' U ' . . ' , " ,
", ..," - . ;.-, , ,,-,.
., '., ','. ...
... .... ,- ,
.:,.!..'.,:Ю ,.'!".
[4<
: ,::= :'."'" 1 ',f1!Л:
,...""'''' .],.
: . ;;.... . ,. z'J:? W :.. . ... "' , м'". , '''
:Шf::-:' ,:,!;!;!8
.' "'.,.'.
''''""1Ii!II
:',---', '-',':',.
- 11.' .........-
................................".,.,..
ISBN: 5.94387.193.4
Р.эмер: 165.235
Объем: 688с.: ил.
.
Издание 4e, переработанное и дополненное
Данная книrа является caMblM полным руководством пользователя linux.
Предназначена для всех, кто хочет зффективно испоnьзовать у себя на компью-
тере эту систему. Изложение материала проис)(одит последоватеnьно, начиная
с этапа установки и заканчивая специальными технолоrиями Unux. Подробно
описаны внутреннее устройство Linux, настройка оборудования и оптимизация
системы. Обсуждаются возможные проблемы. Особое внимание уделено за.
щите и Восстановлению Unux после сбоев.
В ХНl1се детально рассмотрен весЬ крус задаЧ, который маЖеТ СТОАТЬ пе
ред поnьзователем: от редактирования текста, работы в Интернет и запуска
Windows-l1rp, до компилирования ядра, администрирования сиотемы И запиои
компактдИСКОВ. Учитываются особенности разных дистрибутивов. Подробно
описаны мультимедиа-инструменты Linux: фотомонтаж, просмотр и редакти-
рование ВИдео, настройка ТV-тюнера. обработка звука и MHoroe друrое, Рас-
смотрено множеспю nporpaMM и приложений под Linux: OpenOffice, KOffice,
The G;mp, MainActor, WtneX, VMWare, lзп ВШiпg и Т.д.
Автор книrи ОПЫТНblЙ И известный консультант по исполЬЗованию Unux.
Книrа написана простым и понятныM языком. Лучший выбор для начинающих
линуксоидов.
серия 1.'!I.m z Q'IIO;"I.1JJ ........ серия
ИздателJoотао -Наука и ТеХНика»
М.В. Юдин,
А.В. Куприянова
Самоучитель
раБОТbI на
НОУТБУКЕ
i"' W .10 "."....
I"ПI'I<.
.
-....,.........,.... ''''''*
"."'Н . ....
' . :. . . . ':,:&!':;
--..":I.::.:;.,: ""--"t'_,i
';i' ... ';ii/J
... .......'"..
.G;:\IL"'-'" I '::','I""J::',
.
,
ISBN: 5-94387-241-1)
Размер: 165х235
Об....М: 5120.: \\11" Ца. аклеi\ки
Издание 2-е, стереотипное
Эта книrа позволяет освоить работу на ноутбуке -с нуля-, даже без каких-
либо предварителы{ых компьютерных навыков. Начинается изложение с де.
тальных правил пользования ноутбуком, правильноrо ухода за ним, а также
общеrо описания есо внутреннесо и внешнеrо устройства. Далее приводится
описание стандартных компьютерных технолоrий (Windows ХР, Word, Ехсе!, Ин-
тернет, Электронная почта) с учетом особенностей работы На ноутбуке.
"Изюминкой. КНиrи являются следующие разделы; подключение ноутбука
к телевизору и использование есо в качестве универсальнorо СD/DVD-плеерв,
домашний кинотеатр на базе ноутбука, сотовый телефон + ноутбук = МQбильный
Интернет (как подключить к ноутбу!<у СОТОВый телефон И настроить выход в Ин-
тернет через Hero (настройка GРRS-соединения), цифровая фотостудия на ос-
нове ноутбука (подключение цифровоrофотоаппаР!iта и раб(па с ЦИФРОВЫМИ
фотоrрафиями), контроль и правильная эксплуатация аккумуляторных батарей
ноутбука, а также мносов друсов.
Книrа написана простым и доступным ЯЗЫКОМ. Содержит множество наrляд'
ных иллюстраций. Лучший выбор для наЧ>lнающих.
с<;рия \II.I Ш rW.liЙi'.]Wj с<;рия
Книrи ПОЧТОЙ
Издательство «Наука И Техника» принимает заказы на продажу
собственной печатной продукции по почте ,;аложенным платежом.
Оплата ПрОИ380ДИТСR На почте при получении КНr. для орrанизаций
вОзМоЖНа ОМа1'8 ПО безНаличНОМУ раСЧеТУ noclle выставлени счета.
Для этоrо Вам необходимо оформить бланк заказа и отправить ero нам.
Для жителей России:
193029 CaHICf-Петербуpr, ajR 44,
000 .Наука и Техника-
ТeJI/фа,с (812)-567-70-26, 567-70-25
Е.та": пit@mаif.wplus,пеt
Для жителей Украи"ы:
02166 Киев-166, YII. Курчатоsа, 9/21.
«Наука и Техtiиt(
тел/Фа,,, (044)-516.38-66
Ernajl; nrts@voJiacabIe.com
Перечень рассылаемых книr размещен на
сайте издательства: www.nit.com.ru
s
L-.
О
;;2
.q
:I;
'"
;2
.q
'"
Ж..тел.. УкраИНl>lIllОryт прнобресТlf КНИrн дРуrюt ИЭД4тenьств:
РадиоэneКТРОНИ!l:8.. ....."'._..... .... .......... _,_........ ........... ...... ....... о.. ,... ... Н.. ....... ........ .,.... I
Компьютерные ТElхнолоrии.., .... .... ... _,....,..... .. ".... .... ...... ........ ...... ... .... ........... I
Технмка безопасности на предприятх .ш... ...... ,.... ... .....,........................,.............. !
Транспорт .......... ............ ........, ,........ .......,......................... ... .............. .......... .... ... ...,... !
ПОММ8чание.. 3af(8ЗаННbJQ бесплатнЫе хат;иоrи еысылаютCfI по аЛlJКТfJOffн-тf noчтe или
ВКIШДblваюТСЯ В посылКу с книrвмм (отделюо пHcЬNoM nnUrol1f Не расс""Лаюn:,,).
Запо.т'4JlТВ I'ЮJIЯ fll<rypsтнo большими отдвлblofЫМИ б"УJ-:8.EilМН.
Информац".дn. лрИ06ре....Ни. I<Ниr почтой часТНЫ"'И ЛИЦ.МИ
1. ФаМI>IЛИЯ, имя. O1'jecТ!lO
2. Почтовый адрес: индек" странв
область ropoA, посеЛок
УШ1ца дом
телефон ( )
адрес злектронной почты (<!сли ОН У Вас есть) : E-mвlI:
корпус
кв.
ИнформаЦIffI дn.выaraaлeния счета орrан"эациям
Название ИНН
Телефон/факс (
Контактное лицо
Адрес дпя отлраВkИ заказа: индекс страна
область ropoA, поселок
улица
адрес злек.ранной ПО'/ТЫ (если ОН у Вас есть) : E-mail:
. ДОМ
6ЛАНКЭАКАЗА
(принимаются ксеp.Jj(ОПИИ)
Аатор... ..... о., ,', aн........ ........,............, .....,. .......,..... .,... ,..........,.. ц.... .....ц.... ,......raд....... OCh.8M
Pt'юiO" vip....
t....J ......)
...
I.I
Серия: Компьютерная wnapranKa
Erop08.c .... ..мн"'ж:ептысrрзlfflцы ИНfСРI-l91; l(ом"blOТРНая шnарr4Лk8 ..16 .....,.. 4....,.... 20<)6....." 80....
EropoB .'0 ..,.,..ПtlиСКtt ИН1'ерN€i't. КoMnыo't(.'pHA UJrnфrМка............,..",....,....16 .......... 4.......... 200б.......8О....
ЗШЮlщmва .. . , ЭJ\e"'ро.t\оочr8. К{lМПыО1ер"аwlуфrвJn;а..,.. .......16 .....4 . 20(}6..,.. .. 80..
KpпOCКl)8_. c,.MiCIOQf(WrIOOIl'o"$XP; Кl)МfI"l()lиWlяцJпарrltJl«:а.,,__.>.. .16 _. ._. 4._,_._ 200fk...., 80...
Кузнецова .... ... МlcrоsоftWurd:200З: раОC'l1а8М С reJI,)_
КОМf1ыаrернзл Шl'U1рraJIlCа .,..."....",.,.,;....,.....,..,.".".,.,,,............ 16' ...,.",.. 4..""...2006,.. ,80..
,..,....8bI"llo1cnвtlstn ир3dфJыi Ехсв:юоз;'КоМf1.IiIПi!llр"iUlU ... ,......16 ,.ш.., 4.. .,...., 2006.... ., 80.
"Microsofl !:.кct'12ООЭ: pa{joТ;йе.... 1aбl1ЦI1М",
КОМllыс:пеРI16я:щпаprМJ(D 'ш', ..............,.......
.....,
MiH'!!ee8
IOДШ4.. .
."." 16. ......., 4.... ..., 2006...... 80.".
Серия: Просто о СIIОЖНОМ
Дrlе-rul\О{\ .,....,ПроrPJ;'lММ<>Нll1реll.Oд'4и!L"'.(kElаиliМс(l.МI/j. ...54 ,,,..,,.12 . ,..,2005...,.., 144,,, .....
Д;ПQ"Н"Q. ",,"ТQJ\CТbIЙС'$моУчи...еЯ"'р3ботl:,l,li<If.омпыо'feре .",......,. ....13\....'...'; 29.'......2005.. 544.., ,.....
Bupol')ьee. ,.. ..шNеl'о Buruing ROМ.Зa.n!otСЫ8аеМ СDи,.."...........................54 ..ш..... 10.......'2005 192... .
rflраС:ИМОR.. .. .. AuloCAD2002. ПСnYАRРНыPi C8M0V4l'itB1Jb..."........, ".... .........., 135 ш...29 ......2004... 496..
rл<!оеl41;Jil ...,4SлучщихrJpQrIIOММДlJJlШJ:Щ., Of1щt,. r>6ребщ'ксt>и DVD.. 14Э,..v,... 32".....2005. 368
Дмi4tриее,. . .,н..сtроClки ВIOS.Иэд.'2..е .."....."..........""....,..... '.........."76 ........ 17 ..'...2005..... 288...
Ж1Ц)kOВ. ,AI.tGCAD2004. $фф1М8Щ>lЙ("..!tМОV1Иreль, Изд. 2e.......,.......I64 ....., 37 ...,...200S.. 560... ..
Жарk06 AutoCAD2005: ЭФФеi1.rИИI1ЫЙ се.Моуо.щtепЬ........,... ,...., .173"..."..39.,...... 200$..., 600...
КDлl'lси4еl--lкО.. "Сnмоучи-тещ,РНР 5_2е.",3ДЯi!'о\0...,.... ......."'"........ ,. ...169 ф'" З8 .... ,2006... 576
КОЛI'IС:.НИЧВН'I::О ..,Самоучитель lINUX. Уст,II'ЮВt(3, HC1p., ",сщ"ЛЬЗ. 4в И, , . :юов.... б86..
KOJ\C+f'1B"'I:() .СДЕ>;1JЭo"саМ ко....n.С01ь., NlОrr1u,Нi1Cfройц.о6служ....... 127 ..... 28 ..2004.....'.400
КоJЮСltов .,Wlndows хР. nопVJ1Яf.ЖЫЙ caMO'ffj-пеп... 2efj3J.1.nepep. 04 доп, ..100 ".... 24 ...... 200S...... 368 '" .....".
КУ3Ij(Щоflа. ......"усtаН(IКаиnуо:tан(Jl!WiI1d0W$.4uиlJД.,.,...,"'............ш...4з ..,..,.10 ......2006".....128
I(v-эlецОО;3. . .MiclosoftWndo'{fflxt:1 Краткое P'f';Q\idДC180 ....1)3......"..14........2005'''....256
M..pelli.. ...........,.Accep на Mцpax. б.!iэ-оыАкУРс ..................... ..........109........ 24.'....'.2005.....'. 240.
Мснвееов.,. ,СаМите-дъмs.Win)(Р.&еоб.иl::Щстр.4-е.ol3Д...,."'. '....2006.......62.4." .""..,.,.,
Птри,,()в. ...ТУр60п/К;r.nлЬ1.аМН(lприpwl.J1I3p..;l.е...... ш...'f09 ...т22 .....,2004.......3t58.............. 1
ПОДОЛЬСk1'IЙ. .... .n'larb/ia ПК!::l1епЫМIWCJПО!f1алЬЦf!8ЫМI!'Н?ДФ.t. 3nиад .....2005.......96....' .......... :
пooмpe6... .....СаЩ)У'ТелЬР8&'fыjJ'КQМI1ЬК)'fеpQ.+ц-.l(и ..106 ..... 24 ......2005....,. 368............. '
СеРClrодCЮ-tfl 8<cej 2О0Э+ цв..кпeйlcи, ЭффеКf.,ВНЬЫ самоучиt'<е'IIЬ....,....,...147 "",.33 ....2005.....,.400... ".........
<''ух.В!)е6",. ..,.. .,.TuboPв9C;;!;17.0. 'twptAЯIolf1.рз.:t\;l,К<1пр1.)('Р\1МW1р.2.(j иМ......,.1бs ...34 ......2004..'..'.640
Ю.пl<l"" ,.СамоучителЬ раБОl"Ы на IЮyr6yц-l. 2--е ЗД +ца.-инtЙкм ....115 .'__....39 ''''''. 2005...... 512 , .
СеРИА: Секреты маСТерства
КОJ1I1t:1/114I3НIФ ,..unu)(.t;:pBep t:80loIuМ Pl'CaMI'I. З.@ЮЩ, перер. ИДОl10пlюнное .202 ......45 ,..... ,. ... 752 ...
МQЭfОI.!ОЙ . Кла.с<::1UI nporpaMM-II!РОНИR; алrоfWIJЦI.I. И, .автоматы,
\uш.u!я'tоры пРЗJ(1I14Е1с..иflI1OJ]1C;ОД ......,..........,......,..."...... 164......... Т1.".....2ООб"."... 320...
.....,осНояы DelpI1i. Профессloiоtoatll>Ныйп",t1Код............. ....184 ..... 37 ......2004.......600,.,
....,....иt4fщ:те:1,шМ610ро.й:ottI01Jt.ЭO.&а1;.пpoфet:(;ИОиа...сD ,.аз ...."'..11 ,..,2002,...... 7138,..
..НОУfбyt::: особв.ниооти >11';0011 И HВC1pofit:ioI+ ЦlJ.UJNI"ки .,.184 ,...,..,,31 ,,,,,,2005,",,. 3&4..,
СумаРОе...
ФI'IН';О8т..
IOДH
Серии: Профи И др.
В(lбср........... ".K1\OW1eage.-tеМ.,с)lЮf1,ивlЖсamVl'еиynрз:м.пIIOд'1Р.+СО 127 ".... 18
rYfH'etlMU!' ..... ..Мул..fl1сер8«CtlbIf!сетм'" y<:l\yn1 U104PQI(OnOlVX:нorOAocтyM \09 .,..' 1&
Еt:иf106 ..ИНфоРМi;!l';tК/!;(V'It1б"t:'.з-еl'lэД.. 102 ",ш" 21
КуrфИl1на!;l . T"'X:HI1'--1(;iOCIеоб(ЮЦl1фро!юЙ06р"оо'rf(ИсиrrINJОfJ; ,....,М ,12
Ку4Щ)(1S« .,ИсfI)'4НЩ(ИП"IЩjиПКипериферии.Зеизд ,1-4;! .,32
К)черI'lВIЙ. .,...Пз",аятьсвqзи06ЩеrС}lТоnьэооеiIИЦ 13-2 ...27
Кучерявый ,... ....., Ynpas/I. rрафиком и l(аЧftG'EI 06слvжи&&IoI сеrи Иr0РI;0Т .... 128 .,... 29
НИ1<ЗМVщ ...,Uифроаая 3Sy!(ОЗSI1ИСЬ. rехноло" и.стзl-1ДаРТЫ .,..... ......76 ........" 12
щпюе.. ...з3щипн:пМr. \l\IIфйРМiЩ'о\\.'IОt щ>саН1Щ1IИ)11"р.ДOCfyrI3 ..... ....164 ",,,.20
,....2ООЗ..,__ 176...
....., 2003....".400...
..... 2003'...... 400 ...
.2О!Ют.... 752.,
2005.ш ,,432..
. .2004.......272..
2004.......336... 'О..
,.....20О2..,ш.256
..".2004-....... 364-.
"""'''':
ч<--<........ ,
,
,
::<