В этой лекции
С широким распространением операционной системы Linux системные администраторы опробовали различные ее конфигурации для выполнения определенных задач. Хотя многие системные администраторы используют ОС Linux в качестве альтернативы операционным системам Microsoft Windows на рабочих станциях, весь спектр возможностей ОС Linux раскрывается при выполнении именно серверных задач.
Для того чтобы использовать сервер на базе ОС Linux в качестве сервера электронной почты, для начала вам следует получить некоторые базовые знания о работе этой операционной системы. Итак, операционная система Linux развивается на протяжении уже нескольких лет. В каждой новой версии появляются дополнительные возможности. В этой лекции мы не намерены обучать вас работе с операционной системой Linux. В ней лишь описывается несколько функций ОС Linux, и системный администратор, имеющий представление о работе этой ОС, сможет соответствующим образом настроить программное обеспечение для поддержки работы сервера электронной почты.
Вообще, термин операционная система Linux не вполне корректен. Стандартную ОС Linux составляют несколько различных модулей и частей. Сердцем операционной системы является ядро. Ядро для ОС Linux создано и поддерживается по сей день Линусом Торвальдсом (Linus Torvalds). Само по себе ядро не может быть сколько-нибудь полезным. Чтобы операционная система нормально функционировала, в ней должны быть приложения и возможность их запуска. К счастью для Линуса, проект GNU в то время уже существовал.
Цель проекта GNU (аббревиатура GNU
раскрывается рекурсивно "GNU's Not Unix") —
создание
Ядро операционной системы —
это ее сердце. Ядро должно управлять всеми
устройствами и программами в системе,
распределяя аппаратные ресурсы и запуская
программы по мере надобности. В ядро Linux
перешли многие идеи и функциональность
системы UNIX. Линус Торвальдс отмечает, что к
созданию ядра Linux его привело изучение
операционной системы
Ядро ОС UNIX содержит функции управления разнообразными устройствами и программами в компьютерной системе. За управление памятью, управление программным обеспечением, управление устройствами системы и за управление файловой системой отвечает главным образом ядро. Ниже мы более подробно рассмотрим все эти функции.
Одной из важнейших функций ядра
операционной системы является управление
памятью. Ядро управляет не только
физической памятью, имеющейся в ПК, оно
способно также создавать и управлять виртуальной памятью, которая
физически не существует. Ядро формирует эту
память, используя пространство на жестком
диске (называемое пространством подкачки (swap space) ). При этом память
подкачки на жестком диске компьютера ведет
непосредственный обмен данными с
физической памятью. Это заставляет систему
"думать", что в ней имеется больше
доступной памяти, чем физически существует.
При этом разделители памяти группируются в
блоки, называемые страницами.
Каждая страница памяти расположена либо в
физической памяти, либо в области подкачки.
Ядро ведет специальную таблицу размещения
страниц памяти, где точно указывается
местонахождение всех страниц памяти.
Те области памяти, доступ к которым определенное время не предоставлялся, копируются ядром в область подкачки жесткого диска. Когда какая-либо программа запрашивает доступ к странице памяти, которая была помещена в область подкачки, ядру придется удалить из этой области содержащуюся там страницу и поместить туда страницу, запрашиваемую программой.
Чтобы использовать виртуальную
память, сначала создайте область подкачки
на жестком диске. Довольно часто эту
процедуру можно выполнить во время
инсталляции системы. Для разметки разделов
на жестком диске используется команда fdisk.
Формат команды fdisk следующий
fdisk [option] [device],
где device
— это жесткий диск, на котором производится
разметка. В ОС Linux для обозначения жестких
дисков используются стандартные имена. В
табл. 2.1 показаны стандартные
обозначения жестких дисков в системе Linux.
| Устройство | Описание |
|---|---|
| /dev/hd [a-h] | дисковые устройства IDE |
| /dev/sd [a-p] | дисковые устройства SCSI |
| /dev/ed [a--d] | дисковые устройства |
| /dev/xd [ab] | дисковые устройства XT |
Первый доступный диск
определенного типа обозначается как диск a,
второй — b и
так далее. В листинге 2.1 показан пример
организации разделов в ОС Linux.
1 [root@shadrach root]# /sbin/fdisk /dev/sda 2 3 Command (m for help): p 4 5 Disk /dev/sda: 64 heads, 32 sectors, 521 cylinders 6 Units = cylinders of 2048 * 512 bytes 7 8 Device Boot Start End Blocks Id System 9 /dev/sda1 460 471024 83 Linux native 10 /dev/sda2 461 521 62464 5 Extended 11 /dev/sda5 461 521 62448 82 Linux swap 12 13 Command (m for help): q 14 (root@shadrach root]#
В строке 1 запущена команда fdisk
для первого SCSI-диска в системе: /dev/sda.
Программа fdisk является
интерактивным средством, которое позволяет
системному администратору управлять
таблицей разметки жесткого диска. В строке 3
показана команда, применяемая для
отображения текущей таблицы разметки
разделов жесткого диска. С 5-й по 11-ю строки
показана информация, содержащаяся в самой
таблице разделов жесткого диска. В строке 11
показан размер раздела подкачки в Linux.
После того как область подкачки
на жестком диске была создана, ядро Linux
должно "узнать" о ее существовании и
активировать ее. Для активизации процесса
подкачки страниц памяти применяется
программа swapon.
Командой swapon
устанавливаются параметры виртуальной
памяти в ядре. Однако вся эта информация
теряется при перезагрузке Linux-сервера. Это
означает, что команду swapon
следует выполнять каждый раз при загрузке
системы. В большинстве версий Linux команда swapon
включена в сценарий начальной загрузки и
выполняется автоматически при загрузке
системы.
Текущая информация о состоянии
виртуальной памяти в системе Linux может быть
получена из файла /proc/meminfo.
В листинге 2.2 показан пример содержимого
файла /proc/meminfo.
1 [root@shadrach /proc]# cat meminfo 2 total: used: free: shared: buffers: cached: 3 Mem:31535104 29708288 1826816 31817728 3051520 15773696 4 Swap: 63942656 2838528 61104128 5 MemTotal: 30796 kB 6 MemFree: 1784 kB 7 MemShared: 31072 kB 8 Buffers: 2980 kB 9 Cached: 15404 kB 10 SwapTotal: 62444 kB 11 SwapFree: 59672 kB 12 [root@shadrach /proc]#
В строке 1 показана команда для
просмотра файла /proc/meminfo.
Строки со 2-й по 11-ю отображают содержимое
файла meminfo. Из
строки 3 можно сделать заключение о том, что
данный сервер имеет 32 Мбайт физической
памяти. Также, как мы видим, примерно 18 Мбайт
из нее в настоящий момент не используется.
Из строки 4 видно, что в системе имеется 64
Мбайт доступного для подкачки пространства.
Это подтверждает показания 11-й строки
листинга 2.1, которая также указывает на
наличие раздела размером 64 Мбайт для
подкачки (свопинга) на диске /dev/sda.
По умолчанию каждый процесс в ОС
Linux имеет отдельную область памяти. То есть
процесс не может получить доступ к области
памяти, принадлежащей другому процессу.
Кроме того, процессы не имеют доступа и к
памяти, занятой процессами ядра системы.
Для облегчения задачи совместного доступа
к данным в памяти могут создаваться
совместно используемые сегменты памяти. К
областям памяти с совместным доступам
могут обращаться несколько ipcs.
В листинге 2.3 показаны результаты
работы команды ipcs.
1 [root@shadrach /proc]# ipcs -m 2 3 ------ Shared Memory Segments ------- 4 key shmid owner perms bytes nattch status 5 0x00000000 0 rich 600 52228 6 dest 6 0x395ec51c 1 oracle 640 5787648 6 7 8[root@shadrach /proc]#
В строке 1 вводится команда ipcs
с параметром -m
для отображения только совместно
используемых сегментов. В строках 3–6
показаны результаты выполнения этой
команды. Каждый совместно используемый
сегмент памяти имеет своего владельца.
Кроме того, каждый сегмент имеет также
стандартное для UNIX разграничение прав
доступа, которое определяет его
взаимоотношения с другими пользователями.
Ключевым параметром при этом выступает
разрешение другим пользователям на доступ
к совместно используемому сегменту памяти.
Операционная система Linux
обрабатывает программы как процессы.
Управлением процессами занимается ядро
системы. Ядром создается первый процесс
системы init,
который затем запускает остальные процессы
в системе. При запуске ядра процесс init
загружается в виртуальную память системы.
Далее каждому запускающемуся процессу
выделяется область виртуальной памяти для
хранения данных и кода, который будет
выполняться системой.
После запуска процесс init
считывает файл /etc/inittab,
чтобы определить какие еще процессы
следует запустить в системе. В операционной
системе Linux применяется система init
с различными уровнями запуска (run levels).
Уровень запуска может указывать процессу init запускать только определенные типы
процессов. В ОС Linux существует пять уровней
запуска init.
На уровне запуска 1 могут
выполняться только основные системные
процессы вместе с одним терминальным
процессом, поддерживающим одну консоль.
Такой режим работы называется однопользовательским (single-user mode). Однопользовательский
режим в основном используется при
обслуживании файловой системы сервера.
Стандартный уровень запуска init —
3. На этом уровне запуска выполняется
большинство прикладных программ, в
частности программы обслуживания сети. Еще
один часто используемый уровень запуска в
ОС Linux — 5. На этом уровне выполняется
работа с графической оболочкой X Window.
Обратите внимание, как с помощью уровней
запуска система Linux управляет
функционированием всего ПК. Изменяя
уровень запуска процессов с 3-го по 5-й,
система Linux совершает переход от работы с
консолями к работе в графическом режиме с
помощью оболочки X Window.
Для отображения состояния
текущих процессов в ОС Linux применяется
команда ps. Формат
команды:
ps [options],
где в качестве options
могут выступать различные опции, в
зависимости от которых видоизменяются
параметры вывода результатов работы
команды. В табл. 2.2 представлены все
доступные опции (иногда их называют ключами)
команды ps.
| Опция | Описание |
|---|---|
l |
Вывод результата в длинном формате |
u |
Вывод в пользовательском формате (показывает имя пользователя и время запуска) |
j |
Вывод результата в рабочем формате (показывает идентификаторы GID и SID процесса) |
s |
Вывод результата в сигнальном формате |
v |
Вывод результата в vm -формате |
m |
Отображает состояние памяти |
f |
Использует для вывода -формат (показывает процессы в виде дерева) |
a |
Показывает процессы других пользователей |
x |
Показывает процессы, не отображая |
S |
Показывает дочерний CPU, а также время и страницу сбоев |
c |
Название команды для task_struct |
e |
Показывает состояние после командной строки и а+ |
w |
Выводит результат в расширенном формате |
h |
Не выводит заголовок |
r |
Показывает только запущенные процессы |
n |
Показывает числовой вывод для USER и WCHAN |
txx |
Показывает процессы, управляемые терминалом ttyxx |
O |
Сортирует вывод процессов по ключам к1, к2 и т.д. |
Pids |
Показывает только процессы с указанными PID |
Как видите, для управления
выводом команды ps
существует много опций. Пример работы этой
команды показан в листинге 2.4.
1 [rich@shadrach rich]$ ps ax 2 PID TTY STAT TIME COMMAND 3 1 ? S 0:03 init [5] 4 2 ? SW 0:00 [kflushd] 5 3 ? SW 0:00 [kpiod] 6 4 ? SW 0:02 [kswapd] 7 232 ? S 0:00 portmap 8 278 ? S 0:00 syslogd 9 288 ? S 0:00 klogd 10 301 ? S 0:00 /usr/sbin/atd 11 314 ? S 0:00 crond 12 327 ? S 0:00 inetd 13 348 ? SW 0:00 [lpd] 14 369 ? S 0:00 sendmail: accepting connections on port 25 15 383 ? S 0:00 gpm -t ms 16 396 ? S 0:01 httpd 17 415 ? S 0:13 xfs 18 435 tty1 SW 0:00 [mingetty] 19 436 tty2 SW 0:00 [mingetty] 20 437 tty3 SW 0:00 [mingetty] 21 438 tty4 SW 0:00 [mingetty] 22 439 tty5 SW 0:00 [mingetty] 23 440 tty6 SW 0:00 [mingetty] 24 441 ? S 0:05 /etc/X11/prefdm -nodaemon 25 488 ? S 0:00 kwmsound 26 578 ? S 1:01 ora_pmon_test1 27 580 ? S 0:07 [oracle] 28 582 ? S 0:11 ora_lgwr_test1 29 584 ? S 3:34 ora_ckpt_test1 30 586 ? S 19:38 ora_smon_test1 31 588 ? S 0:00 ora_reco_test1 32 590 ? S 0:00 ora_s000_test1 33 592 ? S 0:00 [oracle] 34 594 ? S 0:00 ora_arc0_test1 35 9102 ? S 0:00 kwmsound 36 9710 ? S 0:26 /usr/X11R6/bin/X 37 18854 ? S 0:05 /oracle/product/8.1.5/bin/tnslsnr LISTENER -i 38 19607 ? S 0:00 httpd 39 19608 ? S 0:00 httpd 40 19609 ? S 0:00 httpd 41 19610 ? S 0:00 httpd 42 19611 ? S 0:00 httpd 43 19657 ? S 0:00 httpd 44 19658 ? S 0:00 httpd 45 19659 ? S 0:00 httpd 46 24844 ? S 0:00 kwmsound 47 24905 ? S 0:00 -:0 48 25357 ? S 0:00 in.telnetd 49 25358 pts/0 S 0:00 login -- rich 58 25359 pts/0 S 0:00 -bash 51 25484 pts/0 R 0:00 ps ax 52 [rich@shadrach rich]$
В строке 1 задана команда ps.
Для отображения всех текущих процессов в
системе были заданы опции a
и x. В первой
колонке отображаются идентификаторы
процессов (Process Identifier — PID). В строке 3 вы
видите процесс init,
запущенный ядром. Процессу init
назначается PID 1. Остальным процессам,
запускающимся после init,
идентификаторы процессов назначаются в
порядке возрастания. Два процесса не могут
иметь одинаковый идентификатор.
В третьей колонке отображается состояние текущего процесса. В табл. 2.3 дается расшифровка всех возможных кодов состояния процесса.
| Код | Описание |
|---|---|
D |
Непрерываемый, находящийся в ожидании |
R |
Выполняется |
S |
Ожидающий |
T |
Отслеживается или остановлен |
Z |
Нефункциональный процесс-"зомби" |
W |
У процесса нет страниц в памяти (процесс свопирован) |
< |
Процесс с высоким приоритетом |
N |
Процесс с низким приоритетом |
L |
Некоторые страницы оперативной памяти блокированы |
Название процесса отображается в
последней колонке листинга. Заключенные в
квадратные скобки ([])
процессы вследствие низкой активности были
перекачаны из памяти в пространство
подкачки на жестком диске. Например, в
строках 18–23 показаны выполняющиеся
процессы виртуальных консолей сервера Linux.
Так как виртуальные сеансы не открывались
пользователями, то они не являются
активными и были переданы пространству
подкачки. Если же пользователь открывает
виртуальный сеанс, то соответствующий
процесс mingetty
будет вызван из области свопинга обратно в
память для выполнения. Это создает
небольшую задержку, влияющую на
производительность приложения. В строках
26–34 вы видите процессы, принадлежащие
серверу баз данных Oracle. Некоторые процессы
свопируются на жесткий диск, некоторые —
остаются в памяти.
Еще одна из зон ответственности
ядра — управление аппаратными
устройствами ПК. Любое устройство в системе,
с которым ОС Linux должна взаимодействовать
должно иметь драйвер (специальный код)
внутри ядра. Драйверный код позволяет ядру
вести
Раньше единственным способом вставки кода драйвера устройства в ядро была перекомпиляция ядра системы. Каждый раз, добавляя новое устройство в систему, вы были вынуждены перекомпилировать ядро. По мере того как увеличивалось количество устройств, поддерживаемых системой Linux, этот процесс становился все более неэффективным. Поэтому был разработан более эффективный метод вставки драйвера устройства в ядро — с помощью модулей ядра. Модули ядра могли вставляться в уже запущенное ядро и также "на ходу" выгружаться из него, когда устройство уже не используется. Далее в этой лекции в разделе "Модули ядра" этот механизм будет рассмотрен более подробно.
Все физические устройства в ОС Linux представляются специальными файлами устройств. Файлы устройств разделяются на три вида:
Символьные файлы выделяются устройствам, обрабатывающим данные посимвольно. Большинству модемов соответствуют символьные файлы устройств. Блочные файлы выделяются устройствам, обработка данных в которых осуществляется большими блоками, например таким, как дисковые накопители. Сетевые файлы устройств соответствуют устройствам, в которых осуществляется пакетная передача данных. К ним относятся сетевые адаптеры и специальные "петельные" устройства, замыкающиеся сами на себя, что позволяет системе Linux проводить сеансы связи с самой собой с применением сетевых протоколов. Эти устройства используются для тестирования и отладки программного обеспечения.
Файлы устройств создаются в файловой системе как узлы. Каждый узел имеет уникальную пару номеров, которая идентифицирует его для ядра ОС Linux. В эту пару номеров входят младший и старший номера устройства. Подобные устройства группируются по одинаковому старшему номеру устройства. Младший номер устройства необходим для идентификации устройства среди устройств с одинаковыми старшими номерами. В листинге 2.5 приведен пример файлов устройств сервера на базе ОС Linux.
1 [rich@shadrach /dev]$ ls -al sda* ttyS* 2 brw-rw----1 root disk 8, 0 May 5 1998 sda 3 brw-rw----1 root disk 8, 1 May 5 1998 sda1 4 brw-rw----1 root disk 8, 10 May 5 1998 sda10 5 brw-rw----1 root disk 8, 11 May 5 1998 sda11 6 brw-rw----1 root disk 8, 12 May 5 1998 sda12 7 brw-rw----1 root disk 8, 13 May 5 1998 sda13 8 brw-rw----1 root disk 8, 14 May 5 1998 sda14 9 brw-rw----1 root disk 8, 15 May 5 1998 sda15 10 brw-rw----1 root disk 8, 2 May 5 1998 sda2 11 brw-rw----1 root disk 8, 3 May 5 1998 sda3 12 brw-rw----1 root disk 8, 4 May 5 1998 sda4 13 brw-rw----1 root disk 8, 5 May 5 1998 sda5 14 brw-rw----1 root disk 8, 6 May 5 1998 sda6 15 brw-rw----1 root disk 8, 7 May 5 1998 sda7 16 brw-rw----1 root disk 8, 8 May 5 1998 sda8 17 brw-rw----1 root disk 8, 9 May 5 1998 sda9 18 crw-------1 root tty 4, 64 Nov 29 16:09 ttyS0 19 crw-------1 root tty 4, 65 May 5 1998 ttyS1 20 crw-------1 root tty 4, 66 May 5 1998 ttyS2 21 crw-------1 root tty 4, 67 May 5 1998 ttyS3 22 [rich@shadrach /dev]$
В строке 1 задана команда ls
для отображения всех файлов устройств sda
и ttyS. Устройство sda —
это первый жесткий диск SCSI, а ttyS
соответствуют стандартным
последовательным портам (COM) IBM-совместимых
ПК. В строках со 2-й по 17-ю показаны все
устройства sda в
системе. Не все из них используются в данный
момент, однако они создаются на тот случай,
если в них возникнет потребность. В строках
18–21 вы видите все доступные в системе
устройства ttyS.
В пятой колонке указаны старшие
номера узлов устройств. Обратите внимание,
что все устройства sda
имеют один и тот же старший номер узла
устройства (8), а все устройства ttyS
используют 4. В шестой колонке указаны
младшие номера узлов устройств. Как видите,
каждое устройство с общим старшим номером
имеет уникальный (b),
в то же время файлы последовательных портов
имеют пометку (c), т.е.
определены как символьные.
Для того чтобы создать новый узел
для устройства, можно воспользоваться
командой mknod.
Формат mknod
следующий:
mknod [OPTION] NAME TYPE [MAJOR MINOR],
где NAME —
это имя файла, а TYPE —
его тип (блоковый или символьный). Параметр OPTION
имеет лишь один вариант. Опция -m
позволяет устанавливать права доступа к
создаваемому файлу. Будьте внимательны при
выборе уникальных старшего и младшего
номеров узла устройства.
В отличие от других операционных систем, ядро ОС Linux способно поддерживать различные типы файловых систем для чтения-записи на жесткие диски. В настоящее время в ОС Linux поддерживается 15 различных файловых систем. Однако при этом необходимо скомпилировать соответствующим образом ядро, чтобы в нем была включена поддержка всех файловых систем. В табл. 2.4 представлен список файловых систем, с которыми операционная система Linux может производить операции чтения-записи данных.
| Файловая система | Описание |
|---|---|
affs |
Файловая система Amiga |
ext |
Расширенная файловая система |
ext2 |
Вторая расширенная файловая система |
|
Высокопроизводительная файловая система OS/2 |
iso9660 |
Файловая система |
|
Файловая система ОС |
msdos |
Система |
ncp |
Файловая система компании NetWare |
nfs |
Сетевая файловая система |
proc |
Доступ к системной информации |
smb |
Файловая система Samba (SMB) |
sysv |
Старая файловая система UNIX |
ufs |
Файловая система ОС Solaris и SunOS |
umsdos |
UNIX-подобная файловая система поверх MS-DOS |
|
Файловая система ОС Windows 95 |
xia |
Система подобная ext2. Не используется |
Любой жесткий диск для
использования системой Linux должен быть
форматирован с помощью одной из файловых
систем, указанных в табл. 2.4.
Форматирование в файловой системе Linux
подобно форматированию диска в системе MS-DOS.
Вначале операционная система должна
занести на диск необходимую системную
информацию, и только после этого диск можно
использовать для дальнейшей работы. Для
формирования файловой системы в ОС Linux
используется команда mkfs.
Формат команды mkfs
mkfs [-V] [-t fstype][fs-options] filesys [blocks],
где fstype
указывает тип используемой файловой
системы, а blocks —
количество используемых в ней блоков.
Файловой системой по умолчанию является ext2,
а число блоков — все доступные блоки в
разделе.
Ядро Linux взаимодействует с
другими файловыми системами посредством
Как уже отмечалось, в более старых версиях ядра Linux добавление новых драйверов устройств было нелегкой задачей. Для ее выполнения приходилось полностью перекомпилировать ядро системы с новыми драйверами. Однако на сегодняшний день эта проблема устранена. Теперь ядро ОС Linux поддерживает модули, которые являются драйверами и могут загружаться и выгружаться из ядра во время его работы без перекомпиляции. В развитии ОС Linux это очень важное техническое достижение.
Модули могут добавляться в ядро с
помощью команды insmod.
Формат команды insmod
представлен ниже
insmod [-fkmpsxXv] [-o module_name] object_file [symbol = value ...].
Программа insmod
пытается связать код модуля, содержащийся в object_file, с
запущенным ядром системы. В табл. 2.5
показаны параметры командной строки,
которые можно задавать с командой insmod.
| Параметр | Описание |
|---|---|
- f |
Пытается загрузить модуль даже при несоответствии версии ядра |
- k |
Устанавливает флаг автоматической очистки |
- m |
Выводит карту загрузки |
- o |
Выводит название модуля в явном виде |
- p |
Тестирует модуль |
- s |
Записывает все действия в syslog |
- v |
Режим с высокой детализацией вывода |
- X |
Экспортирует все внешние символы модуля |
- x |
Не экспортирует внешние символы модуля |
Программа insmod связывает модульный код с кодом
ядра только на определенное время. При
перезагрузке сервера под управлением Linux
ядро загружается без добавленных ранее
модулей. Решение этой проблемы достигается
применением программы modprobe.
modprobe module.o [symbol=value ...] modprobe -t -tag pattern modprobe -a -t tag pattern modprobe -1 [ -t tag ] pattern modprobe -r module modprobe -c
В первом случае команда modprobe
используется в формате для загрузки
отдельного модуля в ядро. Если модулю нужно
задать какие-либо параметры, их также можно
ввести из командной строки. Параметр -t
позволяет команде modprobe
загружать все модули, соответствующие
определенному образцу в списке. Выгрузить
определенный модуль из ядра позволяет
опция -r.
Модули можно заносить в список,
который будет включен в файл, считываемый
при загрузке системы. В версии ОС Linux Mandrake 6.0
файл modules
находится в /lib/modules/2.2.9-19mdk/modules..
В этом файле содержится список
модулей, которые команда modprobe
попытается установить при загрузке системы.
Для добавления/удаления модулей из файла modules
применяется команда depmod.
Еще один важный файл для modprobe —
это файл /etc/conf.modules.
В этом файле конфигурации устанавливается,
как должна вести себя программа modprobe
в том или ином случае. В табл. 2.6 показаны
строки конфигурации, которые могут
присутствовать в этом файле.
| Команда | Описание |
|---|---|
keep |
Указывает modprobe добавлять все пути из файла conf, а не замещать их |
path=MOD_PATH |
Указывает на каталог, содержащий модули |
path[tag]=MOD_PATH |
Определяет образец модулей, содержащихся в каталоге |
alias module real-name |
Указывает псевдоним для имени модуля |
|
Выполняет команду command перед установкой модуля |
install module command |
Выполняет команду command во время установки модуля |
|
Выполняет команду command после установки модуля |
pre-remove module command |
Выполняет команду command перед удалением модуля |
remove module command |
Выполняет команду command во время удаления модуля |
post-remove module command |
Выполняет команду command после удаления модуля |
Пример файла /etc/conf.modules
показан в листинге 2.6.
1 alias scsi_hostadapter aic7xxx 2 alias eth0 3c59x 3 alias parport_lowlevel parport_pc 4 pre-install pcmcia_core /etc/rc.d/init.d/pcmcia start
В строках 1–3 описываются
псевдонимы для стандартных устройств,
которые загружаются в список модулей.
Каждое стандартное устройство указывает
имя файла загружаемого модуля. В строке 4
указана программа, которая должна
запускаться перед загрузкой модуля pcmcia.
Развитие ядра ОС Linux происходило довольно быстрыми темпами. Все изменения в ядре проводились Линусом Торвальдсом, который, впрочем, принимал во внимание дельные пожелания и предложения по его улучшению. С момента выхода первой версии ядра в него были внесены значительные дополнения, такие как, например, механизм работы с модулями.
Разработчиками ядра поддерживается строгая система иерархии версий. Формат окончательной версии ядра (так называемый релиз)
linux-a.b.c,
где a —
старший номер релиза, b —
младший номер релиза и c —
номер патча ("заплаты"). В настоящее время
принято считать, что все релизы с нечетными
младшими номерами являются тестовыми, а
релизы с четными младшими номерами —
стабильными и готовыми к использованию.
На момент написания данного курса текущим стабильным релизом ядра Linux был 2.2.13, текущим же тестовым релизом — 2.3.31. Хотя текущим стабильным релизом является 2.2.13, большинство распространителей Linux пока не включают его в свои версии Linux.
Для того чтобы определить версию
вашей системы Linux, введите команду uname
с параметром -a. В
листинге 2.7 показана работа этой команды
применительно к ОС Mandrake 6.0 Linux.
1 [rich@shadrach rich]$ uname -a 2 Linux shadrach.smallorg.org 2.2.9-19mdk #1 Wed May 19 19:53:00 GMT 1999 i586 unknown 3 [rich@shadrach rich]$
Результаты работы команды uname показаны в строке 2. В третьем поле
строки 2 отображена версия ядра Linux. В нашем
примере это ядро 2.2.9, скомпилированное
специально для работы в Mandrake Linux, о чем
говорит добавленный после номера версии
префикс -19mdk.
Имеется возможность получения новых версий ядра для установки на сервере Linux. Но для этого вы должны иметь исходный код ядра, который можно получить через Internet из архива ядер ОС Linux по адресу: http://www.kernel.org. Однако компиляция и установка новой версии ядра задача не для новичка. Это — сложный многошаговый процесс. Если вы все же решитесь самостоятельно модернизировать ядро Linux, пожалуйста, внимательно ознакомьтесь с документацией, которая входит в поставку исходного кода. Обращайте особое внимание на особенности, касающиеся той или иной версии Linux.
Предупреждение
Установка нового ядра Linux происходит по принципу "если работает, не трогай". Если ваш сервер на базе ОС Linux работает нормально, не пытайтесь установить новое ядро лишь потому, что оно новое. Большинство версий Linux от разных распространителей вообще оптимизированы для работы с определенной версией ядра. В таком случае изменение ядра в погоне за новизной повлечет за собой непредсказуемые последствия.
Операционная система Linux очень сильно зависит от языка программирования С. Само ядро ОС Linux, большинство драйверов устройств и практически все утилиты были написаны с использованием именно этого языка программирования. Также не являются исключением и прикладные программы, написанные для платформы Linux. Все они написаны на языке программирования С.
Одним из преимуществ языка программирования С является возможность загрузки программного кода из файла библиотеки при выполнении программы. Думаю, большинство пользователей операционной системы Microsoft Windows знают о существовании библиотек DLL. Программный код, который могут совместно использовать несколько программ, компилируется в общей библиотеке (файле DLL). При выполнении программы файл DLL может загружаться в память по мере того как возникает необходимость в выполнении функций, имеющихся в библиотеке.
В ОС Linux также используются
подобные механизмы. А префикс lib
относится к файлам библиотек. В таблице
библиотек хранятся данные обо всех
совместно используемых библиотеках,
зарегистрированных в системе. Довольно
часто в среде Microsoft Windows возникает ситуация,
когда одна программа вносит изменения в
файл DLL, в то время как другая требует раннюю
версию DLL, что приводит к остановке работы. В
ОС Linux такая проблема не возникает, так как
таблица библиотек способна обслуживать
несколько копий одной и той же библиотеки, к
которой могут получать доступ различные
программы.
Файл /etc/ld.so.conf
содержит список библиотек, которые
вставляются в таблицу библиотек. С помощью
команды ldconfig
можно вызвать текущую таблицу библиотек ОС
Linux. В листинге 2.8 представлен пример
результатов работы команды ldconfig
в системе с ОС Mandrake 6.0 Linux. Это лишь частичный
листинг, так как из строки 2 следует, что в
данной системе зарегистрированы 534
различных библиотеки.
1 [rich@shadrach rich]$ /sbin/ldconfig -p 2 534 libs found in cache `/etc/ld.so.cache' (version 1.7.0) 3 libzvt.so.2 (libc6) => /usr/lib/libzvt.so.2 4 libzvt.so.2 (libc6) => /usr/lib/libzvt.so.2 5 libz.so.1 (libc6) => /usr/lib/libz.so.1 6 libz.so.1 (iibc6) => /usr/lib/libz.so.1 7 libxm11amp.so.0 (libc6) => /usr/X11R6/lib/libx11amp. so.0 8 libxml.so.0 (libc6) => /usr/lib/libxml. so.0 9 libxml.so.0 (libc6) => /usr/lib/libxml.so.0 10 libvgagl.so.1 (libc6) => /usr/lib/libvgagl.so.1 11 libvgagl.so.1 (libc5) => /usr/i486-linux-libc5 /lib/libvgagl.so.1 12 libvgagl.so.1 (libc6) => /usr/lib/libvgagl.so.1 13 libvgagl.so (libc6) => /usr/lib/libvgagl.so 14 libvgagl.so (libc6) => /usr/lib/libvgagl.so 15 libvga.so.1 (libc6) => /usr/lib/libvga.so.1 16 libvga.so.1 (libc5) => /usr/i486-linux-libc5/lib/libvga.so.1 17 libvga.so.1 (libc6) => /usr/lib/libvga.so.1 18 libvga.so (libc6) => /usr/lib/libvga.so 19 libvga.so (libc6) => /usr/lib/libvga.so 20 libuulib.so.5 (libc6) => /usr/lib/libuulib.so.5 21 libuulib.so.5 (libc6) => /usr/lib/libuulib.so.5 22 libuulib.so (libc6) => /usr/lib/libuulib.so 23 libuulib.so (libc6) => /usr/lib/libuulib.so
Все разновидности ОС Linux требуют
наличия версии стандартных библиотек языка
С, которые установлены в системе.
Стандартная библиотека С имеет функции,
которые наиболее часто используются в
системе. Здесь как раз дает о себе знать
пестрое прошлое ОС Linux. В ранних версиях ОС
Linux ядро системы было тесно привязано к
библиотеке С Linux (Linux C Library). Любые изменения
в ядре влекли за собой модифицирование
библиотеки С Linux, и наоборот. Первая версия
библиотеки С Linux называлась libc1.
Позднее ее возможности расширялись в
версиях libc2, libc3 и libc4.
Эти библиотеки широко использовались для
создания большинства утилит и прикладных
программ для Linux в первые годы после ее
появления.
Однако через некоторое время
разработчики Linux пришли к выводу, что старая
библиотека С Linux уже не удовлетворяет
сегодняшним требованиям. И не только потому,
что библиотека была тесно привязана к ядру
ОС Linux, — с ее помощью создавались
выполняемые файлы в устаревшем формате a.out.
Большинство более новых POSIX-совместимых
систем перешли на новый формат Executable and Linking
Format (libc5
была встроена поддержка формата libc5,
не будут работать на старых Linux-системах, в
которых используются библиотеки типа a.out.
Однако устаревшие программы, созданные с
использованием таких библиотек, вполне
успешно будут выполняться на новых
системах с libc5.
Это был первый случай приведший к путанице
среди пользователей ОС Linux.
Во то время как библиотека libc5 успешно развивалась и
распространялась, проект GNU разработал
собственную библиотеку, которая не была
привязана к какому-либо определенному ядру.
Библиотека С проекта GNU (GNU Project's C library)
получила название glibc.
Однако ее появление не вызвало фурора в
мире Linux, так как библиотека libc5
вполне справлялась с возложенными на
нее задачами.
После периода некоторого
забвения программисты вновь
заинтересовались кодом библиотеки glibc.
Они надеялись, что, по сравнению с libc5,
библиотека glibc
имеет преимущества. И действительно, одним
из преимуществ glibc
является ее независимость от определенной
операционной системы или ядра. Позже была
выпущена новая версия этой библиотеки — glibc 2.0.
Тогда большинство
дистрибьюторов ОС Linux решило включить код
новой библиотеки glibc 2.0 в свои новые
версии. К сожалению, многие дистрибьюторы
побоялись отказаться от библиотеки libc5,
что также привело к довольно запутанной
ситуации.
Версии ОС Linux, кроме glibc,
включают и библиотеку libc5
для реализации обратной совместимости. Так
как ОС Linux обслуживает таблицу файлов
библиотек, то одновременное использование
двух отдельных библиотек вполне возможно.
Поэтому большинство приложений для Linux
продолжают использовать библиотеку libc5
в целях сохранения совместимости.
Например, такие приложения как
Netscape Communicator и Corel WordPerfect написаны с
использованием библиотеки libc5
и могут работать практически с любыми
версиями ОС Linux. Некоторые разработчики
программного обеспечения для ОС Linux решили
использовать в своих программах
преимущества библиотеки glibc.
Так, например, продукты StarOffice 5.0 компании Star
Division и программное обеспечение для работы с
базами данных Oracle 8 компании Oracle написаны с
использованием библиотеки glibc
2.0. Эти приложения не смогут выполняться
на Linux-системах, где имеется только
библиотека libc5.
Было бы грустно, если бы этим все
и закончилось. Однако не так давно
организация проекта GNU выпустила новую
версию своей библиотеки glibc 2.1. С выходом этой версии связано
несколько неприятных моментов. Дело в том,
что некоторые функции в версии 2.1 были
изменены. Следствием этого является
аварийное завершение некоторых приложений,
написанных под библиотеку glibc 2.0 (например, StarOffice 5.0), которые
запускаются на Linux-системе с библиотекой glibc 2.1.
Библиотеки в ОС Linux
Если после чтения этого раздела
вы заволновались о работе своего Linux-сервера,
поспешим вас успокоить. Для большинства
приложений, распространяемых в открытом
виде (таких как, например, почтовые серверы,
обсуждаемые в этом курсе), компиляция кода с
использованием любой из библиотек С
пройдет успешно. Для приложений,
распространяемых в бинарном формате нужно
лишь использовать релиз версии
соответствующей С библиотеки ( libc5, glibc 2.0 или glibc 2.1 ).
Если же вам не известно, какая из
библиотек имеется в вашей версии ОС Linux , то
это можно выяснить, просмотрев каталог /lib.
В табл. 2.7 представлены различные
библиотеки языка С.
| Библиотека | Описание |
|---|---|
libc.so |
Библиотека libc1 языка С типа a.out |
libc.so.2 |
Библиотека libc2 языка С типа a.out |
libc.so.3 |
Библиотека libc3 языка С типа a.out |
libc.so.4 |
Библиотека libc4 языка С типа a.out |
libc.so.5 |
Библиотека libc5 языка С типа |
libc.so.6 |
Символические связи для библиотеки glibc |
libc-2.0.x.so |
Библиотека glibc 2.0 языка С типа |
libc-2.1.x.so |
Библиотека glibc 2.1 языка С типа |
Проект GNU был создан в 1984 году с
целью разработки бесплатной UNIX-подобной
операционной системы. В функции этой
организации входит обслуживание различных
версий открытого кода утилит для UNIX. Без
проекта GNU система Linux никогда не увидела бы
свет. Большинство составляющих ядра
операционной системы Linux созданы проектом
GNU. В этом разделе мы остановимся на
описании работы трех основных программ, от
работы которых зависит функционирование
сервера электронной почты. Это оболочка bash,
компилятор gcc и
утилита make.
Для выполнения команд или программ пользователя ядру необходим макропроцессор для их обработки. В мире UNIX макропроцессор называют оболочкой (shell). Наиболее широко распространена оболочка Bourne shell, названная так в честь своего создателя Стефена Боурна (Stephen Bourne). Оболочка Bourne shell — это программа, которая запускается отдельным процессом в системе и организует интерактивный сеанс работы с пользователем. При этом пользователь может вводить команды из командной строки. Командами могут выступать прикладные программы, команды оболочки или программные файлы, содержащие команды оболочки (так называемые файлы сценариев ). Запуск выполняемых программ оболочка осуществляет в отдельном новом процессе. Это позволяет каждой программе, запущенной из оболочки, иметь собственный процесс в системе, который отображает ее текущее состояние.
Разработчики проекта GNU знали,
как велика потребность в хорошей оболочке
для работы открытого кода в UNIX-подобной
операционной среде. Разработанная ими
программа оболочки, была названа bash,
что означает Bourne-Again SHell. Оболочка bash
полностью совместима со своей первой
версией, называемой просто sh.
В оболочку bash
также включены различные возможности из
других оболочек, в частности оболочек C shell ( csh )
и Korn shell ( ). В
настоящее время в подавляющем большинстве
версий ОС Linux по умолчанию принята оболочка bash.
Текущая версия bash
2.03.
Оболочка предоставляется
пользователю после его регистрации в
системе под управлением ОС Linux согласно его
учетной записи, которая описана в файле /etc/passwd.
Обычно эта запись выглядит примерно так:
riley:x:504:506:Riley M.:/home/riley:/bin/bash
Здесь двоеточия используются для
разделения полей. В первом поле указано имя
пользователя системы. Во втором —
хранится в зашифрованном виде пароль
пользователя. В данном конкретном примере
версия ОС Linux использует так называемые "теневые"
пароли. При этом настоящий пароль шифруется
и помещается в отдельный файл. Третье и
четвертое поля отображают идентификатор
пользователя и группы, соответственно. В
пятом поле указывается настоящее имя
пользователя. Далее, в шестом поле
назначается рабочий каталог пользователя,
к которому ему будет предоставляться
доступ сразу после входа в систему. И в
последнем поле задается оболочка, с которой
пользователь будет работать по умолчанию. В
нем просто указывается, откуда запускать
оболочку для пользователя (в нашем случае bash ).
Оболочку bash
можно настраивать определенным образом. Ее
конфигурирование осуществляется
несколькими файлами. Когда оболочка bash
вызывается процессом регистрации в системе,
то выполняется любая команда, записанная в
файле /etc/profile. Эти
операции действительны для всех
пользователей, с оболочкой по умолчанию bash,
указанной в файле passwd.
В листинге 2.9 показан файл /etc/profile,
сформированный по умолчанию для системы
Mandrake 6.0 Linux.
1 # /etc/profile
2
3 # System wide environment and startup programs
4 # Functions and aliases go in /etc/bashnc
5
6 PATH="$PATH:/usr/X11R6/bin"
7 PS1="[\u@\h \W]\\$ "
8
9 # In bash2 we can't define a ulimit for user :-(
10 [ "$UID" = "0" ] {
11 ulimit -c 1000000
12 }
13
14 if [`id -gn`= `id -un` -a `id -u`-gt 14 ]; then
15 umask 002
16 else
17 umask 022
18 fi
19
20 USER=`id -un`
21 LOGNAME=$USER
22 MAIL="/var/spool/mail/$USER"
23
24 HOSTNAME=`/bin/hostname`
25 HISTSIZE=1000
26 HISTFILESIZE=1000
27 export PATH PS1 HOSTNAME HISTSIZE HISTFILESIZE USER LOGNAME MAIL
28
29 for i in /etc/profile.d/*.sh ; do
30 if [ -x $i ]; then
31 . $i
32 fi
33 done
34
35 unset i
Основная функция файла /etc/profile —
создание новых переменных окружения для
установки
После выполнения команд из файла /etc/profile
оболочка bash ищет
еще три конфигурационных файла в рабочем
каталоге пользователя. Это файлы .bash_profile, .bash_login и .profile.
Все они должны находиться в рабочем
каталоге пользователя и, следовательно,
могут быть настроены для определенного
пользователя. Имеется еще один файл
конфигурации — .bash_logout.
Этот файл сценария выполняется по
окончании сеанса работы с пользователем.
Конфигурируя файлы сценариев для отдельных
пользователей, системный администратор
может добиться оптимальной работы оболочки bash для каждой
системы.
Если планируется установка
программного обеспечения, которое
распространяется в исходном открытом коде,
то понадобится специальная программа-компилятор
для создания из него выполняемого файла.
Все программы для ОС Linux, описываемые в этом
курсе, написаны на языке программирования С.
Таким образом, на вашем сервере Linux должен
быть установлен компилятор языка С. Самый
широко распространенный компилятор для Linux —
это GNU — компилятор языка С ( gcc ).
У него довольно интересная
предыстория. Группа проекта GNU разработала
и распространила первую версию компилятора
gcc в начале 1990
года. Продолжив развитие gcc,
организаторы проекта GNU выпустили версию 2.0,
периодически улучшая ее вплоть до версии 2.8,
которая вышла в 1997 году. В то же время другая
группа разработчиков работала над
созданием компилятора для языка С++,
названного egcs (произносится
как "eggs"). Работы над gcc
после выхода версии 2.8 были направлены на
объединение усилий с проектом egcs. После этого вышла версия egcs
1.0, объединяющая в одном пакете
компиляторы языков С и С++.
К сожалению, проект egcs
оказался недолговечным (вышла только еще
одна версия egcs 1.1 ).
В настоящее время оба проекта ( gcc
и egcs ) снова
вернулись к идеям, реализованным в gcc.
На момент выхода этого курса последней
версией gcc была
2.95. В ней поддерживаются компиляторы и для
языка С, и для языка С ++. Вероятно, для
усложнения жизни себе и другим некоторые
распространители Linux продолжают называть
этот компилятор egcs версии
2.95. Остается надеяться, что это
недоразумение вскоре будет устранено.
Чтобы определить, какая версия gcc
используется в вашей системе, в командной
строке задайте опцию --version:
[rich@shadrach rich]$ gcc --version pgcc-2.91.66 [rich@shadrach rich]$
Здесь приведен пример для системы Mandrake
6.0 Linux, с использованием компилятора gcc
версии 2.91 с уровнем обновлений 66.
Со временем проекты на С и С++
становились все сложнее. Приходилось
работать с несколькими исходными файлами,
каждый из которых имел свой make. В
функции этой утилиты входит управление
созданием выполняемых файлов на основе
изменений в исходных файлах или согласно
конфигурации, заданной переменными в
конфигурационном файле make.
В проекте GNU имеется версия
утилиты make,
которая полностью совместима с
компилятором gcc.
На момент выхода данного курса текущая
версия утилиты make
была 3.78.1.
Главной составляющей утилиты make
является Makefile. В
нем указывается алгоритм компиляции
исходного кода для создания выполняемой
программы. Пример Makefile приведен в листинге 2.10.
1 # Makefile -- Make file for test program 2 # 3 4 # Edit the following for your installation 5 6 CC = gcc 7 #=================================== 8 9 # Compiler and linker flags 10 11 CFLAGS = -0 12 LFLAGS = -0 13 14 # This program's object code files 15 16 OBJS = test.o 17 18 # File dependencies 19 20 all: test 21 22 objs: $(OBJS) 23 24 clean: 25 rm -f $(OBJS) 26 rm -f test 27 28 test: $(OBJS) 29 $(CC) -o $@ $(LFLAGS) $(OBJS) $(LIBS) 30 31 test.o: test.c 32 $(CC) -c $(CFLAGS) -o $@ $<
В строках 6, 11,12 и 16 задаются
переменные Makefile.
Эти переменные могут изменяться
пользователем в соответствии с ресурсами
системы. В строке 18 объявляется создание
так называемых действий системы. Каждое
действие можно запускать отдельно, задавая
его имя как параметр команды make. Например, чтобы запустить действие clean,
которое удаляет все старые объекты и
выполняемые файлы, нужно в командной строке
набрать
make clean
Для создания объектных файлов для тестовой программы просто наберите
make objs
Если же в командной строке просто
задать make, то она
выполнится с целью all
и создаст выполняемый файл test.
Если у вас уже кружится голова от предлагаемых вариантов и версий ОС Linux, не волнуйтесь. К счастью, достаточно умные люди уже собрали все эти лоскутки одеяла в одно целое для нашего с вами удобства. Предварительно собранные пакеты операционной системы Linux называются дистрибутивами Linux (Linux distribution).
Большинство дистрибутивов доступны как за определенную плату, так и бесплатно. Часто у некоторых людей возникают вопросы, каким образом компании могут оплачивать бесплатное программное обеспечение. Ответом может служить общественная лицензия проекта GNU. Девиз распространения системы Linux таков: "Бесплатно — разговор, а за пиво плати". Распространители ОС Linux вправе назначать ту цену на свои продукты, которую они считают приемлемой для общественности, т.е. которую эта общественность готова заплатить за их продукт. "Бесплатным" распространение считается потому, что программное обеспечение, входящее в пакет распространителя, содержит исходные тексты всех программ и вы имеете право модифицировать их по своему усмотрению. Большинство компаний-распространителей ОС Linux предлагают бесплатные версии (так же, как "бесплатное пиво") своих систем на общественных началах.
Основная работа компаний — дистрибьюторов ОС Linux заключается в соединении различных версий ядра, оболочки и других утилит в единую целостную операционную систему. Очень часто это не так легко, как может показаться на первый взгляд. Каждая утилита должна быть определенным образом сконфигурирована и помещена в дистрибутивный пакет таким образом, чтобы она без проблем устанавливалась и надлежащим образом работала с операционной системой.
Большинство дистрибьюторов ОС Linux определенным образом пакуют программы, входящие в поставку ОС. Затем эти "запакованные" программы можно легко установить или удалить из системы, не влияя при этом на работу системы вцелом. Главным образом применяется метод пакования RPM, перешедший из дистрибутива Linux Red Hat. Все необходимые для работы файлы программа RPM пакует в один дистрибутивный файл. Установить либо удалить программное обеспечение программа RPM может с помощью одной простой команды.
В табл. 2.8 представлен список наиболее заметных распространителей ОС Linux на сегодняшний день. Приведены также версии ядра и библиотек языка С, входящих в поставку.
| Дистрибутив | Версия ядра | Версия GLIBC |
|---|---|---|
| Caldera OpenLinux 2.3 | 2.2.10 | 2.1.1 |
| Debian Linux 2.1 | 2.0.36 | 2.1 |
| Mandrake 6.1 Linux | 2.2.13pre | 2.1.1 |
| Red Hat 6.2 Linux | 2.2.12 | 2.1.2 |
| Slackware 7.0 | 2.2.13 | 2.1.2 |
| SuSe 6.2 Linux | 2.2.10 | 2.1.1 |
Как видно из табл. 2.8, дистрибутивы ОС Linux не очень сильно отличаются версиями ядра и библиотек языка С. Выбирая дистрибутив Linux для установки в качестве сервера, убедитесь, что в нем поддерживаются все требования, необходимые для нормальной работы приложений, которые вы собираетесь использовать.
Основной составляющей сервера
электронной почты на базе Linux является сама
операционная система Linux. Сервер состоит из
нескольких логических компонентов, но его
сердцем является ядро системы Linux. Ядро
управляет такими компонентами
операционной системы, как память, процессы,
устройства и файловая система. Кроме ядра,
для нормальной работы ОС требуются
различные утилиты. Группой проекта GNU была
создана самая крупная библиотека UNIX-совместимых
утилит для работы с ядром ОС Linux. Оболочка bash shell обеспечивает механизм
взаимодействия пользователей с
операционной системой, позволяя им
запускать программы. Компилятор gcc
дает пользователям возможность создавать
выполняемые программы с использованием
языков программирования С и С++. Утилита make
широко используется для преобразования
исходных текстов упакованных программ в
выполняемые модули. В настоящее время
доступно много дистрибутивов ОС Linux,
включающих в один пакет все необходимые для
работы утилиты вместе с определенным ядром
Linux. Новичков довольно часто смущает
множество доступных дистрибутивов ОС Linux.
Если вы приобретаете новый дистрибутив ОС
Linux для вашей компании, то ознакомьтесь с
предложениями от различных
распространителей этой операционной
системы. Многие из них предлагают
специальные пакеты услуг для бизнес-пользователей.
В этой лекции
С широким распространением операционной системы Linux системные администраторы опробовали различные ее конфигурации для выполнения определенных задач. Хотя многие системные администраторы используют ОС Linux в качестве альтернативы операционным системам Microsoft Windows на рабочих станциях, весь спектр возможностей ОС Linux раскрывается при выполнении именно серверных задач.
Для того чтобы использовать сервер на базе ОС Linux в качестве сервера электронной почты, для начала вам следует получить некоторые базовые знания о работе этой операционной системы. Итак, операционная система Linux развивается на протяжении уже нескольких лет. В каждой новой версии появляются дополнительные возможности. В этой лекции мы не намерены обучать вас работе с операционной системой Linux. В ней лишь описывается несколько функций ОС Linux, и системный администратор, имеющий представление о работе этой ОС, сможет соответствующим образом настроить программное обеспечение для поддержки работы сервера электронной почты.
Вообще, термин операционная система Linux не вполне корректен. Стандартную ОС Linux составляют несколько различных модулей и частей. Сердцем операционной системы является ядро. Ядро для ОС Linux создано и поддерживается по сей день Линусом Торвальдсом (Linus Torvalds). Само по себе ядро не может быть сколько-нибудь полезным. Чтобы операционная система нормально функционировала, в ней должны быть приложения и возможность их запуска. К счастью для Линуса, проект GNU в то время уже существовал.
Цель проекта GNU (аббревиатура GNU
раскрывается рекурсивно "GNU's Not Unix") —
создание
Ядро операционной системы —
это ее сердце. Ядро должно управлять всеми
устройствами и программами в системе,
распределяя аппаратные ресурсы и запуская
программы по мере надобности. В ядро Linux
перешли многие идеи и функциональность
системы UNIX. Линус Торвальдс отмечает, что к
созданию ядра Linux его привело изучение
операционной системы
Ядро ОС UNIX содержит функции управления разнообразными устройствами и программами в компьютерной системе. За управление памятью, управление программным обеспечением, управление устройствами системы и за управление файловой системой отвечает главным образом ядро. Ниже мы более подробно рассмотрим все эти функции.
Одной из важнейших функций ядра
операционной системы является управление
памятью. Ядро управляет не только
физической памятью, имеющейся в ПК, оно
способно также создавать и управлять виртуальной памятью, которая
физически не существует. Ядро формирует эту
память, используя пространство на жестком
диске (называемое пространством подкачки (swap space) ). При этом память
подкачки на жестком диске компьютера ведет
непосредственный обмен данными с
физической памятью. Это заставляет систему
"думать", что в ней имеется больше
доступной памяти, чем физически существует.
При этом разделители памяти группируются в
блоки, называемые страницами.
Каждая страница памяти расположена либо в
физической памяти, либо в области подкачки.
Ядро ведет специальную таблицу размещения
страниц памяти, где точно указывается
местонахождение всех страниц памяти.
Те области памяти, доступ к которым определенное время не предоставлялся, копируются ядром в область подкачки жесткого диска. Когда какая-либо программа запрашивает доступ к странице памяти, которая была помещена в область подкачки, ядру придется удалить из этой области содержащуюся там страницу и поместить туда страницу, запрашиваемую программой.
Чтобы использовать виртуальную
память, сначала создайте область подкачки
на жестком диске. Довольно часто эту
процедуру можно выполнить во время
инсталляции системы. Для разметки разделов
на жестком диске используется команда fdisk.
Формат команды fdisk следующий
fdisk [option] [device],
где device
— это жесткий диск, на котором производится
разметка. В ОС Linux для обозначения жестких
дисков используются стандартные имена. В
табл. 2.1 показаны стандартные
обозначения жестких дисков в системе Linux.
| Устройство | Описание |
|---|---|
| /dev/hd [a-h] | дисковые устройства IDE |
| /dev/sd [a-p] | дисковые устройства SCSI |
| /dev/ed [a--d] | дисковые устройства |
| /dev/xd [ab] | дисковые устройства XT |
Первый доступный диск
определенного типа обозначается как диск a,
второй — b и
так далее. В листинге 2.1 показан пример
организации разделов в ОС Linux.
1 [root@shadrach root]# /sbin/fdisk /dev/sda 2 3 Command (m for help): p 4 5 Disk /dev/sda: 64 heads, 32 sectors, 521 cylinders 6 Units = cylinders of 2048 * 512 bytes 7 8 Device Boot Start End Blocks Id System 9 /dev/sda1 460 471024 83 Linux native 10 /dev/sda2 461 521 62464 5 Extended 11 /dev/sda5 461 521 62448 82 Linux swap 12 13 Command (m for help): q 14 (root@shadrach root]#
В строке 1 запущена команда fdisk
для первого SCSI-диска в системе: /dev/sda.
Программа fdisk является
интерактивным средством, которое позволяет
системному администратору управлять
таблицей разметки жесткого диска. В строке 3
показана команда, применяемая для
отображения текущей таблицы разметки
разделов жесткого диска. С 5-й по 11-ю строки
показана информация, содержащаяся в самой
таблице разделов жесткого диска. В строке 11
показан размер раздела подкачки в Linux.
После того как область подкачки
на жестком диске была создана, ядро Linux
должно "узнать" о ее существовании и
активировать ее. Для активизации процесса
подкачки страниц памяти применяется
программа swapon.
Командой swapon
устанавливаются параметры виртуальной
памяти в ядре. Однако вся эта информация
теряется при перезагрузке Linux-сервера. Это
означает, что команду swapon
следует выполнять каждый раз при загрузке
системы. В большинстве версий Linux команда swapon
включена в сценарий начальной загрузки и
выполняется автоматически при загрузке
системы.
Текущая информация о состоянии
виртуальной памяти в системе Linux может быть
получена из файла /proc/meminfo.
В листинге 2.2 показан пример содержимого
файла /proc/meminfo.
1 [root@shadrach /proc]# cat meminfo 2 total: used: free: shared: buffers: cached: 3 Mem:31535104 29708288 1826816 31817728 3051520 15773696 4 Swap: 63942656 2838528 61104128 5 MemTotal: 30796 kB 6 MemFree: 1784 kB 7 MemShared: 31072 kB 8 Buffers: 2980 kB 9 Cached: 15404 kB 10 SwapTotal: 62444 kB 11 SwapFree: 59672 kB 12 [root@shadrach /proc]#
В строке 1 показана команда для
просмотра файла /proc/meminfo.
Строки со 2-й по 11-ю отображают содержимое
файла meminfo. Из
строки 3 можно сделать заключение о том, что
данный сервер имеет 32 Мбайт физической
памяти. Также, как мы видим, примерно 18 Мбайт
из нее в настоящий момент не используется.
Из строки 4 видно, что в системе имеется 64
Мбайт доступного для подкачки пространства.
Это подтверждает показания 11-й строки
листинга 2.1, которая также указывает на
наличие раздела размером 64 Мбайт для
подкачки (свопинга) на диске /dev/sda.
По умолчанию каждый процесс в ОС
Linux имеет отдельную область памяти. То есть
процесс не может получить доступ к области
памяти, принадлежащей другому процессу.
Кроме того, процессы не имеют доступа и к
памяти, занятой процессами ядра системы.
Для облегчения задачи совместного доступа
к данным в памяти могут создаваться
совместно используемые сегменты памяти. К
областям памяти с совместным доступам
могут обращаться несколько ipcs.
В листинге 2.3 показаны результаты
работы команды ipcs.
1 [root@shadrach /proc]# ipcs -m 2 3 ------ Shared Memory Segments ------- 4 key shmid owner perms bytes nattch status 5 0x00000000 0 rich 600 52228 6 dest 6 0x395ec51c 1 oracle 640 5787648 6 7 8[root@shadrach /proc]#
В строке 1 вводится команда ipcs
с параметром -m
для отображения только совместно
используемых сегментов. В строках 3–6
показаны результаты выполнения этой
команды. Каждый совместно используемый
сегмент памяти имеет своего владельца.
Кроме того, каждый сегмент имеет также
стандартное для UNIX разграничение прав
доступа, которое определяет его
взаимоотношения с другими пользователями.
Ключевым параметром при этом выступает
разрешение другим пользователям на доступ
к совместно используемому сегменту памяти.
Операционная система Linux
обрабатывает программы как процессы.
Управлением процессами занимается ядро
системы. Ядром создается первый процесс
системы init,
который затем запускает остальные процессы
в системе. При запуске ядра процесс init
загружается в виртуальную память системы.
Далее каждому запускающемуся процессу
выделяется область виртуальной памяти для
хранения данных и кода, который будет
выполняться системой.
После запуска процесс init
считывает файл /etc/inittab,
чтобы определить какие еще процессы
следует запустить в системе. В операционной
системе Linux применяется система init
с различными уровнями запуска (run levels).
Уровень запуска может указывать процессу init запускать только определенные типы
процессов. В ОС Linux существует пять уровней
запуска init.
На уровне запуска 1 могут
выполняться только основные системные
процессы вместе с одним терминальным
процессом, поддерживающим одну консоль.
Такой режим работы называется однопользовательским (single-user mode). Однопользовательский
режим в основном используется при
обслуживании файловой системы сервера.
Стандартный уровень запуска init —
3. На этом уровне запуска выполняется
большинство прикладных программ, в
частности программы обслуживания сети. Еще
один часто используемый уровень запуска в
ОС Linux — 5. На этом уровне выполняется
работа с графической оболочкой X Window.
Обратите внимание, как с помощью уровней
запуска система Linux управляет
функционированием всего ПК. Изменяя
уровень запуска процессов с 3-го по 5-й,
система Linux совершает переход от работы с
консолями к работе в графическом режиме с
помощью оболочки X Window.
Для отображения состояния
текущих процессов в ОС Linux применяется
команда ps. Формат
команды:
ps [options],
где в качестве options
могут выступать различные опции, в
зависимости от которых видоизменяются
параметры вывода результатов работы
команды. В табл. 2.2 представлены все
доступные опции (иногда их называют ключами)
команды ps.
| Опция | Описание |
|---|---|
l |
Вывод результата в длинном формате |
u |
Вывод в пользовательском формате (показывает имя пользователя и время запуска) |
j |
Вывод результата в рабочем формате (показывает идентификаторы GID и SID процесса) |
s |
Вывод результата в сигнальном формате |
v |
Вывод результата в vm -формате |
m |
Отображает состояние памяти |
f |
Использует для вывода -формат (показывает процессы в виде дерева) |
a |
Показывает процессы других пользователей |
x |
Показывает процессы, не отображая |
S |
Показывает дочерний CPU, а также время и страницу сбоев |
c |
Название команды для task_struct |
e |
Показывает состояние после командной строки и а+ |
w |
Выводит результат в расширенном формате |
h |
Не выводит заголовок |
r |
Показывает только запущенные процессы |
n |
Показывает числовой вывод для USER и WCHAN |
txx |
Показывает процессы, управляемые терминалом ttyxx |
O |
Сортирует вывод процессов по ключам к1, к2 и т.д. |
Pids |
Показывает только процессы с указанными PID |
Как видите, для управления
выводом команды ps
существует много опций. Пример работы этой
команды показан в листинге 2.4.
1 [rich@shadrach rich]$ ps ax 2 PID TTY STAT TIME COMMAND 3 1 ? S 0:03 init [5] 4 2 ? SW 0:00 [kflushd] 5 3 ? SW 0:00 [kpiod] 6 4 ? SW 0:02 [kswapd] 7 232 ? S 0:00 portmap 8 278 ? S 0:00 syslogd 9 288 ? S 0:00 klogd 10 301 ? S 0:00 /usr/sbin/atd 11 314 ? S 0:00 crond 12 327 ? S 0:00 inetd 13 348 ? SW 0:00 [lpd] 14 369 ? S 0:00 sendmail: accepting connections on port 25 15 383 ? S 0:00 gpm -t ms 16 396 ? S 0:01 httpd 17 415 ? S 0:13 xfs 18 435 tty1 SW 0:00 [mingetty] 19 436 tty2 SW 0:00 [mingetty] 20 437 tty3 SW 0:00 [mingetty] 21 438 tty4 SW 0:00 [mingetty] 22 439 tty5 SW 0:00 [mingetty] 23 440 tty6 SW 0:00 [mingetty] 24 441 ? S 0:05 /etc/X11/prefdm -nodaemon 25 488 ? S 0:00 kwmsound 26 578 ? S 1:01 ora_pmon_test1 27 580 ? S 0:07 [oracle] 28 582 ? S 0:11 ora_lgwr_test1 29 584 ? S 3:34 ora_ckpt_test1 30 586 ? S 19:38 ora_smon_test1 31 588 ? S 0:00 ora_reco_test1 32 590 ? S 0:00 ora_s000_test1 33 592 ? S 0:00 [oracle] 34 594 ? S 0:00 ora_arc0_test1 35 9102 ? S 0:00 kwmsound 36 9710 ? S 0:26 /usr/X11R6/bin/X 37 18854 ? S 0:05 /oracle/product/8.1.5/bin/tnslsnr LISTENER -i 38 19607 ? S 0:00 httpd 39 19608 ? S 0:00 httpd 40 19609 ? S 0:00 httpd 41 19610 ? S 0:00 httpd 42 19611 ? S 0:00 httpd 43 19657 ? S 0:00 httpd 44 19658 ? S 0:00 httpd 45 19659 ? S 0:00 httpd 46 24844 ? S 0:00 kwmsound 47 24905 ? S 0:00 -:0 48 25357 ? S 0:00 in.telnetd 49 25358 pts/0 S 0:00 login -- rich 58 25359 pts/0 S 0:00 -bash 51 25484 pts/0 R 0:00 ps ax 52 [rich@shadrach rich]$
В строке 1 задана команда ps.
Для отображения всех текущих процессов в
системе были заданы опции a
и x. В первой
колонке отображаются идентификаторы
процессов (Process Identifier — PID). В строке 3 вы
видите процесс init,
запущенный ядром. Процессу init
назначается PID 1. Остальным процессам,
запускающимся после init,
идентификаторы процессов назначаются в
порядке возрастания. Два процесса не могут
иметь одинаковый идентификатор.
В третьей колонке отображается состояние текущего процесса. В табл. 2.3 дается расшифровка всех возможных кодов состояния процесса.
| Код | Описание |
|---|---|
D |
Непрерываемый, находящийся в ожидании |
R |
Выполняется |
S |
Ожидающий |
T |
Отслеживается или остановлен |
Z |
Нефункциональный процесс-"зомби" |
W |
У процесса нет страниц в памяти (процесс свопирован) |
< |
Процесс с высоким приоритетом |
N |
Процесс с низким приоритетом |
L |
Некоторые страницы оперативной памяти блокированы |
Название процесса отображается в
последней колонке листинга. Заключенные в
квадратные скобки ([])
процессы вследствие низкой активности были
перекачаны из памяти в пространство
подкачки на жестком диске. Например, в
строках 18–23 показаны выполняющиеся
процессы виртуальных консолей сервера Linux.
Так как виртуальные сеансы не открывались
пользователями, то они не являются
активными и были переданы пространству
подкачки. Если же пользователь открывает
виртуальный сеанс, то соответствующий
процесс mingetty
будет вызван из области свопинга обратно в
память для выполнения. Это создает
небольшую задержку, влияющую на
производительность приложения. В строках
26–34 вы видите процессы, принадлежащие
серверу баз данных Oracle. Некоторые процессы
свопируются на жесткий диск, некоторые —
остаются в памяти.
Еще одна из зон ответственности
ядра — управление аппаратными
устройствами ПК. Любое устройство в системе,
с которым ОС Linux должна взаимодействовать
должно иметь драйвер (специальный код)
внутри ядра. Драйверный код позволяет ядру
вести
Раньше единственным способом вставки кода драйвера устройства в ядро была перекомпиляция ядра системы. Каждый раз, добавляя новое устройство в систему, вы были вынуждены перекомпилировать ядро. По мере того как увеличивалось количество устройств, поддерживаемых системой Linux, этот процесс становился все более неэффективным. Поэтому был разработан более эффективный метод вставки драйвера устройства в ядро — с помощью модулей ядра. Модули ядра могли вставляться в уже запущенное ядро и также "на ходу" выгружаться из него, когда устройство уже не используется. Далее в этой лекции в разделе "Модули ядра" этот механизм будет рассмотрен более подробно.
Все физические устройства в ОС Linux представляются специальными файлами устройств. Файлы устройств разделяются на три вида:
Символьные файлы выделяются устройствам, обрабатывающим данные посимвольно. Большинству модемов соответствуют символьные файлы устройств. Блочные файлы выделяются устройствам, обработка данных в которых осуществляется большими блоками, например таким, как дисковые накопители. Сетевые файлы устройств соответствуют устройствам, в которых осуществляется пакетная передача данных. К ним относятся сетевые адаптеры и специальные "петельные" устройства, замыкающиеся сами на себя, что позволяет системе Linux проводить сеансы связи с самой собой с применением сетевых протоколов. Эти устройства используются для тестирования и отладки программного обеспечения.
Файлы устройств создаются в файловой системе как узлы. Каждый узел имеет уникальную пару номеров, которая идентифицирует его для ядра ОС Linux. В эту пару номеров входят младший и старший номера устройства. Подобные устройства группируются по одинаковому старшему номеру устройства. Младший номер устройства необходим для идентификации устройства среди устройств с одинаковыми старшими номерами. В листинге 2.5 приведен пример файлов устройств сервера на базе ОС Linux.
1 [rich@shadrach /dev]$ ls -al sda* ttyS* 2 brw-rw----1 root disk 8, 0 May 5 1998 sda 3 brw-rw----1 root disk 8, 1 May 5 1998 sda1 4 brw-rw----1 root disk 8, 10 May 5 1998 sda10 5 brw-rw----1 root disk 8, 11 May 5 1998 sda11 6 brw-rw----1 root disk 8, 12 May 5 1998 sda12 7 brw-rw----1 root disk 8, 13 May 5 1998 sda13 8 brw-rw----1 root disk 8, 14 May 5 1998 sda14 9 brw-rw----1 root disk 8, 15 May 5 1998 sda15 10 brw-rw----1 root disk 8, 2 May 5 1998 sda2 11 brw-rw----1 root disk 8, 3 May 5 1998 sda3 12 brw-rw----1 root disk 8, 4 May 5 1998 sda4 13 brw-rw----1 root disk 8, 5 May 5 1998 sda5 14 brw-rw----1 root disk 8, 6 May 5 1998 sda6 15 brw-rw----1 root disk 8, 7 May 5 1998 sda7 16 brw-rw----1 root disk 8, 8 May 5 1998 sda8 17 brw-rw----1 root disk 8, 9 May 5 1998 sda9 18 crw-------1 root tty 4, 64 Nov 29 16:09 ttyS0 19 crw-------1 root tty 4, 65 May 5 1998 ttyS1 20 crw-------1 root tty 4, 66 May 5 1998 ttyS2 21 crw-------1 root tty 4, 67 May 5 1998 ttyS3 22 [rich@shadrach /dev]$
В строке 1 задана команда ls
для отображения всех файлов устройств sda
и ttyS. Устройство sda —
это первый жесткий диск SCSI, а ttyS
соответствуют стандартным
последовательным портам (COM) IBM-совместимых
ПК. В строках со 2-й по 17-ю показаны все
устройства sda в
системе. Не все из них используются в данный
момент, однако они создаются на тот случай,
если в них возникнет потребность. В строках
18–21 вы видите все доступные в системе
устройства ttyS.
В пятой колонке указаны старшие
номера узлов устройств. Обратите внимание,
что все устройства sda
имеют один и тот же старший номер узла
устройства (8), а все устройства ttyS
используют 4. В шестой колонке указаны
младшие номера узлов устройств. Как видите,
каждое устройство с общим старшим номером
имеет уникальный (b),
в то же время файлы последовательных портов
имеют пометку (c), т.е.
определены как символьные.
Для того чтобы создать новый узел
для устройства, можно воспользоваться
командой mknod.
Формат mknod
следующий:
mknod [OPTION] NAME TYPE [MAJOR MINOR],
где NAME —
это имя файла, а TYPE —
его тип (блоковый или символьный). Параметр OPTION
имеет лишь один вариант. Опция -m
позволяет устанавливать права доступа к
создаваемому файлу. Будьте внимательны при
выборе уникальных старшего и младшего
номеров узла устройства.
В отличие от других операционных систем, ядро ОС Linux способно поддерживать различные типы файловых систем для чтения-записи на жесткие диски. В настоящее время в ОС Linux поддерживается 15 различных файловых систем. Однако при этом необходимо скомпилировать соответствующим образом ядро, чтобы в нем была включена поддержка всех файловых систем. В табл. 2.4 представлен список файловых систем, с которыми операционная система Linux может производить операции чтения-записи данных.
| Файловая система | Описание |
|---|---|
affs |
Файловая система Amiga |
ext |
Расширенная файловая система |
ext2 |
Вторая расширенная файловая система |
|
Высокопроизводительная файловая система OS/2 |
iso9660 |
Файловая система |
|
Файловая система ОС |
msdos |
Система |
ncp |
Файловая система компании NetWare |
nfs |
Сетевая файловая система |
proc |
Доступ к системной информации |
smb |
Файловая система Samba (SMB) |
sysv |
Старая файловая система UNIX |
ufs |
Файловая система ОС Solaris и SunOS |
umsdos |
UNIX-подобная файловая система поверх MS-DOS |
|
Файловая система ОС Windows 95 |
xia |
Система подобная ext2. Не используется |
Любой жесткий диск для
использования системой Linux должен быть
форматирован с помощью одной из файловых
систем, указанных в табл. 2.4.
Форматирование в файловой системе Linux
подобно форматированию диска в системе MS-DOS.
Вначале операционная система должна
занести на диск необходимую системную
информацию, и только после этого диск можно
использовать для дальнейшей работы. Для
формирования файловой системы в ОС Linux
используется команда mkfs.
Формат команды mkfs
mkfs [-V] [-t fstype][fs-options] filesys [blocks],
где fstype
указывает тип используемой файловой
системы, а blocks —
количество используемых в ней блоков.
Файловой системой по умолчанию является ext2,
а число блоков — все доступные блоки в
разделе.
Ядро Linux взаимодействует с
другими файловыми системами посредством
Как уже отмечалось, в более старых версиях ядра Linux добавление новых драйверов устройств было нелегкой задачей. Для ее выполнения приходилось полностью перекомпилировать ядро системы с новыми драйверами. Однако на сегодняшний день эта проблема устранена. Теперь ядро ОС Linux поддерживает модули, которые являются драйверами и могут загружаться и выгружаться из ядра во время его работы без перекомпиляции. В развитии ОС Linux это очень важное техническое достижение.
Модули могут добавляться в ядро с
помощью команды insmod.
Формат команды insmod
представлен ниже
insmod [-fkmpsxXv] [-o module_name] object_file [symbol = value ...].
Программа insmod
пытается связать код модуля, содержащийся в object_file, с
запущенным ядром системы. В табл. 2.5
показаны параметры командной строки,
которые можно задавать с командой insmod.
| Параметр | Описание |
|---|---|
- f |
Пытается загрузить модуль даже при несоответствии версии ядра |
- k |
Устанавливает флаг автоматической очистки |
- m |
Выводит карту загрузки |
- o |
Выводит название модуля в явном виде |
- p |
Тестирует модуль |
- s |
Записывает все действия в syslog |
- v |
Режим с высокой детализацией вывода |
- X |
Экспортирует все внешние символы модуля |
- x |
Не экспортирует внешние символы модуля |
Программа insmod связывает модульный код с кодом
ядра только на определенное время. При
перезагрузке сервера под управлением Linux
ядро загружается без добавленных ранее
модулей. Решение этой проблемы достигается
применением программы modprobe.
modprobe module.o [symbol=value ...] modprobe -t -tag pattern modprobe -a -t tag pattern modprobe -1 [ -t tag ] pattern modprobe -r module modprobe -c
В первом случае команда modprobe
используется в формате для загрузки
отдельного модуля в ядро. Если модулю нужно
задать какие-либо параметры, их также можно
ввести из командной строки. Параметр -t
позволяет команде modprobe
загружать все модули, соответствующие
определенному образцу в списке. Выгрузить
определенный модуль из ядра позволяет
опция -r.
Модули можно заносить в список,
который будет включен в файл, считываемый
при загрузке системы. В версии ОС Linux Mandrake 6.0
файл modules
находится в /lib/modules/2.2.9-19mdk/modules..
В этом файле содержится список
модулей, которые команда modprobe
попытается установить при загрузке системы.
Для добавления/удаления модулей из файла modules
применяется команда depmod.
Еще один важный файл для modprobe —
это файл /etc/conf.modules.
В этом файле конфигурации устанавливается,
как должна вести себя программа modprobe
в том или ином случае. В табл. 2.6 показаны
строки конфигурации, которые могут
присутствовать в этом файле.
| Команда | Описание |
|---|---|
keep |
Указывает modprobe добавлять все пути из файла conf, а не замещать их |
path=MOD_PATH |
Указывает на каталог, содержащий модули |
path[tag]=MOD_PATH |
Определяет образец модулей, содержащихся в каталоге |
alias module real-name |
Указывает псевдоним для имени модуля |
|
Выполняет команду command перед установкой модуля |
install module command |
Выполняет команду command во время установки модуля |
|
Выполняет команду command после установки модуля |
pre-remove module command |
Выполняет команду command перед удалением модуля |
remove module command |
Выполняет команду command во время удаления модуля |
post-remove module command |
Выполняет команду command после удаления модуля |
Пример файла /etc/conf.modules
показан в листинге 2.6.
1 alias scsi_hostadapter aic7xxx 2 alias eth0 3c59x 3 alias parport_lowlevel parport_pc 4 pre-install pcmcia_core /etc/rc.d/init.d/pcmcia start
В строках 1–3 описываются
псевдонимы для стандартных устройств,
которые загружаются в список модулей.
Каждое стандартное устройство указывает
имя файла загружаемого модуля. В строке 4
указана программа, которая должна
запускаться перед загрузкой модуля pcmcia.
Развитие ядра ОС Linux происходило довольно быстрыми темпами. Все изменения в ядре проводились Линусом Торвальдсом, который, впрочем, принимал во внимание дельные пожелания и предложения по его улучшению. С момента выхода первой версии ядра в него были внесены значительные дополнения, такие как, например, механизм работы с модулями.
Разработчиками ядра поддерживается строгая система иерархии версий. Формат окончательной версии ядра (так называемый релиз)
linux-a.b.c,
где a —
старший номер релиза, b —
младший номер релиза и c —
номер патча ("заплаты"). В настоящее время
принято считать, что все релизы с нечетными
младшими номерами являются тестовыми, а
релизы с четными младшими номерами —
стабильными и готовыми к использованию.
На момент написания данного курса текущим стабильным релизом ядра Linux был 2.2.13, текущим же тестовым релизом — 2.3.31. Хотя текущим стабильным релизом является 2.2.13, большинство распространителей Linux пока не включают его в свои версии Linux.
Для того чтобы определить версию
вашей системы Linux, введите команду uname
с параметром -a. В
листинге 2.7 показана работа этой команды
применительно к ОС Mandrake 6.0 Linux.
1 [rich@shadrach rich]$ uname -a 2 Linux shadrach.smallorg.org 2.2.9-19mdk #1 Wed May 19 19:53:00 GMT 1999 i586 unknown 3 [rich@shadrach rich]$
Результаты работы команды uname показаны в строке 2. В третьем поле
строки 2 отображена версия ядра Linux. В нашем
примере это ядро 2.2.9, скомпилированное
специально для работы в Mandrake Linux, о чем
говорит добавленный после номера версии
префикс -19mdk.
Имеется возможность получения новых версий ядра для установки на сервере Linux. Но для этого вы должны иметь исходный код ядра, который можно получить через Internet из архива ядер ОС Linux по адресу: http://www.kernel.org. Однако компиляция и установка новой версии ядра задача не для новичка. Это — сложный многошаговый процесс. Если вы все же решитесь самостоятельно модернизировать ядро Linux, пожалуйста, внимательно ознакомьтесь с документацией, которая входит в поставку исходного кода. Обращайте особое внимание на особенности, касающиеся той или иной версии Linux.
Предупреждение
Установка нового ядра Linux происходит по принципу "если работает, не трогай". Если ваш сервер на базе ОС Linux работает нормально, не пытайтесь установить новое ядро лишь потому, что оно новое. Большинство версий Linux от разных распространителей вообще оптимизированы для работы с определенной версией ядра. В таком случае изменение ядра в погоне за новизной повлечет за собой непредсказуемые последствия.
Операционная система Linux очень сильно зависит от языка программирования С. Само ядро ОС Linux, большинство драйверов устройств и практически все утилиты были написаны с использованием именно этого языка программирования. Также не являются исключением и прикладные программы, написанные для платформы Linux. Все они написаны на языке программирования С.
Одним из преимуществ языка программирования С является возможность загрузки программного кода из файла библиотеки при выполнении программы. Думаю, большинство пользователей операционной системы Microsoft Windows знают о существовании библиотек DLL. Программный код, который могут совместно использовать несколько программ, компилируется в общей библиотеке (файле DLL). При выполнении программы файл DLL может загружаться в память по мере того как возникает необходимость в выполнении функций, имеющихся в библиотеке.
В ОС Linux также используются
подобные механизмы. А префикс lib
относится к файлам библиотек. В таблице
библиотек хранятся данные обо всех
совместно используемых библиотеках,
зарегистрированных в системе. Довольно
часто в среде Microsoft Windows возникает ситуация,
когда одна программа вносит изменения в
файл DLL, в то время как другая требует раннюю
версию DLL, что приводит к остановке работы. В
ОС Linux такая проблема не возникает, так как
таблица библиотек способна обслуживать
несколько копий одной и той же библиотеки, к
которой могут получать доступ различные
программы.
Файл /etc/ld.so.conf
содержит список библиотек, которые
вставляются в таблицу библиотек. С помощью
команды ldconfig
можно вызвать текущую таблицу библиотек ОС
Linux. В листинге 2.8 представлен пример
результатов работы команды ldconfig
в системе с ОС Mandrake 6.0 Linux. Это лишь частичный
листинг, так как из строки 2 следует, что в
данной системе зарегистрированы 534
различных библиотеки.
1 [rich@shadrach rich]$ /sbin/ldconfig -p 2 534 libs found in cache `/etc/ld.so.cache' (version 1.7.0) 3 libzvt.so.2 (libc6) => /usr/lib/libzvt.so.2 4 libzvt.so.2 (libc6) => /usr/lib/libzvt.so.2 5 libz.so.1 (libc6) => /usr/lib/libz.so.1 6 libz.so.1 (iibc6) => /usr/lib/libz.so.1 7 libxm11amp.so.0 (libc6) => /usr/X11R6/lib/libx11amp. so.0 8 libxml.so.0 (libc6) => /usr/lib/libxml. so.0 9 libxml.so.0 (libc6) => /usr/lib/libxml.so.0 10 libvgagl.so.1 (libc6) => /usr/lib/libvgagl.so.1 11 libvgagl.so.1 (libc5) => /usr/i486-linux-libc5 /lib/libvgagl.so.1 12 libvgagl.so.1 (libc6) => /usr/lib/libvgagl.so.1 13 libvgagl.so (libc6) => /usr/lib/libvgagl.so 14 libvgagl.so (libc6) => /usr/lib/libvgagl.so 15 libvga.so.1 (libc6) => /usr/lib/libvga.so.1 16 libvga.so.1 (libc5) => /usr/i486-linux-libc5/lib/libvga.so.1 17 libvga.so.1 (libc6) => /usr/lib/libvga.so.1 18 libvga.so (libc6) => /usr/lib/libvga.so 19 libvga.so (libc6) => /usr/lib/libvga.so 20 libuulib.so.5 (libc6) => /usr/lib/libuulib.so.5 21 libuulib.so.5 (libc6) => /usr/lib/libuulib.so.5 22 libuulib.so (libc6) => /usr/lib/libuulib.so 23 libuulib.so (libc6) => /usr/lib/libuulib.so
Все разновидности ОС Linux требуют
наличия версии стандартных библиотек языка
С, которые установлены в системе.
Стандартная библиотека С имеет функции,
которые наиболее часто используются в
системе. Здесь как раз дает о себе знать
пестрое прошлое ОС Linux. В ранних версиях ОС
Linux ядро системы было тесно привязано к
библиотеке С Linux (Linux C Library). Любые изменения
в ядре влекли за собой модифицирование
библиотеки С Linux, и наоборот. Первая версия
библиотеки С Linux называлась libc1.
Позднее ее возможности расширялись в
версиях libc2, libc3 и libc4.
Эти библиотеки широко использовались для
создания большинства утилит и прикладных
программ для Linux в первые годы после ее
появления.
Однако через некоторое время
разработчики Linux пришли к выводу, что старая
библиотека С Linux уже не удовлетворяет
сегодняшним требованиям. И не только потому,
что библиотека была тесно привязана к ядру
ОС Linux, — с ее помощью создавались
выполняемые файлы в устаревшем формате a.out.
Большинство более новых POSIX-совместимых
систем перешли на новый формат Executable and Linking
Format (libc5
была встроена поддержка формата libc5,
не будут работать на старых Linux-системах, в
которых используются библиотеки типа a.out.
Однако устаревшие программы, созданные с
использованием таких библиотек, вполне
успешно будут выполняться на новых
системах с libc5.
Это был первый случай приведший к путанице
среди пользователей ОС Linux.
Во то время как библиотека libc5 успешно развивалась и
распространялась, проект GNU разработал
собственную библиотеку, которая не была
привязана к какому-либо определенному ядру.
Библиотека С проекта GNU (GNU Project's C library)
получила название glibc.
Однако ее появление не вызвало фурора в
мире Linux, так как библиотека libc5
вполне справлялась с возложенными на
нее задачами.
После периода некоторого
забвения программисты вновь
заинтересовались кодом библиотеки glibc.
Они надеялись, что, по сравнению с libc5,
библиотека glibc
имеет преимущества. И действительно, одним
из преимуществ glibc
является ее независимость от определенной
операционной системы или ядра. Позже была
выпущена новая версия этой библиотеки — glibc 2.0.
Тогда большинство
дистрибьюторов ОС Linux решило включить код
новой библиотеки glibc 2.0 в свои новые
версии. К сожалению, многие дистрибьюторы
побоялись отказаться от библиотеки libc5,
что также привело к довольно запутанной
ситуации.
Версии ОС Linux, кроме glibc,
включают и библиотеку libc5
для реализации обратной совместимости. Так
как ОС Linux обслуживает таблицу файлов
библиотек, то одновременное использование
двух отдельных библиотек вполне возможно.
Поэтому большинство приложений для Linux
продолжают использовать библиотеку libc5
в целях сохранения совместимости.
Например, такие приложения как
Netscape Communicator и Corel WordPerfect написаны с
использованием библиотеки libc5
и могут работать практически с любыми
версиями ОС Linux. Некоторые разработчики
программного обеспечения для ОС Linux решили
использовать в своих программах
преимущества библиотеки glibc.
Так, например, продукты StarOffice 5.0 компании Star
Division и программное обеспечение для работы с
базами данных Oracle 8 компании Oracle написаны с
использованием библиотеки glibc
2.0. Эти приложения не смогут выполняться
на Linux-системах, где имеется только
библиотека libc5.
Было бы грустно, если бы этим все
и закончилось. Однако не так давно
организация проекта GNU выпустила новую
версию своей библиотеки glibc 2.1. С выходом этой версии связано
несколько неприятных моментов. Дело в том,
что некоторые функции в версии 2.1 были
изменены. Следствием этого является
аварийное завершение некоторых приложений,
написанных под библиотеку glibc 2.0 (например, StarOffice 5.0), которые
запускаются на Linux-системе с библиотекой glibc 2.1.
Библиотеки в ОС Linux
Если после чтения этого раздела
вы заволновались о работе своего Linux-сервера,
поспешим вас успокоить. Для большинства
приложений, распространяемых в открытом
виде (таких как, например, почтовые серверы,
обсуждаемые в этом курсе), компиляция кода с
использованием любой из библиотек С
пройдет успешно. Для приложений,
распространяемых в бинарном формате нужно
лишь использовать релиз версии
соответствующей С библиотеки ( libc5, glibc 2.0 или glibc 2.1 ).
Если же вам не известно, какая из
библиотек имеется в вашей версии ОС Linux , то
это можно выяснить, просмотрев каталог /lib.
В табл. 2.7 представлены различные
библиотеки языка С.
| Библиотека | Описание |
|---|---|
libc.so |
Библиотека libc1 языка С типа a.out |
libc.so.2 |
Библиотека libc2 языка С типа a.out |
libc.so.3 |
Библиотека libc3 языка С типа a.out |
libc.so.4 |
Библиотека libc4 языка С типа a.out |
libc.so.5 |
Библиотека libc5 языка С типа |
libc.so.6 |
Символические связи для библиотеки glibc |
libc-2.0.x.so |
Библиотека glibc 2.0 языка С типа |
libc-2.1.x.so |
Библиотека glibc 2.1 языка С типа |
Проект GNU был создан в 1984 году с
целью разработки бесплатной UNIX-подобной
операционной системы. В функции этой
организации входит обслуживание различных
версий открытого кода утилит для UNIX. Без
проекта GNU система Linux никогда не увидела бы
свет. Большинство составляющих ядра
операционной системы Linux созданы проектом
GNU. В этом разделе мы остановимся на
описании работы трех основных программ, от
работы которых зависит функционирование
сервера электронной почты. Это оболочка bash,
компилятор gcc и
утилита make.
Для выполнения команд или программ пользователя ядру необходим макропроцессор для их обработки. В мире UNIX макропроцессор называют оболочкой (shell). Наиболее широко распространена оболочка Bourne shell, названная так в честь своего создателя Стефена Боурна (Stephen Bourne). Оболочка Bourne shell — это программа, которая запускается отдельным процессом в системе и организует интерактивный сеанс работы с пользователем. При этом пользователь может вводить команды из командной строки. Командами могут выступать прикладные программы, команды оболочки или программные файлы, содержащие команды оболочки (так называемые файлы сценариев ). Запуск выполняемых программ оболочка осуществляет в отдельном новом процессе. Это позволяет каждой программе, запущенной из оболочки, иметь собственный процесс в системе, который отображает ее текущее состояние.
Разработчики проекта GNU знали,
как велика потребность в хорошей оболочке
для работы открытого кода в UNIX-подобной
операционной среде. Разработанная ими
программа оболочки, была названа bash,
что означает Bourne-Again SHell. Оболочка bash
полностью совместима со своей первой
версией, называемой просто sh.
В оболочку bash
также включены различные возможности из
других оболочек, в частности оболочек C shell ( csh )
и Korn shell ( ). В
настоящее время в подавляющем большинстве
версий ОС Linux по умолчанию принята оболочка bash.
Текущая версия bash
2.03.
Оболочка предоставляется
пользователю после его регистрации в
системе под управлением ОС Linux согласно его
учетной записи, которая описана в файле /etc/passwd.
Обычно эта запись выглядит примерно так:
riley:x:504:506:Riley M.:/home/riley:/bin/bash
Здесь двоеточия используются для
разделения полей. В первом поле указано имя
пользователя системы. Во втором —
хранится в зашифрованном виде пароль
пользователя. В данном конкретном примере
версия ОС Linux использует так называемые "теневые"
пароли. При этом настоящий пароль шифруется
и помещается в отдельный файл. Третье и
четвертое поля отображают идентификатор
пользователя и группы, соответственно. В
пятом поле указывается настоящее имя
пользователя. Далее, в шестом поле
назначается рабочий каталог пользователя,
к которому ему будет предоставляться
доступ сразу после входа в систему. И в
последнем поле задается оболочка, с которой
пользователь будет работать по умолчанию. В
нем просто указывается, откуда запускать
оболочку для пользователя (в нашем случае bash ).
Оболочку bash
можно настраивать определенным образом. Ее
конфигурирование осуществляется
несколькими файлами. Когда оболочка bash
вызывается процессом регистрации в системе,
то выполняется любая команда, записанная в
файле /etc/profile. Эти
операции действительны для всех
пользователей, с оболочкой по умолчанию bash,
указанной в файле passwd.
В листинге 2.9 показан файл /etc/profile,
сформированный по умолчанию для системы
Mandrake 6.0 Linux.
1 # /etc/profile
2
3 # System wide environment and startup programs
4 # Functions and aliases go in /etc/bashnc
5
6 PATH="$PATH:/usr/X11R6/bin"
7 PS1="[\u@\h \W]\\$ "
8
9 # In bash2 we can't define a ulimit for user :-(
10 [ "$UID" = "0" ] {
11 ulimit -c 1000000
12 }
13
14 if [`id -gn`= `id -un` -a `id -u`-gt 14 ]; then
15 umask 002
16 else
17 umask 022
18 fi
19
20 USER=`id -un`
21 LOGNAME=$USER
22 MAIL="/var/spool/mail/$USER"
23
24 HOSTNAME=`/bin/hostname`
25 HISTSIZE=1000
26 HISTFILESIZE=1000
27 export PATH PS1 HOSTNAME HISTSIZE HISTFILESIZE USER LOGNAME MAIL
28
29 for i in /etc/profile.d/*.sh ; do
30 if [ -x $i ]; then
31 . $i
32 fi
33 done
34
35 unset i
Основная функция файла /etc/profile —
создание новых переменных окружения для
установки
После выполнения команд из файла /etc/profile
оболочка bash ищет
еще три конфигурационных файла в рабочем
каталоге пользователя. Это файлы .bash_profile, .bash_login и .profile.
Все они должны находиться в рабочем
каталоге пользователя и, следовательно,
могут быть настроены для определенного
пользователя. Имеется еще один файл
конфигурации — .bash_logout.
Этот файл сценария выполняется по
окончании сеанса работы с пользователем.
Конфигурируя файлы сценариев для отдельных
пользователей, системный администратор
может добиться оптимальной работы оболочки bash для каждой
системы.
Если планируется установка
программного обеспечения, которое
распространяется в исходном открытом коде,
то понадобится специальная программа-компилятор
для создания из него выполняемого файла.
Все программы для ОС Linux, описываемые в этом
курсе, написаны на языке программирования С.
Таким образом, на вашем сервере Linux должен
быть установлен компилятор языка С. Самый
широко распространенный компилятор для Linux —
это GNU — компилятор языка С ( gcc ).
У него довольно интересная
предыстория. Группа проекта GNU разработала
и распространила первую версию компилятора
gcc в начале 1990
года. Продолжив развитие gcc,
организаторы проекта GNU выпустили версию 2.0,
периодически улучшая ее вплоть до версии 2.8,
которая вышла в 1997 году. В то же время другая
группа разработчиков работала над
созданием компилятора для языка С++,
названного egcs (произносится
как "eggs"). Работы над gcc
после выхода версии 2.8 были направлены на
объединение усилий с проектом egcs. После этого вышла версия egcs
1.0, объединяющая в одном пакете
компиляторы языков С и С++.
К сожалению, проект egcs
оказался недолговечным (вышла только еще
одна версия egcs 1.1 ).
В настоящее время оба проекта ( gcc
и egcs ) снова
вернулись к идеям, реализованным в gcc.
На момент выхода этого курса последней
версией gcc была
2.95. В ней поддерживаются компиляторы и для
языка С, и для языка С ++. Вероятно, для
усложнения жизни себе и другим некоторые
распространители Linux продолжают называть
этот компилятор egcs версии
2.95. Остается надеяться, что это
недоразумение вскоре будет устранено.
Чтобы определить, какая версия gcc
используется в вашей системе, в командной
строке задайте опцию --version:
[rich@shadrach rich]$ gcc --version pgcc-2.91.66 [rich@shadrach rich]$
Здесь приведен пример для системы Mandrake
6.0 Linux, с использованием компилятора gcc
версии 2.91 с уровнем обновлений 66.
Со временем проекты на С и С++
становились все сложнее. Приходилось
работать с несколькими исходными файлами,
каждый из которых имел свой make. В
функции этой утилиты входит управление
созданием выполняемых файлов на основе
изменений в исходных файлах или согласно
конфигурации, заданной переменными в
конфигурационном файле make.
В проекте GNU имеется версия
утилиты make,
которая полностью совместима с
компилятором gcc.
На момент выхода данного курса текущая
версия утилиты make
была 3.78.1.
Главной составляющей утилиты make
является Makefile. В
нем указывается алгоритм компиляции
исходного кода для создания выполняемой
программы. Пример Makefile приведен в листинге 2.10.
1 # Makefile -- Make file for test program 2 # 3 4 # Edit the following for your installation 5 6 CC = gcc 7 #=================================== 8 9 # Compiler and linker flags 10 11 CFLAGS = -0 12 LFLAGS = -0 13 14 # This program's object code files 15 16 OBJS = test.o 17 18 # File dependencies 19 20 all: test 21 22 objs: $(OBJS) 23 24 clean: 25 rm -f $(OBJS) 26 rm -f test 27 28 test: $(OBJS) 29 $(CC) -o $@ $(LFLAGS) $(OBJS) $(LIBS) 30 31 test.o: test.c 32 $(CC) -c $(CFLAGS) -o $@ $<
В строках 6, 11,12 и 16 задаются
переменные Makefile.
Эти переменные могут изменяться
пользователем в соответствии с ресурсами
системы. В строке 18 объявляется создание
так называемых действий системы. Каждое
действие можно запускать отдельно, задавая
его имя как параметр команды make. Например, чтобы запустить действие clean,
которое удаляет все старые объекты и
выполняемые файлы, нужно в командной строке
набрать
make clean
Для создания объектных файлов для тестовой программы просто наберите
make objs
Если же в командной строке просто
задать make, то она
выполнится с целью all
и создаст выполняемый файл test.
Если у вас уже кружится голова от предлагаемых вариантов и версий ОС Linux, не волнуйтесь. К счастью, достаточно умные люди уже собрали все эти лоскутки одеяла в одно целое для нашего с вами удобства. Предварительно собранные пакеты операционной системы Linux называются дистрибутивами Linux (Linux distribution).
Большинство дистрибутивов доступны как за определенную плату, так и бесплатно. Часто у некоторых людей возникают вопросы, каким образом компании могут оплачивать бесплатное программное обеспечение. Ответом может служить общественная лицензия проекта GNU. Девиз распространения системы Linux таков: "Бесплатно — разговор, а за пиво плати". Распространители ОС Linux вправе назначать ту цену на свои продукты, которую они считают приемлемой для общественности, т.е. которую эта общественность готова заплатить за их продукт. "Бесплатным" распространение считается потому, что программное обеспечение, входящее в пакет распространителя, содержит исходные тексты всех программ и вы имеете право модифицировать их по своему усмотрению. Большинство компаний-распространителей ОС Linux предлагают бесплатные версии (так же, как "бесплатное пиво") своих систем на общественных началах.
Основная работа компаний — дистрибьюторов ОС Linux заключается в соединении различных версий ядра, оболочки и других утилит в единую целостную операционную систему. Очень часто это не так легко, как может показаться на первый взгляд. Каждая утилита должна быть определенным образом сконфигурирована и помещена в дистрибутивный пакет таким образом, чтобы она без проблем устанавливалась и надлежащим образом работала с операционной системой.
Большинство дистрибьюторов ОС Linux определенным образом пакуют программы, входящие в поставку ОС. Затем эти "запакованные" программы можно легко установить или удалить из системы, не влияя при этом на работу системы вцелом. Главным образом применяется метод пакования RPM, перешедший из дистрибутива Linux Red Hat. Все необходимые для работы файлы программа RPM пакует в один дистрибутивный файл. Установить либо удалить программное обеспечение программа RPM может с помощью одной простой команды.
В табл. 2.8 представлен список наиболее заметных распространителей ОС Linux на сегодняшний день. Приведены также версии ядра и библиотек языка С, входящих в поставку.
| Дистрибутив | Версия ядра | Версия GLIBC |
|---|---|---|
| Caldera OpenLinux 2.3 | 2.2.10 | 2.1.1 |
| Debian Linux 2.1 | 2.0.36 | 2.1 |
| Mandrake 6.1 Linux | 2.2.13pre | 2.1.1 |
| Red Hat 6.2 Linux | 2.2.12 | 2.1.2 |
| Slackware 7.0 | 2.2.13 | 2.1.2 |
| SuSe 6.2 Linux | 2.2.10 | 2.1.1 |
Как видно из табл. 2.8, дистрибутивы ОС Linux не очень сильно отличаются версиями ядра и библиотек языка С. Выбирая дистрибутив Linux для установки в качестве сервера, убедитесь, что в нем поддерживаются все требования, необходимые для нормальной работы приложений, которые вы собираетесь использовать.
Основной составляющей сервера
электронной почты на базе Linux является сама
операционная система Linux. Сервер состоит из
нескольких логических компонентов, но его
сердцем является ядро системы Linux. Ядро
управляет такими компонентами
операционной системы, как память, процессы,
устройства и файловая система. Кроме ядра,
для нормальной работы ОС требуются
различные утилиты. Группой проекта GNU была
создана самая крупная библиотека UNIX-совместимых
утилит для работы с ядром ОС Linux. Оболочка bash shell обеспечивает механизм
взаимодействия пользователей с
операционной системой, позволяя им
запускать программы. Компилятор gcc
дает пользователям возможность создавать
выполняемые программы с использованием
языков программирования С и С++. Утилита make
широко используется для преобразования
исходных текстов упакованных программ в
выполняемые модули. В настоящее время
доступно много дистрибутивов ОС Linux,
включающих в один пакет все необходимые для
работы утилиты вместе с определенным ядром
Linux. Новичков довольно часто смущает
множество доступных дистрибутивов ОС Linux.
Если вы приобретаете новый дистрибутив ОС
Linux для вашей компании, то ознакомьтесь с
предложениями от различных
распространителей этой операционной
системы. Многие из них предлагают
специальные пакеты услуг для бизнес-пользователей.
Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.