Наши партнеры








Книги по Linux (с отзывами читателей)

Библиотека сайта rus-linux.net


Next: 5 The X Window Up: Linux Installation and Getting Previous: 3 Linux Tutorial Оглавление: Оглавление.

4. Администрирование системы

  

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

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

Мы постараемся обсудить здесь наиболее важные вещи, связанные с администрированием, о котором вы должны знать при использовании Linux, чтобы не испытывали неудобств при работе с ОС. Чтобы быть не слишком болтливыми и приятными собеседниками, мы и раньше рассматривали только основные черты, пропуская многие важные детали. Вам следует прочитать книгу "Linux System Administrator's Guide" (где взять сказано в Приложении A), если у вас относительно Linux серьезные намерения. Это поможет вам лучше понять как там все происходит, и как там все взаимодействует. В крайнем случае, стоит все это просмотреть, чтобы знать что в книге содержится и какой помощи вам следует от нее ожидать.

4.1 Аккаунт root.

Обычные пользователи в общем случае ограничены так, что они не могут причинить вред кому-либо другому в системе (включая саму систему), кроме самих себя. Права доступа к файлам в системе организованы таким образом, что простой пользователь не может удалить или изменить файл, файл в каталогах, которые пользователи используют совместно (такие как /bin и /usr/bin). Большинство пользователей также защищают свои собственные файлы так, что не могут их изменить, а иногда и вообще добраться до них.

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

Например, если вы как обычный пользователь случайно попытаетесь удалить файл в /etc, система не разрешит вам это сделать. Но, если вы вошли как root, система даже не пикнет, выполняя все, что прикажете. Легко уничтожить систему, пребывая в системе в качестве root. Лучший способ избежать неприятностей, это:

  • Посидеть на собственных ладошках, прежде чем нажать Enter для выполнения команды, которая может быть причиной катастрофы. Например, если вы собираетесь очистить каталог, перед нажатием Enter перечитайте всю команду и убедитесь, что она написана правильно.
  • Не привыкайте использовать root. Чем более комфортно вам будет в роли root, тем больше вы будете путать ваши привилегии с привилегиями нормального пользователя. Например, вы можете подумать, что вы сейчас находитесь в системе как larry, хотя на самом деле будете неудержимым root.
  • Используйте отличающуюся подсказку для root. Для этого следует внести изменения в root-овский .bashrc или .login файл для того, чтобы сделать подсказку для root отличной от других. Например, многие используют символ ``$'' в подсказках обычных пользователей и оставляют символ ``#'' для подсказки root.
  • Входите под именем root только тогда, когда это абсолютно необходимо. И, как только вы закончите работу root, выйдите (выведите root из системы). Чем меньше используете root, тем меньше навредите системе.

Разумеется, есть племя хакеров, которые используют root практически всегда и везде. Но каждый из них когда-то по глупости уничтожил хотя бы (в лучшем случае) одну систему. Есть общее правило: пока вы не познакомились с неограниченными возможностями root, и не привыкли к отсутствию ограничений, входите под root в крайнем случае.

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

4.2 Загрузка системы.

  Многие загружают Linux используя ``загрузочную дискету'', которая содержит копию ядра Linux. В ядре есть информация о корневом разделе Linux, так что ядро знает, где искать на жестком диске корневую файловую систему. Это тип дискеты, созданной, например, Slackware в процессе инсталляции.

Для создания своей собственной загрузочной дискеты, сначала разместите образ ядра на своем жестком диске. Он должно быть в файле /vmlinuz или /vmlinux. Некоторые инсталляции используют /vmlinuz в качестве символической ссылки на настоящее ядро системы, благодаря чему его легко найти.

Выяснив местонахождение ядра системы, установите в нем имя раздела с корневой файловой системой Linux командой rdev. Формат команды:


rdev kernel_name root_device

где kernel-name имя образа ядра, root-device имя корневой файловой системы. Например, для установки имени корневой файловой системы в ядре в файле /vmlinuz в значение /dev/hda2, напишите:

# rdev /vmlinuz /dev/hda2

rdev может установить еще несколько параметров ядра, например, использовать по умолчанию при загрузке SVGA видеорежим. Команда:

# rdev -h

выведет на экран справку. После установки имени корневой файловой системы, скопируйте ядро на дискету. Перед копированием данных дискету надо отформатировать командой MS-DOS FORMAT.COM или Linux fdformat. Таким образом будут исключены плохие сектора дискеты.

Форматы дискет и их файлы устройств обсуждаются ниже.

Файлы устройств, как упомянуто ранее, проживают в каталоге /dev. Чтобы скопировать ядро из файла /etc/Image на дискету в /dev/fd0, скомандуйте:


# cp /vmilinuz /dev/fd0

Эта дискета должна теперь загрузить Linux.

4.2.1 Использование LILO или LILOвая система.

 

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

LILO может быть также использована, как начальный загрузчик для нескольких операционных систем, позволяя вам выбирать во время загрузки, какую операционную систему (например, Linux или MS-DOS) загружать. Когда вы загружаетесь с использованием LILO, то загружается операционная система, установленная по умолчанию, если вы не нажмете shift во время выполнения загрузки. Если вы нажмете клавишу shift, или если в файле lilo.conf есть директива prompt, вам будет выдана подсказка загрузчика, в ответ на которую вы напечатаете имя операционной системы, которую надо загрузить (например, ``linux'' или ``msdos''). Если вы нажмете tab в ответ на подсказку загрузчика, вам будет выдан перечень доступных операционных систем.

Простой способ инсталлировать LILO: отредактировать файл конфигурации /etc/lilo.conf. После чего команда:


# /sbin/lilo

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

Файл конфигурации LILO содержит записи для каждой операционной системы, которую вы можете загрузить. Лучший способ продемонстрировать это на примере конфигурационного файла LILO config. Нижеприведенные установки для системы, которая имеет корневой раздел Linux на /dev/hda1 и раздел MS-DOS на /dev/hda2:


# Tell LILO to modify the boot record, on /dev/hda (the first
# non-SCSI hard drive). If you boot from a drive other than
# /dev/hda, change the following line
boot = /dev/hda

# Set a sane videomode
vga = normal

# Set the delay in milli-seconds. This is the time you have to
# press the 'SHIFT' hey to bring up the LILO prompt if you

# haven't specified the 'prompt' directive
delay = 50

# Name of the boot loader. No reason to modify this unless you're
# doing some serious hacking on LILO
install = /boot/boot.b

# This forces LILO to prompt you for the OS you want to boot
# A 'TAB' hey at the LILO prompt will display a list of the OSs
# available to boot according to the names given in the 'label='
# directives belov;
prompt

# Have LILO perform some optimisation
compact

# Stanza for Linux root partition on /dev1hda1
image = vmlinuz     # Location of kernel
label = linux       # Name of OS (for the LILO boot menu)
root = /dev/hda1    # Location of root partition
read-only           # Mount read only

# Stanza for MSDOS partition on /dev/hda2
other = /dev/hda2   # Location of partition
table = /dev/hda2   # Location of partition table for /dev/hda2
label = msdos       # Name of OS (for boot menu)

Записи первой операционной системы в файле config это та ОС, которую LILO загружает по умолчанию. Вы можете выбрать другую ОС во время загрузки в ответ на подсказку LILO, как это уже обсуждалось ранее. Помните, что каждый раз, когда вы изменяете образ ядра на диске, вы должны заново выполнить /sbin/lilo, чтобы изменения отразились в загрузочном секторе вашего диска. Имейте также в виду, что если вы используете здесь строку ``root='', нет смысла использовать rdev для установки корневого раздела в образе ядра. LILO установит его сам во время загрузки.

Установщик Microsoft Windows '95 стирает менеджер загрузки LILO. Если Вы собираетесь устанавливать Windows '95 на вашей системе после установки LILO, создайте сначала диск начальной загрузки (см. раздел 4.2). С диском начальной загрузки, Вы сможете загрузить Linux и повторно установить LILO после того, как поставите Windows '95. Это делается просто: скомандуйте как root /sbin/lilo. Разделы с Windows '95 могут быть конфигурированы для загрузки через LILO с использованием тех же записей в lilo.conf, что и для загрузки с раздела MS-DOS.

Linux FAQ (см. Приложение A) дает дополнительную информацию по тому, как использовать LILO при загрузке через Boot Manager OS/2.

4.3 Выключение системы.

 

Выключить Linux не так просто. Не забывайте, что никогда нельзя просто выключить питание или нажать кнопку "reset" во время работы системы. Ядро отслеживает диск при вводе-выводе с помощью буферов. Если вы перезагружаете систему, не дав шанса ядру переписать буфера на диск, вы можете попортить файловые системы. Тем не менее, переводчик лично знает прекрасных и обаятельных ребят, которые работая системными администраторами одного университета, выключают систему именно так. Должен заметить, что тот факт, что их сервер до сих пор работает, говорит не об квалификации, а о высокой устойчивости Linux, а то, что они до сих пор работают системными администраторами говорит только о том, что они нравятся администрации ВУЗа, а не об их знаниях.

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

Простейший способ выключения, это использование команды shutdown. Формат команды:

shutdown time warning-message

Здесь time задает время выключения системы (в формате hh:mm:ss или на русском чч:мм:сс), а warning-message задает сообщение, выдаваемое на терминалы всех пользователей перед выключением. Вы можете просто указать время (time) как ``now'', что приведет к безотлагательному выключению. Опция -r приведет к перезагрузке после выключения.

Например, выключить систему в 8:00 вечера можно командой:


# shutdown -r 20:00

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

ВНИМАНИЕ! На выключайте электропитание и не перезагружайте ее, пока не увидите на консоли сообщение:


The system is halted.

Важно cделать выключение "чисто", используя команды shutdown или halt. В некоторых системах нажатие ctrl-alt-del будет перехвачено системой и приведет к ее выключению, но в других системах использование "затычки для вулкана" приведет к немедленной перезагрузке системы и может быть причиной крупных неприятностей.

