Сегодня 29 марта 2024
18+
MWC 2018 2018 Computex IFA 2018
реклама
Программное обеспечение

Linux Navigator

⇣ Содержание

Я надеюсь, что данный текст послужит толковой инструкцией для начинающих овладевать премудростями OS Linux.

А была ли жизнь до консоли?

Давным-давно не было персональных компьютеров. А были большие машины, на которых работали одновременно десятки людей. У каждой машины были терминалы, которые ставились на тогда еще 25-пиновые COM-порты. Передача данных через такой порт была крайне медленной, а потому о графической среде просто не знали. Как не знали о манипуляторе "мышь". На каждого пользователя был один текстовой дисплей и одна клавиатура. Часто пользователи находились в разных концах страны. Но как-то работать все-таки было надо, и для этого были созданы правила:

  1. Каждый пользователь, независимо от своего родного языка, географического местоположения и ширины канала связи, должен иметь все (ну или почти все) возможности, которые предоставляет компьютер.
  2. Каждый пользователь должен тратить минимальное время на выяснение где находится и как называется та или иная программа. При этом у него не должно возникать необходимости общения с другими пользователями.
  3. Каждый пользователь не должен иметь возможность совершения противоправных действий.
  4. Админ (здесь он называется root) это тоже пользователь, а потому все вышеперечисленное относится и к нему, т.е. он должен иметь возможность для любого конфигурирования компьютера из любой точки земного шара (понятно, при наличии в этой точке доступа к сети) на практически любом канале связи.

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

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

    /bin - каталог исполняемых файлов и ярлыков к ним
    /sbin - то же самое, только исполнять эти файлы имеет право только root
    /root - домашний каталог root'а
    /home - там расположены домашние каталоги других пользователей
    /boot - каталог в котором расположены файлы, необходимые для загрузки
    /mnt - каталог подмонтированных устройств (об этом позже)
    /usr - второй уровень иерархии
    /tmp - всякий мусор
    /lib - разделяемые библиотеки
    /var - изменяемые переменные (всякий мусор, только в отличие от /tmp, принадлежащий root'у)

Набор системных директорий:

    /dev - директория устройств
    /proc - директория файловой системы proc
    /etc - директория для файлов конфигурации

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


"Стой, кто идет! Моя будет стрелять!"

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

login:
password:

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

/home/name

иногда

/home/group/name

Если вы зашли в графическом режиме, то к вашим услугам рабочий стол X Window (не путать с известным плагиаторским названием). Если нет, то консольное приглашение или shell (названий у нее много, но сейчас популярен bash - Borne Again SHell). Поскольку консоль важнее, то сначала о ней.

Работа в конcольном режиме

Базовый набор команд состоит из:
cd <директория>         Сменить текущую директорию на
                        требуемую, двумя точками обозначается
                        директория нижнего уровня, одной - 
                        текущая
ls <директория>         Просмотреть список файлов, по 
                        умолчанию выбирается текущая
cp <файл> <файл> 	Копировать файл
rm <файл>               Удалить файл
mv <файл> <файл> 	Переместить файл
mkdir <директория>	Создать директорию
pwd                     Указать текущую директорию

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

Прочтя этот список, многие захотят испытать ту или иную команду. Но не все команды предназначены для простых смертных, и они у вас не запустятся. Те, которые запустятся, могут не заработать, поскольку у них недостаточно информации для работы. Чтобы узнать все требования выбранной команды есть команда man, это сокращение от manual. Из ее названия понятно, что она возвращает описания команды. Наберите man <команда> и получите ответы на все вопросы. Но команда man имеет более широкое применение, нежели простое описание команд, она говорит также и о системных вызовах и многом другом, что может потребоваться уже программисту. Существуют man-страницы и на русском языке, также можно найти практически все man-страницы в интеренете на сайте www.linuxdocs.ru.
Например:

rm -r 	Удаление файлов и директорий
rm -f 	Удаление без глупых вопросов

Те, кто работал с DOS (я вообще то с ним имел дело всего пару раз), легко привыкнут набирать команды с клавиатуры. Однако разница не только в названиях отдельных команд. Самая главная разница заключается в том, что shell, вообще-то, не всегда интересуется названием вашего текущего каталога. Часто это название приходится ему напоминать. Например, при запуске исполняемого файла. Если просто набрать abvgd, то shell поищет в каталоге /sbin, затем в /bin, затем в /usr/sbin, заглянет в /usr/bin, может еще куда, затем плюнет на это дело и выругается. Надо набрать ./abvgd (обратите внимание на точку перед слэшем).

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

Скучающие по Norton Commander могут набрать mc, и, о чудо, увидеть пару голубых панелей. А на них кучу файлов с непонятными атрибутами. Если название файла начинается с точки, то это скрытый файл, то же самое относится и к директориям. Если перед названием стоит *, то файл исполняемый (звездочка не входит в название, это атрибут). После названия файла или директории идут имя владельца, имя группы владельца и атрибуты (это 3 восьмизначные цифры). Атрибуты регулируют права чтения, записи и исполнения и меняются командой chmod <файл> <новые параметры> (это сокращение от change mode). Для директории исполнение означает получение списка ее содержимого, а чтение - открытие. Каждая цифра получается как "чтение"*4+"запись"*2+"исполнение", каждый параметр принимает значение 0 или 1. Первая цифра означает права владельца, вторая его группы, третья - прочие. Атрибут 666 означает права на чтение и запись для всех, но запрет на исполнение. root имеет неограниченные права.

В аргументах большинства команд входящие в название файлов буквы и цифры можно заменять специальными символами - $ (заменитель одного любого символа), * (заменитель любого количества любых символов), {1-3} (заменитель обозначенных символов). Будьте осторожны с употреблением этих символов!

Примечание: несколько лет тому назад на моего научного руководителя (он в тот момент был root'ом) в Университете нашло непонятное забвение, и он в каталоге /mnt кафедрального сервера набрал следующую команду:

rm -rf *

После этого 3 диска стали девственно чистыми. Самым страшным итогом этого происшествия стала гибель архивов порнухи двух групп. А это 17 человек!

Помимо обычных файлов в каталоге могут быть еще и линки (link). Если вам знакомо такое понятие как ярлык (а кому оно сейчас не знакомо), то линк - это обобщение ярлыка. Обобщение это состоит в том, что если ярлыки служат для удобства пользователей, то линки могут использоваться еще и программами. Существует два типа линков - мягкие (soft) и жесткие (hard). Жесткие линки неотличимы самого файла, и любое изменение жесткого линка эквивалентно изменению файла. Нельзя удалить файл, если на него указывает хоть один жесткий линк. Мягкие ссылки больше похожи на ярлыки, поскольку их можно оставлять везде, тогда как для жестких есть ограничения. Жесткий линк получается командой ln <файл>, а мягкий ln -s <файл>. Если файл открыт программой, то это эквивалентно наличию жесткого линка.

Windows - операционная система многозадачная, это означает, что она работает и глючит одновременно. (Когда я набирал предыдущую фразу в Word'е, у него перекосило шрифты.) Для UNIX мультизадачность означает немного другое. Вы можете запустить несколько процессов, переключаться между ними, менять приоритеты, и многое другое. Если процесс не понравится, его можно убить, только надо иметь в виду, что у каждого процесса имеется владелец. И ему могут не понравиться ваши действия. А поскольку простой пользователь может убивать только свои процессы, то всеобщим убийцей является root. Получить список процессов можно командой ps.

Для организации многозадачности в UNIX предусмотрено 2 режима foreground и background. Отличаются они тем, что foreground работает с клавиатурой, в то время как background доступа к ней не имеет. Командами для доступа к этим режимам являются fg и bg с номером процесса. Если у вас открыта только одна консоль (а не 2 или 3), то бэкграундные процессы посылают свой вывод только на нее. Выглядит это жутковато, мало кто способен разобраться в мешанине букв, цифр и других символов. Но есть масса облегчителей (я не придумал это слово, а прочел на банке с соком) работы, например команды < и >. Это команды ввода/вывода в файл. С их помощью вы можете отправить вывод в файл (например, на другую консоль или иное устройство). Команда служит для отправления вывода одного процесса на вход другого. Если после команды стоит символ &, то она автоматически исполняется в бэкграунде.

Для управления процессами также служит команда kill, особенно полезно знать ее версию killall. Применение этой команды root'ом может привести к немедленной перезагрузке. Она посылает системные вызовы процессам, сам вызов определяется ключом, который пишется между командой и номером процесса.

Тупоконечники против остроконечников, зенитчики против спартачей, поклонники Intel против сторонников AMD - это противостояние вечно. Есть оно и среди пользователей Linux. Это вечное противоборство текстовых редакторов vi и emacs. Многие, поработав с Word, удивляются, как можно готовить тексты без графического режима. "Можно!" - отвечают им и те и другие. Это мощнейшие из известных мне текстовых редакторов, во много раз превосходящие Office XP по возможностям. И не просто отвечают, а пишут книги о любимом редакторе, и разгромные статьи о противном. Количество ругани, выплеснутой в этом противостоянии, явно превосходит новомодное выяснение "кто тут производительнее". Редактор emacs имеет собственный язык программирования elisp, умеет работать с TeX, HTML и другими языками подготовки текста. Насчет HTML я не знаю, но ничего лучше для TeX просто не существует. Широко известен (и много лет развивается) макропакет для emacs, который представляет собой личного психотерапевта. Редактор vi не имеет собственного языка программирования, но система его команд способна подключать компиляторы C/C++, Java, FORTRAN, Perl и многое другое, даже с синтаксической подсветкой. Я не могу описать все возможности этих языков, это тема для нескольких отдельных книг, благо они написаны. Недавно появился emacs и для Windows.

Отгремевшая же недавно Великая Броузерная Война никак не задела пользователей Linux. Microsoft не удосужился сделать текстовую версию своего IE с открытыми кодами. А создатели lynx удосужились! Ходить по сети можно и в текстовом режиме. Есть версия для Windows по адресу http://jim.spath.com/lynx_win32/. Или можно посмотреть под виндами, как выглядит паутина для юниксовой консоли, просто зайдя в Библиотеку Мошкова lib.ru. А когда зайдете, то помимо художественной и не очень литературы найдете там лучшую подборку книг по UNIX.

"Папа, я, когда вырасту, тоже стану рутом!"

Когда-то установка Linux была значительной проблемой, до того неприятной (особенно для новичков), что в одном форуме кто-то написал "надо чтобы перед установкой Linux проверял, есть ли на диске Windows, и если есть, то брал конфигурацию железа с нее". Последние версии ставятся проще, чем Windows 98. Устанавливать его можно с дискового раздела, по сети, по ftp, но я всегда пользовался только установкой с загрузочного CD-ROM, оставив первые варианты экстремалам. Выбор самого дистрибутива дело очень личное и может повлиять на всю вашу последующую жизнь. Каждый дистрибутив имеет свои особенности и недостатки. Для меня существенным недостатком является английский язык, поскольку я предпочитаю не приспосабливаться к компьютеру, а приспосабливать его под себя. Еще большим недостатком я считаю заботу обо мне со стороны неназываемой фирмы, в виде сокрытия настроек и информации. С другой стороны большим удобством является, когда приложение при удалении само вычищает диск от продуктов своей жизнедеятельности. Таким образом, я и связался с ASPLinux. Это совместимая с Red Hat Linux русская версия с некоторыми оригинальными добавлениями, вроде дополнительного загрузчика ASPloader. Также совместимость означает наличие в ASPLinux программы управления пакетами RPM (Redhat Packet Manager).

Предполагается, что вы приобрели лицензионную версию (например, купили в ларьке у метро или скачали из Интернета)! Затем принесли домой, и поставили диск в лоток. Перезагрузились и увидели много строчек на английском, в которых предлагается выбрать вариант установки. Самый простой - это установка в графическом режиме. Выберите язык, клавиатуру и мышь (они, в отличие от языка, сразу определяются правильно). Опция "Эмулировать 3х кнопочную мышь" не приведет к появлению третьей кнопки, но позволит интерпретировать одновременное нажатие на обе как нажатие на третью.

Затем вам предложат выбор варианта установки, советую выбрать "Выборочно". Другие варианты хуже установки Windows XP, та хоть диск без предупреждения не форматирует. После это можете разбить диск программами DiskDruid или fdisk (не путать с fdisk для DOS или Windows, это все разные программы). Если у вас достаточно большой диск, то советую в начале диска сделать небольшой раздел, примерно 20MB, который обозначить /boot. Это полезно, поскольку не каждый загрузчик умеет работать с большими дисками, да и соображения безопасности тоже не будут лишними. Основной раздел следует маркировать как /. Затем идет выбор файловой системы. Основная файловая система Linux называется Ext2fs, дополнительно можно использовать FAT и многие другие. Если вы не хотите отказываться то Windows, то можно использовать раздел FAT даже для постановки системы. Это лишит вас некоторых дополнительных возможностей, например системы привилегий для Ext2fs. В Linux для размещения данных подкачки используется специальный раздел с файловой системой Swapfs. Этот раздел рекомендуется сделать примерно в полтора раза больше оперативной памяти. После установки эти разделы будут автоматически смонтированы. Здесь же делаются первоначальные установки RAID.

Если еще не решились полностью разметить весь диск под ext2fs, а из сентиментальных соображений оставить какую-либо другую операционную систему, то следующим этапом идет конфигурирование системного загрузчика lilo (LInux LOader). Lilo можно ставить либо в MBR (Master Boot Record), либо в первый раздел диска. Советую использовать второй вариант, если вы сделали к тому моменту раздел /boot, как я писал выше. Тут же предлагается создать системную дискету. Не отказывайтесь! Начальная конфигурация сети проходит в том случае, если у вас есть сетевые устройства. Настройка их достаточно стандартна, вам предлагается выбрать IP-адрес, маску, адрес сети и широковещательный адрес в первой панели. И имя компьютера, адреса шлюза и серверов DNS во второй, для каждого из интерфейсов. Также для каждого интерфейса имеется две кнопки "Использовать DHCP" и "Активизировать при загрузке". DHCP нужно оставить только если ваша сеть его использует. Активизация интерфейса при загрузке означает, что его не нужно будет каждый раз включать вручную (некоторым это нравится).

Введите пароль для рута, введите пользователей. Настоятельно советую не использовать возможности рута постоянно, поскольку они не безграничны. Если вы снесете себе всю систему, то погибнет и рут. Заведите хоть одного простого юзера. И ни в коем случае не отключайте "shadow passwords" и "MD5 cryptography"!

Выбор установки - это выбор пакетов. Они распределены по группам, каждая из которых имеет достаточно красноречивое название. Кстати, правильный выбор необходимых пакетов ДЕЙСТВИТЕЛЬНО позволяет сэкономить место на диске. Если ваши требования ограничиваются только сервером сети, то следует подумать "А нужна ли мне графическая оболочка?". В этом случае, как правило, не нужна. С другой стороны средства кластеризации явно лишние для 99.9% всех компьютеров, особенно если на них нет сети. Но, по крайней мере, на один компьютер в локальной сети нужно установить Kernel Development и Development. Это потребуется при окончательном конфигурировании.

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

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


Ядреная бомба

Первое, что следует сделать, это перекомпилировать ядро. Тут требуется знать точную конфигурацию вашего компьютера, очень желательно иметь свежие драйвера. Последнее требование возникает из-за чрезвычайно быстрого прогресса в графике и звуке. Драйвера для видеокарт nVIDIA можно найти на их сайте. Много различных драйверов для других продуктов пишется простыми энтузиастами, большая их коллекция расположена по адресу http://www.linux.org. Немного в стороне этого стоят "мягкие" модемы. Эти дешевые уроды построены на принципе, что все должен делать центральный процессор. Другим следствием их дешевизны является экономия на программистах, для некоторых моделей (особенно OEM) крайне сложно достать драйвера даже для Windows. Внешние модемы драйвера вообще не требуют. Часто бывает полезно скачать последнюю версию ядра с официального сайта http://www.kernel.org.

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

Первая часть - число (не цифра!) 2, оно означает, что ядро может быть модульным и не-i386-совместимым. Все современные ядра такие.

Второе число - это номер версии, четные числа обозначают стабильные и рабочие ядра, нечетные - это разрабатываемые версии. Нечетные версии не следует ставить для рабочих компьютеров.

Третье и последнее число - это номер релиза версии. Для четных (стабильных) версий оно связано с количеством встроенных драйверов. Для нечетных - со степенью их стабильности и работоспособности. Так, что не следует брать самое последнее ядро. Например версию 2.5.10 (последняя не момент написания) следует брать только для из-за поддержки USB 2.0, записи на NTFS, или обладателям процессоров AMD Hammer. Но простым ядром дело не всегда заканчивается, к ядру часто идут дополнительные патчи сторонних разработчиков с разнообразными драйверами устройств, неподдерживаемых стандартным ядром. Иногда имеет смысл установить и их. Но это уже для специалистов, новичкам с этим связываться не следует.

Когда скачаете новое ядро (предположим, версии 2.4.4), поместите его каталог linux-2.4.4 в каталог /usr/src, а затем ОБЯЗАТЕЛЬНО сделайте символический линк:

ln -s /usr/src/linux-2.4.4 /usr/src/linux

Если вы не сделаете этого, то модули правильно не установятся. Зайдите в директорию /usr/src/linux и выполните одну из команд make config, make menuconfig или make xconfig. Команда make config морально устарела и полностью заменяема последними двумя. Первые две работают в текстовом режиме на обычной консоли, третья, более удобная, требует графической оболочки. Хотя результат работы всех трех одинаков.

Вам предложат набор всевозможных опций, которые можно включить в ядро. Я буду описывать их лишь в приложении к конкретным задачам, которые ставятся перед обычным компьютером на процессоре Intel или AMD. Обладателям других процессоров вряд ли требуются мои пояснения.

Самое главное, что следует помнить при выборе компонент ядра это то, что не все они приводят к работоспособности ядра на вашем компьютере. Часто они приводят к тому, что он после установки нового ядра просто не запустится. В большинстве пунктов имеется три варианта ответа Y, M, N. Если с Y и N все ясно, то M означает не "may be", а "module". Ядерный модуль это подгружаемая часть ядра, он запускается только в том случае, когда требуется его присутствие. Некоторые драйвера, например поставляемые производителем, являются модулями изначально и не могут быть вкомпилированны собственно в ядро. Другие, например драйвер корневого диска, не должны выбираться как модуль ни в коем случае.

Опции ядра

Code maturity level options. На уровень завершенности кода обращать внимание не следует, поскольку большинство компонентов ядра относятся к категории "бета" уже много лет. Ответ "да" на единственный вопрос Prompt for development and/or incomplete code/driver.

Processor type and features определяет тип процессора. Для правильных ответов следует знать, какой у вас процессор. Я полагаю, что это вы знаете. Тогда сообщите об этом ядру. В Processor family выберите свой процессор, правда, учтите, что ядро для Athlon не будет работать на 386ом процессоре. Math emulation предназначено для процессоров 386 и 486sx без математического сопроцессора и бессмысленно для любого другого. MTRR support включает дополнительные регистры памяти для процессоров семейства Pentium, практически обязательно. SMP support обязательно для включения на многопроцессорных машинах, если же у вас только один процессор, то второй при включении SMP не появится.

Loadable module support включает поддержку загружаемых модулей. Отказываться имеет смысл только для ядер бездисковых компьютеров. В противном случае отвечайте Yes на все вопросы.

General setup. Следующее по значимости меню после Processor type. Network support, PCI support, Kernel support for ELF binaries, Kernel support for MISC binaries, System V IPC, BSD Process Accounting, PCI bridge optimization и Sysctl support обязательны всегда! Все это необходимо для простой работы программ. Поддержка сети необходима, поскольку многие программы, например графическая оболочка X Window или консоль, открывают виртуальные сетевые соединения даже в отсутствии локальной сети или модема. Шина PCI встречается на 99.9% всех компьютеров, даже если на них нет ее слотов. Поддержка исполняемых файлов в формате ELF позволяет запускать программы. А MISC означает возможность запуска большинства эмуляторов и виртуальной машины Java. Кстати этот пункт полностью содержит последующий Kernel support for JAVA binaries, который в скором времени исчезнет. Пункты Kernel support for a.out binaries и Backward-compatible /proc/pci предназначены для программной совместимости и, на сегодня устарели. Пункты Parallel port support и PC-style hardware необходимы для работы параллельного порта. Support foreign hardware предназначен не для компьютеров "желтой сборки", а просто подключает некоторые варианты устаревших параллельных портов, сегодня не нужен. Пункты для APM/ACPI будут полезны большинству современных машин. Если ваша материнская плата имеет биос с поддержкой APM, то следует ответить Yes на вопросы Advanced Power Management BIOS support, Enable APM at boot time, Power off on shutdown. Так же для управления APM служат опции Ignore USER SUSPEND (полезно ответить No), Enable console blanking using APM (обычно ответ No, ответ Yes только для некоторых моделей laptop). Так же устаревшими являются PCI quirks, которые позволяют устранять некоторые ошибки реализации шины PCI на некоторых чипсетах. Несколько последующих опций снова предназначены для APM, а опция RTC stores time in GMT позволяет выставлять каждому пользователю собственное время

Plug and Play support нужен практически всегда. В то время как PnP on ISA bus и Auto-Probe for parallel port вполне можно сделать модулями.

Block devices это также нужная и полезная вещь, даже если на вашем компьютере их нет. Главное требование здесь: ВСЕ установки загрузочного и корневого дисков (или иных загрузочных устройств) не должны быть модульными. Если вы умудритесь нарушить это правило, то просто не сможете загрузиться. Название опций Normal PC floppy disk support (очень приятно, что его можно отключить), Enhanced IDE/MFM/RLL disk/cdrom/floppy support, Include IDE/ATA-2 DISK support, Include IDE/ATAPI CD-ROM support, Include IDE/ATAPI TAPE support, Include IDE/ATAPI FLOPPY support (последнее предназначено для ZIP и магнитооптики) понятно. Опция SCSI emulation необходима для CD-R и CD-RW устройств, а так же для некоторых устаревших моделей 4х CD-ROM. Несколько настроек DMA выведены сюда из-за ошибок реализаций на старых чипсетах, это Generic PCI IDE chipset support, Generic PCI bus-master DMA support, на новых моделях включайте спокойно. Опция Use old disk-only driver on primary interface также устарела. Boot off-board chipsets first support включайте только в том случае, когда твердо знаете, что делаете. А Loopback device support необходим всегда. Network block device support это редко встречающийся случай сетевых устройств. RAM disk support необходим для файловой системы /proc. А Initial RAM disk (initrd) support это виртуальное устройство, пожалуй, основной задачей которого являются заделывание дыр загрузочных дисков. Multiple device driver support служит для создания программного RAID-контроллера, т.е. на мой взгляд для ненужного развлечения программистов. Опции XT hard drive support и Parallel port IDE support дают последний шанс динозаврам от дискостроения.

Networking options представляют собой самую запутанную часть ядра. Фактически к ним так же относится и несколько последующих разделов. Обязательно, даже при отсутствии сети и модема, следует включать (и не модулем) Packet socket, Kernel/User netlink socket, Routing messages, Network firewalls, Socket filtering, Unix domain sockets, TCP/IP networking. А так же для работы в сети IP, вам потребуются IP Multicasting, IP Firewalling, IP Virtual hosting и IP Accounting. Опция IP Forwarding/Gatewaying необходима для роутера, но КРАЙНЕ ВРЕДНА для файервалла. Следующий большой набор опций, название которых начинается с IP, представляет собой огромный простор для творчества. Их вполне можно сделать модулями, а потом развлекаться уже с работающим компьютером. После "новой" опции The IPv6 protocol (она уже более 10 лет как "новая", и еще лет 10 такой будет), которую можно ставить по желанию, поскольку она ни на что не влияет, идут разнообразные не-TCP/IP протоколы. Их вполне можно включать модулями, если в вашей сети эти протоколы поддерживаются. Опасной тут является только опция Fast switching, включение ее может повлечь спонтанное отключение остальных сетевых опций.

QoS and/or fair queuering (система очередей для сетевых протоколов и сокетов) абсолютно необходима для компьютеров, работающих в кластере, бывает очень полезна для маршрутизатора, моста или роутера большой (>200 комп.) сети. В остальных 99.9% случаях только тормозит работу сети. Кстати владельцам Windows XP (Home и Pro) на заметку: этот протокол там ВКЛЮЧЕН, резервирует 20% трафика (Владельцы медленных модемов, привет!) и не отключается даже после удаления этого протокола.

SCSI support необходимы для SCSI устройств (это очевидно) и для пишущих IDE CD-R и CD-RW (очевидно не всегда). Счастливые владельцы SCSI устройств как правило сами знают, что следует включить. А обладатели "писАлок" как правило - нет. (Нечего хихикать, это я про себя тоже.) Им следует включить SCSI support, SCSI CD-ROM support и SCSI generic support.

SCSI low-level drivers для работы IDE CD-RW не нужны, остальное по необходимости.

Network device support не требуется, если вы не имеете ни сетевых устройств (адаптеров, модемов и т.д.), ни желания их подключать. Например, вы входите в секту, запрещающую использование Интернета, или просто страдаете тяжелой формой вирусофобии, в связи, с чем у вас нет ни сети, ни дисковода, а есть веселая колония антивирусов (штук 10-20). Остальным следует найти свою сетевую карту или драйвер PPP для модема, и установить их. Разъяснения требуют только некоторые опции. Dummy net driver support это пустое устройство необходимое для работы PPP. EQL support позволяет нескольким модемам работать как один (этакий модемный RAID). Ethertab network tab программный контроллер Ethernet'а, иногда бывает полезен. Keepalive and linefill требуется для устаревшего протокола SLIP. А Traffic Shaper позволяет ограничить трафик младшему брату, не используя неудобный QoS.

Amateur Radio AX.25 level 2 protocol используется для передачи данных по каналам любительского радио. Для работы требуется не сетевая карта, а любительский радиопередатчик. Только один мой знакомый, страстный радиолюбитель, его использует.

IrDA subsystem support требуется для работы устройств связи через инфракрасный порт. Можно включить модулями, а потом выяснить что требуется для вашего ИК-порта, а что нет.

Infrared-port device drivers представляет собой конкретный набор драйверов для этих устройств. Требуется только знать матчасть.

ISDN subsystem. С ней я ни разу "в живую" не встречался, подсказать ничего не могу.

Old CD-ROM drivers (not SCSI, not IDE). Название говорит само за себя.

Character devices это, на мой взгляд, самая интересная часть. Собранная здесь коллекция впечатляет: от программного терминала до синтезатора речи. Необходимейшей вещью здесь является Virtual terminal. Если вы не включите его, то у компьютера не будут работать устройства ввода и вывода, как то клавиатура, мышь, монитор, и т.д, и т.п. Для работы последовательных портов и модемов (в т.ч. внутренних) необходимы Standard/generic (dumb) serial support, Support for console on serial port. Остальные опции включаемые через Extended dumb serial driver support сегодня требуются обычно только для внутренних модемов (им следует включить Support special multiport boards), а в неумелых руках могут быть небезопасны. А для параллельного порта и принтера на нем требуются Parallel printer support и Support IEEE1284 status readback. Очень полезными являются Unix98 PTY support (поддержка виртуальных терминалов в SysV стиле), Mouse support (not serial mouse), /dev/nvram support и Enhanced Real Time Clock (вообще-то для многопроцессорных машин это просто необходимо). Включение Watchdog Timer Support позволит вам использовать устройства аварийного отключения и аппаратные средства безопасности (они конфигурируются далее). Остальные опции это специфические драйверы к довольно редким устройствам.

Mice переводится как "мыши".

Watchdog Cards позволяют вам нажимать на кнопку Reset, даже когда вас нет рядом с этой кнопкой.

Video for Linux, очень странная опция. Всегда ставьте SVGA support, остальное скачивается с сайта производителя и ставится модулем, даже если вашей карты нет в списке. Хотя есть самодельные драйвера для Radeon которые можно вкомпилировать непосредственно в ядро.

Joystick support первая, полностью игровая опцию в ядре. Будем надеяться, что не последняя.

Ftape, the floppy tape device support. Когда-то не было не только рабочего стола с иконками, но и винчестеров. Это опция из тех времен.

Filesystems имеет такие же требования, что и Block Devices, т.е. корневая и загрузочная файловые системы, а так же файловая система /proc, ОБЯЗАТЕЛЬНО должны быть включены в ядро. Остальное можно сделать при желании модулем. Quota support включает поддержку квот, что очень полезно для дискриминации женщин, расовых и сексуальных меньшинств, а так же младших братьев. Kernel automounter support включает систему автоматического монтирования съемных носителей (подробнее в следующей главе). Здесь обычно требуются следующие файловые системы семейства FAT MSDOS fs support, UMSDOS: Unix-like filesystem on top of standard и VFAT (Windows 95) fs support. Система NTFS так же поддерживается, чтение налажено нормально на ядрах серии 2.4, а вот с записью пока проблемы. Хотя иногда работает. Системы для CD-ROM это ISO 9660 filesystem и Microsoft Joliet CD-ROM extentions, их вполне можно сделать модулями если они НЕ предназначены для CD-R/CD-RW устройств. По поводу /proc filesystem и Second extended fs смотри выше. (Подсказка: название second extended имеет основная файловая система Linux.) Если вам требуется (обычно требуется) поддержка псевдотерминалов стандарта Unix98, то включите /dev/pts filesystem for Unix98 PTYs. Остальные файловые системы можно включать, если есть необходимость, но они встречаются очень редко, как правило на очень больших или на очень старых машинах.

Network filesystems требуются для работы с каталогами на удаленных компьютерах. NFS filesystem это стандартная сетевая файловая система, она распространена в сети UNIX и имеет гораздо больше возможностей, чем аналоги от Microsoft (например, монтирование по Интернету и система шифрования). Root filesystem on NFS требуется для бездисковых рабочих станций, остальным не требуется. SMB filesystem это сетевая файловая система для Microsoft Workgroups. А SMB Win95 bug work-around требуется для корректной работы Самбы с Windows 95. NCP filesystem - стандартная файловая система для Novell NetWare. А Coda filesystem это преемник NFS, который пока встречается редко.

Partition Types служат для взаимодействия с дисками неродных для Linux'а файловых систем, и в общем случае включения не требуют.

Native language support служит для работы с файлами и директориями, в названии которых имеются неанглийские буквы. Вам потребуются Codepage 437 (US, Canada), Codepage 866 (Cyrillic/Russian) для разделов FAT/NTFS и NLS ISO 8859-1 (Latin 1), NLS KOI8-R (Russian) для разделов Ext2fs.

Console drivers. VGA text console и Support for frame buffer devices не требуется только если вы даже в мыслях не собираетесь устанавливать на ваш компьютер монитор. Остальные опции служат для развлечения уставших от работы глаз. Попробуйте, может понравиться.

Sound. Звук, и этим все сказано. Если вашей карточки здесь нет, то либо стоит поискать в Интернете, либо скачать более новую версию ядра.

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

Прим: Обратите особое внимание, что в некоторых местах (General setup и др.) есть пункты, которые предлагают скомпилировать ядро для конкретного компьютера или процессора. Перед выбором этих пунктов следует обязательно убедиться, что у вас именно ЭТОТ компьютер. (Учтите, что эти компьютеры большая редкость в домашних условиях!) Если вы ошибетесь, и скомпилируете ядро для другой системы, оно с 99.99999% вероятностью работать на вашей не будет!

На чипсеты, упомянутые в настройках, такие жесткие ограничения не распространяются. Как правило, это либо чипсеты для не-х86 процессоров, либо старые чипсеты для процессоров 486 и Pentium, имеющие ошибки реализации.

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

make dep
make clean
make zdisk или make zlilo или make bzImage

Первый вариант требуется для установки на загрузочную дискету, второй для установки через lilo, третий для ручной установки. Рекомендую третий вариант. В последнем случае, откомпилированное ядро вручную копируется в директорию /boot, а затем настраивается загрузчик. Для lilo требуется добавить строку в файл /etc/lilo.conf с положением и названием ядра (подробности ниже). И запустить загрузчик командой lilo. Настоятельно советую не стирать старое ядро, а оставить его в качестве еще одного варианта загрузки.

После этого устанавливаются модули командами:

make modules
make modules_install

Перезагрузитесь и работайте. Если сможете.

Consortium Deamonicum

Я где-то читал, что администрирование UNIX - это на 60% знание конфигурационных файлов в /etc, на 20% - логов в /tmp и /var, на 10% файловой системы /proc, и только уделяется 10% остальным корневым каталогам. Пожалуй, это действительно так. Ведь в каталоге /etc находятся практически все управляющие файлы вашей системы. Если здесь я буду указывать файл shadow, то следует понимать, что он имеет полное название /etc/shadow. А если rc.d/rc1 - то /etc/rc.d/rc1. Управление Windows сводится, согласно их "frendly" и "easy-to-use", к постановке галок и нажатиям кнопок, а сам интерфейс подобен наколотым в разных местах пометочным листам. Если вам вдруг, захочется заглянуть поглубже, то, скорее всего, это не удастся, а если вы вдруг запортите один из листочков, то придется "переустанавливать систему". Управление Linux и UNIX аналогично тетради, которая всегда лежит в одном и том же месте и заполнена страничками-файлами. Для того чтобы получить полный доступ к возможностям системы достаточно прочесть эту тетрадь. Для облечения чтения этой тетради, на ее полях написаны примечания и комментарии. Если вдруг испортите одну из страничек, то просто создайте новую.

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

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

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

Для обеспечения достаточной безопасности существует система теневых паролей. Они находятся в файле shadow, доступ к которому имеет только root. Каждый раз, когда кто-либо вводит логин и пароль, активируется механизм PAM (Pluggable Authentication Modules). Он разработан в связи с тем, что многим программам требуется авторизация пользователя, как например login, ftp, telnet и др. После получения пароля, модуль PAM, который имеет приоритет root'а, выполняет его шифрование, а затем сравнивает с зашифрованным значением из файла shadow. Это шифрование одностороннее, т.е. зная шифр нельзя узнать пароль, по крайней мере, в ближайшие 10000000 лет. Однако существует механизм позволяющий подобрать пароль при известном шифре (например, программой crack) с помощью простого перебора, если доступен файл shadow. Для защиты от таких взломов, shadow имеет владельца root, и маску доступа 600.

Другим механизмом защиты от пользователей реализованным в adduser, является система дисковых квот. Каждый юзер любит набить свой каталог всяким хламом, игрушками и порнухой. Если диск переполняется, то могут случатся самые неожиданные вещи, вроде полного отказа системы. А потому следует устанавливать квоты таким образом, чтобы в полностью заполненном состоянии оставалось не менее 20% свободного места. Имеется 2 вида квот - мягкие и жесткие. Нарушение жестких квот невозможно, тогда как при нарушении мягкой квоты пользователю выдается предупреждение о том, что через определенный промежуток времени следует освободить незаконно занимаемое дисковое пространство. По истечении этого срока пользователь просто не может зайти в систему, а админ получает сообщение о превышение мягкой квоты пользователем lamer.

Админ должен защищаться и сам. Существует несколько простых методов безопасности, которые должен выполнять любой root. Во-первых, никогда не следует заходить в систему под логином root. Для того, чтобы нормально работать как root, существует простая программка su (SuperUser). Если в shell ввести su, а затем пароль root'а, то можно получить все необходимые возможности. Никогда не следует отходить от открытого компьютера, не забывайте про logout. Пользоваться su следует очень осторожно, только по необходимости, затем немедленно logout. Пароль админа должен быть уникальный (шедевры вроде kozlik4 оставьте при себе), и нигде более не употребляться и не записываться.

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

Я малость отвлекся на больную тему всех админов, но продолжу. В директории /etc находится большое количество разнообразных файлов, а не только shadow. Есть там и развлекательные вещи. К таким несерьезным (но очень интересным) настройкам относятся issue и motd. В issue приглашение, которое выводится перед login. В серьезных системах это обычно ее описание, или, проще говоря, самореклама местного админа, для остальных - сообщение вроде "Заходи тихо, проси мало, уходи быстро". Файл motd содержит сообщения, которые в произвольном порядке получает пользователь сразу после входа в систему. В Windows есть аналогичное Tip of day, или "Сообщение дня", как правило, глупое и скучное. А в файл motd можно сунуть все что угодно, а не только приторную радость операционной системы от вашего присутствия, например полторы сотни коротких анекдотов или законы Мерфи. Мне даже известен один слабо одомашненный компьютер, который виртуозно ругался матом. Если вы только начинаете знакомиться с системой, то сначала следует "поменять мебель", т.е. motd или issue.

В конце предыдущего раздела я обещал подробно рассказать о конфигурации загрузчика lilo. Он управляется конфигурационным файлом lilo.conf. Поскольку lilo умеет загружать не только Linux, но и другие операционные системы вроде Windows, DOS, OS/2 и т.д., то его конфигурация должна учитывать и их особенности. Файл lilo.conf имеет заголовок, который описывает общую работу загрузчика и секции по каждой операционной системе.

#Файл lilo.conf
#Заголовок
#
#Положение загрузчика, в данном случае в начале диска
boot=/dev/hda1
#Положение корневой файловой системы (не путать с администратором)
root=/dev/hda2
#map-файл, создается автоматически
map=/boot/map
#Графический режим загрузки
vga=normal
#Задержка для выбора
delay=30

#Секции
#Linux
image=/boot/bzImage-2.4.4
label=linux-2.4.4

#Не забудьте указать следующую строку
read-only

#Команда, подаваемая ядру Linux
append="ether=10,300,eth0"
#Windows, содержит указатель на загрузчик и таблицу разделов
other=/dev/hda3
table=/dev/hda
label=win
#Old Linux kernel
image=/boot/oldkernel
label=oldkernel
read-only
append="ether=10,300,eth0"

После того, как вы внесли какие-нибудь изменения в lilo.conf, следует их активизировать, запустив загрузчик командой lilo или /sbin/lilo. В команде,подаваемой ядру, обычно содержится информация об активных сетевых интерфейсах. Обратите особое внимание, на то что в этой строке запрещены пробелы. Если в ней присутствует пробел, то ядро воспримет это как следующую строку!

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

id:runlevel:action:process

А все строки, начинающиеся с #, считаются комментариями. (Короткое замечание о комментариях. Они так обозначаются практически везде, это не C. Всегда читайте комментарии, в них часто написано гораздо больше полезного и интересного, чем в мануалах. Всегда когда меняете какой-либо параметр, сначала закомментируйте старое значение, а потом пишите новое.)

Теперь подробнее о inittab

  • id - Параметр строки, каждая строка должна иметь уникальный id.
  • runlevel - Уровни исполнения, обозначаются числом от 0 до 6.
  • action - Действие выполнения, различаются множественные и однократные.
  • process - Имя запускаемого процесса.

Иногда требуется, чтобы уже работающая система перечитала inittab без перезгрузки. Выполните команду kill -HUP 1. init также управляет выключением и перезагрузкой системы. Значения runlevel отвечают следующему

0 - Выключение системы.
1 - Однопользовательский режим.
2-4 - Различные режимы нормальной работы.
5 - Загрузка с графической средой.
6 - Перезагрузка.

Когда init запускается, он ищет в inittab строку, которая определяет уровень загрузки по умолчанию

id:5:initdefault:

В данном случае, это загрузка с графической оболочкой. Для работающей системы параметр initdefault меняется командой telinit. Менять остальные параметры сценариев загрузки требуется редко, и для этого надо знать язык программирования shell.

В средневековье была наука под названием "демонология". Предметом ее изучения была связь демонов с человеком, поскольку тогда считалось, что человек не может познать связь демонов между собой. Но работа с Linux вынуждает заниматься именно этим. Демоны существуют в каждом компьютере, на котором стоит операционная система семейства UNIX. (Windows демоны переименованы в сервисы, т.е. в слуг или рабов, однако называть всех демонов слугами неправильно, есть огромное количество диких демонов.) Демоны запускаются процессом init и живут до того, как их не прикончит Бог (root) или плановый Армагеддон (shutdown). Демоны управляют практически всем в системе, и внутренними ресурсами и сетевыми соединениями. Запускаясь, демон сообщает об этом, также он сообщает, удалось ли это ему. Кстати, это противоречит спецификациям Microsoft pc99 и pc2001, согласно которым, человек не должен знать, какие сервисы в данный момент находятся в системе. Вот и думай после этого, кто демон, а кто слуга. Я приведу сокращенный список домашних (т.е. несетевых) демонов, а потом опишу некоторые подробнее.

crond Большой Демон Времени. Выполняет периодические команды.
anacrond Малый Демон Времени.
atd Демон Часов, выполняет однократные команды, заданные на определенное время.
gpm Демон Консольной Мыши. Вообще говоря, не нужен, поскольку мышь в X Windows работает без некого, а в "чистой" консоли мышь пользуются крайне редко.
kerneld Демон Ядра.
moduled Демон Модулей Ядра.
syslogd Демон-Архивариус. Записывает все что происходит, необходим для работы.
lpd Демон Печати, управляет принтерами.
pcmciad Демон PCMCIA-устройств.
dbflush Демон Синхронизации Файловой Системы.
autofsd Демон Монтирования Файловых Систем.

Для удобства восприятия и удовлетворения идеологии устройства в UNIX передаются файлами. Это так называемые специальные файлы, или файлы устройств. Каждый файл имеет описание, и если обычный файл помещает его в заголовке, то файл устройства прячет его в драйвере. Существует соглашение, что все используемые файлы устройств находятся в каталоге /dev. Их там очень много, это произошло не потому, что у вашего компьютера так много устройств, а для того, чтобы пользователю не приходилось их добавлять самостоятельно. Непосредственно работать с файлами устройств приходится крайне редко, а если и приходится, то работа эта полностью автоматизирована. Полезно пожалуй знать что для этого существуют скрипты /dev/MAKEDEV и /dev/MAKEDEV.local. Однако довольно часто приходится обращаться к этим устройствам, а потому полезно знать как расшифровываются их названия. Я приведу несколько примеров по которым легко это понять

/dev/hda IDE Primary Master
/dev/hdb IDE Primary Slave
/dev/hdc IDE Secondary Master
/dev/hda1 Первый раздел на hda
/dev/cdrom обычно мягкий линк на обнаруженный CD-ROM
/dev/fd0 первый дисковод
/dev/ttyS0 COM1
/dev/ttyS1 COM2
/dev/ps2mouse обычно мышь PS/2
/dev/nv видеокарта nVIDIA
/dev/nvidia1 видеокарта nVIDIA в понимании nVIDIA
/dev/modem обычно мягкий линк на порт модема (не рекомендуется)

и т.д. Список очень большой. Все устройства делятся на 2 типа - блочные и символьные. Чтение/запись на блочные устройства может проводиться блоками через буфер, в то время как символьные работают только напрямую. Пример блочного устройства - винчестер, дисковод. А символьные устройства это мышь, клавиатура и видеокарта. Ошибка, которую совершают большинство перешедших с Windows, это работа с блочным устройством напрямую. Заметьте, что это не ошибка для системы, такая работа тоже возможна, но результат может здорово отличаться от ожидаемого. Например, команда

cp /home/newbieroot/myfile /dev/hdb1

с привилегиями root'а запросто уничтожит файловую систему на первом разделе диска hdb (или диска d: в DOS), поскольку скопирует файл myfile в устройство /dev/hdb1 ПОСИМВОЛЬНО, начиная с первого сектора!

Файловая система

Работа с дисками, файловыми системами и другими блочными устройствами для Linux здорово отличается от аналогичной работы для Windows. Это опять же связано с идеологическими требованиями, с которых я начал. Корневая файловая система - та, которая предоставляет точку отсчета для всех файловых систем в Linux. Для всех файловых систем применяется так называемый механизм монтировки (я знаю, что Windows тоже монтирует файловые системы, но доступ человека к этому процессу крайне ограничен). Это означает, что любая файловая система перед работой должна быть зарегистрирована ядром. В разделе, посвященном ядру, было описано незначительное количество типов файловых систем, поддерживаемых Linux, всего их более 40. Каждая файловая система имеет свой набор параметров, которые можно менять для более эффективной работы (а иногда следует менять просто для работы). Эти параметры свои для каждой файловой системы, и некоторые из них ядро умеет определять самостоятельно. Для тех же, которые ядро не определяет, существует файл fstab. Пусть вас не обманывает его кажущаяся простота - количество параметров, которые можно в него вносить, порядка тысячи. Правда, для обычного домашнего компьютера с файловыми системами для Linux и DOS/Windows вполне можно обойтись десятком.

Поскольку пользователь не должен знать о физической структуре компьютера, то каждый раздел на жестком диске, дисководы для флоппи и CD-ROM, а также каждый стриммер, или иной носитель информации, представляется простым каталогом. Выбор этого каталога - дело администратора, но обычно следуют соглашению о том, что каждый неродной для Linux раздел находится в поддиректории директории /mnt. Для этого в ней создаются директории вроде diskc, cdrom, floppy. После монтирования файловой системы эти директории будут называться точками монтирования. Туда можно записать все что угодно, но после монтирования эти данные станут недоступными, хотя место на диске занимать будут. А потому этого делать не рекомендуется. (Существовало предложение о решении проблемы скрытой массы Галактики, как о гипотетической галактике записанной в Пространство до монтирования нашей.) Эту информацию тоже полезно внести в fstab.

#fstab
#устройство#точка монтированиятипопцииfs_freq и fs_passno
/dev/hda3/ext2defaults0 1
/dev/hda4/procswapdefaults0 2
/dev/hda1/bootext2defaults0 2
/dev/hda2/mnt/diskcvfatauto, exec, nosuid, async0 0
none/procprocdefaults0 0
/dev/hdc/mnt/cdromiso9660user, noauto, ro0 0
/dev/fd0/mnt/floppyautouser, noauto0 0

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

mount -t <тип> -o <опции> <устройство> <каталог>

Структура этого файла отвечает на естественные вопросы "Что?", "Куда?" и "Каким образом?". На последний вопрос отвечают столбцы со третьего по пятый. Самый интересный столбец, это столбец опций.

Общие опции

asyncВвод/вывод осуществляется асинхронно. Задано по умолчанию.
syncВвод/вывод осуществляется синхронно. Устанавливайте для ненадежных носителей, иногда полезно ставить для дисководов.
atimeОбновляется время обращения к файлу. Задано по умолчанию.
autoСистема монтируется автоматически.
noautoСистема монтируется только вручную.
devФайлы устройств интерпретируются устройствами.
nodevОбратно предыдущему.
execРазрешено исполнение файлов.
noexecИсполнение запрещено.
suidВключены флаги SUID и SGID.
nosuidОбратно предыдущему.
userОбычный пользователь может смонтировать систему, правда с параметрами по умолчанию noexec, nosuid, nodev.
nouserПравом монтировки обладает только root
rwЧтение и запись.
roТолько чтение.
defaultsОзначает rw, suid, dev, exec, auto, nouser, async. В 95% случаев достаточно этой опции для ext2.

Опций, специфичных для ext2, очень много и описывать их большого смысла не имеет, поскольку ядро их определяет корректно. Теперь некоторые опции для vfat (FAT с длинными именами) и ntfs, вредительские и ненужные я опускаю.

umask=nnnМаска доступа по умолчанию. Для этой и следующей опции по умолчанию используется для FAT пользователь, смонтировавший систему, а для NTFS - root.
uid=n, gid=nGID и UID владельца по умолчанию.
codepage=866Кодировка родного языка для FAT (показан русский)
quietИзменения UNIX-атрибутов не происходит и не приводит к ошибке.
uni_xlateЗаменять Unicode-символы. Практически всегда следует указывать. Позволяет правильно работать с пробелами в названии файлов.
iocharset=koi8-rКодировка родного языка для Linux (так же показан русский)

Опции для ISO9660 (или CDFS) автоматически корректно определяются для каждого диска, включая поддержку расширений для работы с длинными именами RockRidge и Joliet. Также к числу часто используемых типов файловых систем относится NFS (Network File System). Она позволяет монтировать каталоги с удаленных компьютеров по сети. Большая часть ее настроек опивается в разделе об установке сети, поскольку они специфичны именно для этого. Также я не буду описывать файловые системы Ext3 (журналируемое расширение Ext2), ReiserFS (наиболее вероятный преемник семейства Ext), и DFS (DVD File System), хотя они тоже достаточно важны, поскольку для Ext3 и ReiserFS практически полностью решены проблемы с кэшированием.

В последнем столбце стоят 2 числа - fs_freq и fs_passno. fs_freq может принимать значение 0 и 1, и отвечает за создание резервной копии раздела в случае сбоя системы. Это полезно на больших корпоративных серверах с RAID'ом и для системных программистов, разрабатывающих модули для ядра. Остальным не требуется. fs_passno определяет порядок проверки файловой системы при первичной загрузке системы. Число 1 обязательно следует указывать для корневой файловой системы. Если вы захотите проверять что-нибудь кроме нее, то ставьте число 2, в противном случае - 0.

Такое монтирование файловых систем имеет свои ограничения. Первое ограничение связано с кэшированием записи в файловую систему. Дело в том, что нельзя извлекать носитель информации до того как его не размонтировали. Если вы просто читали с него, то это часто полбеды. А вот если еще и писали... Последствия могут быть самыми неожиданными, вплоть до полной остановки системы из-за не вовремя вынутой дискеты. Причем именно дисковод являются самым незащищенным носителем. (Это одна из причин, по которым я считаю, что дисководу не место в профессиональной машине.) Привод CD защищается режимом Read-Only и блокировкой лотка. Блокировка лотка приводит к тому, что нажатие на клавишу eject на панели привода не возымеет никакого действия до тех пор, пока не размонтируете файловую систему диска. Другое ограничение это то, что для работы со сменным носителем приходится каждый раз набирать команду mount.

Частично эти ограничения позволяет обойти автомонтирщик. Это программа, которая монтирует сменный носитель при обращении к нему. Для того, чтобы использовать автомонтировщик, следует включить его поддержку в ядре. Самый распространенный автомонтировщик это autofs. Он управляется файлом auto.master. Структура auto.master

#каталог	управляющий файл
/mnt		/etc/auto.misc

Каждый раз, когда происходит обращение к каталогу /mnt, запускается автомонтировщик с управляющим файлом /etc/auto.misc.

#auto.misc
#подкаталог	опции			:устройство
cdrom		-fstype=iso9660	:/dev/hdc
floppy		-fstype=auto		:/dev/fd0

Тогда при дальнейшем обращении к /mnt/cdrom происходит запуск mount для устройства /dev/hdc с указанными опциями. Указание в опциях файловой системы для носителя обязательно, остальные опции могут браться из fstab.

Проведение проверок дисков является необходимостью, независимо от используемой файловой и операционной систем. В Linux для этого служит целый набор команд. Команда badblocks проводит проверку поверхности диска на читаемость и записываемость, она действует независимо от используемой файловой системы. Для ее выполнения файловую систему необходимо размонтировать (ГРАБЛИ! все проверки дисков это ПОСИМВОЛЬНЫЕ команды), а затем отдать команду

badblocks /dev/hda3 > /tmp/bblcks3

После этого вся информация о поврежденных участках поступит в файл /tmp/bblcks3. Это необходимо, т.к. далее она понадобится для проверки файловой системы.

Проверка файловой системы на носителях проводится различными (ПОСИМВОЛЬНЫМИ!) командами, в зависимости от типа файловой системы (есть общая fsck, которая занимается только тем, что вызывает специфическую, и для работы требует указывать тип файловой системы). Обычно требуется только e2fsck. Она проводит проверку суперблока файловой системы, структуры директории, а также может проводить проверку читаемости поверхности. Однако последнее не требуется, если вы использовали команду badblocks. Еще раз обращу ваше внимание на то, что для запуска проверки файловая система должна быть размонтирована, или, в крайнем случае, смонтирована read-only.

e2fsck -l /tmp/bblcks3 /dev/hda3

Тогда при проверке будет предпринята попытка перенести информацию с поврежденного блока на целый. Иногда это удается.

Файловая система

Любимое занятие всех счастливых обладателей операционной системы Windows, после переустановки этой системы, это форматирование диска. Существует поверье, что это спасает от многих несчастий, например, от плохо устанавливающихся драйверов. Для Linux создание файловой системы (а здесь именно так называется форматирование) занятие не менее важное. Например, если вы купили новый винчестер, или захотели записать CD. Создание файловой системы ext2 проводится командой mke2fs (существует выводок утилит и для других файловых систем серии mkfs -t , мне приходилось видеть версию mkntfs способную работать с дискетами, CD-R, и ZIP, что невозможно в Win2k/XP). Если перед созданием файловой системы выполнена команда badblocks, то имеет смысл запустить ее с параметрами

mke2fs -l /tmp/bblcks3 /dev/hda3

Для более точного управления файловой системой ext2 применяется команда tune2fs. Она позволяет менять настройки самой файловой системы, которые могут понадобиться для некорневой (а иногда и корневой) файловой системы ext2. Например, максимальное время и количество монтирований между проверками, предельный уровень фрагментации, управление кэшированием и резервированное для root'а пространство. Так же для управления и надзора за ext2 служат команды

quotaНадзор за исполнением дисковых квот
dfСвободное пространство на диске
duСтруктура диска
syncПринудительная синхронизация, т.е. запись кэша на носители

Если для ext2 проблемы создания и проверки файловых систем в большой степени убираются установщиком и автоматической проверкой, то привод CD-RW неизбежно выводит их на первый план. Уже довольно давно в большинстве дистрибутивов Linux встраивается поддержка устройств записи CD-RW, или попросту писалок. Существуют и огромного размера программы с графическим интерфейсом, возможностью записи "на лету" и создание наклеек на диск. Но чаще всего по-прежнему приходится пользоваться консольными командами, как более удобными и универсальными. Последовательность действий для записи с консоли следующая:

0. Подготовка системы для работы с CD-R/RW.
1. Создание файла, который станет образом диска.
2. Внесение информации в образ диска.
3. Выжигание образа диска.

Пункт №0 состоит из перекомпиляции ядра с добавлением необходимых опций, установки программы rdrecord (что обычно сделано) и загрузки ядра с дополнительным параметром командной строки, например "hdc=ide-scsi" для писалки на Secondary Master. Будем считать его выполненным.

Создание файла также не представляет проблемы, если у вас есть 700MB свободного пространства. Командой dd создается пустой файл. Параметры этой команды определяются болванкой и наличием/отсутствием overburn (в смысле "разбирайтесь сами, что я вам все разжевывать должен").

dd if=/dev/zero of="/tmp/cdimage" bs=1024k count=650

В нем создается файловая система iso9660 (можно создать любую другую, например ext2, fat или ntfs, но прочесть такие диски будет можно только под Linux)

mkisofs /tmp/cdimage

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

mount -t iso9660 -o loop=/dev/loop1 /tmp/cdimage /mnt/cdrw

После это вы просто записываете желаемые файлы в директорию /mnt/cdrw. В этом состоит весь второй этап. В последнем или третьем этапе происходит непосредственно запись.

cdrecord -v speed=8 -data /tmp/cdimage 

В большинстве дистрибутивов установка программ автоматизирована с помощью системы пакетов. Системами пакетов управляют пакетные менеджеры, самый удачный из которых - rpm (Redhat Packet Manager). Он устанавливается на многих дистрибутивах, а не только на Red Hat Linux. Есть и другие пакетные менеджеры, но их возможности только частично покрывают возможности rpm. Наиболее удобной возможностью rpm является прослеживание взаимосвязи между отдельными пакетами. Все пакеты rpm имеют специальную форму, в которой пишутся их названия.

имя-версия-модификация.архитектура.rpm

Имя - это название упакованного файла, версия и модификация отвечают за новизну и оригинальность, а архитектура показывает, для какого процессора скомпилирован данный код. Архитектура может быть самая разная, постарайтесь найти свою. С параметром архитектуры src пакуются исходные коды, которые придется компилировать, а noarch означает, что пакет заработает для Windows (обычно в таких пакетах документация). Параметры команды rpm могут быть следующие:

rpm -i [опции] <пакет>	Установка пакета.
rpm -U [опции] <пакет>	Обновление пакета.
rpm -e [опции] <пакет>	Удаление пакета.

Дополнительные опции для установки и обновления

-oldpackage - Разрешить замену нового старым.
-replacefiles - Разрешить замену любых файлов. Будьте осторожны.
-replacepkgs - Устанавливать пакет, даже если он уже установлен.
-force - Все три предыдущих вместе.
-nodeps - Не проверять зависимости перед установкой.
-allfiles - Устанавливать все файлы, не обращая внимание, на их возможное отсутствие.
-notrigger - Запретить триггеры (программы, которые запускаются автоматически после установки).
-excludedocs - Не устанавливать документацию.
-includedocs - Обратно предыдущему.
-test - Только проверить будущую установку.

Дополнительные опции для удаления:

-allmatches - Удаление всех версий пакета.
-noscript - Запрет preunistall и postuninstall.
-nodeps - Не проверять зависимости.
-notrigger - Запрет триггеров.
-test - Только проверка.

Управляется rpm файлом rpmrc. Менеджеры пакетов очень удобны, не следует только ставить несколько разных на одну систему. В пакетах rpm например распространяются драйвера для видеокарт nVIDIA. Тогда если у вас чистый дистрибутив, вам следует только скачать с сайта www.nvidia.com необходимые пакеты и установить, как описано в файле Nvidia Linux Driver Installation. Установка этого драйвера отличается от обычной, а потому расскажу, как она происходит. Она делится на 2 основных этапа - установка драйвера видеокарты и библиотеки GLX. Библиотека GLX это библиотека функций OpenGL для Linux и XFree86 4. Сначала прочтите файл readme, поверьте, лучшего описания драйвера я не встречал никогда. Загрузитесь без графической оболочки (режим init 4), и выполните

rpm -i NVIDIA_kernel-1.5-2880.i386.rpm

Это ставится драйвер nVIDIA. Его название kernel немного обескураживает, но думаю, можно сделать скидку на манию величия разработчиков. Он распространяется в виде откомпилированного модуля для ядра (все нужные функции в ядре Linux указали?). При установке запустятся триггеры, которые создадут устройства /dev/nvidia1, /dev/nvidia2, /dev/nvidia3 и /dev/nvidia4. А также добавят новый ядреный модуль в список загружаемых. Имейте в виду, что для работы GLX вам потребуется версия графической оболочки X Window XFree86 не ниже 4. В противном случае Quake III Arena, Return to Castle Wolfenstein и др. не запустятся.

rpm -i NVIDIA_GLX-1.0-2880.i386.rpm

Самым последним (и самым сложным) является внесение изменений в конфигурационный файл X Window. Это файл /etc/X11/XF86Config-4. Не перепутайте, есть похожий XF86Config, он не подойдет. В этом файле необходимо заменить строку

device "nv"
на
device "nvidia"
А строки
Load "dri"
Load "GLcore"

закомментируйте. Запустите X командой startx и работайте (в смысле играйте). Однако этот простой метод не подойдет, если вы поставили иную версию ядра, отличную от стандартной для данного дистрибутива. Тогда самым лучшим выходом будет установка драйвера из архива. Библиотеки NVIDIA_GLX это не касается.

Для этого скачайте файл NVIDIA_kernel-1.0-2880.tar.gz и распакуйте командой

tar xzf	kernel-NVIDIA_1.0-21880.tar.gz
После это в получившемся каталоге выполните команду
make install

Теперь можно играть. Другие устройства в современных дистрибутивах устанавливаются и конфигурируются автоматически демоном kunzu, интерфейс которого очень похож на аналогичный сервис Windows. Понятно, при условии, что у вас есть уже поддержка этого устройства в ядре или диск с модульным драйвером. Этот демон умеет очень много и почти полностью освобождает администратора от необходимости устанавливать прерывание, область DMA, и многих других часто ненужных вещей. Он умеет даже после установки новой видеокарты сделать нормальную загрузку графической среды.

Установка программ для пакетных систем - занятие несложное, не требуется даже знать где находится сама программа, ссылки на нее обычно автоматически появляются сами в /bin или /usr/bin. Однако есть класс программ, о которых следует поговорить отдельно. Я говорю об играх. На мой взгляд, столь сильная популярность Windows на отечественном рынке не связана ни с простотой установки, ни с легкостью управления, ни даже с доступностью в ларьках у метро. Первые два это просто не правда, а второе - следствие Главной Причины. Главная причина - это Огромное Количество Разнообразных Игрушек на Рынках Нашей Бескрайней Родины. Большинство статьей, посвященных операционным системам, говорят "система XXX предназначена для игр и медиа, система YYY для научных расчетов, система ZZZ - исключительно для сети". Никому из них, видимо, даже не приходит в голову, что операционная система, которая НЕ предназначена для работы ВСЕХ ВОЗМОЖНЫХ программ, просто не нужна. Так же и с Linux, но если пройти по рынкам, скорее всего вы игр не найдете (а если найдете, напишите мне, я тоже туда схожу). Тем не менее, игры есть, и достать их не сложно, достаточно скачать из Интернета.

Для того чтобы получить игрушку для Linux, зайдите на сайт производителя игры и скачайте демку для Linux, которую установите в директорию к полной версии игры для Windows. (Я считаю унизительным использование эмуляторов.) Иногда после этого следует убрать остатки демки. Для Quake III после такой установки, в основной директории игры появляются файл quake3.x86 и поддиректория q3demo. Эту поддиректорию можно (но не обязательно) стереть для сохранения места, поскольку она больше не имеет значения для самой игры. Причем версия для Windows сохранилась, поскольку сохранился файл quake3.exe. Есть способ удобнее, но сложнее. Необходимый файл quake3.x86 также можно вынуть из патча для Linux.

С Unreal Tournament все незначительно сложнее. UTdemo для Linux не следует сразу устанавливать в директорию полной игры, установите во временную. Вам потребуется только поддиректория System демки, которую и перенесите в основную директорию полной игры. Самым последним этапом установки UT является установка последнего патча, также с сайта производителя, для того чтобы не произошел конфликт версий. Найти большое количество демок можно на сайте компании Loki Games, производителя и портера игр для Linux, по адресу http://www.loki.com.

"Барышня, дайте срочно Смольный!"

Для начала настроим простую рабочую станцию. Имеется локальная сеть Ethernet с протоколом TCP/IP. Первоначально требуется скомпилировать ядро с соответствующими драйверами. Первоначально требуется поставить в соответствии IP?адресу имя компьютера (если у вашего компьютера оно есть), для в файле /etc/hosts требуется добавить строку
#IP		полное имя			псевдоним
127.0.0.1	localhost.localdomain	 	localhost
195.14.21.11	blade.hell.com			blade

Первая строка это комментарий, вторая это описание loopback и третья это добавленная нами строка для сети. Дальнейшее конфигурирование происходит при помощи команды ifconfig, она предназначена для сопоставления сетевого интерфейса и IP?адреса. Она имеет следующий синтаксис

ifconfig  [[-net -host] 
[parameters]]

Интерфейсы для Ethernet устройств называются как eth0, eth1, и т.д. Адрес сопоставляемый интерфейсу берется либо из файла /etc/hosts (ключ -host) или из /etc/network (ключ -network). Файл /etc/network является аналогом файла /etc/hosts и предназначен для сопоставления адреса и имени для сегмента сети. parameters может принимать следующие значения


upВключение интерфейса (ставится по умолчанию).
downВыключение, обратно параметру up.
netmask Присваивает маску подсети, по умолчанию ставится равной классу подсети, в данном случае 255.255.255.0.
pointopoint
Используется только для интерфейсов "точка-точка", например PLIP или SLIP.
broadcast
Для установки широковещательного адреса, отличного от стандартного.
metric
Предназначен для установлении ненулевой метрики, имеет смысл ставить только для роутера.
mtu Максимальная единица передачи данных. Для Ethernet по умолчанию равна 1500, хотя при плохой или загруженной линии ее можно уменьшить.
arpВключает ARP (Address Resolution Protocol) для обратного сопоставления имени по IP, обычно не нужен.
-arpВыключает ARP.
promiscРежим захвата ВСЕХ пакетов, мечта всякого хакера.
-promiscВыключает режим захвата.

После этого следует добавить маршрут в таблицу маршрутизации, для этого предназначена команда route. Ее синтаксис имеет вид

route [add del] [-net -host]  [parameters]

Параметр обозначает сеть (при ключе -net) и может браться из файла /etc/network. Если настраивать маршрутизацию на отдельный компьютер, то следует использовать ключ -host. А parameters может принимать значения аналогичные параметрам ifconfig, с дополнением параметра gw (gateway).

Следующим этапом настройки, является установка шлюза. Шлюз предназначен для соединения различных сетей. Если в вашей сети этим компьютером является компьютер с именем shield и адресом 195.14.21.13, то следует добавить в список hosts его характеристики, а затем использовать команду route с параметром gw. Например

route add -net 199.221.14.0 gw shield

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

Если вы все это настроили один раз, то после перезагрузки все настройки потеряются. Для это чтобы избежать этого следует включать команды ifconfig и route в сценарий загрузки сети rc.inet1 точно также как вы только что их набирали. Однако способ, когда в каждом компьютере приходится создавать один и тот же файл, не является изящным. Более удобные средства предоставляют демон gated (это аналог демона Максвелла) и метод proxy ARP (Address Resolution Protocol). Демон gated занимается тем, что динамически создает таблицу маршрутов в системе. Он необходим для больших сетей и работы с линиями "точка-точка", которые меняются динамически.

Самым мощным по сей день средством обеспечения безопасности служит так называемый firewall. Это компьютер или просто программа, которая закрывает доступ к сетевым службам и протоколам тем кому не положено. Для этого имеется минимум 2 управляющих файла: /etc/hosts.deny и /etc/hosts.allow. Структура этих файлов очень проста, в каждом только 2 столбца: сервис и хост (если вы умеете программировать консоль, то можно добавить третий столбец, но ТОЛЬКО ЕСЛИ УМЕЕТЕ). Для любого компьютера, который не служит сервером в Интернете, файл /etc/hosts.deny имеет очень простой вид

ALL:ALL

После этого можно добавить нужные адреса в файл /etc/hosts.allow.
Для проверки служит команда netstat. Она имеет следующие ключи


-rтаблица маршрутизации ядра
-nпри отображении заменяются имена IP-адресами
-iстатистические данные используемых интерфейсов
-aполные данные всех известных интерфейсов, включая ненастроенные
-t, -u, -w, -xактивные сокеты TCP, UDP, RAW или UNIX

Так же для проверки служат команды ping и traceroute. Они посылают пакеты на компьютер указанный вами в значении параметров, а затем отображают статистику.

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


#servicetypeprotocolwaituserservercmdline
#Внеш
loginstreamtcpnowaitroot/usr/sbin/rloginin.rlogin
telnetstreamtcpnowaitroot/usr/sbin/telnetdin.telnetd
ftpstreamtcpnowaitroot/usr/sbin/ftpdin.ftpd
#tftpdgramudpwaitnobody/usr/sbin/tftpdin.tfpd
#И т.д.
#Внут
daytimestreamtcpnowaitrootinternal
timestreamtcpnowaitrootinternal #И т.п.

Теперь пояснения.


serviceНазвание службы, все названия содержатся в файле /etc/services
typeТип сокета, однозначно связан с протоколом, stream для tcp, dgram для udp (User Datagram Protocol, для некоторых служб гораздо удобнее TCP).
protocolsНазвание протокола, требуется установленный драйвер в ядре и запись в файле /etc/protocols
waitРежим приема-передачи. Обычно ставится nowait для дуплексного режима приема-передачи дейтаграмм, но для некоторых сервисов требуется wait. Для сокетов типа stream следует всегда указывать nowait.
userПод этим именем будет запущен соответствующий сервис. Не следует запускать сетевую службу под более высокой, чем требуемая, привилегией. Например, службу tftp ВСЕГДА следует запускать как nobody.
serverПолное имя программы. Если сервис внутренний, то следует указать intelrnal. Внутренние сервисы служат для взаимодействия программ внутри компьютера. Кроме того, ОЧЕНЬ ПОЛЕЗНО для всех сервисов на протоколе TCP/IP использовать единый демон /usr/sbin/tcpd. Это несколько увеличит нагрузку на процессор, но значительно улучшит безопасность. (в примере не так)
cmdlineКомандная строка запуска, обычно просто ссылка на файл с этой строкой. Для внутренних сервисов строка не требуется.

Файл этот достаточно большой, и я не написал и четверти его строк. Но если вы откроете его, то увидите, что большинство строк закомментированы. Это связано с соображениями безопасности. Ни для кого (кроме разработчиков очередного "безопасного" продукта из Micro$oft) не секрет, что есть сетевые сервисы, которые содержат дыры и есть сервисы, которые даже без дыр не способны хоть что-то засекретить. Среди программистов и root'ов существует поверье, что известных дыр не содержит только самая последняя версия сервиса. Однако бывает что это не верно. Например, я специально привел строку с сервисом tftp (Trivial FTP), он предназначен для загрузки бездисковых рабочих станций, а на деле являет собой незатыкаемую дыру. Обычно, для того чтобы он корректно и относительно безопасно работал, сеть, в которой он устанавливается, делают полностью закрытой от внешнего мира файерволом. На самом загрузочном компьютере создают специальный дисковый раздел, в который только tftp и сможет адресоваться. Затем присваивают ему категорию nobody, а номера ethernet карточек фиксируют. Также опасным является сервис finger, поскольку он предоставляет информацию о работе компьютера всему миру. Нешифрованные авторизуемые службы ftp и telnet это вообще целая песнь хакера, их не ловит только ленивый.

Работа сетевого демона несколько отличается от работы обычного демона. Обычный домашний демон большую часть своей жизни спит и просыпается только для совершения необходимой работы при получении сигнала от ядра. Демон же сетевой спит редко и мониторит подотчетный ему сетевой интерфейс. При поступлении на этот интерфейс требования о соединении, демон немедленно раздваивается. Одна его локальная копия продолжает мониторить интерфейс, а другая обрабатывает соединение. После закрытия соединения локальная копия уничтожается. Исходя из этого следует строить политику запуска сетевых демонов. Службы, запуск которых обрабатывается редко, следует поручить демону tcpd, а специфическим демонам - часто используемые службы. Например, служба telnet даже в самом активно посещаемом MUD'е запускается не чаще одного - двух раз в минуту, а служба http на www-сервере средней нагрузке обрабатывает несколько десятков, а то и сотен, запросов в минуту.

Записывать все известные компьютеры в файл /etc/hosts занятие неблагодарное, а потому его полезно перепоручить компьютеру. Обычно этим занимается демон named. На самом деле это не самостоятельный демон, а часть большой библиотеки, называемой библиотекой резолвера. Задачей этой библиотеки является выполнение двух функций языка C - gethostbyname() и getnamebyhost(). Очень полезно иметь этого демона не только на сервере имен всей сети, но и на каждом компьютере, поскольку локальный демон named позволяет кешировать работу общего и разгружает сеть. Местный резолвер управляется несколькими файла, самый простой и самый важный из них - /etc/host.conf. Число его параметров очень ограничено


orderПорядок опроса служб разрешения имен. Может иметь только 3 значения bind (запросить сервер DNS), hosts (искать в файле /etc/hosts) и nis (поиск в базе NIS). Может принимать все три значения одновременно.
multiИмеет значения on или off. Если стоит on, то хосты из списка /etc/hosts могут иметь несколько IP-адресов.
nospoofТоже имеет два значения on и off, позволяет бороться с подложными именами хостов.
alertУпотребляется после включения антиспуфинга в предыдущем пункте.
trimНеобязательный параметр, значение которого имя домена. Полезен, если хост является членом нескольких доменов.

Для того чтобы использовать удаленный сервер имен DNS (параметр order имеет значение bind), необходимо указать, где этот сервер находится. Для этого служит файл /etc/resolv.conf, в котором только 2 параметра domain и nameserver. Значением domain является домен, в котором работает хост. А значением nameserver является IP-адрес сервера имен. Можно указывать не более трех серверов имен, причем порядок их просмотра определяется их положением в списке. Если этот файл отсутствует, то предполагается что сервер имен работает локально.

Локальный демон named управляется несколько нестандартным файлом /etc/named.boot (в нем коментарии обозначаются ;). Для примера

;/etc/named.boot для blade.hell.net
directory	/tmp/named
;порядок	домен				файл
cache		.				named.ca
primary	hell.net.			named.hosts
primary	0.0.127.in-addr.arpa.		named.local
primary	14.195.in-addr.arpa.		named.rev
;и т.д.

Перед описанием параметров обратите внимание как здесь пишутся имена, задом наперед, вместо неизвестной части ставится .in-addr.arpa., причем ОБЯЗАТЕЛЬНО заканчивается на точку. В этом файле ВСЕГДА должна присутствовать строка о loopback интерфейсе 127.0.0.1, как о primary, иначе многие ваши внутренние программы полезут наружу и никогда не вернутся. Теперь остальные параметры


directoryОпределяет каталог в который будут складываться данные, можно указать несколько.
primaryИнформация о зоне этого домена загружается из указанного файла.
secondaryПараметров всегда три, имя домена, имя файла и имя первичного (primary) сервера. Сначала просматривается файл, затем идет обращение к первичному серверу. После получения информации, она заносится в указанный файл. Первичных серверов можно указать несколько, порядок их опроса определяется порядком записи.
cacheОбязательно должен присутствовать, в качестве параметров идут имя домена и имя файла. Причем в качестве одного из доменов всегда должна быть указана точка (.).
forwardersСписок серверов, к которым можно перенаправить запрос.
slaveЕсли указан этот параметр, то named только перенаправляет запросы.

Получить информацию с другого компьютера в сети можно только с помощью обычных сетевых протоколов. Для этого служит еще и RPC (Remote Procedure Call). Основных применения для RPC два - это NIS (Network Information Service) и NFS (Network File System). Есть еще два побочных, понятно последствия творчества Microsoft, IIS (Internet Information Service) и SMB (сервер NetBIOS для сетей UNIX). NIS (и IIS) служит для получения информации по сети, например, с его помощью можно организовать общие пароли для всех компьютеров в локальной сети. А NFS (и SMB) служит для получения доступа к удаленным каталогам, как к локальным. Локальная сеть, организованная на NIS и NFS, очень легка для администрирования и работы, пользователь даже не должен знать, где расположен компьютер с его личным каталогом, а где с необходимой программой, он просто садится за ближайший. К сожалению, та версия NIS, с которой имел дело я, была сильно устаревшей, не обеспечивала режима теневых паролей, шифрованных соединений и надежной авторизации. Потому я напишу только об NFS.

Для того чтобы можно было начинать работу с томами (здесь это слово аналогично "удаленная файловая система") NFS, следует запустить демона NFS и установить поддержку NFS в ядре. Демоны NFS запускаются не через суперсервер демонов Интернета, а самостоятельно, через сценарий загрузки. Для этого в файле /etc/rc.d/rc.inet2 должна быть запись

if [ -x /usr/sbin/rpc.mountd ]; then
	/usr/sbin/rpc.mountd; echo -n " mountd"
fi
if [ -x /usr/sbin/rpc.nfs ]; then
	/usr/sbin/rpc.nfsd; echo -n " nfsd"
fi
if[ -x /usr/sbin/rpc.ugidd ]; then
	/usr/sbin/rpc.mountd; echo -n " ugidd"
fi

Первый блок запускает монтировщика (он обычно включен по умолчанию), второй - NFS (он обычно закомментирован), третий - демона имен и групп ugidd.

Для управления подключением клиентов, на сервере создается управляющий файл /etc/exports. Только прописанные в этом файле клиенты имеют доступ к тому NFS на сервере. Обычно он имеет следующий вид

#/etc/exports на сервере blade
/home/users	bow(rw, kerberos), arrow(rw, kerberos), riposte(rw, kerberos)
/usr/games	bow(ro), arrow(ro), riposte(ro), blaze(ro)

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


rwДоступ для чтения и записи.
roДоступ только для чтения. По умолчанию установлен.
kerberosТребования авторизации протоколом kerberos.
insecureНе требуется авторизации.
rpc-secureИспользование стандарта закрытого RPC.
root_squashОтменяет права root'а, очень полезный флажок.
no_root_squashОбратный к предыдущему. Обратите внимание, что на большинстве систем стоит по умолчанию, представляя собой колоссальную дыру в безопасности.
unix-rpcТребование авторизации в рамках домена.
map_identifyЭтот режим оставляет без изменения цифровые gid и uid. Обычно включен по умолчанию.
map_deamonОбратный к предыдущему. Позволяет иметь различные gid и uid на клиенте и сервере, требует запущенного демона ugidd.
Следующие 2 параметра управляют линками на смонтированном удаленном томе. Какой из них у вас включен по умолчанию, обычно заранее сказать нельзя, просто проверьте.
link_relativeКонвертирует линки из абсолютных в относительные, например линк /usr/games/q3a/quake.x86, находящийся в каталоге /usr/games/links/, превратится в ../q3a/quake.x86, если монтируется /usr/games/. После этого измененный линк будет работать в подмонтированном каталоге.
link_absoluteЛинки остаются без изменений, на деле требуется достаточно редко.

Теперь можно приступить к монтированию тома NFS клиентом. Для этого используется уже знакомый файл /etc/fstab. В него следует внести строки вида


#томточка монтированиятиппараметры
blade:/home/users/home/usersnfshard, timeo=20
blade:/usr/games/gamesnfsintr, timeo=12

Где параметры могут быть следующими


rsize=n, wsize=nРазмер пакетов клиента NFS, по умолчанию равен 1024. Менять не рекомендуется.
timeo=nВремя ожидания запроса клиентом в долях секунды. По умолчанию равно 7.
hardТом монтируется жестко. Если на таком томе превышено время ожидания, то на консоль выдается предупреждение, а монтировщик будет по-прежнему пытаться установить связь.
softПротивоположен предыдущему, после достижения предельного времени том размонтируется.
intrПрерывает вызовы клиента, если сервер долгое время не доступен. Используется с параметром hard.

После этого можно монтировать том вручную или посредством автомонтировщика autofs.

Я описал лишь малую часть работы демонов Интернета и демонов RPC. Например, в последнее время стали повсеместно использоваться алгоритмы шифрования и надежной авторизации, устойчивые к перехвату пакетов хакером. Это демоны sshd (Secured SHell), slogind (Secured LOGIN) и другие. Так же я не коснулся такого вопроса как организация Интернет-сервера с демоном httpd, сервером Apache и других Интернет-служб. Не ограничиваются описанными и применения RPC, это очень мощная система, которая позволяет легко (например, одной командой export DISPLAY=blade) устанавливать достаточно сложные соединения, вроде Remote Desktop Connection из арсенала Windows2000. При этом не требуется передавать все содержимое рабочего стола, если вам требуется лишь запустить одну программу. В общем, это самостоятельное творчество, которому могут помочь только собственные усилия.

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

Если соединение осуществляется с помощью протокола PPP (а сегодня это почти всегда так), то этим соединением управляет демон pppd. Это необычный демон, он отличается от всех предыдущих тем, что ЛЮБОЙ пользователь может им управлять (даже guest). Осуществляется управление с помощью аргументов командной строки и управляющих файлов. Этих файлов может быть много, один основной, и по одному на каждого юзера. Основной файл называется /etc/ppp/options, а пользовательские файлы .rcppp, и содержатся они в домашних каталогах. Правило здесь следующее: параметры для всех файлов одинаковые, но в первую очередь просматриваются параметры из основного файла, затем из пользовательских. Параметры основного файла общедоступны и общеприняты, т.е. каждый пользователь их употребляет, но не может изменить. Параметры же пользовательских файлов личные, т.е. только владелец их знает и может изменять. Таким образом, пароли следует хранить в пользовательских файлах, а настройки модема - в общем.


/dev/ttyS0Имя модема, если модем единственный, то следует писать в основной файл, если модемов несколько, то можно оставить на усмотрение пользователей.
crtsctsВключает аппаратное разрешение передачи, без этого режима скорость будет ограничена до 9600. Пишите в основной.
defaultrouteВключает маршрут PPP в качестве маршрута по умолчанию. Можно оставить на произвол пользователей, только если вы уверены в их знаниях.
authТребует авторизации при подключении к вашему компьютеру. Обязательно следует указывать в основном файле.
lockБлокирует используемый канал. Тоже обязательно следует указывать в основном файле.
domainИмя домена. Необходим для авторизации по протоколу CHAP, который для простого соединения с Интернетом через провайдера не используется.
modemУказывает демону на работу именно с модемом, пользователи ВСЕГДА забывают это слово.
-detachДемон после соединения переходит в фоновый режим, указывайте в основном файле.
noipdefaultДемон pppd в присутствии этого параметра обязан назначить для соединения тот IP, который ему предложит удаленный компьютер. Оставьте на усмотрение пользователям, только если уверены, что они не забудут его указать.
silentПосле указания этого параметра демон pppd будет работать в режиме сервера, т.е. после установления физического соединения будет ждать, когда с клиента поступит первый пакет. connect "сценарий" Параметр, который обязан принимать какое-либо значение. Каждый сценарий содержит номер телефона, имя и пароль пользователя. Эту строку ОБЯЗАН задавать пользователь.

Так же в качестве параметров при желании можно указать требуемую скорость соединения, IP-адрес своего хоста и IP-адрес удаленного. Последние параметры частично противоречат параметру noipdefault, и записываются как local_addr:remote_addr. Кроме того для работы в режиме сервера требуется настроить последовательный порт таким образом, что бы он не отсылал полученные команды назад, как эхо. Для этого следует отдать следующие команды для порта

mesg n
stty -echo

Таким образом для дозвона до провайдера можно использовать следующий сценарий (если все необходимые параметры находятся в /etc/ppp/options)

pppd connect "my_scenario"

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


demandПараметр "дозвона по требованию", соединение ppp0 будет создано, но connect запустится лишь после того как он потребуется.
active_filterЗначение этого параметра управляет настройками трафика, без него демон будет реагировать на каждый исходящий бит.
holdoff Время в секундах между дозвонами.
idle Время через которое демон повесит трубку при отсутствии трафика.

Есть еще 2 файла, которые управляют демоном pppd, они называются /etc/ppp/ip-up и /etc/ppp/ip-down. Их назначение это маршрутизация в удаленную сеть при помощи протокола PPP. Они используют те же параметры, что и описанные файлы, и если вы используете PPP только для связи с Интернетом, то их можно оставить как есть.

Тогда для пользователя основным станет создание и запуск сценария его соединения. Этот процесс давно автоматизирован с помощью специальных программ, которые разные в разных дистрибутивах Linux. Но иногда может возникнуть необходимость создания или запуска сценария вручную. Для следует создать файл с названием вроде my_scenario. А для параметра connect указать значение "chat -f my_scenario". chat это программа общения с модемом по принципу диалога, ключ -f означает, что этот диалог берется из файла. Пример части такого файла

ATZ
OK	ATDT3208080
CONNECT	' '
ogin: ghoort
word: forget
При его запуске на модем посылается команда ATZ (инициализация), затем он ожидает ответа OK. После его получения, программа chat высылает телефонный номер ATDT3208080 в импульсном наборе, и ждет ответа CONNECT. После получения ответа, она не делает ничего, на что указывает пустая строка. Получение приглашения ogin: приводит к ответу ghoort, причем такой вид не ошибка, это требуется, поскольку буквы L и l здесь различаются. Затем вводится пароль.

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


И жили они долго и счастливо...

Развитие индустрии сказалось и на Linux. Хотя и есть люди, которые ругают Linux (кстати, обоснованно) за шатание из стороны в сторону, постоянное переписывание уже готовых частей ядра, не достаточно быстрое добавление новых и необходимых, да мало ли за что... Юниксовая братия уже разделилась на 2 направления - BSD и SysV, которые различаются структурой ядра и методами межпроцессовых коммуникаций. Начинает оформляться течение, которое требует интеграции графической среды на уровень ядра, хотя бы на уровне модуля (к этим отщепенцам отношусь и я). И многое другое. Но последние годы появилось новое идеологическое требование, которое просто хорошо забытое старое.

Операционная система и программы должны минимально зависеть от архитектуры процессора. В идеале они не должны зависеть вообще.

А все-таки интересно, будет ли версия Microsoft Office для Linux?

 
 
⇣ Содержание
Если Вы заметили ошибку — выделите ее мышью и нажмите CTRL+ENTER.
Вечерний 3DNews
Каждый будний вечер мы рассылаем сводку новостей без белиберды и рекламы. Две минуты на чтение — и вы в курсе главных событий.

window-new
Soft
Hard
Тренды 🔥