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

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

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

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

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

4.1 О корнях власти, волшебной шапке и приятных ощущениях.

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

4.1.1 Регистрация root

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

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

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

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

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

Разумеется, все совершают ошибки. Однажды сам Linus Torvalds (создатель linux) случайно удалил все поддерево каталогов, содержавшее программы ядра. Многие часы работы пропали (бы) в один миг навсегда. К счастью, однако, благодаря своему знанию кодов файловой системы, он смог перезагрузить систему и реконструировать дерево каталогов вручную.

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

4.1.2 Злоупотребление системой

С приходом ощущения власти приходит желание вредить. Это темная сторона администрирования в UNIX, но всякий через это когда-то должен пройти. Большинство пользователей UNIX никогда не получат возможность испытать это на университетских и производственных системах UNIX. Только высокооплачиваемые и высокообразованные системные администраторы могут входит в систему под именем root. Действительно, во многих таких заведениях пароль root - это строго охраняемый секрет. Это священная корова фирмы. Много делается попыток пролезть под именем root в систему; она представляется мудрой и устрашающей силой, покоряющейся только тем, кто знает заклинания.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

4.2.1 Использование загрузочной дискеты

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

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

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

Зная, где у вас находится ядро, установите корневое устройство в образе ядра на имя вашего корневого раздела командой rdev. Формат команды:

    rdev <kernel-name> <root-device>

где <kernel-name>; это имя образа ядра, a <root-device> - имя корневого раздела Linux. Например, для установки корневого устройства в ядре /etc/Image на /dev/hda2 используется команда

    # rdev /etc/Image /dev/hda2

rdev может устанавливать другие опции в ядре, такие как взятый по умолчанию режим SVGA, для использования во время загрузки. Используйте ``rdev -h'' для получения помощи.

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

Например, для копирование файла ядра /etc/Image на дискету в /etc/fd0 используйте команду

    # cp /etc/Image /dev/fd0

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

4.2.2 Использование LILO

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

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

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

    # /sbin/lilo

Файл конфигурации LILO содержит ``stanza''("стансы" - не пугайтесь, это действительно про поэзию). для каждой операционной системы, которую вы желаете загрузить. Лучший способ продемонстрировать это на примере конфигурационного файла 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
    #  Name  of  the  boot  loader.  No  reason  to  modify  this
    #  un less you're doing some serious hacking on LILO.
    install = /boot/boot.b
    # Have LILO perform some optimization.
    compact
    # Stanza for Linux root partition on /dev/hda1.
    image = /etc/Image   # Location of kernel
       label = linux     # Name of OS (for the LILO boot menu)
       root = /dev/hda1  # Location of root partition
       vga   =   ask     # Tell kernel to ask for SVGA modes at boot time
    # Stanza for MSDOS partition on /dev/hda2.
    other = /dev/hda2    # Location of partition
       table = /dev/hda  # Location of partition table for /dev/hda2
       label = msdos     # Name of OS (for boot menu)

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

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

Имейте также в виду, что если вы используете здесь строку ``root ='', нет смысла использовать rdev для установки корневого раздела в образе ядра. LILO установит ее во время загрузки.

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

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

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

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

Простейший способ выключения, это использование команды 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.4 Работа с пользователями

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

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

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

username
уникальный идентификатор, присваиваемый каждому пользователю в системе. Примеры имен пользователей larry, karl и mdw. Могут использоваться буквы и цифры, а также нижнее подчеркивание и точка. Обычно имена пользователей ограничиваются восемью символами.
user
ID (или UID) - идентификатор пользователя - уникальный номер, присваиваемый каждому пользователю системы. Система обычно отслеживает идентификаторы пользователей, а не имена.
group
ID (или GID) - идентификатор группы это идентификатор группы пользователя. В Разделе 3.9 мы обсуждали права группы; каждый пользователь принадлежит к одной или более группам, определенных системным администратором. Подробнее об этом ниже.
password
Система также хранит в зашифрованном виде пароль пользователя. Команда passwd используется для установки и изменения пароля.
full name
"Полное имя" или "действительное имя" хранится вместе с именем пользователя. Например, пользователь schmoj может иметь действительное имя ``Joe Schmo'' (прим. переводчика: неужели для английского уха оно звучит также красиво, как для русского).
home directory
Домашний каталог - это каталог, в который пользователь начально попадает при входе в систему. Каждый пользователь должен иметь свой собственный домашний каталог, обычно ниже /home.
login shell
Исходный shell - это shell, который запускается для пользователя при его входе в систему. Это, например, может быть /bin/bash и /bin/tcsh.

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

