Настройка и работа в Linux

         

Linux на трех дисковых разделах


Вместе с первым опытом использования Linux приходит понимание неудобства инсталляции на два раздела. Следующих шаг в «познании» – вынос за корневую файловую систему раздела /boot. Раздел /boot самая критическая часть для загрузки операционной системы и уже по этой причине достойна отдельной жилплощади. О разделах под swap и root было сказано выше. Можно только добавить, что, когда /boot выносится на отдельный раздел и для корневой файловой системы используется reiserfs, ограничение по notail снимается.

Для /boot раздела следует установить с помощью fdisk обычный тип 83 и учесть следующее:

– размер определяется расчётом: примерно 3 Mb на ядро при наличии достаточно большого запаса для столь важного раздела. Как правило, достаточно 20 – 30 Mb.

– рекомендуемая файловая система – ext2 (журналируемые файловые системы для карликовых разделов неуместны). Но, если вы оригинал и общие рекомендации не для вас – используя reiserfs, не забывайте о notail.

– если пользуетесь загрузчиком GRUB, в целях повышения надежности при обычной работе следует иметь /boot размонтированным (в случае использования LILO это не критично, но кому повредит хорошая привычка). Монтировать раздел следует только при инсталляции нового ядра или новой схемы загрузки и возвращаться в исходное состояние после выполнения работ. Запись в /etc/fstab может быть примерно следующей: /dev/hda1 /boot ext2 noauto 1 2

– ещё одной хорошей привычкой на многодисковых инсталляциях может стать резервирование в начале каждого диска небольшого раздела. Даже если вы в данное время пользуетесь единственным /boot, жертва в 20 – 30 Mb для современных дисков незначительна.

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



Linux вместе с Windows


Виктор Костромин
18.03.2001
Открытые системы, #03/2001
Версия для печати
Выскажите свое мнение



Linuxconf


источник

Поддерживает различные интерфейсы с пользователем:

командная строка а/ц окна X11 (древовидное меню) www (позволяет удаленное администрирование, выключен по умолчанию) Общие ощущения, как от Unixware 1.0: здорово, красиво, но ненадежно. Если помнишь, как это вручную делается, то лучше сделать вручную. Так и есть! Linuxconf ведет свою базу конфигурации и некоторые обычные конфигурационные файлы генерирует исходя из нее при загрузке (например, sendmail.cf!), так что вносить измения в них вручную безсмысленно. Есть мнение, что его надо отключить (начальник д.б. один).

Управляет списком пользователей, групп, файловых систем (в т.ч. сетевых), конфигурация локальной сети и PPP, сетевые клиенты и серверы, LILO.



Листинг Окончание процедуры инициализации ядра Linux


if (execute_command) execve(execute_command,argv_init, envp_init); execve("/sbin/init",argv_init,envp_init); execve("/etc/init",argv_init,envp_init); execve("/bin/init",argv_init,envp_init); execve("/bin/sh",argv_init,envp_init); panic("No init found. Try passing init= option to kernel.");}

Первый процесс в системе запускается при инициализации ядра. Пожалуй, даже человеку, не умеющему программировать, достаточно будет взглянуть на конец процедуры инициализации ядра Linux (см. листинг 2), чтобы понять, как определяется выполняемая в этом процессе программа: вначале делается попытка "переключить" процесс на файл, указанный в командной строке ядра (есть и такая...), потом на файлы /sbin/init, /etc/init, /bin/init и напоследок на /bin/sh.





Литература


В.Костромин, "Самоучитель Linux для пользователя", изд. БХВ-Петербург, 2002 г. В.Холманов, "Разбиение дисков и инсталляция Linux на LVM", http://www.softerra.ru/freeos/20792/print.html

А.Федорчук, "Установка Linux в современных условиях: дисковые разделы", http://linuxshop.ru/unix4all/?cid=&id=12.


После установки Linux можно найти много документации в каталогах /usr/doc/lilo-x.y (здесь x.y - версия LILO) и /usr/doc/HOWTO

[1] Werner Almesberger, LILO - Generic Boot Loader for Linux. Version 21, User's Guide, 4 December 1998
[2] Andries Brouwer, Large Disk HOWTO. v2.0, 22 January 1999. Существует перевод на русский язык, который можно найти по ссылкам на сайте http://linux-ve.chat.ru
[3] Kristan Koehntopp, Linux Partition HOWTO. v2.4, 3 November 1997
[4] Stein Gjoen, HOWTO: Multi Disk System Tuning. v0.17, 3 February 1998
[5] Tom Fawcett, The Linux Bootdisk HOWTO, v3.3, November 1998
[6] Cameron Spitzer, Alessandro Rubini, LILO mini-HOWTO. v2.02, 16 August 1998
[7] Bernd Reichert, NT OS Loader + Linux mini-HOWTO. v1.11, 2 September 1997
[8] Mike Harlan, The Linux mini-HOWTO. v1.3.1, 11 November 1997
[9] Jonathan Katz, Linux+Win95-HOWTO. October 26, 1996. Имеется перевод на русский язык, сделанный Ильгизом Кальметьевым, см. http://www.linux.org.ru:8100/ books/HOWTO/ Linux+Win95-HOWTO.html
[10] Renzo Zanelli, Win95+WinNT+Linux multiboot using LILO mini-HOWTO. v1.0, 26 March 1998
[11] Chris Fischer, The Loadlin+Win95 mini-HOWTO. v1.4.6, 13 March 1999
[12] Paul Gortmaker, The Linux BootPrompt-HOWTO. v1.14, 1 February 1998
[13] А. Московских, , см. http://www.infocity.kiev.ua/os/ content/os038.phtml
[14] Джон Сэвилл, Двойная загрузка Windows 2000 и Linux с помощью NT Loader, см. http://www.osp.ru/win2000/ worknt/2000/02/017.htm
[15] , см. http://t37.nevod.perm.su/ linux/linux/bigIDE.html