4.3.1 Файл /etc/inittab.

  Немедленно после начальной загрузки Linux, когда ядро смонтирует корневую файловую систему, оно запустит самую первую программу системы: init. Эта программа ответственна за старт сценариев запуска системы, и приводит систему из состояния начальной загрузки в обычное многопользовательское состояние. init также порождает login: оболочки для всех tty устройств на системе, и выполняет другие действия по запуску и парковке системы.

После запуска init остается спокойно работать в фоновом режиме, в случае необходимости он меняет состояние системы. Имеется много деталей, о которых программа init должна позаботиться. Эти задачи определены в файле /etc/inittab. Пример /etc/inittab приведен ниже.

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


# inittab    Этот файл описывает, как процесс INIT конфигурирует
#            систему на каждом уровне работы (run-level).
#
# Версия:    @(#)inittab             2.04    17/05/93        MvS
#                                    2.10    02/10/95        PV
#
# Автор: Miquel van Smoorenburg, <miquels@drinkel.nl.mugnet.org>
# Переработано: Patrick J. Volkerding, <volkerdi@ftp.cdrom.com>
# Дополнительные изменения: Robert Kiesling, <kiesling@terracom.net>
#
# Уровень по умолчанию
id:3:initdefault:

# Инициализация системы (запускается при загрузке системы)
si:S:sysinit:/etc/rc.d/rc.S

# Скрипт, который запускается в пользовательском режиме (уровень 1)
su:1S:wait:/etc/rc.d/rc.K

# Скрипт, который запускается в многопользовательском режиме
rc:23456:wait:/etc/rc.d/rc.M

# Что делать при нажатии комбинации Ctrl-Alt-Del
ca::ctrlaltdel:/sbin/shutdown -t5 -rfn now

# При уровне 0 система останавливается
l0:0:wait:/etc/rc.d/rc.0

# При уровне 6 система перезагружается
l6:6:wait:/etc/rc.d/rc.6

# Что делать при перебое в питании (выгрузка системы в режиме с
# одним пользователем)
pf::powerfail:/sbin/shutdown -f +5 "THE POWER IS FAILING"

# Если питание успело восстановиться, прекратить выгрузку системы
pg:0123456:powerokwait:/sbin/shutdown -c "THE POWER IS BACK"

# Если питание восстановилось в режиме с одним пользователем,
# то вернуться к многопользовательскому режиму
ps:S:powerokwait:/sbin/init 5

# Команды getty в многопользовательском режиме на консолях,
# подключенных к последовательным портам
#
# ВНИМАНИЕ: приведите эти команды в соответствие с
#           вашими командами getty, иначе вы не сможете
#           войти в систему!!!
#
# ВНИМАНИЕ: аргументы команды `agetty': скорость, порт
#           аргументы команды `getty_ps': порт, скорость, `gettydefs'
c1:1235:respawn:/sbin/agetty 38400 tty1 linux
c2:1235:respawn:/sbin/agetty 38400 tty2 linux
c3:1235:respawn:/sbin/agetty 38400 tty3 linux
c4:1235:respawn:/sbin/agetty 38400 tty4 linux
c5:1235:respawn:/sbin/agetty 38400 tty5 linux
c6:12345:respawn:/sbin/agetty 38400 tty6 linux

# Последовательные порты (serial lines)
# s1:12345:respawn:/sbin/agetty -L 9600 ttyS0 vt100
s2:12345:respawn:/sbin/agetty -L 9600 ttyS1 vt100

# Подключения через модем (dialup lines)
d1:12345:respawn:/sbin/agetty -mt60 38400,19200,9600,2400,1200 ttyS0 vt100
#d2:12345:respawn:/sbin/agetty -mt60 38400,19200,9600,2400,1200 ttyS1 vt100

# Уровень 4 раньше использовался только для систем X Window.
# Потом было обнаружено, что этот уровень зацикливает скрипт init,
# так что load avg все время остается равным по меньшей мере 1.
# Таким образом, теперь есть один процесс getty, открытый на
# tty6. Надеемся, что этого никто не заметит. ;^)
# Кроме того, не так уж плохо иметь одну текстовую консоль
# на случай, если что-либо случится с X.
x1:4:wait:/etc/rc.d/rc.4

# Конец файла /etc/inittab

При запуске системы /etc/inittab запускает 6 виртуальных консолей, и выдает запрос login: на модем на порте /dev/ttyS0 и на символьный терминал, подключенный через RS-232 к последовательному интерфейсу /dev/ttyS1.

init проходит через несколько уровней выполнения (run levels ), каждый из которых соответствует определенному состоянию системы. Уровень 1 ставится немедленно после начальной загрузки системы, уровни 2 и 3 нормальные многопользовательские режимы работы системы, уровень 4 запускает X Window System с менеджером дисплея X xdm, уровень 6 перезагружает систему. Уровни выполнения указываются для каждой команды во втором элементе каждой строки файла /etc/inittab.

Например, строка:


s2:12345:respawn:/sbin/agettн -L 9600 ttyS1 vtlOO

выведет запрос login на последовательный терминал для уровней выполнения 1-5. ``s2'' перед первым двоеточием символический идентификатор, используемый внутри init. respawn является ключевым словом init, которое часто используется с последовательными терминалами. Если после некоторого времени программа agetty, которая ведает входом через терминал, не получает ввода с терминала, она завершается. ``respawn'' предписывает init повторно выполнить agetty, для обеспечения постоянной возможности входа в систему через терминал. Остальные параметры передаются прямо agetty и определяют оболочку, запускаемую при входе в систему, скорость последовательной линии, последовательное устройство и тип терминала, заданный в /etc/termcap или /etc/terminfo.

Программа /sbin/agetty обрабатывает много деталей, связанных с терминальным вводом-выводом в системе. Есть несколько различных версий, которые обычно используются на Linux системах. Они включают mgetty, psgetty, или простую программу getty.

В случае такой строки в файле /etc/inittab:


d1:12345:respawn:/sbin/agetty -mt50 35400,19200,9500,2400,1200 ttySO vtl00

которая позволяет пользователям войти через модем, связанный с последовательным устройством /dev/ttyS0, параметры ``-mt60'' для /sbin/agetty позволяют системе использовать все скорости модема, которые использует вызывающий абонент, и прерывать связь, если соединение не установлено через 60 секунд. Поддерживаемые модемом скорости перечисляются в командной строке так же, как скорости для последовательной линии или тип терминала. Конечно, оба модема должны поддерживать скорость до которой договорились машины в момент установления соединения.

Много важных деталей не рассмотрено в данном разделе. Задачи /etc/inittab занимают объем с хорошую книгу (может, я и соберусь ее написать). Подробности можно найти на man-страницах по программам init и agetty, а также в Linux Documentation Project's Serial HOWTO, поискать которое можно по адресам, приведенным в Приложении A.

4.4 Управление файловыми системами.

 

Другая задача системного администратора забота о файловой системе. Большая часть этой работы состоит в проверке файловой системы на наличие поврежденных или испорченных файлов; многие системы делают такие проверки во время загрузки.

4.4.1 Монтирование файловых систем.

Сначала несколько концепций, связанных с файловыми системами. Прежде, чем файловая система будет принята вашей системой, она должна быть смонтирована в каком-то каталоге. Например, если у вас файловая система на дискете, то вы должны примонтировать ее в каталог, скажем /mnt, для того, чтобы обеспечить доступ к ее файлам (смотрите подробности здесь). После монтирования файловой системы все файлы этой системы появляются в этом каталоге (и ниже). После размонтирования файловой системы каталог (в нашем случае /mnt) будет пуст, то же самое справедливо для файловой системы на жестком диске. Каталог /mnt будет пуст, если он был пуст до монтирования, иначе наоборот, станут видными файлы каталога /mnt (основной системы), которые становятся невидимыми, когда к этому каталогу монтируется файловая система).

Система автоматически монтирует файловые системы на ваш жесткий диск во время загрузки. Так называемая "корневая файловая система" монтируется к каталогу /. Если у вас отдельные файловые системы, например, для /usr, она монтируется в /usr. Если у вас только корневая файловая система, то все файлы, включая содержимое /usr, существуют в этой файловой системе.

Команды mount и umount (НО НЕ unmount!!!) используются для монтирования и демонтирования файловых систем. Команда:


mount -av

выполняется автоматически из файла /etc/rc или /etc/rc.d/boot при загрузке системы. Файл /etc/fstab хранит сведения о файловых системах и точках монтирования. Пример файла /etc/fstab:  

# device   directory  type  options
/dev/hda2  /          ext2  default
/dev/hda3  /usr       ext2  default
/dev/hda4  none       swap  sw
/proc      /proc      proc  none

Первое поле, device, задает имя раздела для монтирования. Второе поле задает точку монтирования. Третье поле задает тип файловой системы, например для ext2fs тип ext2, а для Minix file system тип будет minix. В таблице указаны наиболее распространенные типы файловых систем. Не все файловые системы из списка поддерживаются вашей конкретной системой, поскольку в ядро должна быть скомпилирована поддержка для каждой системы, а реально туда компилируется только поддержка одной-двух нужных постоянно систем. Подробнее о построении ядра можно почитать здесь.

  

