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

         

Vmods


Задает список виртуальных модификаторов, связанных с этой клавишей. Справа от знака присваивания должно быть название модификатора (или нескольких модификаторов через знак '+').

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



VMWARE


Компания VMware хорошо известна своими продуктами VMware Workstation, благодаря которым Linux и Windows могут параллельно работать на одной машине. Правда, они предназначены в основном для разработчиков, тестирующих несколько сред. Однако VMware предлагает и сервер GSX для разделения физических серверов на виртуальные машины на базе Linux или Windows.

«Мы виртуализируем архитектуру Intel, — заявил Кристинак, директор по маркетингу. — И предлагаем концепцию IBM zSeries на базе Intel».

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

Кристинак уверяет, что концепция виртуализации становится популярной на целом ряде платформ: «Как в случае мэйнфреймов старшего класса, так и корпоративных серверов среднего уровня, приобретя дорогостоящее оборудование, покупатели не рассчитывают применять его для решения только одной задачи. Причина растущей популярности виртуализации заключается в том, что решение реализуемо на всех уровнях — от настольной системы до центра обработки данных. Мэйнфрейм заведомо слишком мощный, например, для двух пользователей, поэтому вы можете купить сервер Intel с аналогичными возможностями и подойти к нему с теми же мерками, что и к мэйнфреймам: это аппаратное обеспечение способно на большее, чем просто выполнение одного приложения. Так почему бы этим не воспользоваться?»

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

Хотя VMware специализируется на программном обеспечении для Windows, у компании есть клиенты, использующие GSX с Linux. Среди них можно назвать Global Continuity, поставщика услуг аварийного восстановления, чей профиль деятельности состоит в страховании компьютеров других компаний и обеспечении быстрой замены или восстановления критически важных машин.

«Такие услуги стоят дорого, — подчеркивает Кристинак. — Это тот вид страхового бизнеса, где важно знать, насколько часто происходят сбои, а также со сколькими машинами предстоит работать».

Он замечает, что, благодаря серверу GSX, Global Continuity может взаимодействовать с пятью или шестью клиентами на единственной машине. При сбоях в клиентской системе Global Continuity копирует данные и высылает их. «Отсутствие необходимости зеркалирования «один к одному» значительно снижает затраты на аппаратное обеспечение и поддержку», — делает вывод Кристинак.



VMware в локальной сети с выходом в Internet


Автор - Власенко Олег

Опишу свою домашнюю сетку как пример простейших локальных сетей с использованием VMware-2.0.3 и с выходом в Интернет через обычный модем .

Структура сети:
N1 - шлюзовая машина, Linux.
N2 - вторая машина, рабочая станция Win98.
N3 - виртуальная машина под VMware на N1, Win95OSR2.
далее этих виртуальных может быть очень много, столько сколько потянет N1 по ресурсам. (удавалось запускать одновременно 4 оси - NT4, Win95, Linux, Linux и на PIII550 128M все это работало с приемлимой производительностью)

Интерфейсы и сети.

192.168.9.2 192.168.9.1 +--+ eth0 +--+ |N2|--------------| | +--+ |N1| ppp0 dinamic IP vmnet1 | |--------Internet +--------| | | +--+ | 192.168.63.1 | | 192.168.63.2 +--+ |N3| +--+



В рабочем положении (при активном ppp соединении с провайдером) на N1 имеем следующие настройки:

Интерфейсы:

eth0 inet addr:192.168.9.1 Bcast:192.168.9.255 Mask:255.255.255.0 lo inet addr:127.0.0.1 Mask:255.0.0.0 ppp0 inet addr:62.118.144.204 P-t-P:212.30.161.18 Mask:255.255.255.255 vmnet1 inet addr:192.168.63.1 Bcast:192.168.63.255 Mask:255.255.255.0

Таблицу маршрутизации:

Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface APAS18.mtu.ru * 255.255.255.255 UH 0 0 0 ppp0 192.168.63.0 * 255.255.255.0 U 0 0 0 vmnet1 192.168.9.0 * 255.255.255.0 U 0 0 0 eth0 127.0.0.0 * 255.0.0.0 U 0 0 0 lo default APAS18.mtu.ru 0.0.0.0 UG 0 0 0 ppp0

/etc/resolv.conf

search home nameserver 127.0.0.1

/etc/sysconfig/network

NETWORKING=yes FORWARD_IPV4=yes HOSTNAME=smart.home DOMAINNAME=home GATEWAY=192.168.9.1

И такую простейшую систему правил:

[root@smart cornet]# ipchains -L Chain input (policy ACCEPT): Chain forward (policy ACCEPT): target prot opt source destination ports MASQ all ------ 192.168.9.0/24 anywhere n/a Chain output (policy ACCEPT):

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


В браузере для http указан прокси 192.168.9.1:3128
Машина свободно ходит в Интернет через прокси и маскарад (ping ходит), работает с N1 по всем протоколам, пингуется с N3 но по samba (а точнее MSNetwork) не взаимодействует.

Машина N3 имеет следующие настройки:

Сетевая карта виртуальной машины установлена в режиме host-ohly.

IP 192.168.63.2 name smart1.home DNS 192.168.63.1 gateway 192.168.63.1

И такую таблицу маршрутизации:

C:\MUST_DIE>route print Active Routes: Network Address Netmask Gateway Address Interface Metric 0.0.0.0 0.0.0.0 192.168.63.1 192.168.63.2 1 127.0.0.0 255.0.0.0 127.0.0.1 127.0.0.1 1 192.168.63.0 255.255.255.0 192.168.63.2 192.168.63.2 1 192.168.63.2 255.255.255.255 127.0.0.1 127.0.0.1 1 192.168.63.255 255.255.255.255 192.168.63.2 192.168.63.2 1 224.0.0.0 224.0.0.0 192.168.63.2 192.168.63.2 1 255.255.255.255 255.255.255.255 192.168.63.2 192.168.63.2 1

В браузере для http указан прокси 192.168.63.1:3128
Машина свободно ходит в Интернет через прокси, работает с N1 по всем протоколам, пингуется с N3 но по samba (а точнее MSNetwork) не взаимодействует. Напрямую в Интернет эта машина ходить не может, поскольку для ее подсети не указано маскарадное правило.

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

Например. Если привести правила на N1 к вот такому виду:

Chain input (policy ACCEPT): Chain forward (policy ACCEPT): Chain output (policy ACCEPT):

то N2 потеряет пинг на Интернет, но между N2 и N3 пинги все равно ходят. Это очевидно происходит по тому, что N1 через который проходят пакеты для обеих машин является default gateway. В больших сетях, в которых много хостов с VMware такое положения явно не сохранится поскольку default gateway на всех один и пингуемому хосту не известен обратный роутинг до пингующего и он, получив пакет, ответит на него не туда, куда следовало бы.

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

Chain input (policy ACCEPT): Chain forward (policy ACCEPT): target prot opt source destination ports MASQ all ------ 192.168.9.0/24 anywhere n/a MASQ all ------ 192.168.63.0/24 anywhere n/a Chain output (policy ACCEPT):



Итак, сейчас мы имеем совершенно симметричную схему сети и N2 и N3 абсолютно равноправны и работают по samba (а точнее MSNetwork) методом прямого указания пути к ресурсам, хотя и не видят друг друга явно в браузинге сети.

+--+ eth0 +---+ vmnet1 +--+ |N2|---------|N1 |---------|N3| +--+ +---+ +--+ | ppp0 dinamic IP | Internet

Возможно именно такая схема окажется наиболее удобной для большинства пользователей. Так же использование host-only режима в совмещении с маскарадом или без оного (только прокси) существенно повышает защищенность гостевой операционки от внешних атак, поскольку с ней невозможно установить непрошенный контакт. Так же степень защищенности легко настраивается с помощью правил ipchains или iptables основной оси.

В больших сетях работа с VMware через host-only с маскарадом средствами основной системы так же очень удобна тем, что все гостевые оси на всех машинах могут иметь совершенно идентичные IP адреса и настройки, да и сама VMware так же настраивается одинаково. Таким образом для администратора сети существенно упрощается настройка парка машин, поскольку гостевые оси можно размножать прямым копированием файла виртуального диска между машинами без какой либо последующей донастройки.

Минусом подобного подхода являются трудности работы в окружении MSNetwork при попытке браузинга сети а так же при работе с public aplication, использующими Домен сети Microsoft. Это связано с широковещательным характером протокола сетей Microsoft, который несовместим с многосегментной сетью, получающейся в результате такого подхода. (автор статьи пытался побороть эти сложности используя PDC и WINS но после 2'х дней борьбы был вынужден сдаться)

Если же есть желание пожертвовать защищенностью ради функциональности, то имеет смысл использовать bridget режим сетевого адаптера VMware для N3. В этом случае, интерфейс vmnet1 не используется вовсе (его можно опустить), а во внутренней сети появляется своего рода алиас на eth0 с новым адресом из той же подсети (можно и с другим адресом из другой подсети, но практическая ценность такого подхода не велика). Машина N3 оказывается полноправным членом внутренней сети и мы получаем следующую схему с точки зрения TCP/IP.

| 192.168.9.0/24 | | 192.168.9.2 | +--+ +---|N2| | +--+ | | 192.68.9.2 |eth0+--+ ppp0 dinamic IP +----|N1|--------Internet | +--+ | | 192.168.9.3 | +--+ +---|N3| | +--+



Итак, изменив тип адаптера с host-only на bridget ( автору статьи это стоило снесенных гостевых виндов - умер реестр, хотя возможно просто не повезло) мы получаем следующее - виртуальная тачка N3 настраивается точно так же как и N2 поскольку они находятся в одной подсети и в совершенно равных условиях:

IP 192.168.9.3 name smart1.home DNS 192.168.9.1 gateway 192.168.9.1

И такую таблицу маршрутизации:

C:\MUST_DIE>route print Active Routes: Network Address Netmask Gateway Address Interface Metric 0.0.0.0 0.0.0.0 192.168.9.1 192.168.9.3 1 127.0.0.0 255.0.0.0 127.0.0.1 127.0.0.1 1 192.168.9.0 255.255.255.0 192.168.9.3 192.168.9.3 1 192.168.9.3 255.255.255.255 127.0.0.1 127.0.0.1 1 192.168.9.255 255.255.255.255 192.168.9.3 192.168.9.3 1 224.0.0.0 224.0.0.0 192.168.9.3 192.168.9.3 1 255.255.255.255 255.255.255.255 192.168.9.3 192.168.9.3 1

Соответственно внутри - с машинами N1 и N2 данная виртуальная ось ведет себя так же как и любая другая физическая тачка в том же сегменте сети, точно так же как и N2, в том числе и все операции в MSNetwork так же полностью выполняются. В плане работы с Интернет получаем в точности ту же картину, что и для машины N2, а аменно.

При наличии простого форварда пакетов на N1:

Chain input (policy ACCEPT): Chain forward (policy ACCEPT): Chain output (policy ACCEPT):

N3 способна общаться только через прокси на N1 и ее же DNS. Причину этого легко понять запустив ping на любой из внешних хостов с одновременным просмотром вывода

# tcpdump -i ppp0 -n

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

Соответственно при приведении правил N1 к стандартному для моего дома виду:

Chain input (policy ACCEPT): Chain forward (policy ACCEPT): target prot opt source destination ports MASQ all ------ 192.168.9.0/24 anywhere n/a Chain output (policy ACCEPT):

пакеты N3 подпадают под маскарадное правило и отрабатываются точно так же как и для N2. А значит, что с внешними хостами работает все, что только вообще может работать через маскарад, в том числе и ping.



Данный режим работы гостевой оси можно смело рекомендовать тем администраторам больших сетей, у которых часть win32 приложений, вытесненных под VMware, используют домен MSNetwork или просто хочется что бы в виндах "все осталось как было раньше". При работе через bridget именно так и будет - все как раньше :-)

Из минусов такого подхода можно отметить, что каждая виртуальная ось потребует собственный уникальный IP адрес во внутренней сети, то есть если все машины перевести на Linux и на всех поставить по одной Win под VMware то количество потребных адресов в локальной сети удвоится. Так же, вполне очевидно что при серийном размножении виртуальных осей потребуется ручная доработка в смысле изменения IP адреса и доменного подключения (последнее особенно долго).

Все вышеописанные подходы безусловно применимы (и это проверено на практике) не только к гостевой Win95OSR2, которая была использована в качестве примера для написания этой статьи, но так же и к любым другим осям, которые можно установить на виртуальную машину. (из личного опыта автора Win98 NT4 W2k Linux)

Власенко Олег aka cornet
cornet@altlinux.ru
Отдел технической поддержки ALT Linux Team.




VMware Workstation – «песочница» для взрослых



Автор: Александр Куприн, ru_classic@mail.ru
Опубликовано: 26.02.2002
Оригинал: http://www.softerra.ru/freeos/16294/

Для тех кто не в курсе что такое WMware Workstation, – это эмулятор виртуальных машин (ВМ), который разработан компанией VMware Inc. Он позволяет запускать на компьютере одновременно несколько операционных систем (MS DOS, Windows, Linux, FreeBSD – полный список смотрите на сайте компании) и переключаться между ними без перезагрузки компьютера. VMware Inc. предоставляет вам возможность воспользоваться 30-дневным ознакомительным ключом. Он высылается на e-mail, который вы указали при регистрации . Скачать VMware Workstation вы можете отсюда (размер 9,5 Мб). Если вас интересует более подробная информация (на русском), прочтите статьи об установке и настройке VMware В.А.Костромина и А.А.Ерижокова. Материала в этих статьях достаточно для того, чтобы понять как проходит процесс инсталляции и настройки. Недостатком можно считать то, что все в нем описанное относится к VMware 2.0. Если вы сильны в английском (ох, уж это если), советую обратиться к первоисточнику – документации по VMware Worksation 3.0. Файл в формате pdf можно найти здесь (размер 3,8 Мб) или воспользуйтесь online-вариантом документации. Если у вас возникли вопросы, попробуйте прочитать FAQ, поискать ответы на свои вопросы на сайте OpenNET или задать его в группе новостей fido7.ru.linux.

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



Внесение изменений


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

Следующие файлы в /proc наиболее полезны для системного администратора. Они не являются исчерпывающими, но полезны для повседневного использования.



Vosstfbsd


LinuxRSP.Ru. Все о Linux по-русски. Сохранение и восстановление операционной системы FreeBSD.

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

Алексей Иванов ivanov@ftu.ru

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

Когда мне в руки попал сервер под управлением FreeBSD, я, привыкший к линуксу, не знал с какой стороны к нему подойти.

Вот для таких, как я, и для всех остальных эта статья.

Сохранение FreeBSD:

Для начала определимся, что у нас есть и как с этим бороться. FreeBSD, в отличие от Линукса, хранит все свои конфигурационные файлы в строго определенных местах: /etc – системные настройки, /usr/local/etc – настройки сервисов и программ, установленных пользователем.