Виктор Костромин (http://linux-ve.chat.ru) - независимый эксперт




[1] Виктор Костромин. «Две системы на одном компьютере». «Открытые системы», 2001, № 7-8
[2] Виктор Костромин. «Linux вместе с Windows». «Открытые системы», 2001, № 3

Виктор Костромин (http://linux-ve.chat.ru/) — независимый эксперт.

Права доступа к дискам. Жесткие диски, к которым предполагается получить доступ из виртуального компьютера, должны быть доступны как на чтение, так и на запись для пользователей, которые запускают VMware. В большинстве дистрибутивов Linux физические диски (такие как /dev/had и /dev/hdb) принадлежат группе disk. Если это так, то пользователей VMware можно добавить в эту группу. Можно также просто поменять владельца устройства (но при этом стоит задуматься об обеспечении безопасности).

Файл описания физического диска. Чтобы система VMware могла получить доступ к физическим дискам, для каждого из них должен быть создан файл, содержащий данные, необходимые виртуальной машине для получения доступа к разделам данного диска. В документации такой файл называют Safe Raw Disk, мы же будем называть его файлом описания физического диска. Вот типичный пример такого файла для диска /dev/hda, на котором установлены Windows NT и Linux:

DEVICE /dev/hda
# Partition type: MBR
RDONLY 0 62
# Partition type: HPFS/NTFS
ACCESS 63 8193149
# Partition type: Linux swap
NO_ACCESS 8193150 8466254

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

Тип раздела Размещение (сектора) Права доступа
Загрузочная запись с 0 по 62 включительно Только чтение
NTFS или FAT с 63 по 8193149 включительно Чтение и запись
Область подкачки Linux с 8193150 по 8466254 включительно Нет доступа

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



Locks


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

Справа от присваивания могут стоять слова - true, yes, on ("поднять" флаг) или - false, no, off ("сбросить" флаг). Кроме того, там же может встретиться слово permanent. В этом случае подразумевается, что клавиша "залипающая", но ее "залипание" делается "железом" клавиатуры (в общем-то, это означает, что самому XKB об этой клавише заботиться не надо).

По умолчанию все клавише не "залипающие".



Логические тома и файловые системы


Как уже говорилось, LVM прозрачен для драйверов файловых систем. С другой стороны, а все ли файловые системы в одинаковой мере способны извлекать выгоду от расположения на логике? Интересно знать ответы на следующие вопросы. Способна ли файловая система расширяться – усекаться? До какой степени от первоначального размера можно расширить – усечь файловую систему, не волнуясь за последствия? Позволяет ли файловая система менять свой размер без размонтирования и остановки работающих приложений? Попытка дать ответы на эти вопросы для файловых систем ext2/3, reiserfs, xfs будет предпринята в следующей статье.

Телефон редакции: (095) 232-2261
E-mail редакции: inform@softerra.ru
По вопросам размещения рекламы обращаться к Алене Шагиной по телефону +7 (095) 232-2263 или электронной почте reclama@computerra.ru



Логический том


Один и более физических томов образуют логический том. Логический том LVM идеологически аналогичен разделу жесткого диска не-LVM системы. Логический том может содержать файловую систему, например /home или /usr.



Магнитные ленты


На компьютере Fish есть устройство записи на магнитную ленту. Утилиты GNU mt и tar очень полезны при выполнении планового архивирования данных. Документ Аарона Крэна содержит интересные ссылки по этому поводу.



Маленькие хитрости большой системы


Роман RTG ЕПИШЕВ, 30.06.2003, Мой Компьютер Weekly

В этом материале поговорим о некоторых нюансах использования ОС Linux.

Сервисный центр

Как-то раз решил поставить я Apache. Поставил, принял конфигурацию по умолчанию, запустил сервер httpd, но ожидаемого эффекта не было ? http://localhost не был найден ни одним из установленных браузеров. Игрушка Maelstrom запускалась-запускалась, а потом взяла, да и перестала работать ? не появлялся кораблик на звездном фоне.

Не думал, что эти проблемы могут быть хоть как-нибудь связаны... Оказалось, все произошло из-за отключения мною сервиса network, и поэтому вся система жила без внутренней сети. "Хорошо, с Apache сравнительно понятно, но что случилось с Maelstrom?" ? спросите вы. Как выяснилось, некоторые программы (а особенно игры) соединяются сами с собой через эту внутреннюю сеть компьютера. Не имея возможности такого соединения, они либо зависают, либо загружаются не полностью. Поэтому очень советую, если вы точно не знаете, нужен ли вам какой-нибудь сервис или нет, не выключайте его, ведь это может быть что-то важное. Хотя... если у вас стабильный состав оборудования, kudzu нет смысла при каждой загрузке это проверять, а если у вас не ноутбук, то сервису apmd незачем отнимать системные ресурсы.

Для конфигурирования сервисов в вашем дистрибутиве уже должна быть установлена какая-нибудь программа (попробуйте запустить serviceconf), позволяющая в удобном интерфейсе их включать и выключать. Но представим ненадолго, что вы вырубили, например, сервер шрифтов (xfs), и теперь никакие иксы не хотят грузиться, а для текстового режима конфигуратора нет... Как в таком случае указать, какие сервисы нужны, или хотя бы запустить требуемый?

Начнем издалека :-). В Linux существует понятие runlevel (дословно ? уровень запуска). Каждому состоянию компьютера и системы присвоен свой runlevel. При переходе из одного уровня в другой (например, из третьего в нулевой) выполняются скрипты из /etc/rc.d/rc[уровень_запуска_в_который_переходим].d (на самом деле, в этих папках ? только ссылки на скрипты в /etc/rc.d/init.d/). Если посмотреть на имена ссылок, то нельзя не заметить одну особенность. Возьмем, к примеру, тот же network. Ссылка на него в нормальном, пятом уровне выглядела у меня так:


K90network

" Ссылка есть, но почему network не работает?" ? опять спросит кто-нибудь. Разберем сначала имя: K ? означает, что этот сервис будет "убит" (KILL) при переходе в данный runlevel, цифра 90 позволяет запустить сервисы в определенном порядке, иначе они бы выполнялись в алфавитном, наконец, network ? это название сервиса. А чтобы заставить сервис запускаться, нужно всего лишь переименовать ссылку и сделать из буквы K букву S (что означает START):

S90network

Для того чтобы выключить сервис, букву S меняем на K (так уж исторически сложилось).

Вот и все, при следующем изменении runlevel'а network будет запущен. Если вы знаете имя сервиса и хотите его запустить из консоли, то наберите

/etc/init.d/[имя_сервиса] start

Например, чтобы заставить работать ранее уже упоминавшийся xfs:

/etc/init.d/xfs start

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

init <номер уровня>

(она требует прав суперпользователя). Удобно использовать halt (для выключения питания ATX-систем нужно добавить ключ -p) и reboot.

Установка Другой Операционной Системы.

Вот вроде бы и работает Linux, вам он уже начинает нравиться. Но у всех "переходящих" пользователей обязательно на другом разделе еще живет какая-нибудь Windows. В один прекрасный день она дает сбой, и вы принимаетесь переустанавливать ее. Установили, настроили, перезагружаете компьютер, а входа-то в Linux уже и нету ? Windows преспокойно затерла загрузочный сектор. Для восстановления загрузчика Linux вам потребуется загрузочная дискета, содержащая ту же версию ядра (если версии не будут совпадать, фокус с дискетой не получится), что и в вашей системе. Бросайте ее в дисковод и с нее загружайтесь, на запрос boot: нажмите Enter, и компьютер должен загрузиться в Linux (разумеется, запускается та система, которая уже у вас установлена, поэтому нет смысла использовать загрузочную дискету на компьютере без Linux). Теперь нужно стать суперпользователем (root) и установить загрузчик:



если у вас (был) установлен grub, то в консоли наберите

/sbin/grub-install <диск>

где <диск> ? физический жесткий диск, откуда грузился прежний grub (обычно тот же диск, на котором установлен Linux);

если же lilo, то достаточно просто набрать

/sbin/lilo

Теперь, если не выдано сообщений об ошибках, система готова к дальнейшей работе.

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

Загружайтесь с первого компакт-диска. Далее наберите:

linux rescue

Инсталляционная программа проверит ваши жесткие диски на наличие Linux'а и, если таковой найдется, примонтирует вашу файловую систему куда-то в /mnt/sysimage (об этом будет сказано в специальном сообщении). Теперь вам нужно /mnt/sysimage сделать вашим корневым каталогом:

chroot /mnt/sysimage

А сейчас устанавливайте загрузчик ? так, как об этом написано выше.

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

mkbootdisk -?device=/dev/fd0 <Ваша версия ядра>

Чтобы узнать вашу версию ядра, наберите

uname -r

(Будьте внимательны, версия ядра в Rescue-режиме может отличаться от установленной на вашей системе!)

Среда переменных

Как и в DOS/Win, в Линуксе существуют свои системные переменные, и некоторые из них могут быть нам интересны:

$HOME ? указывает на домашний каталог пользователя;

$PATH ? список каталога запуска;

$LANG ? текущая локаль (язык и региональные настройки);

$PWD ? текущая рабочая директория;

$USER ? текущий пользователь;

$DISPLAY ? (если указана ? адрес/номер X-сервера, который в данный момент используется).

Итак, что они нам дают? Во-первых, мы всегда сможем узнать имя в системе (echo $USER или команда whoami ('кто я такой')), во-вторых ? папку, где находимся (echo $PWD, также команда cwd (current working directory)). Переменная $PATH уже обсуждалась ранее на страницах газеты, разберем подробнее $LANG и $DISPLAY. Когда система только загружается, устанавливается переменная $LANG, ее значение берется из файла /etc/sysconfig/i18n. Когда нужно сменить локаль с русской, например, на английскую, то достаточно выполнить



export LANG=[язык.кодировка]

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

Также можно прописать в файл ~/.bashrc строчку

export LANG=ru_RU.KOI8-R

а в /etc/sysconfig/i18n ?

LANG=en_US

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

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

env <переменная=значение> [переменная2=значение2 ...] <имя программы> [аргументы программы]

А вот таким образом вы можете запустить Midnight Commander с английской локалью, при этом все программы, запущенные из mc, будут все равно использовать русскую:

env LANG=en_EN mc

Что касается DISPLAY... Вы запускали когда-нибудь приложение, требующее X-сервер, из "голой" консоли? Помните сообщение о невозможности присоединиться к X-серверу, хотя тот у вас уже час как запущен? Правильно, это потому что программа не знает, куда подключаться. Вот эта информация и указывается в переменной $DISPLAY. Для приложений из среды KDE и оконных менеджеров достаточно при запуске указать -display :0 или --display :0, а вот приложения на базе Gtk и проч. могут не иметь такой опции. Но у нас есть env, так что можем запустить:

env DISPLAY=:0 xmms

Теперь перейдите в консоль с X-сервером, и вы увидите, что там открылось окно плейера XMMS. Команда

env LANG=en_EN kwrite -display :0

запустит текстовый редактор kwrite с английским интерфейсом на первом X-сервере.

Скачал с сети и установил как-то раз я оконный менеджер fluxbox и долго не мог понять, как в него войти. Потом вспомнил, как запускаются другие оконные менеджеры, добавил в /etc/X11/xdm/Xsession после строчек, отвечающих за запуск KDE



fluxbox) exec -l $SHELL -c "$SSHAGENT fluxbox”

затем изменил в этой же папке kdmrc, добавив в строчку

SessionTypes=default,kde,failsafe,gnome,

еще и fluxbox. Только после этого в kdm появился соответствующий рабочий пункт меню.

Немного закручено, не правда ли? А если менеджер только попробовать хочется?

В таком случае все просто ? запускаете

(X:1 &); fluxbox -display :1

или

(X:1 &); env DISPLAY=:1 fluxbox

и оконный менеджер загрузится в новые иксы.

Икс vs. Консоль

Вот была такая проблема: при инсталляции системы я не выбрал запуск X-сервера при загрузке, наивно полагая, что уже порядком поднаторел работать в консоли. Через час я опять устанавливал Linux, уже с загрузкой X-сервера по умолчанию. А оказалось вот что.

В файле /etc/inittab указывается, каким образом процесс init должен настраивать систему в определенных runlevel'ах, В частности, вы можете указать уровень runlevel по умолчанию (НЕ СТАВЬТЕ 0!), разрешить/запретить использование клавиш Ctrl+Alt+Del во время загрузки системы. Где-то в конце файла Вы найдете строчку

x:5:respawn:/etc/X11/prefdm -nodaemon

Параметры в inittab существуют в таком виде:

id:runlevel[runlevel2...]:действие:процесс, который нужно запустить

id ? уникальное имя для процесса ? от 1 до 4 букв/цифр;

runlevel ? соответственно, runlevel(ы), при которых процесс будет запущен;

действие ? что должен делать init с процессом (см. man inittab; рrespawn ? запускать заново, если процесс будет уничтожен);

процесс ? какая-нибудь программа (напр. /etc/X11/prefdm).

Вы заметили, что в /etc/init.d нет ничего типа S84Xserver? Правильно ? запуск xdm/kdm/gdm происходит из inittab, а те уже в свою очередь запускают Иксы. Для того чтобы отказаться от автоматической загрузки Xserver, вы можете просто в начале файла вместо

id:5:initdefault:

написать

id:3:initdefault:

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



Все, отключили иксы при загрузке. Но тут вдруг срочно понадобилось запустить, например, grip, а он требует Xserver. У нас три выхода: изменить runlevel на 5 (если вы ? root) и загрузить ваш gnome/kde/windowmaker/fluxbox; запустить вручную сервер (прав обычного пользователя для этого достаточно), а там и программу (но окно будет без управления ? не запущен оконный менеджер); или же запустить X-сервер, потом GNOME, а в нем уже grip.

Первый вариант будет выглядеть так:

init 5

Второй вариант:

(X :0 &); env DISPLAY=:0 grip

А третий:

(X :0 &);( env DISPLAY=:0 gnome-session &);env DISPLAY=:0 grip

(X:0 & в круглых скобках потому, что только так мы можем указать более одной команды ? bash не понимает конструкцию &;)

Единственный недостаток второго и третьего методов ? даже если указать ключи --quiet и перенаправление > dev/null 2>&1, некоторая отладочная информация редко, но все-таки может вылезать на экран. Если вы все же захотите использовать именно эту виртуальную консоль, добавьте еще и знак & в конец последней команды, иначе оболочка будет полностью захвачена работающим процессом.

С помощью таких действий можно, например, запустить mplayer вообще на отдельном сервере и без оконного менеджера (кнопка f переключает в полноэкранный режим):

(X :1 &); mplayer -display :1 Matrix.avi -vo x11 -zoom