Файловая система Тип для /etc/fstab Описание применения
Вторая расширенная файловая система ext2 Second Extended File system (наиболее распространенная файловая система для ОС Linux).
Расширенная файловая система ext Extended File system (прототип ext2).
Minix minix Специально разработана для ОС Minix, сейчас используется редко. Можно встретить на спасательных дискетах.
Xiafs xia Аналогична ext2, но редко используется (меньше возможностей).
UMSDOS umsdos Для установки системы Linux в разделе MS-DOS.
FAT * msdos Для доступа к файлам MS-DOS/Windows и других систем с поддержкой FAT12/16/32/VFAT.
/proc proc Обеспечивает информацию о процессах для ps и т.п.
ISO 9660 iso9660 Формат большинства дисков CD-ROM.
Xenix xenix Для доступа к файлам системы Xenix.
System V sysv Для доступа к файлам системы System V (версии для x86?).
Coherent coherent Для доступа к файлам системы Coherent.
HPFS hpfs Доступ к разделам HPFS (OS/2).
NTFS ntfs Для доступа к файлам системы NTFS (Windows NT/2000).
HFS hfs Для доступа к файлам систем HFS и HFS+ (MacOS).
PhotoCD photocd Для доступа к файлам на дисках Kodak Photo CD.
Audio audio Для доступа к дискам CD Audio, которые можно слушать на компьютере.

Таблица 4.1: Типы файловых систем в Linux.

Linux с дополнительными драйверами расширения ядра поддерживает практически все существующие файловые системы.

Последнее поле в строке файла fstab задает параметры для mount. Обычно там установлено defaults.

Раздел свопа включен в файл /etc/fstab. Он имеет точку монтирования none и тип swap. Команда swapon -a, которая вызывается из /etc/rc или из /etc/init.d/boot, включает свопинг для всех разделов свопа, указанных в файле /etc/fstab.

Файл /etc/fstab содержит специальную запись для файловой системы /proc. Как сказано выше, файловая система /proc используется для хранения информации о системе, процессах, доступной памяти и прочей технической информации. Фактически данная система предоставляет интерфейс к сервисам ядра. Если /proc не смонтирована, команды подобные ps не работают.

Команда mount может использоваться только root. Это сделано для обеспечения безопасности системы. Вам не захочется, чтобы монтирование и размонтирование файловых систем зависело от прихоти рядовых пользователей. Есть несколько программных пакетов, которые дают возможность тем самым рядовым пользователям монтировать и размонтировать файловые системы (особенно на дискетах) не затрагивая безопасности системы.

Команда mount -av фактически монтирует все файловые системы, кроме корневой файловой системы (в ранее приведенной таблице /dev/hda2). Корневая файловая система автоматически монтируется ядром во время загрузки.

Вместо использования mount -av вы можете примонтировать файловую систему вручную. Команда:


# mount -t ext2 /dev/hda3 /usr

эквивалентна монтированию файловой системы на /dev/hda3 в примере /etc/fstab, рассмотренном ранее.

4.4.2 Имена устройств.

  В дополнение к именам разделов, перечисленных в файле /etc/fstab, Linux распознает номера устройств гибких и жестких дисков. Они классифицируются по типу, интерфейсу и порядку подключения. Например, первый жесткий диск, если он имеет IDE или старый MFM интерфейс, имеет имя устройства /dev/hda. Первый его раздел /dev/hda1, второй раздел /dev/hda2, третий раздел /dev/hda3... Первый раздел второго IDE устройства /dev/hdb1, второй раздел /dev/hdb2 и так далее. Схема именования для обычных x86-машин с шинами ISA и PCI дана в таблице 4.2.

  

Драйвер устройства Диск
/dev/hda Основной (Master) диск на первом (primary) шлейфе IDE.
/dev/hdb Дополнительный (Slave) диск на первом (primary) шлейфе IDE.
/dev/hdc Основной (Master) диск на втором (secondary) шлейфе IDE.
/dev/hdd Дополнительный (Slave) диск на втором (secondary) шлейфе IDE.

Таблица 4.2: Имена IDE устройств.

CD-ROM и стриммеры, использующие IDE/ATAPI интерфейс, также используют данные имена устройств.

Некоторые машины, в основном крутые персоналки и рабочие станции на процессорах Digital Equipment Corporation's Alpha, используют Small Computer System Interface (SCSI). Соглашения об именах SCSI устройств сильно отличаются от приведенных выше по причине большей гибкости адресации SCSI. Первый SCSI жесткий диск в системе /dev/sda, второй SCSI жесткий диск /dev/sdb... Список обычных SCSI устройств дан в таблице 4.3.

  

Драйвер устройства Устройство
/dev/sda Первый жесткий диск SCSI.
/dev/sdb Второй жесткий диск SCSI.
/dev/st0 Первый стриммер SCSI.
/dev/st1 Второй стриммер SCSI.
/dev/scd0 Первое устройство чтения SCSI CD-ROM.
/dev/scd1 Второе устройство чтения SCSI CD-ROM.

Таблица 4.3: Имена SCSI устройств.

SCSI CD-ROM и стриммеры именуются не так, как жесткие диски на SCSI. Сменные SCSI средства, например Iomega Zip drive, следуют соглашениям наименования для несменных дисков SCSI. Использование Iomega Zip drive для резервирования описано ниже.

Стриммеры с поддержкой форматов магнитной ленты QIC-02, QIC-40 и QIC-80 имеют собственный набор имен устройств, который описан ниже.

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

4.4.3 Проверка файловых систем.

 

Бывает полезно почаще проверять вашу файловую систему на наличие поврежденных и испорченных файлов. Некоторые системы автоматически проверяют свои файловые системы во время загрузки (с помощью соответствующих команд из /etc/rc или /etc/init.d/boot).

Для проверки файловых систем используются команды, зависящие от типа файловой системы. Для файловой системы ext2fs (самый широко используемый тип), такой командой служит e2fsck. Например, команда:


# e2fsck -av /dev/hda2

проверит файловую систему ext2fs на /dev/hda2 и автоматически исправит ошибки.
Обычно бывает полезно размонтировать файловую систему перед ее проверкой. Это необходимо, если e2fsck должна выполнить любой ремонт файловой системы. Например команда:

# umount /dev/hda2

размонтирует файловую систему на /dev/hda2, после чего вы можете ее проверить. Есть одно исключение, вы не можете размонтировать корневую файловую систему. Для того, чтобы проверить размонтированную корневую файловую систему вам следует использовать специальную boot/root дискету. Вы также не можете размонтировать файловую систему, если хотя бы один из ее файлов "занят" (``busy''), т.е. используется действующим процессом. Например, вы не можете размонтировать файловую систему, если хотя бы один из текущих рабочих каталогов пользователя находится на этой файловой системе. Вы получите сообщение ``Device busy'', если вы попытаетесь размонтировать используемую файловую систему.

Другая файловая система использует различные формы команды e2fsck, такие как efsck и xfsck. На некоторых системах вы можете просто использовать команду fsck, которая определит тип файловой системы и выполнит соответствующую команду.

Внимание! Необходимо немедленно перезагрузить операционную систему после проверки смонтированной файловой системы, если были внесены какие-то изменения в файловую систему. Например, если e2fsck сообщает, что она исправила хотя бы одну ошибку в файловой системе, вам следует немедленно выполнить shutdown -r, чтобы перезагрузить систему. Это позволит системе ресинхронизировать информацию о файловой системе, после модификации ее с помощью e2fsck (то есть, снова согласовать содержимое буферов памяти с соответствующими фрагментами файловой системы на диске).

Файловая система /proc никогда не нуждается в проверках такого рода. /proc файловая система памяти, управляемая непосредственно ядром.

4.5 Использование своп-файла.

 

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

Если у вас есть инсталлированная система Linux, вы можете использовать следующие команды для создания файла свопинга. Ниже мы собираемся создать файл свопинга размером в 8208 блоков (около 8 Мбайт):


# dd if=/dev/zero of=/swap bs=1024 count=8208

Эта команда создает файл свопинга /swap. Замените ``count='' размером файла свопинга в блоках:

# mhswap /swap 8208

Эта команда инициализирует swap-файл; вновь замените имя и размер своп-файла соответствующими значениями:

# sync
# swapon /swap

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

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

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

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

Для того, чтобы избавиться от файла свопинга, вначале используйте swapoff:


# swapoff /swap

А теперь вы можете смело удалить файл:


# rm /swap

4.6 Работа с пользователями.

  

Вне зависимости от того, много у вас пользователей или нет, важно понять проблему работы с пользователем Linux. Даже если вы единственный пользователь вы должны иметь различные account для root и для себя.

Каждый человек, использующий систему, должен иметь свой собственный account (быть индивидуально зарегистрированным в системе). Редко может быть целесообразно, чтобы несколько человек входили в систему под одним именем. Здесь дело не только в безопасности, но account используется для идентификации пользователя в системе. Необходимо иметь возможность проследить, кто что делает.

4.6.1 Концепция работы с пользователями.

Система хранит следующую информацию о каждом пользователе:

username

уникальный идентификатор, присваиваемый каждому пользователю в системе. Примеры имен пользователей larry, karl и mdw. Могут использоваться буквы и цифры, а также нижнее подчеркивание и точка. Обычно имена пользователей ограничиваются восемью символами.

user

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

group

ID (или GID), идентификатор группы, это идентификатор группы пользователя. Мы уже обсуждали права группы; каждый пользователь принадлежит к одной или более группам, определенных системным администратором. Подробнее об этом ниже.

password

Система также хранит в зашифрованном виде пароль пользователя. Команда passwd используется для установки и изменения пароля.

full name

"Полное имя" или "действительное имя" хранится вместе с именем пользователя. Например, пользователь schmoj может иметь действительное имя ``Joe Schmo''.

home directory

Домашний каталог это каталог, в который пользователь попадает при входе в систему. Каждый пользователь должен иметь свой собственный домашний каталог, обычно в /home.

login shell

Исходный shell это shell, который запускается для пользователя при его входе в систему. Это, например, может быть /bin/bash или /bin/tcsh.

Информация хранится в файле регистрации пользователей /etc/passwd. Каждая строка этого файла описывает одного пользователе; формат строки имеет вид:


user name:encrypted password:UID:GID:full name:home directory:login shell

Например, это может выглядеть так:


