Дисплей
Рассмотрим немного подробнее ту часть syscons, которая отвечает за вывод символов на экран дисплея.
Шрифты
Дополнительные таблицы перекодировки (screenmap)
Режим отображения (колличество строк и символов на экране)
Screen saver
Для чего используется учетная карточка?
А вот это - очень не простой вопрос.
Конечно, основное назначение учетной карточки - зарегистрировать юзера, чтобы он мог войти в систему и поработать на этой машине. Однако, существует некоторые нестандартные применения для этого механизма, в которых используются скорее "побочные эффекты" регистрации пользователя.
Обычные юзеры
Псевдо-юзеры
Почтовые юзеры
"Гостевой вход"
Автоматический запуск коммуникационных программ
Для чего пользоваться VMware?
1. Первая причина -- это когда она вам действительно необходима. Например, на работе я пользуюсь ноутбуком, который делят со мной еще несколько человек (не являющимися пользователями Linux) и делают это, в основном, по производственной необходимости:
должна работать Windows 2000 нельзя разметить диск, как двух-загрузочный
С другой стороны, я прохожу курс по созданию и администрированию web-сайтов с Apache и PHP, для чего желательно использовать ноутбук с Linux и X Windows[*1]
2. VMware создает виртуальную машину, которую можно сконфигурировать по своим требованиям, независимо от реальной аппаратной конфигурации компьютера. К примеру, по умолчанию на жестком диске создается файл на 4 Гб для эмуляции диска виртуальной машины. [*2] Для нее этот файл выглядит как SCSI-диск, являющийся на самом деле файлом на IDE-диске.[*3] Также по умолчанию IDE CD-привод используется только как... IDE CD-привод. Хотя можно указать, чтобы он воспринимался как SCSI-привод, либо установить ISO-образ CD-ROM'а в виде привода с установленным в него диском (например, для инсталляции). Можно пользоваться аппаратными средствами, которых в действительности нет. Например, ленточные приводы. Интересная особенность открывающая простор для экспериментов.
3. Кроме того, можно одновременно запустить несколько виртуальных машин и установить на своем компьютере локальную виртуальную сеть между разными операционными системами. Это удобно, чтобы
ознакомиться с новой ОС без выделения раздела на диске (удалить можно простым щелчком мыши :-) посмотреть, как новая ОС интегрируется в существующую сеть, перед тем, как форматировать (что иногда неприемлемо) компьютер с помощью LCD-проектора показать, как интегрируются несколько ОС
4. Если необходимая программа не работает в основной операционной системе, то ее можно запустить "под виртульаной машиной".
Довольно интересно решается проблема пользователей Linux, которым нужны программы, доступные только в Windows (как правило, коммерческие). Была некоторая проблема с текстовыми процессорами и электронными таблицами, пока StarOffice и OpenOffice не стали общедоступными. Хотя у меня сейчас возникают обратные проблемы -- я нахожу интересную программу под Linux, для которой сложно найти версию для Windows, либо вообще нет свежей версии. Несколько примеров: средства построения математических графиков, такие как gnuplot и scilab, или просто любимые мною пользовательские программы (например, Evolution).
Для директорий
Первый бит ("r") разрешает читать оглавление этой директории, то есть список файлов и поддиректорий, находящихся в ней. Однако, этот бит еще не дает возможность зайти в эту директорию (командой cd) или получить доступ к содержимому, то есть читать/запускать/изменять файлы, даже если "права доступа" установленные на самих файлах это позволяют. Поэтому, само по себе "право чтения" директории практически бесполезно и этот бит, как правило ставиться только вместе с битом "x". Немного забегая вперед, рассмотрим сразу третий бит - "x". Для директорий он как раз означает, что юзер может получит доступ к "компонентам", то есть отдельным файлам и поддиректориям. Только при наличии это бита, система разрешит войти в эту директорию и выполнить какое-нибудь действие с файлом, если сами файлы ("права доступа" на них) это позволят. Кстати, обратите внимание, что если даже внутренние поддиректории имеют "нормальные" права для какой-то категории юзеров, а вышестоящая директория - нет (отсутствует бит "x"), то этим юзерам не удастся "занырнуть" в поддиректории, минуя вышестоящую. Система проверяет полный "путь" до конечной директории или файла (например, /usr/share/misc/fonts) и, если хотя бы один из компонентов этого пути не имеет соответствующего бита, то юзеру будет отказано в доступе. Наконец, бит "w", установленный на директории, позволяет изменять оглавление директории. То есть, разрешает создавать новые файлы (или копировать другие файлы в эту директорию), менять названия файлов и удалять файлы.
Обратите внимание на "разделение полномочий" между теми permissions, которые стоят на файле и теми, которые на директории.
Как уже говорилось, если права на директорию не позволяют юзеру удалить файл, находящийся в ней (нет бита "w") это не означает, что юзер не сможет "удалить содержимое" файла (например, "вытерев" все в нем редактором).
С другой стороны, если юзер имеет право менять содержимое директории, он сможет удалить или переименовать любой, находящийся в ней файл, даже если права на самом файле не позволяют ему не то что писать в файл, но и читать его.
(Правда, тут есть некоторые нюансы, смортри "Флаги")
И еще на что следует обратить внимание. Никакие из перечисленных здесь прав не имеют отношения к изменениям самих "атрибутов доступа", то есть - владельца файла, группы и permissions. Их изменение подчиняется другим законам, о которых будет сказано ниже (смотри "Как поменять...").
И последнее замечание. Все эти биты не имеют никакого эффекта для юзера root (и программ, которые во время выполнения поменяли свой "эффективный userID" на "рутовский"). То есть, он может делать с файлом или директорией все что хочет.
Правда, и здесь есть одно исключение. Поскольку бит "x" на файле является основным признаком "исполняемости" этого файла, даже root не сможет убедить систему, что файл является программой и его можно выполнять, пока не поставит в атрибутах этот бит.
Далее...Дополнительные биты доступа
Иван Паскаль pascal@tsu.ru
Для файлов
Первый бит, обозначается буквой "r" (read), и означает, что юзеру, подпадающему под соответствующую категорию, разрешается читать содержимое этого файла. То есть он может посмотреть содержимое файла, а также скопировать этот файл. Кстати, это не означает, что юзер сможет запустить его на выполнение (если это программа). Второй бит, обозначается буквой "w" (write) и разрешает писать в файл. То есть юзер сможет изменить содержимое файла (например, каким-нибудь редактором), дописать что-нибудь в конец или стереть все содержимое. Обратите внимание, этот бит еще не дает право удалить сам файл из директории или изменить ему название (это определяется правами на саму директорию), но дает возможность сделать этот файл пустым (нулевой длины) или скопировать в него содержимое другого файла (и тем самым "подменить" его). И, наконец, третий бит, обозначается буквой "x" (eXecute), позволяет запустить на выполнение этот файл, если он представляет собой программу или командный файл. Обратите внимание, что это также основной признак, по которому система догадывается о "запускаемости" этого файла. Часто начинающие пользователи составив какой-нибудь командный файл, забываю установить на него бит "исполнения" хотя бы для себя - владельца этого файла. В результате, при попытке запустить его, система сообщает, что "вы не имеете права" (выполнять этот файл). Естественно, что в данном случае причина не в том, что "злобный" администратор существенно "урезал" права этого юзера, а в том, что он сам забыл "наделить себя правом" (вполне законным).
Обычно права на файл (например, для "всех остальных") устанавливаются
--- никаких прав (нельзя ни читать, ни изменять содержимое) r-- только чтение rw- и чтение и запись (изменение) файла.
Если файл является "исполняемым", то права могут выглядеть
--- опять же, никаких прав (читать нельзя, запускать нельзя) r-x можно запустить файл-задачу на выполнение rwx можно не только запустить, но и что-нибудь в нем поменять
Остальные сочетания (например -w- или --x) кажутся бессмысленными.
Однако, это не всегда так. Рассмотрим подробнее.
Права -w- означают, что юзер из соответствующей категории не может прочитать этот файл, но может в него писать.
Конечно, для "исполняемого" файла это сочетание бессмыслено (запустить как задачу нельзя, но "покорежить" что-нибудь внутри - пожалуйста).
Однако, если этот файл представляет собой что-то вроде "лога" или почтового ящика, то такие permissions могут иметь смысл. Например, вы допускаете, что другие юзеры (или какие-нибудь программы-автоматы) будут дописывать сюда свои "донесения", но не хотите, чтобы те же юзеры могли посмотреть - что туда понаписали другие.
Правда, при этом никто не мешает тем же юзерам просто не читая, записать в этот файл что-нибудь, "похоронив" при этом все старое содержимое файла. Или даже скопировать туда файл нулевой длины (или /dev/null), при этом, естественно, вообще никакого "содержимого" у вашего файла не станет. Однако, чтобы предотвратить такую ситуацию можно поставить на тот же файл флаг "только дозапись". Он не помешает вам читать свой файл, а другим юзерам дописывать в него что-нибудь. Правда, не даст даже вам стирать из файла все лишнее или удалить файл, пока вы не "снимите" флаг.
Теперь посмотрим на исполняемые файлы.
Права --x на самом деле вполне законная комбинация. Она означает, что запустить эту задачу можно (и получить от нее какой-то результат). Нельзя только скопировать этот файл себе или "залезть" в него отладчиком.
Поэтому, такие permissions даже полезны, если вы хотите сохранить свою "интеллектуальную собственность".
Комбинация -wx, пожалуй, смысла не имеет (как и просто -w- на исполняемом файле). Вы просто даете возможность изменить содержимое, причем "вслепую" (поскольку посмотреть это содержимое нельзя). Результатом может быть только порча вашего файла.
Также можно отнести к бессмысленным и права r-- на исполняемом файле. Если вы хотите таким способом "подразнить" кого-то (вот есть такой файл, можно посмотреть - как он внутри устроен, а выполнить нельзя), то не обольщайтесь. Другой юзер спокойно может скопировать этот файл себе, при этом он становится полноправным владельцем полученной копии. После этого он поставит на свою копию такие права, какие ему захочется и, все таки, запустит его.
Дмитрий Карпов
Источник: http://w3.misa.ac.ru/prof/techsupp/ftintro.htm
Как известно всем, кто занимался этим вопросом, информация обычно хранится на магнитных, а также на магнито-оптических и оптических носителях - жестких и сменных дисках. Жесткие диски и дисководы CD-ROM в большинстве имеют интерфейс IDE, реже - SCSI; дисководы используют интерфейс {MFM}; съемные дисководы типа Iomega ZIP помимо IDE и SCSI нередко подцепляются через LPT или COM-порты; в особо ответственных случаях используется энергонезависимая Flash-память. Все эти интерфейсы предельно примитивны и обеспечивают прямой доступ на наивозможно низком уровне для предоставления максимальной гибкости программному обеспечению (операционной системе) в размещении информации.
/* С одной стороны, мне бы хотелось, чтобы диск взял на себя больше работы; с другой стороны, учитывая современные тенденции, наверняка производители с самого начала реализовали бы самые примитивные схемы, а потом ради совместимости никто бы не решился что-либо изменить. Например, из-за такой совместимости диск IDE вынужден скрывать свою истинную конфигурацию, притворяясь, что у него на каждом треке одинаковое количество секторов. */
Все эти интерфейсы весьма неудобны как для пользователя, так и для программиста - в них нет ни учета занятого/свободного места, ни предоставления доступа по имени (во всех этих интерфейсах используется числовая адресация); к тому же в большинстве из них доступ производится только блоками размером от 256 до 8192 байт (по степеням двойки). Чтобы предоставить программисту и пользователю более удобный интерфейс, в меньшей степени зависящий от физической природы носителя, практически во все операционные системы включен такой компонент, как драйвер файловой системы (да обычно и не один, а несколько).
Технология современных файловых систем пошла от Unix: файл является набором байтов, которые можно читать как поодиночке, так и (что гораздо быстрее) пачками.
/* Для тех, кто интересуется историей, могу сообщить, что более древние файловые системы были организованы как базы данных, так что файл состоял из отдельных записей. Желающие могут посмотреть организацию работы с файлами в языке Fortran - она явно наследует принципы тех машин, на которых создавался Fortran. Многое оттуда унаследовано и языком Pascal, а вот язык C Кернигана и Ритчи имеет все признаки того, что он - радной для Unix. */
Но помимо данных, собственно содержащихся в файле, хотелось бы знать, для чего предназначены эти данные, как с ними можно обращаться.
Прежде всего, в любой файловой системе существуют два типа файлов:
обычные, доступные программам напрямую; директории, содержащие списки других файлов и их атрибутов (списки, но не сами файлы), доступные только операционной системе (впрочем, ряд атрибутов доступен программам только-для-чтения, а то и для-изменения, но никак не напрямую);
плюс к тому в некоторых системах существуют специальные файлы, через которые осуществляется доступ к устройствам компьютера; в DOS примером могут быть файлы COM?, LPT?, PRN, CON, а в Unix - все файлы в директории /dev/.
Данные, содержащиеся в обычных файлах, тоже могут быть различны. Нередко тип данных можно определить прямо по их формату. Простейшая класификация:
текстовые:
семибитные - содержат только символы с кодами от 0x20
до 0x7E, а также знаки конца строки и табуляции; знаки с кодами от 0x00 до 0x1F и 0x7FDelete считаются непечатными; вдобавок к этому конец строки на разных платформах различается -
Unix использует 0x0A, Acorn и " - 0x0D, DOS и Windows - пару 0x0D+0x0A, хотя многие программы понимают и эти символы по отдельности;
восьмибитные - дополнительно к семибитным содержат символы с кодами от 0x80 до 0xFF; вторая половина алфавита может интерпретироваться по разному в зависимости от используемого языка и кодировки (для руского языка есть аж пять кодировок); (вообще-то текст должен иметь еще ограничения на длину строки - желательно не выходить за 80 символов (ширина большинства текстовых экранов), а если не получается - то за 128, 256 или хотя бы 4096 символов); двоичные - все, которые не текстовые. хотя если случайно двоичные данные будут содержать только символы, разрешенные в текстовых форматах, это еще не значит, что с ними можно обращаться как с текстом. В виде текста хранятся многие форматы - собственно текст, HTML, LaTex, программы на языках Basic, C, Fortran, Pascal и многих других, файлы редактора ChiWriter, почтовые сообщения (обычно формат MIME), /.../; а уж разнообразие двоичных форматов и вовсе неичислимо. Иногда формат файла можно угадать по его структуре или сигнатуре (характерному признаку, обычно специально внесенному в формат файла), но все это недостоверно (например, может оказаться, что файл, содержащий набор случайных чисел, содержит любую сигнатуру); так что хотелось бы иметь более четкий критерий. В Unix имеется утилита file, которая по содержимому файла (хотя, возможно, привлекаются соображения, основанные на имени файла и атрибутам доступа) на основании некоторых эмпирических правил определяет и сообщает пользователю тип файла.
Ситуация осложняется тем, что многие операционные системы должны работать с несвойственными для них файловыми системами имея прямой доступ к диску с неродной файловой системой или имея по сетИ доступ к серверу. При этом воникают проблемы уже на уровне имен файлов:
Одни операционные системы считают прописные и строчные буквы разными (Unix); другие учитывают разницу между ними при создании файла, но игнорируют при дальнейших обращениях (Acorn, Windows'9x/NT); третьи приводят имя файла к прописным буквам (CP/M, DOS). В разных операционных системах имеется разный набор символов, допустимых в имени файла. Во всех системах допустимы латинские буквы, цифры и подчеркивание '_'. Максимально допустимая длина имени файла в разных файловых системах разнлича. При несовпадении максимально допустимых длин или наличии "неподходящих" символов производится либо усечение имени, либо замена по определенному алгоритму (наиболее распространеная замена: последние несколько символов заменяются на тильду и номер либо на тильду и hash-функцию имени). Кроме того, каждая файловая система имеет свои атрибуты доступа к файлам, зависящие от стратегии распределения прав пользователей, и свои дополнительные атрибуты, зависящие от фантази авторов систеы. Обычно разработчики стараются транслировать права доступа к файлу (перевести в формат, используемый в данной операционной системе) по определенным правилам
Например, Unix имеет правА на чтение, запись и запуск для хозяина, для группы и для всех остальных; в DOS и Windows'9x при доступе по сетИ транслируются
в атрибут 'read-only' право на запись в соответствии с пользователем и его группой, под которым клиент DOS/Windows подсоединисля к серверу и в атрибут 'hidden' - наличие точки в начале имени файла.
Бывают и более сложные правила трансляции в зависимости от типа файла.
Простейший и наиболее универсальный (наименее платформенно-зависимый) способ состоит в том, чтобы зафиксировать тип данных в имени файла - имя ведь передается всегда и по возможности с наименьшими искажениями. По традиции тип файла отображают по возможности осмысленной аббревиатурой в конце имени файла, называемой "расширением имени файла" ("filename extension"), и для отделения используют точку '.' /* AcornOS, которая использует точку как разделитель имен директорий, там где Unix использует прямой слэш '/' а DOS/Windows - обратный '\', позволяет использовать вместо точки прямой или обратный слэш, но никто, кроме DOSFS, позволяющей работать с FAT-дискетами, не рассматривает слэши как разделители. */
Чаще всего стараются обойтись тремя символами в аббревиатуре; в RSX-11, CP/M и FAT это зафиксировано непосредственно в формате хранения имени файла, где точка является спец.символом, может присутствовать в имени файла только один раз - между основным именем и расширением, и не хранится в имени файла, а "вытекает из формата имени". В UFS (Unix), HPFS (OS/2), NTFS (Windows'NT) и NetWare нет такого ограничения, там точка является обычным символом имени файла, а ее специфическое значение распознается прикладными программами, если программист реализовал это в своей программе, но не отображается в формате файла. В VFAT работа с "длинными именами", не влезающими в формат "8.3" ("восемь букв на имя, точка, три буквы на расширение"), реализована довольно искусственно, для сохранения доступа программ, использующих простой FAT, в директории хранятся два имени - "короткое 8.3" и "длинное".
Иногда данные, имеющие какой-либо тип, последовательно "упаковываются" несколькими архиваторами; в этом случае возникают такие расширения как .tar.gz, обозначающее архив tar, подвергнутый gzip-компрессии (часто встречается в Unix), или .c.zip.uue, обозначающее пограмму на языке C, заархивированную программой zip и преобразованную uuencode для передачи по электронной почте без присущих ей искажений (выдумано мной для примера).
До скорых встреч!
Кроме приведенных в этой пробной статье, у меня в запасе есть еще несколько потенциальных рубрик. Например, "Ядреное слово" – о деталях реализации и функционирования базовых компонентов ОС Unix. Напишите о своих предложениях относительно возможных рубрик, их названий, вопросы, которые вам кажутся наиболее важными и интересными. Конечно, я не обещаю ответить на любой вопрос, ноѕ попробую – сам или с помощью своих коллег.
Присылайте свои вопросы и пожелания по электронной почте по адресу oblakov@bigfoot.com.
Добавление пространства для подкачки
При росте системы может расти и требование к объему виртуальной памяти. Хотя добавление дискового пространства для подкачки в случае уже имеющихся дисков является очень сложной задачей, можно подготовить новый диск с дополнительным пространством для подкачки.
Для добавления пространства подкачки при добавлении диска к системе:
При разбиении диска на разделы, отредактируйте метку диска, выделив некоторое объем диска для раздела `b', а остаток распределив в другие разделы, например, `a' или `e'. Размеры указываются в блоках по 512 байт.
При создании новых файловых систем на диске, НЕ делайте этого для раздела `c'. Вместо этого выполните создание новых файловых систем для разделов, не содержащих пространство для подкачки.
Добавьте такую строчку в файл /etc/fstab:
/dev/ad0b none swap sw 0 0
Замените здесь /dev/ad0b на имя устройства с только что добавленным пространством.
Чтобы сделать пространство для подкачки немедленно доступным, воспользуйтесь командой swapon.
# swapon /dev/da0b
swapon: added /dev/da0b as swap space
Добавляем новую "старую" раскладку клавиатуры
Рассмотрим - как добавить еще одну группу с другой расскладкой клавиатуры.
Зачем это может понадобится?
Ну, например, проблема (описанная в "Почему руссификация не работает?") - у вас есть программы, в "бинарниках", статически слинкованные, которые напрочь отказываются понимать коды типа Cyrillic_*. Можно специально для них изготовить раскладку, в которой будут не двубайтные коды русских букв, а однобайтные коды KOI8-R.
Возможно, вам захочется добавить раскладку в кодировке cp1251 или еще какой-нибудь, которая отличается от стандартной расположением русских букв.
(Надо заметить, что этот путь (добавление новой кодировки русских букв с помощью дополнительной группы) - в общем-то, плохое решение. Тем более, если вы не используете новую locale. Правильно было бы - добавить соответствующую таблицу перекодировки в Xlib и изготовить подходящую "иксовую" locale.
Но, как я уже сказал, я не предлагаю правильные решения :-), а только привожу примеры - как это можно сделать.)
Итак, давайте в этом примере сосредоточимся на задаче - добавление "однобайтной koi8-r кодировки" для "старых" или "тупых" клиентских программ.
Прежде всего, надо заметить, что у вас должны быть задействованы уже две группы. Первая - "латиница", вторая - "кириллица" с "правильными" кодами для русских букв (Cyrillic_*).
Новую группу надо добавлять не "в конец" (как третью), а "в середину" - так чтобы она была второй, а "правильная" кириллица - третьей.
Почему? Потому, что "традиционные" программы (со старой Xlib) понимают только первую и вторую группу. Причем, вторую выбирают тогда, когда установлен модификатор, соответствующий символу Mode_switch. Ну, об установке модификатора позаботится "таблица" совместимости XKB. Если она у вас стандартная, то соответствующий модификатор будет выставляться для всех групп, кроме первой (то есть, в нашем случае и для "старой" кодировки и для "новой").
А вот искать символы "старые" программы будут всегда только во второй группе (об остальных они даже не подозревают). А "новые" программы, совместимые с XKB и так найдут свою раскладку, будь она во второй, третей, или даже в четвертой группе.
Еще одно замечание. Естественно, добавлять новые символы мы будем в xkb_symbols. При этом будет логично не писать ее "с нуля", а взять за основу уже существующий файл symbols/ru и дополнить его. Если мы наш файл "приплюсуем" к соответствующему описанию xkb_symbols, то у нас получится два фйла описания одних и тех же клавиш, при этом второй полностью переписывает первый.
Поэтому, логично, если мы из описания вообще выкинем "стандартный" файл "ru", а оставим только свой.
То есть соответствующая строчка в нашем "полном описании конфигурации" будет выглядеть не как
xkb_symbols { include "en_US(105)+ru+new-ru" };
а немного короче
xkb_symbols { include "en_US(105)+new-ru" };
Итак. Берем в свою директорию файл symbols/ru и начинаем его "корежить".
Надо заметить, что, скорее всего в нем вы обнаружите три блока -
xkb_symbols "toggle" {...}; xkb_symbols "shift_toggle" {...}; xkb_symbols "basic" {...};
Причем, реально расположение русских букв описывает только третий, а первые два просто добавляют два разных способа преключения "рус/лат".
Обычно, если у вас в полной конфигурации указан просто файл ru, загружается первый блок. И переключателем "рус/лат" становится клавиша CapsLock.
Во-первых, для нашей задачи это очень плохо (то, как описаны символы для этой конопки). Но об этом поговорим немного позже.
А сейчас я предлагаю просто выкинуть ("вычистить") два первых блока и оставить только блок "basic". А переключатель допишем потом прямо в блок "basic", или "приплюсуем" подходящий блок из файла symbols/group (в нем описано аж шесть разных способов переключения).
Итак. Выкинули два первых блока и начали исправлять/дополнять блок "basic".
Нам нужно для каждой кнопки, которая в описаниях содержит символы Cyrillic, дописать в середину (второй группой) еще одну группу с однобайтными символами в кодировке koi8. Напомню, что символы можно задавать не только символическими именами (типа Cyrillic_*), а просто цифровым кодом. Например, клавишу
key <AB01> { [ z, Z ], [ Cyrillic_ya, Cyrillic_YA ] };
мы должны описать как
key <AB01> { [ z, Z ], [ 0xd1, 0xf1 ], [ Cyrillic_ya, Cyrillic_YA ] };
Естественно, первый код соответсвует маленькой букве, а второй - большой.
Как подобрать коды? Ну, во-первых, по названию букв можно догадаться - какую русскую букву они имеют ввиду и, если у вас есть под рукой табличка - какой русской букве, какой код koi8-r соответствует, просто переписать оттуда.
А во-вторых, могу подсказать, что младший байт кода Cyrillic на самом деле соответствует коду этой буквы в koi8, а в старшем байте всегда шестерка.
Поэтому, можно взять файл, в котором описываются числовые значения для кодов типа Cyrillic_* - это файл /usr/X11R6/include/X11/keysymdef.h. И списать соответствующие коды оттуда, отбрасывая первую шестерку.
Особо ленивые могут взять готовый файл здесь.
Итак, мы составили новый файл описания клавиатуры, в котором теперь три группы. Надо не забыть о переключателе меджу группами.
Во-первых, надо заметить, что все варианты переключателей используют для своих целей специальный символ - ISO_Next_Group, а его семантика, описанная в xkb_compat такова, что он просто перебирает все возможные группы. То есть, при нажатии клавиши (или комбинации клавиш) с таким символом просто текущее значение группы увеличивается на единицу, а когда счетчик доходит до последней группы, он просто возвращается на первую (см. "Внутренности":"Методы выравнивания номера группы").
Таким образом тем же самым перключателем "рус/лат" мы можем последовательно перебирать все три группы.
Вы можете выбрать ваш любимый способ переключения из файла symbols/group
и "приплюсовать" его к описанию xkb_symbols, например,
xkb_symbols { include "en_US(105)+new_ru+group(shift_toggle)" };
Только одно замечание о переключении клавишей CapsLock.
Дело в том, что традиционно на эту же клавишу "подвешивают" и символ Caps_Lock, чтобы она могла выполнять и свою основную функцию (нажатая с Shift'ом).
Проблема в том, что к этому символу присоединен реальный модификатор Lock. При этом, в конечном счете, XKB привязывает реальные модификаторы не к символу, а к скан-коду клавиши. Поэтому при нажатии этой клавиши в "состоянии модификаторов" появится не только модификатор, который указывает на то, что выбрана альтернативная группа, но и реальный модификатор Lock
(хотя вы нажимаете клавишу как ISO_Next_Group, а не как Caps_Lock).
В результате, клиентская программа увидит, что вы не только выбрали альтернативную группу, но "намертво" прижали Shift (хотя Shift должен отменять действие Lock, но... почему-то не работает). Естественно, при этом жми, не жми Shift - у вас всегда будут получаться только маленькие (или только большие буквы).
Для того, чтобы этого не происходило, надо бы "отцепить" реальный модификатор Lock от этой клавиши. К сожалению, "привязка" модификатора к символу Caps_Lock
"зарыта" глубоко в файлах, которые "инклюдятся" в en_US. А отменить это присвоение в дополнительных файлах уже нельзя.
Поэтому, чтобы не "перелопачивать" все файлы, которые неявно включаются в нашу полную конфигурацию, лучше просто убрать символ Caps_Lock из описания клавиши <CAPS>.
Если вам жалко расставаться с этой функцией - "подвесьте" ее на какую-нибудь другую клавишу. А если вы используете для "рус/лат" другой способ - то и описанной проблемы у вас не будет.
Итак. Если ваш любимый способ переключения - клавиша CapsLock, то последнее, что нам надо сделать - не "приплюсовывать" этот способ из файла symbols/group
(там эта клавиша с кодом Caps_Lock), а просто вписать в нашу новую раскладку определение для клавиши <CAPS> -
key <CAPS> { [ISO_Next_Group] };
Теперь можно прегрузить конфигурацию программой xkbcomp и посмотреть результат.
Кстати, забавно, что "старые" программы теперь работают когда у вас включена и вторая группа и третья. Потому, что они в обоих случаях видят в "состоянии модификаторов" модификатор, который указывает, что включена альтернативная группа, а коды символов всегда берут из второй группы. То есть, для них не заметна разница между двумя состояниями XKB (включена вторая или третья группы).
Интересно, что некоторые "новые" программы, например - xterm, тоже правильно работают с обоими группами. Потому, что... фиг его знает - почему :-)
Единственное неудобство - сложное переключение групп (особенно, если вы не пользуетесь никаким индикаторами перключения групп). Очень непривычно, когда переключатель "рус/лат" вдруг обретает не два, а три состояния.
А вот о том, как сделать переключение между тремя (и больше) группами более приятным, мы рассмотрим в следующем примере -
Документ Эриксона по восстановлению каталога
Из него мы научились находить удаленные файлы в каталогах. Мы следовали инструкциям. Скрипт из седьмого раздела потребовал доработки для нашей версии debugfs
#!/bin/sh
awk '{ print "mi <" $1 ">\n"\
"\n\n\n\n\n\n\n"\
"0\n"\
"1\n"\
"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n" }'
И все равно, у нас не получилось найти имена каталогов и перейти к восьмому разделу. Нужно было искать еще что-то.
Документ Крэна по восстановлению удаленных файлов
Этот документ, найденный в Проекте документации по Linux, научил нас, как найти i-ноды (иными словами блоки) удаленных файлов и как их можно восстановить командой dump утилиты debugfs. Изучение закончилось массой файлов в одном каталоге. Но все равно, это была лишь малая часть из них. Как уже указывалось ранее, полное по-файловое восстановление по схеме приведенной в HOWTO Крэна невозможно в нашем случае.
Документация
Linux Documentation Project зеркало Linux Documentation Project виртуальная энциклопедия Russian LDP ссылки на opennet.ru (400 kB) там же, но классифицированные ссылки на ru.linuxstart (куча мала на 600 кБ) команда man (чтобы работала man -k, должна быть создана поисковая база whatis: /etc/cron.weekly/makewhatis.cron) директория /usr/doc (LDP, HOWTO, FAQ) CD с документацией из полного комплекта RedHat Получить список документации, связанный с конкретной командой можно используя
rpm -qdfполное-имя-команды команда locate для поиска файла команда info
"Домашнее задание" для компьютера
В настоящей статье будет рассмотрен вопрос о том, как заставить компьютер в указанное время выполнить какую-то задачу без вашего непосредственного участия. Дать ему, так сказать, "домашнее задание", а самому заняться какими-то другими делами, уйти гулять или просто лечь спать.
Уточню, что будет рассматриваться случай, когда компьютер работает под управлением операционной системы Linux (если еще точнее, то рассматривается случай дистрибутива Red Hat 7.3) и для решения поставленной задачи используются только системные средства, а не какие-то специально разработанные программы. Таких средств в Linux три: это демоны crond, anacron и atd, для управления которыми имеются специальные утилиты. Все это хозяйство и будет рассмотрено в данной статье.
Домашняя страница
Последнюю версию этого документа можно найти на From Powerup To Bash Prompt также как и сопутствующий материал ``Building a Minimal Linux System from Source Code''.
Перевод на французский: From Powerup To Bash Prompt спасибо Dominique van den Broeck. Японский перевод Yuji Senda ожидается, если его ещё нет на Japanese Documentation and FAQ Project
Дополнения (completitions)
Дополнения обеспечивают набор строки за вас. Оно может быть в разных формах, но для его выполнения (обычно) используется клавиша TAB.
В zsh дополняться может все что угодно: имена и пути файлов; имена встроенных и внешних команд, а также их ключи; имена переменных среды; имена пользователей и компьютеров, а также многое другое. zsh имеет в своей поставке некоторое количество определений дополнений для основных программ операционных систем.
Существует несколько форм задания дополнений в командной строке. Ниже приведены краткие описания этих форм.
Дополнения с использованием compctl
Данный метод аналогичен по настройке тем дополнениям, что применяются в csh & tcsh и является немного устаревшим, так что новые пользователи скорее всего предпочтут использовать другие методы определения дополнений, но он все равно поддерживается текущими версиями zsh.
Задание дополнений с помощью данного метода имеет общую форму
compctl ключи [command ...]
Определение дополнения начинается с ключевого слова compctl и заканчивается списком команд для которых будет действовать дополнение.
Ключи определяют типы параметров которые будут подпадать под дополнение (ключи командной строки, списки выполняемых заданий, и т.п.).
Ключ -k указывает, что параметры, которые будут дополняться, будут переданы в массиве. Это ключ очень полезен, когда у вас списки параметров приведены в файле, или заданы в явной форме. Так, можно явно задать список серверов, имена которых будут дополняться при использовании команды ssh.
compctl -k "( server1 server2 )" ssh
в том случае, если у вас много серверов, то вы можете перечислить их в файле и вместо явного перечисления указать в скобках команду для получения содержимого нужного файла (в нашем примере пусть это будет ~/.servers):
compctl -k "( ` cat ~/.servers ` )" ssh
Ключ -K позволяет пользователю указать функцию, которая будет вызываться для получения списка дополняемых параметров.
Другие ключи команды compctl описаны в справочном руководстве по zsh.
Дополнения, специфичные для отдельных типов операционных систем
Этот раздел содержит дополнительные требования и рекомендации, которые применимы только для отдельных операционных систем. Материал в этом разделе не должен противоречить основному стандарту.
Previous: /var/yp : Файлы базы данных сетевой информационной системы NIS (optional)
Next: Linux
Up: Оглавление
Translated by troff2html v1.5 on 29 March 2002 by Daniel Quinlan
Дополнительные биты доступа
Бит suid.
Бит sgid
Бит sticky
Кроме рассмотренных выше битов (чтение,запись и "исполняемость"), которые устанавливаются раздельно по трем категориям юзеров, есть еще три бита доступа, которые можно отнести к файлу в целом, поскольку их действие не зависит от того какой юзер (в смысле из какой категории) пытается обратиться к файлу. Да и смысл этих битов состоит не в ограничении доступа к файлу (директории). Они изменяют некоторые свойства файлов или директорий.
Дополнительные файлы в /sbin:
Неизменяемые исполняемые файлы:
{ ldconfig, sln, ssync }
Статические исполняемые файлы ln (sln) и sync (ssync) используются в тех случаях, когда нормальный ход вещей нарушается. Основное назначение sln (восстанавливать некорректные символические ссылки в /lib после плохо организованного обновления) потеряло теперь былую важность, потому что имеется программа ldconfig (обычно расположенная в /usr/sbin), которая используется для обновления динамических библиотек. Программа sync полезна в некоторых критических ситуациях. Заметим, что эти файлы не обязаны, но могут быть ссылками на стандартные программы ln и sync.
Программа ldconfig не обязана размещаться в /sbin, поскольку сайт может использовать запуск ldconfig на этапе начальной загрузки, а не только во время обновления разделяемых библиотек. (Не ясно, имеются ли какие-то преимущества в запуске ldconfig при каждой загрузке системы.) Но даже если это так, некоторые люди любят использовать ldconfig в следующих (часто встречающихся) ситуациях:
Я только что удалил /lib/<file>. Я не могу узнать (разыскать) имя библиотеки, потому что ls связано динамически (is dynamically linked), я использую оболочку, которая не имеет встроенной команды ls, а я не знаю, что вместо нее можно использовать "echo *". У меня есть статическая ссылка sln, но я не знаю, что она вызывает.
Разное:
{ ctrlaltdel, kbdrate }
Чтобы найти выход из ситуации, когда некоторые клавиатуры поставляются с такой высокой скоростью повторения, что оказываются непригодны к использованию, kbdrate может быть в некоторых системах установлена в /sbin.
Поскольку действием, которое ядро по умолчанию связывает с нажатием комбинации клавиш Ctrl-Alt-Del, является немедленная перезагрузка, обычно рекомендуется отменить отменить такое поведение перед монтированием корневой файловой системы в режиме только для чтения. Некоторые варианты демона init способны отменить действие Ctrl-Alt-Del, а другие требуют наличия программы ctrlaltdel, которая может быть установлена в таких системах в каталоге /sbin.
Дополнительные источники информации
www.zsh.org , http://zsh.sunsite.dk/Doc/
Zsh User Manual - в процессе написания (http://zsh.sunsite.dk/Guide/)
Zsh FAQ -- http://www.zsh.org/FAQ/
Zsh refcard --
Источник - LinuxBegin.ru
http://linuxbegin.ru
Адрес этой статьи:
http://linuxshop.ru/linuxbegin/article344.html
Дополнительные сведения
The Unix and Internet Fundamentals HOWTO
Эрика Рэймонда (Eric S. Raymond), особенно раздел 3, What happens when you switch on a computer?
Первая часть The LILO User's Guide дает прекрасное представление о разбиении дисков и загрузке. Ссылки в разделе LILO.
The NEW Peter Norton Programmer's Guide to the IBM PC & PS/2, Питера Нортона и Ричарда Уилтона (Richard Wilton), Microsoft Press 1988 Это новая книга Нортона, которая хорошо выглядит, но сейчас я не могу себе её позволить.
Одна из множества книг по апгрейду PC
Страница man lilo.
Пакет Lilo ( lilo), содержит ``LILO User's Guide'' lilo-u-21.ps.gz (или более поздний). Скорее всего вы уже имеете этот документ. Посмотрите в /usr/doc/lilo или где-то рядом. Постскриптовская версия лучше текстовой, поскольку содержит графики и таблицы.
tomsrtbt крутейший однодискетный Linux. Создаёт прекрасную спасательную дискету.
The Bootdisk HOWTO
/usr/src/linux/README и сожержимое /usr/src/linux/Documentation/ (в вашей системе может находится в ином месте)
The Kernel HOWTO
Система помощи, доступная во время использования make menuconfig или make xconfig
The Linux Kernel (и другие руководства LDP)
исходные коды, для ссылок смотри Building a Minimal Linux System from Source Code
исходный код, ссылки в Building a Minimal Linux System from Source Code
Страницы ман для файлов inittab и fstab. Введите man inittab для ознакомления.
The Linux System Administrators Guide содержит хороший раздел по init.
исходные коды, ссылки приведены в Building a Minimal Linux System from Source Code
Превосходное описание файловых систем есть в разделе 9 книги LDP ``The Linux Kernel''. Вы найдете её на Австралийском зеркале проекта LDP.
Команда mount является частью пакета util-linux, ссылка на него приведена в Building a Minimal Linux System from Source Code
Страницы ман для mount, fstab, fsck, mke2fs
и proc
Файл Documentation/proc.txt в исходном коде Linux описывает файловую систему /proc.
Утилиты для файловой системы EXT2: ext2fsprogs - домашняя страница и ext2fsprogs - Австралийское зеркало. Здесь также был обзор файловой системы Ext2fs, однако он устарел и читается хуже, чем 9-я глава из ``The Linux Kernel''
Unix File System Standard и другая ссылка на the Unix File System Standard. Стандарт описывает что и где должно находится в файловой системе Unix и почему. Сформулированы также минимальные требования к содержимому директорий /bin, /sbin и т.д. Это хороший источник информации если вы поставите себе задачу создания минимальной, но полной системы.
``The Linux Kernel'' из LDP (The Linux Documentation Project) (для сылок см. раздел The Linux Kernel)
Исходные тексты ядра Linux, если вы достаточно отважны! Код kswapd обитает в linux/mm/vmscan.c, коды kflushd и kupdate
живут в linux/fs/buffer.c.
Дополнительные таблицы перекодировки (screenmap)
Выше я сказал, что при выводе символа, syscons просто отправляет его код в видео-контроллер. Это не совсем верно.
Перед этим syscons "прогоняет" символ через внутреннюю таблицу перекодировки. Эта "таблица перекодировки" (screenmap) представляет из себя просто табличку из 256 байт, то есть каждый выводимый код символа может быть заменен на код какого-нибудь другого символа. Понятно, что если вам ничего заменять не нужно, эта таблица заполняется такими значениями, которые не меняют исходный код.
Конечно, если учесть, что видео-контроллер позволяет загружать любые шрифты, эта дополнительная услуга syscons вроде бы и не нужна. Достаточно загрузить подходящий шрифт, где все символы уже находятся на нужных местах.
Но, с другой стороны, если у вас нет под рукой нужного шрифта (например, русские буквы в кодировке cp1251), то составить таблицу перекодировки очень легко с помощью подходящей программы-"перекодировщика". А нарисовать новый шрифт, или хотя бы "перекроить" один из существующих - более трудоемкая задача. Кроме того, "таблица перекодировки" помогает решать и некоторые другие проблемы (например, смотри
"Русификация: Зачем так сложно?").
Как и шрифты, screenmap можно заменить с помощью программы vidcontrol
(подробности в описании vidcontrol).
Учтите, что "таблица перекодировки" в syscons одна на все виртуальные терминалы (хотя это и не очень приятно). Поэтому ее изменение на одном из виртуальных терминалов отразится и на всех остальных. Правда, в отличии от перезагрузки шрифтов, которая сразу же перерисует символы на всех других терминалах, смена screenmap подействует только на следующий выводимый текст.
Дополнительные требования стандарта для ОС Linux
Отдельный раздел стандарта FHS содержит требования и рекомендации, которые относятся только к операционной системе Linux. Вот их краткий перечень:
В Linux-системах, если ядро расположено в корневом каталоге ("/"), рекомендуется использовать для него названия vmlinux или vmlinuz, которые используются в последних версиях исходных кодов ядра Linux.
Если в Linux-системе используется файл setserial, он должен размещаться в каталоге /bin.
Все устройства и специальные файлы в /dev должны соответствовать документу Linux Allocated Devices, который поставляется в составе исходных кодов ядра и поддерживается Питером Анвином (H. Peter Anvin). Символические ссылки в каталоге /dev должны устанавливаться в Linux-системах не иначе как в соответствии с документом Linux Allocated Devices.
Если в Linux-системе используется файл lilo.conf, он должен размещаться в каталоге /etc.
Поскольку файловая система proc является фактически стандартным для Linux методом обработки информации о системе и процессах, в отличие от других систем, использующих /dev/kmem и другие подобные методы, настоятельно рекомендуется использовать proc для хранения и получения информации о процессах, а также информации о ядре и памяти.
В Linux-системах следующие дополнительные файлы размещаются в /sbin (в тексте стандарта имеются пояснения, почему возникло это требование):
Команды для управления файловой системой ext2fs: badblocks, dumpe2fs, e2fsck, mke2fs, mklost+found, tune2fs;
Программа установки загрузчика системы lilo;
Неизменяемые исполняемые файлы ldconfig, sln, ssync.
Программы ctrlaltdel, kbdrate.
Если в системе установлены компиляторы языков C или C++, и система не основана на glibc, должны быть созданы следующие символические ссылки:
/usr/include/asm -> /usr/src/linux/include/asm-<arch>
/usr/include/linux -> /usr/src/linux/include/linux
Для систем, основанных на версиях библиотеки libc, предшествующих glibc, применяются следующие правила:
Единственными исходными кодами, которые должны быть размещены в определенном месте, являются исходные коды ядра Linux. Они размещаются в /usr/src/linux.
Если установлен компилятор C или C++, а полная версия исходных кодов ядра не установлена, то подключаемые файлы из исходных кодов ядра должны размещаться в следующих каталогах:
/usr/src/linux/include/asm-<arch>
/usr/src/linux/include/linux
где <arch> - название архитектуры системы (например, i386).
Замечание: /usr/src/linux может быть символической ссылкой на дерево каталогов с исходными кодами ядра.
Каталог /var/spool/cron содержит переменные данные для программ-демонов cron и at.
Дополнительный сеанс вопросов
9.1. Что это за ``алгоритм чередования'', который вы упоминали в списке недостатков подсистемы управления разделом подкачки во FreeBSD 3.x?9.2. Я не понял следующее:9.3. В примере с ls(1) / vmstat 1 могут ли некоторые ошибки доступа к странице быть ошибками страниц данных (COW из выполнимого файла в приватные страницы)? То есть я полагаю, что ошибки доступа к страницам являются частично ошибками при заполнении нулями, а частично данных программы. Или вы гарантируете, что FreeBSD выполняет предварительно COW для данных программы?9.4. В вашем разделе об оптимизации таблицы страниц, не могли бы вы более подробно рассказать о pv_entry
и vm_page (или vm_page должна быть vm_pmap--как в 4.4, cf. pp. 180-181 of McKusick, Bostic, Karel, Quarterman)? А именно какое действие/реакцию должно потребоваться для сканирования отображений?9.5. Наконец, в разделе о подгонке страниц хорошо бы было иметь краткое описание того, что это значит. Я не совсем это понял.
9.1. Что это за ``алгоритм чередования'', который вы упоминали в списке недостатков подсистемы управления разделом подкачки во FreeBSD 3.x?
FreeBSD использует в области подкачки механизм чередования, с индексом по умолчанию, равным четырем. Это означает, что FreeBSD резервирует пространство для четырех областей подкачки, даже если у вас имеется всего лишь одна, две или три области. Так как в области подкачки имеется чередование, то линейное адресное пространство, представляющее `четыре области подкачки', будет фрагментироваться, если у вас нет на самом деле четырех областей подкачки. Например, если у вас две области A и B, то представление адресного пространства для этой области подкачки во FreeBSD будет организовано с чередованием блоков из 16 страниц:
A B C D A B C D A B C D A B C D
FreeBSD 3.x использует `последовательный список свободных областей' для управления свободными областями в разделе подкачки. Идея состоит в том, что большие последовательные блоки свободного пространства могут быть представлены при помощи узла односвязного списка (kern/subr_rlist.c). Но из-за фрагментации последовательный список сам становится фрагментированным. В примере выше полностью неиспользуемое пространство в A и B будет показано как `свободное', а C и D как `полностью занятое'. Каждой последовательности A-B требуется для учета узел списка, потому что C и D являются дырами, так что узел списка не может быть связан со следующей последовательностью A-B.
Почему мы организуем чередование в области подкачки вместо того, чтобы просто объединить области подкачки в одно целое и придумать что-то более умное? Потому что гораздо легче выделять последовательные полосы адресного пространства и получать в результате автоматическое чередование между несколькими дисками, чем пытаться выдумывать сложности в другом месте.
Фрагментация вызывает другие проблемы. Являясь последовательным списком в 3.x и имея такое огромную фрагментацию, выделение и освобождение в области подкачки становится алгоритмом сложности O(N), а не O(1). Вместе с другими факторами (частое обращение к области подкачки) вы получаете сложность уровней O(N^2) и O(N^3), что плохо. В системе 3.x также может потребоваться выделение KVM во время работы с областью подкачки для создания нового узла списка, что в условии нехватки памяти может привести к блокировке, если система попытается сбросить страницы в область подкачки.
В 4.x мы не используем последовательный список. Вместо этого мы используем базисное дерево и битовые карты блоков области подкачки, а не ограниченный список узлов. Мы принимаем предварительное выделение всех битовых карт, требуемых для всей области подкачки, но при этом тратится меньше памяти, потому что мы используем битовые карты (один бит на блок), а не связанный список узлов. Использование базисного дерева вместо последовательного списка дает нам производительность O(1) вне зависимости от фрагментации дерева.
9.2. Я не понял следующее:
Стоит отметить, что во FreeBSD VM-система пытается разделить чистые и грязные страницы во избежание срочной необходимости в ненужных сбросах грязных страниц (что отражается на пропускной способности ввода/вывода) и не перемещает беспричинно страницы между разными очередями, когда подсистема управления памятью не испытывает нехватку ресурсов. Вот почему вы можете видеть, что при выполнении команды systat -vm в некоторых системах значение счетчика очереди кэша мало, а счетчик активной очереди большой.
Как разделение чистых и грязных (неактивных) страниц связано с ситуацией, когда вы видите маленький счетчик очереди кэша и большой счетчик активной очереди в выдаче команды systat -vm? Разве системная статистика не считает активные и грязные страницы вместе за счетчик активной очереди?
Да, это запутывает. Связь заключается в ``желаемом'' и ``действительном''. Мы желаем разделить страницы, но реальность такова, что пока у нас нет проблем с памятью, нам это на самом деле не нужно.
Это означает, что FreeBSD не будет очень сильно стараться над отделением грязных страниц (неактивная очередь) от чистых страниц (очередь кэша), когда система не находится под нагрузкой, и не будет деактивировать страницы (активная очередь -> неактивная очередь), когда система не нагружена, даже если они не используются.
9.3. В примере с ls(1) / vmstat 1 могут ли некоторые ошибки доступа к странице быть ошибками страниц данных (COW из выполнимого файла в приватные страницы)? То есть я полагаю, что ошибки доступа к страницам являются частично ошибками при заполнении нулями, а частично данных программы. Или вы гарантируете, что FreeBSD выполняет предварительно COW для данных программы?
Ошибка COW может быть ошибкой при заполнении нулями или данных программы. Механизм в любом случае один и тот же, потому что хранилище данных программы уже в кэше. Я на самом деле не рад ни тому, ни другому. FreeBSD не выполняет предварительное COW данных программы и заполнение нулями, но она выполняет предварительно отображение страниц, которые имеются в ее кэше.
9.4. В вашем разделе об оптимизации таблицы страниц, не могли бы вы более подробно рассказать о pv_entry и vm_page (или vm_page должна быть vm_pmap--как в 4.4, cf. pp. 180-181 of McKusick, Bostic, Karel, Quarterman)? А именно какое действие/реакцию должно потребоваться для сканирования отображений?
Что делает Linux в тех случаях, когда FreeBSD работает плохо (совместное использование отображения файла между многими процессами)?
vm_page
представляет собой пару (object,index#). pv_entry является записью из аппаратной таблицы страниц (pte). Если у вас имеется пять процессов, совместно использующих одну и ту же физическую страницу, и в трех таблицах страниц этих процессов на самом деле отображается страница, то страница будет представляться одной структурой vm_page и тремя структурами pv_entry.
Структуры pv_entry
представляют страницы, отображаемые MMU (одна структура pv_entry
соответствует одной pte). Это означает, что, когда нам нужно убрать все аппаратные ссылки на vm_page (для того, чтобы повторно использовать страницу для чего-то еще, выгрузить ее, очистить, пометить как грязную и так далее), мы можем просто просмотреть связный список структур pv_entry, связанных с этой vm_page, для того, чтобы удалить или изменить pte из их таблиц страниц.
В Linux нет такого связного списка. Для того, чтобы удалить все отображения аппаратной таблицы страниц для vm_page, linux должен пройти по индексу каждого объекта VM, который может отображать страницу. К примеру, если у вас имеется 50 процессов, которые все отображают ту же самую динамическую библиотеку и хотите избавиться от страницы X в этой библиотеке, то вам нужно пройтись по индексу всей таблицы страниц для каждого из этих 50 процессов, даже если только 10 из них на самом деле отображают страницу. Так что Linux использует простоту подхода за счет производительности. Многие алгоритмы VM, которые имеют сложность O(1) или (N малое) во FreeBSD, в Linux приобретают сложность O(N), O(N^2) или хуже. Так как pte, представляющий конкретную страницу в объекте, скорее всего, будет с тем же смещением во всех таблицах страниц, в которых они отображаются, то уменьшение количества обращений в таблицы страниц по тому же самому смещению часто позволяет избежать разрастания кэша L1 для этого смещения, что приводит к улучшению производительности.
Во FreeBSD введены дополнительные сложности (схема с pv_entry) для увеличения производительности (уменьшая количество обращений только к тем pte, которые нужно модифицировать).
Но во FreeBSD имеется проблема масштабирования, которой нет в Linux, потому что имеется ограниченное число структур pv_entry, и это приводит к возникновению проблем при большом объеме совместно используемых данных. В этом случае у вас может возникнуть нехватка структур pv_entry, даже если свободной памяти хватает. Это может быть достаточно легко исправлено увеличением количества структур pv_entry при настройке, но на самом деле нам нужно найти лучший способ делать это.
Что касается использования памяти под таблицу страниц против схемы с pv_entry: Linux использует `постоянные' таблицы страниц, которые не сбрасываются, но ему не нужны pv_entry для каждого потенциально отображаемого pte. FreeBSD использует `сбрасываемые' таблицы страниц, но для каждого реально отображаемого pte добавляется структура pv_entry. Я думаю, что использование памяти будет примерно одинакова, тем более что у FreeBSD есть алгоритмическое преимущество, заключающееся в способности сбрасывать таблицы страниц с очень малыми накладными расходами.
9.5. Наконец, в разделе о подгонке страниц хорошо бы было иметь краткое описание того, что это значит. Я не совсем это понял.
Знаете ли вы, как работает аппаратный кэш памяти L1? Объясняю: Представьте машину с 16МБ основной памяти и только со 128К памяти кэша L1. В общем, этот кэш работает так, что каждый блок по 128К основной памяти использует те же самые 128К кэша. Если вы обращаетесь к основной памяти по смещению 0, а затем к основной памяти по смещению 128К, вы перезаписываете данные кэша, прочтенные по смещению 0!
Я очень сильно все упрощаю. То, что я только что описал, называется `напрямую отображаемым' аппаратным кэшем памяти. Большинство современных кэшей являются так называемыми 2-сторонними множественными ассоциативными или 4-сторонними множественными ассоциативными кэшами. Множественная ассоциативность позволяет вам обращаться к вплоть до N различным областям памяти, которые используют одну и ту же память кэша без уничтожения ранее помещенных в кэш данных. Но только N.
Так что если у меня имеется 4-сторонний ассоциативный кэш, я могу обратиться к памяти по смещению 0, смещению 128К, 256К и смещению 384K, затем снова обратиться к памяти по смещению 0 и получу ее из кэша L1. Однако, если после этого я обращусь к памяти по смещению 512К, один из ранее помещенных в кэш объектов данных будет из кэша удален.
Это чрезвычайно важно... для большинства обращений к памяти процессора чрезвычайно важно, чтобы данные находились в кэше L1, так как кэш L1 работает на тактовой частоте работы процессора. В случае, если данных в кэше L1 не обнаруживается, и они ищутся в кэше L2 или в основной памяти, процессор будет простаивать, или, скорее, сидеть, сложив ручки, в ожидании окончания чтения из основной памяти, хотя за это время можно было выполнить сотни
операций. Основная память (динамическое ОЗУ, которое установлено в компьютере) работает по сравнению со скоростью работы ядра современных процессоров медленно.
Хорошо, а теперь рассмотрим подгонку страниц: Все современные кэши памяти являются так называемыми физическими кэшами. Они кэшируют адреса физической памяти, а не виртуальной. Это позволяет кэшу не принимать во внимание переключение контекстов процессов, что очень важно.
Но в мире UNIX вы работаете с виртуальными адресными пространствами, а не с физическими. Любая программа, вами написанная, имеет дело с виртуальным адресным пространством, ей предоставленным. Реальные физические страницы, соответствующие виртуальному адресному пространству, не обязательно расположены физически последовательно! На самом деле у вас могут оказаться две страницы, которые в адресном пространстве процессов являются граничащими, но располагающимися по смещению 0 и по смещению 128К в физической памяти.
Обычно программа полагает, что две граничащие страницы будут кэшироваться оптимально. То есть вы можете обращаться к объектам данных в обеих страницах без замещений в кэше данных друг друга. Но это имеет место, если только физические страницы, соответствующие виртуальному адресному пространству, располагаются рядом (в такой мере, что попадают в кэш).
Это именно то, что выполняет подгонка. Вместо того, чтобы назначать случайные физические страницы виртуальным адресам, что может привести к неоптимальной работе кэша, при подгонке страниц виртуальным адресам назначаются примерно подходящие по порядку физические страницы. Таким образом, программы могут писаться в предположении, что характеристики низлежащего аппаратного кэша для виртуального адресного пространства будут такими же, как если бы программа работала непосредственно в физическом адресном пространстве.
Заметьте, что я сказал `примерно' подходящие, а не просто `последовательные'. С точки зрения напрямую отображаемого кэша в 128К, физический адрес 0 одинаков с физическим адресом 128К. Так что две граничащие страницы в вашем виртуальном адресном пространстве могут располагаться по смещению 128К и 132К физической памяти, но могут легко находиться по смещению 128К и по смещению 4К физической памяти, и иметь те же самые характеристики работы кэша. Так что при подгонке не нужно назначать в действительности последовательные страницы физической памяти последовательным страницам виртуальной памяти, достаточно просто добиться расположения страниц по соседству друг с другом с точки зрения работы кэша.
Dosemu
Это – аналог Wine для вселенной 1980-х годов. Dosemu эмулирует DOS, и даже включает в себя клон MS-DOS под названием FreeDOS. Очень нужная программа, если вам нужно запускать DOS-приложения под Unix/Linux.
Доступ к Linux-разделам из windows
Автор: Денис Колисниченко, dhsilabs@mail.ru
Опубликовано: 20.2.2003
© 2002, Издательский дом «КОМПЬЮТЕРРА» | http://www.computerra.ru/
Журнал «СОФТЕРРА» | http://www.softerra.ru/
Этот материал Вы всегда сможете найти по его постоянному адресу: http://www.softerra.ru/technologizm/24177/
Наверное, у многих из нас на диске найдется один или более Windows-разделов. Ясное дело, что нам нужно использовать данные, которые находятся на этих разделах - документы, картинки, фотографии. В Linux все решается очень просто - достаточно примонтировать Windows-раздел и мы сможем его использовать как обыкновенный каталог (см. рис. 1).
Рис. 1. Примонтированный Windows-раздел
А вот что делать, если мы сейчас работаем в Windows и нам понадобились какие-нибудь файлы, расположенные на Linux-разделе? Не перезагружать же компьютер? В этой статье мы поговорим о Windows-программах, позволяющих использовать Linux-разделы.
Скорее всего, вы когда-нибудь использовали программу Windows Commander или хотя бы видели ее. Разработчик этой программы создал ее расширенную версию, которая называется Total Commander. Последняя обладает всеми функциями Windows Commander'a, но может использовать так называемые FS-плагины. FS-плагины позволяют использовать файловые системы, не поддерживаемые Windows, в том числе файловую систему ext2 (см. рис. 2).
Рис. 2. Программа Total Commander
Прежде чем использовать файловую систему Linux, нам нужно подключить FS-плагин. Для этого распаковываем архив ext2fs в каталог, в котором установлен Total Commander, и выполняемым команду меню Конфигурация, Настройка. В окне Настройка переходим на закладку Операции и щелкаем на кнопке FS-Plugins (см. рис. 3)
Рис. 3. Окно Настройка
В окне File system plugins нажимаем кнопку Add и устанавливаем плагин ext2fs.wfx (см. рис. 4).
Рис. 4. Установка FS-плагина
Сейчас плагин установлен и мы можем нажать Alt+F1 и перейти в Сетевое окружение. Ну а дальше вы знаете, что делать. Небольшой недостаток плагина ext2fs - это невозможность изменения файлов на Linux-раздел.
Скачать программу Total Commander можно по адресу http://www.ghisler.com/ Кроме программы Total Commander существуют другие программы, позволяющие не только читать, но и записывать файлы на разделы Linux. Одной из таких программ является Explore2Fs. Программа выполнена в стиле проводника Windows (см. рис. 5)
Рис. 5. Программа Explore2Fs
Для копирования файла(ов) выделите его, нажмите правую кнопку мыши и выберите команду Export File. Аналогично, для копирования всего каталога, выделите его и выполните команду Export Directory.
По умолчанию программа Explore2Fs не разрешает изменять данный на Linux-разделах. Это означает, что вы не можете копировать файлы на Linux-разделы, переименовывать или удалять их. Для включения режима записи выполните команду меню View, Options и в появившемся окне перейдите на закладку Debug. Параметр Enable write support включает поддержку записи.
Рис. 6. Поддержка записи.
Хочу напомнить, что поддержка записи - это экспериментальная функция, которую нужно использовать на свой страх и риск. Разработчики программы настоятельно рекомендуют сделать резервную копию всех ваших Linux-разделов перед использованием этой функции. Желательно также включить средний или даже высокий уровень отладки - в случае исключительной ситуации вы хотя бы будете знать, из-за чего произошла ошибка, хотя легче вам, скорее всего, не станет. При включении режима отладки программа создаст файл "explore2fs debug log.txt" в текущем каталоге.
Мне очень понравилось окно свойств файла программы Explore2Fs. Закладка File предоставляет исчерпывающую информацию о файле, а закладка Attributes - о его атрибутах. При включенном режиме записи можно даже изменять атрибуты. Закладка File позволяет узнать:
Номер i-узла Режим доступа GID и UID файла Размер файла Время создания, модификации и последнего доступа Количество ссылок Количество блоков Другую информацию о блоках
Рис. 7. Окно свойств файла.
Программу Explore2Fs можно скачать по адресу http://uranus.it.swin.edu.au/~jn/linux/
Ваши вопросы и комментарии буду рад выслушать по адресу dhsilabs@mail.ru
Телефон редакции: (095) 232-2261
E-mail редакции: inform@softerra.ru
По вопросам размещения рекламы обращаться к Алене Шагиной по телефону +7 (095) 232-2263 или электронной почте reclama@computerra.ru
По вопросам сотрудничества обращайтесь к руководителю Интернет-проектов ИД "Компьютерра" Маурусу Павлу по телефону +7 (095) 232-2261 или электронной почте pavel@computerra.ru
Doug White
dwhite@resnet.uoregon.edu
Март 1997
Этот документ описывает, как разбить на слайсы, разделы и отформатировать дисковые и подобные им устройства для использования с FreeBSD. Приводимые примеры были протестированы во FreeBSD 2.2 и должны работать и в других релизах. Текст был дополнен для FreeBSD версии 4.
Download
Следующие файлы доступны для скачивания. Все они сделаны доступными под лицензией GNU General Public License.
bash-completion-20020209.tar.gz | Исходные файлы, упакованные tar и gzip для bash версий 2.05 и выше |
Changelog | Список изменений bash_completion из CVS |
bash-completion-20020209-1.noarch.rpm | RPM для bash версий 2.05-12 и выше |
bash-completion-20020209-1.src.rpm | SRPM для bash версий 2.05-12 и выше |
bash-2.05a-service_completion.patch | Патч (от 20020207) для bash версии 2.05a для добавления автозаполнения имени службы |
bash-2.05a-53.i386.rpm | RPM bash 2.05a с установленными патчами |
bash-doc-2.05a-53.i386.rpm | RPM с документацией к bash 2.05a |
bash-2.05a-53.src.rpm | SRPM bash 2.05a с установленными патчами |
bash-2.05-group_completion.patch | Патч для bash 2.05 для добавления автозаполнения имени группы |
bash-2.05-service_completion.patch | Патч для bash 2.05 для добавления автозаполнения имени службы (требует предварительно установленного патча для автозаполнения имени группы) |
bash-2.05-12.i386.rpm | RPM bash 2.05 с установленными патчами |
bash-doc-2.05-12.i386.rpm | RPM с документацией к bash 2.05 |
bash-2.05-12.src.rpm | SRPM bash 2.05 с установленными патчами |
Драйвер экрана
Разработчики нынешней версии ядра перешли на использование UNICODE (UCS2) в драйвере консоли, поддержка национальных алфавитов отстала (во всяком случае всякие FAQs, HOWTO и советы, оставшиеся от прошлых времен не помогают; шрифты и таблицы перекодировок просто глючат). Механизм RHL 6.0 действует так: при загрузке вызывается /etc/rc.d/init.d/keytable (там же встроена поддержка клавиатуры), которая вызывает /sbin/setsysfont. setsysfont в свою очередь выполняет (если есть) /etc/sysconfig/i18n, ожидая что та определит переменные SYSFONT (имя файла со шрифтом, берется из /usr/lib/kbd/consolefonts) и UNIMAP (имя файла с таблицей соответствия, берется из /usr/lib/kbd/consoletrans). После чего выполняет
consolechars -f $SYSFONT --sfm $UNIMAP
в качестве SYSFONT я беру koi8-8x16, в качестве UNIMAP - koi8-r. Так что и клавиатура и экран работают в koi8-r и не надо ничего перекодировать (в новой версии использование koi8-r не ломает таблички MidnightCommander, в RH 6.0 вместо русской буквы 'В' выводится тире с точками, в RH 6.2 - поправлено). Есть и другие шрифты (koi8-8x8, koi8-8x14, alt-8x8, alt-8x14, alt-8x16, Cyr_a8x8, Cyr_a8x14, Cyr_8x16), но таблица UNIMAP есть только для koi8-r. Иногда setsysfont (consolechars) не срабатывает с первого раза, приходится повторять. В 2.2.12 вообще перестал работать (клавиатура переключается, но вместо русских букв на экран выдается псевдографика, а вместо псевдографики - русские буквы). В 2.2.14 работает без проблем.
Драйвер клавиатуры
Клавиатура генерирует сканкоды (scancode), которые преобразуются в коды клавиш (keycode) с помощью таблицы преобразования, затаваемой setkeycodes. Коды клавиш преобразуются в символы с помощью таблицы keymap, которая устанавливается программой loadkeys. В RHL есть надстройка в виде kbdconfig, которая позволяет выбрать keymap из списка, имеющихся в наличии (/usr/lib/kbd/keymaps/i386/qwerty). Я использую ru-yawerty.kmap.gz (koi8-r, раскладка ЯВЕРТЫ, твердый знак на подчеркивании, переключение по правому ALT). Имя ru-yawerty заносится в /etc/sysconfig/keyboard, который используется при загрузке из /etc/rc.d/init.d/keytable. Можно вызывать вручную: loadkeys ru-yawerty. Для рабиты обычных 8-битных (не UNICODE) программ этого достаточно.
DrivesKeyboard
Имеет много синонимов - drivesKbd, ledDrivesKbd, ledDrivesKkeyboard, indicatorDrivesKbd, indicatorDrivesKeyboard.
Это тоже логический флаг, который заставляет XKB устанавливать "обратную связь" между индикатором и "состянием клавиатуры". То есть, если это флаг "взведен" (и разрешено allowExplicit), то, при изменении прикладной программой состяния индикатора, XKB должен изменить и связанные с ним компоненты "состяния клавиатуры".
Обратите внимание, что
меняться должны те компонеты, которые заданы инструкциями modifiers, group и controls (обычно задан только один из компонентов); инструкции whichModState и whichGroupState указывают - в каких из трех переменных (base, locked, latched) следует поменять модификатор или группу.
При этом, если "which...state" - none, base или any, никакого эффекта не будет. А effective эквивалентно locked. Напомню, что по умолчанию подразумевается значение effective, следовательно - если инструкций вида "which...state" в описании нет, то изменения будут делаться в locked Group или locked Modifiers, соответственно.
Как и в случае с флагом allowExplicit, объявление drivesKeyboard
должно иметь вид
drivesKeyboard = True; ( эквивалент - drivesKeyboard;)
или
drivesKeyboard = False; ( эквивалент - !drivesKeyboard;)
Другие команды
Esc[nz | переключится в виртуальный терминал n |
Esc[=n1;n2B | установить параметры "пищалки" |
n1 = частота (точнее, делитель для частоты) | |
n2 = длительность | |
(стандартные значения - 800;1) | |
влияет на "писк", который получается при выводе символа Bell - 7, | |
параметры свои для каждого "виртуального терминала" | |
Esc[=nC | тип курсора (действует на все "виртуальные терминалы") |
в n младший бит определяет "мерцание" (1 - да, 0 - нет) | |
следующий бит - тип курсора ("аппаратный" - 0/"символьный" - 1) | |
Esc[=n1;n2C | форма "символьного" курсора (для каждого "виртуального терминала"своя) |
"закрашиваются" строчки с n1 по n2 (начиная сверху) в матрице знака, которым рисуется курсор |
Иван Паскаль pascal@tsu.ru
Кроме описанных выше действий, kbdkontrol можно использовать для изменения параметров "автоповтора" клавиатуры и для изменения параметров "пищалки" (звука, который издает терминал при выводе кода Bell - 7).
Подробнее о ключах и параметрах для этих команд смотрите man kbdcontrol.
Другие параметры
С помощью vidcontrol можно поменять "тип курсора". Для этого служит ключ -c
(cursor)
vidcontrol -c "тип курсора"
Тип курсора может быть только - normal, blink и destructive.
Замечу, что esc-последовательности (см Команды syscons) предоставляют несколько более гибкие возможности по изменению курсора.
Также vidcontrol поможет вам изменить "время простоя", по истечению которого syscons запустит screen saver. Для этого служит ключ -t (timeout)
vidcontrol -t "время в секундах"
Кстати, если поставить время - 0, то saver вообще не будет запускаться.
Напомню, что поменять тип screen saver'а программа vidcontrol, не может. Если вы хотите поменять screen saver, вам придется
сначала "выгрузить" текущий модуль screen saver'а командой modunload
Если вы не знаете - как называется модуль, который вам надо выгрузить, воспользуйтесь командой modstat. загрузить новый модуль из тех, которые имеются в директории /lkm, командой modload.
Другие возможности настройки LILO
disk=параметры | Определяет нестандартные параметры для заданного диска |
disktab=файл_таблицы | Задает имя таблицы параметров диска. По умолчанию /etc/disktab. Использовать не рекомендуется |
ignore-table | Игнорирование ошибочных таблиц разделов |
nowarn | Запрещает сообщения о возможных неприятностях |
serial=параметры | Разрешает управление с последовательной линии. Загрузчик берет ввод из заданного последовательного порта и из клавиатуры. break по последовательной линии аналогична shift на клавиатуре. Параметры: <port>[,bps[parity[bits]]] port = 0..3 соответствует /dev/ttyS0 - /dev/ttyS3. Могут быть задействованы все 4 порта. bps: скорость порта в бодах. По умолчанию 2400 Поддерживаются значения: 110, 150, 300, 600, 1200, 2400, 4800, 9600 parity: контроль по четности. n - без четности, e= - по четности, o - по нечетности bits: число битов в символе - 7 или 8. По умолчанию 8, если нет контроля четности Параметры по умолчанию 0,2400n8 |
Параметры append, ramdisk, read-only, read-write, root, vga могут быть заданы в разделе глобальный параметров.
Они будут использованы если они не заданы в конфигурационных секциях.
Две части XKB и "проблема совместимости"
Прежде всего следует сказать несколько слов о том, как происходит преобразование скан-кодов в символы при работе X Window System без модуля XKB.
Сам X-сервер переводом скан-кода в код символа не занимается. При нажатии или отпускании кнопки клавиатурный модуль X-сервера посылает сообщение о событии (event) прикладной программе.
В этом сообщении указывается только скан-код нажатой кнопки и "состояние клавиатуры" - набор битовых флагов, который отражает состояние клавиш-модификаторов (Shift, Control, Alt, CapsLock и т. п.).
Клиентская программа должна сама решить, какой символ соответствует скан-коду при таком сочетании битов-модификаторов.
Естественно, для этого программа может воспользоваться таблицей, хранящейся в X-сервере, в которой для каждого скан-кода перечислены возможные символы. Обычно програма при старте запрашивает эту таблицу у сервера. (Таблицу на сервере можно менять с помощью утилиты xmodmap).
Разумеется, при создании программ никто не пишет каждый раз процедуру для интерпретации скан-кодов. Для этих целей существуют специальные подпрограммы в библиотеке Xlib.
Конечно, Xlib используется не только для этого. Это библиотека низкоуровневых процедур для работы с X-сервером. Даже если программа пользуется высокоуровневыми библиотеками-"тулкитами" (Xaw, Motif, Qt, gtk и т. п.), библиотека Xlib служит "базовой" для этих тулкитов.
Итак, процедуры из Xlib, зная скан-код и состояние клавиатуры, в соответствии с таблицей символов, полученной от сервера при старте, выбирают подходящий символ.
Модуль XKB точно так же сообщает программе только скан-код и свое "состояние". В отличие от "старого" модуля (обычно говорят - "core protocol", будем его называть для краткости - "core-модуль"), XKB имеет более сложную таблицу символов, другой набор модификаторов и некоторые дополнительные параметры "состояния клавиатуры" (обо всех этих отличиях мы поговорим по ходу рассмотрения "внутренностей" XKB).
Для полноценной работы с XKB библиотека Xlib должна содержать процедуры преобразования скан-кодов, "знакомые с Xkb".
Естественно, "иксы", у которых X-сервер "укомплектован" модулем XKB, имеют и соответствующую библиотеку Xlib.
Таким образом, XKB фактически делится на две части - модуль, встроенный в X-сервер, и набор подпрограмм, входящих в библиотеку Xlib.
Однако же, никто не запрещает использовать программы, которые были собраны со старой библиотекой Xlib, "не подозревающей" о существовании XKB: при этом и возникает "проблема совместимости". Модуль XKB должен уметь общаться как со "своей" Xlib, так и со старой, работающей в соответствии с core protocol.
Естественно, "общение" не ограничивается только передачей сообщений о нажатии/отпускании клавиш. Процедуры Xlib могут обращаться к X-серверу с различными запросами (например, взять таблицу символов) и командами (например, поменять в этой таблице расположение символов).
На все эти запросы и команды модуль XKB должен реагировать так, чтобы даже "старая" Xlib могла работать правильно (насколько это возможно).
Двойная загрузка Windows и Linux с помощью NTLoader
Джон Сэвилл 15.02.2000 |
Версия для печати Выскажите свое мнение |
jsavill@win2000mag.com
Если вам нужно работать и с Windows 2000, и с Linux, придется пользоваться двойной загрузкой. В этом может помочь встроенный загрузчик Windows 2000 NTLoader, однако корректно настроить его нелегко. Необходимо сделать следующее:
1. Установить Windows 2000 как обычно в раздел NTFS и приготовить четыре загрузочные дискеты для загрузки и восстановления.
2. Загрузить систему с загрузочного диска Red Hat Linux 6.2, а затем установить Linux с компакт-диска Red Hat.
3. Создать в Linux раздел "/" и разделы подкачки на дополнительном диске или на свободных разделах жесткого диска.
4. При запросе о создании загрузочного диска выбрать пункт "Yes, make a BOOT DISK". Этот диск понадобится в пункте 8.
5. Linux перепишет загрузочную запись (Master Boot Record, MBR) Windows 2000, поэтому теперь загрузите Windows 2000 с четырех загрузочных дискет. При этом необходимо выбрать в меню загрузчика пункт Recover, а затем — режим Command mode.
6. При запросе следует зарегистрироваться с учетной записью Administrator.
7. Выполнить команды fixboot и fixmbr. Теперь Windows 2000 снова будет загружаться нормально.
8. Для загрузки Linux из NTLoader перезагрузить систему с загрузочного диска Linux.
9. Зарегистрироваться в Linux с полномочиями администратора системы.
10. Ввести команду cd /etc и открыть файл lilo.conf. В начале файла есть ссылка на загрузочный раздел по умолчанию, например, /dev/hda.
11. С помощью любого редактора — например, Emacs следует изменить это значение на диск и раздел, куда была установлена Linux. Если Linux установлена в раздел /dev/hdc1, то именно это и следует записать, т.е. поменять /dev/hda на /dev/hdc1. Если вы не помните, куда именно установлен Linux, найдите последнюю переменную файла lilo.conf — переменную image. В ней хранится нужное значение.
12. Выполнить LILO для записи загрузчика в раздел /dev/hdc1 (команду LILO нужно выполнить без аргументов). Будет выдано предупреждение о том, что раздел не является первым на диске. Именно это нам и нужно, чтобы загрузочная запись Windows 2000 осталась в целости и сохранности.
13. Скопировать загрузочный сектор Linux в файл; сейчас мы перепишем его на раздел Windows 2000, чтобы загрузчик Windows 2000 мог запускать Linux.
В Linux для записи сектора в файл служит команда dd.
# cd
# dd if=/dev/hdc1 bs=512 count=1 of=bootsect.lnx
14. С помощью команды mcopy следует скопировать этот файл на дискету.
# mcopy bootsect.lnx a:
15. Остановить Linux.
# shutdown -h now
16. Загрузить Windows 2000.
17. Скопируйте файл bootsect.lnx на диск C: и присвойте ему атрибут read-only.
18. Добавить соответствующий пункт для запуска Linux в файл boot.ini, например:
C:\bootsect.lnx="Linux"
Теперь при запуске компьютера можно выбрать в меню загрузчика пункт Linux. После этого будет запущен LILO, который загрузит Linux.
Джон Сэвилл - MCSE, консультант, автор книги «The Windows NT and Windows 2000 Answer Book» (Addison Wesley). С ним можно связаться по адресу: john@savilletech.com.
• Версия для печати
Наличие почты в торговой организации обязательно. И, так как менеджеров много, а компьютер с доступом в интернет (роутер) один, предполагается наличие почтового сервера для одновременного доступа к почте со всех имеющихся рабочих станций. Программ-серверов огромное множество, но я рекомендую остановить выбор на одной из самых популярных - MDaemon фирмы Alt-N (http://www.mdaemon.com). Благодаря своей функциональности и конфигурируемости, этот продукт стал стандартом де-факто для почтовых серверов предприятий и организаций.
Обычно в организациях, специализирующихся на торговле, менеджеры ведут своеобразные спам-рассылки: как минимум раз в неделю рассылают клиентам коммерческие предложения с вложением прайса. Размер таких писем составляет в среднем 50-100 Кбайт. Если их не больше 1-2 десятков - это не страшно. Но когда в порыве энтузиазма манагеры пускают в очередь 300-600 писем - самое время бить тревогу. Даже при мощном канале интернет будет часа два мирно "отдыхать". Что уж говорить о слабом канале? Хуже всего то, что минут через десять на вашу голову польется дождь жалоб и претензий на тему "почему не работает интернет?".
Что делать?
С менеджером ругаться бесполезно - для него почта "ушла" (в Outlook'e же ее нет!), а на все ваши технические доводы он только пожмет плечами: "Мне же надо как-то работать!"
Конечно, такая ситуация - неплохой повод для "раскрутки" руководства на более быстрый канал. Но и это не решит проблему в корне: через месяц-другой менеджеры и новый канал поставят на колени. Что же делать? Не обрезать же почту вообще?
А выход есть! В Mdaemon'е, как и во многих других почтовых серверах, есть функция создания листов рассылки. Заключается она в следующем: на специальный адрес провайдера, именуемый как "smart host", отсылается один вариант письма и список адресов, по которым его нужно разослать. Удобно? Безусловно! Трафик не загружен и письма разосланы: и овцы целы, и волки сыты. Необходимо лишь выяснить, предоставляет ли ваш провайдер такую услугу. Обычно провайдеры ограничивают количество писем в одной рассылке до 40-50.
Листы рассылки в Mdaemon'e создаются элементарно. В верхнем меню List выбираем New list. Появится окно настройки, показанное на рис. 1. А дальше - по сценарию. В закладке Options вводим имя рассылки, в закладке Members перечисляем все адреса, которые будут удостоены чести получить ваш спам, в закладке Routing ставим переключатель на Route a single copy:, а в открывшемся поле Host Name вводим адрес сервера, который нужно узнать у провайдера (рис. 2). Все.
Рис. 1.Создание списка рассылки
Рис. 2. Указание "smart host"
Теперь на адрес, который мы ввели в закладке "Options", менеджер отсылает скрытую копию письма, предназначенного для рассылки. Вот и все, остальное сделает сервер провайдера.
Не стоит также забывать, что любая рассылка - это в первую очередь спам и только во вторую - полезная информация. Иной раз, находясь в состоянии творческого подъема, менеджеры начинают рассылать письма на любые попавшиеся на глаза адреса. А, как вы сами понимаете, одно дело, когда это клиент, с нетерпением ожидающий этой информации. Но совсем другое, когда это ни в чем не повинный юзер, регулярно получающий информацию о снижении оптовых цен на крем для бритья. И бедняга начинает бороться с надоедливыми спамерами. Причем методы борьбы бывают пассивные и активные. Пассивные - это всем известные фильтры: юзер просто блокирует входящее письмо. Вам, как сисадмину, никакого вреда это не принесет, разве что вырастет трафик при возврате блокированных писем. Что, впрочем, легко предотвратить - в настройках рассылочного листа в закладке Members внизу есть флажок Automatically remove dead address: (рис. 3). При его установке несуществующие и заблокированные адреса автоматически удаляются из списка адресов рассылки.
Рис. 3. Автоматическое удаление неактивных адресатов
Но последнее время начинают входить в моду активные методы борьбы. Выглядит все следующим образом: интернет отлично работает, почта радостно приходит: но не уходит! У сисадмина начинается легкая истерика, а вместе с ней - ковыряния в настройках почтового сервера, перезагрузка роутера, переинсталляция программы и, в конце концов, переустановка "винды", сопровождаемая проклятиями в адрес Билла Гейтса. Но самое интересное, что после нескольких часов кропотливой работы по восстановлению работоспособности роутера все возвращается на круги своя. У сисадмина подкашиваются ноги, девушки из офиса начинают бегать за водой, валерьянкой, нашатырем...
На саомо деле Билл Гейтс тут совершенно ни при чем. Случай отнюдь не редкий (по крайней мере, лично я наблюдал подобное трижды). Причина нервных тиков кроется в том, что сисадмин не посчитал нужным позвонить провайдеру для получения консультации. Хотя сервисная служба провайдеров и отбивает у пользователей желание звонить при возникновении проблемы с интернетом (поскольку на 999 из 1000 вопросов отвечает фразой "это у вас что-то, у нас все нормально"), бывают и исключения. А произошло вот что. Получатель спама, устав от рассылок, отсылает вашему провайдеру письмо-жалобу по поводу того, что с такого-то адреса ему рассылают нежелательную информацию. И довольно часто провайдер, не удосужившись уведомить вас, блокирует порт исходящей почты - что поделаешь, репутация превыше всего! (тем более что деньги-то вы уже заплатили).
Лучше всего, конечно, просто не допустить возникновения подобной проблемы. А для этого:
лично контролируйте содержимое менеджерских рассылок. По сетевому этикету, текст сообщения должен содержать информацию о том, как отказаться от рассылки, если получатель в ней не заинтересован;
обязательно создайте дополнительный ящик abuse@<ваш домен>. Этот адрес по умолчанию принят на всех почтовых серверах провайдеров как своего рода книга жалоб;
ну и, разумеется, при любых проблемах с почтой сразу же звоните провайдеру - возможно, это их рук дело.
Довольно часто пользователи в перерывах от напряженной работы начинают использовать почту не по назначению: отсылают знакомым фотографии с разрешением 600 dpi, песни в формате *.mp3, мультики про Масяню... И пока роутер послушно пересылает мегабайты, остальные пользователи вынуждены ждать окончания сессии. Тот же результат получается, когда пользователи получают по почте большие письма.
Опять же, ругаться с менеджерами бесполезно - никто ничего не отправлял и не получал: знать не знают, ведать не ведают. Но, как говорится, не хотите по-плохому - по-хорошему хуже будет. Заходим в Setup -> Miscellaneous Options -> Servers. Внизу, под заголовком Data transfer limit, можно установить ограничения на размер входящих и исходящих писем на свое усмотрение (рис. 4).
Рис. 4. Ограничение максимального размера письма
Всем сисадминам известна скверная привычка пользователей сходу читать вложения, не проверяя их на вирусы. Можно, конечно, установить антивирусные мониторы, типа антивируса Касперского. Но, во-первых, это довольно дорого. А во-вторых, антивирусные мониторы, не поделив с основной программой приоритет доступа, довольно часто "вешают" как рабочую станцию, так и сервер. Да и пользователи, освоив правую кнопку мышки, убирают антивирусный монитор из автозагрузки и системного трея.
Что делать?
Оказывается, при помощи почтового сервера можно довольно эффективно бороться с вирусами в почтовых вложениях, включая даже печально известный Klez. Для этого достаточно настроить фильтры (комбинация клавиш Ctrl+F5). В закладке Admins/Attachments можно ввести названия файлов и расширений, которые будут удаляться из входящего письма (рис. 5). У меня настроено разрешение только для *.rtf, а всякие *.doc, *.pif, *.scr, *.bat, не говоря уже об *.exe, мило "обрезаются". Таким образом я предотвратил у себя на работе вирусную эпидемию. Только не забудьте, настроив фильтр, предупредить пользователей, в каком формате можно получать вложения, иначе поднимется бунт.
Рис. 5. Фильтрация почтовых вложений
Emelfm
Менеджер файлов Emelfm 0.9.2 Автор: © Paul Evans | |
Скриншоты emelfm 0.9.2:
#1: Emelfm full screen #2: Emelfm context menu #3: one of emelfm's file-type dialogs #4: Emelfm keys dialog После того, как я перешел с Amiga на Slackware Linux, я потратил несколько лет на поиски замены программы Directory Opus. Сегодня, когда люди слышат: "файл-менеджер", они представляют совершенное разные вещи. Некоторым просто нужно копировать, переносить, переименовывать файлы и т.д. Другим хочется чего-то сверхестественного в управлении файлами. Из прихоти. Чтобы все настраивалось. Не сложно догадаться, что я из тех, кто относится ко второй группе. Я пробовал все, что попадалось под руку. Не важно, был ли это очередной клон Directory Opus или воистину великий файл-менеджер. Важно то, что всем им чего-то не хватало. Некоторые были чересчур медлительными, другие работали быстро, но имели ограничения в настраиваемости. Были и такие, которые быстро работали и здорово настраивались, единственная проблема с ними была в том, что настройка была уж слишком сложна. Во время своих экспериментов с файл-менеджерами я не переставал использовать легендарный Midnight Commander (старый добрый mc). В mc можно делать абсолютно все - нужно только настроить его соответствующим образом. Однако mc - это все же консольная программа, а большинство простых операций с файлами осуществляются гораздо легче через графический интерфэйс. Так возникла еще одна проблема: после 6 лет использования mc, к списку требований к моему идеальному файл-менеджеру, добавилась и необходимость сходства с mc. Итак, Dopus + mc. Здорово. Мне нужен был файл-менеджер, который бы полностью контролировался с клавиатуры и позволял настраивать сочетания клавиш и кнопок мыши для горячих клавиш. Впереди было удручающее и бесперспективное будущее. И так было до тех пор, пока не появился Майкл Кларк и не написал emelfm. В emelfm есть все, что мне надо. И еще много другого. Обзор. Как графический файл-менеджер emelfm не знает себя равных. Совершенно любая операция над файлами, рожденная самым безумным воображением, реализуема здесь. В нем воплощена вся функциональность, которой должен обладать современный графический файл-менеджер, и даже больше: emelfm умудряется в то же время повторять все возможности mc, включая переход в shell при нажатии ctrl+o. Также emelfm позволит вам легко создавать небольшие скрипты shell и потом запускать их нажатием на кнопку или выбирая их в контекстом меню. Да, конечно, можно все это было сделать просто написав скрипт или создав алиас (и, разумеется, никто вам не мешает сделать это и сейчас), но есть что-то чертовски приятное, когда вы просто выбираете мышкой несколько файлов, нажимаете на одну-единственную кнопку, и начинается волшебство. Я всегда чувствую себя как-то неловко, когда начинается очередная священная война типа "GUI против Консоли". Мне нравятся оба решения. Все зависит от ситуации: у каждого есть свои плюсы. На сегодняшний день не существует простого, интуитивно понятного способа воспользоваться всей мощью командной строки за счет телоджвижений типа укажи-и-щелкни-мышкой, и поэтому я безо всяких колебаний окунаюсь в этот мир командной строки, как только возникает необходимость (ну или из спортивнивного интереса). Теперь предположим, что я перерыл документацию к mpage и в конце концов написал: 'mpage -P -m50lb20t20r -j 1%2'. Да, это действительно та команда, которая мне нужна, но, к сожалению, ни пройдет и 5 минут, как я ее забуду. Решение проблемы: добавить эту команду в контекстное меню для файлов *.txt или создать для этого кнопку. Все это легко делается в emelfm. Причем данный пример достаточно тривиален по сравнению с тем, что можно сделать в emelfm. В данном случае я просто преследовал цель показать, что emelfm является связующим звеном между работой в командной строке и графическим интерфэйсом. Практически каждый графический файл-менеджер позволяет установить выполнение какого-то действия по умолчанию при двойном щелчке на файле. emelfm идет еще дальше. Если вы щелкнете правой конопкой мыши на том же файле перед вами появится список альтернатив. Обратите внимание на два момента: 1) ваш выбор расширяется, 2) список является контекстно-зависимым (от типа файла). Я, например, дважды щелкнув на файлах с расширениями htm, html, shtm или shtml, буду просматривать их в kless через w3m. Но, если щелкнуть на том же файле уже правой кнопкой, то передо мной появится список, где я выберу то, что мне нужно. Если и этого недостаточно - в меню всегда есть пункт "Открыть с помощью...", где я могу сразу же ввести нужную мне команду. В состав emelfm также входят 'vfs' для работы с тарболлами и архивами zip, плагин для создания архивов (с элегантным, интуитивно понятным интерфэйсом), простая в использовании версия 'for each', переименование по расширению и много другого. Вот кое-что еще, что есть у emelfm (в проивольном порядке): очень простая настройка для неизвестных типов файлов настраиваемое подсвечивание файлов (в зависимости от типа) реализация drag-and-drop внутри приложения и вне (для GTK приложений) настройка шрифтов плагины и документация для создания собственных доступ к домашнему каталогу в один клик "клонирование" любого файла внутри одной и той же директории под другим именем информативные листинги файлов различные способы сортировки файлов - всего один клик закладки назначение стартовых каталогов по умолчанию прием информации из командной строки (после ввода команды) многое другое. Как только это "многое другое" мне понадобытся - я сразу же вспомню, как что именно это "многое другое". Установка. Даже если вы никогда не собирали программ раньше, у вас не возникнет никаких проблем. emelfm собирается стандартным набором действий: Скачайте тарболл и рапакуйте его куда-нибудь. Перейдите в это "куда-нибудь" и сделайте 'make'. Затем: 'su' и 'make install'. Вот и все! Нажмите Control+d, чтобы выйти из режима суперпользователя и наберите emelfm в командной строке. Это все, что нужно сделать. Теперь можно сделать иконку для emelfm или добавить его в меню. Я пользуюсь KDE, поэтому через khotkeys назначил для запуска emelfm комбинацию control+esc (для быстрого запуска). Навигация. Как я уже писал чуть выше, одним из моих требований была возможность использования программы с клавиатуры. emelfm - делает это без всяких настроек, с листа. Стрелки вверх|вниз ведут себя предсказуемо. Клавиша влево - переносит вас на один уровень вверх в иерархии каталогов, вправо - открывает каталог. Tab или Spacebar - сворачивают активную панель. Enter или стрелка вправо на файле запускает команду, назначенную по умолчанию для этого файла. Если нажать Shift при передвижении по файлам, то можно перейти в режим множественного выбора файлов (выделенные файлы будут подсвечиваться). Также можно использовать Insert, как и в mc. Вот список сочетаний клавиш, назначенных по умолчанию. Это только начало. Можно легко воссоздать наш любимый mc, назначив все нужные комбинации клавиш. Потом добавьте специфические (ваши личные) сочетания. Как видно на скриншоте, настройка не требует интенсивного умственного напряжения. Разумеется, навигация с помощью мыши ничем не отличается от описанной выше для клавиатуры, она интуитивно понятна, и я думаю, что не стоит распространяться об этом. Двойной щелчок на файле приводит к выполнению действия, назначенного по умолчанию. Control+сlick - переход в режим множественного выбора файлов. И т.д. и т.п. Единственное, что хотелось бы отметить - это то, что операция drag-and-drop осуществляется за счет средней кнопки мыши. Использование. Итак, с чего начать? Можно настроить все: от клавишесочетаний до представления в колонках. Здесь у вас огромный выбор. Я просто поделюсь с вами несколькими идеями: Некоторые советы можно найти в файле readme Создайте кнопку с командой типа 'kdesu -c emelfm' Частенько приходится выполнять эту операцию...Теперь скажите emelfm, чтобы каталоги подсвечивались красным цветом, когда вы в режиме суперпользователя. Также постарайтесь направить свою силу воли на то, чтобы не изменять настройки по умолчанию для root - будет меньше соблазна работать под root. Сделайте одну кнопку для запуска xterm под root и одну - в режиме обычного пользователя. Замечательно то, что xterm открывается в текущем каталоге Создайте алиасы cf='./configure', mk='make' и (для рута) - mi ='make install' Как df, так и du, работают более "гуманно" с опцией -h (human) Прочитайте Readme целиком, это стоит того. Заключение. Программа не только сравнима с 'Dopus', но и превосходит ее. Перед тем, как вы начнете флэйм по этому поводу, я бы хотел сказать, что когда я пользовался Amiga, то помимо Dopus, мне приходилось иметь дело с тысячами строк кода rexx. Сейчас, с emelfm - несколько сотен строк скриптов на Perl и bash. Плюс, куча elf-бинарников. Не существует такой программы, которая бы удовлетворила каждого, но я знаю и экс-Амигоидов и новоявленных Пингвинистов, которые пользуются emelfm. Если вам нужно что-то максимально внешне похожее на Dopus, попробуйте Worker Рэлфа Хоффмана. Желающие могут ознакомиться со статьей о программе Worker. Чтобы понять, что такое волшебство в обращении с файлами - скачайте gentoo Эмила Бринка. Для встроенного ftp-клиента Хенрик Хармсен написал filerunner. Мне лично кажется, что своим внешним видом и устройством emelfm обязан больше всего именно filerunner. Список пожеланий: Списки альтернатив при нажатии правой кнопкой мыши на кнопках du для выбранных файлов Настройка цветов для кнопок Плагин для CD-RW Поддержка ftp Я знаю, что автор серьезно работает над первыми 4 пожеланиями. Подводя итоги, можно сказать, что именно такие парни, как Майкл Кларк, не дают мне начать изучать язык С :-) Автор внимательно рассматривает все предложения по улучшению программы (баг-репорты, новые функции и др.) | |
Copyright © 2000, Paul Evans. Copying license http://www.linuxgazette.com/copying.html Published in Issue 61 of Linux Gazette, January 2001 | |
Вернуться на главную страницу |
ENSIM
Как и решения SWsoft, технология Private Server компании Ensim ориентирована на поставщиков услуг хостинга Web и Internet. Как заявляет Энди Ким, вице-президент компании по маркетингу, решения на ее основе позволяют «делить» физические серверы на 100 виртуальных серверов Web.
«Как поставщик услуг я могу поделить один сервер на четыре виртуальных, гарантируя, что каждый владелец раздела получит доступ как минимум к четверти вычислительных ресурсов, — уверяет Ким. — Однако, если другие ресурсы свободны, их тоже можно использовать».
Это обеспечивает большую эффективность применения аппаратного обеспечения, уверен Ким. До 100 разделов могут использоваться для копирования и запуска относительно нетребовательного приложения наподобие брандмауэра.
Ким заявляет, что подход Ensim к реализации виртуальной среды, предполагающий создание логических выделенных серверов, требует меньше вычислительных ресурсов. По его утверждению, технология Private Server работает на всех машинах на базе Linux, а не только на тех, где установлены процессоры Intel.
«Уровень виртуализации оптимизирован с целью достижения наивысшей производительности, поэтому накладные расходы минимальны, — считает Ким. — С его помощью поставщик услуг способен разделить любые системы Linux. Например, однопроцессорный сервер — для установки на нем нескольких служб».
Патентованная технология, по его словам, предоставляет несколько «уровней изоляции». Виртуальные серверы предусматривают изоляцию ресурсов и ошибок, т. е. если на разделе возникнет сбой системного уровня, то другие виртуальные серверы продолжат работать. «Было бы интересно узнать, кто еще предлагает в полной мере гарантированную изоляцию сбоев. Это очень трудно осуществить так, чтобы для этих целей задействовалось менее 5% ресурсов», — подчеркивает он.
Технология Ensim, как уверяет Ким, обеспечивает легкую миграцию между системами наряду с другими функциями управления: «Наши разделы «интеллектуальны», они контролируют используемые ресурсы, а также следят за работой приложений и позволяют переносить их с одного раздела на другой».
Технология виртуализации Ensim работает под управлением Linux и Solaris, при этом Private Server трехлетней давности позволила заключить партнерские соглашения с IBM, Sun и Compaq.
Еще что-нибудь
Если вам приходится часто выполнять какую-нибудь нестандартную операцию регистрации нового пользователя (например, "почтового юзера" или фиктивного юзера для запуска коммуникационной программы), можно написать свою программу, которая будет выполнять только поставленную задачу, но, зато, не сделает ничего лишнего и не будет приставать с лишними вопросами как adduser.
Написание такой программы - не такая уж сложная задача, как может показаться на первый взгляд.
Ниже приводится пример программы, написанной на языке "интерпретатора комманд" sh, для регистрации "почтового юзера". Естественно, это не столько рабочая программа, сколько пример, который должен вдохновить вас на самостоятельное творчество. :-)
Некоторые пояснения. Программа использует системную утилиту id, которая выводит некоторую информацию о заданном юзере (причем, в качестве аргумента этой утилиты может использоваться как name юзера, так и его user ID). В данном случае она используется только для проверки - зарегистрирован ли уже такой юзер в системе.
Форма - id ... >/dev/null 2>&1
используется для того, чтобы подавить весь вывод этой утилиты, который, при использовании ее внутри программы, будет совершенно лишним.
#!/bin/sh
# Эти переменные вынесены в начало, чтобы их можно было легко поменять # при необходимости shell=/bin/date # имя Shell для регистртруемого юзера group=2000 # group ID для регистрируемого юзера uid=2000 # user ID, начиная с которого программа ищет # ближайший свободный
# найти ближайший не занятый user ID while (true) ; do if (id $uid >/dev/null 2>&1) then uid=$(($uid+1)) else break fi done
# Запросить Name для нового юзера и проверить его на уникальность, # если юзер с таким Name уже зарегистрирован в системе, сообщить # об этом и повторить вопрос while (true) ; do read -p 'User Name: ' name if (id $name >/dev/null 2>&1) then echo 'user "'$name'" already exists' else break fi done
# Запросить "реальное имя" юзера (чтобы записать его в General information) read -p 'Real name of "'$name'" : ' rname
# Сформировать учетную карточку и вписать ее в master.passwd echo $name'::'$uid':'$group'::0:0:Postbox for '$rname'::'$shell >> /etc/master.passwd
# Запустить pwd_mkdb, чтобы сделать изменения во всех файлах # БД учетных карточек pwd_mkdb -p /etc/master.passwd
# Запросить секретный пароль для нового юзера passwd $name
# Если необходимы еще какие-то действия - создать директорию или внести # изменения в другие файлы, то это можно сделать далее в той же программе. # Но, в данном случае, больше ничего делать не нужно.
Еще один способ описания конфигурации XKB
Кроме опций в общем файле конфигурации X-сервера (XF86Config) XKB может иметь свой отдельный файл конфигурации. Правда он в XFree86 не применяется и (увы) не описан. В то же время, с помощью этого файла можно
задать конфигурацию XKB для каждого дисплея по отдельности (если на машине запущено несколько X серверов на разных дисплеях) настроить намного больше внутренних параметров XKB, чем это позволяет XF86Config.
Собственный файл конфигурации XKB (назовем его так) должен находится в директории {XRoot}/lib/X11/xkb и называться X-config.keyboard
где - номер дисплея (обычно - X0-config.keyboard)
Еще один великолепный Shell
Автор: Алексей Федорчук, alv@newmail.ru
Опубликовано: 25.05.2002
Оригинал: http://www.softerra.ru/freeos/18055/
Немало дискового пространства [1] извел я на тезиса о несравненных достоинствах командных сред в текстовой консоли, сиречь shell'ов. Пора обратиться к вопросу – а какой же из всех этих замечательных shell'ов лучший?
Рискну предположить, что подавляющее большинство пользователей Linux'а используют в качестве командной среды не что иное, как bash – и при этом не жалуются. В BSD-системах более принят csh (вернее, его свободный клон tcsh – я в нем сам работаю, и вреда – ни малейшего). Вполне вероятно, что кто-то предпочитает /bin/sh из FreeBSD (римейк классического shell'а Борна) – из соображений экономии ресурсов. Или – столь же аскетичный ash, помещаемый обычно на resque-дискеты Linux.
А вот о чем слышать не доводилось – так это об использовании оболочки Корна (ksh), даже в ее public domain модификации (pdksh). Хотя стандарт POSIX 1003.2 на переносимые оболочки Unix, к коему апеллируют адепты sh-образных командных сред, именно из нее позаимствовал большинство своих «продвинутых» (то есть выходящих за рамки исходного Борновского shell'а) особенностей – историю команд, редактирование командной строки и переопределение его режимов, автодополнение и т.д., без чего ныне работа в командной строке Unix если и мыслима, то – с трудом.
Конечно, идеи большинства этих функций имеется и в csh, а в tcsh – так даже и прекрасная их реализация. Однако в силу особенностей синтаксиса ни та, ни другая среда даже не претендуют на совместимость с POSIX-стандартом.
И потому для меня было весьма интересно ознакомиться с оболочкой, аккумулирующей, по словам Андрея Шевеля [2], полезные свойства развитых сред типа bash, tcsh и pdksh. Имя ей – zsh. Которое я, применительно случаю, интерпретировал бы как финальную точку в shell'остроении, звездный момент последнего (или, по простому, звездеZ).
Сразу замечу – некоторые основания для такой интерпретации имеются. Действительно, zsh с точки зрения синтаксиса командного языка принадлежит к семейству shell'ов Борна, то есть может претендовать на некоторую совместимость со стандартом. Далее, она имеет все стандартные для современных полнофункциональных оболочек возможности интерактивной работы, как то:
буфер истории команд; управление заданиями; возможность редактирования командной строки; присвоение псевдонимов командам; автодополнение команд и путей, и все прочие, какие я только видел в других средах.
Конечно, всем этим трудно удивить приверженца bash или tcsh. Однако в ней есть и кое-что еще. Например, спеллинг командной строки. Конечно, и это само по себе не уникально. Однако проверка правильности ввода и автокоррекция в zsh распространяются не только на встроенные (как в bash) и даже внешние (как в tcsh) команды, но даже на пути и аргументы. Автодополнение само по себе – тоже не бог весть какое новшество. Однако приятная неожиданность в zsh – то, что оно действует также и на аргументы команд, как и вывод возможных для дополнения вариантов: чтобы просмотреть man-страницы по zsh (а их насчитывается дюжина), достаточно набрать man zsh
нажать Control+D – и выбрать из предложенного требуемую «маню»: manual page zsh zshcompctl zshcontrib zshmodules zshzftpsys zshall zshcompsys zshexpn zshoptions zshzle zshbuiltins zshcompwid zshmisc zshparam
Да и подсказка при выводе вариантов пополнения – дорогого стоит: она объясняет, что среди предложенного является каталогом, что – регулярным файлом, что – командой, встроенной или внешней.
Использование псевдонимов (alias) также вошло в быт: куда как проще раз и навсегда определить в профильном файле команду ls как псевдоним самой же себя, но с опциями -FG, нежели каждый раз вспоминать, как отличить в ее выводе каталоги от обычных файлов. Однако в zsh это дополняется возможностью определения псевдонимов для командных конвейеров в форме опций. Задав такой, скажем, в форме alias -g L='|less'
и указав его в качестве флага после команды ls, мы автоматом получаем в ответ постраничный вывод результатов просмотра каталога.
О редактировании командной строки говорить, казалось бы, нечего: это давно уже общее место всех оболочек, претендующих на развитость. Однако zsh и тут отличился – по количеству клавишных комбинаций для навигации по строке и ее изменению (как посимвольному, так и целыми командными «словами») он оставляет позади и bash, и tcsh. Приятно при этом, что принцип построения их (в отношении сочетаний с клавишами Control и Meta), а сами последовательности для наиболее частных действий (типа Control+C, Control+Z, Control+H/Meta+H, Control+D/Meta+D) обычно совпадают с таковыми и bash, и tcsh. К слову сказать, комбинации Meta+символ-Control+символ (а ими дублируется большинство простых последовательностей) работают и при русской раскладке клавиатуры.
То же и касаемо истории команд – в zsh есть все обычные средства доступа к буферу истории. Плюс – возможность разнообразного вывода списка «исторических» файлов и их перебора спереди назад, из конца в конец и вдоль и поперек.
А уж что касается встроенных команд – здесь за zsh просто абсолютный рекорд – их более 80 (дальше я, честно говоря, сбился со счета). Имеется, конечно, и полный набор условных и циклических операторов. А если обратить внимание на то, что zsh допускает возможность подключения дополнительных модулей (типа plug-ins), коих только в комплекте идет пара десятков – думаю, последние сомнения в функциональности этой оболочки отпадут.
В подтверждение своего соответствия стандартам zsh способен эмулировать также оболочки Борна и Корна – для этого исполняемые их файлы должны быть символическими ссылками на ~/bin/zsh. В этом случае продвинутые возможности самого zsh, конечно, остаются за кадром, но зато отпадает необходимость задумываться о совместимости. Есть в zsh и нечто вроде режима совместимости с оболочками семейства csh.
Выше всяких похвал возможности настройки zsh. На сей предмет в нем предусмотрено аж пять основных дот-файлов (их нужно вручную скопировать в домашний каталог из ~/examples), из которых ~/.zshenv и ~/.zshrc считываются при любом запуске оболочки, а ~/.zprofile и ~/.zlogin – в том случае, если она является первичной для пользователя (login shell).
В первом из указанных файлов определяются основные переменные среды, такие, как пути поиска исполнимых файлов. В ~/.zshrc задаются псевдонимы для команд и конвейеров, подключаемые модули, настраивается вид приглашений командной строки. В файле ~/.zprofile можно задать такие пользовательские переменные, как редактор, pager, терминал [3]. Наконец, в ~/.zlogin указываются действия, непосредственно предшествующие выводу приглашения – например, всякого рода полезные сообщения (или, напротив, очистка экрана от предшествующих сообщений системы). Действия при выходе из zsh описываются в файле ~/.zlogout.
Такая многоступенчатая схема конфигурирования может показаться неоправданно сложной. Однако она позволяет очень гибко управлять переменными оболочки и среды в различных условиях.
И в заключение – о том, что покорило меня в zsh с первого на него взгляда.Это – настройка вида приглашений командной строки. Мало того, что здесь предусмотрено четыре их уровня – от PROMPT до PROMPT4 (или PS1-PS4, допустимы обе формы): различный вид первичного приглашения, приглашения при вводе многострочных команд и т.д. обычен и для bash (или, в меньшей мере, для tcsh). Однако в zsh есть и приглашение, используемое при спеллинге (SPROMPT), и даже приглашение, дополнительно выводимое в правой части первичной командной строки (RPROMPT).
В качестве приглашений могут использоваться:
полное или сокращенное имя хост-машины ( последнее принято по умолчанию для первичного); путь к текущему каталогу в различных формах; номер текущей команды в буфере истории или строки в данном сеансе работы; имя пользователя, или командной оболочки; номер текущего терминала; дата и время в разных форматах; многое другое (вплоть до индикации работы от лица суперпользователя).
Плюс к этому приглашения могут быть оформлены визуально различными видами: выделением жирным шрифтом (boldface mode) или повышенной яркостью (underline mode), инвертированием цветов (standout mode). Все это позволяет добиться максимальной информативности приглашения и его внешней выразительности.
Меня всегда удивляло, почему обычно по умолчанию в большинстве случаев в приглашении командной строки выводится имя пользователя или хоста: не так уж часто приходится работать в том состоянии, когда не помнишь не только где находишься, но и кто ты есть. Гораздо полезней видеть путь к текущему каталогу и номер виртуальной консоли, а также – не забыл ли ты случайно выйти из режима администратора после монтирования zip-диска. И zsh способен сполна удовлетворить такие претензии…
В настоящей заметке я осветил лишь часть возможностей оболочки zsh [4]. остается добавить только, что автор ее первоначального варианта – Пауль Фальстад (Paul Falstad), прописана она на сайте http://www.zsh.org и входит во все известные мне полномерные дистрибутивы Linux, во Free- и OpenBSD (как в виде порта, так и пакета).
[1] См., например, серию заметок под общим именем «Апология консоли»:
http://www.softerra.ru/freeos/10274/
http://www.softerra.ru/freeos/10700/
http://www.softerra.ru/freeos/10759/
[обратно к тексту]
[2] Андрей Шевель. Linux. Обработка текстов. Специальный справочник. СПб: Питер, 2001, с. 60. [обратно к тексту]
[3] Кстати – в ~/examples этого файла нет, его при необходимости придется сделать вручную. [обратно к тексту]
[4] На странице я попробовал дать краткую справку по настройке zsh и управляющим последовательностям. [обратно к тексту]
Вниманию вебмастеров: использование данной статьи возможно только в соответствии
с правилами использования материалов сайта «Софтерра» (http://www.softerra.ru/site/rules/)
Еще раз об include
Кстати, возвращаясь к инструкции include. Если объявления из "включаемого" файла "перекрываются" с уже имеющимися, то "по умолчанию" считается, что они добавляются в режиме override (если внутри файла они не помечены другими "способами добавления"). То же самое "умолчание" действует, если в строке-аргументе include есть дополнительные файлы, через знак '+'.
А вот если вместо плюса стоит знак '|', то это означает, что следующий файл должен добавляться в режиме augment (опять же, некоторые объявления внутри него могут иметь свои "способы добавления").
Кроме того, "способ добавления" (кроме altrenate) может использоваться вместо инструкции include. То есть, вместо
include "group(toggle)"
можно использовать, например, инструкцию
replace "group(toggle)"
Нетрудно догадаться, что это означает, что все инструкции из файла (блока) "group(toggle)" должны быть вставлены в текущий файл (как по инструкции include), но при этом подразумевается, что у всех инструкций "способ добавления" - replace.
Иван Паскаль pascal@tsu.ru
Если вы выбираете третий способ - через "правила", "модель", "схему" и тд
Как я уже говорил,
название "правил" (rules) соответствет "архитектуре" (xfree86); "модель" (model) соответствует типу клавиатуры (pc101, pc102 и т.п.); "схема" (layout) отражает "язык" (ru).
Поэтому, подходящая конфигурация будет выглядеть примерно так -
XkbRules "xfree86" XkbModel "pc104" XkbLayout "ru"
С помощью XkbOptions можно подобрать "поведение" управляющих клавиш. Возможные значения XkbOptions и их смысл можно подсмотреть в файле {XKBROOT}/rules/xfree86.lst.
Не забудьте, что в последних версиях надо явно выбрать переключатель групп. Для CapsLock это будет -
XkbOptions "grp:caps_toggle"
Файл конфигурации
По умолчанию используется файл конфигурации /etc/syslog.conf. Вы можете указать другой файл конфигурации с помощью опции -f. Рассмотрим установки демона на примере обычного файла конфигурации: # Протоколирование аутентификации. Файл протокола /var/log/auth.log auth,authpriv.* /var/log/auth.log # Префикс "-" используется, если вы хотите синхронизировать # файл после каждой записи в него. *.*;auth,authpriv.none -/var/log/syslog # Сообщения пользовательских программ user.* -/var/log/user.log
# Протоколировать все (кроме mail (почты)). Уровень info и выше # Частные (private) сообщения протоколироваться не будут (none) *.info;mail.none;authpriv.none -/var/log/messages
# Файл регистрации частных сообщения имеет ограниченный доступ. # Обычно в этот # файл записываются сообщения об удаленном доступе к этой машине, # например, cообщения от демона FTP о том, какие пользователи и когда # регистрировались на данном сервере. authpriv.* /var/log/secure
# Протоколирование почты # Уровень отладки, информации и замечаний mail.=debug;mail.=info;mail.=notice -/var/log/mail/info # Уровень предупреждений mail.=warn -/var/log/mail/warnings # Уровень ошибок mail.err -/var/log/mail/errors
# Протоколирование демона cron. Уровни отладки, информации, # предупреждений и ошибок cron.=debug;cron.=info;cron.=notice -/var/log/cron/info cron.=warn -/var/log/cron/warnings cron.err -/var/log/cron/errors
# Протоколирование ядра kern.=debug;kern.=info;kern.=notice -/var/log/kernel/info kern.=warn -/var/log/kernel/warnings kern.err -/var/log/kernel/errors
# Протоколирование очереди печати lpr.=debug;lpr.=info;lpr.=notice -/var/log/lpr/info lpr.=warn -/var/log/lpr/warnings lpr.err -/var/log/lpr/errors
# Протоколирование новостей news.=debug;news.=info;news.=notice -/var/log/news/info news.=warn -/var/log/news/warnings news.err -/var/log/news/errors
# Протоколирование демонов. daemon.=debug;daemon.=info;daemon.=notice -/var/log/daemons/info daemon.=warn -/var/log/daemons/warnings daemon.err -/var/log/daemons/errors
# Критические сообщения *.emerg *
# Сохранять ошибки почты и новостей (уровень err и выше) # в отдельном файле uucp,news.crit -/var/log/spooler
# Загрузочные сообщения local7.* -/var/log/boot.log
Как вы уже заметили, файл конфигурации состоит из двух полей: объект протоколирования и файл, в который будут записываться сообщения, порождаемые этим объектом. Для каждого объекта можно указать один из уровней протоколирования: debug, info, notice, warn, err. Первые три относятся к информационным сообщениям. Уровень warn – это предупреждения, а err – ошибки. Существуют специальные сообщения – критические. Обычно они выводятся прямо на консоль. Как для обозначения объектов, так и для обозначения уровней протоколирования можно использовать символ *, который обозначает все объекты или все уровни. Например, вы хотите протоколировать все сообщения демонов в файл /var/log/daemons, используйте такую конструкцию: daemon.* /var/log/daemons
Пример протоколирования всех сообщений уровня emerg (критический уровень) приведен выше. Если вы хотите отправлять сообщения не в файл, а в поименованный канал (FIFO), используйте символ | перед именем файла-потока.
Файл, типа xkb_compat
В этом файле описывается поведение клавиш модификаторов - какие изменения происходят в состоянии клавиатуры (изменения битов-модификаторов и "номера группы") при нажатии этих клавиш.
Напомню, что внутри XKB существует структура (таблица) - Xkb Compability Map, которая состоит из двух частей
набора (массива) "интерпретаций" (interpret) четырех переменных, которые определяют - какие "реальные" модификаторы (модификаторы "традиционного" клаватурного модуля X-сервера) будут отображать изменение "номера группы".
Если прикладные программы обращаются к X-серверу не специальными XKB-запросами, а запросами к "традиционному" клавиатурному модулю X-сервера, которые должны поменять "привязку" кодов символов (или реальных модификаторов) к скан-кодам, то модуль XKB, выполнив требуемый перенос, пытается также пренести и "действия", "привязанные" к скан-кодам (и некоторые другие параметры клавиши).
Для выполнения такого "переноса" и используется Xkb Compability Map.
В файле типа xkb_compat могут встречаться объявления
Объявление виртуальных модификаторов.
Описание "интерпретации".
Объявление "отображения номера группы в модификатор".
Описание поведения индикатора.
Объявление "умолчания".
Файл типа xkb_keycodes
Эти файлы (блоки) имею очень простую грамматику. В них просто для всех скан-кодов задаются символические имена, которые потом используются в файлах типа xkb_symbols для назначения каждой "физической" клавише всех возможных значений.
Надо заметить, что те скан-коды, которые в них используются, имеют весьма отдаленное отношение к "физическим" скан-кодам, которые считываются из "железного" контроллера клавиатуры. Во-первых, X-сервер сам не считывает скан-коды непосредственно из регистров контроллера, а берет их от соответствующих драйверов (например, сервер Xfree86 запущенный на машине с FreeBSD, берет все коды от драйвера "системной консоли" - syscons).
А, кроме того, сам X-сервер переводит эти коды в свои "унифицированные" скан-коды, которые не зависят от архитектуры ("железной" и "софтверной") системы.
Поэтому, при выборе подходящей таблицы xkb_keycodes надо ориентироваться на тип X-сервера, который вы используете. Так, для сервера из "семейства" XFree86, самое правильное - брать определения keycodes, которые соответствуют набору скан-кодов, выдаваемых XFree86.
В файле xkb_keycodes могут встречаться четыре типа объявлений.
Объявление переменной.
Объявление Имени Клавиши.
Объявление Алиаса Клавиши.
Объявление Имени Индикатора.
Файл типа xkb_symbols
В этих файлах собственно и описыватся "раскладка клавиатуры". То есть, для каждой физической клавиши (скан-кода) задается набор всех возможных символов, которые будут выдаваться в зависимости от текущего "состояния клавиатуры" (номера группы и состояния модификаторов).
Напомню, что с каждой клавишей связана таблица символов (symbols). Эта таблица делится на под-таблицы - группы (group), выбор конкретной группы зависит от текущего номера группы в "состоянии клавиатуры". Каждая группа, в свою очередь делится на колонки - уровни (shift level), выбор уровня зависит от типа клавиши (type) в данной группе и состояния модификаторов.
Надо заметить, что разные клавиши могут иметь разное количество групп, и разные группы одной клавиши могут иметь разное количество уровней.
Также, с некоторыми клавишами может быть связана аналогичная двумерная таблица "действий" (actions). Хотя обычно, действия "привязывают" не к скан-кодам в файлах xkb_symbols, а к соответствующим символам в файлах типа xkb_compat.
Прежде чем рассматривать грамматику файла xkb_symbols, рассмотрим - какие еще данные могут быть связанны со скан-кодами, кроме таблиц символов и "действий". Как правило, для всех этих данных есть значения по умолчанию, поэтому, обычно они в файлах xkb_symbols явно не указываются. Но, если есть необходимость, их можно также явно задать в файлах этого типа.
Итак. С каждым скан-кодом связаны
тип клавиши - типы описываются в файлах xkb_types и определяют зависимость уровня от состояния модификаторов. Заметьте, что тип клавиши может быть свой в каждой группе. Но если все группы для данного скан-кода имеют один и тот же тип, то в описании клавиши можно указать его один раз, не "расписывая" по всем группам. "метод выравнивания" номера группы - напомню, что некоторые клавши могут иметь меньшее количество групп, чем все остальные. Поэтому, при нажатии такой клавиши может оказаться, что номер группы в "состоянии клавиатуры" выходит за границы, допустимые для данной клавиши. В этом случае он "выравнивается" до приемлимого значения. "Методы выравнивания" для отдельных клавиш такие же, как и глобальные (см. "Внутренности...":Метод Выравнивания) автоповтор (autorepeat) - логический "флаг", который определяет - нужен ли автоповтор для данной клавиши. "поведение" клавиши (behavior) - набор флагов и дополнительный аргумент, которые определяют...
"залипание" (locking) - если клавиша "залипающая", то при первом нажатии/отжатии выдается только сообщение о нажатии клавиши, а при повторном нажатии/отжатии - только сообщение об отжатии клавиши. "радио-группа" - клавиша принадлежит к радио- группе клавиши, дополнительный аргумент определяет номер этой радио-группы. Напомню, что клавши одной радио-группы являются взаимозависимыми. То есть, при нажатии одной из клавиш группы, она "залипает", а остальные клавиши этой группы "отжимаются". допускается "отжатие всех" (allow none) - имеет смысл для клавиш радио-группы. если этот флаг установлен, то повторное нажатие на клавшу - члена радио-группы, она "отжимается". При этом все члены группы могут находиться в отжатом состоянии. Если же этот флаг не стоит, то для отжатия клавиши надо нажать любую другую из той же группы. При этом в группе одна из клавиш остается нажатой. перекрытие 1 - указывает, что клавиша относится к группе "перекрывающихся" клавиш (overlay). Если в состоянии клавиатуры установлен "управляющий флаг" Overlay1, то эта клавиша должна "отослать" XKB к другому скан-коду, который задан дополнительным аргументом. перекрытие 2 - то же самое, что и предыдущий, только эти клавиши зависят от "управляющего флага" Overlay2. permanent - может комбинироваться с другими флагами и означает, что соответствующая функция выполняется "железом" клавиатуры и нет необходимости эмулировать ее в XKB программно.
виртуальный модификатор (или несколько модификаторов) - этот модификатор может использоваться в качестве аргумента для "действия", если с клавишей связаны какие-нибудь "действия". Надо заметить, что, как правило, виртуальные модификатооры "назначаются" не в файлах xkb_symbols, а, как и "действия", в файлах xkb_compat. "набор исключений" - запрещает выполнении "интепретаций" - изменения привязки "действий" при изменении привязки символов к скан-кодам. Можно запретить выполнение всех действий "интерпретации" для данной клавиши или только отдельных ее шагов - перенос виртуального модификатора, перенос "автоповтора", перенос "залипания". и, наконец, в отдельной таблице может быть задана "привязка" реальных модификаторов к скан-кодам. Если с клавишей связан реальный модификатор, то, при нажатии клавиши, автоматически меняется состояние соответствующего модификатора в наборе "традиционных модификаторов", который эмулируется XKB для старых клиентских программ, "не знающих об XKB". Кроме того, "привязка" реальных модификаторов может использоваться при выполнении "интерпретаций" (interpretation).
Файл типа xkb_types
В этом файле описывается - каким образом вычисляется "уровень" (shift level) в таблице символов (symbols) для каждой клавиши.
Напомню, что с каждой клавишей (скан-кодом) в XKB связано от одной до четырех однострочных таблиц символов. Конкретная таблица выбирается в соответствии с "текущим номером группы" (group number), а конкретный символ в группе значением "уровеня" (shift level).
Обычно, разные "номера групп" используется для разных национальных языков (точнее - алфавитов), а разные "уровни" используются для больших/маленьких букв (в общем-то, все знают - что меняется при нажатии кнопки Shift). Хотя заметим, что XKB позволяет иметь до четырех групп и до 64 (!) "уровней"
Так вот. Если изменение "номера группы" описывается в файле xkb_compat, то зависимость "уровня" от нажатия клавиш-модификаторов (Shift, Control, Alt и т.п.) описывается как-раз в файлах xkb_types.
Точнее, в этих файлах описываются "типы" клавиш. Каждый тип имеет название (в общем-то, произвольное), а в "описании типа" определяется - как вычислять "уровень" для клавиш этого типа.
Соответственно, в файлах xkb_symbols, где скан-кодам "приписываются" необходимые массивы возможных символов для каждой клавиши в каждой группе, указывается и тип этой кнопки. Правда, для большинства групп в XKB уже определены типы "по умолчанию" (и соответственно, описаны четыре основных типа). Поэтому, не ищите в файлах xkb_symbols явного указания типа, они используются только в том случае, если тип нестандартный.
Итак. В файле xkb_types могут встретиться объявления
Объявление виртуальных модификаторов.
Объявление типа.
Файловая система
Работа с дисками, файловыми системами и другими блочными устройствами для Linux здорово отличается от аналогичной работы для Windows. Это опять же связано с идеологическими требованиями, с которых я начал. Корневая файловая система - та, которая предоставляет точку отсчета для всех файловых систем в Linux. Для всех файловых систем применяется так называемый механизм монтировки (я знаю, что Windows тоже монтирует файловые системы, но доступ человека к этому процессу крайне ограничен). Это означает, что любая файловая система перед работой должна быть зарегистрирована ядром. В разделе, посвященном ядру, было описано незначительное количество типов файловых систем, поддерживаемых Linux, всего их более 40. Каждая файловая система имеет свой набор параметров, которые можно менять для более эффективной работы (а иногда следует менять просто для работы). Эти параметры свои для каждой файловой системы, и некоторые из них ядро умеет определять самостоятельно. Для тех же, которые ядро не определяет, существует файл fstab. Пусть вас не обманывает его кажущаяся простота - количество параметров, которые можно в него вносить, порядка тысячи. Правда, для обычного домашнего компьютера с файловыми системами для Linux и DOS/Windows вполне можно обойтись десятком.
Поскольку пользователь не должен знать о физической структуре компьютера, то каждый раздел на жестком диске, дисководы для флоппи и CD-ROM, а также каждый стриммер, или иной носитель информации, представляется простым каталогом. Выбор этого каталога - дело администратора, но обычно следуют соглашению о том, что каждый неродной для Linux раздел находится в поддиректории директории /mnt. Для этого в ней создаются директории вроде diskc, cdrom, floppy. После монтирования файловой системы эти директории будут называться точками монтирования. Туда можно записать все что угодно, но после монтирования эти данные станут недоступными, хотя место на диске занимать будут. А потому этого делать не рекомендуется. (Существовало предложение о решении проблемы скрытой массы Галактики, как о гипотетической галактике записанной в Пространство до монтирования нашей.) Эту информацию тоже полезно внести в fstab.
umask=nnn | Маска доступа по умолчанию. Для этой и следующей опции по умолчанию используется для FAT пользователь, смонтировавший систему, а для NTFS - root. |
uid=n, gid=n | GID и UID владельца по умолчанию. |
codepage=866 | Кодировка родного языка для FAT (показан русский) |
quiet | Изменения UNIX-атрибутов не происходит и не приводит к ошибке. |
uni_xlate | Заменять Unicode-символы. Практически всегда следует указывать. Позволяет правильно работать с пробелами в названии файлов. |
iocharset=koi8-r | Кодировка родного языка для Linux (так же показан русский) |
В последнем столбце стоят 2 числа - fs_freq и fs_passno. fs_freq может принимать значение 0 и 1, и отвечает за создание резервной копии раздела в случае сбоя системы. Это полезно на больших корпоративных серверах с RAID'ом и для системных программистов, разрабатывающих модули для ядра. Остальным не требуется. fs_passno определяет порядок проверки файловой системы при первичной загрузке системы. Число 1 обязательно следует указывать для корневой файловой системы. Если вы захотите проверять что-нибудь кроме нее, то ставьте число 2, в противном случае - 0.
Такое монтирование файловых систем имеет свои ограничения. Первое ограничение связано с кэшированием записи в файловую систему. Дело в том, что нельзя извлекать носитель информации до того как его не размонтировали. Если вы просто читали с него, то это часто полбеды. А вот если еще и писали... Последствия могут быть самыми неожиданными, вплоть до полной остановки системы из-за не вовремя вынутой дискеты. Причем именно дисковод являются самым незащищенным носителем. (Это одна из причин, по которым я считаю, что дисководу не место в профессиональной машине.) Привод CD защищается режимом Read-Only и блокировкой лотка. Блокировка лотка приводит к тому, что нажатие на клавишу eject на панели привода не возымеет никакого действия до тех пор, пока не размонтируете файловую систему диска. Другое ограничение это то, что для работы со сменным носителем приходится каждый раз набирать команду mount.
Частично эти ограничения позволяет обойти автомонтирщик. Это программа, которая монтирует сменный носитель при обращении к нему. Для того, чтобы использовать автомонтировщик, следует включить его поддержку в ядре. Самый распространенный автомонтировщик это autofs. Он управляется файлом auto.master. Структура auto.master #каталог управляющий файл /mnt /etc/auto.misc
Каждый раз, когда происходит обращение к каталогу /mnt, запускается автомонтировщик с управляющим файлом /etc/auto.misc. #auto.misc #подкаталог опции :устройство cdrom -fstype=iso9660 :/dev/hdc floppy -fstype=auto :/dev/fd0
Тогда при дальнейшем обращении к /mnt/cdrom происходит запуск mount для устройства /dev/hdc с указанными опциями. Указание в опциях файловой системы для носителя обязательно, остальные опции могут браться из fstab.
Проведение проверок дисков является необходимостью, независимо от используемой файловой и операционной систем. В Linux для этого служит целый набор команд. Команда badblocks проводит проверку поверхности диска на читаемость и записываемость, она действует независимо от используемой файловой системы. Для ее выполнения файловую систему необходимо размонтировать (ГРАБЛИ! все проверки дисков это ПОСИМВОЛЬНЫЕ команды), а затем отдать команду badblocks /dev/hda3 > /tmp/bblcks3
После этого вся информация о поврежденных участках поступит в файл /tmp/bblcks3. Это необходимо, т.к. далее она понадобится для проверки файловой системы.
Проверка файловой системы на носителях проводится различными (ПОСИМВОЛЬНЫМИ!) командами, в зависимости от типа файловой системы (есть общая fsck, которая занимается только тем, что вызывает специфическую, и для работы требует указывать тип файловой системы). Обычно требуется только e2fsck. Она проводит проверку суперблока файловой системы, структуры директории, а также может проводить проверку читаемости поверхности. Однако последнее не требуется, если вы использовали команду badblocks. Еще раз обращу ваше внимание на то, что для запуска проверки файловая система должна быть размонтирована, или, в крайнем случае, смонтирована read-only. e2fsck -l /tmp/bblcks3 /dev/hda3
Тогда при проверке будет предпринята попытка перенести информацию с поврежденного блока на целый. Иногда это удается.
Файловая система, продолжение
Содержание: |
Linux Navigator. Консоль
Linux Navigator. Инсталляция
Linux Navigator. Опции ядра
Linux Navigator. Администрирование
Linux Navigator. Файловая система 1. Монтирование.
Linux Navigator. Файловая система 2.
Linux Navigator. Настройки сети.
Содержание: |
Linux Navigator. Консоль
Linux Navigator. Инсталляция
Linux Navigator. Опции ядра
Linux Navigator. Администрирование
Linux Navigator. Файловая система 1. Монтирование.
Linux Navigator. Файловая система 2.
Linux Navigator. Настройки сети.
dd if=/dev/zero of="/tmp/cdimage" bs=1024k count=650
В нем создается файловая система iso9660 (можно создать любую другую, например ext2, fat или ntfs, но прочесть такие диски будет можно только под Linux)
mkisofs /tmp/cdimage
Команда выругается, попробует послать вас подальше, но вы не поддавайтесь, и ответьте yes на вопрос о продолжении работы. Затем полученный образ монтируется как обычное блочное устройство
mount -t iso9660 -o loop=/dev/loop1 /tmp/cdimage /mnt/cdrw
После это вы просто записываете желаемые файлы в директорию /mnt/cdrw. В этом состоит весь второй этап. В последнем или третьем этапе происходит непосредственно запись.
cdrecord -v speed=8 -data /tmp/cdimage
В большинстве дистрибутивов установка программ автоматизирована с помощью системы пакетов. Системами пакетов управляют пакетные менеджеры, самый удачный из которых - rpm (Redhat Packet Manager). Он устанавливается на многих дистрибутивах, а не только на Red Hat Linux. Есть и другие пакетные менеджеры, но их возможности только частично покрывают возможности rpm. Наиболее удобной возможностью rpm является прослеживание взаимосвязи между отдельными пакетами. Все пакеты rpm имеют специальную форму, в которой пишутся их названия.
имя-версия-модификация.архитектура.rpm
Имя - это название упакованного файла, версия и модификация отвечают за новизну и оригинальность, а архитектура показывает, для какого процессора скомпилирован данный код. Архитектура может быть самая разная, постарайтесь найти свою. С параметром архитектуры src пакуются исходные коды, которые придется компилировать, а noarch означает, что пакет заработает для Windows (обычно в таких пакетах документация). Параметры команды rpm могут быть следующие:
rpm -i [опции] Установка пакета. rpm -U [опции] Обновление пакета. rpm -e [опции] Удаление пакета.
Дополнительные опции для установки и обновления
-oldpackage - Разрешить замену нового старым.
-replacefiles - Разрешить замену любых файлов. Будьте осторожны.
-replacepkgs - Устанавливать пакет, даже если он уже установлен.
-force - Все три предыдущих вместе.
-nodeps - Не проверять зависимости перед установкой.
-allfiles - Устанавливать все файлы, не обращая внимание, на их возможное отсутствие.
-notrigger - Запретить триггеры (программы, которые запускаются автоматически после установки).
-excludedocs - Не устанавливать документацию.
-includedocs - Обратно предыдущему.
-test - Только проверить будущую установку.
Дополнительные опции для удаления:
-allmatches - Удаление всех версий пакета.
-noscript - Запрет preunistall и postuninstall.
-nodeps - Не проверять зависимости.
-notrigger - Запрет триггеров.
-test - Только проверка.
Управляется rpm файлом rpmrc. Менеджеры пакетов очень удобны, не следует только ставить несколько разных на одну систему. В пакетах rpm например распространяются драйвера для видеокарт nVIDIA. Тогда если у вас чистый дистрибутив, вам следует только скачать с сайта www.nvidia.com необходимые пакеты и установить, как описано в файле Nvidia Linux Driver Installation. Установка этого драйвера отличается от обычной, а потому расскажу, как она происходит. Она делится на 2 основных этапа - установка драйвера видеокарты и библиотеки GLX. Библиотека GLX это библиотека функций OpenGL для Linux и XFree86 4. Сначала прочтите файл readme, поверьте, лучшего описания драйвера я не встречал никогда. Загрузитесь без графической оболочки (режим init 4), и выполните
rpm -i NVIDIA_kernel-1.5-2880.i386.rpm
Это ставится драйвер nVIDIA. Его название kernel немного обескураживает, но думаю, можно сделать скидку на манию величия разработчиков. Он распространяется в виде откомпилированного модуля для ядра (все нужные функции в ядре Linux указали?). При установке запустятся триггеры, которые создадут устройства /dev/nvidia1, /dev/nvidia2, /dev/nvidia3 и /dev/nvidia4. А также добавят новый ядреный модуль в список загружаемых. Имейте в виду, что для работы GLX вам потребуется версия графической оболочки X Window XFree86 не ниже 4. В противном случае Quake III Arena, Return to Castle Wolfenstein и др. не запустятся.
rpm -i NVIDIA_GLX-1.0-2880.i386.rpm
Самым последним ( и самым сложным) является внесение изменений в конфигурационный файл X Window. Это файл /etc/X11/XF86Config-4. Не перепутайте, есть похожий XF86Config, он не подойдет. В этом файле необходимо заменить строку
device "nv"
на
device "nvidia"
А строки
Load "dri" Load "GLcore"
закомментируйте. Запустите X командой startx и работайте (в смысле играйте). Однако этот простой метод не подойдет, если вы поставили иную версию ядра, отличную от стандартной для данного дистрибутива. Тогда самым лучшим выходом будет установка драйвера из архива. Библиотеки NVIDIA_GLX это не касается.
Для этого скачайте файл NVIDIA_kernel-1.0-2880.tar.gz и распакуйте командой
tar xzf kernel-NVIDIA_1.0-21880.tar.gz
После это в получившемся каталоге выполните команду
make install
Теперь можно играть. Другие устройства в современных дистрибутивах устанавливаются и конфигурируются автоматически демоном kunzu, интерфейс которого очень похож на аналогичный сервис Windows. Понятно, при условии, что у вас есть уже поддержка этого устройства в ядре или диск с модульным драйвером. Этот демон умеет очень много и почти полностью освобождает администратора от необходимости устанавливать прерывание, область DMA, и многих других часто ненужных вещей. Он умеет даже после установки новой видеокарты сделать нормальную загрузку графической среды.
Установка программ для пакетных систем - занятие несложное, не требуется даже знать где находится сама программа, ссылки на нее обычно автоматически появляются сами в /bin или /usr/bin. Однако есть класс программ, о которых следует поговорить отдельно. Я говорю об играх. На мой взгляд, столь сильная популярность Windows на отечественном рынке не связана ни с простотой установки, ни с легкостью управления, ни даже с доступностью в ларьках у метро. Первые два это просто не правда, а второе - следствие Главной Причины. Главная причина - это Огромное Количество Разнообразных Игрушек на Рынках Нашей Бескрайней Родины. Большинство статьей, посвященных операционным системам, говорят "система XXX предназначена для игр и медиа, система YYY для научных расчетов, система ZZZ - исключительно для сети". Никому из них, видимо, даже не приходит в голову, что операционная система, которая НЕ предназначена для работы ВСЕХ ВОЗМОЖНЫХ программ, просто не нужна. Так же и с Linux, но если пройти по рынкам, скорее всего вы игр не найдете (а если найдете, напишите мне, я тоже туда схожу). Тем не менее, игры есть, и достать их не сложно, достаточно скачать из Интернета.
Для того чтобы получить игрушку для Linux, зайдите на сайт производителя игры и скачайте демку для Linux, которую установите в директорию к полной версии игры для Windows. (Я считаю унизительным использование эмуляторов.) Иногда после этого следует убрать остатки демки. Для Quake III после такой установки, в основной директории игры появляются файл quake3.x86 и поддиректория q3demo. Эту поддиректорию можно (но не обязательно) стереть для сохранения места, поскольку она больше не имеет значения для самой игры. Причем версия для Windows сохранилась, поскольку сохранился файл quake3.exe. Есть способ удобнее, но сложнее. Необходимый файл quake3.x86 также можно вынуть из патча для Linux.
С Unreal Tournament все незначительно сложнее. UTdemo для Linux не следует сразу устанавливать в директорию полной игры, установите во временную. Вам потребуется только поддиректория System демки, которую и перенесите в основную директорию полной игры. Самым последним этапом установки UT является установка последнего патча, также с сайта производителя, для того чтобы не произошел конфликт версий. Найти большое количество демок можно на сайте компании Loki Games, производителя и портера игр для Linux, по адресу http://www.loki.com.