или The GIMP, но с оконным менеджером Metacity без запуска самого GNOME:

(X :1 &);( metacity ?display :1 & ); env DISPLAY=:1 gimp

Мы получаем меньшую загруженность системы, следовательно, большую производительность. А переключаться по X-серверам будем кнопками Ctrl+Alt+F7, Ctrl+Alt+F8 и так до F12.



Источник - LinuxBegin.ru

http://linuxbegin.ru

Адрес этой статьи:

http://linuxshop.ru/linuxbegin/article391.html


Mandrake Linux с XFree версии x


Правильно установленные опции LANG=language и LC_ALL=langauge в Вашем bash_profile уже достаточны (но не для приложений KDE 2.x). Стандартный прием с использованием кодов клавиш в .Xmodmap (scaron, lcaron, not "threequarters" or "mu", etc.) и исполнение команды: "xmodmap /.Xmodmap" позволит Вам переключать клавиатуру клавишей Scroll Lock (если Вы используете мой файл Xmodmap; в случае другого файла Xmodmap попробуйте правый Alt или другие клавиши, в соответвтсвии с тем, что определено в файле Xmodmap).

Установка FontPath в /etc/X11/XF86Config и /etc/X11/XF86Config менять не нужно:

FontPath "unix/:1"

XFree86 прочтет Ваши новые ISO8859-2 шрифты автоматически из директории /usr/share/fonts (как и в RedHat). Просто удивительно, что нет нужды копировать файл ../ISO8859-2/Compose в директорию ../ISO8859-1 для того, чтобы заработали dead keys. Для использования шрифтов ISO8859-2 с приложениями KDE 2.0 измените файл i18n как указано выше.



Map[]


Как-раз описывает - какой "уровень" выбирается в зависимости от состояния (активности) модификатора. В квадратных скобках указывается модификатор или их комбинация (через знак '+'), а справа от "знака присваивания" - соответствующий "уровень" (Level1, Level2 ...). Кроме того, в качестве модификатора (внутри скобок) может встречаться специальное слово "None", что, как не трудно догадаться, означает отсутствие (точнее - неактивное состояние) модификаторов.
Например,

map[None] = Level1;

если модификатор (модификаторы) не активен, то используется "уровень" 1,

map[Shift] = Level2;

если активен модификатор Shift, то выбирается "уровень" 2,

map[Control+Alt] = Level3;

если активны сразу два модификатора - Control и Alt, то выбрать "уровень" 3.

Обратите внимание, что в последнем примере каждый из модификаторов Control и Alt, по-отдельности могут никак не влиять на изменения "уровня", (а только нажатые вместе). В этом случае в описании типа не будет строчек c map[Control] и map[Alt].
А вот map[None], как правило, присутствует в каждом типе.

Замечу также, что уровень можно указывать как по имени - Level1, Level2 и т.д., так и просто числом в допустимом диапазоне (1-64). Кстати, программа xkbcomp понимает только названия от Level1 до Level8. Поэтому если вам понадобится больше уровней, то указать их вы сможете только цифрами.



Маршрутизация


Пока чистая статика. Локальная сетка и прямая маршрутизация модемов на NAS (routes_to_modems.sh - куча "route add -host адрес gw NAS metric 1", /etc/rc.d).

В RH 6.2 для тех же целей используется /etc/sysconfig/static-routes, пока оставил как есть.



Маскарадный костюм


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



Массивы


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

Имя_массива[индекс]=значение

Например

Array[1]=23
Array[3]=54
Array[0]=77

Нумерация элементов начинается с ноля. Тип элементов массива, как и тип переменных, текстовый.
Присвоить значение элементам массива можно также с помощью инструкции set. Например, выражение

set –A array 3 56 77 12

Аналогично выражениям

array[0]=3
array[1]=56
array[2]=77
array[3]=12

Обратиться ко всем элементам массива сразу можно так:
${array[@]}, где array – имя массива.
Например, echo ${array[@]}



Matteo Dell'Omodarme


Я учусь в университете Пизы и пользуюсь Linux c 1994 года. Сейчас я занимаюсь администрированием Linux-станций в астрономическом отделении физфака, где особенно много работаю над проблемами безопасности. Мой главный почтовый адрес - это matt@martine2.difi.unipi.it.

Copyright © 2001, Matteo Dell'Omodarme.
Copying license http://www.linuxgazette.com/copying.html
Published in Issue 68 of Linux Gazette, July 2001

Вернуться на главную страницу



Matthew Dillon


    

dillon@apollo.backplane.com

  

Первоначально эта статья была опубликована в номере DaemonNews за январь 2000 года. Эта версия статьи может включать добавления, касающиеся изменений в реализации VM во FreeBSD от Мэтта и других авторов.