kiwi:Xv8Q981g71oKK:102:100:Laura Poole:/home/kiwi:/bin/bash

Первое поле, ``kiwi'', имя пользователя. Следующее поле, ``Xv8Q981g71oKK'', зашифрованный пароль. Пароли в читаемом виде в системе не хранятся. Сами пароли шифруются как секретные ключи. Другими словами, вы должны знать пароль, чтобы его расшифровать. Эта форма шифрации достаточно надежна. Замечание переводчика: смотря какой пароль...

Некоторые системы Linux используют "теневой пароль", в котором информация о паролях хранится в файле /etc/shadow. Поскольку /etc/passwd всем доступен, /etc/shadow обеспечивает дополнительный уровень секретности своей недоступностью. Теневой пароль обеспечивает и некоторые другие свойства, вроде прекращения действия пароля (пароль выдыхается).

Третье поле, ``102'', идентификатор пользователя (UID). Оно должно быть уникальным для каждого пользователя. Четвертое поле, ``100'', идентификатор группы (GID). Этот пользователь принадлежит к группе номер 100. Информация по группе хранится в файле /etc/group. Смотрите дополнительную информацию в Разделе 4.6.5.

Пятое поле, полное имя пользователя, ``Laura Poole''. Последние два поля, домашний каталог пользователя (/home/kiwi) и исходный shell (/bin/bash) соответственно. Домашний каталог пользователя не обязательно должен иметь имя, совпадающее с именем пользователя (username). Однако это помогает в идентификации.

4.6.2 Добавление пользователей.

При добавлении пользователя следует совершить несколько шагов. Пользователь должен быть занесен в файл паролей /etc/passwd под уникальным именем и идентификатором. Должны быть описаны идентификатор группы (GID), полное имя и другая информация. Должен быть создан домашний каталог пользователя и установлены необходимые права доступа. Домашний каталог должен быть снабжен необходимыми файлами инициализации shell. Должны быть выполнены и другие работы по конфигурации ( например, создан spool для входной почты).

Хотя очень несложно добавлять пользователей вручную (я так делаю), когда вы сопровождаете систему со многими пользователями, легко что-то упустить. Самый простой способ регистрации пользователей, это использование диалоговой программы, которая задаст вам все необходимые вопросы и автоматически скорректирует все необходимые системные файлы. Эта программа называется useradd или adduser, в зависимости от вашего дистрибутива. Страницы руководства для этих программ должны быть достаточно понятными. adduser использует в своей работе файл настроек /etc/adduser.conf, который задает настройки по умолчанию для нового пользователя системы.

Вот пример обычного файла /etc/adduser.conf:


# /etc/adduser.conf 'adduser' configuration
# See adduser (8) and adduser.conf(5) for full documentation
# The DSHELL variable specifies the default login shell on your
# system
DSHELL=/bin/bash

# The DHOME variable specifies the directory containing users' home
DHOME= home

# If GROUPHOMES is "yes". then the home directories will be created as
# /home/groupname/user
GROUP HOMES=no

# If LETTERHOMES is "yes", then the created home directories will have
# an extra directory - the first letter of the user name. For example'
# home u user
LETTERHOMES=no

# The SKEL variable specifies the directory containing "skeletal" user
# files; in other words, files such as a sample profile that will be
# copied to the new user's home directory when it is created
SKEL=/etc/shel

# FIRST_SYSTEM_UID to LAST_SYSTEM_UID inclusive is the range for UIDs
# for dynamically allocated administration and system accounts
FIRST_SYSTEM_UID=100
LAST_SYSTEM_UID=999

# FIRST_UID to LAST_UID inclusive is the range of UIDs of dynamically
# allocated user accounts
FIRST_UID=1000
LAST_UID=29999

# The USERGROUPS variable can be either "yes" or "no"  If "yes" each
# created user will be given their own group to use as a default, and
# their home directories will be g+s If "no", each created user will
# be placed in the group whose gid is USERS_GID (see below).
USERGROUPS=yes

# If USERGROUPS is "no", then USERS_GID should be the GID of the group
# 'users' (or the equivalent group) on your system
USERS_GID=100

В дополнение к предустановленным переменным, которые нужны команде adduser, /etc/adduser.conf определяет где по умолчанию лежат системные файлы настроек для каждого пользователя. В данном примере они лежат в каталоге /etc/skel, как определено в переменной SKEL=. Файлы в данном в каталоге, являются настройками системы по умолчанию для каждого пользователя. Это, например, .profile, .tcshrc или .bashrc, которые автоматически копируются в домашний каталог нового пользователя командой adduser. Если Вы считаете нужным разместить в домашнем каталоге каждого нового пользователя еще какие-то файлы настроек (например, для иксов), положите их в каталог /etc/skel.

4.6.3 Удаление пользователей.

Удаление пользователей может быть выполнено с помощью команд userdel или deluser в зависимости от каждого конкретного дистрибутива.

Если вы пожелаете временно "отключить" пользователя от системы, (без удаления его аккаунта), вы можете просто приписать звездочку (``*'') в поле пароля в файле пароля /etc/passwd. Например, изменение пароля у kiwi в файле /etc/passwd:

kiwi:*Xv80981g71oKK:102:100:Laura Poole:/home/kiwi:/bin/bash

закроет для kiwi вход в систему.

4.6.4 Настройка атрибутов пользователя.

После создания пользователя вам может потребоваться изменить его атрибуты, такие как домашний каталог и пароль. Простейший способ, это прямо изменить значения в /etc/passwd. Чтобы установить пароль пользователя используйте команду passwd:


# passwd larry

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

В некоторых системах имеются команды chfn и chsh, позволяющие пользователю самому устанавливать свое полное имя и исходные атрибуты shell. Если таких команд нет, то пользователи должны просить системного администратора изменить эти атрибуты для них.

4.6.5 Группы.

 

Как мы говорили, каждый пользователь принадлежит к одной или более группам. Единственное значение группы замыкается на права доступа к файлу, как вы помните из раздела 3.10. Каждый файл имеет "групповое владение" (``group ownership''), то есть хранит права доступа, которые определяют, как члены группы могут обращаться с файлом.

Существует несколько групп, определяемых системой, вроде bin, mail и sys. Пользователи не могут принадлежать к какой-либо из этих групп. Эти группы используются для системных файлов. А пользователи, наоборот, принадлежат к специальной группе, например users. Если вам хочется больше проблем, вы можете поддерживать несколько групп пользователей, например student, staff и faculty.

Файл /etc/group содержит информацию о группах. Формат каждой строки следующий:


group name:password:GID:other members

Примерами групп могут быть:


root:*:0
users:*:100:mdw,larry
guest:*:200
other:*:250:kiwi

Первая группа, root, специальная системная группа зарезервированная для root. Следующая группа, users, для обычных пользователей. Она имеет идентификатор группы (GID) 100. К этой группе имеют доступ пользователи mdw и larry. Помните, что в /etc/passwd каждый пользователь получил выдаваемый по умолчанию GID. Но пользователь может принадлежать более, чем к одной группе, путем добавления имен пользователей в другие группы (в строки файла /etc/group). Команда groups перечисляет, в какие группы вы входите.

Третья группа, guest, для гостей, а other для "других" пользователей. Пользователь kiwi имеет доступ и в эту группу.

Как вы можете видеть, поле "пароль" в /etc/group редко используется. Иногда оно используется для установления пароля на доступ к группе. Это редко бывает нужно. Для защиты привилегированных групп от обычных пользователей (с помощью команды newgroup) установите в поле пароля звездочку ("*").

Команды addgroup или groupadd могут быть использованы для добавления групп в вашу систему. Обычно легче просто самому добавить запись в /etc/group, поскольку не требуется других настроек при добавлении группы. Для удаления группы просто удалите соответствующую запись в /etc/group.

4.6.6 Обязанности администратора системы.

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

Поскольку root имеет в системе такие привилегии, требуется определенный уровень зрелости и самоконтроля, чтобы использовать этот аккаунт так, как это было задумано: для эксплуатации системы. Существует негласный закон чести в отношениях администратора с пользователями. Как вы будете себя чувствовать, если системный администратор читает ваши письма и просматривает ваши файлы? До сих пор нет достаточно серьезной юридической основы для неприкосновенности личной информации в многопользовательских компьютерных системах. В системах семейства UNIX пользователь root имеет возможность преодолевать все штатные механизмы защиты системы. Важно, чтобы у администратора были доверительные отношения с пользователями системы. Невозможно переоценить важность этого.

4.6.7 Взаимодействие с пользователями.

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

Системный администратор может выбрать две тактики взаимодействия с злоупотребляющими пользователями. Это может быть параноидная тактика и тактика доверия. Системный администратор с паранойей обычно своими действиями наносит больше вреда, чем предотвращает. Одна из моих любимых присказок: "Никогда не списывай на зловредность то, что можно списать на тупость". Взгляните с другой стороны, большинство пользователей не имеют возможностей и знаний, чтобы причинить реальный вред системе. 90% процентов того, что делает пользователь, причиняя вред системе (например, забивая пользовательский раздел огромными файлами или выполняя сразу несколько экземпляров громадной программы), он делает просто не подозревая, что он кому-то создает проблемы. Мне приходилось сталкиваться с пользователями, которые были источниками огромных неприятностей, но они действовали по простоте душевной, а не со зла.

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

Если вы убедились, что пользователь действительно пытается ``взломать'' систему или умышленно ей вредит, старайтесь не отвечать угрозами на угрозы. Вместо этого просто предупредите его, но сохраняйте гибкость. Во многих случаях вы можете "схватить его за руку" в процессе свершения вредительства, вот тут и предупредите. Скажите, чтобы он так больше не делал. Но если вы снова его поймаете на вредительстве, то убедитесь, что это действительно намеренно. Я просто не смогу перечислить все случаи, когда оказывалось, что неприятность была либо случайной, либо я сам был виноват.