username: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.4.5.

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

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

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

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

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

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

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

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

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

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

4.4.4 Занесение атрибутов пользователя

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

Например,

    # passwd larry

изменить пароль larry.

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

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

4.4.5 Группы

Как мы говорили, каждый пользователь принадлежит к одной или более группам. Единственное значение группы замыкается на права доступа к файлу, как вы помните из Раздела 3.9. Каждый файл имеет "групповое владение" (``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.5 Архивация и компрессирование файлов

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

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

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

    tar <options> <file1> ... <fileN>

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

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

    # 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 xvf backup.tar

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

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

    # cd /etc
    # tar cvf hosts group passwd

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

    # tar tvf backup.tar

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

4.5.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 - это компрессированная версия файла backup.tar, а backup.tar.gz - зазипованная версия. (Чтобы еще надежнее запутать дело, для обозначения зазипованных файлов некоторое время использовалось расширение .z (маленькая ``z''). В настоящее время (прим. переводчика: это для современников автора) официальное расширение - .gz.

Команда uncompress используется для развертывания файла, который был обработан командой compress. Но команда gunzip тоже знает, как обращаться с такими файлами.

4.5.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 cvfz backup.tar.gz /etc

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

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

Как и команда

    # tar xvfz backup.tar.Z

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

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

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

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

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

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

4.5.4 Использование дискет для резервирования

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

    # tar cvfzM /dev/fd0 /

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

    # tar xvfzM /dev/fd0

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

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

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

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

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

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

    # mke2fs /dev/fd0 1440

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

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

       # mount -t ext2 /dev/fd0 /mnt

примонтирует дискету, находящуюся на /dev/fd0 к каталогу /mnt. Теперь все файлы, находящиеся на дискете, будут находиться в каталоге /mnt вашего жесткого диска. (прим. переводчика: в /mnt непосредственно будет находиться вершина дерева файловой системы дискеты, все остальное опосредовано - ниже по дереву). ``-t ext2''указывает тип файловой системы (ext2fs). Если вы создали другой тип файловой системы на дискете, вам потребуется описать его тип команде mount.

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

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

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

       # umount /dev/fd0

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

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

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

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

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

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

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

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

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

4.6.1 Модернизация ядра

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

Исходные тексты ядра можно раздобыть на любом Linux-овском FTP-сервере (список смотрите в Разделе C). На sunsite.unc.edu, например, исходники ядро находятся в pub/Linux/kernel/. Версии ядра нумеруются с использованием номера версии ядра (kernel) и уровня исправления (patchlevel). Например, kernel version 0.99 patchlevel 11 обычно записывается как 0.99.pl11, или еще проще 0.99.11.

Исходники ядра распространяются в виде зазипованных tar-файлов. ( Часто patch-файлы ("заплаты") выпускаются для текущей версии ядра, которая позволяет модернизировать исходники вашего действующего ядра на основе последнего уровня исправлений, используя программу patch. В большинстве случаев, между тем, обычно проще инсталлировать целиком новую версию ядра. Например, файл, содержащий исходники ядра 0.99.pl11 - linux-0.99.11.tar.gz. ( прим. переводчика: На момент перевода книги существуют следующие серии ядер: 0.1-0.99, 1.0.1-1.0.9, 1.1.1-1.1.95, 1.2.1-1.2.13, 1.3.1-1.3.83. Ядра, принадлежащие серии с четной 2-й цифрой (1.0, 1.2), являются стабильными (то есть не включают никаких экспериментальных кодов). Ядра серии (1.1, 1.3) включают экспериментальные коды (такие как Mobile IP, IP-masquarading и т. п. в серии 1.3). Переводчик, исходя из декларированного автором принципа "от добра добра не ищут", работает в версии 1.2.13 и с нетерпением ждет появления версии 1.4.1 или 2.0.)

Распакуйте этот файл из каталога /usr/src; он создаст каталог /usr/src/linux, который содержит исходники ядра. Вам следует удалить или переименовать существующий /usr/src/linux перед распаковкой новой версии.

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

    # ln -sf /usr/src/linux/include/linux /usr/include/linux
    # ln -sf /usr/src/linux/include/asm /usr/include/asm

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

снова, когда вы инсталлируете следующую версию ядра. (Смотрите Раздел 3.10 по поводу символических связей).

Обратите внимание, что для компиляции ядра у вас в системе должны быть инсталлированы компиляторы gcc и g++ C и C++. Если вы нуждаетесь в более свежих версиях этих компиляторов, смотрите ниже Раздел 4.7.3.

Для компиляции ядра прежде всего выполните cd в /usr/src/linux. Выполните команду make config. Эта команда запросит у вас несколько настроечных опций, таких как "Какой тип файловой системы вы желаете включить в новое ядро". Затем, отредактируйте /usr/src/linux/Makefile. Убедитесь, что определение для ROOT_DEV корректно - оно определяет устройство, используемое в качестве корневой файловой системы во время загрузки. Обычное определение имеет вид:

    ROOT_DEV = CURRENT

Менять это нет смысла, кроме случая, когда вы меняете устройство для вашей корневой файловой системы.

Затем выполните команду make dep для отслеживания всех взаимосвязей исходных текстов. Это очень важный этап.

И наконец, вы готовы компилировать ядро. Команда make Image скомпилирует ядро и оставит образ нового ядра в файле /usr/src/linux/Image. (прим. переводчика: Начиная с ядер серии 1.2 собранное ядро записывается в каталог /usr/src/linux/arch/i386/boot/Image (если конечно вы собирали ядро для процессоров серии intel, а не alpha, mips или sparc.) А команда make zImage скомпилирует скомпрессировнный образ ядра, который раскомпрессирует сам себя во время загрузки, а так занимает на диске меньше места.

После компиляции ядра вы должны либо скопировать его на загрузочную дискету (командой вроде ``cp Image /dev/fd0''), либо инсталлировать его, используя LILO для загрузки с вашего жесткого диска. Дополнительную информацию можно найти в Разделе 4.2.2 .

4.6.2 Модернизация библиотек

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

Если вы увидите сообщение

    Incompatible library version
    (Несовместимая версия библиотеки)

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

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

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

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

4.6.3 Модернизация gcc

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

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

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

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

Один из удобных источников программ Linux - дисковый образ Slackware. Каждый диск содержит ряд файлов .tgz, просто зазипованных tar-файлов. Вместо переписывания диска вы можете переписать желаемые .tgz файлы из каталогов Slackware на FTP-сервере и прямо их инсталлировать. Если вы используете дистрибутив Slackware, команда setup может автоматически загрузить и инсталлировать полный набор дисков.

И еще раз, обычно не самое умное дело заниматься модернизацией путем переинсталляции новейшей версии Slackware или другого дистрибутива. Если вы таким образом реинсталлируете, вы обязательно уничтожите ваш сегодняшний вариант, включая каталоги пользователей и ваши стандартные настройки. Лучше заниматься модернизацией по частям, то есть, если нашлась программа, которую вы часто используете и которая имеет новую версию, модернизируйте ее. А иначе не волнуйте себя по пустякам. Правило усталого ветерана: "Если само не ломается - не трогай". Если ваша система работает - нет достаточных оснований для модернизации.

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

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

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

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

Команда mount используется для монтирования файловой системы.

       mount -av

Выполняется из файла /etc/rc (файла системной инициализации во время загрузки, смотрите Раздел 4.10.1). Команда ount -av получает информацию о файловых системах и монтирует в соответствии с файлом /etc/fstab. Пример файла fstab показан ниже.

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

Первое поле - это устройство (имя монтируемого раздела). Второе поле - точка монтирования. Третье поле - тип файловой системы (например, ext2 для системы типа ext2fs или minix для Minix filesystems). Таблица 4.1 перечисляет различные типы файловых систем, доступных в Linux.

Эта таблица для ядра версии 1.1.37.

Файловая система            Имя типа   Комментарий
Second Extended Filesystem  ext2       Наиболее распространенная для Linux
Extended Filesystem         ext        Вытеснена системой ext2
Minix Filesystem            minix      Файловая система Minix; редко
                                               используется
Xia Filesystem              xia        Похожа на ext2; редко используется
UMSDOS Filesystem           umsdos     Для инсталляции Linux на разделы
                                               MS-DOS
MS-DOS Filesystem           msdos      Для доступа к файлам MS-DOS
/proc Filesystem            proc       Дает информацию о процессах для
                                               ps и т.п.
ISO 9660 Filesystem         iso9660    Используется большинством CD-ROM
Xenix Filesystem            xenix      Для доступа к файлам из Xenix.
System V Filesystem         sysv       Для доступа к файлам из System V
                                               вариант для x86.
Coherent Filesystem         coherent   Для доступа из Coherent
HPFS Filesystem             hpfs       Доступ только на чтение
                                               для разделов HPFS (DoubleSpace).
                Таблица 4.1. Типы Файловых систем Linux

Не все эти типы могут быть доступны на вашей системе; ваше ядро должно иметь соответствующую откомпилированную поддержку. О компиляции ядра смотрите в Разделе 4.7.

Последнее поле файла fstab (options) это было перед Таблицей 4.1 содержит опции монтирования, обычно они устанавливаются в ``defaults''.

Вы можете видеть, что разделы своппинга также включены в /etc/fstab. Они имеют каталог монтирования "tt/none/", и тип "swap". Команда swapon -a выполняемая из /etc/rc используется для обеспечения своппинга на все устройства, перечисленные в /etc/fstab.

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

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

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

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

    # mount -t ext2 /dev/hda3 /usr

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

Вам никогда не следует монтировать и размонтировать файловые системы вручную. Команда mount -av в /etc/rc позаботится о монтировании файловых систем во время загрузки. Файловые системы автоматически размонтируются командами shutdown или halt перед выключением системы.

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

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

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

    # e2fsck -av /dev/hda2

проверит файловую систему ext2fs на /dev/hda2 и автоматически исправит ошибки.

Обычно бывает полезно размонтировать файловую систему перед

ее проверкой. Например команда

       # umount /dev/hda2

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

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

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

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

4.8 Использование файла своппинга

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

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

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

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

       # mkswap /swap 8208

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

       # /etc/sync
       # swapon /swap

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

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

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

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

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

    # swapoff /swap

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

    # rm /swap

Помните, что каждый файл своппинга (или раздел) может быть размером до 16 Мбайт, но вы можете использовать до 8 файлов своппинга или разделов на своей системе.

4.9 Разношерстные задачи

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

4.9.1 Файлы установки системы

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

Другой процесс, выполняемый из /etc/inittab - это /etc/rc, главный системный файл инициализации (прим. переводчика: или главный файл инициализации системы - что тоже верно). Этот файл представляет из себя shell-сценарий, который выполняет любые необходимые команды инициализации во время загрузки, такие например, как монтирование файловых систем (смотрите Раздел 4.8) и инициализации области своппинга.

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

4.9.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.norelco.com

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

    # hostname -S goober.norelco.com

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

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

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

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

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

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

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

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

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

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

Или, если вы достаточно амбициозны, можете создать свой. Хотя, в большинстве случаев, использовать готовый boot/root disk - значительно легче и надежнее.

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

    # mount -t ext2 /dev/hda2 /mnt

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

4.10.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 должен быть. (прим. переводчика: администратор должен отдавать себе отчет, что процедуру снятия пароля root умеет запросто выполнять не он один).

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

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

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

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

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

    # e2fsck -b 8193 <partition>

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

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

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

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

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

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

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

Предыдущая глава | Содержание | Следующая глава