Конфигурация текущего ядра сидит в /sys/i386/conf/. По умолчанию там всегда есть файлы LINT и GENERIC – это, соответственно, описание всех возможных опций ядра (LINT) и конфигурационный файл ядра, собранного разработчиками FreeBSD (GENERIC). Там же хранятся конфигурационные файлы, созданные Вами, или до Вас (предыдущими админами (). Узнать какой файл является текущим очень просто: uname –a  

bash-2.04# uname -a

FreeBSD gw.rissa.ru 4.1-RELEASE FreeBSD 4.1-RELEASE #0: Sun Oct 20 18:32:29 MSD 2002 root@gateway.rissa.ru:/usr/src/sys/compile/GW i386

bash-2.04#

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

Путь, указанный в выводе команды, ведет к директории, в которой подготовлены конфиги ядра, эта директория появляется в процессе компилирования ядра, а сам файл настроек лежит в /sys/i386/conf. В данном случае он называется GW.

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

Еще один каталог, который нам будет нужен это /usr/ports/distfiles, там сложены дистрибутивы (исходники) всех программных продуктов, которые установлены с помощью системы портов.


Итак, мы подходим к самому интересному: сохранение всех настроек на отдельном носителе.

Если у вас в системе установлен CD-RW (а ввиду его низкой стоимости, и практической необходимости, он должен быть установлен!), то сохранение настроек, а также всевозможных файлов и файликов, становится делом простым и приятным.

Для начала, определимся с временным каталогом, куда мы скопируем все, что нам будет необходимо. Я предложил бы каталог /var/backup (у меня в системе в /var смонтирована самая большая партиция). Если вы не знаете что у вас где смонтировано, а также сколько места у вас на дисках занято или свободно, вам поможет команда df –H.

Теперь создадим каталоги (для удобства ():

mkdir /var/backup/etc

mkdir /var/backup/kernel

mkdir /var/backup/distfiles

mkdir /var/backup/local.etc/

mkdir /var/backup/home/

mkdir /var/backup/root/

И скопируем все необходимое:

cp /etc/* /var/backup/etc/

cp /sys/i386/conf/* /var/backup/kernel/

cp –R /usr/ports/distfiles/* /var/backup/distfiles/

cp –R /usr/local/etc/* /var/backup/local.etc/

cp –R /home/* /var/backup/home/ (очень часто в каталоге /home нет ничего ценного … поэтому подойдите к копированию этого каталога творчески ()

cp –R /root/* /var/backup/root/

Если ваша система сконфигурирована как www и/или ftp сервер, обязательно озаботьтесь сохранением каталогов www и ftp. Узнать где они легче всего из соответствующих конфигурационных файлов:

WWW (Apache):

-bash-2.05b# grep Root /usr/local/etc/apache/httpd.conf

ServerRoot "/usr/local"

DocumentRoot /usr/local/www/rissa

DocumentRoot /usr/local/www/story

DocumentRoot /usr/local/www/sierra

DocumentRoot /usr/local/www/opos

DocumentRoot /usr/local/www/myro

DocumentRoot /usr/local/etc/httpd/htdocs/squid-reports

DocumentRoot /usr/local/www/granitvtd

DocumentRoot /usr/local/www/fasko

DocumentRoot /usr/local/www/atdt

DocumentRoot /usr/local/www/mustang

DocumentRoot /usr/local/www/velobol

-bash-2.05b#

FTP (Proftpd):

Тут немного сложнее, но, заглянув в /usr/local/etc/proftpd.conf, вы найдете все, что вам нужно.



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

Для записи на CDRW вы должны создать iso образ:

mkisofs –R –V “my_backup.26.03.03” –o /var/backup.iso /var/backup

Потом записать CD:

burncd -f /dev/acd0c –e –s 20 data /var/backup.iso fixate

После записи, необходимо проверить записанный диск:

mount /dev/acd0c /cdrom

cd /cdrom

ls -la

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

Другим путем является создание «слепков» системы с помощью утилиты dd. Но об этом в другой раз.

Восстановление FreeBSD:

Ой!!! Случилось страшное!!!! Самый любимый сервер, работающий уже год, исправно хранящий весь web-сайт фирмы, каталог ftp и базы данных УМЕР!!!! НО! У нас есть заботливо созданная резервная копия, и мы готовы к восстановлению. Итак, запасаемся сигаретами, кофе, пивом, кока-колой и приступаем к решению внезапно возникшей задачи.

Шаг 1: Установка FreeBSD

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

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

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

/ -- 300 Mb

/usr -- 2 Gb

/var -- все остальное

На самом деле, такое деление дискового пространства, исключительно моя идея, в мире есть много мнений как это делать правильнее, вы можете разделить так как вам удобно, но при любом разделении необходимо учитывать следующее: рутовый каталог практически не изменяется в процессе работы системы и не требует много места, в каталоге /usr и /usr/local находятся программы и библиотеки, установленные вами из системы портов, или каким либо другим способом. Максимально возможный размер каталога /usr не превышает 3 Gb – это если установить вообще все! В каталоге /var изначально находятся логи системы, почтовые файлы пользователей, то есть файлы, постоянно изменяемые, и логично было бы туда же сложить и все наши данные, а также логично было бы выделить для /var как можно больше места. Исходя из этих соображений, я и предложил данное разбиение диска.



2. На вопрос об установке системы портов НЕОБХОДИМО ответить "Да"

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

3. После установки, зайдите в систему пользователем root и дайте следующие команды:

rmdir -f /tmp

ln -sf /var/tmp /tmp

Очень часто нормальная работа сервера нарушается из-за того, что в каталоге /tmp (соответственно в рутовом разделе) заканчивается место, данные команды устраняют эту проблему, первая стирает каталог /tmp, вторая создает символическую ссылку /tmp на каталог /var/tmp.

Шаг 2: Скомпилировать ядро системы:

Компиляция ядра системы – это полумагический процесс, после которого «у вас все будет хорошо!» (. Сейчас подавляющее большинство пользователей Linux (помните для кого эта статья?) не видят необходимости в компиляции ядра, потому что за них обо все позаботились разработчики дистрибутивов. В мире FreeBSD немного другой подход. Дистрибутив устанавливается с помощью ядра GENERIC, это ядро специально создано для единственной цели: заставить FreeBSD работать на любом железе, из списка поддерживаемого. В GENERIC отключены такие полезнейшие вещи как firewall, PPP и другие. Таким образом, компиляция ядра в FreeBSD – это жизненно важный процесс!

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

Прежде всего, необходимо скопировать этот файл в каталог /sys/i386/conf/

cp /cdrom/kernel/* /sys/i386/conf/

После мы можем скомпилировать ядро:

cd /sys/i386/conf/

config MYKERNEL

(MYKERNEL – имя конфигурационного файла ядра)

cd ../../compile/MYKERNEL

make -DNO_MODULES depend && make -DNO_MODULES && make -DNO_MODULES install



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

Само собой, после конфигурации ядра необходимо перегрузится.

Шаг 2: Восстановление системных настроек

Здесь все просто. Скопируйте из резервной копии каталог /etc.

сp –Rf /cdrom/etc/* /etc

В результате этого действия, вы получите уже настроенное соединение с интернетом, сконфигурированный firewall (он у вас был?), готовый файл /etc/master.passwd и т.д.

Для введения в действие этих настроек нет нужды перегружаться. Достаточно выйти в single user mode и потом зайти обратно в Multiuser.

init 1

После непродолжительного хрюканья система спросит вас про шелл по умолчанию, нажмите Enter. Когда вы увидите в качестве приглашения одинокую решетку (#), скажите exit. Система заново перечитает файл /etc/rc.conf и запустит все, что там описано.

Шаг 3: Установка необходимых пакетов

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

Для восстановления программного обеспечения сервера, у вас есть два пути:

Присоединить машину к интернету и поставить все, что нужно из портов. При этом все исходники программ будут качаться из Сети. Плюсом такого подхода является то, что вы не задумываетесь над зависимостями, не обращаете внимания на «свежесть» программных продуктов. Минус заключается в том, что вы тратите довольно много трафика и времени (время уходит на выкачивание). Я, например, чаще всего использую именно этот путь. Скопировать с вашего резервного диска все из директории /cdrom/distfiles (вы же смонтировали CD в /cdrom ?). Потом собрать все, что вам необходимо. Плюсы и минусы здесь строго меняются местами (. Но обратите внимание, что система портов была изначально разработана именно для использования Интернета, любые другие способы сборки программ из портов могут не дать результата.



Шаг 4: Заключительные настройки системы:

Все, мы уже на финишной прямой. Осталось совсем немного! Во первых необходимо восстановить содержимое каталога /usr/local/etc

cp –Rf /cdrom/local.etc* /usr/local/etc/

Во-вторых, вам надо восстановить все ваши данные: содержимое www-сервера, ftp-каталоги, файлы баз данных и т.д.

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

В конце как всегда несколько общих слов:

Данная статья нисколько не претендует на полное руководство. Чтение книг, поиск в Сети, знакомых никто не отменял. Практически наверняка, где-то в тексте допущена ошибка – не судите строго. Напишите мне, я исправлю (. С той же вероятностью могу сказать, что у некоторых возникнут идеологические возражения против некоторых мест в статье. Мой единственный ответ – напишите лучше! Еще я хочу сказать, что я готов к любому сотрудничеству, и если завтра мне укажут на вопиющие несуразицы в этом тексте, я их исправлю.


Вот из ит? man, apropos, whatis


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

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

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

Для начала попробуем узнать что поэтому поводу говорит man:

$ man regular No manual entry for regular

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

$ apropos regular Tcl_RegExpCompile (3) - Pattern matching with regular expressions Tcl_RegExpCompile [RegExp] (3) - Pattern matching with regular expressions

........... skipped .........

zgrep (1) - search possibly compressed files for a regular expression re (3) - Perl pragma to alter regular expression behaviour

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

$ apropos regular | grep -v Tcl_ pbmmask (1) - create a mask bitmap from a regular bitmap perlre (1) - Perl regular expressions regex (7) - POSIX 1003.2 regular expressions regexp (n) - Match a regular expression against a string regsub (n) - Perform substitutions based on regular expression pattern matching zgrep (1) - search possibly compressed files for a regular expression re (3) - Perl pragma to alter regular expression behaviour


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

Раздел это то, чего указано в скобках, для одного и того-же ключевого слова может найтись несколько страниц в разных разделах руководства, поэтому во всех доках и большинстве книжек по UNIX-ам при ссылке на руководство, указывается и раздел в котором содержится информация. Хотя в большинстве случаев нужная команда имеется в единственном экземпляре, и раздел указывать не обязательно. Но не в нашем случае, набрав man regex, к удивлению мы попадаем в третий раздел, где описаны Си-шные функции для работы с выражениями, но мы пока новички, и Си нам даром не нужен. Поэтому на всякий случай посмотрим раздел SEE ALSO, и там опять таки видим ссылку на 7-й раздел руководства с командой regex(7). Для того чтобы явно указать Мане к какой странице руководства обращаться, нужно набрать man 7 regex, вот теперь мы попадем именно на ту страницу, которая нам была и нужна. Есть еще один способ для просмотра всех страниц связанных с заданной командой, эта возможность включается с помощью ключа -a, так набрав man -a regex, сначала мы увидим страницу из третьего раздела, убедившись что она нам не подходит, мы выходим из less по q, нам сразу показывается следующая найденная страница, в нашем случае из 7-го раздела. Довольно таки удобно.

Еще до купы несколько полезных ключей:

man -f или whatis - выводит название и заголовок страницы, соответствующей введенной в качестве параметра команде или теме, может применяться для выяснения того что та или иная программа делает в принципе, без лишних деталей:

$ whatis 7 regex regex (7) - POSIX 1003.2 regular expressions

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



$ time man sfgfg Command exited with non-zero status 1 27.07user 19.10system 0:55.31elapsed 83%CPU (0avgtext+0avgdata 0maxresident)k 0inputs+0outputs (1418055major+438160minor)pagefaults 0swaps

Сознательно была введена несуществующая команда, чтоб Маня помучилась и перевернула всю базу. Есть способ сократить поиск, ограничив с помощью ключа -S, разделы в которых производить поиск; man -t - данный ключик пригодится если вам нужно вывести некоторую страницу руководства на печать, вообще говоря, по умолчанию, используется пост-скриптовый драйвер, и соответственно на выходе man -t regex, мы получим пост-скрипт документ который можно непосредственно перенаправить на принтер, если конечно он у вас поддерживает PostScript. Если не поддерживает, то есть варианты. Наиболее предпочтительно поставить какой нибудь модный фильтр, типа apsfilter или a2ps, которые могут громадное количество входных форматов перевести в пост-скрипт, а там уже садится ghostscript с конкретным драйвером вашего принтера, и переводит из пост-скрипта, на понятный вашему принтеру язык. Ну это я чегото отвлекся, в другой раз про принтеры может расскажу, а может и не расскажу.

Есть еще один способ вывести man-овскую страницу на принтер, при условии что он из серии HP LJ4L или старшие модели LJ. В /etc/man.config вносятся изменения, после которых мы видим следующее:

$ cat /etc/man.config | grep TROFF #TROFF /usr/bin/groff -Tps -mandoc -P-g TROFF /usr/bin/groff -Tlj4 -mandoc -P-g #TROFF /usr/bin/groff -Thtml -mandoc -P-g

Первая из выведенных строк - старый вариант, формирующий пост-скрипт, а вторая, после моих изменений, и формирующая вывод понятный LaserJet-у. Также есть драйвер для groff, формирующий на выходе html, для этого нужно раскоментарить третью строку, а вторую закоментарить.

За точность не ручаюсь, т.к. принтера под рукой нету, и проверить не могу, но когдато такой вариант катил;

man -w и man -wa - ключ -w отключает вывод собственно страницы руководства, вместо этого печатается имя файла содержащего эту страницу, отмечу, что на каждую команду свой файл. Совместно с ключем -a, выводит все найденные файлы по данной команде. Пример:



$ man -w regex /usr/man/man3/regex.3.gz $ man -wa regex /usr/man/man3/regex.3.gz /usr/man/man7/regex.7.gz

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

Еще одна интересная комбинация ключа -w с ключем -K, в этом случае выводятся только имена файлов содержащих вхождение искомой подстроки:

$ man -wK httpd /usr/local/man/man1/wml_p3_eperl.1 /usr/man/man8/logrotate.8.gz /usr/man/man8/suexec.8.gz /usr/man/man8/rotatelogs.8.gz /usr/man/man8/logresolve.8.gz /usr/man/man8/httpd.8.gz /usr/man/man8/ab.8.gz /usr/man/man1/man2html.1.gz /usr/man/man1/perlfaq3.1.gz /usr/man/man1/htpasswd.1.gz /usr/man/man1/htdigest.1.gz /usr/man/man1/dbmmanage.1.gz /usr/lib/perl5/man/man3/CGI::Fast.3.gz /usr/lib/perl5/man/man3/CGI.3.gz

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

$ man -wK httpd | sed 's?.\+/\([^.]\+\)\.\([0-9]\+\).*$?\2 -f \1?' | xargs man logrotate (8)- rotates, compresses, and mails system logs suexec (8)- Switch User For Exec rotatelogs (8)- rotate Apache logs without having to kill the server logresolve (8)- resolve hostnames for IP-adresses in Apache logfiles httpd (8)- Apache hypertext transfer protocol server ab (8)- Apache HTTP server benchmarking tool man2html (1)- format a manual page in html perlfaq3 (1)- Programming Tools htpasswd (1)- Create and update user authentication files htdigest (1)- Create and update user authentication files dbmmanage (1)- Create and update user authentication files in DBM format CGI::Fast (3)- CGI Interface for Fast CGI CGI (3)- Simple Common Gateway Interface Class CGI::Apache (3)- Make things work with CGI.pm against Perl-Apache API CGI::Carp (3)- CGI routines for writing to the HTTPD (or other) error log CGI::Cookie (3)- Interface to Netscape Cookies CGI::Fast (3)- CGI Interface for Fast CGI CGI::Push (3)- Simple Interface to Server Push CGI::Switch (3)- Try more than one constructors

Согласитесь более цивилизованный вид. Данную команду можно запихнуть в ваш .bashrc в виде функции:

$ cat # .bashrc ......... # User specific aliases and functions if [ "$PS1" -a -f ~/lib/advhist.sh ]; then manK() { man -wK $1 | sed 's?.\+/\([^.]\+\)\.\([0-9]\+\).*$?\2 -f \1?' | xargs man } fi ........

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

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

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

....продолжение следует.....


Возможно, еще один способ


И, наконец, следует отметить, что в FreeBSD версии 2.2.2 появилась "база данных login-классов" (login class capability database), /etc/login.conf. Она предоставляет более гибкие возможности по ограничению входа. Можно не только полностью запретить вход юзеру, но разрешить только в определенное время суток или ограничить длительность сессии и т.п.

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

Скорее всего, о ней можно сказать все то же, что относится к методу "account expiration".

(Когда я познакомлюсь с ней поближе, я, возможно, полностью перепишу этот текст :-).

Иван Паскаль pascal@tsu.ru



Возможности NTFS


Марк Русинович
30.11.2001
Windows 2000 Magazine, #07/2001
Версия для печати
Выскажите свое мнение



Всех пингвинов командир


Какие программы предпочитают юзеры при работе с файлами в Windows в качестве альтернативы стандартному Explorer’у? Кто-то ответит: «Нортон», иной скажет: «Волков»; мне, например, очень нравится Far. И не потому, что Explorer совсем такой уж плохой, просто в некоторых ситуациях, например, при копировании файлов или перемещению по каталогам, он несколько неудобен (прим. литредактора: Забавно: «в некоторых ситуациях». А на… пардон, зачем обычно нужен файловый менеджер, как не для копирования файлов и перемещения по каталогам???) Аналогичная ситуация наблюдается и в Linux. Хотя и существует большое количество различных файловых менеджеров, большинство пользователей продолжают использовать в своей работе mc (Midnight Commander). Помимо удобства и наглядности, их подкупают его низкие требования к системным ресурсам. Не менее важен и тот факт, что данная программа входит практически во все дистрибутивы, а при возникновении критической ситуации, когда X-Window не загружается, Midnight Commander в связке с текстовым редактором vi остается последним средством, чтобы все поправить. Данная статья поможет разобраться, что к чему при использовании mc. Пользователи, которые до этого работали в ДОС или часто использовали Far в своей работе, многое будет не внове, хотя программа располагает и некоторыми особенностями, присущими среде Linux. Для краткости будем считать, что Midnight Commander установлен и его не надо искать в Интернете (с чего начинают свою работу поклонники демончика с трехзубым fork'oм — FreeBSD).

Запускается программа путем набора mc в командной строке. Если ничего не произошло, по команде find / -name 'mc' найдите каталог, куда установлена софтина (как правило, программа находится в /usr/bin/mc). После запуска Midnight Commander’а возникают две панели сине-белого цвета, вверху которых расположена строка меню, а внизу — подсказка к горячим клавишам. Если чего-то из вышеописанного нет или, наоборот, по вашему мнению что-то является лишним, зайдите в Настройка (горячая клавиша F9) > Внешний вид и уберите/добавьте то, что считаете нужным/ненужным. Например, на небольших мониторах можно выключить клавиши-подсказки — так вы даже быстрее их запомните. В любом случае, в пункте меню Файл находятся все необходимые команды. При правильной локализации системы все надписи, а также вводимый и выводимый текст, отображаются в русской кодировке, если же это не так, проверьте, чтобы были установлены Полный 8-битный ввод и Полный 8-битный вывод в подпункте Отображение символов (Рис. 1). Каждая панель состоит из списков файлов каталога, в котором вы находитесь, и строки министатуса (которая, впрочем, тоже отключается). Формат вывода информации о файлах можно изменить в пункте Правая (левая) панель >

Формат списка. Существует четыре варианта представления:


стандартный (full) — отображается только имя, размер и время последнего изменения;

укороченный (brief) — только имя (но зато в две колонки и, соответственно, вдвое больше файлов);

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

определенный пользователем (user) — пользователь сам определяет формат вывода;

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

half type,name,|,nlink,|,name,|,mode,|,size

Здесь: half — половина экрана, type — отображает тип файла (/ — каталог, @ — ссылки, * — исполняемые файлы, и т.д.), name — имя файла, owner — владелец, mode — права доступа в числовой форме (perm — для вывода в буквенной), size — размер файла, знак | — разделитель. Здесь же аналогичным образом можно задать и свой собственный формат для строки мини-статуса.

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

   


Например, при выборе режима Быстрый просмотр (Quick View) выводится содержимое файла (Рис. 3), в режиме Дерево (Tree) можно увидеть местоположение файла в контексте структуры каталогов, наконец, в режиме Информация в другой панели выводится все об интересующем вас файле (Рис. 5-6). В режимах Сетевое соединение и FTP-соединение можно работать с файлами на удаленных компьютерах точно так же, как с локальными. Есть еще вверху на панели три кнопки — <, v и >, предназначенные для перемещения по дереву каталогов с помощью мыши (по нажатию v высветится история перемещения).



Кстати, если у вас запущен сервер gpm, то проблем с мышью быть не должно, все равно в каком режиме вы работаете — в консоли, в эмуляторе терминала xterm или вообще на удаленном компьютере. Для того чтобы вырезать\вставить текст с помощью мыши необходимо при этом удерживать клавишу Ctrl (правда, в эмуляторе терминала эта фича не работает).

Теперь что касается копирования, перемещения и удаления файлов. Для того чтобы выделить файл, нужно щелкнуть по нему правой кнопкой мыши; снять выделение можно, проделав эту операцию повторно. С помощью клавиатуры все это можно проделать нажатием Ctrl+t либо Insert , а группу файлов можно выделить, нажав Доп + (снять выделение — Доп -). Операция Инвертировать отметку позволяет снять выделение с файлов и выделить остальные. А Снять отметку (\) позволяет снять подсветку с уже выделенного файла. Хочу также обратить ваше внимание, что при выборе группы файлов через Отметить группу можно воспользоваться регулярными выражениями. При этом знак * означает ноль или любое количество символов, знак ? — любой одиночный символ, а чтобы указать на группу знаков, один из которых должен присутствовать в искомом файле, необходимо заключить эти знаки в квадратные скобки. Например, следующий шаблон выведет все файлы от test1.gz до test9.gz: test[1-9].gz. Кроме того, выделив группу файлов, можно также установить права доступа для всех сразу, использовав команду chmod, а также изменить владельца файла или группу, к которой принадлежат данные файлы (chown и chgrp соответственно). Все это доступно через подпункты
Права доступа (Ctrl+x; c) (Рис. 4) и Владелец/группа (Ctrl+x; o) меню Файл. Здесь же, в подпункте Права (расширенные), можно редактировать все сразу. Естественно, вы должны помнить, что если установить нужные права на интересующий вас каталог, то это не значит, что все файлы, находящиеся в нем, будут иметь такие же права — для этого нужно заходить в каждый каталог и устанавливать для файлов права доступа отдельно или воспользоваться командой chmod, chown, chgrp с флагом -R.



Для выделенных файлов можно установить жесткую (Ctrl+x; l) либо символическую ссылку (Ctrl+x; s). Так как в этом вопросе постоянно путаются, то внесу необходимую ясность. Сначала о жестких ссылках. В Linux, как и во всех Unix'ax, все файлы (и каталоги, кстати, тоже) имеют свой номер, для каждого создается узел (inode), в котором хранится вся служебная информация, состоящая примерно из 13 пунктов. Лишь для имени в этом самом inode места не нашлось, поэтому каждый узел связывается с именем с помощью ссылки в виде имя файла — номер узла. При обращении к файлу по связке название-узел отыскивается нужный inode, после чего на название система больше не обращает абсолютно никакого внимания. Поэтому в Linux можно, запустив программу, тут же переименовать файл или удалить его (Windows вам этого не позволит сделать, сославшись на то, что файл занят приложением). Это и называется жесткой ссылкой. Еще один интересный момент: ведь никто не мешает создать две и более жестких ссылок на один и тот же узел. Этот трюк широко распространен. Посмотрите Рис. 5-6 и сравните характеристики файлов gzip gunzip. Как видите, такие пункты как положение на диске, размер и т.д. одинаковы, отличается только название — то есть, по сути мы запускаем одну и ту же программу. Как же, спросите вы, ведь эти две программы предназначены для разных целей. А все очень просто (кто программировал для консоли, тот поймет сразу): одним из параметров, передаваемых при запуске программы, является название — отсюда программа и узнает, что же она должна собственно делать. Кстати, в Unix'ax программами удаления убивается не файл, а ссылка на узел — файл удаляется автоматически, когда на него нет ни одной ссылки и он не используется ни одной программой. Единственное ограничение на использование жестких ссылок — все они должны находится на одном диске (связи не могут пересекать границ устройств). Символическая ссылка — это особый вид файла, в котором содержится информация о расположении исходного файла, находящегося на любом диске или компьютере. При удалении исходного файла символическая ссылка становится бесполезной, но можно создавать символические ссылки на несуществующий или временно недоступный файл. В качестве аналога символической ссылки могу привести ярлыки в Windows.



  


При копировании, перемещении и переименовании файлов можно изменять их имена. Для этого необходимо задать маску — как для исходных, так и для выходных файлов. Эта функция бывает полезна, когда файлы с таким именем в конечном каталоге уже есть или могут быть, либо когда вы хотите сменить расширение (.MP3 на .mp3, .jepg на .jpg, .tar.gz на .tgz) или добавить префикс .old или .bak к названию файла.

Например, при указании маски источника *.tar.gz и маски приемника *.tgz все файлы с расширением .tar.gz будут переименованы в .tgz. В одной из конференций я нашел способ сделать это с помощью команды find:

$find -name \*.tar.gz -exec sh -c 'n=`echo {} | sed s/..*$// `; mv $n.tar.gz $n.tgz' \;

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

Если воспользоваться в маске приемника \u или \l, следующий символ имени будет преобразован к верхнему (в первом случае) или к нижнему (во втором) регистру. При использовании знаков \U или \L все последующие символы будут преобразованы к соответствующему регистру. Подробнее смотрите в инструкциях к утилитам grep, sed, awk и справке по программированию на shell. Есть еще несколько опций, которые влияют на операции копирования и перемещения. Так, опция Разыменовывать ссылки (Follow links) определяет, будут ли при копировании жестких и символических ссылок создаваться ссылки, или будут копироваться сами файлы. А со включенной опцией Внутрь каталога, если есть (Dive into subdirs) при копировании каталога в конечном каталоге будет создаваться подкаталог с именем копируемого, независимо от того, есть ли он там или нет (если есть, то подкаталог создается на уровень ниже). При включении опции Сохранять атрибуты (Preserve attributes) все копируемые/перемещаемые файлы сохраняют свои начальные атрибуты (права доступа, временные параметры), при выключении используется значение, определяемое текущим значением umask. Чтобы при удалении файла у вас запрашивалось подтверждение, проверьте, установлена ли опция Безопасное
удаление в Настройки > Параметры (Рис. 7).



Первым моим приятным удивлением в Linux'e было автодополнение в bash, что сильно облегчает жизнь и позволяет быстро найти нужный файл и набрать команду. То ли дело ДОС, где при запуске программы необходимо помнить полностью путь к ней! Так вот, в mc тоже работает автодополнение команд по Alt+Tab, но есть и другая возможность быстро найти нужный файл. Для этого нажмите Alt+S или Ctrl+S, и по введенным вами буквам курсор переместится к нужному файлу, а если у вас включена строка мини-статуса, то там также будет отображаться результат. Раз мы уже заговорили про поиск файлов, то для этого есть пункт меню Команда > Поиск файла, где можно произвести поиск по названию (можно применять шаблон для egrep) или по тексту, содержащемуся в искомом файле. Для того чтобы не искать по все каталогам, можно указать, в каких именно производить поиск. Каталоги, которые нужно пропустить, можно указать в файле ~/.mc/ini, разделяя их двоеточиями. Пример:

[Misk] find_ignore_dirs=/mnt/cdrom:/var:/boot

Напомню только, что точка при указании каталога означает текущий каталог, а ~ (тильда) — домашний.

Пункт Критерий панелизации (Ctrl+X) применяется в том случае, если вы хотите вывести результат выполнения какой либо команды на текущую панель (что-то типа встроенного терминала). Подменю История команд выводит окно со списком ранее набранных команд; можно выделить необходимую с помощью мыши или клавиш перемещения и скопировать в командную строку для редактирования и выполнения. А в подменю Справочник каталогов (Ctrl+\) можно занести наиболее часто используемые в работе подкаталоги, для быстрой навигации по дереву каталогов. Пункта Фоновые задания позволяет, соответственно, управлять фоновыми заданиями, запущенными из mc. С помощью mc можно запускать программу по нажатию Enter; для того чтобы связать расширение файла с программой, которая будет выполняться по нажатию на ней, существует файл ~/.mc/bindings — его можно вызвать для редактирования через подпункт меню Файл расширений. Файл меню позволяет отредактировать пользовательское меню (вызываемое по F2); все внесенные изменения сохраняются в файле ~/.mc/menu. Это обычный текстовый файл — естественно, туда можно добавить и свои пункты. Для обращения к файлам и каталогам доступны следующие переменные:



%f — имя файла, над которым расположен указатель;

%d — текущий каталог;

%F — имя текущего файл в противоположной панели;

%D — имя текущего каталога в противоположной панели;

%t — выделенные файлы в текущей панели;

%T — выделенные файлы в противоположной панели;

%{текст} — в том месте, где употреблена эта конструкция, появится приглашение ввести текст, который будет подставлен в скрипт;

%s или %S — выделенные файлы

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

Например, следующий скрипт устанавливает rpm-пакет (под root), на который указывает курсор:

R Install rpm package rpm -Uhv %f

А теперь в каталоге с rpm-пакетами войдите в пользовательское меню через клавишу F2 и нажмите R — пакет, над которым располагался курсор, будет установлен.

А следующий скрипт запускает в фоне все выделенные музыкальные файлы (щелчок правой кнопкой по нужным файлам, F2 и потом S — что может быть проще):

S Sound play mpg123 %t&

Таким образом можно существенно облегчить себе жизнь и не набирать в командной строке по сто раз на день одно и то же. А запустив какой-нибудь оконный менеджер полегче типа flwm или failsafe (это для того чтобы можно было запускать приложения, написанные под X-Window) и создав необходимые пункты меню, можно на слабых компьютерах работать не менее комфортно, чем в КДЕ. Я, например, использую меню еще и для запуска различных текстовых редакторов — писать программы мне нравится в одном, HTML править в другом, подготавливать документы в третьем… Это, кстати, еще один способ сделать с файлами все что вы хотите — например, для переименования с изменением атрибутов или копирования архивов с одновременной их распаковкой. Вот с помощью такой конструкции можно сделать символические ссылки в другой панели на выделенные файлы.

for i in %s do ln -s %d/$i %D/$i done



Переменной i при каждой итерации цикла передается имя файла. Конструкция %d/$i представлляет собой полный путь к файлу в текущем каталоге, %D/$i — в противоположном.

Очень часто в конференциях спрашивают: «А не переделать ли mc, чтобы удобно было делать то-то и то-то». Вот вам способ, творите.

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

С помощью встроенного редактора можно просматривать или редактировать текстовые файлы (а еще архивы и rpm-пакеты) (горячая клавиша F3 и F4 соответственно). Если в файле ~/.mc/ini установлены в 1 переменные use_internal_view и use_internal_edit (как правило, по умолчанию они установлены), встроенный редактор можно вызвать, просто набрав в командной строке mcedit, после чего откроется пустой файл. В нем можно редактировать как обычные AСSII-файлы, так и двоичные, не боясь повреждения данных. Можно сделать так, чтобы по умолчанию запускался какой-либо другой редактор или просмотрщик. Для этого в Настройки > Конфигурация уберите галочки с пунктов Встроенный просмотр и Встроенный редактор. Теперь для просмотра будет запускаться программа, указанная в переменной окружения pager, а если она не установлена, то будет выполнена команда view. Аналогично используется переменная editor и редактор vi. Но по-моему, встроенные средства тоже достаточно хороши, а если будет в том необходимость, то для запуска необходимого редактора я воспользуюсь описанным раннее способом.

Вот вкратце и все, что я хотел расказать об Midnight Commander’е. Могу сказать, что даже таким вопросам, как работа встроенного редактора и различия между работой в консольном режиме и в эмуляторе терминала, можно посвятить еще несколько страниц, но рамки журнала, как вы понимаете, не позволяют это сделать. Самое интересное, что в первые месяцы моей работы в Linux я даже не подозревал о том, что у меня есть такая удобная программа. Я набрел на нее случайно и теперь отношу к разряду программ первой необходимости. Естественно, как принято во многих программах, при нажатии клавиши F1 будет вызвана справка, где вы можете найти необходимую информацию. Для тех, кто не считает английский язык своим родным или просто предпочитает получать справку на знакомом языке, на сайте В. А. Костромина по адресу http://linux-ve.chat.ru/kos/mc.hlp.bz2 находится файл подсказки, переведенный на русский язык — разархивируйте его и скопируйте в каталог /usr/lib/mc. Кстати, то о книгах. Вышло в свет творение упомянутого Костромина «Linux для пользователя» — я думаю, оно будет особенно полезно начинающему пользователю. Здесь вы найдете необходимые советы по настройке и использованию системы. Итак, мы сегодня продвинулись еще на шаг в изучении Linux.

Сергей ЯРЕМЧУК
Мой Компьютер Weekly


Вступление


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

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

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

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

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

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


/bin - каталог исполняемых файлов и ярлыков к ним

/sbin - то же самое, только исполнять эти файлы имеет право только root

/root - домашний каталог root'а

/home - там расположены домашние каталоги других пользователей

/boot - каталог в котором расположены файлы, необходимые для загрузки

/mnt - каталог подмонтированных устройств (об этом позже)

/usr - второй уровень иерархии

/tmp - всякий мусор

/lib - разделяемые библиотеки

/var - изменяемые переменные (всякий мусор, только в отличие от /tmp, принадлежащий root'у)

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

/dev - директория устройств

/proc - директория файловой системы proc

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

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


Второй метод - намного лучше


Идея этого метода принадлежит Александру Канавину (хотя реализовал он его немного по-другому).

Поскольку "неправильные" программы, забывая установить нужную locale, используют locale "C", можно им вместо C "подсунуть" русскую locale, например - ru_RU.KOI8-R.

Для этого достаточно в файле "алиасов локалей" (X11R6/lib/X11/locale/locale.alias) добавить строчку

C ru_RU.KOI8-R

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

К сожалению, и этот способ неидеальный.

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



Второй сектор


Второй сектор будет содержать следующий код :

entry start start: mov ah,#0x03 xor bh,bh int 0x10

mov cx,#26 mov bx,#0x0007 mov bp,#mymsg mov ax,#0x1301 int 0x10

loop1: jmp loop1

mymsg: .byte 13,10 .ascii "Handling BIOS interrupts"

Этот код загружается и выполняется в сегменте 0x500. Он использует прерывание 0x10 для получения текущей позиции курсора и вывода на экран сообщения.

Первые три строки кода (отсчёт начинается с третьей строки, пропуская инструкции определения точки входа) используются для получения текущей позиции курсора. Для этого используется функция 0x03 прерывания 0x10. Перед её вызовом мы обнуляем значение регистра bh[3]. После выполнения прерывания, интересующий нас результат будет хранится в регистрах dh и dl (номер строки и колонки соответственно). Переходим ко второй части программы. В регистр...

cx записываем количество символов в строке, выводимой на экран[4] bx заносим значение номера видео страницы и код атрибута выводимых на экран символов (0x00 и 0x07). Мы планируем использовать белый цвет символов (0x7) на чёрном фоне (0x0). bp пишем адрес строки [5] ax записываем номер функции для вывода на экран строки и код подфункции, определяющий, что атрибут показываемой строки будет взят из регистра bl

Начало сообщения содержит два байта со значениями 13 и 10, что соответствует нажатию клавиши enter. Эти два кода идут вместе, 13 -- код возврата каретки (Carriage Return, CR), 10 -- код перевода строки (Line Feed, LF). Сама строка содержит 24 символа. Символы CR и LF трактуются функцией 0x13 прерывания 0x10 как управляющие и поэтому не высвечиваются. Теперь вызываем прерывание. И последней инструкцией "вешаем" компьютер.



"Второй способ"


Если у вас используется второй способ - указание полной keymap. В этом случае надо просто найти конкретную keymap и скопировать в наш файл.

Например, у вас в XGF86Config есть только строчка

XkbKeymap "xfree86(ru)"

Она указывает на то, что полное описание лежит в файле {XKBROOT}/keymap/xfree86, в блоке "ru".

Находим этот файл. Находим в нем блок

xkb_keymap "ru" { .... };

И "выкусываем" его оттуда. (Поскольку в нашем файле только один блок, название блока можно убрать).

Больше никаких исправлений не требуется.


Второй способ заключается в том, что вы можете указать одной инструкцией сразу полный набор настроек. Такие наборы называются keymaps и, также как и обычные компоненты конфигурации XKB, располагаются в отдельных файлах (которые, тоже содержат в себе несколько именованных блоков) в директории {XKBROOT}/keymap.

Обычно, каждом блоке keymap просто указывается - из каких файлов XKB должен извлечь соответствующие компоненты (хотя, в принципе, там может быть и полное описание всех компонентов), например

xkb_keymap "ru" { xkb_keycodes { include "xfree86" }; xkb_types { include "default" }; xkb_compatibility { include "default" }; xkb_symbols { include "en_US(pc105)+ru" }; xkb_geometry { include "pc(pc102)" }; };

Обратите внимание, что в одной инструкции include может быть указано несколько файлов (блоков) через знак "+". Понятно, что это означает, что должны быть вставлены последовательно все указанные файлы.

Таким образом, в файле конфигурации X-сервера можно вместо пяти компонентов указать сразу один их готовых наборов - keymap'ов, например

XkbKeymap "xfree86(ru)"

Кроме того, эти два способа можно комбинировать. Например, если вы выбрали одну из подходящих keymap, но вас не устраивает один из компонентов, например geometry, то в файле конфигурации можно указать

XkbKeymap "xfree86(ru)" XkbGeometry "pc(pc104)"

При этом, в соответствии с первой инструкцией, все компоненты будут взяты из keymap "xfree86(ru)", а вторая инструкция "перепишет" geometry, не затрагивая остальные компоненты (хотя я в этом не уверен :)




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

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

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

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



Второй способ (через модификатор)


Более удобным мне представляется способ, когда наш привычный перключатель (пусть это будет CapsLock) продолжает переключать "лат/рус". А вот - какой именно "рус" (вторую или третью группу) он выберет - будет определяться другой клавишей.

Естественно, при этом каждый из переключателей имеет два состояния. Основной переключатель - "лат/рус", дополнительный - "группа2/группа3".

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

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

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

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

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

Естественно, "установку/сброс" модификатора "повесить" (с помощью соответствующих "действий") на второй переключатель.

Итак. Описание основного переключателя теперь будет иметь вид

key <...> { type[Group1]=".....", [NoSymbol, NoSymbol], [NoSymbol], [NoSymbol], actions[Group1]= [ LockGroup(group=2), LockGroup(group=3)], actions[Group2]= [ LockGroup(group=1) ], actions[Group3]= [ LockGroup(group=1) ] };


("тип" придумаем немного позже).

Теперь надо "сочинить" модификатор и новый тип. И здесь нас ждет "засада". Дело в том, что xkbcomp (по крайней мере в нынешнем состоянии) не позволяет объявить новый виртуальный модификатор. Можно использовать только те, которые в нем уже предопределены.

К счастью, среди его модификаторов уже есть подходящий - LevelThree. А подходящий он потому, что

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

Таким образом, берем модификатор LevelThree и тип "THREE_LEVEL" -

type "THREE_LEVEL" { modifiers = Shift+LevelThree; map[None] = Level1; map[Shift] = Level2; map[LevelThree] = Level3; map[Shift+LevelThree] = Level3; level_name[Level1] = "Base"; level_name[Level2] = "Shift"; level_name[Level3] = "Level3"; };

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

Таким образом, наш основной переключатель (давайте уже определимся, что это будет <CAPS>), приобретает вид

key <CAPS> { type[Group1]="THREE_LEVEL", [NoSymbol, NoSymbol, NoSymbol], [NoSymbol], [NoSymbol], actions[Group1]= [ LockGroup(group=2), NoAction(), LockGroup(group=3)], actions[Group2]= [ LockGroup(group=1)], actions[Group3]= [ LockGroup(group=1)] };

Теперь можно заняться второй клавишей, которая будет "поднимать/опускать" модификатор LevelThree. Конечно, это может быть не одиночная клавиша, а какая-нибудь комбинация клавиш. Но для простоты, сначала возьмем отдельную клавишу. Я на своей клавиатуре ("Микрософтовской") использовал для этого клавишу "Menu" (скан-код <MENU>). Но, если у вас такой клавиши нет, то можно задействовать одну из парных клавиш (Shift, Control, Alt).



Итак. Сочиняем "поведение" клавиши <MENU>.
Прежде всего - я думаю, что вам не хочется держать ее все время нажатой, пока это нужно. То есть, нам надо, чтобы по первому нажатию она "подняла" модификатор, а по второму - опустила.

Как раз это делает "действие" LockMods (в переменной locked modifiers). Напомню, что SetMods и LatchMods "держат" модификаторы только пока нажата клавиша.

Итак, используем "действие" LockMods -

key <MENU> { [ NoSymbol ], actions[Group1]=[ LockMods(modifiers=LevelThree) ]};

(Описывать все три группы не обязательно. Если номер группы больше, чем допустимо для клавиши, XKB будет его "выравнивать", пока не попадет в допустимый диапазон.)

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

Поэтому, последним шагом будет - связать с клавишей какой-нибудь реальный модификатор (с помошью объявления modifier_map). И вот здесь нас ждет вторая "засада". В полной конфигурации все модификаторы (даже "безымянные" - Mod1-Mod5) уже расписаны. То есть, каждый уже соединен с какой-нибудь клавишей и, соответственно, каким-нибудь символом.

Самое неприятное то, что клиентские приложения могут реагировать на эти модификаторы и менять свое поведение. Поэтому, если мы свяжем наш LevelTree, например, с модификатором Mod5, который соответствует символу Scroll_Lock, то, при "поднятии" модификатора LevelThree, приложения будут считать, что нажата кнопка ScrollLock. А вот как они будут вести себя при этом - кто как.



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

То есть, если программа обнаружит, что в "состоянии" модификаторов взведен модификатор Mod1, она попытается найти соответствующий ему символ. Обычно это - Alt_L и Alt_R, то есть любая из клавиш Alt. Соответственно, программа считает, что нажата клавиша Alt и ведет себя в соответствии со своим пониманием этой клавиши.

Поэтому, чтобы избежать всяких "побочных" эффектов, нам надо не только связать модификатор с нашей клавишей <MENU>, но и "отцепить" этот реальный модификатор от других. Как я уже говорил в примере "добавление новой группы", "отцепить" модификатор, который был объявлен где-то "в глубинах" includ'ов, очень трудно. но, к счастью, они там привязываются не к скан-кодам, а к символам. Поэтому, если мы в своей конфигурации просто уберем эти символы из описаний скан-кодов, то связка "модификатор-символ" просто "повиснет в воздухе" и таким образом нам удасться "отцепить" модификатор.

Итак. Давайте возьмем реальный модификатор Mod5. Он используется только для символа Scroll_Lock, а этот символ, в свою очередь, "подвешен" только на клавишу ScrollLock (скан-код <SCLK>). Да и клавиша эта не самая "часто используемая".

Теперь нам надо добавить в описание клавиши <MENU> виртуальный модификатор LevelThree. Добавить инструкцию modifier_map, который свяжет Mod5 с нашей клавишей. И, наконец, переопределить клавишу <SCLK>, чтобы в ней не было упоминания и символе Scroll_Lock.

key <MENU> { virtualMods = LevelThree, [ NoSymbol], actions[Group1]=[ LockMods(modifiers=LevelThree) ]};

modifier_map Mod5 { <MENU> };

key SCLK { [NoSymbol] };

Вот теперь можно пробовать - что получилось.

Конечно, это не самое лучшее решение.

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

Поэтому рассмотрим еще один способ -


Метод регистрации виртуальных консолей, который


Метод регистрации виртуальных консолей, который я собираюсь описать, состоит из установки программы и изменении нескольких строк в /etc/inittab. Но перед этим я возьму вас в познавательное путешествие по землям getty и login, чтобы выяснить, как же регистрируется пользователь Unix.
Во-первых, я должен пояснить, что веду речь о виртуальных консолях -- о тех текстовых консолях, которые вы обычно переключаете нажатием ALT-F2 или CTL-ALT-F2 и так далее. Оболочки (shell), которые вы видите в окошках графического десктопа, совершенно другое. Их также можно автоматически запускать при загрузке, но этот процесс совершенно другой и в этой статье не описывается.
Кстати, по поводу последовательных терминалов: технология для виртуальных консолей, обсуждаемая в этой статье, также подходит и для последовательных терминалов, однако, возможно, протребуется некоторая доделка, поскольку терминалам требуются различные дополнительные параметры, вроде скорости передачи и установки паритета.


Сравнительно новая возможность в bash – программируемое автозаполнение, которое доступно, начиная с бета-версии 2.04. Программируемое автозаполнение знакомо вам, если вы пользователь zsh. Оно также присутствует, хотя в менее удобной форме, в tcsh.
Намного легче продемонстрировать принцип работы программируемого автозаполнения, чем объяснить его, таким образом я предлагаю установить один из нижеуказанных файлов и попробовать. Если вам не понравится, вы всегда можете отключить автозаполнение для определенной команды, полностью запретить использование, или удалить файлы из вашей системы. Они могут быть установлены и удалены очень чисто, так что вам не придется об этом беспокоится.


Всем привет! Перед тем, как начать вас "грузить", хочу сказать несколько слов о причинах, заставивших меня "засорять" ваши, и без того переполненные информацией, мозги. Их несколько:
Причина первая: если взглянуть на переводы, публикуемые в Russian Linux Gazette, то вы не встретите там материалов, посвящённых программированию на ассемблере.[1] Причина очевидна: основной конёк Linux и свободного софта -- переносимость. А вы где-нибудь видели программу на ассемблере в стандарте POSIX? Нет? Я тоже. Я не призываю вас переписывать "сишный" код на ассемблере для повышения быстродействия . Зачем? Время "героев-одиночек", сидевших и "вылизывавших" по нескольку часов десяток строк кода на "асме", давно прошло. Теперь время глобализации и интеграции. К тому же, бывает дешевле модернизировать "железо" (закон Мура пока ещё никто не отменял), чем потратиться на переписывание программ.
Причина вторая: статья "Пишем игрушечную ОС", автор R. Krishnakumar. Неплохо, но маловато (надеюсь, что пока), так ... "на один зубок".
Причина третья (основная): эта тема мне немного знакома.
То, что предлагает в своей статье R. Krishnakumar очень интересно, и я с нетерпением жду продолжения (и как читатель, и как переводчик). Мы воспользуемся его идеей, но пойдём в другую сторону -- мы не будем создавать самодостаточный (подобный ОС) код, мы напишем код, который выдаст на экран сообщение "Linux Gazette ... сделаем работу с Linux немного веселее!"[2] и будет ждать до тех пор, пока вы не нажмёте клавишу пробел и выполнит в конце то, что должен был сделать BIOS[3] -- загрузит MBR[4] в ОЗУ и передаст ему управление. Пример простой и незатейливый, но в нём используются основные возможности компьютера, которые уже доступны перед загрузкой ОС (или после работы POST[5] , кому как больше нравиться).


Файловая система - это программное обеспечение, которое используется для организации и управления данными, хранящимися на носителях информации; файловая система обеспечивает целостность данных, контролируя идентичность данных при их записи и последующем чтении. Также, помимо хранения данных, находящихся в файлах, файловая система хранит и управляет важной информацией о файлах и о самой файловой системе (то есть это информация о дате и времени, владельце, правах доступа, и размере файла, а также носителе информации и местонахождении файлов на диске, и т.д.). Очень часто подобного рода информацию называют метаданными.
Так как файловая система старается работать как можно более асинхронно для того, чтобы избегать узких мест при обращении к диску, то неожиданное прерывание работы файловой системы может привести к потере данных. В качестве иллюстрации можно привести следующую ситуацию: что произойдет, если ваша машина "упала" в то время, когда вы работали с документом, расположенным в стандартной для Linux файловой системе ext2?
Возможны следующие варианты:
Система "упала" после сохранения файла. Это самый оптимистичный сценарий: вы не потеряли ничего. Просто перезагрузитесь и продолжайте работать с документом.
Система "упала" перед тем, как вы сохранили файл. В этом случае все несохраненные изменения утеряны, однако старая версия файла по-прежнему на месте.
Система "упала" именно в момент сохранения файла. Это худшее из того, что могло произойти: новая версия файла записывается поверх старой. В итоге у вас будет файл, частично состоящий из новой версии и частично - из старой. Если файл был сохранен в бинарной форме, то вы не сможете заново открыть его, потому формат данных из файла не будет соответствовать стандартам, которые понимает приложение.
В последнем случае, ситуация может быть еще хуже, если в момент падения данные записывались в зону метаданных, например информация о каталоге. Теперь вместо одного испорченного файла у вас имеется поврежденная файловая система и, вполне возможно, одним каталогом на диске меньше (если не целой партицией).


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


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


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

Введение в автоматизацию Часть



Автор: Станислав Лапшанский, slapsh@kos-obl.kmtn.ru
Опубликовано: 23.07.2002
Оригинал: http://www.softerra.ru/freeos/19096/

Статья является переводом текста Dru Lavigne, опубликованного по адресу: http://www.onlamp.com/pub/a/bsd/2001/11/21/FreeBSD_Basics.html.

В первой части мы начали выяснять какие сценарии запускаются программой periodic. В этой части мы закончим наш обзор.

В прошлый раз мы остановились на сценарии предназначенном для системного аккаунтинга. По-умолчанию системный аккаунтинг выключен, поэтому, если вы не планируете его включать, запретите выполнение этого сценария. Если вы не знаете, для чего предназначен системный аккаунтинг, обратитесь к соответствующей странице руководства – man sa, там написано, какая именно ведется статистика. Если вы решили включить системный аккаунтинг, подумайте над сменой значения параметра daily_accounting_compress с «NO» на «YES», а так же почаще поглядывайте на размер свободного места на вашем диске. # 310.accounting daily_accounting_enable="YES" # Ротировать файлы аккаунтинга daily_accounting_compress="NO" # Сжимать ротированные журналы daily_accounting_flags=-q # Параметры для /usr/sbin/sa daily_accounting_save=3 # Количество хранимых файлов

Вот еще один сценарий который взаимодействует с rdist, так что если вы не поддерживаете идентичные копии файлов на нескольких машинах, запретите его выполнение: # 320.distfile daily_distfile_enable="YES" # Ежедневно запускать rdist

Вы обязательно должны запретить сценарии обслуживающий новостной сервер, поскольку даже если такой сервер у вас установлен, он должен иметь встроенный механизм обслуживания устаревших сообщений. # 330.news daily_news_expire_enable="YES" # Запускать сценарий news.expire

Теперь обратимся к UUCP (Unix to Unix Copy Program – устаревшее средство для передачи файлов между UNIX-машинами. Сейчас используется в некоторых отсталых местностях ;-) для передачи почтового трафика – прим. переводчика). Вот три сценария которые имеют отношение к UUCP, я собрал их вместе и расскажу о всех них сразу. Сценарии 340 и 410 можно найти в части для ежедневно выполняемых сценариев, а сценарий номер 300 – в еженедельной части: # 340.uucp daily_uuclean_enable="YES" # Запускать сценарий uuclean.daily


# 410.status-uucp daily_status_uucp_enable="YES" # Проверка состояния uucp
# 300.uucp weekly_uucp_enable="YES" # Еженедельная чистка uucp
К сожалению программы работающие с UUCP на протяжении многих лет подвержены разнообразным уязвимостям, и, в недавнем прошлом, стали предметом для выпуска бюллетеня безопасности FreeBSD (см. ftp://ftp.freebsd.org/pub/FreeBSD/CERT/advisories/FreeBSD-SA-01:62.uucp.asc). Поэтому самым правильным решением будет простой запрет на выполнение этих трех сценариев. Вообще говоря, если вы не имеете необходимости в использовании утилит tip и cu, то UUCP вам не нужен. В четвертой части вышеописанного бюллетеня вы найдете указания какие файлы удалить и как помешать им восстановиться при пересборке вашей системы. #400.status-disks daily_status_disks_enable="YES" # Проверить состояние диска daily_status_disks_df_flags="-k -t nonfs # Параметры к команде df(1)
Вероятно вам следует отставить сценарий проверки состояния диска включенным, и, каждый день просматривать его вывод для того что бы убедиться что у вас все еще есть свободное дисковое пространство. Заметьте, что вы можете изменить параметры запуска программы df, для получения от нее желаемого результата. Поскольку я не использую NFS, а так же люблю знать сколько у меня осталось inodes (грубо говоря, сколько можно записать еще файлов в файловую систему – прим. переводчика), а так же получать все это в легко читаемом человеком формате. Поэтому мои параметры выглядят так: daily_status_disks_df_flags="-h -i" # Параметры к команде df(1)
Их применение дает мне следующий вывод: Filesystem Size Used Avail Capacity iused ifree %iused Mounted on /dev/ad0s1a 97M 31M 58M 35% 1175 23911 5% / /dev/ad0s1f 7.5G 1.4G 5.5G 21% 130401 1837725 7% /usr /dev/ad0s1e 19M 7.3M 11M 41% 950 4104 19% /var procfs 4.0K 4.0K 0B 100% 68 464 13% /proc mfs:28 252M 365K 231M 0% 33 65053 0% /tmp linprocfs 4.0K 4.0K 0B 100% 68 464 13% /usr/compat/linux/proc Last dump(s) done (Dump '>' file systems):


В то время как по- умолчанию выдается такой результат: Filesystem 1K-blocks Used Avail Capacity Mounted on /dev/ad0s1a 99183 31559 59690 35% / /dev/ad0s1f 7851437 1500679 5722644 21% /usr /dev/ad0s1e 19815 7462 10768 41% /var procfs 4 4 0 100% /proc mfs:28 257703 365 236722 0% /tmp linprocfs 4 4 0 100% /usr/compat/linux/proc Last dump(s) done (Dump '>' file systems):
Первым делом сценарий просмотра состояния сети запускает программу netstat. Если вы не хотите, что бы IP-адреса разрешались в их строковые эквиваленты поменяйте значение параметра daily_status_network_usedns на «NO». Решай те сами, достаточно ли полезно содержимое вывода этого сценария для того что бы оставить его включенным. # 420.status-network daily_status_network_enable="YES" # Проверить состояние сети daily_status_network_usedns="YES" # Разрешать IP-адреса
Информация выводимая следующим сценарием зависит от того, включен у вас демон rwho или нет. Если он выключен, то сценарий выдаст время прошедшее с последней перезагрузки вашей системы, а если включен, то эта информация будет собрана со всех машин в сети (очевидно, что на них так же должен быть запущен этот демон – прим. переводчика). # 430.status-rwho daily_status_rwho_enable="YES" # Проверить состояние системы
Следующий сценарий выполняет команду mailq, при помощи которой можно узнать что сейчас находится в почтовой очереди. # 440.status-mailq daily_status_mailq_enable="YES" # Проверка состояния почтовой системы daily_status_mailq_shorten="NO" # Краткий вывод
Сценарий выдающий сводку безопасности, является, пожалуй самым важным и полезным сценарием который запускает программа periodic. Обратите внимание, что результаты его работы высылаются отдельным письмом, а так же могут быть посланы не суперпользователю, а кому-нибудь другому. Параметр daily_status_security_inline должен оставаться в состоянии «NO», если вы не хотите, что бы сводка безопасности выдавалась на терминал. В случае необходимости в будущем проводить исследования безопасности системы (например при ее взломе – прим. переводчика), вам может потребоваться наличие доверенного пользователя, который будет ежедневно получать и читать сводку безопасности. # 450.status-security daily_status_security_enable="YES" # Проверка безопасности системы daily_status_security_inline="NO" # Выдавать результаты на терминал daily_status_security_output="root" # Кто получит результат: пользователь или файл daily_status_security_noamd="NO" # Не проверять смонтированные amd тома daily_status_security_nomfs="NO" # Не проверять смонтированные mfs тома


Проверкой текущего состояния безопасности занимается сценарий /etc/security. Этот сценарий проверяет ряд хорошо известных уязвимостей (общих для всех UNIX систем – прим. переводчика), а это значит, что вы должны полностью просматривать его вывод для того что бы быть уверенным в том, что ваша система не скомпрометирована. Если вы новичок в обеспечении целостности и безопасности системы и некоторые из пунктов сводки вам непонятны, то чтение man security будет хорошей отправной точкой. Для дополнительного чтения почитайте информацию по следующим ссылкам: http://people.freebsd.org/~jkb/howto.html и http://www.cert.org/tech_tips/usc20_full.html.
Давайте кратко пройдемся по пунктам сводки безопасности.
Секция «setuid files»
Файлы с установленным атрибутом setuid являются одной из старейших уязвимостей системы UNIX. К счастью FreeBSD хранит список этих файлов в файлах /var/log/setuid.today и /var/log/setuid.yesterday. При проверке состояния системы, каждую ночь первым делом выясняются различия между этими двумя файлами. Информация о новых и изменившихся файлах с установленным битом setuid выдается в сводку. Если изменения обнаружились, то вы должны быть уверены, что «так и должно быть» (в противном случае есть вероятность что в вашей системе поселился троян – прим. переводчика).
Секция «uids of 0»
По-умолчанию только пользователи root и toor имеют UID=0. UID=0 значит, что пользователь имеет привилегии суперпользователя. Вы должны относиться с крайним подозрением к новым пользователям с UID=0 (вообще говоря я никогда не видел что бы в системе были другие пользователи с UID=0 кроме root и toor, так что если они у вас появились, это явный признак что в системе «кто-то побывал» – прим. переводчика).
Секция «Passwordless accounts» (Беспарольные пользователи)
Все мы знаем что пользователи без паролей это плохо. Эта часть сводки призвана показать вам таких пользователей для того что бы вы могли исправить ситуацию.
Секция «Packets denied by ipfw» (Пакеты отброшенные брандмауэром)
Помните, как мы рассматривали журналы программы ipfw в статье IPFW Logging (см. http://www.onlamp.com/pub/a/bsd/2001/06/21/FreeBSD_Basics.html)? (Для тех, кто не помнит, скажу, что статья посвящена журналлированию информации поступающей от брандмауэра – прим. переводчика). Эта часть сценария проверяет файл /var/log/ipfw.today и выдает вам статистику о том, сколько пакетов было отброшено при попытке пройти через ваш брандмауэр.
Секция «ipfw rules that have reached the log limit» (Правила брандмауэра по которым был превышен объем журналлирумой информации)
Здесь вам будут показаны те правила ipfw, при журналлировании совпадений с которыми был превышено заданное в правиле количество записей.
Секции «ipv6 packets denied by ip6fw» и «ipv6 rules which reached ip6fw's log limit»
Тоже что и две предыдущие, однако для IPv6.
Секция «Kernel log messages» (Сообщения ядра)
Эта часть сценария выдаст вам содержимое файла dmesg.today, в котором хранятся системные сообщения.
Секция «Login failures» (Неудачные попытки входа в систему)
Секция «tcp_wrapper warning messages» (Сообщения от tcp wrapper'а)
Если вы сконфигурировали tcp wrapper (tcp wrapper – это программа которая занимается проверкой пакетов по некоторым простым правилам – прим. переводчика), то все предупреждающие сообщения от них будут отображены в этой части сводки. Если вы не знаете как конфигурировать tcp wrapper, то прочитайте статью http://www.onlamp.com/pub/a/bsd/2001/02/07/FreeBSD_Basics.html (к сожалению tcp wrapper'ы крайне малоэффективны для защиты сети – прим. переводчика).
Теперь давайте оставим сценарий безопасности в покое и двинемся дальше. Следующий сценарий показывает какие почтовые соединения были отвергнуты: # 460.status-mail-rejects daily_status_mail_rejects_enable="YES" # Найти отвергнутые почтовые соединения daily_status_mail_rejects_logs=3 # Сколько журналов проверять


Сценарий, выдающий информацию о состоянии DNS сервера, можно безболезненно отключить, если вы не запускаете сервер имен на своей машине. Однако если ваша машина является DNS сервером, то этот сценарий может быть вам полезен, поскольку он выдает информацию о отвергнутых запросах на передачу информации о зонах. Запрос о передаче информации о зонах с машины не являющейся вашим вторичным сервером имен может означать, что кто-то пытается собирать информацию о строении вашей сети. Для дополнительного чтения по обеспечению безопасности серверов имен читайте 11 главу нового издания книги DNS and Bind (см. http://www.oreilly.com/catalog/dns4/chapter/ch11.html). # 470.status-named daily_status_named_enable="YES" daily_status_named_usedns="YES" # Сценарий может использовать DNS запросы
Следующий сценарий обеспечивает обработку почтовой очереди программы sendmail, как минимум раз в день. В выполнении этого сценария нет никакой необходимости, поскольку по-умолчанию sendmail раз в полчаса проверяет почтовую очередь на наличие недоставленных писем и пытается их отправить. # 500.queuerun daily_queuerun_enable="YES" # Запуск обработки почтовой очереди
Это все ежедневно выполняемые сценарии. Давайте рассмотрим по порядку сценарии, которые выполняются еженедельно. Как и в прошлый раз вы можете установить, кому отсылаются еженедельные отчеты. По-умолчанию их получает пользователь root. # These options are used by periodic(8) itself to # determine what to do with the output of the sub-programs # that are run, and where to send that output. $weekly_output # might be set to /var/log/weekly.log if you wish to log the # weekly output and have the files rotated by newsyslog(8) # # Эти параметры используются программой periodic # для того что бы определить что делать с выводом # выполняемых сценариев и куда их отсылать. Переменная # $weekly_output может равняться "/var/log/weekly.log", если вы # хотите журналлировать вывод выполняемых сценариев и иметь # штатную возможность их ротации при помощи newsyslog.


weekly_output="root" # Пользователь или файл weekly_show_success="YES" # Показывать вывод сценариев с кодом окончания 0 weekly_show_info="YES" # Показывать вывод сценариев с кодом окончания 1 weekly_show_badconfig="NO" # Показывать вывод сценариев с кодом окончания 2
Первый сценарий удаляет все файлы с маской kvm* в каталоге /var/db. Поскольку я не обнаружил в моей системе ни одного файла с таким именем, я запретил выполнение этого сценария. # 120.clean-kvmdb weekly_clean_kvmdb_enable="YES" # Еженедельная очистка kvmdb weekly_clean_kvmdb_days=7 # Если файл не использовали более ... дней weekly_clean_kvmdb_verbose="YES" # Показать список удаленных файлов
Следующие два сценария обновляют до адекватного состояния базы программ locate и whatis. Выполнение этого сценария является причиной «похрюкивания» жесткого диска около четырех утра каждую субботу. Так как я очень часто использую команды locate и apropos, я оставил эти сценарии включенными. # 310.locate weekly_locate_enable="YES" # Обновлять базу locate
# 320.whatis weekly_whatis_enable="YES" # Обновлять базу whatis
По-умолчанию следующий сценарий отключен, однако если у вас много свободного места на диске и вы много и часто читаете руководство man, то включение этого сценария несколько ускорит загрузку man-страниц. # 330.catman weekly_catman_enable="NO" # Преформатирование страниц man
Следующий сценарий так же отключен. Включите его, если хотите знать, какие файлы в вашей системе имеют неверных (несуществующих) владельцев. # 340.noid weekly_noid_enable="NO" # Искать ничейные файлы weekly_noid_dirs="/" # Искать отсюда
Последний сценарий из группы выполняемых каждую неделю, может вас заинтересовать, если вы имеете часто обновляемое дерево портов. Если вы включите этот сценарий, то он еженедельно будет сравнивать версии установленных у вас пакетов с программным обеспечением с содержимым файла /usr/ports/INDEX и предоставлять вам список пакетов, которые следует обновить. # 400.status-pkg weekly_status_pkg_enable="NO" # Искать устаревшие пакеты


В группе ежемесячно выполняемых сценариев по-умолчанию находится только один сценарий, однако как обычно вы можете настроить кому посылать результаты его выполнения: # These options are used by periodic(8) itself to # determine what to do with the output of the sub-programs # that are run, and where to send that output. $monthly_output # might be set to /var/log/monthly.log if you # wish to log the monthly output and have the files rotated # by newsyslog(8) # # Эти параметры используются программой periodic # для того что бы определить что делать с выводом # выполняемых сценариев и куда их отсылать. Переменная # $monthly_output может равняться "/var/log/monthly.log", если вы # хотите журналлировать вывод выполняемых сценариев и иметь # штатную возможность их ротации при помощи newsyslog. # monthly_output="root" # Пользователь или файл monthly_show_success="YES" # Показывать вывод сценариев с кодом окончания 0 monthly_show_info="YES" # Показывать вывод сценариев с кодом окончания 1 monthly_show_badconfig="NO" # Показывать вывод сценариев с кодом окончания 2
# 200.accounting monthly_accounting_enable="YES" # Статистика по пользователям системы
Этот сценарий показывает статистику собираемую командой ac. Если эта статистика вам неинтересна, выключите этот сценарий. Мы рассматривали команду ac в статье Monitoring UNIX logins (см. http://www.onlamp.com/pub/a/bsd/2001/02/14/FreeBSD_Basics.html).
Я надеюсь, что эта статья снимет завесу тайны со сценариев, которые идут вместе с вашей FreeBSD. До новых встреч и удачи в использовании BSD (в оригинале «happy BSDing» ;-) – прим. переводчика).

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


Автор: Станислав Лапшанский, slapsh@slapsh.pp.ru
Опубликовано: 17.9.2002

© 2002, Издательский дом «КОМПЬЮТЕРРА» | http://www.computerra.ru/
Журнал «СОФТЕРРА» | http://www.softerra.ru/
Этот материал Вы всегда сможете найти по его постоянному адресу:http://www.softerra.ru/freeos/20264/


Итак, подсчитаем, какое количество блоков содержится на цилиндре: 255 * 63 = 16,065
Если вы поместите по одному файлу в каждый блок, то вы сможете сохранить 16065 файлов. Если вы нарисуете для себя табличку и пронумеруете ее строки от 1 до 16065, то тогда вы просто сможете записывать имя каждого нового файла рядом с любым свободным номером, получается так, как будто вы записываете файл в блок с этим номером. Если вы удаляете файл, не забудьте стереть его имя из вашей таблицы. Когда вы захотите переместить какой-нибудь файл, найдите его в таблице, сотрите его, а затем запишите его имя рядом с новым номером блока. Вы должно быть быстро сообразите, что можно не обременять себя проблемами связанными с физическим перемещением файла из одного блока в другой, поскольку значительно проще изменить запись о файле в вашей таблице.
Если говорить в очень упрощенной форме, то все файловые системы отслеживают местонахождение ваших файлов именно так. Если эта файловая система UNIX, то в ней подобная структура данных, содержащая информацию о местонахождении файлов, называется индексной таблицей.
К сожалению простота приводит к крайне нерациональному использованию дискового пространства. Дело в том, что запись файлов в 512 байтные блоки приводит к отличным результатам, когда все файлы имеют размеры 512 байт. Однако жизненный опыт подсказывает нам, что файлы имеют самые разнообразные размеры, от нескольких байт до сотен мегабайт.
Поставьте себя на место файловой системы и подумайте, как вы запишете файл размером 10 байт. Если просто поместить этот файл в блок жесткого диска, то вы потеряете 412 байт полезного пространства. Сохранив большое количество маленьких файлов вы отправите в мусор целую кучу свободного места. Что произойдет, если вы запишете на диск 16065 файлов размером 1 байт? Вы используете все имеющиеся у вас блоки жесткого диска записав всего 16065 байт полезных данных. Несмотря несколькомегабайтный размер цилиндра на вашем жестком диске, вы не сможете найти ни одного свободного блока для ваших файлов. Это так называемая ситуация отсутствия индексных элементов (или отсутствия места в индексной таблице, что тоже самое). Очевидно, что возникновение такой ситуации в реальных условиях крайне нежелательно.
Продолжая думать как файловая система, можно придти к выводу, что имеет смысл не отдавать целый блок для одного маленького файла. Однако, сейчас самое время подумать каким образом вы организуете вашу таблицу в условиях того, что в одном блоке может быть более одного файла. Если вы просто начнете набивать в блок столько файлов, сколько можно разместить в 512 байтах, то каким образом вы будете отслеживать где заканчивается один файл и начинается другой? Что будет, если вы удалите файл размером 10 байт, а на его место запишите файл размером 8 байт и куда вы запишите информацию о оставшихся 2 байтах в случае если вы захотите записать туда два однобайтовых файла? Сразу видно, что подобная схема быстро теряет работоспособность.
Большинство файловых систем пользуются концепцией фрагментации. Фрагмент это логическая часть блока. Каждый фрагмент может быть адресован, т.е. о нем может быть сделана запись в индексной таблице. Например файловая система может разбивать каждый блок на четыре фрагмента. Таким образом количество доступных блоков умножается на четыре, одновременно уменьшая их размер в четыре раза. Например если изначально было доступно 16065 блоков, по 512 байт в каждом, то после такой фрагментации их количество возрастет до 64260, при размере блока 128 байт. Каждый фрагмент может интерпретироваться как блок для хранения данных и, таким образом, может содержать один файл, следовательно теперь в индексной таблице 64260 элементов и при этом нет необходимости беспокоиться о том, как отслеживать несколько файлов в одном логическом блоке.
Давайте посмотрим что у нас находится на другой чаше весов. Что произойдет, если вам понадобится записывать файлы размер которых больше чем размер физического или логического блока данных? Для сохранения на диске такого файла, вам, разумеется, придется задействовать более одного блока данных. Предположим, что вы хотите сохранить файл объемом 1000 байт. Для этого потребуются два физических блока по 512 байт, и соответственно в вашей индексной таблице будут две записи. Вам также придется подумать над тем, как вносить туда эти записи, поскольку теперь важен их порядок их внесения. В данной ситуации недостаточно просто знать, что файл находится, скажем, в блоках 3 и 4. Вам обязательно надо быть уверенными, что первые 512 байт файла находятся именно в блоке номер три, а остальное в четвертом блоке.
До этой точки мы рассуждали только о записи данных. Другим важным параметром файловой системы является производительность операций чтения. Конечной целью записи файлов на диск в первую очередь является обеспечение возможности чтения пользователем необходимого ему в данный момент файла. Для того что бы пользователь мог прочитать файл, файловая система должна узнать какой блок или блоки содержат указанный файл, а после этого скопировать их содержимое в оперативную память, для того что бы пользователь мог производить с ними необходимые ему операции.
Вот несколько вещей, которые могут увеличить быстродействие операций чтения. Во-первых это увеличение логического блока данных таким образом, что бы он включал в себя сразу несколько физических блоков. Когда пользователь захочет обратиться к файлу, который содержится в физическом блоке, в оперативную память загрузится целый логический блок. Таким образом экономится большое количество обращений к диску за отдельными физическими блоками. Если несколько блоков будет загружено в оперативную память, то весьма вероятно, что все данные, которые запрашивал пользователь будут переданы за один раз.
Давайте суммируем все, то, о чем мы говорили, обсуждая файловую систему:


Она представляет собой конечное количество блоков для хранения данных, которые связаны с адресуемым списком, который в файловых системах для операционных систем UNIX имеет название «индексная таблица». Если вы исчерпываете число элементов этой таблицы и тем самым, число доступных блоков данных, то вы не можете создавать новые файлы, несмотря на то, сколько свободного места на вашем диске. Если вы предполагаете сохранение большого количества маленьких файлов, вам необходимо фрагментировать блоки данных, для того что бы увеличить размер индексной таблицы. Однако если вы хотите увеличить производительность операции чтения, вам необходимо увеличить размер логического блока данных, для того что бы за одну операцию чтения в память считывалось больше данных.
Теперь давайте поглядим как все вышеизложенное применимо к FreeBSD. Когда вы пользуйтесь утилитой newfs, вы форматируете ваш слайс в файловую систему FFS (Berkeley Fast File System – быстрая файловая система Беркли). Давайте посмотрим кусочки из страницы руководства по утилите newfs, для того что бы узнать, какие установки «по умолчанию» предусмотрены для этой файловой системы: man 8 newfs
Нас интересуют только некоторые ключи. Начнем с ключа «-b»: -b размер_блока
Указывает размер блока в файловой системе в байтах. Он должен быть степенью числа 2. По умолчанию размер 8192 байта. Наименьший возможный размер 4096 байтов.
Обратите внимание, что это размер блока файловой системы. Физический блок всегда имеет размер 512 байтов. 8192 байта это на самом деле 16 физических блоков. Таким образом этот параметр задает размер логического блока, т.е. какой объем данных будет считан в оперативную память за один раз. Помните, что этот параметр создан для увеличения скорости чтения и является одной из причин, почему в названии файловой системы FreeBSD присутствует слово «быстрый».
Ключ «-f»: -f размер_фрагмента
Указывает размер фрагмента файловой системы в байтах. Значение должно лежать в пределах от размер_блока/8 до размер_блока и быть степенью числа 2. По умолчанию используется размер 1024 байта.
FFS использует фрагментирование, однако фрагментируется логический, а не физический блок. По умолчанию размер фрагмента равен двум физическим блокам.
Теперь рассмотрим ключ «-i»: -i количество_байт_на_элемент_индексной_таблицы


Указывает плотность индексных записей в файловой системе. По умолчанию создается по записи на каждые 4*размер_фрагмента байт пространства данных. Для того, что бы создать побольше элементов таблицы, надо задавать соответственно большой параметр и, наоборот. Для одного файла необходим один элемент таблицы, таким образом этот параметр определяет средний размер файлов в файловой системе.
По умолчанию одна запись в таблице создается на каждые 4048 байт дискового пространства и каждый файл имеет свой номер записи. Поскольку каждая запись соответствует одному файлу, то средний размер файла в файловой системе предполагается 4048 байт.
Вот еще два параметра, о которых следует здесь упомянуть, поскольку они влияют на производительность операция чтения/записи файловой системы FFS. Во-первых ключ -m: -m свободное_место %
Процент свободного места резервируемого на файловой системе, т.е. порог минимального свободного пространства. Значение по умолчанию, определяется константой MINFREE модуля . В настоящее время это значение равно 8%. Читайте man 8 tunefs для полного описания этого параметра.
Производительность любой файловой системы начинает «проседать», когда ей не хватает свободных блоков для хранения данных. Дело в том, что файловые системы «предпочитают» сохранять файлы одного каталога в смежных блоках (т.е. рядом друг с другом), а это становится затруднительным, когда количество свободных блоков уменьшается и системе приходится тратить время на их поиск. Создатели FFS указывают, что ее производительность резко падает, когда диск заполняется на более чем 90%. Когда файловая система достигает порога установленного для объема свободного места (по умолчанию 8%), для обычных пользователей происходит блокирование записи любых файлов. Пользователи будут получать сообщения об ошибке, и вероятно напомнят администратору о сложившейся ситуации. Суперпользователь сохраняет возможность записи информации на диск и использования оставшихся свободными блоков, однако в этот момент лучше заняться разработкой плана спасения файловой системы, а не дожидаться пока на ней кончится место.
Теперь давайте разберемся со вторым ключом, имеющим дело со свободным местом: -o способ_оптимизации


Варианты – «space» и «time». Файловая система может либо пытаться уменьшить время необходимое для выделения блоков данных, либо попробовать минимизировать фрагментацию дискового пространства. Если значение параметра minfree (см. выше), меньше 8%, то по умолчанию принимается оптимизация по фрагментации (space), а если больше или равно 8%, файловая система пытается оптимизировать время доступа (time). Для полного описания этого параметра почитайте man 8 tunefs.
Большинство файловых систем используют специальные алгоритмы для того что бы определить, какие файлы должны занимать какие блоки на диске. Этот ключ используется для определения какой стратегии оптимизации должен придерживаться алгоритм FFS для размещения файлов. В ситуации достатка свободного дискового пространства можно использовать оптимизацию по скорости (time). Однако когда объем свободного места на диске переходит предел определяемый ключом «-m», оптимизация фрагментации (space) становится более важной задачей, чем скорость.
Очевидно, что по умолчанию FFS использует оптимизацию по скорости, в тоже время создавая адекватное количество ячеек в индексной таблице, для записей о сохраняемых в системе файлах. Для большинства применений значения определенные по умолчанию будут наилучшими. В дальнейших статьях мы рассмотрим этот вопрос подробнее для того что бы научиться определять, являются ли в вашем случае значения по умолчанию оптимальными, а так же как выбирать оптимальные значения самостоятельно.
Сейчас вы вероятно уже узнали о файловых системах больше, чем допускали в начале статьи, поэтому давайте остановимся. В следующей части цикла мы рассмотрим группы цилиндров, суперблоки, а так же реальное содержимое записей индексной таблицы.
Телефон редакции: (095) 232-2261
E-mail редакции: inform@softerra.ru
По вопросам размещения рекламы обращаться к Алене Шагиной по телефону +7 (095) 232-2263 или электронной почте mailto:reclama@computerra.ru

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


Автор: Станислав Лапшанский, slapsh@slapsh.pp.ru
Опубликовано: 4.10.2002

© 2002, Издательский дом «КОМПЬЮТЕРРА» | http://www.computerra.ru/
Журнал «СОФТЕРРА» | http://www.softerra.ru/
Этот материал Вы всегда сможете найти по его постоянному адресу: http://www.softerra.ru/freeos/20728/

Статья является переводом текста Dru Lavigne доступного по адресу: http://www.onlamp.com/pub/a/bsd/2001/03/07/FreeBSD_Basics.html.

В первых двух частях мы рассматривали структуру таблицы разделов и файловой системы. Мы узнали, что компьютер находит слайс FreeBSD при помощи информации содержащейся в BIOS'овской таблице разделов. Слайс FreeBSD в свою очередь содержит UNIX'овую таблицу разделов, в которой записана «разметка диска». Она описывает расположение файловых систем на слайсе. В этой статье мы, наконец, сможем рассмотреть элементы индексной таблицы (inodes), что они из себя представляют и какую информацию о них может предоставить FreeBSD.

Давайте рассмотрим вывод программы disklabel, запущенной на одной из моих машин. Я немного обрезал вывод так, что бы была видна только информация о разделах: disklabel ad0 <вырезано>

8 partitions: # size offset fstype [fsize bsize bps/cpg] a: 102400 0 4.2BSD 0 0 0 # (Cyl. 0 - 6*) b: 270976 102400 swap # (Cyl. 6*- 23*) c: 6538455 0 unused 0 0 # (Cyl. 0 - 406) e: 40960 373376 4.2BSD 0 0 0 # (Cyl. 23*- 25*) f: 6124119 414336 4.2BSD 0 0 0 # (Cyl. 25*- 406*)

Обратите внимание что тип файловой системы в которой отформатированы разделы «a», «e» и «f» – «4.2BSD», этой аббревиатурой обозначается Berkeley fast file system (FFS – быстрая файловая система Беркли). Следует обратить внимание на то, что каждый раздел определен интервалом принадлежащих ему цилиндров. Видно, что раздел «a» использует цилиндры 0-6, раздел «e» размещается на цилиндрах 23-25, и, наконец раздел «f» занимает 25-406 цилиндры. Символом «*» обозначаются разделы, начало или конец которых не выровнены по границе цилиндра.

Что же такое цилиндр? Если вы не слишком хорошо знаете как работает жесткий диск, то вас может заинтересовать эта статья (и имеющиеся в ней картинки).

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

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

Единственная индексная таблица, содержащаяся на отформатированном разделе с файловой системой, хранит сведения о всех данных размещенных на этой группе цилиндров. Итак:


total 6429 -r--r--r-- 1 root wheel 4735 Nov 20 07:03 COPYRIGHT drwxr-xr-x 2 root wheel 1024 Dec 21 19:09 bin drwxr-xr-x 3 root wheel 512 Dec 21 12:27 boot drwxr-xr-x 2 root wheel 512 Dec 21 10:19 cdrom lrwxr-xr-x 1 root wheel 11 Dec 21 12:27 compat -> /usr/compat drwxr-xr-x 3 root wheel 13824 Feb 25 09:15 dev drwxr-xr-x 15 root wheel 2048 Dec 22 18:20 etc drwxr-xr-x 1 root wheel 7168 Jan 1 1980 floppy lrwxrwxrwx 1 root wheel 9 Dec 21 12:29 home -> /usr/home -r-xr-xr-x 1 root wheel 3258128 Nov 20 08:02 kernel -r-xr-xr-x 1 root wheel 3258128 Nov 20 08:02 kernel.GENERIC drwxr-xr-x 2 root wheel 512 Nov 20 06:56 mnt drwxr-xr-x 2 root wheel 2560 Dec 21 10:33 modules dr-xr-xr-x 1 root wheel 512 Feb 25 10:32 proc drwxr-xr-x 2 root wheel 512 Dec 23 08:30 root drwxr-xr-x 2 root wheel 2048 Dec 21 19:09 sbin drwxr-xr-x 4 root wheel 1024 Dec 21 10:19 stand lrwxrwxrwx 1 root wheel 11 Dec 21 12:22 sys -> usr/src/sys drwxrwxrwt 2 root wheel 512 Feb 25 09:15 tmp drwxr-xr-x 19 root wheel 512 Feb 11 19:04 usr drwxr-xr-x 18 root wheel 512 Nov 20 08:13 var
Мы получили семь столбцов, показывающих по каждому файлу следующую информацию:
права доступа к файлу количество ссылок на файл владелец группа владельцев размер в байтах время последнего изменения файла имя файла
Первые шесть столбцов отражают содержимое метаданных в соответствующих элементах индексной таблицы.
Если необходимо, вы можете посмотреть номер элемента индексной таблицы для каждого файла, добавив в команду ls ключ «i»: ls -li /
total 6429 441 -r--r--r-- 1 root wheel 4735 Nov 20 07:03 COPYRIGHT 46 drwxr-xr-x 2 root wheel 1024 Dec 21 19:09 bin 6323 drwxr-xr-x 3 root wheel 512 Dec 21 12:27 boot 44 drwxr-xr-x 2 root wheel 512 Dec 21 10:19 cdrom 444 lrwxr-xr-x 1 root wheel 11 Dec 21 12:27 compat -> /usr/compat 6272 drwxr-xr-x 3 root wheel 13824 Feb 25 09:15 dev 36 drwxr-xr-x 15 root wheel 2048 Dec 22 18:20 etc 236 drwxr-xr-x 1 root wheel 7168 Jan 1 1980 floppy 451 lrwxrwxrwx 1 root wheel 9 Dec 21 12:29 home -> /usr/home 443 -r-xr-xr-x 1 root wheel 3258128 Nov 20 08:02 kernel 442 -r-xr-xr-x 1 root wheel 3258128 Nov 20 08:02 kernel.GENERIC 241 drwxr-xr-x 2 root wheel 512 Nov 20 06:56 mnt 242 drwxr-xr-x 2 root wheel 2560 Dec 21 10:33 modules 2 dr-xr-xr-x 1 root wheel 512 Feb 25 10:32 proc 358 drwxr-xr-x 2 root wheel 512 Dec 23 08:30 root 363 drwxr-xr-x 2 root wheel 2048 Dec 21 19:09 sbin 5 drwxr-xr-x 4 root wheel 1024 Dec 21 10:19 stand 440 lrwxrwxrwx 1 root wheel 11 Dec 21 12:22 sys -> usr/src/sys 2 drwxrwxrwt 2 root wheel 512 Feb 25 09:15 tmp 2 drwxr-xr-x 19 root wheel 512 Feb 11 19:04 usr 2 drwxr-xr-x 18 root wheel 512 Nov 20 08:13 var


Обратите внимание – в листинге появился новый столбец. Число в первом столбце как раз и является номером элемента в индексной таблице для этого файла. Элемент номер 2 встречается несколько раз: он присутствует в строках proc, tmp, usr и var. Элемент с номером 2 всегда является первым в файловой системе и отражает корневую (стартовую) точку файловой системы. Список смонтированных файловых систем мы можем посмотреть при помощи команды df: df
Filesystem 1K-blocks Used Avail Capacity Mounted on /dev/ad0s2a 49583 27729 17888 61% / /dev/ad0s2f 2967289 737169 1992737 27% /usr /dev/ad0s2e 19815 3647 14583 20% /var procfs 4 4 0 100% /proc mfs:27 131231 1 120732 0% /tmp
Мы видим ожидаемую картину – usr, var, proc и tmp являются смонтированными файловыми системами. Не забывайте, что каждая файловая система имеет свою индексную таблицу, поэтому элемент номер 2 для системы usr является записью совсем другой таблицы, чем например элемент номер 2 в системе var. Их сходство заканчивается только номером, а так же тем, что оба они являются корневыми элементами для соответствующих файловых систем.
В утилите df (disk free) имеется ключ, который позволяет вам узнать, сколько всего элементов в индексной таблице конкретной файловой системы. Давайте еще раз выполним команду df, теперь с ключом «-i»: df -i
Filesystem 1K-blocks Used Avail Capacity iused ifree %iused Mounted on /dev/ad0s2a 49583 27729 17888 61% 1074 11468 9% / /dev/ad0s2f 2967289 739993 1989913 27% 90852 655130 12% /usr /dev/ad0s2e 19815 3645 14585 20% 391 4663 8% /var procfs 4 4 0 100% 25 507 5% /proc mfs:27 131231 1 120732 0% 1 33277 0% /tmp
Неплохой идеей будет запускать эту команду на регулярной основе, для того что бы вовремя предупредить ситуацию когда на файловой системе не окажется свободных блоков или элементов в индексной таблице. Если вы не будете создавать очень большое количество мелких файлов, то вероятнее всего свободные блоки на диске у вас кончатся гораздо раньше, чем свободные элементы индексной таблицы. Умение создавать достаточное количество элементов индексной таблицы при определенном количестве блоков на диске, приходит с опытом, поскольку правильное соотношение зависит от того, как вы собираетесь использовать свою FreeBSD, а так же какие типы файлов создаются вашими пользователями. Если вы будете регулярно запускать вышеописанную команду, то вы сможете получить ценную информацию о том, какое соотношение необходимо именно вам для вашей системы.
Напоследок я упомяну о mtime, atime, and ctime, параметрах в которых содержится различная информация связанная со временем.
Параметр «mtime» отражает время последнего изменения файла. Оно показывает, когда в последний раз изменялось содержимое файла. Например, если вы откроете файл в вашем текстовом редакторе и добавите или удалите несколько строк, тем самым вы измените содержимое файла. Параметр «mtime» поменяется, в момент сохранения файла на диск. Запомните, что команда «ls -l» показывает именно «mtime».
Параметр «atime» показывает когда к файлу последний раз обращались. Например, если вы просматриваете файл при помощи команды more, вы осуществляете доступ к файлу, тем самым изменяя параметр «atime». Для того что бы посмотреть параметр «mtime», вместо стандартного «atime», используйте команду ls с ключами «-lut»: ls -lut /


total 6429 dr-xr-xr-x 1 root wheel 512 Feb 26 14:06 proc drwxr-xr-x 2 root wheel 1024 Feb 26 14:03 bin drwxr-xr-x 2 root wheel 2048 Feb 26 14:03 sbin drwxr-xr-x 3 root wheel 13824 Feb 26 13:54 dev drwxrwxrwt 2 root wheel 512 Feb 26 13:54 tmp drwxr-xr-x 19 root wheel 512 Feb 25 14:02 usr drwxr-xr-x 18 root wheel 512 Feb 20 02:01 var drwxr-xr-x 2 root wheel 512 Feb 20 01:59 root drwxr-xr-x 4 root wheel 1024 Feb 20 01:59 stand drwxr-xr-x 15 root wheel 2048 Feb 20 01:59 etc drwxr-xr-x 2 root wheel 512 Feb 20 01:59 cdrom drwxr-xr-x 3 root wheel 512 Feb 20 01:59 boot drwxr-xr-x 2 root wheel 512 Feb 20 01:59 mnt drwxr-xr-x 2 root wheel 2560 Feb 20 01:59 modules lrwxrwxrwx 1 root wheel 9 Dec 21 12:29 home -> /usr/home lrwxr-xr-x 1 root wheel 11 Dec 21 12:27 compat -> /usr/compat lrwxrwxrwx 1 root wheel 11 Dec 21 12:22 sys -> usr/src/sys -r-xr-xr-x 1 root wheel 3258128 Nov 20 08:02 kernel -r-xr-xr-x 1 root wheel 3258128 Nov 20 08:02 kernel.GENERIC -r--r--r-- 1 root wheel 4735 Nov 20 07:03 COPYRIGHT drwxr-xr-x 1 root wheel 7168 Jan 1 1980 floppy
Параметр «ctime» обновляется каждый раз, когда меняются данные в самом элементе индексной таблицы. Например, если вы изменяете права доступа, владельца или группу владельца, то этим самым вы изменяете содержимое записи в индексной таблице, а также параметр «ctime». Значение «ctime» можно узнать при помощи ключей «-lc» команды ls: ls -lc /
total 6429 -r--r--r-- 1 root wheel 4735 Dec 21 12:22 COPYRIGHT drwxr-xr-x 2 root wheel 1024 Dec 21 19:09 bin drwxr-xr-x 3 root wheel 512 Dec 21 12:27 boot drwxr-xr-x 2 root wheel 512 Dec 21 10:19 cdrom lrwxr-xr-x 1 root wheel 11 Dec 21 12:27 compat -> /usr/compat drwxr-xr-x 3 root wheel 13824 Feb 26 13:54 dev drwxr-xr-x 15 root wheel 2048 Dec 22 18:20 etc drwxr-xr-x 1 root wheel 7168 Jan 1 1980 floppy lrwxrwxrwx 1 root wheel 9 Dec 21 12:29 home -> /usr/home -r-xr-xr-x 1 root wheel 3258128 Dec 21 12:27 kernel -r-xr-xr-x 1 root wheel 3258128 Feb 11 19:04 kernel.GENERIC drwxr-xr-x 2 root wheel 512 Dec 21 10:27 mnt drwxr-xr-x 2 root wheel 2560 Dec 21 10:33 modules dr-xr-xr-x 1 root wheel 512 Feb 26 14:07 proc drwxr-xr-x 2 root wheel 512 Dec 23 08:30 root drwxr-xr-x 2 root wheel 2048 Dec 21 19:09 sbin drwxr-xr-x 4 root wheel 1024 Dec 21 10:19 stand lrwxrwxrwx 1 root wheel 11 Dec 21 12:22 sys -> usr/src/sys drwxrwxrwt 2 root wheel 512 Feb 26 13:54 tmp drwxr-xr-x 19 root wheel 512 Feb 11 19:04 usr drwxr-xr-x 18 root wheel 512 Dec 21 19:15 var
Если вы внимательно посмотрите на эти три листинга команды ls, то, несомненно увидите что указанное время на них различно, поскольку они отражают значение трех различных параметров.
Телефон редакции: (095) 232-2261
E-mail редакции: inform@softerra.ru
По вопросам размещения рекламы обращаться к Алене Шагиной по телефону +7 (095) 232-2263 или электронной почте mailto:reclama@computerra.ru

Введение в LVM


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




Введение в распределенные файловые системы


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

Распределенные файловые системы OpenAFS и Coda имеют собственные механизмы управления разделами, которые упрощают возможности хранения общедоступной информации. Они так же поддерживают дублирование – способность делать копии разделов и сохранять их на других файловых серверах. Если один файловый сервер становится недоступным, то все равно к данным, хранящимся на его разделах, можно получить доступ с помощью имеющихся резервных копий этих разделов.

Самое главное различие между подходом Windows / MacOS (совместное использование каталогов и дисков) и подходом Linux, MacOS X и других Unix-подобных многопользовательских операционных систем – в том, как эти операционные системы используют и организовывают разделы. Windows / MacOS экспортируют разделы как отдельные каталоги или диски, и удаленные системы, которые хотят обратиться к общедоступным устройствам, должны обязательно подключить их к себе.

Когда самый высокий уровень организации в файловой системе – это раздел диска (например, как в файловых системах Windows), рабочие станции клиентов для получения доступа к этим данным должны обязательно подключиться к разделу и назначить ему отдельную букву в своей локальной раскладке (например, диск E, F, G, и т.д). Буквы могут быть назначены сетевым разделам в пользовательских и групповых профилях Windows (для стандартизации). Но, к сожалению, не на всех компьютерах расположение букв может быть одинаковым. Например, на компьютере с большим количеством жестких дисков и разделов нужные буквы могут быть заняты, и поэтому придется давать сетевым разделам другие обозначения.

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


Современные распределенные файловые системы типа OpenAFS или Coda включают в себя специальные сервисы для управления разделами. Это позволяет вам смонтировать разделы различных файловых серверов в центральную иерархию директорий, поддерживаемую файловыми системами. OpenAFS использует центральный каталог, называемый «/afs», а Coda использует «/coda». Эти иерархии директорий доступны всем клиентам распределенной файловой системы, и выглядят одинаково на любой из клиентских рабочих станций. Это дает возможность пользователям работать со своими файлами одинаково на любом компьютере. Если ваш настольный компьютер не работает, вы совершенно спокойно можете использовать любой другой – все ваши файлы находятся в безопасности на сервере.
Распределенные файловые системы, предоставляющие одни и те же данные многим различным компьютерным системам, дают пользователям возможность использовать любую операционную систему, лучше всего подходящую для их задач. Пользователи Macintosh могут пользоваться всеми преимуществами графических инструментальных средств, доступных в Mac OS, и одновременно хранить свои данные на централизованных файловых серверах. Пользователи Windows так же могут иметь доступ к устойчивой глобальной файловой системе. Распределенные файловые системы особенно привлекательны при попытке координации работы между группами, расположенными в различных городах, государствах, или даже в разных странах. Преимущество – общие данные всегда доступны по сети, независимо от вашего местонахождения.

Выбор загрузчика


Прежде чем приступать к установке второй операционной системы, надо решить, с помощью каких средств будет организован выбор ОС и ее загрузка. Вообще говоря, существуют отдельные программы, предназначенные только для организации загрузки, например, программа System Commander или многовариантный загрузчик из пакета PartitionMagic компании Power Quest. Для Linux тоже разработаны несколько загрузчиков, скажем, GRUB или ASP Loader. Несколько загрузчиков можно найти в каталоге public/ftp/ pub/Linux/system/boot/ loaders на сайте ftp://metalab.unc.edu. Однако искать отдельную программу нет необходимости, поскольку в комплект любого дистрибутива Linux входит загрузчик LILO, способный обеспечить выбор ОС. Если же на компьютере установлена Windows NT или Windows 2000, то эту функцию может взять на себя NT Loader. По сравнению с LILO загрузчик NT Loader имеет, по крайней мере, два преимущества: сохраняется вся старая конфигурация, а кроме того, можно установить Linux на диск, который не может быть загрузочным для этой ОС, например, на второй диск на втором контроллере.

Если на компьютере была установлена только Windows 95/98 и не было Windows NT или Windows 2000, значит OS Loader не установлен. Единственной известной мне альтернативой LILO является использование загрузчика Loadlin.exe, также поставляемого вместе с дистрибутивом Linux. Почему-то во многих HOWTO утверждается, что использовать LILO не следует, если активный раздел форматирован в системе FAT32, хотя толкового объяснения этому я не нашел. Моя собственная попытка загружать Linux через NT Loader, установленный в разделе FAT32, окончилась неудачей, а вот loadlin.exe с задачей справилась с успехом.

Таким образом, организовать многовариантную загрузку можно с помощью уже имеющихся стандартных средств. Ими и ограничимся. Рассмотрим три варианта организации загрузки: с помощью LILO, с помощью NT Loader и с помощью loadlin.exe.



Вычисление "уровня" (shift level) Типы клавиш


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

Для того чтобы обеспечить такую гибкость, в XKB существут понятие "тип клавиши".

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

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

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



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


Полезная утилита для внесения изменений в любые параметры ядра находится в директории /proc/sys. Она позволяет вам вносить изменения в работающее ядро (подобно echo и метод перенаправления, описанный выше), и имеет файл конфигурации, который выполняется при загрузке. Это позволяет чтобы внесенные изменения оставались в ядре после перезагрузки системы. Утилита называется sysctl и она полностью документирована в man sysctl(8).

Файл конфигурации для sysctl - /etc/sysctl.conf, который может быть редактирован, синтаксис файла описан в man sysctl.conf(8). Sysctl использует файлы в /proc/sys как индивидуальные переменные, которые могут быть изменены. Например, файл в /proc/sys, который представляет максимальное количество заголовков файлов в системе, /proc/sys/fs/file-max, представлен как fs.file-max. Этот пример требует некоторых дополнительных пояснений в записи sysctl. Так как sysctl может только изменять переменные в директории /proc/sys, то часть имени переменной обозначающая директорию отбрасывается. Другое изменение касается слэшей, которые заменяются на точки. Вот два простых правила для преобразования файлов в /proc/sys и переменных в sysctl:

Отбросьте /proc/sys от начала.

Замените слэши на точки в имени файла.

Эти два правила позволят вам преобразовать любой файл в /proc/sys в любое имя переменной в sysctl. Обычное преобразование имени файла в переменную:

/proc/sys/dir/file --> dir.file

dir1.dir2.file --> /proc/sys/dir1/dir2/file

Вы можете увидеть все переменные, доступные для изменения, используя команду sysctl -a. Переменные могут также быть изменены с помощью sysctl, которая выполняет ту же работу что и echo. Эта запись объясняет это:

sysctl -w dir.file="value"

Используя пример с file-max, мы можем изменить это значение на 16384, используя один из двух методов:

sysctl -w fs.file-max="16384"

или

echo "16384" > /proc/sys/fs/file-max

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

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



Высокоинтеллектуальный секьюрити


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

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

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

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

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



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


Многие IT-специалисты, ответственные за вычислительные системы предприятий, уже используют сетевые файловые системы (NFS), или адаптеры файловых систем (Samba, Netatalk, или Novell) для объединения своих сетей. Более новые и более функциональные распределенные файловые системы – такие, как OpenAFS, Coda, InterMezzo и WebDAV – могут стать альтернативой, потому что они имеют более высокое быстродействие, улучшенную защиту, и дополнительные возможности управления разделами и создания резервных копий.
Как мы увидим в дальнейших статьях из этой серии, современные распределенные файловые системы могут быть легко интегрированы в существующую сеть. Распределенные файловые системы могут обеспечить дополнительную гибкость сети, ускорить и упростить процесс совместной работы над файлами, уменьшить затраты и упростить жизнь администраторам. Современные распределенные файловые системы дают новую жизнь слогану Sun Microsystems «The Network is the computer», расширяя файловую систему по компьютерной сети.
Телефон редакции: (095) 232-2261
E-mail редакции: inform@softerra.ru
По вопросам размещения рекламы обращаться к Алене Шагиной по телефону +7 (095) 232-2263 или электронной почте mailto:reclama@computerra.ru

На сегодняшний день существует по


На сегодняшний день существует по крайней мере 2 работоспособных и надежных журналирующих файловых системы под Linux (то есть XFS и reiserFS), которые можно не боясь использовать.
ext3 все еще находится в стадии альфа-тестирования и потенциально подвержена сбоям. У меня возникло несколько проблем с ext3, когда я тестировал ее с bonnie++: система сообщала об VM-ошибках и килляла шелл, которым я пользовался.
На основании результатов тестирования, я советую в будущем установить файловую систему reiserFS (лично я это обязательно сделаю).


Безусловно, это далеко не полный список необходимых мероприятий и возможностей сисадмина по администрированию сети. Давайте, господа сисадмины, делиться практическим опытом - даже незначительный, казалось бы, совет или подсказка может существенно облегчить работу начинающему и неопытному сисадмину.
Как показывает опыт, юзеров необходимо максимально ограничивать в правах на пользование рабочей станцией. Иначе можно разбудить нездоровое любопытство и интерес к экспериментам, которые для сисадмина обязательно закончатся авралом и переустановкой слетевшей "винды".
P.S.: немного возвращусь к содержанию предыдущей статьи, параграф "Парадоксы профессии". Мне стал известен еще один способ (помимо контролируемого саботажа), как выйти из незавидного положения, когда руководство считает тебя бездельником. Его мне поведала приехавшая в командировку из Москвы сестра, которая работает программистом в Центробанке. Этим способом с успехом пользуются центробанковские сисадмины. Заключается способ в том, что любое обращение к сисадмину за помощью идет через написание служебной записки: застряла бумага в принтере, залипла клавиша в клавиатуре, засорилась мышка - все через "служебку"! К концу месяца скапливается солидная пачка, которая может быть представлена руководству, как доказательство достаточной загруженности работой.
Евгений БОБРУЙКО,
es2001@ukr.net
Подписаться на дискуссионный лист
Послать письмо на дискуссионный лист
Задать вопрос
Прислать свою статью для публикации в журнале
Просто поговорить
Получить именной бланк подписки на "бумажную" версию
Получить каталог всех статей
До следующего выпуска!
Елена Полонская, редактор "К+П"
www.cp.comizdat.com

WhichModState и whichGroupState


Поскольку набор модификаторов и номер группы "размазаны" по трем переменным (base, locked, latched), эти инструкции уточняют - в каких переменных надо отслеживать модификаторы и номер группы, соответственно.

Справа от присваивания может быть слово

base - отслеживать изменение в переменных base (base Group

или base Modifiers, соответственно) locked - то же самое, в переменных locked

latched - то же самое, в переменных latched

effective - отслеживать изменения "эффективных" номера групп или модификаторов (то есть в суммарных значениях всех трех переменных) any - отслеживать изменения во всех трех переменных (то есть, индикатор будет включаться/выключаться, если указанное значение модификатора или группы будет меняться в любой из трех переменных); надо заметить, что для модификаторов (whichModState) это значение эквивалентно effective, поскольку "включение" модификатора в любой из трех переменных, неизбежно "включит" его и в "эффективном" наборе модификаторов; none - "ни в каком". Такая инструкция имеет смысл, если надо отменить "привязку" данного индикатора к номеру группы или модификатору, объявленную в другом файле.

По умолчанию (то есть, если which...State явно не указаны) подразумевается effective.



Wine


Самый известный эмулятор Windows. Wine предоставляет полную замену для Win32 API. В идеале, когда развитие этого проекта завершится, он сможет полностью заменить Windows. Если вам нужно эмулировать Windows без затрат системных ресурсов на создание виртуальной машины, то Wine – для вас.


Настройка


При инсталляции программы был создан файл конфигурации wine, а именно
/<Имя пользователя который производил установку>/.wine/wine.conf

Одной из важнейших секций файла конфигурации является та, в которой указаны корни наших виртуальных дисков. То есть в Windows мы привыкли открывать Мой компьютер, а затем делать двойной щелчок на диске, который там был назван буквой латинского алфавита. В Linux же немного по-другому. Структура носителей на жестком диске нам представляется как разветвленная сеть, имеющая свое начало в корневом разделе, к которому прикреплены каталоги, некоторые из которых у нас могут являться виртуальными разделами жесткого диска, или, если быть точнее, разделами диска, к которым мы привыкли используя Windows.
Предположим, что наш жесткий диск был разбит на 3 раздела. Два имели fat32-систему (диск C и D) и один external2-раздел.

После монтирования этих систем, к примеру:
mount —t vfat /dev/hda1 /mnt/c

mount —t vfat /dev/hda6 /mnt/d

я получил доступ к разделам fat32.

Для того, чтобы не было проблем с приложениями Windows, и они считали, что диск разбит на разделы C и D, мы и пропишем в файл конфигурации:
[Drive C]
"Path" = "/mnt/c"
"Type" = "hd"
"Filesystem" = "win95"

[Drive D]
"Path" = "/mnt/f"
"Type" = "hd"
"Filesystem" = "win95"

Теперь у нас есть разделы, к которым смогут обращаться приложения Windows. Кто знает, может вам захочется использовать файловый менеджер. Нужно дать возможность wine работать с cd-rom’ом. Для этого прописываем в файл конфигурации такие строки:
[Drive G]
"Path" = "/mnt/cdrom"
"Type" = "cdrom"
"Device" = "/dev/cdrom"
"Filesystem" = "win95"

Но и не исключена вероятность того, что вы захотите иметь доступ к вашему корневому разделу Linux, получив при этом доступ ко всей хранящейся там информации.
[Drive H]
"Path" = "/tmp"
"Type" = "hd"
"Filesystem" = "win95"
Теперь приступим непосредственно к настройке самой виртуальной Windows операционной системы.

[wine]
"windows" = "C:\\windows"
"system" = "C:\\windows\\SYSTEM"
"path" = "C:\\WINDOWS;C:\\WINDOWS\\COMMAND;C:\\PROGRA~1\\BORLAND\\DELPHI4\\BIN;C:\\PROGRA~1\\BORLAND\\VBROKER\\BIN;C:\\PROGRA~1\\BORLAND\\VBROKER\\JRE\\BIN"
"temp" = "C:\\WINDOWS\\TEMP"
В этой секции мы указали wine-пути ко всем приложениям и библиотекам, которые должны вызываться без входа в их директории. К примеру, у меня на разделе /dev/hda1, примонтированному к директории /mnt/c, находились программы, для которых должна была производиться автоматическая подгрузка библиотек, причем благодаря такой установке в файле конфигурации их поиск производился в папках, заданных по умолчанию директивой path.

[DllOverrides]
"commdlg" = "builtin, native"
"comdlg32" = "builtin, native"
Благодаря этой секции мы можем задать очередность обращения к библиотекам. Если у нас есть более новые версии или используются библиотеки уже установленного Windows, то есть возможность использовать именно их, а не предлагаемые wine. Но желательно оставлять эту секцию неизменной во избежание проблем с запуском эмулятора и системных сбоев.
Далее идет настройка эмуляции графического интерфейса wine.

[x11drv]
"PrivateColorMap" = "N"
Эта опция включает использование карты цветов, созданной самой wine.
"PerfectGraphics" = "Y"
"ScreenDepth" = "24"
Здесь мы устанавливаем глубину цвета, поддерживаемую вашим монитором и видеокартой. Лучше всего выбирать ту, которая стоит в настройках иксов.
"Managed" = "Y"
Данная функция предоставляет вашему оконному менеджеру управлять окнами, созданными wine.
"Desktop" = "800x600"
Здесь устанавливаем разрешение вашего виртуального десктопа.
Далее идет управление видеопамятью.
"DXGrab" = "Y"
Эта опция позволяет захват событий, связанных с изменением состояния мыши средствами встроенных библиотек DirectX.
"DesktopDoubleBuffered" = "Y"
Лучше всего включить поддержку двойной буферизации экрана. Вдруг нам захочется попробовать запустить приложения, использующие библиотеки openGL.
Оставим остальные настройки по умолчанию.

[Fonts]
Переходим к секции шрифтов. В этой секции мы можем добавить шрифты, к которым привыкли в Windows. Все они прекрасно портируются в wine путем добавления нескольких строк. Если вы захотите добавить шрифт, то можете для начала воспользоваться библиотекой шрифтов, предоставленной в дистрибутиве эмулятора. Если же вам их число покажется маленьким, то, пожалуйста, добавляйте свои! Но не забывайте, что проблем у вас с их установкой не будет при перестановке кодировки по умолчанию на win1251. Но для этого вам придется почитать документацию по грамотной кириллизации Linux.

[serialports]
"Com1" = "/dev/ttyS0"
"Com2" = "/dev/ttyS1"
"Com3" = "/dev/ttyS2"
"Com4" = "/dev/ttyS3"
Здесь, как вы видите, настройки серийных портов. Это для того, чтобы иметь доступ к устройствам, подключенным к ним непосредственно из wine.

[parallelports]
"Lpt1" = "/dev/lp0"
То же для параллельных портов, для работы с принтерами, ключами к программам автоматизированного проектирования, наконец.

[ppdev]
А это секция настройки устройств, которые подключены к компьютеру иными способами, не предусмотренными в wine и для установки обращений к портам ввода-вывода, позволяющих контактирование с устройством.

[spooler]
"FILE:" = "tmp.ps"
"LPT1:" = "|lpr"
Секция, где заданы настройки создания временных файлов, промежуточных измерений, вычислений.

[registry]
В этой секции заданы настройки работы с реестром. Заданы имена файлов, которые представляют реестр, заданы настройки автосохранения при длительном изменении реестра средствами его конфигурирования.

[Tweak.Layout]
"WineLook" = "Win95"
Здесь задаются настройки внешнего вида рабочего стола wine. Предположим, что нас замучила ностальгия по временам windows 3.1. Не проблема! Несколько метких нажатий на клавиши, и вот перед нами графический интерфейс старых добрых окошек.

[WinMM]
"Drivers" = "wineoss.drv"
"WaveMapper" = "msacm.drv"
"MidiMapper" = "midimap.drv"
Последняя и самая интересная секция: указание имен драйверов для переназначения ввода-вывода, для работы миди-устройств, для работы программных синтезаторов таблиц и вообще для всего, что придумаете, хоть для устройств дистанционного управления вашим любимым виндовым winamp’ом. Хотя Linux’овые плейеры круче:).
Wine мы установили, настроили — давайте запускать программы!



Запуск приложений


И вот, наконец, тот момент, которого мы так долго ждали, — запуск приложений.
Когда мы запускаем приложение через wine, мы можем сделать это несколькими способами.
Давайте будем запускать калькулятор.
wine calc

wine calc.exe

Это первый способ запуска приложений. Но не стоит забывать, что все приложения мы так не запустим, так как эмулятор их не сможет найти, а для этой программы мы при настройке установили директорию, в которой она может находиться, c:\\windows\\
Второй способ запуска приложений — это запуск с указанием полного пути к ним в двух форматах: в формате Windows с учетом настроек в файле конфигурации и в формате Unix-систем, то есть сразу, без обходных путей, без использования средств поиска, грубой консольной силой.
wine c:\\windows\\calc.exe; (использование windows-имени)
wine /usr/windows/calc.exe; (использование unix-имени)
Необходимо отметить, что для поддержки параметров исполняемых файлов нужно обязательно использовать полное имя файла, то есть путь и сам файл.

Заключение


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

Не стоит забывать, что, когда вы используете wine, вы подвержены вирусам, написанным для Windows. И на фоне этого может разрушиться неприступность вашей операционной системы. Так что старайтесь не давать возможности Windows-приложениям соприкасаться с важной для вас информацией или вмешиваться в работу Linux’а. Каждое запущенное приложение в противном случае будет нести потенциальную опасность и будет выбивать кирпичики из вашей крепости, несущей гордое название Linux.

Интернет:
Большое количество информации будет доступно вам с ресурсов WineHQ, расположенных на http://www.winehq.com/. Там вы найдете разнообразные путеводители по миру wine, сообщения об ошибках, способы их исправления и многое другое. Этот сайт должен стать опорным пунктом, начальной точкой, от которой начнется ваше углубленное знакомство с wine.
ЧАВО:
Ответы на Часто Задаваемые Вопросы вы сможете найти на http://www.winehq.com/FAQ. Также вам доступны группы новостей, из которых вы почерпнете новую информацию об этом эмуляторе, news://comp.emulators.ms-windows.wine. 
IRC:
Также помощь в работе с программой вам будет оказана на канале #WineHQ сервера irc.openprojects.net.
 
Вадим Логинов, striker2002@tut.by 

© компьютерная газета


Wine_ix


 Про Wine (и про WineX).

В этом выпуске рассылки помещены 4 статьи:

1) Установка и настройка эмулятора Windows - wine. Очень подробная статья.
2) WineX. Установка и русификация WineX + запуск MaxPayne, Counter-Strike / Half-Life и Warcraft3.
3) Wine. Получение и установка Wine и WineX (из css), запуск программ и оптимизация.
4) Настройка шрифтов в Wine и WineX. Совет по русификации от Opennet.ru.

 Установка и настройка эмулятора Windows - wine.
  Вадим Логинов, striker2002@tut.by 

Многие из тех, кто перешел на Linux, сделав ее основой своей рабочей станции, столкнулись с проблемой запуска приложений для Windows операционных систем. Существует много программ, которые написаны для окошек, но еще не были перенесены в другие системы. Для запуска таких приложений используются эмуляторы. Для Linux самыми известными и наиболее распространенными являются win4lin и wine. Так как первая является сугубо коммерческим продуктом и может быть недоступна многим пользователям по ряду причин, я остановлюсь на установке и настройке второй программы.

Установка
Wine вы можете без труда найти в Интернете, но обязательно начните с сайта программы http://www.winehq.com/. Здесь вы найдете ссылки на новые версии программы, исправления, а также много другой полезной для себя информации.
Итак, вы нашли и скачали архив с программой.
У меня архив назывался wine20020905.tar.gz. У вас он будет называться подобным образом, отличия будут состоять только в версии программы.
Далее давайте рассмотрим два варианта установки: от имени какого-либо пользователя с использованием установочного скрипта, входящего в дистрибутив программы, и от имени суперпользователя.
Если у вашей системы нет других пользователей, но вы выбрали первый вариант установки, то давайте их добавим.
От имени суперпользователя используем chmod для изменения прав на пользование файлом. Теперь, когда файл стал общедоступен, добавим нового пользователя в систему. Для конфигурирования и управления пользователями и группами в системе Linux используется два файла: /etc/passwd и /etc/group.

Ну ладно, не буду рассказывать про все тонкости управления пользователями, сэкономим ваше время и приступим к непосредственному добавлению пользователя в систему.
useradd Vadim -u 2002

Если же нам он надоел, набираем команду userdel Vadim, которая удалит всю информацию об этом пользователе из системы.
А в принципе можно добавить пользователей с помощью linuxconf.

Давайте для начала создадим директорию, в которую мы распакуем эмулятор. Пусть это будет /usr/src/wine/. Команды, которые мы будем выполнять, в консоли будут выделены.
mkdir /home/Vadim/wine/

Далее скопируем в эту директорию архив с программой.
cp wineXXX.tar.gz /home/Vadim/wine

Теперь набираем команду su Vadim. Теперь мы работаем от имени этого пользователя.
Так как недавно в КГ рассматривались архиваторы и работа с ними, я хочу, чтобы вы самостоятельно распаковали wine.
Теперь заходим в папку, в которую произвели распаковку, и набираем
./tools/wineinstall

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

make depend

make

make install

И вдобавок ко всему будет необходимо с помощью команды ldconfig,


предварительно поправив файл /etc/ld.so.conf, где записаны пути к различным библиотекам. Очень часто бывает, что после установки пользователь пытается запустить какую-либо Windows-программу и в ответ получает сообщение об ошибке, а именно об отсутствии библиотеки. Так как первым делом используются функции библиотеки libntdll.dll.so. Если у вас возникла какая-нибудь проблема при установке wine, то лучше всего сначала самостоятельно прочитать всю документацию, прилагающуюся к программе, и только потом, если ваша проблема не была рассмотрена, задавать вопросы на форумах. Это касается не только эмулятора Windows.
Я предполагаю, что у вас не возникло проблем с установкой, поэтому давайте займемся настройкой программы.

Настройка
При инсталляции программы был создан файл конфигурации wine, а именно
/<Имя пользователя который производил установку>/.wine/wine.conf

Одной из важнейших секций файла конфигурации является та, в которой указаны корни наших виртуальных дисков. То есть в Windows мы привыкли открывать Мой компьютер, а затем делать двойной щелчок на диске, который там был назван буквой латинского алфавита. В Linux же немного по-другому. Структура носителей на жестком диске нам представляется как разветвленная сеть, имеющая свое начало в корневом разделе, к которому прикреплены каталоги, некоторые из которых у нас могут являться виртуальными разделами жесткого диска, или, если быть точнее, разделами диска, к которым мы привыкли используя Windows.
Предположим, что наш жесткий диск был разбит на 3 раздела. Два имели fat32-систему (диск C и D) и один external2-раздел.

После монтирования этих систем, к примеру:
mount —t vfat /dev/hda1 /mnt/c

mount —t vfat /dev/hda6 /mnt/d

я получил доступ к разделам fat32.

Для того, чтобы не было проблем с приложениями Windows, и они считали, что диск разбит на разделы C и D, мы и пропишем в файл конфигурации:
[Drive C]
"Path" = "/mnt/c"
"Type" = "hd"
"Filesystem" = "win95"

[Drive D]
"Path" = "/mnt/f"
"Type" = "hd"
"Filesystem" = "win95"

Теперь у нас есть разделы, к которым смогут обращаться приложения Windows. Кто знает, может вам захочется использовать файловый менеджер. Нужно дать возможность wine работать с cd-rom’ом. Для этого прописываем в файл конфигурации такие строки:
[Drive G]
"Path" = "/mnt/cdrom"
"Type" = "cdrom"
"Device" = "/dev/cdrom"
"Filesystem" = "win95"

Но и не исключена вероятность того, что вы захотите иметь доступ к вашему корневому разделу Linux, получив при этом доступ ко всей хранящейся там информации.
[Drive H]
"Path" = "/tmp"
"Type" = "hd"
"Filesystem" = "win95"
Теперь приступим непосредственно к настройке самой виртуальной Windows операционной системы.

[wine]
"windows" = "C:\\windows"
"system" = "C:\\windows\\SYSTEM"
"path" = "C:\\WINDOWS;C:\\WINDOWS\\COMMAND;C:\\PROGRA~1\\BORLAND\\DELPHI4\\BIN;
C:\\PROGRA~1\\BORLAND\\VBROKER\\BIN;C:\\PROGRA~1\\BORLAND\\VBROKER\\JRE\\BIN"
"temp" = "C:\\WINDOWS\\TEMP"
В этой секции мы указали wine-пути ко всем приложениям и библиотекам, которые должны вызываться без входа в их директории. К примеру, у меня на разделе /dev/hda1, примонтированному к директории /mnt/c, находились программы, для которых должна была производиться автоматическая подгрузка библиотек, причем благодаря такой установке в файле конфигурации их поиск производился в папках, заданных по умолчанию директивой path.

[DllOverrides]
"commdlg" = "builtin, native"
"comdlg32" = "builtin, native"
Благодаря этой секции мы можем задать очередность обращения к библиотекам. Если у нас есть более новые версии или используются библиотеки уже установленного Windows, то есть возможность использовать именно их, а не предлагаемые wine. Но желательно оставлять эту секцию неизменной во избежание проблем с запуском эмулятора и системных сбоев.
Далее идет настройка эмуляции графического интерфейса wine.

[x11drv]
"PrivateColorMap" = "N"
Эта опция включает использование карты цветов, созданной самой wine.
"PerfectGraphics" = "Y"
"ScreenDepth" = "24"
Здесь мы устанавливаем глубину цвета, поддерживаемую вашим монитором и видеокартой. Лучше всего выбирать ту, которая стоит в настройках иксов.
"Managed" = "Y"
Данная функция предоставляет вашему оконному менеджеру управлять окнами, созданными wine.
"Desktop" = "800x600"
Здесь устанавливаем разрешение вашего виртуального десктопа.
Далее идет управление видеопамятью.
"DXGrab" = "Y"
Эта опция позволяет захват событий, связанных с изменением состояния мыши средствами встроенных библиотек DirectX.
"DesktopDoubleBuffered" = "Y"
Лучше всего включить поддержку двойной буферизации экрана. Вдруг нам захочется попробовать запустить приложения, использующие библиотеки openGL.
Оставим остальные настройки по умолчанию.

[Fonts]
Переходим к секции шрифтов. В этой секции мы можем добавить шрифты, к которым привыкли в Windows. Все они прекрасно портируются в wine путем добавления нескольких строк. Если вы захотите добавить шрифт, то можете для начала воспользоваться библиотекой шрифтов, предоставленной в дистрибутиве эмулятора. Если же вам их число покажется маленьким, то, пожалуйста, добавляйте свои! Но не забывайте, что проблем у вас с их установкой не будет при перестановке кодировки по умолчанию на win1251. Но для этого вам придется почитать документацию по грамотной кириллизации Linux.

[serialports]
"Com1" = "/dev/ttyS0"
"Com2" = "/dev/ttyS1"
"Com3" = "/dev/ttyS2"
"Com4" = "/dev/ttyS3"
Здесь, как вы видите, настройки серийных портов. Это для того, чтобы иметь доступ к устройствам, подключенным к ним непосредственно из wine.

[parallelports]
"Lpt1" = "/dev/lp0"
То же для параллельных портов, для работы с принтерами, ключами к программам автоматизированного проектирования, наконец.

[ppdev]
А это секция настройки устройств, которые подключены к компьютеру иными способами, не предусмотренными в wine и для установки обращений к портам ввода-вывода, позволяющих контактирование с устройством.

[spooler]
"FILE:" = "tmp.ps"
"LPT1:" = "|lpr"
Секция, где заданы настройки создания временных файлов, промежуточных измерений, вычислений.

[registry]
В этой секции заданы настройки работы с реестром. Заданы имена файлов, которые представляют реестр, заданы настройки автосохранения при длительном изменении реестра средствами его конфигурирования.

[Tweak.Layout]
"WineLook" = "Win95"
Здесь задаются настройки внешнего вида рабочего стола wine. Предположим, что нас замучила ностальгия по временам windows 3.1. Не проблема! Несколько метких нажатий на клавиши, и вот перед нами графический интерфейс старых добрых окошек.

[WinMM]
"Drivers" = "wineoss.drv"
"WaveMapper" = "msacm.drv"
"MidiMapper" = "midimap.drv"
Последняя и самая интересная секция: указание имен драйверов для переназначения ввода-вывода, для работы миди-устройств, для работы программных синтезаторов таблиц и вообще для всего, что придумаете, хоть для устройств дистанционного управления вашим любимым виндовым winamp’ом. Хотя Linux’овые плейеры круче:).
Wine мы установили, настроили — давайте запускать программы!

Запуск приложений
И вот, наконец, тот момент, которого мы так долго ждали, — запуск приложений.
Когда мы запускаем приложение через wine, мы можем сделать это несколькими способами.
Давайте будем запускать калькулятор.
wine calc

wine calc.exe

Это первый способ запуска приложений. Но не стоит забывать, что все приложения мы так не запустим, так как эмулятор их не сможет найти, а для этой программы мы при настройке установили директорию, в которой она может находиться, c:\\windows\\
Второй способ запуска приложений — это запуск с указанием полного пути к ним в двух форматах: в формате Windows с учетом настроек в файле конфигурации и в формате Unix-систем, то есть сразу, без обходных путей, без использования средств поиска, грубой консольной силой.
wine c:\\windows\\calc.exe; (использование windows-имени)
wine /usr/windows/calc.exe; (использование unix-имени)
Необходимо отметить, что для поддержки параметров исполняемых файлов нужно обязательно использовать полное имя файла, то есть путь и сам файл.

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

Не стоит забывать, что, когда вы используете wine, вы подвержены вирусам, написанным для Windows. И на фоне этого может разрушиться неприступность вашей операционной системы. Так что старайтесь не давать возможности Windows-приложениям соприкасаться с важной для вас информацией или вмешиваться в работу Linux’а. Каждое запущенное приложение в противном случае будет нести потенциальную опасность и будет выбивать кирпичики из вашей крепости, несущей гордое название Linux.

Интернет:
Большое количество информации будет доступно вам с ресурсов WineHQ, расположенных на http://www.winehq.com/. Там вы найдете разнообразные путеводители по миру wine, сообщения об ошибках, способы их исправления и многое другое. Этот сайт должен стать опорным пунктом, начальной точкой, от которой начнется ваше углубленное знакомство с wine.
ЧАВО:
Ответы на Часто Задаваемые Вопросы вы сможете найти на http://www.winehq.com/FAQ. Также вам доступны группы новостей, из которых вы почерпнете новую информацию об этом эмуляторе, news://comp.emulators.ms-windows.wine/. 
IRC:
Также помощь в работе с программой вам будет оказана на канале #WineHQ сервера irc.openprojects.net.



 WineX.
  the_reaver. Источник - info-reaver.narod.ru.
Сейчас многие говорят, что есть программа, которая может запускать все directх игры. Многие в этом на сто процентов уверены и уверяют остальных. Конечно, многие играют в разные игры, и в общем счёте процент набирается. На сайте разработчика список игр занимает 20 страниц в браузере.

Итак, что есть wineX - это простой wine с новыми функциями. Но есть какая-то секретность вокруг этого: ни одного нормального файла (tar.gz) не зарелизено, качать можно только по cvs, а если хотите пакет для своей системы - заплатите 5$ за какой-то спам - и получите ваши файлы. Но я против таких методов и идейно против разработчиков,так что winex (tar.gz) можно скачать с моего сайта (раздел программы). Но вернемся к разработчикам - по-моему, они что-то утаивают (системные библиотеки ? ), и этого что-то нет в бесплатной версии, но ничего - ведётся расследование.

Эмулятор наш всё ещё в альфа версии, честно говоря он всегда будет альфа, до тех пор пока не откроют
исходники кое-какой ОС. Не думайте, что вы сможете играть в новейшие игры. Но в свои любимые - есть шанс.
Скачали, распаковали, настроили 3Д, и мы готовы устанавливать - всё просто :

./configure
make depend && make

теперь пойдите заварите кофе =) или если у вас слабая машина - сделайте генеральную уборку во всей квартире =)
ок? сделали кофе/уборку дальше набираем

make install &&
mkdir -p $HOME/.transgaming/c_drive/windows/system32

и запускаем инсталляционный скрипт (только из основной директории, где configure и Makefile)

tools/wineinstall

на вопрос о директории отвечаем $HOME/.transgaming/ , он установит реестр - и всё - можно играть!

Было проведено расследование. Все говорили, что различия между платной и бесплатной версией только в работе с оригинальными дисками. Но у меня были сомнения. Неожиданно у меня появилаcь платная версия, чему я несказанно обрадовался. Естественно, она уже лежит на сайте. Линка нет но я скажу, что это лежит в директории soft, имя файла - winex-2.01.tar.rar . Качайте на здоровье! (Примечание: уже появилась новая версия - wineX3.tar.gz). Это собранный winex. С этим winex я играю в warcraft3, maxpayne, couner-strike и другие игры.



Немного опишу установку:

1. Все распаковывается в какую-нибудь директорию ( далее подразумевается /opt/winex ).
2. Редактируем файлик usr/bin/winex :

export INSTALLDIR=/opt/winex/usr/lib/transgaming
export WINEPREFIX="/opt/winex/usr/lib/transgaming/.transgaming"

3. Редактируем файлик /opt/winex/usr/lib/transgaming/.transgaming/config

[Drive C]
"Path" = "/opt/winex/usr/lib/transgaming/.transgaming/c_drive/"

Если надо, измените директорию, просто переместив ее в другое место и создав на нее ссылку с тем же именем.
Эта директория - ваш диск (в маздае). Туда будут устанавливаться по умолчанию все игры.

4. Пишем в конец файла ~/.bash_profile

alias winex='/opt/winex/usr/bin/winex'

Все, можно ставить игры и играть. Но проблемы с русским! Не беда, в файле /opt/winex/usr/lib/transgaming/.transgaming/config

ставим следущие строки, как здесь написано:

[fonts]
"Resolution" = "96"
"Default" = "-cronyx-heveltica-"
"DefaultFixed" = "fixed";
"DefaultSerif" = "-cronyx-times-";
"DefaultSansSerif" = "-cronyx-helvetica-";

[FontPatterns]
"Pattern0" = "-cronyx-times*"
"Pattern1" = "-cronyx-helvetica*"
"Pattern2" = "-cronyx-courier*"
"Pattern3" = "-cronyx-fixed*"

С русским проблем нет. Теперь немного о самих играх. Надо играть или под рутом или сменить рекурсивно владельца директории маздайного диска. Еще прикол : winex эмулирует DirectX7.0, но некоторые игры для DirectX8 нормально работают. Могут быть проблемы с самим winex - это зависит от дистрибутива. Яркий пример - в suse постоянно падает, в моем reaver linux отлично работает (видимо потому, что в моем дистрибутиве нет лишнего мусора). И не ставьте последнюю Mesa для Х-сервера версией ниже 4.2 .

Есть некоторые тонкости при установке. Описываю три игры:

MaxPayne
Если будет вылетать при загрузке уровня - запускайте с ключом -disable3dpreloads
например :



winex MaxPayne.exe -- -disable3dpreloads

Counter-Strike и Half-Life
Играть на opengl. Запускать первый раз с ключами -gl -gldrv Default .
Можно также поставить это в настройках. Игра трубует 16-битного цвета.
При создании сервера в cs - если играете не в полноэкранном режиме, он не стартанет сервер, пока не нажмете done в предпоследнем открытом окне игры.

Warcraft3 :
Установка должно выглядеть так :
wine -winver win98 install.exe
на другой версии могут быть проблемы
чтобы он не вылетал в директории, где вы его установили, переименуйте папку Movies в что-нибудь

mv Movies bak.Movies

И все будет без проблем.

Я теперь не могу оторваться от игр:)
Все ждем winex 3.0 - если он у меня появится, то сразу выложу на сайте.

 Wine.
  Grigory Bakunov, 27.12.2002.
Получение и установка.

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

Создадим папку для работы с исходными текстами Wine.
% mkdir ~/wine-sources

Внимание: для корректной сборки wine необходимо порядка 100M пространства на диске.

Получим wine из CVS.
% cd ~/wine-sources
% export CVSROOT=:pserver:cvscvs.winehq.com:/home/wine
% cvs login\

В качестве пароля использовано слово "cvs" (маленькими буквами, без кавычек)
% cvs -z3 checkout wine

В дальнейшем для получения самых свежих исходных текстов wine будет достаточно просто выполнить команды.

% cd ~/wine-sources/wine
% cvs -z3 update -AdP

Создадим рабочую копию wine.
% cp -r wine wine-work

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

% cd wine-work
% vi tools/wineinstall

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

CONFARGS="--enable-opengl --disable-debug --disable-trace"

То есть, "включить поддержку opengl и выключить вывод отладочных сообщений."



Внимание: перед сборкой убедитесь, что пакет wine в системе не установлен.

Запуск сборки

% su

Введите пароль суперпользователя.
% ./tools/wineinstall

Процесс сборки

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

Скопировать начальные настройки в домашнюю папку.
% cp -r /root/.wine /home/vasya/.wine
% chown vasya:users /home/vasya -R

Позволить всем пользователям читать и писать папку /c для работы с windows программами.
% chown a+wr /c -R

Собственно установка завершена.

Запуск программ

Запуск программ windows осушествляется вводом команды
% wine <имя_программы>

где <имя_программы> указывает на запускаемую программу. Например:
% wine setup.exe

или
% wine sol.exe

Обратите внимание что при неизмененной конфигурации wine доступны только программы лежашие в папках /c, /mnt/cdrom, /mnt/floppy,

Дополнения

Сушествует клон wine, ориентированный на работу с 3D играми, содержаший также реализацию библиотеки DirectX8. Получение его выглядит так:

% cd ~/wine-sources
% export CVSROOT=:pserver:anonymouscvs.winex.sourceforge.net:/cvsroot/winex
% cvs login

В качестве пароля нужно просто нажать enter
% cvs -z3 co wineX

Для оптимизации работы OpenGL предлагается внести следующие изменения в файле dlls/opengl32/make_opengl

заменить gen_thread_safe=1 на **gen_thread_safe=0*


заменить ext_prefix="func_" на ext_prefix=""


заменить gen_traces=1 на gen_traces=0

Также для повышения производительности можно перед этапом сборки (запуска ./tools/wineinstall) выполнить команду
export CFLAGS="-O2 -mcpu=i386 -march=i686"

 Настройка шрифтов в Wine и WineX.
  Opennet.ru, 26.01.2003.
Date: Sat, 16 Nov 2002 20:20:47 +0500

From: Tolya Borisenkov <Tolya.Borisenkov@f13.n451.z2.fidonet.org>

Newsgroups: fido7.ru.linux

Subject: Настройка шрифтов в Wine и WineX

> Вот скачал сабж из исходников... собpал... запустился Winamp,

> flash-мультики типа масяня :))



> только шpифты плохо отобpажаются... где что подкpутить?

Все в конфиге wine по поводу фонтов [fonts] ;Read documentation/fonts before adding aliases ;See a couple of examples for russian users below ;"Resolution" = "96" ;"Default" = "-adobe-helvetica-" ;"DefaultFixed" = "fixed" ;"DefaultSerif" = "-adobe-times-" ;"DefaultSansSerif" = "-adobe-helvetica-"

;; default TrueType fonts with russian koi8-r encoding "Default" = "-monotype-arial-*-*-*--*-*-*-*-*-*-koi8-r" "DefaultFixed" = "-monotype-courier new-*-*-*--*-*-*-*-*-*-koi8-r" "DefaultSerif" = "-monotype-times new roman-*-*-*--*-*-*-*-*-*-koi8-r" "DefaultSansSerif" = "-monotype-arial-*-*-*--*-*-*-*-*-*-koi8-r" ;; default cyrillic bitmap X fonts ;"Default" = "-cronyx-helvetica-" ;"DefaultFixed" = "fixed" ;"DefaultSerif" = "-cronyx-times-" ;"DefaultSansSerif" = "-cronyx-helvetica-"


Wine не имеет ничего общего со спиртным!


Такие программы как VMware и Win4Lin позволяют вам запускать из-под Linux другие операционные системы (как правило Windows) и таким образом предоставляют возможность запускать Windows-приложения на Линукс-машине. [Win4Lin специально создана для использования исключительно Windows. VMware -- это "отдельная песня". Уникальность этого продукта в том, что он эмулирует работу "железа" компьютера, что позволяет устанавливать в её среде такие ОС как Windows, MSDOS, Linux, FreeBSD и т.п. Исключение могут составлять те операционные системы, которые очень круто обходятся с аппаратным обеспечением. Прим.ред.] Кроме того, можно пойти традиционным путем и установить Windows на соседний раздел. Тем не менее, эти альтернативы скорее нагружают вашу систему, чем решают проблему.

Wine (рекурсивный акроним от "WINE Is Not an Emulator") отличается от всех вышеперечисленных методов, и не требует от вас покупки лицензионной копии Windows. Принцип его работы основан на эмуляции Win32 API, код которого полностью переписан и отличается от кода Microsoft.

Прим.ред.: предыдущий абзац вводит немного в заблуждение. Так всё-таки: Wine -- эмулятор или нет? Посмотрим, что говорится в документации к нему (c3886.html):

Аббревиатура "Wine" -- это рекурсивный акроним "Wine Is Not an Emulator". Кроме этого Wine известен тем, что используется как "эмулятор Windows". В некотором смысле, оба значения верны, только отличаются в зависимости от перспективы. Первое определение говорит о том, что Wine не виртуальная машина. Он не эмулирует работу CPU и вы не устанавливаете Windows или драйвера устройств для неё. Правильней сказать, что Wine -- это реализация API Windows и он может использоваться как библиотека для портирования приложений Windows на Unix. Второе утверждение (о том, что Wine эмулятор), очевидно, опирается на то, что для исполняемых файлов Windows (.exe файлы), Wine действительно выглядит как Windows, подражая его поведению.



Winin - Windows из-под Linux


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

     Да, да, вы не ослышались, я сказал именно то, что сказал (звучит-то как! :). Немного предыстории. Уже давно мне приходится по роду своих занятий работать то в Окнах (да простят меня линуксоиды за святотатство, но против начальства не пойдешь :| ), то в Линухе. Честно говоря это не очень удобно: перезагружаться туда-сюда, чтобы выполнить какую-нибудь нужную мелочь. Я вплотную решил заняться этой проблемой, т.е. я захотел сделать так, чтобы можно было работать одновременно в двух операционных системах. Понятно, что просто так это никак не сделать, а нужен специальный инструментарий. Сперва я решил попробовать воспользоваться wine v довольно популярным Windows Emulator-ом. Но здесь меня ждало разочарование: эмулятор не позволял работать со многоми Windows-приложениями, а проблемы с русским языком вообще оказались нерешаемы. :(

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


     Так я и продолжал бы мучаться, когда недавно, пару дней назад лазая по необъятным просторам Сети я вдруг напоролся на очень интересную программу v Win4Lin. То что я прочитал про неё, меня очень удивило и заинтересовало. Через час я уже имел выкачанную программу и другие нужности для неё. После её установки, я был поражен увиденным: впервые в своей жизни я увидел НОРМАЛЬНУЮ Windows 98, работающую под Linux быстро, надежно и полнофункционально!

     Теперь перейдем непосредтсвенно к описанию продукта. Win4Lin от компании NetRaverse представляет собой программу, позволяющую установить из-под Linux полнофункциональную Windows 95 или 98. Может быть эти системы уже немного устарели, но я так не думаю. Кроме того, из-под установленной Оконной системы вы сможете поставить ЛЮБЫЕ другие Оконные программы и они БУДУТ РАБОТАТЬ. Сразу же хочу отметить, что вышесказанное не касается игр v DirectX пока с эмулятором не дружит, но все другие программы v за милую душу. Даже сейчас я сижу и набираю этот текст в Word XP, дабы удостовериться в том, что я все же действительно не сплю, а кроме того, доказать вам правоту своих слов. Параллельно играет WinAmp, без тормозов и с не менее хорошим, чем если бы он работал в чистом Windows, проигрывая Aerosmith, ?Fly away from here¦. Кроме того, данный продукт позволяет также организовать полнофункциональную DOS-сессию. Так что dosemu, wine и VMWare отдыхают. Сама Windows запускается из-под X-Window в окне. Например, вы можете создать ярлык на вашем KDE-десктопе и одним щелчком производить загрузку Оконной системы для того, чтобы иметь возможность работать с какой-либо специфической для вашей работы Windows-программой, не выходя из Linux. Также вы имеете возмность предоставить доступ к любому разделу на винчестере, даже к директориям Linux. Да, чуть не забыл: с русским языком у меня никаких проблем не возникло, иначе как бы я смог набрать эту статью? При всех вышеописанных качествах Win4Lin не требовательна к ресурсам. Ну еще бы, ведь все файлы установленной Оконной системы располагаются на том же разделе, где стоит ваш Линукс. Лично у меня это ReiserFS, поэтому система просто летает. Конечно, есть возможность поставить систему и на отдельный раздел, и даже создать файл в качестве раздела (по крайней мере мне так показалось).  Во всех отношениях установленная система работает быстрее, чем с VMWare. Кроме того, в последней, третьей версии этого продукта, которую мы с вами и ставим, появилась поддержка сети. Единственные пару мелочей, которые мне не очень понравились, это то, что когда у вас файлы Окошек располагаются на линуховом разделе, то есть некоторые проблемы с русскими именами файлов. Но лично я это обошел довольно просто: я убрал все такие файлы :) Кроме того, Win4Lin позволяет отдать вашей системе максимум 64 мегабайта оперативной памяти, что некоторым пользователям покажется малым. Но могу заверить, что этого вполне достаточно. Тем более вы ведь систему ставите в качестве дополнительной фичи вашего Линуха, а не как главную рабочую среду! А как же!



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

     Итак, мы лезем на сайт производителя этой полезности, а конкретно на www.netraverse.com. Если вам интересно, то вы можете почитать кучу коммерческой информации, но нас больше интересует раздел Members, кнопка на который есть сверху в правом угле. Там нас попросят произвести бесплатную регистрацию, после чего вам на почту будет выслано письмо с вашим логином и паролем. Вводим логин и пароль, теперь у вас есть возможность скачивания продуктов с сайта. Сразу же стоит отметить, что пакет использует для своей работы пропатченное ядро. Что? Вы уже испугались, что надо искать новое ядро, а потом мучаться с его компиляцией и установкой? Нет, вся прелесть в том, что все уже есть на этом сайте. Но обо всем попорядку. Итак, после логина у вас есть возможность скачать себе инсталлятор. НО НИ В КОЕМ СЛУЧАЕ не делайте этого. Это не имеет смысла, выкачивать трехмегабайтовый пакет, который реально ничего не делает. Но все же если вы не очень умелый линуксоид, а кроме того вам все равно сколько качать, то вы можете совсем немного облегчить себе жизнь, выкачать инсталлятор и следовать дальнейшим его инструкциям. Но все дело в том, что сам инсталлятор делает лишь то, что выясняет, какой дистрибутив у вас стоит, какое у вас ядро, и выкачивает уже пропатченное ядро с сайта. Кроме того для своей работы инсталлятор требует лицензию, которая стоит денег, хотя никто не мешает вам на этом же сайте получить триальную лицензию. Но мы то знаем способ лучше! :)

     Короче говоря, мы пойдем другим, более правильным путем. Для этого, сперва выясните, какой дистрибутив у вас стоит (если вы этого не знаете), а также номер ядра вашей системы. Теперь, залазим в раздел, где лежат ядра системы. Ищем ядро, которое точно соответствует вашему дистрибутиву, его версии и версии ядра. Будьте внимательны! Лично я здесь допустил ошибку. Все дело в том, что у меня стоит Mandrake Linux 8.1 Download Edition. Для него нужно было выкачивать пакет с ядром с названием Kernel-Win4Lin3-Mandrake8.1_2.4.8-04.i586.rpm. Я немного перепутал версию ядра и выкачал версию с номером 2.4.8.34-04, что не соответсвует данной версии дистрибутива. Я потом долго мучался, почему же этот пакет не ставится, пока еще раз не проверил все. Сами пакеты с ядрами имеют размер до полутора мегабайт. Если же вам нравится делать ядро своими руками, то здесь же вы можете сказать патч к вашему ядру и собрать ваше ядро по вашему усмотрению, только не забудьте включить поддержку Win4Lin, опция которой появится в настройках ядра.



     Далее, выкачиваем сам пакет с Win4Lin. Он имеет имя Win4Lin-5.2.9b-d.i386.rpm. Все это делается на все на том же сайте (конкретная ссылка на момент написания статьи: http://www.netraverse.com/member/downloads/miscfiles/Win4Lin-5.2.9b-d.i386.rpm). Но, теперь нам стоит немного передислоцироваться, чтобы получить триальную лицензию сроком на 11 лет ;) , а также получить возможность исправить баг, скорее даже принудительно установленное ограничение, которое не позволяет работать с Win4Lin суперпользователю, проще говоря root-у. Все это вам позволит сделать пакет win4lin_v30x.tar.gz, который надо взять на сайте уважаемого Alex Murphy http://murphy.pp.ru/download/win4lin/.

     Итого, мы имеем два выкачанных пакета и утилиту для исправления пары мелочей. Сначала ставим пакет с ядром. Этот пакет добавит в вашу систему такое ядро, которое у вас уже есть, но уже с добавленной поддержкой Win4Lin, а также поставит дополнительный модуль, предназначенный для того же, но загружаемый только по мере надобности. Кроме того, во время установки вашего ядра будет подправлен конфигурационный файл lilo-шки, lilo.conf, в результате чего будет добалена еще одна сессия Win4Lin. Т.е. при загрузке lilo вы будете иметь возможность выбрать, хотите ли вы работать с Win4Lin, или  без него (для этого и добавлялось новое, почти такое же, ядро, и сохранялось старое). Сразу же вам будет предложено перезапустить систему, чтобы загрузить нужное для работы ядро. Здесь же стоит заметить, что если вы скачивали патч, а не ядро, то все вышеописанные операции вам придется сделать самим.

     Теперь, нужно поставить пакет с Win4Lin. После установки пакета, в каталоге /opt появится подкаталог win4lin. В нем хранятся все основные файлы Lэмулятора¦ (не хотел говорить это слово, но пришлось, хотя, реально, мне так кажется, что Win4Lin не совсем эмулятор, хотя он и эмулирует виртуальный компьютер). Кроме этого в каталоге /var тоже появится каталог win4lin. В нем будут храниться логи, файлы настроек, а также файлы устанавливаемых Окошек. Теперь, мы распаковываем последний архив. В подкаталоге root_patch находим файл install.sh и запускаем его с опцией -o. Этот скриптик как раз-таки установит вам триальную лицензию и исправит Lбаг¦ с cуперпользователем.



     Вce, Win4Lin уже стоит. Если теперь в консоли набрать win, то выскочит Lзанадта симпатишнае акенца¦, которое вам скажет, что не обнаруживает Windows (а как же, мы ведь забыли установить то, ради чего все это затевали!) и тут же преложит вам установить Windows. Для этого вам потребуется либо диск с инсталляхой Windows 95 или Windows 98 любых версий, либо каталог на винчестере с аналогичным содержанием. После, того как вы согласились поставить Окошки в предыдущем диалоге или обнаружили в /var/win4lin/publicbin утилиту installwindows, которую и запустили, вам и будет дана возможность указать, как вы будете ставить Windows. Весь последующий процесс полностью автоматизирован и не потребует от вас практически никаких действий, кроме разве что ввода серийного номера Windows, а также выбора режима поддержки Win4Lin-ом сети для свежеустановленных Окошек.

     Все! После установки, вы можете смело набирать в консоли команду win, или сделать ярлычок для этой цели на десктопе, и буквально через несколько секунд сможете услышать до боли знакомую заставку Windows. Теперь уж вы действительно сможете работать с Оконными программами в Linux. Единственное, про что мне осталось рассказать, так это про то, что запустив программку winsetup из каталога /var/win4lin/publicbin, вы сможете настроить устройства и разделы, которые можно предоставить ничего не подозревающей Windows в пользование. Кроме разделов можно указывать и каталоги, которые будут видны как диски.

    Если вам очень интересно, где на в вашем Linux ?лежат¦ диски C: и D:, которые видны из-под эмулятора, то зайдите в /var/win4lin/dosroot и /var/win4lin /rhome, - найдете там много интересного :). Здесь же стоит заметить, что кроме общей есть возможность поставить персональную версию Windows.

     Вот так. Удачной вам работы в Linux и поменьше сидеть в эмуляторе! ;)


Winprog



В настоящий момент существуют 2 способа для запуска Windows-приложений в среде Linux:

1) Механизм создания виртуальных машин. К таким программам относятся, например, VMWare и Win4Lin. Для их работы необходимо, чтобы на компьютере был установлен Windows.
2) Запуск Windows-программ как X Window приложений. Самая известная и легендарная программа подобного рода - это Wine (Wine Is Not an Emulator).

1.1) VMWare - http://www.vmware.org.

Вообще-то VMWare - это мощная система виртуальных машин. Эта программа не специализируется на эмуляции конкретных операционных систем - просто эмулируется сам компьютер, внутри которого и запускается другая OS. Короче говоря, виртуальный компьютер - это специальная программа, запускаемая в ОС Linux и моделирующая физический компьютер Intel x86. Монитором виртуального компьютера является окно графической оболочки X Window, в которое производится вывод информации.

Виртуальный компьютер «строится» из следующего набора виртуальных устройств:
• виртуальные жесткие диски IDE и SCSI, виртуальный дисковод CD–ROM;
• стандартный дисковод гибких дисков;
• контроллер жестких IDE-дисков Intel 82371 PCI Bus Master, поддерживающий два первичных (primary) и два вторичных (secondary) IDE-диска;
• адаптер SCSI-дисков, совместимый с BusLogic BT-958;
• стандартный графический PCI-адаптер, стандартная 101/102-клавишная клавиатура, PS/2-совместимая мышь;
• сетевая плата AMD PCNET Family Ethernet adapter (PCI-ISA);
• последовательные порты COM1-COM4, параллельные порты LPT1-LPT2;
• звуковая плата, совместимая с Sound Blaster 16.

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

Общий вывод - большая и неповоротливая программа, но с большим возможностями.

1.2) Win4Lin - http://www.netraverse.com.


Это тоже эмулятор виртуального компьютера, но он создан и оптимизирован специально для запуска Windows в Линуксе. Тем более, он использует не обычное, а пропатченное ядро Linux. Поэтому он быстрее и надежнее, чем VMWare. Вообще, Win4Lin на сегодняшний момент - лучшая из подобных программ! Эмуляция почти 100%, и в окне Linux идут все известные программы, написанные для Windows (На сайте перечислены такие приложения - MS Office, Intuit Quicken, Lotus SmartSuite, Adobe Photoshop, Intuit TurboTax, MS Internet Explorer, Palm Desktop, Netscape Navigator, Winamp, и многое другое). Так же специальная функция программы - это защита от сбоев (protection layer), благодаря которой даже если приложение упало, оно легко восстанавливается, не влияя на работоспособность системы. В новой версии Win4Lin 3.0 есть даже поддержка сети Microsoft. Единственный недостаток - отсутствие поддержки DirectX, поэтому в игры поиграть не получится. А вообще - все идет очень быстро по сравнению с VMWare и даже на время забываешь, что находишься в Линуксе :).

Установка: Сначала нужно скачать установочный файл с http://www.netraverse.com/download. После этого setup сам определяет тип вашего ядра и предлагает скачать пропатченную версию ядра (Win4Lin-Improved Kernel). Подробнее об установке или использовании Win4Lin можно прочитать на английском здесь (UnixReview.com), здесь (LinuxPlanet.com) или здесь (Linux-World.dk). Так же доки на русском языке есть здесь. (Дополнение от 24.01.02: Есть еще одна интересная статья об установке Win4Lin - она находится здесь).

Общий вывод - The best!!

2.1) WINE (Wine Is Not an Emulator) - http://www.winehq.org.

Самая известная и легендарная программа для запуска Windows-программ в OS Linux и среде X Window. Действительно, Wine - это не эмулятор, а просто программа, пытающая воспроизвести функциональность Windows. В отличии от двух вышеперечисленных коммерческих (и очень дорогостоящих) проектов, Wine распространяется как Open Source. (Но существует и коммерческая версия под названием WineX, разрабатываемая компанией Transgaming). Разработчики Wine и WineX уже добились определенных успехов в запуске мощных Windows-приложений. (Например, под WineX 2.0 прекрасно идут современные игры). Wine не создает виртуальный компьютер, а пытается запускать Windows-приложения в графические приложения для Linux. Следовательно, для VMWare и Win4Lin требуется, чтобы на компьютере был установлен Windows, а для Wine наличие Windows на компьютере не обязательно. (Но обычно используются различные файлы, взятые из Windows - например, библиотеки DLL).



Общий вывод - Легендарный проект.













WordNet


Princeton's WordNet.
Email: Wordnet-email

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

Я должен предупредить вас, что это примерно 10 мегабайтная загрузка, но он того стоит, и вам придется загрузить его всего 1 раз. Вот пример вывода команды 'wn' (исполнимая программа, поставляемая с WordNet) для слова 'date':

Overview of noun date

The noun date has 8 senses (first 8 from tagged texts)

1. date, day of the month -- (the specified day of the month; "what is the date today?") 2. date -- (a particular day specified as the time something will happen; "the date of the election is set by law") 3. date, appointment, engagement -- (a meeting arranged in advance; "she asked how to avoid kissing at the end of a date") 4. date -- (a particular but unspecified point in time; "they hoped to get together at an early date") 5. date -- (the present; "they are up to date"; "we haven't heard from them to date") 6. date, escort -- (a participant in a date; "his date never stopped talking") 7. date -- (the particular year (usually according to the Gregorian calendar) that an event occurred; "he tried to memorize all the dates for his history class") 8. date -- (sweet edible fruit of the date palm with a single long woody seed)

Overview of verb date

The verb date has 5 senses (first 3 from tagged texts)

1. date -- (go on a date with; "Tonight she is dating a former high school sweetheart") 2. date, date stamp -- (stamp with a date, as of a postmark; "The package is dated November 24") 3. date -- (assign a date to; determine the (probable) date of; "Scientists often cannot date precisely archeological or prehistorical findings") 4. go steady, go out, date, see -- (date regularly; have a steady relationship with; "Did you know that she is seeing her psychiatrist?" "He is dating his former wife again!") 5. date -- (provide with a dateline; mark with a date; "She wrote the letter on Monday but she dated it Saturday so as not to reveal that she procrastinated")


Уфф! Весьма полно, не правда-ли? Приведенный выше вывод на самом деле усечен!

WordNet поставляется с tcl/tk фронтендом, который на самом деле никогда у меня не функционировал. Он кажется хочет старую версию tcl/tk. Я обычно вызываю его при помощи горячей клавиши (control-shift-E) при помощи вот этого небольшого скрипта , который использует gdialog для ввода и вывода. Я думаю что gdialog поставляется с большей частью дистрибутивов. Xdialog тоже весьма неплох и является подходящей заменой.

В том же духе, и чтобы показать как легко адаптировать скрипт, WORDS for LINUX (i86) латинский словарь, который вы можете использовать в той-же манере. Скрипт лежит здесь. На самом деле мне вероятно нужно сделать его копию, которая использовала бы showbook.pl... Теперь, почему бы нам не завершить нашу полку с книгами тезаурусом ? gThe придется точно к месту. Вы можете найти его здесь. Sampo Niskanen проделал прекрасную работу, используя свободно доступный тезаурус. Я хотел бы иметь графический интерфейс, который в тоже время принимал бы аргументы из командной строки. Нужно не забыть написать и спросить не собирается ли он заняться этим.


X


Растровые шрифты. В принципе какой-то комплект входит в поставку, но в RH 6.0 я взял более свежий с kiarchive. Встать в /usr/X11R6/lib/X11/fonts и распаковать. Появятся поддиректории cyrillic/{75dpi|100dpi|misc}. Шрифты из поставки можно удалить. В RH 6.2 я взял шрифты из дистрибутива.

Type1 шрифты. Взять с kiarchive(pfb-шрифты). А лучше взять шрифты вместе с pfm-метрикой в gpi (тогда fonts.dir и fonts.scale придется сделать самому). Можно еще взять afm-метрику в gpi. Создать в /usr/X11R6/lib/X11/fonts/cyrillic поддиректорию Type1 и положить шрифты туда. Из fonts.dir-scale.add сделать fonts.dir и fonts.scale (не забыть добавить 16 первой строчкой). Шрифты в формате pfa изготовляются из pfb-шрифтов программой pfbtops.

xfs. В RHL 6.0 все шрифты берутся от  xfs (X font server). Запускается в /etc/rc.d/init.d/xfs (по SIGHUP перезагружает конфигурационный файл). Конфигурационный файл - /etc/X11/fs/config. Команда catalogue определяет список директорий, из которых font server будет брать шрифты. Вписать нужный cyrillic/...dpi в начало списка, затем cyrillic/misc, cyrillic/другойdpi, cyrillic/Type1. Перезапустить xfs (/etc/rc.d/init.d/xfs stop; /etc/rc.d/init.d/xfs start). Только не надо делать это при работающем X сервере, он этого не любит.

locale. В XFree86 3.3. (X11R6) уже должен быть locale ru_RU.KOI8-R. Если нет, то можно взять на kiarchive (X11R5, X11R6). Чтобы его включить надо установить переменную LANG равной ru_RU.KOI8-R (например, в ~/.bashrc). Я попробовал... Gnome явно пытается говорить по русски, В заголовках окон у него это получается, а вот в остальных местах он пытается использовать ISO5589-5, которого у меня нет, пришлось отключить. В RH 6.2 (XFree86 3.3.6) русский язык уже почти везде нормально смотрится (на этот раз кроме заголовков окошек :).

Ввод. Правильный метод. Использование Cyrillic_* keysyms в XKB. Возникают проблемы со старыми программами. В XFree86 3.3.3 ошибка, приводящая к использованию ISO8859-5 таблиц вместо KOI8-R. Есть заплатка, позволяющая это дело поправить (если, конечно, есть желание самому собирать XFree86). Для того, чтобы включить русский ввод надо добавить
XkbKeymap "xfree86(ru)"
в секцию Keyboard файла XF86Config и установить переменную окружения LANG=ru_RU.KOI8-R. К сожалению, RHL 6.0 как раз включает ошибочную версию XFree86 3.3.3. К тому имеются проблемы с шрифтами у Gnome/enlightment

Ввод. Правильный метод в RH 6.2. Правый Alt работает как ModeShift (русские буквы вводятся, пока на нее жмешь). В XF86Config в секции Keyboard записываем (слова в кавычках являются именами файлов в соответствующих поддиректориях /usr/X11R6/lib/X11/xkb, слова в скобках - именами секций в соответствующих файлах):


LeftAlt Meta RightAlt ModeShift ScrollLock ModeLock (не работает) RightCtl Control XkbKeymap "xfree86(ru)" XkbRules "xfree86" XkbModel "pc101" XkbLayout "ru" (раскладка "йцукенг" - как в MS Windows, кроме символов над цифрами) закоментарить XkbKeycodes, XkbTypes, XkbCompat, XkbSymbols, XkbGeometry Улучшения для правильного метода в RH 6.2.

Можно keymap/xfree86 (секция ru) поменять en_US(pc105)+ru на ru(winkeys), чтобы в русском режиме вводились символы как на наклейках над цифрами. на моей клавиатуре оказались "лишние" кнопки с окошками, которые я приспособил для постоянного включения/выключения русского режима. В файле /usr/X11R6/lib/X11/xkb/symbols/ru добавил определение для левой кнопки с окошком:
key <LWIN>{ symbols[Group1]= [ ISO_Next_Group ] };
key <RWIN>{ symbols[Group1]= [ ISO_Next_Group ] }; переделать файл /usr/X11R6/lib/X11/xkb/symbols/ru под "яверты" Ввод. Обманный Xmodmap. Подстановка "улучшенного" Xmodmap в /usr/X11R6/lib/X11/xinit/.Xmodmap, который подменяет стандартную раскладку ISO8859-1 на KOI8-R. Может быть придется где-то вручную вызывать xmodmap /usr/X11R6/lib/X11/xinit/.Xmodmap (это должен делать xinitrxc или ~/.xinitrc, но всякое бывает). Прикладные программы после этого считают, что они имеют дело с обычными латинскими символами, а при вводе после нажатия CapsLock происходит преобразование в соответствии с клавиатурной раскладкой ЯВЕРТЫ. Нарушает все концепции интернационализации в X11. У меня не заработало в XFree86 3.3.3 (в прежних версиях работало отлично).

Ввод. Использование специальной программы перекодировки. Я опробовал Xruskb А. Лукьянова. Есть rpm в contrib. Единственный метод, который заработал у меня в RH 6.0. Опять-таки должны возникать проблемы с "правильными" прикладными программами. Запуск:
xrus yawerty-koi8.xmm
Переключение по кнопке или двум shift-ам.


X Keyboard Extension


English version.

Настройка XKB.

Еще один способ описания конфигурации XKB.

Немного о "внутренностях" XKB.

Файлы конфигурации XKB

Общие замечания о языке файлов конфигурации XKB.

Общее строение файлов конфигурации XKB. Файл типа xkb_keycodes.

Файл типа xkb_types.

Файл, типа xkb_compat.

Файл типа xkb_symbols.

Описание "действий".

Примеры изменения конфигурации XKB.

Новый тип для клавиши Enter.

Добавляем новую "старую" раскладку клавиатуры.

"Вариации на тему" переключателя "рус/лат" (и еще раз - "рус").

Еще несколько "переключателей".

Почему руссификация через XKB не работает?

Что делать с "неправильными" программами?

Программы, имеющие отношение к XKB.

Иван Паскаль pascal@tsu.ru



X сервер


Ключ "--nolisten tcp" отменяет прослушивание порта 6000 для общения с клиентскими программами по TCP/IP. После этого клиентские программы на этом же хосте, но из-под другого пользователя не запускаются.



X-Stranger, xstranger@tutby




Эта статья послана с Linux.HiTECH.BY
http://linux.hitech.by/



Xclip


xclip
от Kim Saunders

Xclip это очень простое приложение. Почему оно было неизвестно пользователям Линукс до сих пор - остается вне моего понимания.

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

Простой пример. Предположим, вы хотите послать вашему другу листинг директории; нет проблем. Просто введите "ls | xclip" в ближайшей консоли и затем щелчком средней клавиши вставьте его в ваш e-mail. На самом деле стандартный вывод любой программы можно перенаправить по каналу (pipe) в xclip: 'whois', 'showbook.pl' или любой другой.

В комбинации со скриптом, предназначенным для захвата выделенного текста, он становится еще более полезен. Предположим, вы только что ввели не отсортированный список, но вы хотите, чтобы он был отсортирован по алфавиту. Выделите список мышкой, нажмите, скажем alt-shift-S и затем щелчком средней кнопки вставьте уже отсортированный список ! Этот прием можно использовать чтобы делать самые разнообразные вещи: суммировать столбец цифр, делать блоки комментариев в стиле баннера, быстрые заметки ....

Вот скрипт на python, который использует библиотеку wxWindows чтобы делать все вышеперечисленное. Просто назначьте его на различные горячие клавиши, используя соответствующий ключ командной строки (т.е. 'clipmanip.py -c' чтобы создавать блоки комментариев).



Xfs


dmapi

logdev=device ? путь к устройству, на котором будет размещён журнал

osyncisdsync

quota / usrquota / ugnoenforce

grpquota / gqnoenforce



XFtree


Это - штатное средство для управления файлами из интегрированной среды XFce, описанной в предыдущей саге. Он имеет древовидную структуру, начинающуюся по умолчанию от /$HOME, которая может разворачиваться и сворачиваться.

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

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

А также несколько действий по переходу - к закладке, на уровень выше и т.д.

Копирования и перемещения файлов в меню не предусмотрено. Первое осуществляется просто перетаскиванием выделенных элементов (множественное выделение - как в Windows, мышью при нажатых Shift или Control), в том числе и между разными окнами XFTree (их можно открыть сколько угодно); а вот перемещения я вообще не нашел.

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

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

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

А посему, возможно, вам покажется, что лучший выбор все же - это



Xkbcomp


Это самая важная программа. Во всяком случае, она отрабатывет каждый раз при старте "иксов" для того, чтобы перевести файлы конфигурации XKB в бинарный формат, понятный самому X-серверу. (Как понятно из названия, это - "XKB compiler").

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

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

Последнее тоже важно. Поскольку полная конфигурация складывается из содержимого многих файлов/блоков (не забудьте, что в любом файле может быть 'include'), понять - что же должно получится в результате такого "сложения" - не так-то просто. С помощью xkbcomp можно "вытащить" из X-сервера "суммарную" конфигурацию (в виде полной xkb_keymap).

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

hostname:dispalay_number.screen_number

В простейшем случае, когда X-сервер запущен на вашей же машине, причем - только один и с одним "скрином", эта последовательность выглядит как ":0".

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

xkbcomp :0 outfile

(можно даже не указывать outfile, в этом случае программа сама сочинит имя для выходного файла, типа - server-0.xkb).

Обратите также внимание на ключи -a (all) и -dflts (defaults). С ними выходная информация будет более полной.

Соответствено, для загрузки новой конфигурации можно использовать команду

xkbcomp xkbfile :0

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

Кстати, эти файлы xkbcomp ищет сначала в текущей директории и, если не находит, то в "базе данных" конфигураций (X11R6/lib/X11/xkb/).

Примеры составления своих файлов конфигурации для "подсовывания" их xkbcomp можно посмотреть в

"Примеры изменения конфигурации XKB: Где будем экспериментировать."