4.6.8 Установление правил.

Лучший способ управления системой, это управление без применения железного кулака. Может так вы хорошо управляли в армии, но это не для UNIX. Имеет смысл сделать простой и гибкий свод руководств для пользователей, но чем меньше у вас будет правил, тем меньше шансов их нарушить. Даже если ваши правила использования системы очень ясны и разумны, пользователи все равно время от времени будут их без злого умысла нарушать. Это, в особенности, относится к новичкам в UNIX, которые еще только изучают основы системы. Да и вы сами можете время от времени рассылать гигабайтные файлы всем пользователям системы... Пользователям надо помочь понять правила и объяснить, зачем они нужны.

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

4.6.9 Что все это значит.

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

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

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

4.7 Архивация и компрессирование (сжатие) файлов.

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

4.7.1 Использование tar.

Команда tar наиболее часто используется для архивации файлов. Формат команды tar:


tar opilons files

где options есть список команд и опций для tar, а files список файлов добавляемых в архив или извлекаемых из него.

Например, команда:


# tar cvf backup.tar /etc

упакует все файлы, содержащиеся в /etc, в архив tar под именем backup.tar. Первый аргумент команды tar, ``cvf', это (внутренняя) команда tar. ``c'' указывает tar создать новый архивный файл. Опция ``v'' заставляет tar выводить имя каждого архивируемого файла. Опция ``f'' говорит, что следующий аргумент, backup.tar, имя созданного архивного файла. Остальные аргументы команды tar, имя файла архива и имя добавляемого в архив каталога. Команда:

# tar xvf backup.tar

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

Поэтому перед извлечением архивированных файлов важно знать, где файлы следует распаковать. Например, вы заархивировали следующие файлы: /etc/hosts, /etc/group и /etc/passwd. Если вы используете команду:


# tar cvf backup,tar /etc/hosts /etc/group /etc/passwd

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

# cd
# tar wf backup tar

поскольку файлы извлечены с сохраненным в архиве путем.

Если вы заархивировали файлы командой:


# cd /etc
# tar cvf hosts group passwd

имя каталога не сохраняется в архивном файле. Поэтому вы должны выполнить ``cd /etc'' перед извлечением файлов. Вы обратили внимание: то, как вы создали архивный файл сильно влияет на то, в каком месте его следует извлекать. Команда:

# tar tvf backup.tar

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

4.7.2 gzip и compress.

В отличие от архивирующих программ для MS-DOS, tar не сжимает автоматически файлы в процессе архивирования. Поэтому, если вы архивируете два одномегабайтных файла, результирующий архивный файл будет размером два мегабайта. Команда gzip может использоваться для сжатия файла (сжимаемый файл не обязан быть tar-файлом). Команда:

# gzip -9 backup tar

сожмет backup.tar и оставит вас наедине с backup.tar.gz, сжатой версией файла. Опция -9 говорит команде gzip, что следует использовать максимально возможную компрессию.

Команда gunzip может быть использована для расжатия сжатого файла. С аналогичным эффектом вы можете использовать команду ``gzip -d''.

gzip сравнительно новый инструмент в кругах, приближенных к UNIX. Долгие годы вместо этого использовалась команда compress. Однако, по нескольким причинам (тут и патентные проблемы относительно алгоритма, и то, что gzip значительно эффективнее) compress оказался не у дел.

Обработанные командой compress файлы заканчивались расширением .Z. Например, backup.tar.Z это сжатая compress версия файла backup.tar, а backup.tar.gz сжатая gzip версия. Чтобы еще надежнее запутать дело, для обозначения gzip файлов некоторое время использовалось расширение .z (маленькая ``z''). В настоящее время официальное расширение .gz. Команда uncompress используется для развертывания файла, который был обработан командой compress. Функционально она равнозначна команде compress -d. Но команда gunzip тоже знает, как обращаться с такими файлами.

4.7.3 Можно вместе.

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


# tar cvf backup.tar /etc
# gzip -9 backup.tar

Результат будет backup.tar.gz. Для распаковки этого файла используйте обратную последовательность команд:

# gunzip backup.tar.gz
# tar xvf backup.tar

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

Вы можете опереться на некоторую сообразительность UNIX, позволяющего сделать это одной командной строкой:


# tar cvf - /etc|gzip -9c>backup.tar.gz

Здесь мы посылаем tar-файл, сформированный из /etc, в файл ``-'', который представляет стандартный вывод. Результат по конвейеру поступает на ввод команды gzip, которая сжимает этот файл и результат сохраняет в backup.tar.gz. Опция -c команды gzip говорит, что вывод команды gzip посылает результат на стандартный вывод, который перенаправляется на backup.tar.gz.

Единственная команда для распаковки этого архива:


# gunzip -c backup.tar.gz|tar xvf -

Опять, команда gunzip рассжимает содержимое файла backup.tar.gz и посылает результирующий файл на стандартный вывод. Он по конвейеру передается команде tar, которая читает файл ``-'', что в данном случае олицетворяет стандартный вывод.

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

Команда:


# tar cvf backup.tar.gz /etc

эквивалентна:

# tar cvf backup.tar /etc
# gzip backup.tar

Как и команда:

# tar xvf backup.tar.Z

может быть использована вместо:

# uncompress backup.tar.Z
# tar xvf backup.tar

За дополнительной информацией обратитесь к man-руководству по tar и gzip.

4.8 Использование дискет и осуществление резервирования.

     Дискеты часто используются как средство резервирования. Если у вас нет (стриммера), можно использовать дискеты (хотя они медленнее и, в некотором смысле, менее надежны).

Как упоминалось выше, дискеты должны быть отформатированы программами MS-DOS FORMAT.COM или Linux fdformat.

Некоторые имена устройств и доступные в Linux форматы дискет приведены в таблице 4.4.

  


Floppy device driver   Format

/dev/fd0d360           Double density 360Kb 5.25
/dev/fd0h1200          High density 1.2 MB 5.25
/dev/fd0h1440          High density 1.44 MB 3.5


Таблица 4.4: Форматы дискет в Linux.

Устройства начинаются с fd0, что соответствует первому дисководу для дискет, который называется A: в системе MS-DOS. Имя второго дисковода fd1. Вообще, ядро Linux может определить формат дискеты, которая уже отформатирована: можно просто указать /dev/fd0 и оставить определение формата на долю системы. Но когда вы используете еще не отформатированную дискету, такой фокус не пройдет.

Полный перечень устройств и их имен в Linux опубликован в Linux Allocated Devices,, автор H. Peter Anvin (см. приложение A).

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

4.8.1 Резервирование на дискеты.

     Простейший способ резервирования на дискетах, это использование команды tar. Команда:


# tar cvfsM /dev/fd0

сделает полную копию вашей системы с использованием дисковода /dev/fd0. Опция ``M'' позволяет копировать на несколько дискет (multivolume backup); то есть, когда одна дискета заполнится, tar запросит следующую. Команда:

# tar xvfsM /dev/fdO

может быть использована для полного восстановления. Этот метод может быть также использован для лент (/dev/rmt0). Подробности о лентах в разделе 4.8.3.

   Существует несколько других программ для осуществления многотомного резервирования. Вам могут пригодиться программы "backflops", которые можно взять на tsx-11.mit.edu.

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

   Команда find может быть полезна в выискивании файлов, которые изменились после какой-то даты. Несколько скриптов (командных файлов на shell) для инкрементального резервирования можно найти на sunsite.unc.edu.   

4.8.2 Резервирование на Zip диски.

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

Zip диски доступны с тремя типами интерфейса: SCSI, IDE и параллельный порт PPA. Поддержка Zip дисков не входит в настройки скомпилированного ядра Linux по умолчанию, но она может быть указана при построении заказного ядра для вашей системы. Подробнее о компиляции ядра см. ниже.

SCSI и PPA интерфейсы Zip дисков используют SCSI интерфейс и соглашения об именах SCSI устройств, которые описаны здесь.

Zip отформатированы производителем в файловой системе a MS-DOS. Вы можете использовать имеющуюся файловую систему MS-DOS, которая должна поддерживаться Вашим ядром Linux kernel, или использовать mke2fs для создания на диске файловой системы Linux.

Zip диск, который смонтирован на первом SCSI устройстве, называется /dev/sda4.


# mount /dev/sda4 /mnt

Для доступа к диску нужна отдельная точка монтирования, например, /zip. Чтобы ее создать скомандуйте от имени root:


# mhdir /zip
# chmod 0755 /zip

Теперь Вы можете использовать /zip для монтирования файловой системы с Zip диска.

Запись архива на Zip диск аналогично записи на дискету. Для архивации и сжатия каталога /etc на смонтированный Zip диск скомандуйте:


# tar zcvf /zip/etc.tgz /etc

Данная команда может быть выполнена из произвольного каталога, поскольку указывает полное имя файла. Архив будет назван etc.tgz, если на Zip диске файловая система MS-DOS, в которой имя файла должно соответствовать соглашениям MS-DOS 8+3, в противном случае имя файла будет обрезано.

Для распаковки данного архива, скомандуйте:


# cd /
# tar zxvf /zip/etc.tgz

Для создания, например, файловой системы ext2 на Zip диске, скомандуйте (на размонтированном Zip диске):


# mke2fs /dev/sda4

Смонтировав Zip диск с файловой системой ext2, можно зарезервировать все файловые системы одной командой:


# tar zcvf /zip/local.tar.gz /usr/local

Заметьте, что резервирование программой tar все еще предпочтительнее, чем архивация командой cp -a, поскольку tar сохраняет время модификации файлов.

4.8.3 Резервирование на стриммер.

 

Архивация на ленту аналогично архивации на дискеты, только отличается драйвер устройства. Ленты также форматируются и обрабатываются по-другому, чем гибкие дискеты. Некоторые драйверы стриммера для Linux перечислены в таблице 4.5.

  