Название статьи говорит лишь о том, что я попытаюсь описать в целом VM-систему понятным языком. Последний год я сосредоточил усилия в работе над несколькими основными подсистемами ядра FreeBSD, среди которых подсистемы VM и подкачки были самыми интересными, а NFS оказалась `необходимой рутиной'. Я переписал лишь малую часть кода. Что касается VM, то я единственным большим обновлением, которое я сделал, является переделка подсистемы подкачки. Основная часть моей работы заключалась в зачистке и поддержке кода, с единственной заметной переделкой кода и без значительной переделки алгоритмов в VM-подсистеме. В основном теоретическая база работы VM-подсистемы осталась неизменной, а большинство благодарностей за современных нововведения за последние несколько лет принадлежат John Dyson и David Greenman. Не являясь историком, как Керк, я не буду пытаться связать различные возможности системы с именами, потому что обязательно ошибусь.



Механика


Детальное описание механики программируемого автозаполнения появится здесь через некоторое время.



Менеджеры окон и рабочего стола


gnome/enlightment - нельзя выбирать Themes/BrushedMetal, иначе не будет русских букв в заголовках окон (используется шрифт lucida?).



Meta


Наконец, последняя клавиша, которую можно отнести к модификаторам - клавиша meta.

Клавиша эта не фиксируется, то есть она активна только пока вы ее удерживаете в нажатом состоянии.

Когда она активна, syscons при выдаче кода другой нажатой клавиши, сначала вставляет код Esc (27). То есть обычные клавиши (алфавитноцифровые) начинают выдавать последовательность из двух кодов (например, клавиша [A] - EscA). Дело в том, что некоторые программы (Midnight Comander, emacs и т.д) широко используют такие комбинации в качестве "горячих клавиш". Без модификатора meta их можно получать, последовательно нажимая [Esc] и нужную клавишу.

По умолчанию эта клавиша на клавиатуре отсутствует. Если вы считаете, что с ней вам будет удобнее, можно назначить ее на одну из парных кнопок модификаторов (Shift, Ctrl или Alt), а вторую оставить для ее "прямого назначения". Если же у вас имеется клавиатура "от Microsoft", с дополнительными кнопками (два "окошка" - слева и справа и "меню") то под meta

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



Метод правки напильником


Создайте файл autologinfred.c в своем любимом текстовом редакторе и наберите эту короткую C-программу:

int main() { execlp( "login", "login", "-f", "fred", 0); }

Системный вызов execlp выполнит команду "login -f fred" и заменит текущий контекст обработки на контекст этого вызова. Страница man для login описывает действие ключа -f. Откомпилируйте эту крошечную программу с помощью компилятора GNU C:

$ gcc -o autologinfred autologinfred.c

Получите права root'а (командой su) и скопируйте исполнимый файл в общедоступную директорию:

# cp autologinfred /usr/local/sbin/

Теперь взглянем на /etc/inittab. Этот конфигурационный файл используется init, самым первым процессом, который запускается при инициализации Linux. Вам должны попасться строки наподобие следующих:

1:2345:respawn:/sbin/mingetty tty1 2:2345:respawn:/sbin/mingetty tty2 3:2345:respawn:/sbin/mingetty tty3

Конкретное содержимое /etc/inittab варьирует от дистрибутива к дистрибутиву. В Debian-системах можно увидеть:

1:2345:respawn:/sbin/getty 38400 tty1 2:23:respawn:/sbin/getty 38400 tty2 3:23:respawn:/sbin/getty 38400 tty3

Измените строку, начинающуюся с "1:2345" так, чтобы она выглядела следующим образом:

1:2345:respawn:/sbin/getty -n -l /usr/local/sbin/autologinfred 38400 tty1

В результате пользователь fred будет зарегистрирован в системе на первой виртуальной консоли. В некоторых дистрибутивах GNU/Linux (например, в RedHat) должен использоваться /sbin/agetty. Ключ -l <альтернативная программа регистрации в системе> заменяет используемую по умолчанию программу /sbin/login той, которую мы скомпилировали ранее. Ключ -n говорит getty не запрашивать регистрационное имя пользователя.



"Метод выравнивания" групп


groups = [ wrap | clamp | число ] (или outofrangegroups ...)

Задает "метод выравнивания групп". Напомню, что метод может быть wrap, clamp

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

groups = номер_группы



Метод выравнивания номера группы


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

Wrap ("заворачивание") - получившееся число делится на количество групп и берется остаток от деления. Этот метод используется по умолчанию. Clamp ("удержание в границах") - если получилось число большее чем номер последней группы, то берется этот самый "номер последней группы", если же получилось число меньше, чем номер самой первой группы, то берется первая группа. Redirect ("перенаправление" или, точнее - "замена") - если используется этот метод, то в "состоянии XKB" должен быть определен еще один дополнительный параметр - номер группы "куда перенаправить" (или - "чем заменить"). Если получившееся число выходит за пределы допустимых значений для групп, оно просто заменяется этой самой "чем заменить". Кстати, если и этот номер не уложится в допустимые границы, то XKB подставит первую группу.


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

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

Возможные методы точно такие же, как и "глобальные". По умолчанию используется метод Wrap.



Microhak


Микро хаки

Copyright(С) Олег П. Филон
январь 2001, Гомель, BY
ophil@gomelug.agava.ru

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

Очень давно, ещё трудясь в большом коллективе на советской многопроцессорной суперЭВМ "Эльбрус", мы уже были хорошо знакомы с зависанием машины. После ее жёсткого рестарта начиналось своеобразное соревнование - кто первым залогинится и запустит на трансляцию свою программу. Это называлось "выиграть вбрасывание". Часто выигрывать вбрасывание мне помогал нехитрый приём - я называл файлы простыми быстро набираемыми на клавиатуре именами. В современных командных процессорах есть полезная команда, позволяющая использовать этот приём по максимуму. Любую часто используемую команду можно обозвать коротким псевдонимом - alias'ом. Вот некоторые alias'ы, живущие у меня в bash:

alias ds='dirs' alias l='less' alias ll='/bin/ls -lF --color' alias ls='ls --color=auto ' alias m='more' alias mu='mutt -y' alias pp='pushd' alias ss='ps aux' alias xx='startx -- -bpp 16'

Здесь можно заметить ещё один простой приём. Ваш командный процессор хранит стек каталогов, с которым можно работать с помощью трёх команд: pushd, popd и dirs. Если завести у себя файл .dirs_stack приблизительно вот такого вида:

for sd in /usr/doc/HOWTO ~ftp/pub /usr/src/linux /usr/local/src do if [ -d $sd ] ; then pushd $sd fi done > /dev/null pushd -0 > /dev/null

а затем при старте, например, из файла .bashrc его вызывать

if [ -f ~/.dirs_stack ]; then source ~/.dirs_stack fi

, то перемещаться между несколькими любимыми каталогами не составит особого труда. Например, если команда ds выдает

~ ~ftp/pub /usr/src/linux /usr/local/src /usr/doc/HOWTO

, то попасть в каталог HOWTO можно, нажав на клавиши всего 6 раз:

...$ pp -0

Посмотреть, как себя чувствует, к примеру, web-сервер apache, проще всего вот так:

...$ ss|grep [a]pache


А используете ли вы bash, если надо слегка поправить один список и получить другой? Например, найдём юзеров, имеющих в качестве shell этот самый bash, и сделаем соответствующий отчет:

...$ LIST=$(grep /bin/bash /etc/passwd|cut -d: -f1) ...$ LIST=$(echo $LIST|sed 's/ /,/g') ...$ LIST=$(eval echo 'юзер\ \"'{$LIST}'\"\ пользуется\ bash\\n') ...$ echo -en ' '$LIST

Этот пример, пожалуй, не очень удачный для генерации списка. Раз уж мы задействовали sed, надо было ему и весь отчёт поручить. По поводу раскрытия фигурных скобок возможности bash лучше проиллюстрирует вот такое упражнение с русским языком:

...$ echo {в,от,на,про,\ }{реж,пол,вод}{\ ,ит,ка}|fmt

В последних версиях bash появилась возможность использовать прямо в командах регулярные выражения. Часто возникает необходимость выделить из полного имени отдельно имя каталога и имя файла. Для этого исторически были предназначены отдельные команды /usr/bin/{basename,dirname}. Например:

...$ PROBA=$(pwd)/micro-hacks ...$ echo $PROBA /home/ophil/articles/micro-hacks ...$ basename $PROBA micro-hacks ...$ dirname $PROBA /home/ophil/articles

А вот как почти то же самое можно теперь делать прямо в bash'е:

...$ NAME=${PROBA##*/} ...$ DIR=${PROBA%$NAME} ...$ echo $DIR $NAME /home/ophil/articles/ micro-hacks

Знаете ли вы, что в bash'е, как в настоящем языке программирования, есть переменные целого типа и арифметические операции над ними? Если объявить переменную целой, с ней можно выполнять элементарные арифметический действия:

...$ declare -i n=10 ...$ n=n+20 ...$ echo $n 30 ...$ n=n/3-2 ...$ echo $n 8

Если вам вдруг понадобится арифметика с большой точностью, из bash'а легко получить доступ ещё к одной жемчужине из классического наследия UNIX - калькулятору bc. Допустим, мы захотели проверить, действительно ли, как шутили когда-то на физтехе, "Ежды Пи = Пижды Е" хотя бы с точностью 400 знаков:

...$ PI=$(echo 'scale=400;4*a(1)'|bc -l) ...$ PI=$(echo $PI|sed 's/\\ //g') ...$ E=$(echo 'scale=400;e(1)'|bc -l ...$ E=$(echo $E|sed 's/\\ //g') ...$ echo $PI*$E|bc



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

#! /bin/sh usage="\n Usage: $0 имя_каталога\n показывает список файлов, имеющих одинаковую длину\n\a " if [ $# != 1 ] then echo -e $usage ; exit 0 fi

ls -lS $1|awk ' size==$5 { list[$9]=$0 # совпал размер - сохраним в массиве split(line,a) # вернёмся к предыдущей строке list[a[9]]=line # обе строки в массиве } { size=$5 # для каждой строки line=$0 } END { for (i in list) print list[i] }'|sort -k5n

Здесь bash соединяет воедино простейшую подсказку, показ содержимого каталога, вызов интерпретатора awk и текст программки для него, включая печать файлов с подозрительно одинаковой длиной - кандидатов на замену файла жесткой ссылкой, и в самом конце сортирует список файлов по размеру.

Еще один пример использования языка AWK можно посмотреть в отдельной заметке, рассказывающей о генерации случайного телефонного справочника любого размера из подручных средств: произвольного текстового файла, утилиты tr и интерпретатора awk.

<DEPRECATED> Я обнаружил, что упражняясь с perl, также иногда удобно оборачивать вокруг программы на perl скрипт bash, чтобы иметь в одном файле и текст программки, и обрабатываемые данные:

#! /bin/bash perl -we ' use strict; use Data::Dumper; my(@new); while(<>){ chomp; @new=(); push(@new, $+) while m{ "([^\"\\]*(?:\\.[^\"\\]*)*)",? # groups the phrase in quotes | ([^,]+),? | , }gx; # пример из perlfaq4 by Jeffrey Friedl push(@new, undef) if substr($_,-1,1) eq ","; print "ophil debug:\n", Dumper(\@new); }'<<\EOT SAR001,"","Ci, $$","\"Bob@Smith\"","%am",N,8,1,0,7,"Core&&Dumped" Я12340,,"НЕЧТО-О-О-О","Абвгд'ей Прстуф","проба",Ъ,1,0777,3,4,"да" EOT



</DEPRECATED>

Предыдущий пример пришлось отменить. Несмотря на то, что он вполне работает, но называться хаком он права не имеет. По хакерской традиции, если есть более изящное или эффективное решение, то хаком является именно оно. Конечно, в perl'е в самом есть конструкции, позволяющие получить ввод прямо из файла. Вот более правильный вариант, не использующий лишний вызов bash, не привязанный вообще к командному процессору:

#! /usr/bin/perl -w use strict; use Data::Dumper; my(@new); while(<DATA>){ chomp; @new=(); push(@new, $+) while m{ "([^\"\\]*(?:\\.[^\"\\]*)*)",? # groups the phrase in quotes | ([^,]+),? | , }gx; # пример из perlfaq4 by Jeffrey Friedl push(@new, undef) if substr($_,-1,1) eq ","; print "ophil debug: ", Dumper(\@new); } __DATA__ SAR001,"","Ci, $$","\"Bob@Smith\"","%am",N,8,1,0,7,"Core&&Dumped" Я12340,,"НЕЧТО-О-О-О","Абвгд'ей Прстуф","проба",Ъ,1,0777,3,4,"да"

Рассмотрим возникающую время от времени реальную задачу - переименовать или подредактировать большое количество файлов, например, пришедших из другой системы. Здесь оказываются очень удобны пара утилит find и xargs. Если ещё под рукой имеются интерпретатор perl, pcregrep, понимающий перловые регулярные выражения, и миниатюра rename, написанная самим Ларри Уолом, то количество файлов перестает играть какую-либо роль, единственная сложность - правильно регулярно выражаться.

Для начала займёмся самими именами файлов - например, заменим в имени файла пробелы на знак подчеркивания "_":

...$ find -name '* *' -print0|xargs -r0 rename 's/ /_/g'

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

...$ for i in $(seq 1 20);do нужные команды;done

Теперь попробуем выполнить какое-нибудь несложное редактирование. Для примера, будем искать фразу 'http://что-угодно/буквыцифры.htm"' и заменим ее на 'http://что-угодно/буквы-00-цифры.html"' во всех файлах типа *.html, содержащих указанный контекст. Регулярные выражения, в отличие от нецензурных, нужно старательно обдумывать, а иногда не грех их и поотлаживать. Например, перед собственно редактированием полезно посмотреть, что же наши конструкции на самом деле нашли

...$ find -type f -a -name \*\.html| > xargs perl -wne 'print "$1 $2 $3\n" > if m#(http://(?:[^/]+/)+)([a-zA-Z-_]+)(\d+)\.htm"#'



Если мы нашли действительно то, что искали, поправим все файлы с заданным контекстом, не трогая остальные:

...$ find -type f -a -name \*\.html| > xargs pcregrep -l 'http://([^/]+/)+[a-zA-Z-_]+\d+\.htm"'| > xargs perl -i.bak -wpe ' > s#(http://(?:[^/]+/)+)([a-zA-Z-_]+)(\d+)\.htm" > #$1$2-00-$3.html"#g'

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

...$ find -name \*\.bak|xargs rm

В заключение ещё один фокус - как перенести установленный Линукс из одного раздела в другой или на новый диск. Допустим, мы успешно загрузили старую систему, создали на новом диске разделы и файловую систему, смонтировали новый раздел и перешли в него. Как и положено, пока он содержит только каталог lost+found. Делаем:

...# tar cp -С / bin boot dev etc lib root sbin usr var|tar xvp ...# mkdir proc mnt tmp;chmod 1777 tmp

Теперь нужно поправить файлы, привязанные к текущему разделу. Иногда достаточно поправить только etc/fstab. Но лучше внимательно проверить весь etc на предмет имен хостов, адресов, создать заранее swap раздел. Не стоит также оставлять старые журнальные файлы в var/log/. Архивы или каталог /home можно копировать избирательно. Например:

...# mkdir home;cd home ...# tar cp -C /home ftp/pub/doc ophil proba|tar xvp

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

...$ /usr/sbin/rdev vmlinuz-2.4.0 /dev/hda3 ...$ dd<vmlinuz-2.4.0>/dev/fd0

Настоящим кладезем подобных полезных приемов и программ является книга издательства O'Reilly "Unix power tools, 2nd ed." , авторы Jerry Peek, Tim O'Reilly, Mike Loukides. Эта книга переведена на русский и выпущена издательством BHV.


Мнение народа


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

Этот же народ позволит вам прояснить еще один вопрос, которому подавляющее большинство сисадминов не придает значения. Вспомним предыдущего "плохого" сисадмина. Аккуратно разузнайте, в каких отношениях он был с начальством, какова причина увольнения - в связи с переходом на более высокооплачиваемую работу или его "ушли": Если же его уход сопровождался скандалом - вам дополнительная работа. Довольно часто уволенные люди, считающие решение начальства несправедливым, пытаются сделать напоследок хоть мелкую пакость. Просмотрите внимательно содержимое Пуск>Программы>Автозагрузка, а также конфигурационные файлы и системный реестр Windows с помощью программы msconfig.exe на предмет загружаемых программ. При наличии подозрительных файлов - примите меры. Много ума не надо, чтобы сделать саботирующую программу,- в назначенный день (например, 1 апреля) при загрузке удалить, к примеру, все DOC-файлы и записать поверх файл, сгенерированный из пробелов. И глупец тот, кто считает, что с ним это не случится, а эти меры - паранойя. Эта процедура не займет много времени, но может избавить от многих проблем в будущем.



Modifiers


Просто перечисляет, какие модификаторы (реальные и виртуальные) влияют на выбор "уровня" в данном типе. Если модификаторов несколько, они перечисляются через знак '+'.
Например,

modifiers = NumLock;

или

modifiers = Shift+Lock;



Modifiers, groups и controls


Определяют - какие компоненты "состояния" должен отслеживать индикатор.
Естественно, справа от знака присваивания должен быть ...

для modifiers - название модификатора или нескольких модификаторов через знак "+"; для groups - номера групп; для controls - название "управляющего флага" (флагов).

Надо отметить, что номер группы можно задавать

просто числовым значением в виде - group1, group2 и т.п.; можно использовать слова "none" (0) и "all" (0xFF); и, наконец, с помощью простых арифметических выражений, например, All-1 ("все, кроме первой")



Модификаторы


Кроме переменных, содержащих номера групп, "состояние XKB" определяется "флажками" - модификаторами. Эти битовые флаги меняются при нажатии клавиш Shift, CapsLock, Alt, Control и т.п. и, естественно, влияют на выбор подходящего символа из таблиц.

Как я уже упоминал, "core protocol" (протокол "общения" между "традиционным" клавиатурным модулем и Xlib) тоже имеет "набор модификаторов" (который и сообщается прикладной программе при нажатии кнопок). Эти модификаторы (8 бит) называются Shift, Lock, Control, Mod1-Mod5. В зависимости от их состояния Xlib выбирает подходящий символ и может выполнять дополнительные действия — делать из обычных символов управляющие, менять прописные/строчные буквы и т. п.
Кроме того, программа может сама (помимо Xlib) по-своему интерпретировать эти модификаторы и менять свое поведение.

Поэтому, хотя XKB имеет больше модификаторов и его поведение (действия, выполняемые при определенной комбинации модификаторов) можно гибко перестраивать (как при старте, так и в процессе работы), модуль XKB вынужден эмулировать "классический" набор модификаторов, специально для старых клиентских программ (и старой Xlib).

Итак. Модификаторы core protocol'а в XKB называются "реальными" (real) модификаторами и их названия такие же, как в core protocol.

Кроме того, XKB имеет еще 16 своих внутренних модификаторов, которые называются "виртуальными" (virtual) модификаторами.

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

Итак. Эти модификаторы выполняют несколько функций

по их состоянию "вычисляется" shift level для выбора нужного символа и/или "действия"; по их состоянию "вычисляется" состояние индикаторов (см. ниже); и, кроме того, они могут влиять на выполнение некоторых других действий XKB (вычисление номера группы и т.п.).


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



Montfs


 
То, чего нет в LSK-help

Описываемые тут команды не присутствут в help по очень простой причине - они относятся к области системного администрирования и требуют некоторого введения для тех, кто ранее с UNIX дела не имел.

Управление файловыми системами. mount/umount Поднятие сетевых интерфейсов. ifconfig, route, netstat.

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

Q:
После старта LSK "видит" только тот FAT-раздел, на который она устанавливалась. Можно ли получить доступ к другим разделам, возможно, не FAT?

Конечно. Для этого сначала нужно уяснить, как обозначаются разделы винчестера в Linux. Мнемоника может показаться непривычной, но проста и логична. Первый IDE (а можно подключить и SCSI) диск у нас будет hda, второй - hdb и так далее (hdc...). Разделы на винчестере именуются так: основные - это с 1 по 4, расширенные - с 5 (6, 7 и так далее - сколько есть, у меня счет доходит до 11 :-). Причем для основных разделов важно понять, что номер зависит не от числа вообще, а от конкретной позиции в таблице MBR, где имеется место для 4 записей. Например, для MBR такого вида имеем:

+----+------+-----+-----+-----+----+----+----+-------+ |Boot|System|Start|Begin|Begin|End |End |End |Size | |flag| Id | head| sec | cyl |head|sec |cyl |sec | +----+------+-----+-----+-----+----+----+----+-------+ | 0| 6| 1| 1| 0| 9| 17| 549| 93483| hda1 | 80| 83| 0| 1| 567| 9| 17| 868| 51340| hda2 | 0| 0| 0| 0| 0| 0| 0| 0| 0| hda3 | 0| 5| 0| 1| 550| 9| 17| 566| 2890| hda4 +----+------+-----+-----+-----+----+----+----+-------+

Т.е. ни флаг активной партиции, ни тот факт, что третья запись в таблице не заполнена, никак не нарушают нумерацию.

Чтобы посмотреть на свой винчестер глазами Linux, достаточно сказать 'fdisk -l' (по-умолчанию будет показан первый диск, для второго и последующий надо указать параметр /dev/hdb и т.д.)

Для того, чтобы продвинуться дальше, нужно сначала разобраться с очень специальными файлами - файлами устройств, которые находятся в каталоге /dev и про которые сказал нам fdisk (/dev/hda1, ...). Что же в них особенного? Ну, например, команда такого вида отправит файл filename на принтер:


$ cat filename > /dev/lp1 $

Т.е. получается, что каждое доступное устройство присутствует как некий файл в каталоге /dev . Но, если мы туда заглянем, то окажеться, что файлов там что-то очень уж много. Явно больше, чем устройств в самом навороченном компьютере. В чем тут дело? Разобраться нам поможет команда такого вида:

$ ls -l /dev/cua0 crw-rw-rw- 1 root uucp 5, 64 Nov 30 1998 /dev/cua0 $

Значит, это все-таки файл, но первый симол в первой колонке ('c' в crw-rw-rw-) как раз и показывает, что этот файл особенный: для обычных файлов первый символ '-', для каталогов 'd', а вот 'c' говорит системе о том, что cua0 - это символьное устройство (вроде консоли или последовательного порта) типа 5 с номером 64. Для блочных устройств (например, дисковых накопителей) первый символ 'b'.

Таким образом, /dev - это что-то вроде телефонного справочника, в котором против каждой фамилии находятся некие загадочные (для пользователя, не ядра) номера. Сходство тем большее, что часть ядра, которая превращает запрос к устройству с именем, положим, /dev/tty в вызов драйвера консоли, так и называется - коммутатор, где тип устройства определяет выбор драйвера.

Типы устройств пронумерованы, т.е. тип определяет номер строки во внутренней системной таблице установленных драйверов устройств. Номер устройства передается драйверу в качестве параметра, так как в ОС UNIX драйверы спроектированы в расчете на обслуживание нескольких устройств одного типа.

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

Вооружившись такой информацией, мы теперь смело можем воспользоваться командой mount.

Монтирование и размонтирование.

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



После выполнения монтирования выбранный каталог /mnt становится корневым каталогом добавленной файловой системы. Через этот каталог смонтированная файловая система подсоединяется как поддерево к общему дереву. При этом нет логической разницы между основной и монтированными файловыми системами.

$ mount /dev/hda2 /mnt $

Команда mount требует двух аргументов. Первый - это имя файла устройства, соответствующее разделу, содержащему монтируемую файловую систему. Второй - это каталог, под которым будет смонтирована файловая система (еще это называется "mount point").

"Точка монтирования" (каталог) может быть не пустым, но он обязательно должен существовать. Файлы, которые находились в этом каталоге, никуда не исчезнут, а просто станут недоступны до отключения смонтированной файловой системы командой umount:

$ umount /mnt $ Корневая директория монтируемой файловой системы появится вместо старого старого содержимого /mnt.

Linux поддерживает файловые системы многих типов. Как пример, для монтирования MS-DOS дискеты используется следующая команда, где с помощью ключа -t указывается тип файловой системы (хотя современные ядра обычно самостоятельно определяют его, все же бывает нужно уточнить, к примеру, какую разновидность FAT вы имеете ввиду - vfat, umsdos или традиционный fat):

$ mount -t msdos /dev/fd0 /floppy $

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

$ cat /proc/filesystems ext2 msdos vfat nodev proc $

Почему я говорю в "данный момент"? Дело в том, что Linux поддерживает динамически загружаемые (и выгружаемые) драйверы - модули, в том числе и файловых систем. Например, для LSK можно загрузить драйвер NTFS и подключить ее (пока - только на чтение):

$ cd /lib/modules $ insmod ntfs.o $ mount /dev/hda7 -t ntfs /mnt

Если файловая система более не нужна, то она может быть размонтирована :

$ umount /mnt $

Монтирование можно выполнять группой. Для этого служит файл /etc/fstab (описан далее) и ключ -a.



Если монтируется устройство, такое как CD-ROM, то указывается ключ "только для чтения" ( -r).

Монтирование и размонтирование требуют привилегий суперпользователя (по понятным причинам), но как быть простому пользователю, если ему нужно нечто на дискете? Есть несколько возможностей:

Сообщить пользователю пароль для root. Понятно, что это не вариант. Использовать mtools, которые позволят работать с MS-DOS без монтирования диска. Перечислить такие разделы в /etc/fstab с соответствующими опциями.

Например, так:
/dev/fd0 /floppy msdos user,noauto 0 0

Здесь колонки:

файл устройства для монтирования, каталог для того же, тип файловой системы, опции, частота backup, и порядок прохода для fsck; 0 - не делать проверки при запуске.

noauto говорит, что при выполнении mount с ключом -a (auto) устройство реально смонтирвано не будет, но ВСЕГДА и ВСЕ смогут сделать это: $ mount /floppy $

Если нужен доступ к разным типам файловых систем, можно сделать так: /dev/fd0 /dosfloppy msdos user,noauto 0 0 /dev/fd0 /ext2floppy ext2 user,noauto 0 0


Монтирование


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

Чтобы избежать подобных эффектов, любую файловую систему необходимо перед началом работы с ней в явной форме подключить к ОС (смонтировать - mount), а по окончании отключить (размонтировать - unmount). Для этой цели служат команды mount и umount (без n, хотя соответствующее действие называется unmount). Команда mount имеет множество опций (см. врезку "Монтирование: подробности для любознательных"), но обязательных аргументов у ее стандартного варианта два: имя файла блочного устройства и имя каталога. В результате выполнения этой команды файловая система, расположенная на указанном устройстве, подключается к системе таким образом, что ее содержимое заменяет собой содержимое заданного каталога (поэтому для монтирования обычно используют пустой каталог). Команда umount выполняет обратную операцию - отсоединяет файловую систему, после чего накопитель можно извлечь и положить на полку (на самом деле проблемы возникают почти исключительно с дискетами: CD-ROM, магнитно-оптический диск или Zip-диск, который забыли размонтировать, просто не удастся вытащить без помощи скрепки - он блокируется).



Монтирование: подробности для любознательных


Как уже было сказано, монтирование файловых систем выполняется командой mount, а их размонтирование - командой umount. Исключение составляет корневая файловая система*, которая обслуживается отдельно и до всех остальных систем. Действительно, только при ее наличии становятся доступными и сама команда mount, и каталог /dev, где находятся файлы устройств, и подкаталоги для монтирования. Чтобы файловые системы можно было монтировать при запуске ОС и размонтировать при ее остановке, используются два файла, которые традиционно размещаются в подкаталоге /etc: /etc/fstab и /etc/mtab.

Файл /etc/fstab содержит список файловых систем, которые могут быть смонтированы. Конечно, необходимые параметры всегда можно указать при вызове команды mount, но гораздо удобнее, когда они извлекаются из файла. Содержимое моего файла /etc/fstab показано на рис. 3.

Рис. 3. Пример файла fstab

Каждой точке монтирования в нем соответствует одна строка, состоящая из шести полей: название устройства, на котором расположена файловая система, точка монтирования, тип файловой системы, параметры монтирования, "уровень дампа" и порядковый номер файловой системы для программы fsck. Рассмотрим эти поля по порядку.

Название устройства

Чаще всего в этом поле задается имя блочного устройства, на котором размещена файловая система, но так бывает не всегда: для файловой системы procfs, дающей доступ к внутренним структурам ядра, здесь может находиться любой текст (в примере - слово none), для сетевой файловой системы указывается имя сервера и подкаталога на нем и т.д. Даже для обычных файловых систем данное поле иногда содержит нечто отличное от имени устройства: скажем, в трех последних строках моего файла /etc/fstab это имена файлов с образами дисков CD-ROM. Кроме того, разрешается указать вместо имени устройства метку диска или его серийный номер, например:

LABEL=temp /tmp ext2 defaults 1 2 UUID=3a30d6b4-08a5-11d3-91c3-e1fc5550af17 /usr ext2 defaults 1 2

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

Точка монтирования

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

Тип файловой системы

Уж здесь-то какие могут быть подвохи? Их и нет. Почти. Можно задать в этом поле значение auto, и тогда команда mount попытается сама определить тип файловой системы. Это не так уж замечательно, как может показаться: тип файловой системы определяется путем проверки так называемого "магического числа", которая срабатывает далеко не всегда, а кроме того, перебираются только файловые системы, которые поддерживаются ядром в данный момент (они перечислены в файле /proc/filesystems). Иначе говоря, если у вас имеется дискета с файловой системой minix, а ни одного раздела с этой системой не смонтировано, то при явном задании типа в память будет загружен модуль с файловой системой minix и дискета смонтируется, а при указании типа auto этого, скорее всего, не произойдет и смонтировать дискету не удастся.

Параметры монтирования

Это поле обладает одной весьма неприятной особенностью: часть задаваемых в нем параметров интерпретируется командой mount, а часть - ядром системы. Параметры, интерпретируемые ядром, различны в зависимости от файловой системы и версии ядра (некоторые из них будут рассмотрены в разделе, посвященном "иностранным" файловым системам), а команда mount интерпретирует следующие параметры:



Мультиязыковые программы


Это программы, которые пытаются обеспечить ввод на нескольких языках и, соответственно, ввод символов из нескольких "несовместимых" алфавитов (западноевропейского, русского, греческого и т.п.). Обычно, это - разнообразные редакторы и "текстпроцессоры" (Lyx, emacs и т.п.)

Как я уже говорил, процедуры Xlib, ответственные за перевод кодов клавиш в однобайтные символы (XLookupString, XmbLookupString), "на выходе" дают только те символы, которые являются "допустимыми" в текущей locale. То есть, если текущая locale - русская, то будут преобразовываться в байтовые коды только русские буквы, а, например, греческие или "западноевропейские" - будут подавляться. И наоборот, при греческой locale, эти процедуры будут подавлять ввод руссих букв.

Поэтому, многоязыковые программы просто игнорируют однобайтные коды, которые им возвращают процедуры X*LookupString, а используют двубайтные коды клавиш (symbols в терминах XKB) и интерпретируют непосредственно их в меру своего понимания.

К сожалению, далеко не все из этих программ правильно понимаю - что делать с кодами типа Cyrillic_*.

Естественно, "лечить" эти программы с помощью setlocale()

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

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

Некоторые решения можно найти ...

"Лечение" xemacs можно найти на сайте Алексея Выскубова - emacs.zip . То же самое для Lyx (и некоторых других программ) на сайте "Пингвин при галстуке" .

Кстати, исправления для популярного "тулкита" Tcl/Tk можно найти на сайте Виктора Вагнера -

http://www.ice.ru/~vitus/tcl/locale-tcl.html.



Мышки


Обязательно иметь мышь с тремя кнопками, иначе замучаешься тексты редактировать. Настройка: mouseconfig. Для обычной старой последовательной мышки с 3 кнопками подходит "Mouse System" или "Generic Serial Mouse (Microsoft Serial)" без эмуляции 3ей кнопки. У меня одна и та же мышка Genius EasyMouse (FCC ID: FSUGMZE3, а как их еще различать?) на одном компе работает только в режиме MouseSystem, а на другом только как "Generic 3 button serial mouse".



На этом всё!


Wine может быть очень полезен, когда вам необходимо запустить какой-нибудь файл для Windows в системе Линукс. Единственное замечание - надо учитывать что не все ваши приложения будут работать в Wine, и вам будет необходимо самим разобраться как заставить работать вашу любимую программу. Но, всё равно, во многих случаях Wine бывает очень полезен.

От редактора:



"Набор исключений"


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

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

если в описании клавши явно указан набор "действий" (инструкция actions), то устанавливается запрет "выполнения интерпретации" для этой клавиши; если задан явно автоповтор (инструкция repeat) - запрещается "изменение автоповтора"; если задан явно флаг "залипания" или радио-группа (инструкции locks и radiogroup) - запрещается "изменение залипания"; и, наконец, если указан явно список виртуальных модификаторов (инструкция vmod), то устанавливается "запрет изменения" набора модификаторов.


Это битовая маска, которая указывает - какая информация, связанная с клавишей, "задана точно" (explicit) и не должна изменяться в некоторых случаях. Дело в том, что в core protocol определены команды, с помощью которых программы могут менять "раскладку клавиатуры" внутри клавиатурного модуля X-сервера. Естественно, эти комады меняют только "привязку" символов, поскольку другие "свойства" скан-кодов в core protocol'е не определены.

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

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

Итак, с помощью этой маски можно запретить

изменение типа клавиши (количество уровней) для каждой группы (можно установить запрет для каждой группы поотдельности); изменения, которые могут произойти при применнии "интерпретации", при этом можно запретить -

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



Наборы символов


Следующая информация должна помочь Вам правильно задать раскладку клавиатуру в файле .Xmodmap для работы со шрифтами iso8859-2 или любыми другими. Ниже приводится кодовая таблица ISO-8859-1 для того, чтобы Вы могли найти правильные имена символов. Большая часть этой иформации пригодится для построения клавиатурной раскладки для "чистой" кодовой таблицы ISO-8859-1 или для комбинации восточно-европейских символов с западно-европейскими. Если Вам нужны языки, использующие другие, не центрально-европейские и западно-европейские кодовые таблицы, соответствующие таблицы для нужных кодовых страниц ISO*** можно найти в Интернет. В RedHat файл /usr/include/gdk/gdkkeysyms.h содержит все специальные имена символов, которые мы здесь используем (помимо этого там есть имена и для греческих символов).



Начальная загрузка


Bootstrapping, или как Linux сам себя ставит на ноги.


От включения питания до приглашения Bash.


Восход солнца вручную.


Init...etc.


Разделяйте ваши данные.


Как разделяют пингвинов. Часть 1.


Как разделяют пингвинов. Часть 2.


Как разделяют пингвинов. Часть 3.


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


Введение в индексные таблицы файловых систем


Linux. Настройка загрузки.


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


GRUB... действительно - GRand!


Самодостаточный GRUB.


Менеджер загрузки GNU GRUB.


Мультизагрузка с GRUB Mini-HOWTO


Двойная загрузка Windows 2000 и Linux с помощью NTLoader.


Linux вместе с Windows.


За дружбу между ОСами!


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


Разбиение диска с помoщью программы DiskDrake.


Перенос системы и данных на другой компьютер.


Когда не хватает места...


Добавление жесткого диска в Linux.


Перенос Linux на другой жесткий диск с сохранением работоспособности.


Обновление жесткого диска.


Как образом полностью обновить систему, но сохранить при этом все настройки.


Легкая переустановка Linux.


Клонирование рабочих станций в Линукс.


Сохранение и восстановление операционной системы FreeBSD.


Очистка главной загрузочной записи (MBR).


Запись мультизагрузочных CD.


Изготовление мультизагрузочного CD-диска.


Пишем игрушечную ОС (Часть I).


...Пишем игрушечную ОС ... Копнём поглубже...


Пишем игрушечную ОС (часть II).


Восстановление загрузчика или ядра в Linux.


Разбиение дисков и инсталляция Linux на LVM (часть 1).


Разбиение дисков и инсталляция Linux на LVM (часть 2).


Разбиение дисков и инсталляция Linux на LVM (часть 3).


LVM.



Начальное значение для набора "управляющих флагов"


controls [ = | -= | += ] флаг1 + флаг2 + ...

Как и в предыдущей инструкции, операция может быть убрать/добавить/заменить ('-='/'+='/'=').



Начальное значения для набора модификаторов


modifiers [ = | -= | += ] модификатор1 + модификатор2 + ...

"Модификатор" - название одного из "реальных" модификаторов - shift, lock, control (или ctrl), mod1, mod2, mod3, mod4, mod5.

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



Начало пояснений


Различать разделяемые и неразделяемые файлы необходимо по следующим причинам:

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

Выделение "разделяемых" данных может использоваться, например, для:

монтирования (в режиме "только для чтения") раздела /usr (или части /usr) по сети (используя NFS). монтирования раздела /usr (или части раздела /usr) с носителя, допускающего только чтение. CD-ROM является одним из возможных примеров того, как одна копия файловой системы может использоваться другими FHS-совместимыми файловыми системами через "сеть" некоего рода.

Различие между "статическими" и "изменяемыми" данными оказывает влияние на структуру файловой системы по двум основным направлениям:

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

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

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

Разделяемые Неразделяемые
Статические /usr /etc
/opt /boot
Изменяемые /var/mail /var/run
/var/spool/news /var/lock

Таблица 2.1


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

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

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

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

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

Существует несколько причин, по которым создание нового подкаталога в корневой файловой системе запрещено:

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

Это приводит к тому, что разрушает порядок, который системный администратор заводит для того, чтобы иметь возможность устанавливать единую структуру каталогов на монтируемых томах. (It evades whatever discipline the system administrator may have set up for distributing standard file hierarchies across mountable volumes.)




Стандарт IEEE P1003.2 (POSIX, part 2) выдвигает требования, аналогичные сформулированным выше.

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

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




Команда bash работает по-разному в зависимости от того, была ли она вызвана как sh или как bash. Кроме того, использование символической ссылки позволяет пользователям легко увидеть, что /bin/sh не является настоящей оболочкой Борна.

Требование того, чтобы команды [ и test включались в этот каталог как отдельные исполняемые файлы (даже если они реализованы как встроенные команды оболочки) присутствует также в стандарте POSIX.2.




Команды tar, gzip и cpio необходимы для восстановления системы (в предположении, что каталог / доступен).

Если же необходимость восстановления системы из корневого раздела отсутствует (например, в случае загрузки бездисковых рабочих станций, когда каталог /usr монтируется посредством протокола NFS) эти команды могут отсутствовать и в каталоге /bin. Если восстановление системы планируется проводить по сети, то файлы программ ftp или tftp (вместе со всем, что необходимо для установления соединения по протоколу ftp) должны быть размещаться в корневом разделе диска.



НАЧАЛО ПОЯСНЕНИЯ


Использование каталога /opt для дополнительного ПО является широко распространенной практикой в сообществе UNIX. The System V Application Binary Interface [AT&T 1990], основанный на System V Interface Definition (Third Edition), предлагает придерживаться для /opt структуры очень похожей на ту, которая определена здесь.

Стандарт Intel Binary Compatibility Standard v. 2 (iBCS2) тоже предполагает подобную структуру для /opt.

Как правило все данные, необходимые для поддержки функционирования пакета, должны присутствовать в каталоге /opt/<package>, включая файлы, копируемые в /etc/opt/<package> и /var/opt/<package> а также специально создаваемые для пакета каталоги в /opt.

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



Начало работы


Вы можете получить полный список всех команд, которые были связаны с автозаполнением, выполнив команду complete -p. Дополнительно, команда declare -f покажет вам код всех функций shell, включая те, что связаны с автозаполнением.

Чтобы ознакомиться с программируемым автозаполнением, вероятно, лучше всего просто набрать некоторые из этих команд и затем нажать <Tab> в разных местах командной строки. Автозаполнение на многих командах действует по разному в зависимости от местоположения и контекста слова в командной строке. Этот снимок может помочь вам лучше понять, как автозаполнение работает на практике.

Если вы сисадмин, вы найдете автозаполнение ssh особенно полезным, поскольку оно завершает имена хостов по содержимому из файлов known_hosts. Также если вы монтируете NFS-партиции с большого количества хостов, попробуйте набрать mount имя хоста:<Tab>.

Программисты возможно сочтут полезным автозаполнение параметров p4 и cvs.



Начинайте не спеша


Возможно, вам не следует, установив qlogin, сразу переходить к замене в /etc/inittab всех своих getty на qlogin и перегружаться, чтобы посмотреть как это работает. Это было бы слишком оптимистично.



Начнем со второго способа - полная keymap


В файлах конфигурации есть набор "полных keymap'ов" для архитектуры xfree86, отличающихся "языком". Все они лежат в файле xfree86, а название блока внутри файла отражает название "языка" (точнее - алфавита) - xfree86(us), xfree86(fr), xfree86(ru) и т.д. Полный список keymap'ов можно посмотреть в файле {XKBROOT}/keymap.dir.

Для "руссифицированной" клавиатуры вполне подойдет

XkbKeymap "xfree86(ru)"

К сожалению, после "выкидывания" CapsLock как переключателя рус/лат из русской раскладки (см. замечание в начале этого раздела) получилось так, что "полная keymap" для русского языка осталась вообще без какого-либо переключателя "по умолчанию". Но вы можете добавить его "вручную". Для этого придется найти в файле {XKBROOT}/keymap/xfree86 блок "ru". И дописать в строчку xkb_symbols ссылку на описание соответствующего переключателя групп. Для CapsLock это будет - group(caps_toggle). То есть, строчка будет выглядеть как

xkb_symbols { include "en_US(pc105)+ru+group(caps_toggle)"};



Надо сделать


объяснить работу модулей ядра, depmod, modprobe, insmod и всё такое (я буду должен сначала это найти!)

описать файловую систему /proc, возможно добавить упражнений

преобразовать в docbook sgml

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

add makefile hack to bash build instructions - see easter notes.



Name


Это уникальное имя юзера. Его спрашивают при входе в компьютер. Оно используется в командах администрирования.



Наша роль


Первоначально, контроль находится в руках BIOS (Basic Input/Outpuit System; Базовая Система Ввода-Вывода). Это набор программ, которые хранятся в ROM (Read Only Memory; ПЗУ -- программируемое запоминающее устройство). После включения питания BIOS выполняет POST (Power On Self Test). Это программа проверки целостности компьютера (проверка корректности работы памяти, клавиатуры и других подключенных к компьютеру периферийных устройств). Все это происходит в тот момент, когда вы слышите звуковой сигнал. (Если в процессе проверки обнаруживается ошибка, то компьютер опять подает звуковые сигналы, но уже другой длительностью и в иной последовательности -- в описаниях к материнским платам иногда встречаются звуковые последовательности, соответствующие той или иной неисправности. Если такого такого нет в вашем описании, то вы можете его найти на сайте производителя прошивки для BIOS. Например, сайт компании Phoenix Technologies Ltd [http://www.phoenix.com/products/specs.html] (ищите на нем pdf-файл userman.pdf). Только учтите, у них сейчас идет реконструкция, поэтому карта сайта может измениться. Прим.перев.) Если все в порядке, то BIOS выбирает загрузочное устройство. Он копирует первый сектор (boot sector) с устройства в ОЗУ по адресу 0x7C00. (Следует уточнить, что если речь идет о жестких дисках, то первый сектор называется не boot sector, а master boot record -- главная загрузочная запись или MBR. Прим.перев.) Затем управление передается по этому адресу. Загрузочным устройством может служить флоппи-диск, CD-ROM, жесткий диск или любое другое устройство по вашему выбору. В качестве такового мы воспользуемся флоппи-диском. Если записать исполняемый код в загрузочный сектор гибкого диска, то он будет выполнен при попытке загрузки с дискеты. Наша задача проста: написать небольшую программу и разместить ее в загрузочном секторе.



Nastroika


Еще раз о настройке

X-Stranger, Компьютерная газета

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

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

Так что же выкидывать из ядра? Тут сложно дать конкретные рекомендации ? все зависит от конфигурации машины. Но несколько советов все же можно дать:
? установите семейство процессоров как PPro/6x86MX для Pentium II/III систем;
? разрешите MTRR для PentiumPro/II/III и AMD K6-2/3 систем;
? запретите багфиксы для чипсетов, которых у вас нет. Пример: CMD640 и RZ1000;
? разрешите generic PCI bus-master DMA поддержку и использование DMA по умолчанию (Use DMA be defaults);
? разрешите поддержку чипсета, который у вас есть. Пример: VIA82C586 для VIA VP2/3 и MVP3 материнских плат;
? разрешите ТОЛЬКО специфичные SCSI контроллеры, которые у вас есть. Пример: Adaptec AIC7xxx;
? запретите ВСЕ сетевые устройства, поддержка которых вам не нужна;
? установите максимальное число Unix98 PTYs в 128;
? установите 'persistant dma buffer' в конфигурации звука;
? запретите все файловые системы, за исключением: ISO 9660 CDROM,VFAT, Second extended fs, ReiserFS, /dev/pts и /proc. Если у вас в системе присутствует NTFS, то включите и ее поддержку;
? запретите все сетевые файловые системы (NFS);
? запретите все консольные драйвера. Исключение: VGA text console;
? запретите Enhanced Real Time Clock поддержку;
? запретите поддержку ISDN;
? запретите поддержку IPv6;
? запретите поддержку Amateur Radio;
? запретите поддержку инфракрасных устройств (IrDA subsystem);
? запретите поддержку джойстиков (Joysticks);
? запретите все Ftape.

Чтобы заставить работать ядро еще быстрее, попробуйте другие вещи. Отредактируйте /usr/src/ inux/Makefile: найдите строку 'MAKE =make' и измените ее на 'MAKE =make -j5' ? так будет использоваться несколько копий make, с которыми на некоторых системах будут быстрей компилироваться программы. Потом измените: 'CFLAGS= -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer' на 'CFLAGS = -Wall -Wstrict-prototypes -O7 -fomit-frame-pointer -fno-exceptions', что включит использование оптимизирующих фишек, которые могут работать или не работать со всеми ядрами (оптимизация кода при компиляции).
Ядро желательно брать посвежее и стабильное, например, 2.4.10. Напомню, что компиляция ядра осуществляется командами: make menuconfig (или xconfig, если компилировать из-под X), make dep, make bzlilo, make modules, make modules_install.
Необходимо также заметить, куда скомпилилось новое ядро, и добавить в файл /etc/lilo.conf строки, дающие возможность загрузить старую версию ядра, если эта криво скомпилена или просто глючит (и такое бывает!):
image=/vmlinuz #путь к новому ядру
root=/dev/hda3 #путь к корню, пишем тот же, что и для установленного системой ядра
read-only
label=linux_new #название нового типа загрузки

Далее ставим эти 4 строчки ПЕРЕД кодом старого загрузчика (обычно начинающегося с image=/boot/vmlinuz), чтобы ваше ядро грузилось первым по умолчанию, и перезагружаемся.
Теперь немножко о настройке сети (со ссылками:).
Point-to-Point Protocol (PPP). Здесь предполагается, что поддержка PPP + TCP/IP уже встроена в ядро при компиляции, активирован loopback интерфейс, вы уже имеете корректно инсталлированный пакет pppd и зарегистрированы под root. Обычно, ваш провайдер должен поддерживать PPP.

Существует теперь два способа заставить PPP работать: a) ручная настройка; b) с помощью конфигурационной программы, которая это делает сама. 
Какой бы вариант вы ни выбрали, вам потребуется следующая информация:
? номер телефона вашего провайдера;
? сервер имен вашего провайдера;
? сервер почты и новостей вашего провайдера;
? домен вашего провайдера;
? ваше регистрационное имя и пароль.
Ручная настройка более хлопотная. Нужно отредактировать некоторые файлы и написать скрипты; не очень много работы, но легко наделать ошибок, и новички часто пугаются. 
Здесь вам может помочь PPP-HOWTO. Как альтернатива, существуют утилиты, которые спрашивают перечисленную выше информацию и делают всю работу сами.

Будет несравненно лучше для вас, если вы посетите товарища, который уже имеет настроенную связь с провайдером, и скачаете один из следующих прекрасных инструментов:
? для X11 есть утилита EzPPP, домашняя страница которой находится по адресу http://www.serv.net/~cameron/ezppp/index.html.  Очень легка в использовании и почти сама настраивается;
? для соединения в tty попробуйте утилиту с ftp://sunsite.unc.edu/pub/Linux/system/network/serial/ppp.  Одной из лучших является pppsetup-X.XX.tar.gz;
? наипростейшей настроечной утилитой на сегодня уверенно можно назвать wvdial. Вы даете ей телефон вашего провайдера, ваш логин, ваш пароль ? и вы уже в полете. Из README файла: "Сейчас для wvdial есть web-страница по адресу: http://www.worldvisions.ca/wvdial". Очень хороший инструмент.
Теперь про POP клиент. Для получения вашей почты с POP сервера вы используете таких POP клиентов, как fetchpop или fetchmail. Последний более продвинут и, вероятно, является единственным выбором, если PPP сервер вашего провайдера не может работать с командой LAST. Они доступны на ftp://sunsite.unc.edu/pub/Linux/system/mail/pop. 

Для настройки этих клиентов:
fetchpop: при первом запуске он вас спросит некоторые сведения. Ответьте на вопросы ? и вы готовы к работе.
fetchmail: настройте подобно примеру .fetchmailrc:
# $HOME/.fetchmailrc
poll mbox.myisp.com with protocol pop3;
user john there with password _Loo%ny is john here
Вы должны установить права доступа к этому файлу с помощью команды
chmod 600.fetchmailrc
в противном случае fetchmail, скорее всего, не захочет запуститься. 
Этот пример показывает только основные настройки и предполагает, что у вас запущен sendmail; в принципе, возможности настройки безграничны. 

Почитайте http://www.ccil.org/~esr/fetchmail. 
Часто возникает вопрос, а что же такое сделать, чтобы KDE грузился чуть быстрее. Есть шанс ему помочь, найдя стартовый скрипт ? startkde (у меня он лежит в /usr/bin) ? и закомментировав строчки "'sleep 2'", говорящие о паузе в две секунды между стартами разных KDE сервисов.
На сегодня про настройку все.

X-Stranger, xstranger@tut.by 
http://www.linux4u.narod.ru/ 



Настройка


Техника оптимизации в основном взята со страниц встроенной документации (man tuning).


Машина хранит информацию о настройках в CMOS. В том числе там хранятся сведения о дисках и количестве оперативной памяти. BIOS содержит специальную программу, позволяющую вам изменять эти настройки. Следите за сообщениями на экране сразу после включения машины чтобы определить какой клавишей прозводится запуск этой программы. На моей машине необходимо нажать клавишу Delete до начала загрузки ОС.




Настройки lilo хранятся в файле /etc/lilo.conf. По этому файлу существует свой ман: наберите в шелле man lilo.conf. Главным содержанием lilo.conf являются строки описания для всех систем, которые мы можем грузить с помощью lilo. Описание для Linux содержит сведения о местонахождении ядра системы и о разделе диска, который будет смонтирован в качестве корневой файловой системы. Для других ОС основной информацией является указание раздела диска, с которого необходимо загрузиться.




Большинство настроек ядра выполняется при его построении посредством make menuconfig, или make xconfig в /usr/src/linux/ (или где вы там держите исходники ядра). С помощью rdev вы можете изменить видеомоду по умолчанию, корневую файловую систему, раздел для свопа и размер RAM-диска. Эти и другие параметры могут быть также переданы ядру через lilo. При этом передаваемые параметры могут быть прописаны в lilo.conf или могут быть введены в строке подсказки lilo в процессе загрузки. Например, если вам понадобилось использовать в качестве корневого раздел hda3 вместо hda2, вы должны ввести:

LILO: linux root=/dev/hda3

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

ВАЖНО: Файл System.map используется логгером ядра для определения имен модулей, посылающих сообщения. Программа top также использует эту информацию. Так что, копируя ядро на целевую систему, не забудьте скопировать и System.map.




Некоторые из библиотечных функций зависят от вашего места обитания. Например у нас в Австралии дату пишут как dd/mm/yy, а американцы пишут mm/dd/yy. Glibc предоставляет специальную программу для настройки национальных особенностей - localedef.




Файлом верхнего уровня настройки init является /etc/inittab.

Директории rcN.d, где N = 0, 1, ..., 6 определяют какие подсистемы и в каком порядке будут запущены.

В одном из скриптов, вызываемых init, будет использована команда mount -a. Это приказ смонтировать все файловые системы какие должны быть смонтированы. Последнее определяется файлом /etc/fstab. Вы можете отредактировать этот файл, если решите изменить список файловых систем, монтируемых при старте системы. Синтаксис файла описан в man fstab.




Команда mke2fs, создающая файловую систему типа ext2, имеет параметры, управляющие размером блока, числом inode и т.п. Прочтите ман для mke2fs, чтобы уточнить детали.

Всё, что должно быть смонтировано в вашей файловой системе определяется файлом /etc/fstab. По этому файлу также имеется ман.




Программа update позволяет настроить kflushd и kswapd. Для справки наберите update -h.

Включение свопа происходит по команде swapon, а выключение - по команде swapoff. Скрипт инициализации (/etc/rc.sysinit или /etc/rc.d/rc.sysinit) обычно вызывает swapon. Использование swapoff позволяет экономить энергию на ноутбуках.




Файл /etc/syslog.conf разъясняет логгерам какие сообщения куда записывать. Сообщения различаются по имени службы, от которой они исходят, и уровню приоритета. Строки этого файла содержат информацию о том, что сообщения от службы x с приоритетом y следует направлять в z, где z - файл, терминал, принтер, удаленный хост или что угодно.

ВАЖНО: Syslog требует присутствия файла /etc/services. Этот файл отвечает за распределение портов. Я не знаю, то ли syslog нуждается в портах для выполнения удаленного журналирования, то ли локальное журналирование происходит через порт, а может быть syslog просто использует /etc/services

для преобразования имени службы которое вы прописали в /etc/syslog.conf

к номеру порта.




Файл /etc/profile содержит общесистемные настройки bash. То что вы здесь напишете повлияет на каждого, кто использует bash в вашей системе. Обычно здесь выполняются такие вещи как добавление директорий к переменной PATH, и установка переменных типа MAIL.

Поведение клавиатуры по умолчанию обычно оставляет желать лучшего. Эти проблемы решаются с помощью readline. Readline - это отдельный пакет, который поддерживает интерфейс командной строки, предоставляя историю команд и автозавершение имен файлов, также как и расширенные возможности редактирования. Он вкомпилирован в bash. По умолчанию readline настраивается редактированием файла .inputrc в вашей домашней директории. Переменная bash INPUTRC позволяет это изменить. Например в Red Hat 6 INPUTRC установлена в /etc/inputrc в /etc/profile. Это значит, что клавиши backspace, delete, home и end будут работать для всех одинаково хорошо.

Прочтя общесистемный файл настройки, bash ищет ваш персональный файл настройки. Он ищет его в вашей домашней директории проверяя имена .bash_profile, .bash_login и .profile. Выполняется первый из найденных файлов. Если вы хотите изменить поведение bash только для себя - делайте это здесь. Например, многие приложения используют переменные окружения для контроля собственной работы. Я имею переменную EDITOR установленной в значение vi и могу использовать vi в Midnight Commander'е (превосходный консольный файл-менеджер) вместо его встроенного редактора.




Сообщение, появляющееся вверху экрана вместе с приглашением ввести имя пользователя, прописывается в /etc/issue. Getty запускаются из /etc/inittab. Login проверяет сведения о пользователе в /etc/passwd, и, если используется механизм теневых паролей, в /etc/shadow.



Настройка CUPS



 Если Вы не любите работать в X, то обратитесь из броузера к localhost:631. В противном случае, посмотрите в меню Настройка->Печать, там Вы увидите богатый набор приложений. Имейте в виду, что из соображений защиты (CUPS -
сетевая клиент-серверная система!) доступ к настройкам сервера CUPS ограничен. Вы можете изменить эти умолчания редактированием файлов настроек (в /etc/CUPS) или при помощи kupsdconf. Помимо страниц man, документации
пакета, документации на сайте CUPS, советуем почитать описание CUPS здесь: http://www.mandrakeuser.org/hardware/hCUPS0.html.