Драйвер стриммера Формат
/dev/rft0 Лента QIC-117, перемотка при закрытии.
/dev/nrft0 Лента QIC-117, нет перемотки при закрытии.
/dev/tpqic11 Лента QIC-11, перемотка при закрытии.
/dev/ntpqic11 Лента QIC-11, нет перемотки при закрытии.
/dev/qft0 Стриммер габарита 1/2, перемотка при закрытии.
/dev/nqft0 Стриммер габарита 1/2, нет перемотки при закрытии.

Таблица 4.5: Имена устройств стриммера.

Некоторые стриммеры используют контроллер дискет и управляются ftape драйвером, который описан ниже. Инсталляция модуля драйвера ftape описана здесь. Имена SCSI стриммеров перечислены а таблице 4.3.

Для архивации каталога /etc на стриммер с применением tar скомандуйте:


# tar cvf /dev/qftO /etc

Для распаковки файлов с ленты, скомандуйте:


# cd /
# tar xvf /dev/qftO

Ленты, как и дискеты, перед использованием должны быть отформатированы. Драйвер ftape может форматировать ленты под Linux. Для форматирования ленты формата QIC-40 скомандуйте:


# ftformat -format-parameter qic40-205ft -mode-auto --omit-erase -discard-header

Другие стриммеры имеют свой софт для форматирования. Посмотрите документацию на стриммер или на связанный с ним драйвер устройства.

Перед извлечением ленты из стриммера ее надо перемотать и записать на ленту буфера ввода-вывода. Это аналог размонтирования файловой системы на дискете перед ее извлечением, поскольку стриммер также буферизуется в памяти. Стандартной командой UNIX для управления стриммером является mt. Ваша система может и не поддерживать эту команду. Ftape драйвер имеет подобную команду, ftmt, которая используется, чтобы управлять операциями с лентами.

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


# ftmt -f /dev/qftO retension

Конечно, впишите правильное имя стриммера для вашей системы.

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


# ftmt -f /dev/qftO status

4.8.4 Использование дискет в качестве файловых систем.

     

Вы можете создать файловую систему на дискете точно также, как в разделе жесткого диска. Например:


# mke2fs /dev/fd0 1440

создает файловую систему на дискете на /dev/fd0. Размер файловой системы должен соответствовать размеру дискеты. Дискеты high-density 3.5" емкостью в 1.44 Mбайт или 1440 блоков. Дискеты high-density 5.25" емкостью в 1200 блоков. Указание размера файловой системы нужно, если система не может сама определить емкость дискеты.

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


# mount /dev/fd0 /mnt

примонтирует дискету, находящуюся на /dev/fd0 к каталогу /mnt. Теперь все файлы, находящиеся на дискете, будут находиться в каталоге /mnt вашего жесткого диска.

"Точка монтирования" (каталог, к которому вы примонтируете файловую систему) должен существовать, когда вы применяете команду mount. Если он не существует, создайте его с помощью команды mkdir, как описано здесь.

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

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


# umount /dev/fd0

Нельзя просто взять и вытащить дискету, как в MS-DOS. При замене дискет сначала размонтируйте одну командой umount, а затем примонтируйте вторую командой mount.

4.9 Модернизация и инсталляция программ.

    

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

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

Ну, так когда желаете заняться модернизацией? Некоторые нутром чувствуют, что заниматься модернизацией пристало тогда, когда появилась новая версия дистрибутива, например, когда появляется новая версия Slackware. Многие пользователи Linux каждый раз при этом полностью переинсталлируют свою систему. Это тоже потеря времени. Обычно изменения от версии к версии Slackware незначительные. Бессмысленно переписывать и переинсталлировать 30 дисков, когда только 10% программ были действительно модифицированы.

Лучший вариант модернизации системы это ручная работа: модернизируйте только те программные пакеты, про которые вы точно знаете, что их стоит менять. Это многих пугает: они хотят знать, что менять, и как, и что они теряют, если не модернизируют. Залог успеха в Linux это преодолеть боязнь принципа "сделай сам", одного из фундаментальных принципов Linux.

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

Вы обнаружите, что когда вы модернизируете одну компоненту вашей системы, другие вещи не должны ломаться. Например, большая часть моей системы оставлена со времен древней 0.96 MCC Interim installation. Тем не менее, я использую новейшую версию ядра и библиотек без проблем. Большей частью бессмысленно заниматься модернизациями, чтобы "не отстать от моды". Суета все это. Это вам не MS-DOS или Microsoft Windows. У нас нет серьезных причин обязательно работать на новейшей во все времена версии системы. Если вы осознаете, что вам действительно нужны некоторые вещи из новой версии, тогда модифицируйте на здоровье. А если нет, то лучше не надо. Другими словами модернизируйте только то, что надо, и только тогда, когда надо. Не модернизируйте во имя модернизации.

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

4.9.1 Модернизация ядра.

  Обновление ядра вопрос получения источников новой версии и компилирования их. Это безболезненная процедура, но Вы можете столкнутся с проблемами, если Вы пробуете использовать версию для разработчиков. Версия ядра имеет две части: собственно версию ядра и patchlevel. На момент написания данного документа, последнее устойчивое ядро 2.0.33. 2.0 версия, и 33 patchlevel. Нечетные версии (например, 2.1), версии для разработчиков. Если не хотите проблем, держитесь от них подальше! Вообще, можно без особых проблем обновлять ядро до следующего patchlevel, но обновление до новой версии потребует обновления системных утилит, которые тесно связаны с ядром.

  Исходники ядра Linux можно найти на многих (Linux FTP сайтах. На sunsite.unc.edu, исходники лежат в каталоге /pub/Linux/kernel в подкаталогах, соответствующих номерам версий.

Исходники выпускаются в файле формата .tar.gz. Например, файл с исходниками ядра 2.0.33 называется linux-2.0.33.tar.gz.

При распаковке исходников в каталог /usr/src, создается подкаталог /usr/src/linux. Обычно /usr/src/linux является символической ссылкой на другой каталог с номером версии, например /usr/src/linux-2.0.33. Таким образом, можно ставить и тестировать исходники новой версии, не удаляя исходников старой. Ссылка создается так:


# cd /usr/src
# mkdir linux-2.0.33
# rm -r linux
# In -s linux-2.0.33 linux
# tar xzf linuK-2.0.33.tar.gz

При апгрейде на новый patchlevel имеющейся версии ядра, файлы заплаток могут сильно облегчить жизнь. Полный исходник ядра в сжатом gzip виде занимает около 7 MB. Для апгрейда с ядра версии 2.0.31 до версии 2.0.33, Вам надо скачать файлы заплаток patch-2.0.32.gz и patch-2.0.33.gz, которые есть на многих FTP сайтах. Положите полученные заплатки в каталог /usr/src, и последовательно примените их к ядру, что обновит исходник до новой версии. Например, так:


# cd /usr/src
# gzip -cd patch-2.0.32.gz|patch -p0
# gzip -cd patch-2.0.33.gz|patch -p0

После распаковки и применения патчей (заплаток), Вы должны удостовериться, что три символических ссылки в /usr/include правильны для вашего дистрибутива ядра. Создать данные ссылки можно так:

# cd /usr/include
# rm -rf asm linus scsi
# In -s /usr/src/linux/include/asm-i386 asm
# In -s /usr/src/linux/include/linux linux
# In -s /usr/src/linux/include/scsi scsi

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

  Чтобы скомпилировать ядро, Вы должны иметь gcc компилятор C, установленный в Вашей системе. Для компиляции ядра версий 2.0 нужен gcc версии 2.6.3 или более старшей.

Сначала cd в /usr/src/linux. Команда make config запросит у Вас настройки ядра. На данном шаге Вы выбираете аппаратные средства, которые ядро будет поддерживать. Самая большая ошибка, когда не включают поддержку контроллера жесткого диска. Без правильной поддержки жесткого диска в ядре, система не будет даже загружаться. Если Вы не уверены относительно того, что делает данная опция, есть короткое описание, доступное при нажатии ? и Enter.

Затем выполните команду make dep для создания всех зависимостей в ядре. Это важный шаг. Команда make clean удаляет старые двоичные файлы из дерева исходников ядра.

  Команда make zImage наконец откомпилирует ядро и положит его в файл /usr/src/linux/arch/i386/boot/zImage. Ядра Linux на системах Intel всегда сжимаются. Иногда ядро, которое Вы хотите компилировать, слишком большое, чтобы быть сжатым системой сжатия, которую использует make zImage. Компиляция ядра, которое является слишком большим, завершится сообщением об ошибке: Kernel Image Too Large. Если это случается, попробуйте команду make bzImage, которая использует систему сжатия поддержкой больших ядер. Ядро будет записано в /usr/src/linux/arch/i386/boot/bzImage.

Как только откомпилируете ядро, Вы должны или скопировать его на дискету начальной загрузки командой наподобие ``cp zImage /dev/fd0'') или установить ядро для загрузки с жесткого диска с помощью LILO. См. подробности про LILO.

4.9.2 Добавление драйвера устройства к ядру.

 

Выше описано использование Iomega Zip дисковода для резервирования. Поддержка для Iomega Zip, подобно многим другим устройствам, вообще не компилируется в дистрибутивные ядра Linux: разнообразие устройств просто слишком большое, чтобы поддерживать все в пригодном для использования ядре. Однако, исходный текст для драйвера устройства параллельного порта для работы с Zip включен как часть исходного текста ядра. Этот раздел описывает, как добавить, что поддержку для Iomega Zip параллельного порта и как сделать, чтобы он сосуществовал с принтером, подключенным к другому параллельному порту.

Вы должны сформировать и поставить заказное ядро Linux kernel, как описано в предыдущем разделе.

Выбор устройства устройства Zip ppa требует ответа Y на соответствующие вопросы на шаге конфигурации, когда Вы определяете конфигурацию заказного ядра. В частности, устройство ppa требует ответа ``Y'' на три вопроса:


SCSI support? [Y/n/m] Y
SCSI disk support? [Y/n/m] Y
IOMEGA Parallel Port Zip Drive SCSI support? [Y/n/m] Y

После успешного выполнения make config выполните make dep, make cleanи make zImage для создания ядра, Вы должны сообщить ядру, как установить драйвер. Это делается через командную строку LILO. Как описано в разделе 4.2.1, файл настройки LILO, /etc/lilo.conf имеет секции для каждой ОС, которую он знает и директивы для запроса параметров у пользователя при начальной загрузке машины.

Есть директива ``append='', которая позволяет добавлять при загрузке информацию для различных драйверов устройств в командной строке. В данном случае, драйвер Iomega Zip ppa требует свободного адреса I/O port и свободного прерывания. Это аналогично определению отдельных устройств принтера LPT1: и LPT2: под MS-DOS.

Например, если Ваш принтер использует шестнадцатеричный (основание 16) адрес порта 0x378 (см. руководство по Вашей карте параллельных портов, если адрес неизвестен) и опрашивается (то есть не требуется линия IRQ, обычная конфигурация Linux), Вы должны вписать в /etc/lilo.conf строку:


append="lp=0x378,0"

Стоит заметить, что Linux автоматически распознает один порт /dev/lp при загрузке, но в специальных конфигурациях параметры загрузки необходимы.

``0'' после адреса порта сообщает, чтобы ядро не использовало IRQ (запрос прерывания) для принтера. Это обычно применяется потому, что принтеры намного медленнее, чем CPU, более медленный метод обращения к устройствам ввода-вывода, известен как polling, где ядро периодически проверяет состояние принтера, что позволяет компьютеру не отставать от принтера.

Однако, устройства которые функционируют на более высоких скоростях, подобно последовательным линиям и дискам, требуют IRQ, или линию запроса прерывания. Это аппаратный сигнал, посылаемый устройством процессору всякий раз, когда устройство требует внимания процессора; например, если устройство имеет данные для передачи на процессор. Процессор останавливает любой процесс и обрабатывает запрос прерывания от устройства. Диск Zip ppa требует свободного прерывания, которое должно соответствовать прерыванию, которое установлено на плате принтера, к которой подключен Zip. В настоящее время драйвер устройства Linux ppa не поддерживает формирование цепочки устройств параллельного порта, так что для Zip ppa и разных принтеров должны использоваться отдельные порты.

Определить, какие прерывания уже используются в Вашей системе, можно командой:


# cat /proc/interrupt

Она отображает список устройств и линий IRQ, которые они используют. Однако, Вы также должны быть внимательным, чтобы не использовать автоматически конфигурируемое прерывание последовательного порта, которое не может быть перечислено в файле /proc/interrupt. Linux Documentation Project Serial HOWTO, доступное на сайтах, перечисленных в приложении A, подробно описывает конфигурацию последовательных портов.

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

Типичный файл /proc/interrupt выглядит примерно так:


0  6091646 timer
1  40690   keyboard
2  0       cascade
4  284686  + serial
13 1       math error
14 192560  + ideO

Нам интересен первый столбец. Он перечисляет номера линий IRQ, которые использованы в Вашей системе. Для ppa драйвера мы хотим выбрать линию, которая здесь еще не перечислена. IRQ 7 часто хороший выбор, поскольку она редко используется в заданных по умолчанию конфигурациях системы. Мы также должны определить адрес порта, который использует устройство ppa. Этот адрес должен быть физически сконфигурирован на плате интерфейса. Параллельным портам ввода-вывода назначены специфические адреса, так что Вы должны почитать документацию для вашей платы параллельного порта. В этом примере, мы используем порт ввода-вывода, адрес которого 0x278, который соответствует LPT2: порт принтера под MS-DOS.

Добавление IRQ и адреса порта в командной строке загрузчика дает следующую инструкцию (как будто, мы параметры появились в соответствующей секции файла /etc/lilo.conf:


append="lp=0x378.0 ppa=0x278.7"

Эти инструкции добавятся к параметрам запуска ядра при начальной загрузке. Они гарантируют, что любой принтер, подключенный к системе не сталкивается с Zip диском. Конечно, если ваша система не имеет принтера, директива ``lp='' может и должна быть опущена.

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


# /sbin/lilo

для установки в загрузочный сектор жесткого диска новых настроек LILO.

4.9.3 Установка модуля драйвера устройства.

  Выше описано резервирование на стриммер. Linux поддерживает много типов стриммеров с интерфейсами IDE, SCSI и дисковода для гибких дискет. Linux поддерживает драйвер ftape как модуль.

На момент написания данного документа, последняя версия ftape была 3.04d. Вы можете получить дистрибутив с FTP архива sunsite.unc.edu (см. инструкции в приложении B). Архив ftape находится в /pub/Linux/kernel/tapes. Посмотрите, какая версия там наиболее свежая. На момент написания данного документа, последняя версия ftape лежала в файле ftape-3.04d.tar.gz.

После распаковки архива ftape в каталог /usr/src, наберите make install в каталоге верхнего уровня дистрибутива ftape для компиляции модуля драйвера ftape и утилит. Если Вы испытываете проблемы совместимости с дистрибутивными файлами ftape вашего ядра системы или библиотеки, выполните команды make clean и make install, которые гарантируют, что модули компилируются для вашей системы.

Чтобы использовать эту версию ftape драйвера, Вы должны иметь поддержку модулей, компилируемую в ядро, и поддержку демона ядра kerneld. Однако, Вы не должны включать код ftape, как опцию ядра при его настройке, поскольку более современный ftape модуль полностью заменяет этот код.

make install установит драйвер устройства в правильный каталог. На стандартных Linux системах, модули лежат в каталоге /lib/modules/kernel-version. Если у Вас ядро версии 2.0.30, модули лежат в каталоге /lib/modules/2.0.30. Шаг установки make install также обеспечивает, чтобы эти модули было можно найти, добавляя соответствующие инструкции в файл modules.dep, размещенному в верхнем каталоге файлов модулей, в данном случае /lib/modules/2.0.30. Установка ftape добавляет следующие модули к вашей системе (в этом примере использована версия ядра 2.0.30):


/lib/modules-2.0.30/misc/ftape.o
/lib/modules-2.0.30/misc/zft-compressor.o
/lib/modules-2.0.30/misc/zftape.o

Команды для загрузки модуля должны быть добавлены к системному файлу конфигурации модулей. Во многих системах он называется /etc/conf.modules. Чтобы автоматически загружать ftape модули по требованию, добавьте следующие строки к файлу /etc/conf.modules:


alias char-major-27 zftape
pre-install ftape /sbin/swapout 5

Первая инструкция загружает все связанные с ftape модули в случае необходимости, когда к устройству со старшим номером 27 (ftape устройство) обращается ядро. Поскольку поддержка модуля zftape (который обеспечивает автоматическое сжатие данных для стриммера) требует поддержки других ftape модулей, все они грузятся по требованию ядра. Вторая строка определяет параметры загрузки для модулей. В данном случае утилита /sbin/swapout, которая обеспечивается пакетом ftape, гарантирует, что для ftape драйвера доступно достаточное количество DMA-памяти.

Чтобы обращаться к ftape устройству, Вы должны сначала поместить отформатированную ленту в стриммер. Команды для форматирования лент и операций с ними даны в разделе 4.8.3.

4.9.4 Обновление библиотек.

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

Incompatible library version

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

Самая последняя версия библиотек может быть найдена FTP-серверах Linux. На sunsite.unc.edu они расположены в /pub/Linux/GCC. Файлы "версии" (``release'') должны описывать, какие файлы вам необходимо скачать, и как их инсталлировать. Кратко, вы должны иметь файлы image-version.tar.gz и inc-version.tar.gz, где версия указывает версию инсталлируемых библиотек, например 4.4.1. Это tar-файлы, сжатые gzip. Файлы образов содержат образы инсталлируемых библиотек в /lib и /usr/lib. Файл inc содержит include-файлы для инсталляции в /usr/include.

Файл release-version.tar.gz объясняет инсталляционную процедуру в деталях (конкретные инструкции для конкретных версий отличаются). В общем случае вы должны инсталлировать библиотечные .a и .sa файлы в /usr/lib. Эти библиотеки используются на этапе компиляции.

Дополнительно, разделяемая библиотека образов файлов libc.so.version инсталлируется в /lib. Это разделяемые библиотеки образов загружаются во время выполнения использующими их программами. Каждая библиотека имеет символическую связь, использующую старшее число версии библиотеки в /lib.

Например, библиотека libc версия 4.4.1 имеет старшую цифру версии 4. Файл, содержащий библиотеку - libc.so.4.4.1. Символическая связь с именем libc.so.4, указывающая на этот файл, также в /lib. Вы должны изменить эту символическую связь, когда модифицируете библиотеки. Например, когда идет смена версий, вы должны изменить символическую связь файла libc.so.4 на новую версию.

Важное замечание! Надо менять символическую связь за один шаг, как показано ниже. Если вы каким-то образом удалили символическую связь libc.so.4 тогда программы, которые зависят от этой связи (включая базовые утилиты вроде ls и cat) перестанут работать. Используйте следующую команду для обновления символической связи libc.so.4, чтобы она указывала на файл libc.so.4.4.1:


# In -sf /lib/libc.so.4.4.1 /lib/libc.so.4

Вы должны также изменить символическую связь libm.so.version таким же манером. Если вы переходите на отличную (от прежней) версию библиотек, замените имена вышеупомянутых файлов. Пояснения к версии библиотеки должны прояснить детали. Дополнительную информацию про символические связи смотрите здесь.

4.9.5 Обновление gcc.

  

Компиляторы gcc C и C++ используются для компиляции программ вашей системы, в первую голову - ядра. Новейшую версию gcc можно найти на FTP-серверах Linux. На sunsite.unc.edu его можно найти в каталоге /pub/Linux/GCC (вместе с библиотеками). Должен существовать файл версии для дистрибуции gcc, детализирующий, какие файлы вы должны переписать и как их инсталлировать. Многие дистрибутивы позволяют обновлять версии с помощью своих средств управления пакетами программ. Вообще, такие пакеты куда удобней при установке, чем универсальные.

4.9.6 Модернизация других программ.

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

  Чтение группы новостей USENET comp.os.linux.announce - простейший путь, чтобы выловить информацию о новых программах. Так что самый простой способ отыскать какие-то программы, это побродить по FTP-серверам, поскачивать с серверов (ls-lR) индексные файлы и, используя grep, найти желаемые файлы. Если вам доступен archie, это также может помочь. Детали смотрите в приложении А. Если у вас нет archie, вы можете по telnet выйти на сервер archie вроде archie.rutgers.edu, войти как ``archie'' и воспользоваться командой ``help''). Детали смотрите в приложении А.

  

4.10 Прочие задачи.

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

4.10.1 Системные файлы настройки.

   

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

         Во время загрузки ядро запускает процесс /etc/init. init это программа, которая читает свои настроечные файлы (/etc/inittab) и запускает другие процессы, базирующиеся на содержании этих файлов. Один из важных процессов, который запускается из inittab, это /etc/getty, он грузится для каждой виртуальной консоли. Процесс getty захватывает ВК (Виртуальную Консоль) и запускает на ней процесс login. Это позволяет вам входить на каждой ВК. Если /etc/inittab не содержит процессов getty для конкретной ВК, на эту ВК вы не войдете.

      Другой процесс, выполняемый из /etc/inittab, это /etc/rc, главный системный файл инициализации Этот файл представляет из себя shell-сценарий, который выполняет все необходимые команды инициализации во время загрузки, такие например, как монтирование файловых систем и инициализации области свопинга. На многих системах init выполняет файл /etc/init.d/rc.

Ваша система может также выполнять и другие сценарии, например /etc/rc.local. /etc/rc.local обычно содержит команды инициализации, специфичные для вашей системы, такие как установка хост-имени (смотрите следующий раздел). rc.local может запускаться из /etc/rc или прямо из /etc/inittab.

4.10.2 Установка хост-имени.

    

В сетевой среде хост-имя используется для однозначной идентификации конкретной машины, в то время как отдельно стоящей машине хост-имя придает чувство собственного достоинства и шарма. Это, как дать имя вашей собаке: вы можете обращаться к собаке просто ``The dog'', значительно интереснее приписать собаке имя, вроде Spot или Woofie.

Хост-имя элементарно устанавливается командой hostname. Если вы в сети, ваше хост-имя должно быть полным хост-именем вашей машины, таким как goober.norelco.com. Если вы не в сети, вы можете выбрать произвольные имена для хоста и домена, например loomer.vpizza.com, shoop.nowhere.edu или floof.org.

При установке хост-имени оно должно быть занесено в файл /etc/hosts, который приписывает IP адрес каждому хосту. Даже если ваша машина не в сети, вам следует включить ваше хост-имя в /etc/hosts. Например, если вы не имеете выхода в сеть по TCP/IP и ваше хост-имя floof.org, просто включите следующую запись в /etc/hosts:

127.0.0.1       floof.org localhost

Данная команда припишет ваше хост-имя floof.org к локальному IP-интерфейсу (loopback address) 127.0.0.1 (используемому, даже если вы не в сети). Синоним localhost также приписывается этому адресу.

Если вы подключены к сети по TCP/IP, ваши действительные IP адрес и хост-имя должны появиться в /etc/hosts. Например, если ваше хост-имя goober.norelco.com, и ваш IP адрес 128.253.154.32, добавьте следующую строку в /etc/hosts:


128.253.154.32  goober.noreico.com

Если вашего хост-имени не будет в /etc/hosts, вы не сможете его установить. Для установки хост-имени просто используйте команду hostname. Например, команда:


# hostname -S goober.noreico.com

устанавливает хост-имя goober.norelco.com. Во многих случаях команда hostname выполняется из одного из системных установочных файлов, таких как /etc/rc или /etc/rc.local. Отредактируйте эти два файла и измените находящуюся там команду hostname, установив хост-имя своей машины; после перезагрузки машины хост-имя будет иметь новое значение.

4.11 Что делать при ЧП.

   В некоторых случаях администратор системы будет сталкиваться с проблемой выкарабкивания из абсолютной катастрофы, такой например, как забытие пароля root или крах файловой системы. Лучший совет: без паники! Все делают глупые ошибки: это лучший способ освоить системное администрирование, хотя и тяжелый.

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

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

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

4.11.1 Восстановление с использованием дискеты сопровождения.

           Одно незаменимое средство для администратора системы, это так называемый ``boot/root disk'', дискета, которая может загрузить полный Linux, вне зависимости от вашего жесткого диска. Boot/root disks в действительности очень прост: вы создаете корневую файловую систему на дискете, помещая на нее все необходимые утилиты, инсталлируя на дискете LILO и загружаемое ядро. Другой способ, это использовать одну дискету для ядра и другую для корневой файловой системы. В любом случае результат одинаков: Вы запускаете Linux полностью с дискет.

Канонический пример boot/root disk это загрузочный диск Slackware. Для этого вам не надо скачивать дистрибутив полностью: хватит только boot и root дискеты). Эти дискеты содержат загрузочную таблицу и корневую файловую систему. Предполагается, что они используются при инсталляции дистрибутивов Slackware, но они бывают очень полезны и для сопровождения системы.

Boot/root disk, созданный H.J Lu, который можно взять в /pub/Linux/GCC/rootdisk на sunsite.unc.edu другой пример такого рода диска сопровождения.

Использовать boot/root disk очень легко. Просто загрузите диск на вашей системе и войдите под root (обычно без пароля). Чтобы получить доступ к файлам вашего жесткого диска, необходимо смонтировать ваши файловые системы вручную. Например, команда:

# mount -t ext2 /dev/hda2 /mnt

смонтирует файловую систему ext2fs на /dev/hda2 под /mnt. Помните, что / теперь находится на boot/root disk; вам необходимо смонтировать файловую систему вашего жесткого диска под каким-то каталогом, чтобы получить доступ к файлам. Так что /etc/passwd вашего жесткого диска теперь /mnt/etc/passwd, если вы смонтировали вашу корневую файловую систему на /mnt.

4.11.2 Восстановление пароля для root.

  

Если вы забыли пароль вашего root, нет проблем. Просто загрузитесь с boot/root disk, смонтируйте вашу корневую файловую систему под /mnt и сотрите поле пароля для root в /mnt/etc/passwd, как например:


root::0:0:root:/:/bin/sh

теперь root остался вообще без пароля; когда вы перезагрузитесь с жесткого диска, вы сможете войти как root и снова установить пароль, используя команду passwd.

Не правда ли, вы счастливы, что научились работать с vi? На вашей boot/root disk, редакторов, вроде Emacs наверняка нет, а vi должен быть, <sl>(Прим. переводчика: администратор должен отдавать себе отчет, что процедуру снятия пароля root умеет запросто выполнять не он один).<sl>

4.11.3 Восстановление файловой системы.

     Если у вас каким-то образом грохнулась файловая система, вы можете использовать e2fsck (это в случае, если вы используете файловую систему типа ext2fs) для исправления запорченных данных файловой системы с дискет. Другие файловые системы используют другие формы команды fsck; детали смотрите здесь.

   Когда вы проверяете вашу файловую систему с дискеты, лучше всего, чтобы файловая система не была смонтирована.

Частая причина неисправности файловой системы: порча суперблока. Суперблок, это заголовок (``header')'файловой системы, который содержит информацию о статусе файловой системы, размере, свободных блоках и т.д. Если вы попортили ваш суперблок (например, случайно прямо в него записали какие-то данные) операционная система может вообще не распознать файловую систему. Все попытки примонтировать файловую систему потерпят неудачу, и e2fsck не поможет решить проблему.

К счастью, файловая система типа ext2fs сохраняет копии суперблока в границах "группы блоков" (``block group'') на диске, обычно через каждые 8 KБ блоков. Для того, чтобы приказать e2fsck использовать копию суперблока, вы можете использовать команду:

# e2fsck -b 8193 partition

здесь partition, это раздел, на котором располагается файловая система. Опция -b 8193 приказывает e2fsck использовать копию суперблока, хранящуюся в блоке 8193 файловой системы.

4.11.4 Восстановление потерянных файлов.

  Если вы случайно удалили важные файлы, нет способа их "разудалить" обратно. Однако, вы можете скопировать соответствующие файлы с дискеты к себе на жесткий диск. Например, если вы удалите /bin/login в своей системе (который обеспечивает вход в систему), просто загрузите boot/root дискету, смонтируйте корневую файловую систему на /mnt и используйте команду:


# cp -a /bin/login /mnt/bin/login

опция -a приказывает cp сохранить права доступа копируемых файлов.

Разумеется, если удаленные файлы не столь существенны, что они не были удостоены копирования на дискету boot/root, значит вам не повезло. Если вы создавали резервные копии, вы можете скопировать файлы оттуда.

4.11.5 Восстановление потерянных библиотек.

  Если вы случайно потеряли свои библиотеки или символические связи в /lib, скорее всего команды, которые зависят от этих библиотек, больше не будут выполняться (подробности). Простейшее решение: загрузиться с дискеты boot/root, смонтировать вашу корневую файловую систему и восстановить библиотеки в /mnt/lib. Здесь рассказано, как ставить библиотеки и создавать их символические ссылки.

  


Next: 5 The X Window Up: Linux Installation and Getting Previous: 3 Linux Tutorial Оглавление: Оглавление.