[root]# sfdisk -l -x /dev/hda
Disk /dev/hda: 784 cylinders, 255 heads, 63 sectors/track
Units = cylinders of 8225280 bytes, blocks of 1024 bytes, counting from 0
Device Boot Start End #cyls #blocks Id System
/dev/hda1* 0+ 189 190- 1526143+ 6 FAT16
/dev/hda2 190 783 594 4771305 5 Extended
Тем же шрифтом Courier выделены все упоминания команд и утилит Linux, встречающиеся в тексте.
В качестве приглашения оболочки в примерах используется строка [root]#, если команда должна выполняться от имени пользователя root, и строка [user]$, если команда может выполняться от имени обычного пользователя.
Если говорится о том, что надо нажать какую-то клавишу, то название клавиши (точнее, то обозначение, которое нанесено на клавише) заключается в угловые скобки: ‹Enter›, ‹Esc›, ‹Ctrl›, ‹Alt›, ‹A›, ‹S› и т. д. Если должны быть нажаты одновременно несколько клавиш, то обозначения отдельных клавиш соединяются знаком +: ‹Ctrl›+‹Alt›+‹Del›, ‹Ctrl›+‹X›. Если же нужно последовательно нажать несколько клавиш или соответствующих комбинаций, то разделителем будет служить запятая: ‹Ctrl›+‹X›, ‹C› или ‹Esc›, ‹5›.
Отдельно нужно сказать о клавише ‹META›, которая часто упоминается в разных HOWTO и руководствах, а также используется в некоторых приложениях, например, редакторе Emacs. Говорят, такая клавиша была на старых клавиатурах UNIX-компьютеров, поэтому она и используется в UNIX-системах. Однако на PC-клавиатурах такой клавиши нет, и ее приходится эмулировать. В консоли вместо ‹META› Вы можете использовать клавишу ‹Alt›. В системе X Window (в графической оболочке) это может не сработать. Поскольку ‹META› - это клавиша-модификатор, то она упоминается обычно, когда требуется нажать комбинацию ‹META› с какой-то другой клавишей. В таких случаях надо нажать клавишу ‹Esc›, отпустить ее, после чего нажать вторую требуемую клавишу. Но все сказанное относительно ‹META› надо иметь в виду, когда вы будете читать HOWTO и прилагаемые к программам руководства. В этой же книге я постараюсь корректно указывать, какие комбинации надо набирать на клавиатуре PC.
Ссылки на литературу и источники в Интернете сведены в Приложение в конце книги (мне думается, что так их легче отыскать в процессе чтения). Однако нумерация ссылок производится в рамках каждой главы отдельно. Поэтому в тексте ссылка указывается с указанием на конкретный раздел приложения: [П12.7].
From: torvalds@klaava.Helsinki.FI (Linus Benedict Torvalds) Newsgroups: comp.os.minix Subject: What would you like to see most in minix? Summary: small poll for my new operating system Message-ID: ‹1991Aug25.205708.9541@klaava.Helsinki.FI› Date: 25 Aug 91 20:57:08 GMT Organization: University of Helsinki Hello everybody out there using minix - I'm doing a (free) operating system (just a hobby, won't be big and professional like gnu) for 386(486) AT clones. This has been brewing since april, and is starting to get ready. I'd like any feedback on things people like/dislike in minix, as my OS resembles it somewhat (same physical layout of the file-system (due to practical reasons) among other things). I've currently ported bash(1.08) and gcc(1.40), and things seem to work. This implies that I'll get something practical within a few months, and I'd like to know what features most people would want. Any suggestions are welcome, but I won't promise I'll implement them:-) Linus (torvalds@kruuna.helsinki.fi) PS. Yes - it's free of any minix code, and it has a multi-threaded fs. It is NOT portable (uses 386 task switching etc), and it probably never will support anything other than AT-harddisks, as that's all I have:-(.В этом сообщении Линус пишет, что он работает над (свободной) операционной системой для 386-х (486-х) компьютеров, и просит всех заинтересованных лиц сообщить, какие компоненты системы пользователи хотят видеть в первую очередь. Но, как видно из текста послания, оболочка bash и компилятор gcc у него уже работали. Работали они под управлением операционной системы Minix, которая была разработана профессором Э.Таненбаумом (Andy Tanenbaum) как учебное пособие для студентов-программистов. Minix работала на компьютерах с 286-ым процессором и послужила для Торвальдса прообразом новой ОС. Файлы первого варианта Linux (версия 0.01) были опубликованы в Интернете 17 сентября 1991 года. Как пишет сам Торвальдс: "As I already mentioned, 0.01 didn't actually come with any binaries: it was just source code for people interested in what linux looked like. Note the lack of announcement for 0.01: I wasn't too proud of it, so I think I only sent a note to everybody who had shown interest."[3] Затем, 5 октября 1991 г. была выпущена версия 0.02, которая уже работала. Впрочем, подробное изложение истории Linux не входит в задачи данной книги, поэтому продолжать данную тему я не буду, отсылая заинтересованных читателей к [П3.1]. Л. Торвальдс не стал патентовать или иным образом ограничивать распространение новой ОС. С самого начала[4] Linux распространяется на условиях, определяемых лицензией General Public License (GPL), принятой для программного обеспечения, разрабатываемого в рамках движения Open Source и проекта GNU (см. [П3.2]). На Linux-сленге эту лицензию иногда называют Copyleft. Об этой лицензии, движении Open Source и проекте GNU необходимо поговорить особо. В 1984 году американский ученый Ричард Столлман (Richard Stallman) основал Фонд Свободного Программного Обеспечения (Free Software Foundation). Целью этого фонда было устранение всех запретов и ограничений по распространению, копированию, модификации и изучению программного обеспечения. Ведь до тех пор коммерческие компании тщательно оберегали разработанное ими программное обеспечение, ограждали его патентами и знаками защиты авторских прав, держали в строжайшем секрете исходные коды программ, написанных на языках высокого уровня (типа С++). Столлман считал, что это наносит огромный вред развитию ПО, приводит к снижению качества программ и наличию в них огромного количества невыявленных ошибок. И, что хуже всего, это приводит к замедлению процесса обмена идеями в области программирования, тормозит создание нового ПО в силу того, что каждому программисту приходится полностью заново писать каждую программу, вместо того, чтобы заимствовать уже готовые куски исходного кода из готовых программ. В рамках Фонда Свободного ПО была начата разработка проекта GNU - проекта создания свободного программного обеспечения. Аббревиатура GNU открывается рекурсивно - GNU's Not Unix, т. е. то, что принадлежит проекту GNU, не является частью Unix (потому что к тому времени даже само слово UNIX уже было зарегистрированной товарной маркой, т. е. перестало быть свободным). В "Манифесте GNU" [П3.3], который был написан в 1985 г., Р. Столлман в качестве главной движущей силы, которая привела к возникновению FSF и проекта GNU, ставит свое неприятие прав собственности отдельных людей на программное обеспечение. То, что разрабатываемое в рамках проекта GNU ПО свободно, не означает, что оно распространяется без лицензии и никак не защищено в юридическом смысле. Программы, разрабатываемые в рамках движения Open Source, распространяются на условиях лицензии General Public License(GPL) [П3.2]. Если сказать очень кратко, то суть этой лицензии состоит в следующем. Программное обеспечение, распространяемое под этой лицензией, можно как угодно дорабатывать, модифицировать, передавать или продавать другим лицам при условии, что результат такой переработки тоже будет распространяться под лицензией copyleft. Последнее условие - самое важное и определяющее в этой лицензии. Оно гарантирует, что результаты усилий разработчиков свободного ПО останутся открытыми и не станут частью какого-либо лицензированного обычным способом продукта. Оно также отличает свободное ПО от ПО, распространяемого бесплатно. Говоря словами создателей FSF, лицензия GPL "делает ПО свободным и гарантирует, что оно останется свободным". Практически все ПО, распространяемое на условиях GPL, является почти бесплатным для пользователей (в большинстве случаев для того, чтобы получить его, Вы должны заплатить только за CD-ROM-диск с ПО или за трафик выхода в Интернет). Это не означает, что программисты перестают получать вознаграждение за свой труд. Основная мысль Р. Столлмана состоит в том, что нужно продавать не программное обеспечение, а труд программиста как такового. Например, источником дохода может быть сопровождение программных продуктов или их установка и конфигурация для внедрения на новых компьютерах и/или в новых условиях, преподавание и т. д. Хорошим вознаграждением может быть и получение автором свободных программ определенной известности, которая позволит ему в последующем получить высокооплачиваемую работу. В рамках движения Open Source, и в частности проекта GNU, было разработано значительное количество программ, наиболее известными из которых являются редактор Emacs и компилятор GCC (GNU C Compiler) - самый лучший и по сей день компилятор языка C. Открытость исходных кодов программ оказывает очень благотворное влияние на качество программного обеспечения: все лучшее, все новые идеи и решения сразу же широко распространяются, а все ошибки замечаются и быстро устраняются. Начинает работать механизм естественного отбора, который подавлен в том варианте подхода к распространению программ, который практикуется в коммерческом ПО. Но вернемся к истории собственно Linux. Надо сказать, что разработка Линуса Торвальдса представляла собой только ядро операционной системы. Это ядро "упало на подготовленную почву", в том смысле, что в рамках проекта GNU уже было разработано большое количество утилит разного рода. Но для превращения GNU в полноценную ОС не хватало ядра. Разработка ядра велась (оно называлось Hurd), но по каким-то причинам задерживалась. Поэтому появление разработки Л. Торвальдса было очень своевременным. Оно ознаменовало рождение операционной системы, распространяемой с открытыми исходными кодами. Р. Столлман, конечно, прав, когда настаивает на том, что операционная система Linux должна называться GNU/Linux. Но так уж сложилось, что название ядра стало служить названием всей операционной системы, и мы в этой книге будем поступать так же.
| Пожелания пользователя | Требования к памяти | Требования к объему жесткого диска |
|---|---|---|
| Минимальные требования: работа в текстовом режиме из командной строки shell | 4 Мбайт | 10 Мбайт |
| Работа в текстовом режиме через Midnight Commander | 4 Мбайт | 40 Мбайт |
| Для запуска графического интерфейса X Window | 8 Мбайт, но будет работать очень медленно, 16 Мбайт - более-менее приемлемо | |
| Для работы с графическим интерфейсом X Window (запуск оконного менеджера) | 16 Мбайт | 300 Мбайт |
| Для запуска интегрированной графической среды KDE | 32 Мбайт | 500 Мбайт |
| Для запуска каждого отдельного большого приложения (типа GIMP, текстового процессора, базы данных или электронной таблицы) | +2 Мбайт | +50-100 Мбайт |
| Для работы с интегрированным офисным пакетом StarOffice | 64 Мбайт | +250 Мбайт |
struct partition {
char active; /* 0x80: раздел активный (загрузочный), 0: не активный */
char begin[3]; /* CHS первого сектора, 24 бита
char type; /* тип раздела (например, 83 — LINUX_NATIVE, 82 — LINUX_SWAP, 85 — LINUX_EXTENDED) */
char end[3]; /* CHS последнего сектора, 24 бита */
int start; /* номер начального сектора (32-бита, счет начинается с 0) */
int length; /* число секторов в разделе (32 бита) */
};
Таблица разделов диска создается обычно с помощью программы fdisk. В ОС Linux имеется как стандартная программа fdisk (которая, впрочем, существенно отличается от программы fdisk в MS-DOS и Windows), так и еще две программы для работы с разделами диска: cfdisk и sfdisk. Программа cfdisk, как и fdisk, предназначена для работы с таблицей разделов диска: она не обращает никакого внимания на информацию, которая уже имеется на диске. Отличается она только несколько более удобным интерфейсом, предоставляющим пользователю не просто подсказку по командам, а систему меню. Программа sfdisk обладает несколько более широкими возможностями, в частности, она позволяет произвести некоторые операции над существующими разделами диска.
DOS использует поля begin и end таблицы разбиения диска и функции прерывания 13 BIOS (Int 13h) для доступа к диску, и поэтому не может использовать диски объемом более 8,4 Гбайт, даже с новым BIOS (об этом будет рассказано ниже), а разделы не могут быть более 2,1 Гбайт (но это уже из-за ограничений файловой системы FAT16).
Linux использует только поля start и length таблицы разбиения диска и поддерживает разделы, содержащие до 232 секторов, т. е. размер раздела может достигать 2 Тбайт.
Поскольку в таблице разбиения отведено только 4 строки для задания разделов, число первичных разделов на диске с самого начала ограничено: их может быть не более 4. Когда стало ясно, что и 4-х разделов мало, были изобретены логические разделы. Для этого один из первичных разделов объявляется "расширенным" (тип раздела - 5, или F, или 85 в шестнадцатеричной системе), и в нем создаются "логические разделы". Расширенные разделы сами по себе не используются, они могут лишь хранить логические разделы. Первый сектор расширенного раздела хранит таблицу разделов с четырьмя входами: один используется для логического раздела, другой для еще одного расширенного раздела, а два не используются. Каждый расширенный раздел имеет свою таблицу разбиения, в которой, как и в первичном расширенном разделе, используются только две строки, задающие один логический и один расширенный раздел. Таким образом, получается цепочка из таблиц разделов, где первая описывает три основных раздела, а каждая следующая - один логический раздел и положение следующей таблицы.
Программа sfdisk в Linux показывает всю цепочку:
[root]# sfdisk -l -x /dev/hda
| Смещение | Содержание |
|---|---|
| 0x000 | Код первичного загрузчика |
| 0x1BE | Таблица разбиения диска |
| 0x1FE | "Магическое число" (0xAA55) |
адрес_вторичного_загрузчика="название_варианта"
Адресом вторичного загрузчика может являться указание на конкретный раздел диска или на файл загрузчика. Вот пример файла boot.ini:
[operating systems]
multi(0)disk(0)rdisk(0)partition(3)\WINNT="Windows NT Workstation 4.00 RUS"
multi(0)disk(0)rdisk(0)partition(3)\WINNT="Windows NT Workstation 4.00 RUS [VGA mode]" /basevideo /sos
C:\="Microsoft Windows"
C:\BOOTSECT.LNX="Linux"
Если пользователь выбирает NT, то выполняется загрузка по адресу раздела, указанному в первой строке раздела. В строке, соответствующей Microsoft Windows, указан просто диск "C:\", так как имя загрузочного файла берется по умолчанию: bootsect.dos. Файл грузится в память и загрузка продолжается так, как если бы загрузочная запись раздела была загружена программным кодом из MBR.
Для загрузки других систем можно воспользоваться таким же приемом. Для этого в boot.ini нужно добавить строки, содержащие ссылки на другие загрузочные файлы. При выборе такой строки будет загружаться соответствующая ОС. В приведенном выше примере этим способом обеспечивается загрузка Linux. Для этого в файле C:\BOOTSECT.LNX должно быть предварительно записано содержимое загрузочной записи, создаваемой Linux (точнее - LILO, стандартным загрузчиком Linux).
| Операционная система | Требует |
|---|---|
| Windows 95 | 100 Мбайт |
| Windows 98 | 200 Мбайт |
| Windows NT | 200 Мбайт |
| Windows 2000 | 700 Мбайт |
| Linux Red Hat 6.2 (в режиме рабочей станции с KDE) | 700 Мбайт |
[root]# mount -t vfat /dev/fda1 /mnt/floppy
перейти в каталог /mnt/floppy
[root]# cd /mnt/floppy
и выполнить команду
[root]# dd if=/dev/hda3 of=/mnt/floppy/bootsect.lnx bs=512 count=1
которая позволяет записать содержимое загрузочного сектора диска /dev/hda3 в файл /mnt/floppy/bootsect.lnx.
Примечание. Хочу заметить, что если диск C: (/dev/hda1) отформатирован в системе FAT, то можно сразу создать файл bootsect.lnx в корневом каталоге диска C:. Отмечу, что я не знаю (не пробовал) можно ли будет загружаться без дискеты, если первый раздел загрузочного диска отформатирован в NTFS. Но думаю, что проблем и здесь не будет, кроме необходимости переноса boot-сектора через дискету, поскольку пока что поставляемые в дистрибутиве варианты ядра не поддерживают NTFS.
6. Далее необходимо перезагрузиться, чтобы запустить Windows NT, для чего даем в Linux команду:
[root]# shutdown -h now
Поскольку главная загрузочная запись не была изменена, должна загрузиться Windows NT. После завершения загрузки необходимо перенести файл /mnt/floppy/bootsect.lnx в корневой каталог диска C:, точнее - в корневой каталог того раздела, с которого загружается Windows NT. В зависимости от того, как вы устанавливали Windows NT, это может быть как FAT16-раздел, так и NTFS-раздел. Признаком нужного раздела является наличие в нем файлов ntldr и boot.ini (эти файлы могут быть скрытыми!). Файлу bootsect.lnx можно присвоить атрибут read-only.
7. После завершения загрузки NT найдите файл boot.ini в корневом каталоге и добавьте в него следующую строчку:
C:\bootsect.lnx="LINUX"
(естественно, что в кавычках вы можете поставить все, что вам угодно).
8. Осталось перезапустить компьютер еще раз, причем при загрузке вы уже будете иметь возможность выбрать Linux для загрузки. После этого будет запущен LILO, который загрузит Linux.
Теперь отдельно рассмотрим случай, когда вы (по ошибке или намеренно) установили LILO в главную загрузочную запись диска (Master Boot Record, MBR). В этом случае загрузочная запись Windows NT (или 2000) будет затерта, и загрузить Windows NT (см. шаг 6 выше) уже будет невозможно. Если вы все еще намерены пользоваться загрузчиком OS Loader от NT, а не LILO, последовательность действий несколько изменяется: вместо шага 6 необходимо проделать следующее.
1. Загрузите Windows NT с загрузочных дискет (см. шаг 1). При этом необходимо выбрать в меню загрузчика команду Recover, а затем - режим Command mode. При запросе следует зарегистрироваться с учетной записью администратора системы (Administrator).
2. Восстановите главную загрузочную запись диска. Для этого можно дать команду fdisk /mbr. У меня получалось, хотя в некоторых статьях утверждается, что восстановить таким образом MBR удается не всегда. В Windows 2000 имеются специальные команды fixboot и fixmbr (они запускаются из консоли восстановления, см. справку). Выполните их обе в указанном порядке. Теперь Windows 2000 снова будет загружаться нормально.
3. Перезапустите компьютер с загрузочной дискеты Linux и зарегистрируйтесь в системе с полномочиями администратора (root).
4. Введите команду cd /etc и откройте файл lilo.conf. В начале этого файла есть ссылка на загрузочный раздел по умолчанию, например, /dev/hda.
5. С помощью любого редактора, например, CoolEdit из Midnight Commander, следует заменить это значение указанием на диск и раздел, куда была установлена Linux (точнее, указанием на тот диск и раздел, который монтируется как корневой в Linux). Если Linux установлена в раздел /dev/hdc1, то именно это и следует записать, т. е. поменять /dev/hda на /dev/hdc1. Если вы не помните, куда именно установлена Linux, найдите последнюю переменную файла /etc/lilo.conf - переменную image. В ней хранится нужное значение.
6. Выполнить команду /sbin/lilo для записи загрузчика в раздел /dev/hdc1 (команду lilo нужно выполнить без аргументов). Будет выдано предупреждение о том, что раздел не является первым на диске. Именно это нам и нужно, чтобы загрузочная запись Windows 2000 осталась в целости и сохранности.
7. Выполнить шаги 6-8 приведенного выше алгоритма.
Легко догадаться, что только что приведенная сложная последовательность операций с двумя лишними перезагрузками потребовалась только для того, чтобы перенести загрузочный сектор Linux из MBR в первый сектор раздела, отведенного для Linux, и восстановить MBR от Windows.
Все, на этом установка завершена, и вы имеете возможность на этапе загрузки выбирать ту ОС, которая будет осуществлять управление вашим компьютером в данном сеансе работы.
boot = /dev/hda2
compact
delay = 50
# message = /boot/bootmesg.txt
root = current
image = /boot/vmlinuz-2.2.11-4bc
label = linux read-only
other = /dev/hda1
table = /dev/hda
label = dos
Дадим некоторые пояснения к этому примеру.
Строка boot указывает загрузочное устройство.
Строка compact включает режим сжатия map-файла, содержащего характеристики загрузочных ядер; это ускоряет начальную загрузку.
С помощью команды message можно заставить загрузчик выдавать при загрузке произвольное сообщение.
Начиная со строки image, идут секции конфигурационного файла, соответствующие разным операционным системам, которые должны загружаться по выбору пользователя. В каждой такой секции имеется строка label. В этой строке записывается имя, которое вводится в ответ на приглашение LILO или является командой меню и служит для выбора пользователем загружаемой ОС. Если имя не введено по истечении времени, заданного строкой delay (задается в десятых долях секунды), будет загружена ОС, выбираемая по умолчанию. В данном случае по умолчанию будет загружаться Linux, поскольку соответствующая ей секция стоит первой в файле. Можно указать загружаемую по умолчанию систему с помощью строки вида default=dos (т. е., используя метку из соответствующей строки label).
Строка table=‹device› содержит указание на устройство, на котором находится таблица разбиения диска. LILO не передает информацию о разбиении загружаемой операционной системе, если эта переменная не задана. (Некоторые операционные системы имеют другие средства для определения того, из какого раздела они загружены.) Не забывайте, что необходимо выполнить команду /sbin/lilo, если вы изменили ссылку на таблицу разбиения, задаваемую переменной table.
Если вы задали строку (лучше сказать, секцию) other = /dev/hda1 в файле /etc/lilo.conf, то в корневом каталоге диска /dev/hda1 (диска C: в терминологии Microsoft) должен находиться вторичный загрузчик. У меня, например, на одном из компьютеров с многовариантной загрузкой там находится NT Loader (поскольку Windows NT была установлена до Linux), и LILO успешно загружает Windows NT. Только надо установить в файле boot.ini задержку времени равной нулю, чтобы не получать собственного меню загрузки NT Loader. Впрочем, если вы хотите по каким-то причинам видеть это меню, то значение timeout в файле boot.ini надо задать отличным от нуля (задается в секундах). Это может понадобиться, например, для обеспечения возможности загружать Windows 98 как еще один вариант ОС.
Если вы хотите грузить Windows непосредственно из LILO, то добавьте в /etc/lilo.conf еще одну секцию:
other = /boot/bootsect.dos
label = win,
где файл bootsect.dos берется из корневого каталога того диска, на котором стоит NT Loader.
5. После того, как вы откорректировали файл /etc/lilo.conf, необходимо выполнить команду /sbin/lilo, чтобы изменения вступили в силу. Эта команда (которая в руководстве называется map-installer) устанавливает вторичный загрузчик системы, который будет активизирован во время следующей загрузки машины. Прежде, чем запускать /sbin/lilo для модификации загрузочных процедур, выполните эту команду с параметром -t. При этом будет выполнена вся процедура инсталляции загрузчика, кроме изменения map-файла, записи модифицированного загрузочного сектора и изменения таблицы разбиения диска, то есть выполнен тест нового варианта. Если добавить еще опцию -v, вы получите более подробную информацию о том, что будет делать команда /sbin/lilo.
Когда /sbin/lilo перезаписывает загрузочный сектор, старое содержимое этого сектора автоматически сохраняется в файле. По умолчанию это файл /boot/boot.NNNN, где NNNN соответствует номеру устройства, например, 0300 - это /dev/hda, 0800 - это /dev/sda и т. д. Если такой файл уже существует, он не перезаписывается. Но можно задать альтернативный файл для сохранения загрузочного сектора.
Файл /boot/boot.NNNN можно использовать для восстановления старого содержимого загрузочного сектора, если более простой метод его восстановления недоступен. Соответствующие команды имеют вид:
[root:~#] dd if=/boot/boot.0300 of=/dev/hda bs=446 count=1
или
[root:~#] dd if=/boot/boot.0800 of=/dev/sda bs=446 count=1
(bs=446 потому что восстанавливаем только программу-загрузчик, и не трогаем таблицу разбиения диска).
Копию загрузочного сектора лучше сохранить на дискете. В случае, если неприятности произойдут, вы сможете восстановить старую загрузочную запись MBR, выполнив команду (предполагается, что дискета смонтирована в каталог /mnt):
[root:~#] dd if=/mnt/MBR of=/dev/hda bs=446 count=1
Восстановить старый MBR при необходимости можно также командой /sbin/lilo с опцией -u. Только надо иметь в виду, что эта команда отрабатывает корректно при условии, что каталог LILO (а именно, /boot) не изменялся со времени инсталляции.
Стандартный MBR от MS-DOS может быть восстановлен также, если воспользоваться загрузочной дискетой системы DOS, восстановив MBR командой fdisk /mbr. Она изменяет только код программы-загрузчика в MBR, не изменяя таблицу разбиения диска.
6. После переустановки загрузчика надо перезагрузить компьютер, опробовав разные варианты загрузки.
В заключение подраздела приведем некоторые сведения о том, какие затруднения могут возникать при использовании LILO.
Когда LILO загружается, он выводит на дисплей слово "LILO". При этом вывод каждой буквы обозначает завершение определенного действия или этапа загрузки LILO. Если загрузка сорвется, то по числу выведенных букв можно судить о причине возникновения проблемы.
• Ничего не выведено - никакая часть LILO не была загружена. Либо LILO не был установлен, либо раздел, на котором он находится, не является активным.
• L [код ошибки] - первичный загрузчик загрузился и стартовал (на него передано управление), но он не сумел загрузить вторичный загрузчик. Двухзначный код ошибки указывает на конкретную причину проблемы (расшифровку кодов надо искать в технической документации на LILO). Обычно это связано с дефектами носителя или неправильно заданной геометрией диска. Если только LILO не остановился на этом этапе, выдавая бесконечную последовательность кодов ошибки, проблема обычно легко решаема.
• LI - первичный загрузчик сумел загрузить вторичный загрузчик, но не сумел запустить его на выполнение. Это может быть вызвано ошибкой в задании геометрии диска или тем, файл /boot/boot.b был перемещен без перезапуска /sbin/lilo.
• LIL - вторичный загрузчик запустился, но не смог загрузить таблицу дескрипторов из map-файла. Причина обычно состоит в наличии дефектов на диске или неправильно заданной геометрией диска.
• LIL? - вторичный загрузчик был загружен по неправильному адресу. Обычно вызвано ошибкой в задании геометрии диска или тем, что файл /boot/boot.b был перемещен без перезапуска /sbin/lilo.
• LIL- - таблица дескрипторов разрушена. Обычно вызвано ошибкой в задании геометрии диска или тем, файл /boot/boot.b был перемещен без перезапуска /sbin/lilo.
• LILO - все части LILO успешно загружены.
C:\LOADLIN› loadlin
то получите подсказку по использованию программы. Удобнее может оказаться запустить ту же программу с параметром more (в стиле Linux):
C:\LOADLIN› loadlin | more
Теперь мы можем рассмотреть последовательность действий по установке Linux в том варианте, когда загружаться она будет с помощью loadlin.exe.
1. Выделите раздел для Linux (как это сделать - см. разд. 2.5).
2. Установите Linux в выделенный раздел. При этом LILO установите в первый сектор Linux-раздела, чтобы не перезаписать MBR и не потерять возможность загружаться в Windows.
3. После завершения процедур установки загрузите Linux (если не получается по-другому, то используйте загрузочную дискету). Смонтируйте DOS-раздел (будем считать, что в Linux DOS-раздел именуется как /dev/hda1, а Linux-раздел - как /dev/hda3):
[root]# mount -t vfat /dev/hda1 /mnt/C
Создайте каталог /mnt/C/loadlin и разархивируйте в него содержимое файла LODLIN16.TGZ с дистрибутивного CD-диска Linux. Кроме того, поместите туда же файл с образом ядра из каталога /boot. Найти нужный файл образа ядра можно с помощью файла /etc/lilo.conf: найдите в нем строку "image=…" и вы увидите нужное имя справа от знака равенства. У меня, например, полное имя этого файла - vmlinuz-2.2.16-3bc, но я при копировании в каталог /mnt/C/loadlin переименовал его в vmlinuz; это имя и буду использовать далее в примерах.
4. Теперь перезагрузите компьютер в DOS. Если у вас есть возможность загрузить непосредственно DOS, то делайте это сразу, а если нет, то загружайте Windows, при появлении сообщения "Загрузка Windows 95" нажимайте клавишу ‹F8› и выбирайте вариант Command prompt only. Если вы не успели нажать на клавишу ‹F8›, то можно дождаться завершения загрузки Windows 95, после чего воспользоваться кнопкой Пуск, выбрать команду Завершение работы и далее - команду Перезагрузить компьютер в режиме эмуляции DOS.
После выхода в режим DOS перейдите в каталог C:\LOADLIN (CD \LOADLIN) и выполните команду
C:\LOADLIN› LOADLIN vmlinuz /dev/hda3 ro vga=ask
или, если вы хотите загрузить ядро с установкой RAM-диска:
C:\LOADLIN› LOADLIN vmlinuz /dev/ram rw initrd=diskimage
Можно также записать все аргументы команды loadlin.exe в файл (например, с именем params) и вызвать ту же команду следующим образом:
C:\LOADLIN› LOADLIN @params
Такая возможность особенно полезна для тех случаев, когда вы задаете много аргументов командной строки, и ее длина становится больше 127 символов. Полное описание всех возможных аргументов (параметров) команды loadlin.exe вы сможете найти в файле PARAMS.DOC или в Интернете на сайтах http://sunsite.unc.edu/mdw/HOWTO/BootPrompt-HOWTO.html и http://rsphy1.anu.edu/~gpg109/BootPrompt-HOWTO.html.
Теперь вы можете пользоваться этим способом загрузки Linux. Единственное, что остается, это избавиться от необходимости каждый раз при загрузке вводить команду loadlin со всеми параметрами. Для облегчения можно прописать вызов loadlin в файл autoexec.bat или создать командный файл (например, linux.bat), с помощью которого просто запускать Linux, предварительно загрузившись в режиме DOS. Я думаю, что приведенных выше данных вполне достаточно для создания необходимого bat-файла. Если же у вас что-то не получится, загляните в статью А. Московских [П4.13], где этот вопрос рассмотрен более подробно. Там, в частности, отмечается, что если на машине установлены Windows 95 и Linux, то нельзя пытаться загружать Linux из графической оболочки и требуется отключить некоторые опции в скрытом файле C:\MSDOS.SYS (это простой текстовый файл), а именно, добавить в него две строки:
BootGUI=0
Logo=0
Первая строка отключает загрузку графической оболочки, и выбор команды меню W95 будет вызывать переход к обычной командной строке ДОС. (Чтобы загрузить графическую оболочку, вы должны будете ввести команду C:› win).
Logo=0 отключает вывод логотипа Windows. Дело в том, что для некоторых графических адаптеров Linux может выдавать после загрузки "пустой" экран, если перед его загрузкой отображался логотип Windows.
В списке литературы в конце книги я привожу небольшой перечень других источников и ссылок на материалы, имеющие отношение к вопросу установки нескольких ОС на одном компьютере. Так что в случае, если в моей книге рассмотрены не все вопросы, и вы столкнетесь с какими-то сложностями, ищите ответ в указанных материалах.
LILO boot:
Если не предпринимать никаких действий, то на экран будет выдана масса сообщений, разбирать смысл которых мы пока не будем, и, наконец, появится стилизованное изображение пингвинчика. (я пока рассматриваю тот случай, когда вы при установке отказались от автоматической загрузки графической оболочки). Ниже изображения пингвина на экране написано:
Linux Version 2.0.36, Compiled #1 Tue Dec 29 13:11:11 EST 1998
One Intel 486 DX/2-WB Processor, 16M RAM, 33.28 Bogomips Total
localhost.localdomain
Black Cat Linux release 5.2 (Fulcrun)
Kernel 2.0.36 on an i486 localhost login:
Я привел здесь то сообщение, которое появлялось у меня при одном из вариантов установки, когда я ставил Black Cat версии 5.2; у вас, конечно, сообщение будет отличаться в некоторых деталях. Если у вас хватит терпения дочитать эту книгу, то вы узнаете, что выдаваемое при загрузке сообщение при желании можно изменить, так что будет выдаваться что-нибудь вроде "Привет, дружище! Сегодня 11 ноября 2001 года. Сейчас 19 часов 22 минуты. Введи, пожалуйста, свое имя и пароль". Однако пока рано говорить о том, как это делается.
Если вы загружались с дискеты, то загрузка происходит точно также, только чуть медленнее.
Если Linux не единственная ОС на вашем компьютере, и вы используете LILO для организации многовариантной загрузки, то в тот момент, когда на экране появится надпись LILO boot: вы должны нажать клавишу ‹Tab› или ‹?›. Тогда LILO выдаст вам список меток, которые сопоставлены разным ОС. В версии 21 LILO уже автоматически выводит этот список на экран в виде меню. Необходимо выбрать из меню или ввести (набрать на клавиатуре) одну из этих меток и нажать клавишу ‹Enter›. Если вы выберете метку, соответствующую Linux, то в конце концов вы все равно должны увидеть слово login:, которое в данном случае служит приглашением к вводу вашего пользовательского имени.
Password:
Очевидно, что в ответ надо вводить пароль того пользователя, имя которого было введено ранее. При первой загрузке надо ввести тот пароль, которой был задан для пользователя root в процессе инсталляции, и нажать ‹Enter›. Заметим, что если после ввода имени очень долго не вводить пароль, то система снова вернется к запросу имени пользователя. После ввода пароля вы увидите примерно такую надпись:
[root@localhost /root]#
Такая строка называется приглашением. Появление приглашения означает, что система готова воспринять и выполнить вашу команду. Сейчас это свидетельствует о том, что вы успешно вошли в систему. Вы видите черный экран и приглашение системы к вводу команды - то, что в MS-DOS или Windows принято называть режимом командной строки. Мы будем называть этот режим текстовым (в отличие от графического режима, предоставляемого системой X Window).
В приведенном примере приглашение включает в себя указание имени пользователя (root), имени системы (localhost) и тукущего каталога (/root). Вид приглашения тоже можно изменить. Во всех последующих примерах мы будем использовать приглашение, состоящее только из имени пользователя.
Прежде чем предложить вам ввести первую команду, надо сказать, что в любой UNIX-системе учитывается регистр символов, т. е. различаются строчные и прописные буквы. Поэтому вводить все команды и их параметры следует именно так, как указано в примерах, учитывая регистр.
Первая команда, которую стоит ввести - команда useradd. После имени команды надо ввести пробел и имя пользователя, например, jim:
[root]# useradd jim
После этого система будет знать о существовании пользователя jim (говорят, будет "открыт счет для пользователя jim"). Однако войти в систему (или, как обычно говорят, "логироваться") под этим именем еще невозможно. Для того, чтобы система разрешила работать пользователю с именем jim, надо задать ему пароль. Для этого вводим команду
[root]# passwd jim
Появится строка
New UNIX password:
Вводите пароль. После того, как вы завершите ввод нажатием клавиши ‹Enter›, система попросит ввести его повторно:
Retype new UNIX password:
Если вы не ошиблись при вводе (пароль приходится вводить "вслепую", поскольку он не отображается на экране), появится сообщение: passwd: all authentication tokens updated successfully и приглашение системы. Если вы выбрали пароль не очень удачно (слишком короткий или простой), вам будет выдано предупреждение, но система все равно примет пароль и позволит новому пользователю входить с ним в систему.
Таким образом, вы познакомились с первыми двумя командами системы Linux: useradd и passwd. Следующая команда, о которой нужно знать каждому пользователю любой UNIX-системы - это команда man. Команда man - это система встроенной помощи системы Linux. Вводить ее надо с параметром - именем другой команды или ключевым словом, например,
[root]# man passwd
В ответ вы получите описание соответствующей команды или информацию по теме, обозначенной ключевым словом. Поскольку информация обычно не помещается на одном экране, при просмотре можно пользоваться клавишами ‹PageUp› и ‹PageDown›, а также клавишей пробела. Нажатие клавиши ‹Q› в любой момент приводит к выходу из режима просмотра и возврату в режим ввода команд. Попробуйте просмотреть информацию по рассмотренным уже командам login и passwd. Заметим, что точно также можно получить информацию по самой команде man. Введите
[root]# man man
К сожалению, в большинстве случаев информация выдается по-английски. Если вы не читаете по-английски, то терпеливо читайте настоящее руководство или другую подходящую книгу по данной теме.
Вы можете попробовать вводить еще некоторые команды и понаблюдать за реакцией системы. Попробуйте, например, команды, перечисленные в табл. 3.1 (вводите их с приведенными в таблице параметрами).
Таблица 3.1. Простейшие команды Linux.
| Команда | Краткое описание |
|---|---|
| whoami | Сообщает имя, с которым вы вошли в систему в данном сеансе работы |
| w или who | Сообщает, какие пользователи работают в данный момент в системе |
| pwd | Сообщает имя текущего каталога |
| ls -l | Выдает список файлов и подкаталогов текущего каталога |
| cd ‹имя_каталога› | Осуществляет смену текущего каталога |
| ps ax | Выдает список выполняющихся процессов |
[user]$ su jim
Когда мы вводим su без указания имени, по умолчанию подставляется имя суперпользователя root.
Но в ОС Linux есть еще одна возможность временно переключаться в бюджет пользователя root для выполнения административных функций. Вспомните, что Linux - это многопользовательская система, в ней одновременно могут работать несколько пользователей. Поэтому в первом виртуальном терминале можно войти под именем root, а в любом другом терминале - под именем простого пользователя. Основную работу вы можете выполнять как простой пользователь, а когда потребуется выполнить административные функции, вы "зовете системного администратора". Для этого достаточно нажать ‹Ctrl›+‹Alt›+‹F1› - и системный администратор уже тут. По завершении операции, которую может выполнить только суперпользователь, вы немедленно должны вернуться в бюджет простого пользователя. В таком случае вы не рискуете нарушить что-либо в системе, пока еще не набрались необходимого опыта.
| Клавиша | Описание реакции системы |
|---|---|
| ‹Стрелка вправо› или ‹Ctrl›+‹F› | Перемещение вправо по командной строке в пределах уже набранной цепочки символов плюс один символ справа (место для ввода следующего символа) |
| ‹Стрелка влево› или ‹Ctrl›+‹B› | Перемещение на один символ влево |
| ‹Esc›+‹F› | Перемещение на одно слово вправо |
| ‹Esc›+‹B› | Перемещение на одно слово влево |
| ‹Home› или ‹Ctrl›+‹A› | Перемещение в начало набранной цепочки символов |
| ‹End› или ‹Ctrl›+‹E› | Перемещение в начало/конец набранной цепочки символов |
| ‹Del› или ‹Ctrl›+‹D› | Удаление символа, на который показывает курсор |
| ‹Backspase› | Удаление символа в позиции, предшествующей курсору |
| ‹Ctrl›+‹K› | Удалить правую часть строки, начиная с символа, на который указывает курсор |
| ‹Ctrl›+‹U› | Удалить левую часть строки, включая символ, который находится слева от курсора |
| ‹Enter› или ‹Ctrl›+‹M› | Запуск на выполнение команды, определяемой набранной цепочкой символов |
| ‹Ctrl›+‹L› | Очистить экран и поместить текущую команду в верхней строке экрана |
| ‹Ctrl›+‹T› | Поменять местами два символа: символ, на который показывает курсор, и символ слева от курсора, затем, курсор переместить на один символ вправо |
| ‹Esc›+‹T› | Поменять местами два слова: слово, на которое указывает курсор и слово слева от первого |
| ‹Ctrl›+‹K› | Вырезать часть строки от текущей позиции курсора до конца строки (вырезанная часть строки сохраняется в буфере, ее можно вставить в другое место строки) |
| ‹Esc›+‹D› | Вырезать часть строки от текущей позиции курсора до конца текущего слова (если курсор указывает на пробел между словами, то вырезается все слово справа от курсора) |
| ‹Esc›+‹Del› | Вырезать часть строки от текущей позиции курсора до начала текущего слова (если курсор указывает на пробел между словами, то вырезается все слово слева от курсора) |
| ‹Ctrl›+‹W› | Вырезать часть строки от текущей позиции курсора до предыдущего пробела |
| ‹Ctrl›+‹Y› | Вставить последний вырезанный текст в позицию курсора |
| ‹Esc›+‹C› | Символ, на который указывает курсор, заменить на тот же, но заглавный, а курсор переместить на первый пробел справа от текущего слова |
| ‹Esc›+‹U› | Сделать символы данного слова заглавными, начиная с символа, на который указывает курсор, а курсор установить на пробел справа от слова |
| ‹Esc›+‹L› | Превратить символы, начиная с символа, на который указывает курсор, до конца данного слова в прописные (маленькие) буквы, а курсор установить на пробел справа от слова |
| ‹Shift›+‹PgUp› ‹Shift›+‹PgDown› | Эти команды позволяют просмотреть несколько страниц экранного вывода (количество зависит от размера видеопамяти); полезны в тех случаях, когда та или иная команда выводит на экран очень много информации, быстро пробегающей по экрану и как бы исчезающей для пользователя; как видите, эта информация не пропадает |
| ‹Ctrl›+‹C› | Прервать выполнение запущенной команды |
| ‹Ctrl›+‹D› | Выход из оболочки bash |
| Клавиша | Описание реакции системы |
|---|---|
| ‹Стрелка вверх› или ‹Ctrl›+‹P› | Переход к предыдущей команде в списке (движение назад по списку) |
| ‹Стрелка вниз› или ‹Ctrl›+‹N› | Переход к следующей команде в списке (движение вперед по списку) |
| ‹PgUp› | Переход к (вызов в командную строку) самой первой команде, сохраненной в истории команд |
| ‹!›, ‹N› | Выполняется (без нажатия клавиши ‹Enter›) n-ная команда из списка истории команд |
| ‹!›, ‹-›, ‹N› | Выполняется n-ая от конца списка команда |
| ‹!›, строка символов | Выполняется команда, имя которой начинается на строку символов (поиск нужной команды осуществляется движением в обратном порядке от конца файла истории и выполняется первая попавшаяся команда, которая начинается на строку символов) |
| ‹Ctrl›+‹O› | То же что нажатие клавиши ‹Enter›, затем отображается очередная команда из файла истории |
[root]# ps ax
(и можете посмотреть еще раз, повторив запуск этой команды). Но более важная причина состоит в том, что некоторые из этих процессов могут работать с файлами, причем система не записывает все изменения файлов на диск сразу после внесения этих изменений пользователем или процессом, а сохраняет их временно в оперативной памяти (кэширует). Если просто выключить питание, эти изменения не будут сохранены и пропадут, что иногда может привести даже к невозможности последующей загрузки системы. Так что надо уметь правильно завершить работу системы перед выключением компьютера. Это делается командой shutdown.
Команда shutdown может быть выполнена только пользователем root[10], так что вы либо должны были войти в систему под этим именем, либо должны предварительно выполнить команду su, чтобы приобрести соответствующие права.
Команда shutdown имеет следующий синтаксис:
[root]# shutdown ‹options› ‹time› ‹warning-massage›
Замечание
Существует некоторая вероятность того, что запустив команду, вы получите ответ "command not found". Это значит, что оболочка не знает, где находится файл программы. В таком случае вам необходимо ввести команду с указанием полного пути, в данном случае в виде /sbin/shutdown -h, поскольку для команды shutdown файл программы лежит в каталоге /sbin.
Из опций программы shutdown наиболее часто используются две:
• -h - полная остановка системы (компьютер будет выключен);
• -r - перезагрузить систему.
Параметр time указывает время, когда должна быть выполнена команда (не обязательно выполнять ее немедленно). Время можно указать в форме задержки от текущего момента. Например, если вы хотите, чтобы система остановилась через 5 минут, вводите команду
[root]# shutdown -r +5
что будет означать "остановить систему через 5 минут и перезагрузиться после того, как работа будет корректно завершена''. Для вас пока наиболее актуальной формой этой команды будет, скорее всего,
[root]# shutdown -h 0
когда вы захотите просто выключить компьютер. Эквивалентом команды
shutdown -h 0
является команда halt. При нажатии известной комбинации клавиш ‹Ctrl›+‹Alt›+‹Del› в Red Hat Linux выполняются действия, аналогичные команде
shutdown -r 0
так что таким образом тоже можно выключить компьютер, только надо в момент перезагрузки отключить питание.
| Секция | Содержание |
|---|---|
| 1 | Команды пользователя |
| 8 | Системные команды |
| 2 | Системные вызовы |
| 3 | Библиотечные вызовы (подпрограммы) |
| 4 | Устройства |
| 5 | Форматы файлов |
| 6 | Игры |
| 7 | Разное |
| 9 | Ядро (kernel internals) |
| n | Tcl/Tk commands |
[user]$ man swapon
то получите справку о команде swapon из секции 8. Поэтому если вы хотите получить справку по системному вызову swapon, надо дать команду
[user]$ man 2 swapon
указывая номер секции, в которой надо искать информацию.
Страницы man просматриваются с помощью команды less (что дает возможность просматривать информацию поэкранно и перемещаться по этим экранам вперед и назад), так что для управления процессом вывода информации можно использовать клавиши, используемые в программе less. Наиболее употребительные:
Таблица 3.5. Клавиатурные команды, используемые при просмотре man-страниц
| Клавиша | Назначение |
|---|---|
| ‹Q› | Выход из программы |
| ‹Enter› | Просмотр строка за строкой |
| ‹Space› | Вывод следующего экрана информации |
| ‹B› | Вернуться к предыдущему экрану |
| ‹/› за которой следует строка символов и ‹Enter› | Поиск введенной строки символов |
| ‹N› | Повторение предыдущего поиска |
[user]$ man имя_команды | lpr
или, если у вас postscript-принтер,
[user]$ man -t имя_команды | lpr
Но для того, чтобы получить нужную информацию, нужно еще знать, что искать. В таком случае могут помочь команды whatis и apropos. Команда whatis производит контекстный поиск заданного ключевого слова (шаблона) в базе данных, содержащей перечень системных команд с кратким описанием команды. Выводятся только точные совпадения с ключевым словом. Команда apropos производит поиск по фрагментам слов. Аналогично команде apropos работает команда man с параметром -k. Попробуйте, например,
[user]$ man -k net
Необходимо, однако, предупредить, что для того, чтобы команды man -k, whatis и apropos работали, необходимо вначале создать базу данных о системных командах, для чего надо запустить команду makewhatis. В противном случае вы можете на любой запрос получить сообщение "nothing appropriate". Правом запустить команду makewhatis обладает только пользователь root. Если вы не выключаете компьютер на ночь, то лучше всего запускать эту команду как задание для процесса cron.
В заключение хочется сказать, что страницы руководства man, вообще говоря, создавались не для первоначального изучения системы. Они скорее предназначены для опытных пользователей, которым в процессе работы нужно иметь под рукой справку по формату, опциям и синтаксису команд, чтобы не приходилось держать весь этот громоздкий материал в голове.
[user]$ info man
Информация, которую вы увидите, в большинстве случаев несколько отличается от той, которую дает команда man, причем, по моему мнению, в лучшую сторону. Но самое существенное отличие заключается в том, что выдаваемая info информация представлена в гипертекстовом формате. В силу этого вы получаете возможность просматривать различные разделы помощи, не выходя из оболочки, предоставляемой командой info. Работая в тестовом режиме, вы можете запустить info в одной из альтернативных консолей (помните: ‹Ctrl›+‹Alt›+‹F2›, ‹Ctrl›+‹Alt›+‹F3› и т. д.), и переключаться за помощью в случае необходимости. В тех случаях, когда вы не знаете, где именно найти нужную информацию, может оказаться полезным побродить по разным разделам текста с помощью гипертекстовых ссылок, предоставляемых командой info. Эти ссылки обозначены символом звездочки (*), что несколько отличается от способа обозначения гипертекстовых ссылок в широко распространенных браузерах типа Internet Explorer или Netscape Navigator, но от этого не становится менее удобным. Перемещаться по ссылкам можно также с помощью клавиши ‹Tab›. Достигнув названия нужной темы, нажмите клавишу ‹Enter›. Нажатие клавиши ‹P› возвращает вас к предыдущей странице, ‹N› вызывает переход на следующую страницу, а ‹U› переводит на один уровень вверх по иерархической структуре страниц документации.
Кроме того, можно вызвать переход по ссылке другим способом, аналогичным системе меню. Для этого надо нажать клавишу ‹M› и набрать в появившейся внизу экрана строке ввода некоторое число начальных символов названия нужного вам раздела помощи (из числа названий, представленных на отображаемой в данный момент на экране странице, причем даже если не вся страница помещается на экране). Число символов должно быть достаточным для однозначного определения раздела помощи (если недостаточно, то программа попросит дополнить название). Выход из программы - по клавише ‹Q›.
[user]$ mkdir \\my\his
Можно также заключить имя файла или каталога с такими символами в двойные кавычки. Например, для создания каталога с именем "My old files" следует использовать команду:
[user]$ mkdir "My old files"
так как команда
[user]$ mkdir My old files
создаст каталог с именем "My".
Аналогичным образом можно поступать и с другими символами, перечисленными выше, т. е. их можно включать в имена файлов, если имя файла взять в двойные кавычки или отменить специальное значение символа с помощью обратного слэша. Но все же предпочтительнее не использовать эти символы, включая пробел, в именах файлов и каталогов, потому что могут возникнуть проблемы при обращении к таким файлам из некоторых приложений, а также при переносе таких файлов в другие файловые системы.
Но к точке сказанное не относится, и в Linux часто ставят более одной точки в именах файлов, например, This_is.a.forth-chapter_of_my_book.about.Linux. При этом теряет смысл такое понятие (принятое в DOS), как расширение имени файла, хотя все же часто последние части имени, отделенные точками, используют для обозначения файлов каких-то особых типов (например,.tar.gz используется для обозначения сжатых архивов). Но исполняемые и неисполняемые файлы в Linux распознаются не по расширениям имен файлов. Для этого существуют другие признаки, о которых мы скажем чуть позже. Точка имеет особое значение в именах файлов. Если она является первым символом имени, то данный файл считается скрытым для некоторых команд, например, он не показывается при выполнении команды ls.
В Linux различаются символы верхнего и нижнего регистра в именах файлов. Поэтому FILENAME.tar.gz и filename.tar.gz вполне могут существовать одновременно и являться именами разных файлов.
Мы привыкли считать, что файл полностью определяется его именем. Однако с точки зрения ОС и файловой системы это немного не так (точнее, совсем не так). Хотя мы будем говорить о внутреннем устройстве файловой системы только в конце книги (гл. 16), кое-что надо сказать уже сейчас.
Каждому файлу в Linux соответствует так называемый "индексный дескриптор" файла, или "inode", (однозначного перевода этого термина на русский язык не существует, в разных книгах эту структуру называют по-разному). Именно индексный дескриптор содержит всю необходимую файловой системе информацию о файле, включая информацию о расположении частей файла на носителе, типе файла и многое другое. Индексные дескрипторы файлов содержатся в специальной таблице (inode table), которая создается при создании файловой системы на носителе. Каждый логический и физический диск имеет собственную таблицу индексных дескрипторов. Дескрипторы в этой таблицы пронумерованы последовательно, и именно номер дескриптора файла является его истинным именем в системе (этот номер мы будем называть индексом файла). Однако для человека такая система имен неудобна. Сможете ли вы вспомнить, что сохранили в файле с номером 56734? Поэтому файлам даются еще "человеческие" имена, и помимо этого файлы группируются в каталоги.
Приведенная выше информация нужна здесь только для того, чтобы сказать, что имя любого файла в Linux является ни чем иным, как ссылкой на индексный дескриптор файла. Поэтому каждый файл может иметь сколько угодно разных имен. Эти имена называют еще "жесткими" ссылками. Когда вы удаляете файл, имеющий несколько разных имен - жестких ссылок, то фактически удаляется только одна ссылка - та, которую вы указали в команде удаления файла. Даже когда вы удаляете последнюю ссылку, это еще может не означать удаления содержимого файла - если файл еще используется системой или каким-то приложением, то он сохраняется до тех пор, пока он не "освободится".
Для того, чтобы дать файлу (или каталогу) дополнительное имя (создать жесткую ссылку), используется команда ln в следующем формате:
ln имя_существующего_файла новое_имя
Пример:
[user]$ ln /home/howto/font-HOWTO-ru/Font-HOWTO.html ~/fonts.html
(специальный символ ~ здесь и вообще в системе означает домашний каталог пользователя, о котором будет сказано чуть дальше). Теперь можно вместо длинного имени /home/howto/font-HOWTO-ru/Font-HOWTO.html использовать просто ~/fonts.html. Подробнее о команде ln вы можете прочитать на странице интерактивного руководства man.
Число жестких ссылок на файл (т. е. разных имен файла) можно узнать, выполнив команду ls с параметром -l. Сразу за перечислением прав доступа к файлу следует число, которое и обозначает число жестких ссылок на файл:
[user]# ls -l total 9 drwxr-xr-x 2 user users 1024 Jul 1 2000 Autostart
- rw-r-r- 1 user users 230 Sep 14 1999 Printer.kdelnk
- rw-r-r- 1 user users 159 Sep 15 1999 Red Hat
[user]$ cd..
А чтобы перейти по дереву каталогов на два "этажа" вверх, откуда спуститься в подкаталог kat1/kat2 надо дать команду
[user]$ cd../../kat1/kat2
Команда ls служит для вывода на экран списка имен файлов и подкаталогов текущего каталога. Нужно отметить, что фактически команда ls просто выводит содержимое файла, который описывает данный каталог, и не происходит никаких обращений к самим файлам. Любой каталог, как уже говорилось, - это обычный файл, в котором перечислены все файлы и подкаталоги этого каталога.
Примечание.
Задумайтесь, кстати: нет никаких особых "ящиков с файлами", есть просто файлы-списки, которые причисляют данный файл к определенному каталогу.
Если дать команду ls без параметров, то выводятся только имена файлов текущего каталога. Если нужно просмотреть содержимое не текущего, а какого-то другого каталога, надо указать команде ls полный или относительный путь к этому каталогу.
Кроме имени файла (или подкаталога) запись о нем в соответствующем каталоге содержит еще массу информации об этом файле. Для того, чтобы получить эту информацию, надо использовать дополнительные параметры команды ls. Если дать команду ls с параметром -l, то будут выданы не только имена файлов, но также данные о правах доступа к файлу (подробнее о правах будет рассказано ниже), количество жестких ссылок или имен файла (для каталога указывается число дополнительных блоков)[11], имя владельца файла и группы файла, его размер и дата последней модификации. Вот небольшой пример.
[user]$ ls -l
итого 1171
drwxrwxr-x 2 kos kos 1024 Jun 20 22:42 NotR
drwx------ 2 kos kos 1024 Jun 27 21:02 Star
-rw-rw-r-- 1 kos kos 17351 Nov 2 23:59 arch.htm
-rw-rw-r-- 1 kos kos 19847 Dec 11 20:23 contents.htm
-rw-rw-r-- 1 kos kos 48866 Nov 2 23:59 edit.htm
-rw-rw-r-- 1 kos kos 38867 Dec 12 20:58 filesystem1.htm
-rw-rw-r-- 1 kos kos 29545 Dec 11 20:23 first_start.htm
drwxr-xr-x 3 kos kos 2048 Sep 24 21:33 img
-rw-rw-r-- 1 kos kos 21590 Dec 11 19:42 init.htm
drwxrwxr-x 2 kos kos 1024 Sep 27 22:35 pic
-rw-rw-r-- 1 kos kos 11084 Nov 8 21:26 preface.htm
Если дополнительно задать параметр -i, то в первой колонке будут отображены индексы файлов (номера соответствующих inode). При задании параметра -t сортировка файлов будет производиться не по именам, а по времени модификации файла. Задание параметра -u приводит к тому, что вместо времени модификации файла будет выводиться время последнего доступа к файлу. Параметр -r меняет порядок сортировки на обратный (используется вместе с параметрами -l и -t). Заметим еще, что параметры можно перечислять как отдельно:
[user]$ ls -l -i - r
так и объединять:
[user]$ ls -lir
На этом мы закончим краткое описание команды ls (подробнее см. соответствующую man- или info-страницу) и перейдем к рассмотрению основных каталогов в каталоговой структуре Linux. 4.3. Назначение основных системных каталогов
Если вы работали, например, с Windows 95, то вы знаете, что, хотя пользователь имеет полную свободу в организации структуры каталогов, некоторые "обычаи" все же сохраняются. Так системные файлы располагаются обычно в подкаталоге C:\Windows, вновь устанавливаемые программы по умолчанию размещаются в каталоге C:\Program Files и т. д.. В Linux типовая структура каталогов выдерживается, пожалуй, даже более строго. Более того, существует даже стандарт на структуру каталогов для UNIX-подобных ОС, так называемый Filesystem Hierarchy Standart (FHS), полный текст которого можно найти по адресу http://www.pathname.com/fhs/[12]. Дистрибутив Red Hat в основном придерживается стандарта FHS.
В табл. 4.1 дан краткий перечень основных стандартно создаваемых каталогов той файловой структуры, которая создается при установке дистрибутива Red Hat (и его последователей).
В левом столбце перечислены подкаталоги корневого каталога, во втором столбце - некоторые основные (далеко не все!) подкаталоги второго уровня, а в третьем столбце даны краткие пояснения о назначении всех этих каталогов. Пояснения по необходимости очень краткие, более подробно с основными каталогами вы можете познакомиться по тексту стандарта FHS (http://www.pathname.com/fhs/).
Таблица 4.1. Структура каталогов Red Hat Linux
| Каталог | Подкаталоги | Назначение |
|---|---|---|
| /bin | Этот каталог содержит в основном готовые к исполнению программы, большинство из которых необходимы во время старта системы (или в однопользовательском системном режиме, используемом для отладки). Здесь хранится значительное количество общеупотребительных команд Linux | |
| /boot | Содержит основные постоянные файлы для загрузки системы, в частности загружаемое ядро. Файлы из этого каталога нужны только во время загрузки системы | |
| /dev | Каталог специальных файлов или файлов устройств. О них мы поговорим чуть подробнее в одном из следующих подразделов. Можете также заглянуть в man mknod(1) | |
| /etc | Этот каталог и его подкаталоги содержат большинство данных, необходимых для начальной загрузки системы и основные конфигурационные файлы. В /etc находятся, например, файл inittab, определяющий загружаемую конфигурацию, и файл паролей пользователей passwd. Часть конфигурационных файлов может находится и в /usr/etc. Каталог /etc не должен содержать двоичных файлов (их следует перенести в /bin или /sbin). Ниже приводится назначение основных (но далеко не всех!) подкаталогов каталога /etc | |
| /etc/rc.d | Этот подкаталог содержит файлы, которые используются в процессе начальной загрузки системы. Подробнее о них и вообще о процессе загрузки будет рассказано в разд. 8.2 | |
| /etc/skel | Когда создается новый пользователь и account для него, то файлы из этого каталога копируются во вновь созданный домашний каталог пользователя | |
| /etc/sysconfig | Каталог, содержащий некоторые (но не все) конфигурационные файлы системы | |
| /etc/X11 | Каталог для конфигурационных файлов подсистемы X11 (например, XF86Config) | |
| /home | Обычно в этом каталоге находятся домашние каталоги пользователей | |
| /lib | Этот каталог содержит разделяемые библиотеки функций, необходимых компилятору языка C и модули (драйверы устройств). Даже если в системе не установлен компилятор языка C, разделяемые библиотеки необходимы, поскольку они используются многими прикладными программами. Они загружаются в память по мере необходимости выполнения каких-то функций, что позволяет уменьшить объем кода программ - в противном случае один и тот же код многократно повторялся бы в различных программах | |
| /lost+found | Этот каталог используется при восстановлении файловой системы командой fsck. Если fsck обнаруживает файл, родительский каталог которого определить невозможно, она помещает такой файл в каталог /lost+found. Поскольку родительский каталог потерян, то таким файлам присваиваются имена, совпадающие с номерами их индексных дескрипторов | |
| /mnt | Это точка монтирования для временно монтируемых файловых систем. Если на компьютере запускается поочередно Linux и MS DOS, то этот каталог обычно используется, чтобы монтировать файловую систему MS DOS. Если вы имеете привычку монтировать несколько дополнительных носителей, например, дискеты, CD-ROM, дополнительный жесткий диск и т. д., то можно создать в нем соответственно дополнительные подкаталоги для каждого носителя | |
| /proc | Это точка монтирования для файловой системы proc, которая обеспечивает информацию о выполняющихся процессах, ядре, оборудовании вычислительной установки и т. д. Это псевдо-файловая система, подробности о которой можно узнать по команде man 5 proc. Специальные файлы из этого каталога используются для получения и передачи данных ядру | |
| /root | Это домашний каталог суперпользователя. Обратите внимание на то, что он расположен не там, где располагаются личные каталоги остальных пользователей (в /home) | |
| /sbin | Подобно каталогу /bin содержит в основном исполняемые файлы - программы и утилиты ОС, используемые в процессе загрузки и запускаемые системным администратором. В стандарте FHS говорится, что в этот каталог надо помещать те исполняемые файлы, которые используются после успешного подключения файловой системы /usr. Минимальное содержимое этого каталога включает программы clock, getty, init, update, mkswap, swapon, swapoff, halt, reboot, shutdown, fdisk, fsck.*, mkfs.*, lilo, arp, ifconfig, route | |
| /tmp | Каталог для временных файлов. В любой момент суперпользователь может удалить файлы из этого каталога без большого ущерба для остальных пользователей. Однако, не стоит удалять файлы из этого каталога, если вам не стало ясно, что конкретный файл или группа файлов мешают продолжению продуктивной работе на машине. Система сама периодически очищает этот каталог, поэтому не следует хранить тут файлы, которые вам могут понадобиться в дальнейшем | |
| /usr | Этот каталог огромен и его структура в основном повторяет структуру корневого каталога. В его подкаталогах находятся все основные приложения. В соответствии со стандартом FHS рекомендуется выделять для этого каталога отдельный раздел диска или вообще располагать его на сетевом диске, общем для всех компьютеров в сети. Такой раздел или диск монтируют только для чтения и располагают в нем общие конфигурационные и исполняемые файлы, документацию, системные утилиты и библиотеки, а также включаемые файлы (файлы типа include) | |
| /usr/bin | Готовые к исполнению программы - утилиты и приложения, которые часто вызывают обычные пользователи. | |
| /usr/bin/X11 | Обычное место для расположения готовых к исполнению программ из X-Window в Linux. Часто это символическая ссылка на /usr/X11R6/bin | |
| /usr/dict | Этот каталог содержит файлы со словарным запасом для программ проверки корректности написания слов. | |
| /usr/etc | Здесь содержатся конфигурационные файлы для группы машин. Однако, команды и программы должны смотреть в каталог /etc, в котором должны быть линки к файлам в каталоге /usr/etc | |
| /usr/include | Этот каталог содержит исходный код стандартных библиотек языка C, подставляемый в программы директивой препроцессора include. Поэтому пользователю надо иметь, по крайней мере, право на чтение из этого каталога. Ни в коем случае не следует модифицировать файлы в этом каталоге, потому что они тщательно отлажены разработчиком системы (разве что вы знаете систему лучше разработчика) | |
| /usr/lib | В данном каталоге содержится объектные библиотеки подпрограмм, динамические библиотеки, некоторые готовые к исполнению программы, которые не вызываются непосредственно. Сложные программные системы могут иметь свои подкаталоги в этом каталоге. | |
| /usr/lib/X11 | Обычное место для помещения файлов связанных с X-Window, а также конфигурационных файлов самой системы X-Window. В Linux это обычно символическая ссылка на каталог /usr/X11R6/lib/X11. | |
| /usr/lib/gcc-lib | Содержит готовые к исполнению программы и файлы типа include для компилятора GNU C (gcc). | |
| /usr/lib/groff | Файлы для системы форматирования текстов groff. | |
| /usr/lib/uucp | Файлы для UUCP. usr/lib/zoneinfo - Файлы для определения временной зоны. Смотрите также страницы руководств named-xfer (8), tzfile (5), tzselect (8), zdump (8), zic (8) | |
| /usr/local | Обычно здесь помещают программы и подкаталоги, которые являются локальными (уникальными) для данной машины. | |
| /usr/local/bin | Обычно здесь помещают готовые к исполнению программы, которые являются локальными (уникальными) для данной машины. | |
| /usr/local/doc | Здесь располагается документация ко всем установленным на Вашем компьютере пакетам прикладного ПО. | |
| /usr/local/etc | Конфигурационные файлы для локально установленных программ. | |
| /usr/local/lib | Библиотеки и файлы для локально установленных программ и систем. | |
| /usr/local/info | Страницы описаний, которые просматриваются посредством программы info, для локально установленных программ. | |
| /usr/local/man | Страницы описаний, которые просматриваются посредством программы man, для локально установленных программ | |
| /usr/local/sbin | Локальные программы системного администратора. | |
| /usr/local/src | Исходные тексты программ, установленных на данной машине | |
| /usr/man | Страницы интерактивного руководства man в исходном формате (не подготовленные для просмотра). | |
| /usr/man/‹locale›/man[1-9] | Эти каталоги содержат страницы руководств на различных языках (в зависимости от значения locale). Системы, которые используют один язык и один кодовый набор, могут не использовать подстроку ‹locale› | |
| /usr/sbin | Этот каталог содержит готовые к исполнению программы для системного администрирования, которые не используются во время загрузки | |
| /usr/src | Исходные тексты для различных частей Linux. | |
| /usr/src/linux | исходные тексты для ядра Linux | |
| /usr/tmp | Еще одно место для хранения временных файлов. Обычно это символическая ссылка на каталог /var/tmp | |
| /usr/X11R6 | Файлы относящиеся к системе X-Window (версии 11, релиз 6). | |
| /usr/X11R6/bin | Готовые к исполнению программы системы X-Window | |
| /usr/X11R6/lib | Файлы и библиотеки, связанные с системой X-Window | |
| /var | Этот каталог содержит файлы, в которых сохраняются различные переменные данные, определяющие конфигурацию некоторых программ при следующем запуске или временно сохраняемую информацию, которая будет использоваться позже в ходе текущего сеанса. Объем данных в этом каталоге может сильно изменяться, поскольку он содержит, например, файлы протоколов (логи), файлы спулинга и блокировки (locking), временные файлы и т. д. | |
| /var/adm | Содержит учетную и диагностическую информацию, необходимую системному администратору | |
| /var/backups | Этот каталог используется, чтобы сохранить резервную копию важных системных файлов | |
| /var/catman/cat[1-9] | Этот каталог используется, чтобы хранить уже сформированные страницы руководств в соответствии с номером главы | |
| /var/lock | Здесь содержатся управляющие файлы системы, которые используются для резервирования использования тех или иных ресурсов системы | |
| /var/log | Различные файлы протоколов (логи) | |
| /var/run | Переменные файлы времени выполнения различных программ. Они содержат идентификаторы процессов (PIDs) и записывают текущую информацию (utmp). Файлы в этом каталоге обычно очищаются во время загрузки системы | |
| /var/spool | Файлы различных программ, поставленные в очередь на обслуживание | |
| /var/spool/at | Файлы заданий, запущенных посредством команды at | |
| /var/spool/cron | Файлы системы cron | |
| /var/spool/lpd | Файлы, ожидающие вывода на печать | |
| /var/spool/mail | Пользовательские почтовые ящики | |
| /var/spool/news | Файлы системы news | |
| /var/spool/uucp | Файлы системы uucp | |
| /var/tmp | Временные файлы |
| Имя | Значение |
|---|---|
| /dev/console | Системная консоль, т. е. монитор и клавиатура, физически подключенные к компьютеру |
| /dev/hd | Жесткие диски с IDE-интерфейсом. Устройство /dev/hda1 соответствует первому разделу на первом жестком диске (/dev/hda), т. е. на диске, подключенном как Primary Master |
| /dev/sd | Жесткие диски с SCSI-интерфейсом |
| /dev/fd | Файлы дисководов для гибких дисков. Первому дисководу соответствует /dev/fd0, второму /dev/fd1 |
| /dev/tty | Файлы поддержки пользовательских консолей. Название сохранилось с тех пор, когда к системе UNIX подключались телетайпы в качестве терминалов. В Linux эти файлы устройств обеспечивают работу виртуальных консолей (переключаться между которыми можно с помощью ‹Alt›+‹F1› - ‹Alt›+‹F6›) |
| /dev/pty | Файлы поддержки псевдо-терминалов. Применяются для удаленных рабочих сессий с использованием telnet |
| /dev/ttS | Файлы, обеспечивающие работу с последовательными портами. /dev/ttS0 соответствует COM1 в MS-DOS, /dev/ttS1 - COM2. Если ваша мышь подключается через последовательный порт, то /dev/mouse является символической ссылкой на соответствующий /dev/ttSN |
| /dev/cua | Специальные устройства для работы с модемами |
| /dev/null | Это устройство - просто черная дыра. Все, что записывается в /dev/null, навсегда потеряно. На это устройство можно перенаправить вывод ненужных сообщений. Если /dev/null используется как устройство ввода, то оно ведет себя как файл нулевой длины |
ln -s имя_файла_или_каталога имя_ссылки
Пример:
[user]$ ln -s /home/kos/ve/HOWTO/font-HOWTO-ru/ ~/FONTS
После выполнения такой команды в моем домашнем каталоге появился подкаталог FONTS. Если теперь мы просмотрим список файлов в каталоге /home/kos с помощью команды ls -l, то среди прочих увидим такую строку:
lrwxrwxrwx 1 kos kos 31 Dec 13 21:13 FONTS -› /home/kos/ve/HOWTO/font-HOWTO-ru/
Обратите внимание на самый первый символ в этой строке: он показывает, что данная запись соответствует символической ссылке. Впрочем, это видно и в поле имени, где после нового имени и стрелки указано исходное имя файла (в данном случае - каталога).
Если вы создали в каталоге kat1 символическую ссылку, которая указывает на какой-то другой каталог, то вы можете переместить каталог kat1 куда угодно, символическая ссылка при этом будет оставаться корректной. Точно так же можно перемещать сами символические ссылки. Но остерегайтесь использовать ".." (т. е. ссылку на родительский каталог) в полных именах файлов, включающих символические ссылки, поскольку по символической ссылке нельзя проследовать в обратном направлении, а ".." всегда означает истинный родительский каталог данного каталога.
[user]$ ls -l /bin/ls
- rwxr-xr-x 1 root root 49940 Sep 12 1999 /bin/ls
Вы видите, что в данном случае владельцем файла является пользователь root и группа root. Но нас сейчас в выводе этой команды больше интересует первое поле, определяющее тип файла и права доступа к файлу. Это поле в приведенном примере представлено цепочкой символов -rwxr-xr-x. Эти символы можно условно разделить на 4 группы.
Первая группа, состоящая из единственного символа, определяет тип файла. Этот символ в соответствии с возможными типами файлов, рассмотренными в предыдущем разделе, может принимать такие значения:
• - = - обычный файл;
• d = - каталог;
• b = - файл блочного устройства;
• c = - файл символьного устройства;
• s = - доменное гнездо (socket);
• p = - именованный канал (pipe);
• l = - символическая ссылка (link).
Далее следуют три группы по три символа, которые и определяют права доступа к файлу соответственно для владельца файла, для группы пользователей, которая сопоставлена данному файлу, и для всех остальных пользователей системы. В нашем примере права доступа для владельца определены как rwx, что означает, что владелец (root) имеет право читать файл (r), производить запись в этот файл (w), и запускать файл на выполнение (x). Замена любого из этих символов прочерком будет означать, что пользователь лишается соответствующего права. В том же примере мы видим, что все остальные пользователи (включая и тех, которые вошли в группу root) лишены права записи в этот файл, т. е. не могут файл редактировать и вообще как-то изменять.
Вообще говоря, права доступа и информация о типе файла в UNIX-системах хранятся в индексных дескрипторах в отдельной структуре, состоящей из двух байтов, т. е. из 16 бит (это естественно, ведь компьютер оперирует битами, а не символами r, w, x). Четыре бита из этих 16-ти отведены для кодированной записи о типе файла. Следующие три бита задают особые свойства исполняемых файлов, о которых мы скажем чуть позже. И, наконец, оставшиеся 9 бит определяют права доступа к файлу. Эти 9 бит разделяются на 3 группы по три бита. Первые три бита задают права пользователя, следующие три бита - права группы, последние 3 бита определяют права всех остальных пользователей (т. е. всех пользователей, за исключением владельца файла и группы файла).
При этом, если соответствующий бит имеет значение 1, то право предоставляется, а если он равен 0, то право не предоставляется. В символьной форме записи прав единица заменяется соответствующим символом (r, w или x), а 0 представляется прочерком.
Право на чтение (r) файла означает, что пользователь может просматривать содержимое файла с помощью различных команд просмотра, например, командой more или с помощью любого текстового редактора. Но, подредактировав содержимое файла в текстовом редакторе, вы не сможете сохранить изменения в файле на диске, если не имеете права на запись (w) в этот файл. Право на выполнение (x) означает, что вы можете загрузить файл в память и попытаться запустить его на выполнение как исполняемую программу. Конечно, если в действительности файл не является программой (или скриптом shell), то запустить этот файл на выполнение не удастся, но, с другой стороны, даже если файл действительно является программой, но право на выполнение для него не установлено, то он тоже не запустится.
Вот мы и узнали, какие файлы в Linux являются исполняемыми! Как видите, расширение имени файла тут не при чем, все определяется установкой атрибута "исполняемый", причем право на исполнение может быть предоставлено не всем!
Если выполнить ту же команду ls -l, но в качестве последнего аргумента ей указать не имя файла, а имя каталога, мы увидим, что для каталогов тоже определены права доступа, причем они задаются теми же самыми символами rwx. Например, выполнив команду ls -l /, мы увидим, что каталогу bin соответствует строка:
drwxr-xr-x 2 root root 2048 Jun 21 21:11 bin
Естественно, что по отношению к каталогам трактовка понятий "право на чтение", "право на запись" и "право на выполнение" несколько изменяется. Право на чтение по отношению к каталогам легко понять, если вспомнить, что каталог - это просто файл, содержащий список файлов в данном каталоге. Следовательно, если вы имеете право на чтение каталога, то вы можете просматривать его содержимое (этот самый список файлов в каталоге). Право на запись тоже понятно - имея такое право, вы сможете создавать и удалять файлы в этом каталоге, т. е. просто добавлять в каталог или удалять из него запись, содержащую имя какого-то файла и соответствующие ссылки. Право на выполнение интуитивно менее понятно. Оно в данном случае означает право переходить в этот каталог. Если вы, как владелец, хотите дать доступ другим пользователям на просмотр какого-то файла в своем каталоге, вы должны дать им право доступа в каталог, т. е. дать им "право на выполнение каталога". Более того, надо дать пользователю право на выполнение для всех каталогов, стоящих в дереве выше данного каталога. Поэтому в принципе для всех каталогов по умолчанию устанавливается право на выполнение как для владельца и группы, так и для всех остальных пользователей. И, уж если вы хотите закрыть доступ в каталог, то лишите всех пользователей (включая группу) права входить в этот каталог. Только не лишайте и себя такого права, а то придется обращаться к суперпользователю![13]
После прочтения предыдущего абзаца может показаться, что право на чтение каталога не дает ничего нового по сравнению с правом на выполнение. Однако разница в этих правах все же есть. Если задать только право на выполнение, вы сможете войти в каталог, но не увидите там ни одного файла (этот эффект особенно наглядно проявляется в том случае, если вы пользуетесь каким-то файловым менеджером, например, программой Midnight Commander). Если вы имеете право доступа в каком-то из подкаталогов этого каталога, то вы можете перейти в него (командой cd), но, как говорится "вслепую", по памяти, потому что списка файлов и подкаталогов текущего каталога вы не увидите.
Алгоритм проверки прав пользователя при обращении к файлу можно описать следующим образом. Система вначале проверяет, совпадает ли имя пользователя с именем владельца файла. Если эти имена совпадают (т. е. владелец обращается к своему файлу), то проверяется, имеет ли владелец соответствующее право доступа: на чтение, на запись или на выполнение (не удивляйтесь, суперпользователь может лишить некоторых прав и владельца файла). Если право такое есть, то соответствующая операция разрешается. Если же нужного права владелец не имеет, то проверка прав, предоставляемых через группу или через группу атрибутов доступа для остальных пользователей, уже даже не проверяются, а пользователю выдается сообщение о невозможности выполнения затребованного действия (обычно что-то вроде "Permission denied").
Если имя пользователя, обращающегося к файлу, не совпадает с именем владельца, то система проверяет, принадлежит ли владелец к группе, которая сопоставлена данному файлу (далее будем просто называть ее группой файла). Если принадлежит, то для определения возможности доступа к файлу используются атрибуты, относящиеся к группе, а на атрибуты для владельца и всех остальных пользователей внимания не обращается. Если же пользователь не является владельцем файла и не входит в группу файла, то его права определяются атрибутами для остальных пользователей. Таким образом, третья группа атрибутов, определяющих права доступа к файлу, относится ко всем пользователям, кроме владельца файла и пользователей, входящих в группу файла.
Для изменения прав доступа к файлу используется команда chmod. Ее можно использовать в двух вариантах. В первом варианте вы должны явно указать, кому какое право даете или кого этого права лишаете:
[user]$ chmod wXp имя-файла
где вместо символа w подставляется
• либо символ u (т. е. пользователь, который является владельцем);
• либо g (группа);
• либо o (все пользователи, не входящие в группу, которой принадлежит данный файл);
• либо a (все пользователи системы, т. е. и владелец, и группа, и все остальные).
Вместо X ставится:
• либо + (предоставляем право);
• либо - (лишаем соответствующего права);
• либо = (установить указанные права вместо имеющихся),
Вместо p - символ, обозначающий соответствующее право:
• r (чтение);
• w (запись);
• x (выполнение).
Вот несколько примеров использования команды chmod:
[user]$ chmod a+x file_name
предоставляет всем пользователям системы право на выполнение данного файла.
[user]$ chmod go-rw file_name
удаляет право на чтение и запись для всех, кроме владельца файла.
[user]$ chmod ugo+rwx file_name
дает всем права на чтение, запись и выполнение.
Если опустить указание на то, кому предоставляется данное право, то подразумевается, что речь идет вообще обо всех пользователях, т. е. вместо [user]$ chmod a+x file_name можно записать просто
[user]$ chmod +x file_name
Второй вариант задания команды chmod (он используется чаще) основан на цифровом представлении прав. Для этого мы кодируем символ r цифрой 4, символ w - цифрой 2, а символ x - цифрой 1. Для того, чтобы предоставить пользователям какой-то набор прав, надо сложить соответствующие цифры. Получив, таким образом, нужные цифровые значения для владельца файла, для группы файла и для всех остальных пользователей, задаем эти три цифры в качестве аргумента команды chmod (ставим эти цифры после имени команды перед вторым аргументом, который задает имя файла). Например, если надо дать все права владельцу (4+2+1=7), право на чтение и запись - группе (4+2=6), и не давать никаких прав остальным, то следует дать такую команду:
[user]$ chmod 760 file_name
Если вы знакомы с двоичным кодированием восьмеричных цифр, то вы поймете, что цифры после имени команды в этой форме ее представления есть не что иное, как восьмеричная запись тех самых 9 бит, которые задают права для владельца файла, группы файла и для всех пользователей.
Выполнять смену прав доступа к файлу с помощью команды chmod может только сам владелец файла или суперпользователь. Для того, чтобы иметь возможность изменить права группы, владелец должен дополнительно быть членом той группы, которой он хочет дать права на данный файл.
Чтобы завершить рассказ о правах доступа к файлам, надо рассказать еще о трех возможных атрибутах файла, устанавливаемых с помощью той же команды chmod. Это те самые атрибуты для исполняемых файлов, которые в индексном дескрипторе файла в двухбайтовой структуре, определяющей права на файл, занимают позиции 5-7, сразу после кода типа файла.
Первый из этих атрибутов - так называемый "бит смены идентификатора пользователя". Смысл этого бита состоит в следующем.
Обычно, когда пользователь запускает некоторую программу на выполнение, эта программа получает те же права доступа к файлам и каталогам, которые имеет пользователь, запустивший программу. Если же установлен "бит смены идентификатора пользователя", то программа получит права доступа к файлам и каталогам, которые имеет владелец файла программы (таким образом, рассматриваемый атрибут лучше называть "битом смены идентификатора владельца"). Это позволяет решать некоторые задачи, которые иначе было бы трудно выполнить. Самый характерный пример - команда смены пароля passwd. Все пароли пользователей хранятся в файле /etc/passwd, владельцем которого является суперпользователь root. Поэтому программы, запущенные обычными пользователями, в том числе команда passwd, не могут производить запись в этот файл. А, значит, пользователь как бы не может менять свой собственный пароль. Но для файла /usr/bin/passwd установлен "бит смены идентификатора владельца", каковым является пользователь root. Следовательно, программа смены пароля passwd запускается с правами root и получает право записи в файл /etc/passwd (уже средствами самой программы обеспечивается то, что пользователь может изменить только одну строку в этом файле).
Установить "бит смены идентификатора владельца" может суперпользователь с помощью команды
[root]# chmod +s file_name
Аналогичным образом работает "бит смены идентификатора группы".
Еще один возможный атрибут исполняемого файла - это "бит сохранения задачи" или "sticky bit" (дословно - "бит прилипчивости"). Этот бит указывает системе, что после завершения программы надо сохранить ее в оперативной памяти. Удобно включить этот бит для задач, которые часто вызываются на выполнение, так как в этом случае экономится время на загрузку программы при каждом новом запуске. Этот атрибут был необходим на старых моделях компьютеров. На современных быстродействующих системах он используется редко.
Если используется цифровой вариант задания атрибутов в команде chmod, то цифровое значение этих атрибутов должно предшествовать цифрам, задающим права пользователя:
[root]# chmod 4775 file_name
При этом веса этих битов для получения нужного суммарного результата задаются следующим образом:
• 4 - "бит смены идентификатора пользователя",
• 2 - "бит смены идентификатора группы",
• 1 - "бит сохранения задачи (sticky bit)".
Если какие-то из этих трех битов установлены в 1, то несколько изменяется вывод команды ls -l в части отображения установленных атрибутов прав доступа. Если установлен в 1 "бит смены идентификатора пользователя", то символ "x" в группе, определяющей права владельца файла, заменяется символом "s". Причем, если владелец имеет право на выполнение файла, то символ "x" заменяется на маленькое "s", а если владелец не имеет права на выполнение файла (например, файл вообще не исполняемый), то вместо "x" ставится "S". Аналогичные замены имеют место при задании "бита смены идентификатора группы", но заменяется символ "x" в группе атрибутов, задающих права группы. Если равен 1 "бит сохранения задачи (sticky bit)", то заменяется символ "x" в группе атрибутов, определяющей права для всех остальных пользователей, причем "x" заменяется символом "t", если все пользователи могут запускать файл на выполнение, и символом "T", если они такого права не имеют.
Таким образом, хотя в выводе команды ls -l не предусмотрено отдельных позиций для отображения значений битов смены идентификаторов и бита сохранения задачи, соответствующая информация выводится. Вот небольшой пример того, как это будет выглядеть:
[root]# ls -l prim1
- rwSrwsrwT 1 kos root 12 Dec 18 23:17 prim1
[root]# chown vasja имя-файла
[root]# chgrp usersgrp имя-файла
[user]$ mkdir /home/kos/book/glava5/part1
Команда mkdir может использоваться со следующими опциями:
• -m mode - задает режим доступа для нового каталога (например, -m 755);
• -p - создавать указанные промежуточные каталоги (если они не существуют).
[user]$ cat file1 › file2
Собственно, первоначальное предназначение команды cat как раз и предполагало перенаправление вывода, так как эта команда создана для конкатенации, т. е. объединения нескольких файлов в один:
[user]$ cat file1 file2… fileN › new-file
Именно возможности перенаправления ввода и вывода этой команды и используются для создания новых файлов. Для этого на вход команды cat направляют данные со стандартного ввода (т. е. с клавиатуры), а вывод команды - в новый файл:
[user]$ cat › newfile
После того, как вы напечатаете все, что хотите, нажмите комбинацию клавиш ‹Ctrl›+‹D› или ‹Ctrl›+‹C›, и все, что вы ввели, будет записано в newfile. Конечно, таким образом создаются, в основном, короткие текстовые файлы.
[user]$ cp [options] source destination
[user]$ cp [options] source_directory new_directory
В первом случае файл или каталог source копируется, соответственно, в файл или каталог destination, а во втором случае файлы, содержащиеся в каталоге source_directory копируются в каталог new_directory. Для копирования надо иметь права на чтение файлов, которые копируются, и права на запись в каталог, в который производится копирование.
Если в качестве целевого указывается существующий файл, то его содержимое будет затерто, поэтому при копировании надо соблюдать осторожность. Впрочем, можно использовать команду cp с опцией -i, тогда перед перезаписью существующего файла будет запрашиваться подтверждение (очень рекомендую вам всегда использовать эту опцию!).
У команды cp имеется еще несколько полезных опций (табл. 4.3).
Таблица 4.3. Основные опции команды cd.
| Опция | Значение |
|---|---|
| -p | Сохраняет время модификации файла и максимально возможные полномочия. Без этой опции для нового файла задаются полномочия, соответствующие полномочиям запустившего команду пользователя |
| -R или -r | Если source - каталог, то копируется как он, так и все входящие в него подкаталоги, т. е. сохраняется исходная форма дерева каталогов |
| -d | Если задать эту опцию, то символические ссылки будут оставаться ссылками (а иначе вместо ссылки копируется файл, на который дается ссылка) |
| -f | Перезаписывать файлы при копировании (если такие уже есть) без дополнительных предупреждений |
[user]$ mv oldname newname
Но учтите, что команда mv не позволяет переименовать сразу несколько файлов (используя шаблон имени), так что команда mv*.xxx*.yyy не будет работать.
При использовании команды mv, также как и при использовании cp, не забывайте применять опцию -i для того, чтобы получить предупреждение, когда файл будет перезаписываться.
find [список_каталогов] критерий_поиска
Параметр "список_каталогов" определяет, где искать нужный файл. Проще всего задать в качестве начального каталога поиска корневой каталог /, однако, в таком случае поиск может затянуться очень надолго, так как будет просматриваться вся структура каталогов, включая смонтированные файловые системы (в том числе сетевые, если таковые есть). Можно сократить объем поиска, если задать вместо одного корневого каталога список из нескольких каталогов (естественно, тех, в которых может находиться искомый файл):
[user]$ find /usr/share/doc /usr/doc /usr/locale/doc -name instr.txt
Началом "критерия_поиска", определяющего, что именно должна искать программа find, считается первый аргумент, начинающийся на "-", "(", ")"', "," или "!". Все аргументы, предшествующие "критерию_поиска", трактуются как имена каталогов, в которых надо производить поиск. Если не указано ни одного пути, поиск производится только в текущем каталоге и его подкаталогах.
Чаще всего поиск проводится по именам файлов, как это показано в предыдущем примере, т. е. "критерий_поиска" задается как "-name имя_файла". Вместо опции -name можно использовать опцию -path, тогда команда будет искать совпадения в полном имени файла, с указанием пути. Например, команда
[user]$ find. -path './sr*sc'
найдет в текущем каталоге подкаталог './src/misc'. Вместо полного имени файла или каталога в этом примере использован так называемый "шаблон имени". Поскольку шаблоны имен файлов могут использоваться не только с командой find, но и со многими другими командами (включая уже рассмотренные команды chmod, chown, chgrp, cp, rm, cat, mv), то правилам составления шаблонов стоит уделить некоторое внимание.
Чаще всего шаблоны имен файлов строятся с помощью специальных символов "*" и "?". Значок "*" используется для замены произвольной строки символов. В Linux
• "*" - соответствует всем файлам, за исключением скрытых;
• ".*" - соответствует всем скрытым файлам (но также текущему каталогу "." и каталогу уровнем выше "..": не забывайте об этом!);
• "*.*" - соответствует только тем файлам и каталогам, которые имеют "." в середине имени, или оканчиваются на точку;
• "p*r" - соответствует и "peter" и "piper";
• "*c*" - соответствует и "picked" и "peck".
Значок ? заменяет один произвольный символ, поэтому index?.htm будет соответствовать именам index0.htm, index5.htm и indexa.htm.
Кроме "*" и "?" в Linux при задании шаблонов имен можно использовать квадратные скобки [], в которых дается либо список возможных символов, либо интервал, в который должны попадать возможные символы. Например, [abc]* соответствует всем именам файлов, начинающимся с a, b, c; *[I-N1-3] соответствует файлам, имена которых оканчиваются на I, J, K, L, M, N, 1, 2, 3.
А теперь вернемся к команде find и расскажем подробнее о том, какие критерии поиска возможны. Несколько примеров простых критериев поиска перечислены в табл. 4.4.
Таблица 4.4. Критерии поиска для команды find.
| Опция | Значение |
|---|---|
| -name шаблон | Ищет файлы, имена которых соответствуют шаблону |
| -group имя | Ищет файлы, принадлежащие указанной группе |
| -size число[c] | Ищет файлы, размером в число 512-байтных блоков. Если после числа стоит символ c, значит размер указан в байтах (символах) |
| -mtime число | Ищет файлы, которые в последний раз изменялись указанное число дней назад |
| -newer образец | Ищет файлы, которые изменялись после изменения файла, указанного в образце |
| -type тип_файла | Ищет файлы указанного типа. Тип задается одним из символов b (блок-ориентированные устройства), c (байт-ориентированные устройства), d (файл каталога), f (обычный файл), p (именованный канал) либо l (символическая ссылка) |
[user]$ find /usr -name doc -type d
или (с соблюдением правил построения сложных критериев)
[user]$ find /usr \(-name doc -and -type d \)
В следующем примере мы ищем файлы по такому критерию: либо имя файла оканчивается на*.tmp, либо размер файла больше 100 Кбайт.
[user]$ find /home/kos \(\(-name*.tmp \) -or \(-size +200 \) \)
В последнем примере стоит обратить внимание на то, что перед значением размера стоит знак "+". Такой знак можно использовать с любым числовым параметром в критериях поиска команды find. Он означает, что нужно искать файлы, у которых значение параметра больше заданного. Соответственно, знак "-" означает, что надо искать файлы, у которых значение параметра меньше заданного. Если знаки + или - отсутствует, ищутся файлы, у которых значение параметра равно заданному.
Чтобы закончить рассмотрение команды find, надо сказать еще о том, что после критерия поиска в этой команде можно сразу же задать операцию, которая будет применяться ко всем файлам, найденным по указанному критерию. Простейшим примером использования такой возможности является указание команды -print.
[user]$ find /home/kos -name*.tmp -print
по которой выдается на экран список имен всех найденных файлов с указанием полного пути к файлу. Эта операция применяется по умолчанию, т. е. когда никаких операций вообще не указано (как это было во всех приведенных выше примерах). Другим примером операции, применяемой ко всем найденным файлам, может служить операция -exec cmd {} \;, где cmd - произвольная команда оболочки shell. То есть в этом случае ко всем найденным файлам (их именами заменяются поочередно фигурные скобки) применяется команда cmd. За cmd {} в этом случае должна следовать точка с запятой, экранированная обратной косой чертой.
Например, если вы хотите удалить в текущем каталоге все файлы, к которым пользователи не обращались в течение 30 дней, дайте команду:
[root]# find. -type f -atime +30 -exec rm {} \;
Вместо -exec можно поставить -ok, тогда перед выполнением указанной команды cmd применительно к каждому файлу будет запрашиваться подтверждение.
В общем, команда find является очень мощным, полезным и чрезвычайно адаптируемым инструментом поиска в файловой системе. Все ее возможности здесь не перечислены, изучайте соответствующую man-страницу. И будьте очень осторожны с применением таких возможностей команды, как вызов других команд, применяемых ко всем найденным файлам. Помните, что изменения часто необратимы!
[user]$ split -b1400k song.mp3 song
скопировать полученные файлы song.aa, song.ab, song.ac, song.ad, song.ae на отдельные дискеты, перенести их на домашний компьютер, скопировать в какой-нибудь каталог и восстановить исходный файл с помощью команды
[user]$ cat song.* › song.mp3
после чего можно удалить временные файлы song.xx.
[user]$ cmp file1 file2
Если файлы полностью совпадают, она молча заканчивает свою работу (происходит возврат к командной строке без каких-либо дополнительных сообщений), а если файлы различаются, выдаются номер строки и номер байта в строке, где имеет место первое различие.
Конечно, информации, выдаваемой командой cmp, маловато для того, чтобы принять, например, решение о том, какой из двух файлов нам более ценен. Поэтому стоит воспользоваться командой diff для получения полного отчета о том, каковы же различия в интересующих нас файлах. Для получения отчета достаточно указать команде, какие именно файлы сравнивать:
[user]$ diff paper.old paper.new
Отчет о выявленных различиях будет выдан на стандартный выход. Естественно, его лучше перенаправить в файл:
[user]$ diff paper.old paper.new ›paper.diff
Для оценки версий одного и того же файла более удобна может оказаться команда sdiff, которая выдает результат сравнения в виде двух столбцов, разделенных пробелами. Если строки с одинаковыми номерами в файлах различаются, то в выводе команды sdiff они разделены вертикальной чертой |. Если строка имеется только в первом файле, она отмечена знаком ‹. Соответственно, строка, встречающаяся только во втором файле, помечена знаком ›.
Существует также команда diff3, которая позволяет сравнить сразу 3 файла.
Но все же наиболее часто используется традиционная для UNIX-систем команда diff. Эта ее востребованность объясняется тем, что создаваемый ею отчет о различиях двух файлов может быть использован командой patch. Чаще всего эти возможности используются при распространении обновлений программного обеспечения. Предположим, что некоторое программное приложение было разослано пользователям в виде файла program.c, содержащего исходный код программы на языке Си. После этого разработчик внес в программу некоторые исправления и сохранил текст в виде файла program.c.new. Требуется довести исправленный текст программы до пользователей. Очевидно, что пользователям достаточно сообщить только исправления, т. е. отчет об изменениях, создаваемый по команде
[user]$ diff program.c program.c.new › program.c.diff
Естественно, объем файла program.c.diff существенно меньше объема файла program.c.new, так что можно было бы получить существенную экономию на передаче файлов, если отправлять пользователям только файл program.c.diff (ведь объемы современных программных приложений составляют десятки мегабайт). Однако пользователи должны иметь возможность внести эти исправления в имеющуюся у них версию программы. Эту задачу позволяет решить команда patch. Имея файлы program.c и program.c.diff, пользователь может дать команду
[user]$ patch program.c program.c.diff › program.c.new
в результате выполнения которой он получит файл program.c.new.
| Опция | Значение |
|---|---|
| -A, --catenate, --concatenate | Добавляет файлы в существующий архив |
| -c, --create | Создает новый архив |
| -d, --diff, --compare | Найти различия между архивом и файловой системой |
| --delete | Удалить из архива (не может использоваться с магнитной лентой!) |
| -r, --append | Дописывает файлы в конец архива |
| -t, --list | Выводит список файлов архива |
| -u, --update | Добавляет только файлы, которые новее, чем имеющаяся в архиве копия |
| -x, --extract, --get | Извлечь файлы из архива |
[user]$ tar -cf имя_архива файл1 файл2 …
где опция -c сообщает программе, что необходимо создать (create) архив, а опция f говорит о том, что архив должен создаваться в виде файла (имя которого должно следовать сразу за этой опцией).
В именах файлов, которые сохраняются в архиве, можно использовать шаблоны имен файлов, в том числе просто символы-заместители* и?. Благодаря этому можно очень короткой командой отправить в архив сразу много файлов. Например, для того, чтобы создать архив, содержащий все файлы одного из подкаталогов (пусть это будет sub_dir) текущего каталога, достаточно дать команду
[user]$ tar -cvf имя_архива./sub_dir/*
или даже просто
[user]$ tar -cvf имя_архива sub_dir
По этой команде в архиве будут сохранены не только файлы, расположенные непосредственно в подкаталоге sub_dir, но и рекурсивно все файлы из подкаталогов каталога sub_dir. При этом в архиве сохраняется вся структура подкаталогов каталога sub_dir.
Заметим, что если в только что приведенном примере вместо * поставить *.*, то будут сохранены только те файлы, которые расположены непосредственно в подкаталоге sub_dir, а подкаталоги каталога sub_dir архивированы не будут[14]. Если в том же примере не указать имя подкаталога, то будут архивироваться все файлы (и подкаталоги) текущего каталога. Но если вы дадите команду следующего вида
[user]$ tar -cvf имя_архива./.*
то в архиве будут сохранены не только все файлы (и подкаталоги) текущего каталога, но и файлы из родительского каталога, а хотели ли вы этого?
Теперь вы знаете как создать архив, а для того, чтобы распаковать (извлечь) файлы из архива, нужно дать команду:
[user]$ tar -xvf имя_архива файлы
Получить список файлов архива можно командой:
[user]$ tar -tf имя_архива | less
Программа tar является удобным средством для создания резервных копий файлов. Конечно, существуют специальные утилиты резервного архивирования, но даже если вы о них еще не знаете, то по меньшей мере, вы можете сделать следующее:
[user]$ tar -Mcvf /dev/fd0H1440 /каталог
Такая команда создаст на дискетах архив с содержимым каталога, разбивая его на тома. Монтировать дискеты перед запуском команды не нужно, программа просто пишет на устройство потоком (в данном случае на дискету по секторам). При этом никакой файловой системы на дискете не создается. После заполнения дискеты вам будет выдан запрос на смену дискеты. Только, прежде чем запускать такую команду на выполнение, приготовьте достаточное число свободных дискет (помните, что tar не сжимает файлы), которые лучше всего соответствующим образом пометить и обязательно пронумеровать. Кроме того, имейте в виду, что вся информация на дискетах будет молча уничтожена.
Чтобы восстановить сохраненные данные, воспользуйтесь командой:
[user]$ tar -Mxpvf /dev/fd0H1440
Если вы ошибетесь в порядке вставляемых дискет, программы сообщит вам об этом и попросит заменить том.
В заключение раздела заметим, что всегда можно получить подсказку по использованию программы tar, дав команду
[user]$ tar -help
При этом, если вы используете русифицированный дистрибутив Linux, например, Black Cat 6.02, то подсказка будет выдаваться по-русски.
[user]$ gzip файл
В командной строке можно указать сразу несколько имен файлов или шаблон имени файла. Но в этом случае каждый из указанных файлов будет заархивирован отдельно (общий архив не создается).
Для того, чтобы распаковать архив, используйте команду
[user]$ gzip -d файл_архива
или
[user]$ gunzip файл_архива
Исходные файлы после сжатия удаляются, остается только архивный файл (файлы перемещаются в архив), а при разархивации удаляется архив.
Перечислим кратко другие полезные опции программы gzip.
Таблица 4.6. Основные опции программы gzip
| Опция | Значение |
|---|---|
| -h, --help | Вызов краткой помощи по использованию программы |
| -l, --list | Выдает имя файла, содержащегося в архиве, его объем и степень сжатия |
| -L, --license | Отображает номер версии и лицензию на программу |
| -N, --name | Сохранять (или восстанавливать) исходное имя и время создания файла |
| -n, --no-name | Не сохранять (не восстанавливать) исходное имя и время создания файла |
| -q, --quiet | Подавляет выдачу на экран предупреждающих сообщений |
| -r, --recursive | Рекурсивно обрабатывать подкаталоги (используется в случае. когда задан шаблон имен обрабатываемых файлов) |
| -S suf, --suffix .suf | Добавить суффикс .suf к имени сжатого файла (вместо добавляемого по умолчанию суффикса gz; но учтите, что при разархивации файлов с суффиксами, отличными от gz, программа вас не поймет) |
| -t, --test | Протестировать архивный файл |
| -v, --verbose | Выдача дополнительных сообщений в процессе работы программы |
| -V, --version | Отобразить версию программы |
| -1, --fast | Быстрое сжатие |
| -9, --best | Более высокая степень сжатия |
[user]$ tar -czf имя_архива шаблон_имен_файлов (или имя_каталога)
Только имейте в виду, что в этом случае суффикс .gz не добавляется автоматически к имени создаваемого архива, поэтому лучше сразу задать имя архива с указанием обеих суффиксов: имя.tar.gz.
| Опция | Значение |
|---|---|
| -d, --decompress | Принудительная разархивация. Эта опция необходима в силу того, что bzip2, bunzip2 и bzcat - это на самом деле одна и та же программа, которая сама по расширению имени файла принимает решение о том, какое действие надо выполнить над указанным файлом. Опция -d отключает этот механизм и заставляет программу разархивировать указанные файлы |
| -z, --compress | Принудительная архивация |
| -t, --test | Проверка целостности указанного файла(ов) без разархивации |
| -f, --force | Перезапись существующего файла. По умолчанию bzip2 не перезаписывает существующие файлы. Если вы хотите перезаписать существующий файл, надо задать опцию -f |
| -k, --keep | Сохранять (не удалять) исходные файлы при архивации или разархивации |
| -s, --small | Снижает требования к объему используемой оперативной памяти за счет снижения скорости архивации. Эту опцию рекомендуется применять на компьютерах с малым объемом ОЗУ (8 Мбайт и меньше) |
| -q, --quiet | Не выводить малосущественные сообщения |
| -v, --verbose | Выводить дополнительную информацию в процессе работе (представляет интерес в диагностических целях) |
| -L, --license, -V, --version | Отобразить версию программы и лицензионное соглашение |
[user]$ bzip2 -- -myfilename
Я думаю, что приведенных данных достаточно для квалифицированного применения архиваторов tar, gzip и bzip2. За дополнительными сведениями, как всегда, обращайтесь к интерактивной подсказке man. По утилите bzip2 имеется "Bzip2-HOWTO”, который даже переведен на русский язык [П6.4].
[root]# mkfs -t ext2 /dev/hda5
где /dev/hda5 надо, естественно, заменить указанием на соответствующее устройство или раздел. Например, если вы хотите создать файловую систему на дискете, то команда примет вид:
[root]# mkfs -t ext2 /dev/fd0
(Можно сказать, что мы "отформатировали дискету", но учтите, что в DOS или Windows такие дискеты не читаются. Для создания под Linux дискет, которые бы читались в DOS или Windows, служат специальные утилиты.)
После выполнения команды mkfs в указанном разделе будет создана файловая система ext2fs (еще раз повторю, что подробнее об этом вы узнаете в гл. 16). В новой файловой системе автоматически создается один каталог с именем lost+found. Он используется в экстренных случаях программой fsck, поэтому не удаляйте его. Для того, чтобы начать работать с новой файловой системой (например, переписать какие-то файлы на новый носитель), необходимо подключить ее в общее дерево каталогов, что делается с помощью команды mount.
В качестве параметров команде mount надо, как минимум, указать устройство и "точку монтирования". Точкой монтирования называется тот каталог в уже существующем и известном системе дереве каталогов, который будет теперь служить корневым каталогом для подключаемой файловой системы. Пример: команда
[root]# mount /dev/hdb1 /mnt/disk2
подсоединяет файловую систему первого раздела на втором жестком диске к каталогу /mnt/disk2 (этот каталог должен существовать!).
Отметим, что после монтирования файловой системы в каталог /mnt/disk2 прежнее содержимое этого каталога станет для вас недоступно (так же, как информация о прежнем владельце и правах доступа к этому каталогу) до тех пор, пока вы не размонтируете вновь подключенную файловую систему. Прежнее содержимое не уничтожается, а просто становится временно недоступным. Поэтому в качестве точек монтирования лучше использовать пустые каталоги (заранее заготовленные).
В той простейшей форме, которую мы использовали в приведенном выше примере, команда mount будет работать только при условии, что все недостающие ей для выполнения параметры она найдет в файле /etc/fstab. Если же такого файла не существует, или он не содержит необходимых данных, надо применять более полную форму команды mount:
[root]# mount -t type device path
где type задает тип файловой системы, device указывает, на каком устройстве (в каком разделе) она находится, а path задает точку монтирования.
Конфигурационный файл /etc/fstab используется в основном для того, чтобы обеспечить автоматическое монтирование файловых систем в процессе загрузки. Каждая строка этого файла содержит описание одной файловой системы и состоит из 6 полей, разделяемых пробелами (для удобочитаемости поля обычно выравнивают, но делать это не обязательно):
• имя устройства. В качестве имени может использоваться как имя локального устройства, например, /dev/hda5, так и путевое имя сетевой файловой системы NFS, например, pc21:/home/jim, что указывает на каталог /home/jim на машине с именем pc21;
• точка монтирования (полное имя каталога, в который будет монтироваться файловая система);
• тип файловой системы;
• опции монтирования (по умолчанию подразумевается rw - чтение, запись);
• уровень дампа. Это поле используется программой dump, предназначенной для создания резервных копий. Если файловая система должна участвовать в процессе резервного копирования, то здесь должно стоять число 1, если нет - 0. Возможны и другие значения (см. руководство к программе dump);
• порядок (приоритет) проверки файловых систем программой fsck. Системы с меньшими значениями этого поля проверяются раньше. Системы с одинаковыми номерами проверяются, если это возможно, параллельно.
В настоящее время Linux поддерживает следующие типы файловых систем (см. страницу man fs, где дано их краткое описание): minix, ext, ext2, xia, msdos, umsdos, vfat, proc, nfs, iso9660, hpfs, sysv, smb, ncpfs. Вместо типа файловой системы в поле "тип файловой системы" (и в опции -t команды mount) можно задать значение auto. В таком случае команда mount попытается самостоятельно определить тип монтируемой файловой системы. Однако это во многих случаях приводит к ошибкам, поэтому лучше указать тип явно. Можно перечислить несколько типов (через запятую). В команде mount можно также вначале задать список типов файловых систем, которые не надо монтировать. Этот список задается с помощью флага no. Такая возможность может оказаться полезной в том случае, когда используется команда mount с аргументом -a. По этой команде производится монтирование всех файловых систем, перечисленных в файле /etc/fstab. С помощью дополнительного аргумента -t type в этом случае можно ограничиться монтированием файловых систем только определенного типа, а с помощью флага no можно указать типы, которые не надо монтировать. Например, команда
[root]# mount -a -t nomsdos,ext
монтирует все файловые системы, за исключением тех, которые относятся к типам msdos и ext.
Когда монтируется файловая система, упомянутая в файле /etc/fstab, то в команде монтирования достаточно указать только один аргумент - либо имя устройства, либо точку монтирования. Все остальные параметры команда mount возьмет из файла /etc/fstab.
Обычно монтировать файловые системы может только суперпользователь, но если в поле опций монтирования файла /etc/fstab указать опцию user, то соответствующую файловую систему смогут смонтировать все пользователи. Так, если в /etc/fstab имеется строка
/dev/cdrom /cd iso9660 ro,user,noauto,unhide
то любой пользователь сможет смонтировать файловую систему на своем CDROM, используя команду
[user]$ mount /dev/cdrom
или
[user]$ mount /cd
В табл. 4.8 приведены еще некоторые опции, которые могут использоваться в команде mount и в файле /etc/fstab.
Таблица 4.8. Основные опции команды mount
| Опция | Значение |
|---|---|
| async | Весь ввод-вывод в файловую систему должен производиться асинхронно |
| auto | Файловая система может монтироваться командой mount c опцией -a |
| defaults | Использовать набор опций, задаваемый по умолчанию: rw, suid, dev, exec, auto, nouser, async |
| dev | Файлы байт-ориентированных и блок-ориентированных устройств в файловой системе интерпретируются как специальные файлы |
| noauto | Файловая система может монтироваться только явно. Опция -a не приведет к монтированию файловой системы |
| exec | Разрешает выполнение двоичных файлов |
| remount | Позволяет перемонтировать уже смонтированную файловую систему. Обычно используется для изменения опций монтирования файловой системы, особенно для того, чтобы расширить права доступа (вместо прав только на чтение установить права на чтение/запись) |
| ro | Монтирует файловую систему только на чтение |
| rw | Монтирует файловую систему для чтения и записи |
| suid | Позволяет задействовать биты смены идентификатора пользователя и смены идентификатора группы |
| sync | Весь ввод-вывод в файловую систему должен производиться синхронно |
| user | Позволяет непривилегированному пользователю монтировать файловую систему. Для таких пользователей монтирование всегда выполняется с опциями noexec, nosuid, nodev |
| nodev | Файлы байт-ориентированных и блок-ориентированных устройств в файловой системе не интерпретируются как специальные файлы |
| nosuid | Не позволяет задействовать биты смены идентификатора пользователя и смены идентификатора группы |
| nouser | Запрещает непривилегированному пользователю монтировать файловую систему |
` ~! @ # $ % ^* () _ - [] {}:; ' " / \ › ‹
а также символ с кодом 0, символ возврата каретки (генерируемый клавишей ‹Enter›) и пробел. В зависимости от ситуации эти специальные символы могут трактоваться либо в их специальном значении, либо в буквальном, т. е. как литералы. Но мы в основном будем предполагать, что все эти символы зарезервированы и не должны использоваться в качестве литералов. Это касается в первую очередь использования их в именах файлов и каталогов, о чем мы уже говорили в гл. 4. Однако символы _, - и. (знак подчеркивания, дефис и точка) часто используются в именах файлов, так что именно этот пример показывает, что специальное значение эти символы имеют не всегда. В именах файлов только символы точки (.) и слэша (/) имеют специальное значение. Символ слэша служит для разделения имен отдельных каталогов, а точка имеет специальное значение только если она является первым символом в имени файла (что означает, что файл является «скрытым»).
Давать сейчас точное определение того, какое специальное значение и в каких ситуациях имеет тот или иной специальный символ, нецелесообразно. Мы будем рассматривать их постепенно в следующих разделах, по мере того, как они потребуются. Однако есть три символа, которые имеют особое значение и которые поэтому необходимо рассмотреть в первую очередь.
Символ \ (обратный слэш) можно назвать "символом отмены специального значения" для любого из специальных символов, который стоит сразу вслед за \. Например, если мы хотим использовать символ пробела в имени файла, мы должны вместо простого пробела поставить \. Например, возможна следующая команда:
[user]$ cp two_words two\ words
Символы ' и " (одинарные и двойные кавычки) могут быть названы "символами цитирования". Любой из этих символов всегда используется в паре с его копией для обрамления какого-то выражения, совсем как в обычной прямой речи. Если какой-то текст взят в одинарные кавычки, то все символы внутри этих кавычек воспринимаются как литералы, никаким из них не придается специального значения. Если вернуться к тому же примеру с пробелами в имени файла, то можно сказать, что для того, чтобы дать файлу имя "two words" надо взять имя в кавычки:
[user]$ cp two_words 'two words'
Различие в использовании символов ' и " состоит в том, что внутри одинарных кавычек теряют специальное значение все символы, а внутри двойных кавычек - все специальные символы кроме $, ' и \ (знака доллара, одинарных кавычек и обратного слэша).
[user]$ command1; command2
то оболочка вначале запустит на выполнение команду command1, дождется, пока ее выполнение завершится, после чего запустит command2, дождется ее завершения, после чего снова выведет приглашение командной строки, ожидая следующих действий пользователя.
[user]$ echo ‘Привет, дружище!’
и, думаю, дальнейших пояснений не потребуется (только используйте именно одиночные кавычки, иначе результат может быть несколько иным).
[user]$ ls -l › /home/jim/dir.txt
По этой команде в файле /home/jim/dir.txt будет сохранен перечень файлов и подкаталогов того каталога, который был текущим на момент выполнения команды ls; при этом если указанного файла не существовало, то он будет создан; если он существовал, то будет перезаписан; если же вы хотите, чтобы вывод команды был дописан в конец существующего файла, то надо вместо символа › использовать ››. При этом наличие пробелов до или после символов › или ›› несущественно и служит только для удобства пользователя.
Вы можете направить вывод не только в файл, но и на вход другой команды или на устройство (например, принтер). Так, для подсчета числа слов в файле /home/jim/report.txt можно использовать следующую команду:
[user]$ cat /home/jim/report.txt › wc -w
а для вывода файла на печать - команду:
[user]$ cat /home/jim/report.txt › lpr
Как видите, оператор › служит для перенаправления выходного потока. По отношению к входному потоку аналогичную функцию выполняет оператор ‹. Приведенный выше пример команды для подсчета числа слов в определенном файле можно переписать следующим образом (обратите внимание на отсутствие команды cat):
[user]$ wc -w ‹ /home/jim/report.txt
Этот вариант перенаправления часто используется в различных скриптах, применительно к тем командам, которые обычно воспринимают ввод (или ожидают ввода) с клавиатуры. В скрипте же, автоматизирующем какие-то рутинные операции, можно дать команде необходимую информацию из файла, в который заранее записано то, что нужно ввести для выполнения этой команды.
В силу того, что символы ‹, › и ›› действуют на стандартные потоки, их можно использовать не только тем привычным образом, как это делается обычно, но и несколько по-другому. Так, следующие команды эквивалентны:
[user]$ cat › file
[user]$ cat›file
[user]$ ›file cat
[user]$ › file cat
Однако сам по себе (без какой-либо команды, для которой определены стандартные потоки) символ перенаправления не может использоваться, так что нельзя, например, введя в командной строке
[user]$ file1 › file2
получить копию какого-то файла. Но это не уменьшает значения данного механизма, ведь стандартные потоки определены для любой команды. При этом перенаправить можно не только стандартный ввод и вывод, но и другие потоки. Для этого надо указать перед символом перенаправления номер перенаправляемого потока. Стандартный ввод stdin имеет номер 0, стандартный вывод stdout - номер 1, стандартный поток сообщений об ошибках stderr - номер 2. То есть полный формат команды перенаправления имеет вид (напомним, что пробелы возле › не обязательны):
command N › M
где N и M - номера стандартных потоков (0,1,2) или имена файлов. Употребление в некоторых случаях символов ‹, › и ›› без указания номера канала или имени файла возможно только потому, что вместо отсутствующего номера по умолчанию подставляется 1, т. е. стандартный вывод. Так, оператор › без указания номера интерпретируется как 1 ›.
Кроме простого перенаправления стандартных потоков существует еще возможность не просто перенаправить поток в тот или иной канал, а сделать копию содержимого стандартного потока. Для этого служит специальный символ &, который ставится перед номером канала, на который перенаправляется поток:
command N › &M
Такая команда означает, что выход канала с номером N направляется как на стандартный вывод, так и дублируется в канал с номером M. Например, для того, чтобы сообщения об ошибках дублировались на стандартный вывод, надо дать команду 2›&1, в то время как 1›&2 дублирует stdout в stderr. Такая возможность особенно полезна при перенаправлении вывода в файл, так как мы тогда одновременно и видим сообщения на экране, и сохраняем их в файле.
[user]$ cat myfile | grep Linux | wc -l
Эта строка означает, что вывод команды cat, т. е. текст из файла myfile, будет направлен на вход команды grep, которая выделит только строки, содержащие слово "Linux". Вывод команды grep будет, в свою очередь, направлен на вход команды wc -l, которая подсчитает число таких строк.
Программные каналы используются для того, чтобы скомбинировать несколько маленьких программ, каждая из которых выполняет только определенные преобразования над своим входным потоком, для создания обобщенной команды, результатом которой будет какое-то более сложное преобразование.
Надо отметить, что оболочка одновременно вызывает на выполнение все команды, включенные в конвейер, запуская для каждой из команд отдельный экземпляр оболочки, так что как только первая программа начинает что-либо выдавать в свой выходной поток, следующая команда начинает его обрабатывать. Точно так же каждая следующая команда выполняет свою операцию, ожидая данных от предыдущей команды и выдавая свои результаты на вход последующей. Если вы хотите, чтобы какая-то команда полностью завершилась до начала выполнения последующей, вы можете использовать в одной строке как символ конвейера |, так и точку с запятой;. Перед каждой точкой с запятой оболочка будет останавливаться и ожидать, пока завершится выполнение всех предыдущих команд, включенных в конвейер.
Статус выхода (логическое значение, возвращаемое после завершения работы программы) из канала совпадает со статусом выхода, возвращаемым последней командой конвейера. Перед первой командой конвейера можно поставить символ "!", тогда статус выхода из конвейера будет логическим отрицанием статуса выхода из последней команды. Оболочка ожидает завершения всех команд конвейера, прежде чем установить возвращаемое значение.
| Команда | Краткое описание |
|---|---|
| grep, fgrep, egrep | Ищут во входном файле или данных со стандартного ввода строки, содержащие указанный шаблон, и выдают их на стандартный вывод |
| tr | Заменяет во входном потоке все встречающиеся символы, перечисленные в заданном перечне, на соответствующие символы из второго заданного перечня |
| comm | Сравнивает два файла по строкам и выдает на стандартный вывод 3 колонки: в одной - строки, которые встречаются только в 1 файле, во второй - строки, которые встречаются только во 2-ом файле: и в третьей - строки, имеющиеся в обоих файлах |
| pr | Форматирует для печати текстовый файл или содержимое стандартного ввода |
| sed | Строковый редактор, использующийся для выполнения некоторых преобразований над входным потоком данных (берется из файла или со стандартного ввода) |
[user]$ echo name
выдаст на экран слово name, а команда
[user]$ echo $name
выдаст значение переменной name (если таковое, конечно, задано).
| Параметр | Правила замены |
|---|---|
| * | Заменяется позиционными параметрами, начиная с первого. Если замена производится внутри двойных кавычек, то этот параметр заменяется на одно единственное слово, составленное из всех позиционных параметров, разделенных первым символом специальной переменной IFS (о ней будет сказано ниже). То есть ``$*'' эквивалентно ``$1c$2c…'', где c - первый символ в значении переменной IFS. Если IFS присвоено пустое значение или ее значение не установлено, параметры разделяются пробелами |
| @ | Заменяется позиционными параметрами, начиная с первого. Если замена производится внутри двойных кавычек, то каждый параметр заменяется отдельным словом. Так, `` $@'' эквивалентно ''$1'' ''$2''… Если позиционных параметров нет, то значение не присваивается (параметр @ просто удаляется) |
| # | Заменяется десятичным значением числа позиционных параметров |
| ? | Заменяется статусом выхода последнего из выполнявшихся на переднем плане программных каналов |
| - (дефис) | Заменяется текущим набором значений флагов, установленных с помощью встроенной команды set или при запуске самой оболочки |
| $ | Заменяется идентификатором процесса (PID) оболочки |
| ! | Заменяется идентификатором процесса (PID) последней из выполняющихся фоновых (асинхронно выполнявшихся) команд |
| 0 | Заменяется именем оболочки или запускаемого скрипта. Если bash запускается для выполнения командного файла, $0 равно имени этого файла. В противном случае это значение равно полному пути к оболочке |
| _ (подчеркивание) | Заменяется последним аргументом предыдущей из выполнявшихся команд (если это параметр или переменная, то подставляется ее значение) |
[user]$ name=value
где name - имя переменной, а value - присваиваемое ей значение (может быть пустой строкой). Имя переменой может состоять только из цифр и букв и не может начинаться с цифры. Значением может быть любой текст. Если значение содержит специальные символы, то его надо взять в кавычки. Присвоенное значение этих кавычек не содержит, естественно. Если переменная задана, то ее можно удалить, используя встроенную команду оболочки unset.
Набор всех установленных переменных оболочки с присвоенными им значениями называется окружением (environment) или средой оболочки. Вы можете просмотреть его с помощью команды set без параметров (только, может быть, следует организовать конвейер "set | less"). В выводе этой команды все переменные окружения перечисляются в алфавитном порядке. Для того чтобы просмотреть значение одной конкретной переменной, можно вместо команды set (в выводе которой нужную переменную еще искать и искать) можно воспользоваться командой
[user]$ echo $name
(правда, в этом случае вы должны знать имя интересующей вас переменной).
Среди переменных, которые вы увидите в выводе команды set, встречаются очень интересные переменные. Обратите, например, внимание на переменную RANDOM. Если вы несколько раз подряд выполните команду
[user]$ echo $RANDOM
вы каждый раз будете получать новое значение. Дело в том, что эта переменная возвращает случайное целое из интервала 0 - 32768.
| Символ | Его значение |
|---|---|
| \a | Звуковой сигнал (ASCII-код 07) |
| \d | Дата в формате "День, месяц, число", например, Срд, Окт, 17. |
| \h | Имя хоста (hostname) до первой точки |
| \H | Полное имя хоста |
| \t | Текущее время в 24-часовом формате: HH:MM:SS (часы:минуты:секунды) |
| \T | Текущее время в 12-часовом формате: HH:MM:SS |
| \@ | Текущее время в 12-часовом формате am/pm |
| \u | Имя пользователя, запустившего оболочку |
| \w | Полное имя текущего рабочего каталога (начиная с корня) |
| \W | Текущий рабочий каталог (без указания пути) |
| \$ | Символ #, если оболочка запущена суперпользователем, и символ $, если оболочка запущена обычным пользователем |
| \nnn | Символ, имеющий восьмеричный код nnn |
| \n | Новая строка (перевод строки) |
| \s | Имя оболочки |
| \# | Текущий номер команды |
| \\ | Обратный слэш (a backslash) |
| \[ | Начало последовательности не печатаемых символов (этот символ может быть использован для того, чтобы включить в текст подсказки последовательность управляющих символов терминала) |
| \] | Конец последовательности не печатаемых символов |
| \! | Порядковый номер данной команды в истории команд |
[root]# PS1="[\u@\h \W]\$"
в стандартном приглашении будет выводиться квадратная скобка, имя пользователя, символ @, имя компьютера, пробел, название текущего каталога (без указания пути), закрывающая квадратная скобка и символ $ (если в оболочке работает простой пользователь) или # (если оболочка запущена от имени пользователя root).
/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin:
Для того, чтобы добавить каталог в этот список, нужно выполнить следующую команду:
[root]# PATH=$PATH:new_path.
При осуществлении поиска оболочка просматривает каталоги именно в том порядке, как они перечислены в переменной PATH.
Отметим, что можно включить в этот список и текущий каталог, добавив в переменную PATH точку. Однако этого не рекомендуется делать по соображениям безопасности: злоумышленник может положить в общедоступный каталог команду, имя которой совпадает с одной из часто выполняемых суперпользователем команд, но выполняющую совершенно другие действия (особенно если текущий каталог стоит в начале перечня путей поиска).
[user]$ name=value
надо записать
[user]$ export name=value
В таком случае все запускаемые из оболочки программы (в том числе вторичные экземпляры самой оболочки) будут иметь доступ к заданным таким образом переменным, т. е. могут вызывать их значения по именам.
[user]$ mkdir /usr/local/src/bash/{old,new,dist,bugs}
[root]# chown root /usr/{ucb/{ex,edit},lib/{ex?.?*,how_ex}}
В первом случае в каталоге /usr/local/src/bash/ будут созданы подкаталоги old, new, dist и bugs. Во втором случае владелец будет изменен у файлов /usr/ucb/ex /usr/lib/ex?.?* /usr/ucb/edit /usr/lib/ex?.?* /usr/ucb/ex /usr/lib/how_ex /usr/ucb/edit /usr/lib/how_ex
То есть для каждой пары скобок генерируются несколько отдельных строк (их число равно числу слов, стоящих внутри скобок) путем приписывания к каждому слову из скобок (спереди) того, что стоит перед скобкой, и приписывания в конец каждого полученного слова того, что стоит после скобки. Еще один пример: строка a{d,c,b}e при раскрытии скобок превращается в три слова "ade ace abe".
Раскрытие скобок выполняется до выполнения других видов подстановок в командной строке, причем все специальные символы, встречающиеся в командной строке, в том числе внутри скобок, сохраняются неизменными (они будут интерпретированы на следующих этапах анализа строки).
$[expression]
$((expression)),
где expression трактуется так, как если бы оно было заключено в двойные кавычки, но встречающиеся в expression двойные кавычки трактуются как простой литерал. Внутри expression выполняются подстановки параметров и команд.
Синтаксис выражения expression подобен синтаксису арифметических выражений в языке C, подробнее об этом можно прочитать в разделе ARITHMETIC EVALUATION man-страницы по каманде bash. Например, команда
[user]$ echo $((2 + 3* 5))
в качестве результата выдает "17".
Если выражение некорректно, bash выдает сообщение об ошибке.
| Символ | Правила замены |
|---|---|
| * | Соответствует произвольной строке символов, включая пустую строку. Например, my*.txt будет заменено на myday.txt, myweek.txt и mymonth.txt (если такие файлы существуют), а*.jpg соответствует всем файлам с расширением jpg в указанном каталоге |
| ? | Соответствует любому одиночному символу. Например, вместо шаблона file?.txt будут подставлены имена file1.txt и filex.txt, но не file10.txt |
| […] | Соответствует любому символу из числа символов, указанных в скобках. Пары символов, разделенные знаком минуса, обозначают интервал; любой символ стоящий лексически между этими двумя символами, включая и символы, задающие интервал, соответствует шаблону. Если первым символом внутри скобок является ! или ^, то считается, что шаблону (в данной позиции) соответствуют все символы, не указанные в скобках |
[user]$ ls*.jpg
Если в каталоге имеется множество файлов, имена которых представлены четырехзначными номерами, то следующей командой можно вывести только список файлов с номерами от 0200 до 0499:
[user]$ ls -l 0[2-4]??.*
if list1 then list2 else list3 fi
где list1, list2 и list3 - это последовательности команд, разделенные запятыми и оканчивающиеся точкой с запятой или символом новой строки. Кроме того, эти последовательности могут быть заключены в фигурные скобки: {list}.
Оператор if проверяет значение, возвращаемое командами из list1. Если в этом списке несколько команд, то проверяется значение, возвращаемое последней командой списка. Если это значение равно 0, то будут выполняться команды из list2; если это значение не нулевое, будут выполнены команды из list3. Значение, возвращаемой таким составным оператором if, совпадает со значением, выдаваемым последней командой выполняемой последовательности.
Полный формат команды if имеет вид:
if list then list [elif list then list]… [else list] fi
(здесь квадратные скобки означают только необязательность присутствия в операторе того, что в них содержится).
В качестве выражения, которое стоит сразу после if или elif, часто используется команда test, которая может обозначаться также квадратными скобками []. Команда test выполняет вычисление некоторого выражения и возвращает значение 0, если выражение истинно, и 1 в противном случае. Выражение передается программе test как аргумент. Вместо того, чтобы писать
test expression,
можно заключить выражение в квадратные скобки:
[expression].
Заметьте, что test и [- это два имени одной и той же программы, а не какое-то магическое преобразование, выполняемое оболочкой bash (только синтаксис [требует, чтобы была поставлена закрывающая скобка). Заметьте также, что вместо test в конструкции if может быть использована любая программа.
В заключение приведем пример использования оператора if:
if [-e textmode2.htm]; then
ls textmode*
else
pwd
fi
Об операторе test (или […]) надо бы поговорить особо.
case word in [[(] pattern [| pattern]…) list;;]… esac
Команда case вначале производит раскрытие слова word, и пытается сопоставить результат с каждым из образцов pattern поочередно. После нахождения первого совпадения дальнейшие проверки не производятся, выполняется список команд, стоящий после того образца, с которым обнаружено совпадение. Значение, возвращаемое оператором, равно 0, если совпадений с образцами не обнаружено. В противном случае возвращается значение, выдаваемое последней командой из соответствующего списка.
Следующий пример использования оператора case заимствован из системного скрипта /etc/rc.d/rc.sysinit.
case "$UTC" in
yes|true)
CLOCKFLAGS="$CLOCKFLAGS -u";
CLOCKDEF="$CLOCKDEF (utc)";
;;
no|false)
CLOCKFLAGS="$CLOCKFLAGS -localtime";
CLOCKDEF="$CLOCKDEF (localtime)";
;;
esac
Если переменная принимает значение yes или true, то будет выполнена первая пара команд, а если ее значение равно no или false - вторая пара.
select name [in word;] do list; done
Вначале из шаблона word формируется список слов, соответствующих шаблону. Этот набор слов выводится в стандартный поток ошибок, причем каждое слово сопровождается порядковым номером. Если шаблон word пропущен, таким же образом выводятся позиционные параметры. После этого выдается стандартное приглашение PS3, и оболочка ожидает ввода строки на стандартном вводе. Если введенная строка содержит число, соответствующее одному из отображенных слов, то переменной name присваивается значение, равное этому слову. Если введена пустая строка, то номера и соответствующие слова выводятся заново. Если введено любое другое значение, переменной name присваивается нулевое значение. Введенная пользователем строка запоминается в переменой REPLY. Список команд list выполняется с выбранным значением переменной name.
Вот небольшой скрипт:
#!/bin/sh
echo "Какую ОС Вы предпочитаете?"
select var in "Linux" "Gnu Hurd" "Free BSD" "Other"; do
break
done
echo "Вы бы выбрали $var"
Если сохранить этот текст в файле, сделать файл исполняемым и запустить, на экран будет выдан следующий запрос:
Какую ОС Вы предпочитаете?
1) Linux
2) Gnu Hurd
3) Free BSD
4) Other
#?
Нажмите любую из 4 предложенных цифр (1,2,3,4). Если вы, например, введете 1, то увидите собщение:
“Вы бы выбрали Linux”
for name in words do list done.
Правила построения списков команд (list) такие же, как и в операторе if.
Пример. Следующий скрипт создает файлы foo_1, foo_2 и foo_3:
for a in 1 2 3; do
touch foo_$a
done
В общем случае оператор for имеет формат:
for name [in word;] do list; done
Вначале производится раскрытие слова word в соответствии с правилами раскрытия выражений, приведенными выше. Затем переменной name поочередно присваиваются полученные значения, и каждый раз выполняется список команд list. Если "in word" пропущено, то список команд list выполняется один раз для каждого позиционного параметра, который задан.
В Linux имеется программа seq, которая воспринимает в качестве аргументов два числа и выдает последовательность всех чисел, расположенных между заданными. С помощью этой команды можно заставить for в bash работать точно так же, как аналогичный оператор работает в обычных языках программирования. Для этого достаточно записать цикл for следующим образом:
for a in $(seq 1 10); do
cat file_$a
done
Эта команда выводит на экран содержимое 10-ти файлов: "file_1",…, "file_10".
while list1 do list2 done.
Пример:
while [-d mydirectory]; do
ls -l mydirectory ›› logfile
echo -- SEPARATOR -- ›› logfile
sleep 60
done
Такая программа будет протоколировать содержание каталога "mydirectory" ежеминутно до тех пор, пока директория существует.
Оператор until аналогичен оператору while:
until list1 do list2 done.
Отличие заключается в том, что результат, возвращаемый при выполнении списка операторов list1, берется с отрицанием: list2 выполняется в том случае, если последняя команда в списке list1 возвращает ненулевой статус выхода.
function name () {list}
Причем слово function не обязательно, name определяет имя функции, по которому к ней можно обращаться, а тело функции состоит из списка команд list, находящегося между {и}. Этот список команд выполняется каждый раз, когда имя name задано как имя вызываемой команды. Отметим, что функции могут задаваться рекурсивно, так что разрешено вызывать функцию, которую мы задаем, внутри нее самой.
Функции выполняются в контексте текущей оболочки: для интерпретации функции новый процесс не запускается (в отличие от выполнения скриптов оболочки).
seq()
{
local I=$1;
while [$2!= $I]; do
{
echo -n "$I ";
I=$(($I + 1))
};
done;
echo $2
}
Обратите внимание на опцию -n оператора echo, она отменяет переход на новую строку. Хотя это и несущественно для тех целей, которые мы здесь имеем в виду, это может оказаться полезным для использования функции в других целях.
fact()
{
if [$1 = 0]; then
echo 1;
else
{
echo $(($1* $(fact $(($1 - 1)))))
};
fi
}
Это функция факториала, пример рекурсивной функции. Обратите внимание на арифметическое расширение и подстановку команд.
source filename [arguments]
или
. filename [arguments]
Эта команда читает и выполняет команды из файла с именем filename в текущем окружении и возвращает статус, определяемый последней командой из файла filename. Если filename не содержит слэша, то пути, перечисленные в переменной PATH, используются для поиска файла с именем filename. Этот файл не обязан быть исполняемым. Если в каталогах, перечисленных в PATH, нужный файл не найден, его поиск производится в текущем каталоге.
Если заданы аргументы, на время выполнения скрипта они становятся позиционными параметрами. Если аргументов нет, позиционные параметры не изменяются. Значение (статус), возвращаемое командой source, совпадает со значением, возвращаемым последней командой, выполненной в скрипте. Если ни одна команда не выполнялась, или файл filename не найден, то статус выхода равен 0.
Рис. 6.1. Внешний вид экрана при работе с Midnight Commander
Почти все пространство экрана при работе с Midnight Commander занято двумя "панелями", отображающими списки файлов двух каталогов. Над панелями расположена строка меню, причем к выбору команд в этом меню можно переключиться по клавише ‹F9› или с помощью мыши (если сразу после запуска mc вы не видите строки меню, не огорчайтесь - видна или нет строка меню, определяется настройками программы).
Самая нижняя строка представляет собой ряд экранных кнопок, каждая из которых ассоциирована с одной из функциональных клавиш ‹F1› - ‹F10›. Можно считать эту строку подсказкой по использованию функциональных клавиш, а можно и непосредственно запускать соответствующие команды, щелкая мышкой по экранной кнопке. Отображение строки с экранными кнопками можно отключить, если вы хотите сэкономить пространство экрана (об этом будет рассказано позже, когда будем говорить о настройках программы). Такая экономия оказывается оправданной по двум причинам. Во-первых, вы достаточно быстро запомните назначение этих 10 клавиш, и подсказка вам становится не нужна (а мышкой по этим клавишам щелкать не всегда удобно). Во вторых, если даже вы забыли, какая именно клавиша вам нужна для выполнения необходимого в данный момент действия, вы всегда можете воспользоваться меню Файл главного меню программы (только помните, что выход в главное меню осуществляется по клавише ‹F9›). Через меню Файл обеспечивается возможность выполнения любой операции из числа ассоциированных с функциональными клавишами кроме ‹F1› и ‹F9›.
Вторая снизу строка на экране - это командная строка программы Midnight Commander (точнее - командная строка текущей оболочки shell), где можно ввести и выполнить любую команду системы. Выше нее (но под панелями) может отображаться поле "полезных советов" (hint4s), которое можно убрать, соответствующим образом отрегулировав настройки программы.
Каждая панель состоит из заголовка, списка файлов какого-либо каталога и строки мини-статуса (последняя может быть не видна, это тоже задается настройками программы). В заголовке панели указан полный путь к каталогу, содержимое которого отображается в панели, а также три экранных кнопки - "‹", "v" и "›", которые используются для управления программой с помощью мыши (эти кнопки не работают, если вы запустили mc в эмуляторе терминала). В строке "мини-статуса" отображаются некоторые данные о том файле или каталоге, на который в данный момент указывает подсветка (например, размер файла и права доступа к нему).
Одна из панелей является текущей (активной), о чем свидетельствует подсветка имени каталога в заголовке панели и подсветка одной из ее строк. Соответственно, в той оболочке, из которой была запущена программа Midnight Commander, текущим является каталог, отображаемый в активной панели. В этом каталоге и выполняются почти все операции. Операции типа копирования (‹F5›) или переноса файла (‹F6›) используют каталог, отображаемый на второй панели, в качестве целевого каталога (в который осуществляется копирование или перенос).
В активной панели одна строка выделена подсветкой. Подсветку можно перемещать с помощью клавиш управления перемещением. Встроенная программа просмотра файлов, программа просмотра подсказки и программа просмотра каталогов используют один и тот же программный код для управления перемещением. Следовательно, для перемещения используются одни и те же комбинации клавиш (но в каждой подпрограмме имеются и комбинации, применяющиеся только в ней). Приведем краткую таблицу, в которой перечислены общие клавиши управления перемещением.
Таблица 6.1. Общие клавиши управления перемещением.
| Клавиша | Выполняемое действие |
|---|---|
| ‹Стрелка вверх› или ‹Ctrl›+‹P› | Перемещение на одну строку назад или вверх |
| ‹Стрелка вниз› или ‹Ctrl›+‹N› | Перемещение на одну строку вперед |
| ‹PageUp› или ‹Alt›+‹V› | Перемещение на одну страницу назад |
| ‹Page Down› или ‹Ctrl›+‹V› | Перемещение на одну страницу вперед |
| ‹Home› | Перемещение к началу |
| ‹End› | Перемещение к концу |
| Клавиша | Выполняемое действие |
|---|---|
| ‹B› или ‹Ctrl›+‹B› или ‹Ctrl›+‹H› или ‹Backspace› или ‹Delete› | Перемещение на одну страницу назад |
| ‹Пробел› | Перемещение на одну страницу вперед |
| ‹U› (‹D›) | Перемещение на половину страницы назад (вперед) |
| ‹G› (‹Shift›+‹G›) | Перемещение к началу (к концу) |
| Клавиша | Выполняемое действие |
|---|---|
| ‹Tab› | Переход на следующую ссылку |
| ‹Alt›+‹Tab› | Переход на предыдущую ссылку |
| ‹Стрелка вниз› | Переход на следующую ссылку или смещение текста на одну строку вверх |
| ‹Стрелка вверх› | Переход на следующую ссылку или смещение текста на одну строку вниз |
| ‹Стрелка вправо› или ‹Enter› | Переход по текущей ссылке |
| ‹Стрелка влево› или ‹L› | Возврат к ранее просмотренным разделам подсказки |
| ‹F1› | Помощь по использованию самой подсказки |
| ‹N› | Переход к следующему разделу помощи |
| ‹P› | Переход к предыдущему разделу помощи |
| ‹C› | Переход к оглавлению подсказки |
| ‹F10›, ‹Esc› | Выход из окна просмотра подсказки |
half type,name,|,size,|,mtime
а "расширенный" - строкой:
full perm, space, nlink, space, owner, space, group, space, size, space, mtime, space, name
А вот пример формата, определяемого пользователем:
half name,|,size:7,|,type,mode:3
Отображение списка файлов в любой из панелей может производиться в соответствии с одним из восьми порядков сортировки:
• по имени;
• по расширению;
• по размеру файла;
• по времени модификации;
• по времени последнего обращения к файлу;
• по номеру узла (inode);
• без сортировки.
Порядок сортировки вы можете задать, выбрав в меню соответствующей панели команду Порядок сортировки… При этом появляется диалоговое окно (рис. 6.2), в котором кроме желаемого порядка сортировки можно указать, что сортировка производится в обратном порядке (поставив с помощью клавиши пробела отметку в скобках возле слова Обратный (Reverse)) и с учетом регистра символов.
Рис. 6.2. Диалоговое окно задание порядка сортировки
По умолчанию подкаталоги отображаются в начале списка, но это можно изменить, проставив отметку возле опции "Смешивать файлы/каталоги" ("Mix all files") команды Конфигурация меню Настройки.
Можно выводить в панель не все списки файлов данного каталога, а только соответствующие определенному шаблону. Команда Фильтр в меню любой панели позволяет задать шаблон, которому должны соответствовать имена файлов, отображаемых в панели (например, "*.tar.gz").
Имена подкаталогов и ссылки на подкаталоги отображаются всегда, независимо от шаблона.
В меню каждой из панелей имеется команда Перечитать (аналог которого в других программах обычно называется "Обновить"). Команда Перечитать (горячие клавиши ‹Ctrl›+‹R›) обновляет список файлов, отображаемый в панели. Это бывает полезно в тех случаях, когда другие процессы создают или удаляют файлы. Если вы выполнили команду меню Критерий панелизации (перенаправление вывода команды на панель, о нем будет рассказано в разд. 6.10), и вследствие этого на панели находятся результаты работы какой-то программы, по команде Перечитать на панель вновь будет выведено содержимое каталога.
Рис. 6.3. Режим "Информация"
• Режим "Дерево". В режиме отображения дерева каталогов в одной из панелей выводится графическое изображение структуры дерева каталогов (см. пример на рис. 6.4). Этот режим подобен тому, который вы увидите, выбрав команду Дерево каталогов из меню Команды, только в последнем случае изображение структуры каталогов выводится в отдельное окно.
Рис. 6.4. Режим отображения дерева каталогов
• Режим "Быстрый просмотр" ("Quick View"). В этом режиме панель переключается на отображение содержимого файла, подсвеченного в другой панели. Для примера на рис. 6.5 приведен вид экрана при быстром просмотре файла.bashrc из моего домашнего каталога.
Рис. 6.5. Режим "Быстрый просмотр"
При выводе в панель результатов "быстрого просмотра" используется встроенная программа просмотра файлов, так что, если переключиться клавишей ‹Tab› в панель просмотра, вы сможете использовать все команды управления просмотром, в частности, перечисленные в табл. 6.1 - 6.2.
• Режимы "Сетевое соединение" и "FTP-соединение". Эти два режима используются для отображения списка каталогов, располагающихся на удаленных компьютерах. В остальном формат вывода информации аналогичен форматам, используемым для отображения локальных каталогов. Если вас интересует, как пользоваться этими режимами, воспользуйтесь подсказкой программы.
| Функциональная клавиша | Выполняемое действие |
|---|---|
| ‹F1› | Вызывает контекстно-зависимую подсказку |
| ‹F2› | Вызывает меню, создаваемое пользователем |
| ‹F3› | Просмотр файла, на который указывает подсветка в активной панели |
| ‹F4› | Вызов встроенного редактора для файла, на который указывает подсветка в активной панели |
| ‹F5› | Копирование файла или группы отмеченных файлов из каталога, отображаемого в активной панели, в каталог, отображаемый на второй панели. При копировании одного файла можно поменять его имя[16]. Можно также указать имя каталога, куда будет производиться копирование (если надо скопировать в каталог, отличный от каталога, отображаемого во второй панели) |
| ‹F6› | Перенос файла или группы отмеченных файлов из каталога, отображаемого в активной панели, в каталог, отображаемый на второй панели. Как и при копировании, можно поменять имя файла или целевого каталога. |
| ‹F7› | Создание подкаталога в каталоге, отображаемом в активной панели |
| ‹F8› | Удаление файла (подкаталога) или группы отмеченных файлов |
| ‹F9› | Вызов основного меню программы (отображаемого над панелями) |
| ‹F10› | Выход из программы |
Рис. 6.6. Диалоговое окно для переименования файлов
Есть еще несколько опций, которые влияют на выполнение операций копирования/перемещения файлов, и которые устанавливаются в том же окне запроса, где задаются маски имен файлов, либо через команду меню Настройки | Конфигурация.
Опция Разыменовывать ссылки (Follow links) определяет, будут ли при копировании жестких или символических ссылок в каталоге-приемнике (и рекурсивно в подкаталогах) создаваться такие же ссылки, или будут копироваться файлы (и подкаталоги), на которые эти ссылки указывают.
Опция Внутрь каталога, если есть (Dive into subdirs) определяет, что делать, если в каталоге-приемнике уже существует подкаталог, имя которого совпадает с именем файла (каталога), который копируется (источника). По умолчанию (опция отключена) содержимое каталога-источника копируется в каталог-приемник. Если опция включена, то в каталоге приемнике будет создан новый подкаталог с тем же именем, в который и будет осуществляться копирование.
Лучше показать это на примере. Пусть вы хотите скопировать содержимое каталога one в каталог /two/one, который уже существует. Обычно (опция отключена) mc будет просто копировать все файлы из one в /two/one. Если опцию включить, копирование файлов будет производиться в /two/one/one.
Опция Сохранять атрибуты (Preserve attributes) определяет, будут ли при копировании/перемещении сохранены атрибуты исходного файла: права доступа, временные метки и, если вы root, UID и GID исходного файла. Если опция отключена, атрибуты будут установлены в соответствии с текущим значением umask.
На процедуры копирования и перемещения файлов оказывает также влияние установка опции Образцы в стиле shell в меню Настройки / Конфигурация. Когда эта опция включена, вы можете использовать символы замены (wildcards) '*' и '?' в маске источника. Они обрабатываются аналогично тому, как это делается в shell. В маске приемника разрешается использовать только '*' и '\‹цифра›'. Первый символ '*' в маске приемника соответствует первой группе символов замены в маске источника, второй символ '*' соответствует второй группе и т. д. Аналогично, символ замены '\1' соответствует первой группе символов замены в маске источника, символ '\2' - второй группе и т. д. Символ '\0' соответствует целому имени файла-источника. Приведем пару примеров.
Пример 1. Если маска источника "*.tar.gz", а маска приемника - "/two/*.tgz", и имя копируемого файла - "foo.tar.gz", копия будет называться "foo.tgz" и будет находиться в каталоге "/two".
Пример 2. Предположим, вы хотите поменять местами имя и расширение файла, так чтобы "file.c" стал файлом "c.file". Маска источника для этого должна иметь вид "*.*", а маска приемника - "\2.\1".
Когда опция Образцы в стиле shell ("Use shell patterns”) выключена, mc не осуществляет автоматической группировки. Для указания групп символов в маске источника, которые будут соответствовать символам замены в маске приемника, вы должны в этом случае использовать скобки '\(…\)'. Этот способ более гибкий, но требует больше усилий при вводе. Снова приведем два примера
Пример 3. Если маска источника имеет вид "^\(.*\)\.tar\.gz$", копирование производится в "/two/*.tgz" и копируется файл "foo.tar.gz", то результатом будет "/two/foo.tgz".
Пример 4. Предположим, что вы хотите поменять местами имя файла и его расширение, так чтобы имена вида "file.c" приняли вид "c.file".
Маска источника для этого - "^\(.*\)\.\(.*\)$", а маска приемника - "\2.\1".
При выполнении операций копирования/перемещения вы можете также преобразовать регистр символов в именах файлов. Если вы используете '\u' или '\l' в маске приемника, то следующий символ имени будет образован в верхнем (заглавные символы) или нижнем (строчные) регистре соответственно.
Если использовать в маске приемника '\U' или '\L', то к соответствующему регистру будут преобразованы все последующие символы, вплоть до следующего вхождения '\L' или '\U', или же до конца имени файла.
Применение '\u' и '\l' обеспечивает более широкие возможности, чем '\U' и '\L'.
Например, если маска источника есть '*' (опция Образцы в стиле shell включена) или '^\(.*\)$' (опция Образцы в стиле shell выключена), а маска приемника есть '\L\u*', имена файлов будут преобразованы таким образом, что первые буквы имени будут заглавными, а все остальные - строчными.
Символ '\' в масках используется для отмены специальной интерпретации отдельных символов. Например, '\\' означает просто обратный слэш (как литерал) и '\*' означает просто звездочку (asterisk).
| Комбинация клавиш | Выполняемое действие |
|---|---|
| ‹Ctrl›+‹A› | Перемещает курсор в началу строки |
| ‹Ctrl›+‹E› | Перемещает курсор в конец строки |
| ‹Ctrl›+‹B› или ‹←› | Перемещает курсор на одну позицию влево |
| ‹Ctrl›+‹F› или ‹→› | Перемещает курсор на одну позицию вправо |
| ‹Alt›+‹F› | Перемещает курсор на одно слово вперед |
| ‹Alt›+‹B› | Перемещает курсор на одно слово назад |
| ‹Ctrl›+‹H› или ‹Backspace› | Удаляет символ, предшествующий курсору |
| ‹Ctrl›+‹D› или ‹Delete› | Удаляет символ в позиции курсора |
| ‹Ctrl›+‹@› | Устанавливает метку для того, чтобы вырезать (скопировать в буфер) часть текста |
| ‹Ctrl›+‹W› | Копирует текст, расположенный между курсором и меткой, в буфер, удаляя текст из строки ввода |
| ‹Alt›+‹W› | Копирует текст, расположенный между курсором и меткой, в буфер (без удаления из строки ввода) |
| ‹Ctrl›+‹Y› | Вставляет содержимое буфера в строку ввода перед позицией курсора |
| ‹Ctrl›+‹K› | Удаляет текст от курсора до конца строки |
| ‹Alt›+‹P› и ‹Alt›+‹N› | Эти комбинации используются для перемещения по истории команд. ‹Alt›+‹P› перемещает к предыдущей команде, ‹Alt›+‹N› - к следующей |
| ‹Ctrl›+‹Alt›+‹H› или ‹Alt›+‹Backspace› | Удалить предшествующее слово |
| ‹Alt›+‹Tab› | Пытается выполнить завершение ввода (completion) имени файла, команды, переменной, имени пользователя или имени хоста |
[Misc]
find_ignore_dirs=/cdrom:/nfs/wuarchive:/afs
Вы можете использовать перенаправление вывода на панель (см. ниже Критерий панелизации) для выполнения некоторых усложненных последовательностей действий, в то время как Поиск файла позволяет выполнять только простые запросы.
Команда Переставить панели (‹Ctrl›+‹U›) меняет местами содержимое правой и левой панелей.
По команде Отключить панели (‹Ctrl›+‹O›) показывается вывод последней из выполнявшихся команд shell. Эта команда работает только через xterm и на консоли Linux.
По команде Сравнить каталоги (‹Ctrl-X›, ‹D›) сравнивается содержимое каталогов, отображаемых на левой и правой панелях.
Существует три метода сравнения. При быстром методе сравниваются только размер и дата создания файлов с одинаковыми именами. В результате в обоих каталогах будут подсвечены файлы, отсутствующие во втором каталоге, или более новые версии соответствующих файлов. После этого вы можете воспользоваться командой Копировать (‹F5›) для того, чтобы сделать содержимое каталогов одинаковым.
При побайтном методе сравнивается содержимое файлов (побайтно). Этот метод недоступен, если машина не поддерживает системный вызов mmap(2). При сравнении по размеру сравниваются только размеры соответствующих файлов, а дата создания не проверяется.
Команда меню Критерий панелизации (который правильнее было бы назвать "Перенаправление вывода на панель") позволяет вам выполнить внешнюю программу, сделав ее вывод содержимым текущей активной панели (характерный пример - панелизация вывода команды find). Например, если вы хотите выполнить какое-то действие над всеми символическими ссылками текущего каталога, вы можете использовать команду Критерий панелизации для запуска следующей команды:
[user]$ find. -type l -print
После выполнения этой команды в текущей панели будет отображено не содержимое соответствующего каталога, а только все символические ссылки, в нем расположенные.
Если вы захотите, то можете сохранить часто используемые команды панелизации под отдельными информативными именами, чтобы иметь возможность их быстро вызвать по этим именам. Для этого нужно набрать команду в строке ввода (строка "Команда") и нажать кнопку Добавить. После этого вам потребуется ввести имя, по которому вы будете вызывать команду. В следующий раз вам достаточно будет выбрать нужное имя из списка, а не вводить всю команду заново.
Команда меню История команд выводит окно со списком ранее выполнявшихся команд. Подсвеченную строку из истории можно скопировать в командную строку оболочки (перемещение подсветки - клавишами ‹Стрелка вверх› и ‹Стрелка вниз›, копирование - по клавише ‹Enter›).
Доступ к истории команд можно получить также по комбинациям клавиш ‹Alt›+‹P› или ‹Alt›+‹N›, однако в этом случае вы не видите окна с перечнем команд. Вместо этого в командную строку выводится одна команда из списка и по комбинации ‹Alt›+‹P› происходит смена этой команды на предыдущую, а по ‹Alt›+‹N› - на следующую команду из истории команд.
Команда меню Справочник каталогов (‹Ctrl›+‹\›) позволяет создать список каталогов, которые часто используются, и обеспечить быстрый переход к нужному каталогу из этого списка. Для этого создается список меток (условных имен), присвоенных наиболее часто используемым каталогам. Этот список можно использовать для быстрого перехода в нужный каталог. Пользуясь диалоговым окном справочника каталогов, вы можете добавить новую метку в список или удалить ранее созданную пару метка/каталог. Для добавления метки можно также использовать комбинацию клавиш (‹Ctrl›+‹X›, ‹H›), по которой текущий каталог добавляется в справочник каталогов. Программа выдаст запрос на ввод метки для этого каталога.
Команда меню Фоновые задания позволяет вам управлять фоновыми заданиями, запущенными из Midnight Commander (такими заданиями могут быть только операции копирования и перемещения файлов). Используя эту команду меню или "горячие" клавиши ‹Ctrl›+‹X›, ‹J›, вы можете остановить, возобновить или снять любое из фоновых заданий.
После выбора команды меню Файл расширений вы получаете возможность редактировать файл mc.ext, в котором можете связать с определенным расширением файла (окончанием имени после последней точки) программу, которая будет запускаться для обработки (просмотра, редактирования или выполнения) файла с таким расширением. Запуск выбранной программы будет осуществляться после установки подсветки на имя файла и нажатия клавиши ‹Enter›.
Команда Файл меню используется для редактирования пользовательского меню (которое появляется после нажатия клавиши ‹F2›).
Рис. 6.7. Окно настроек параметров конфигурации
• Отметка перемещает курсор. Когда вы отмечаете файл (клавишами ‹Ctrl›+‹T› или ‹Insert›), то по умолчанию подсветка на имени файла смещается на одну строку вниз.
• Выпадение меню при вызове. Если эта опция включена, то при вызове главного меню нажатием клавиши ‹F9›, будет сразу отображаться перечень команд меню (выпадающее меню). В противном случае активизируются только команды главного меню и вы должны (после выбора одного из них клавишами стрелок) нажать клавишу ‹Enter›, либо выбрать нужную команду по первой букве названия, и только после этого получите возможность выбрать команду выпадающего меню.
• Смешивать файлы/каталоги. Если эта опция включена, имена файлов и каталогов отображаются вперемежку. Если опция отключена, каталоги (и ссылки на каталоги) показываются в начале списка, а имена файлов - после имен всех каталогов.
• Быстрая загрузка каталога. По умолчанию эта опция выключена. Если вы активизируете ее, Midnight Commander будет использовать для вывода содержимого каталога следующий трюк: содержимое каталога перечитывается только в том случае, если изменилась запись в i-node каталога, т. е. если в каталоге создавались или удалялись файлы; если изменялись только записи в i-node файлов каталога (изменялся размер файла, режим доступа или владелец и т.п.) содержимое панели не обновляется. В этом случае (если опция включена) вы должны обновлять список файлов вручную (клавишами ‹Ctrl›+‹R›).
Поле Пауза после исполнения. После выполнения Вашей команды Midnight Commander может обеспечить паузу, чтобы вы могли просмотреть и изучить вывод команды. Есть три варианта установки этой опции.
• Никогда. Это значит, что вы не хотите видеть вывод команды. На консоли Linux или при использовании xterm вы можете просмотреть этот вывод, нажав ‹Ctrl›+‹O›.
• На "тупых" терминалах. Пауза будет создаваться на терминалах, которые не способны обеспечить показ вывода последней из выполнявшихся команд (это любые терминалы, отличные от xterm или Linux-консоли).
• Всегда. Программа обеспечит паузу после выполнения любой команды.
В поле Прочие настройки вы задаете значения следующих параметров:
Детали операций (Verbose operation). Этот переключатель определяет, будет ли при выполнении операций копирования, перемещения и удаления выводится дополнительное окно, отображающее ход выполнения операции. Если у вас медленный терминал, вы можете отключить этот вывод. Он отключается автоматически, если скорость Вашего терминала меньше 9600 bps.
• Подсчитывать общий размер (Compute totals). Если эта опция включена, Midnight Commander перед выполнением операций копирования, перемещения и удаления подсчитывает общее число обрабатываемых файлов и их суммарный размер и показывает ход выполнения операции над этими файлами в виде диаграммы-полоски (правда, это слегка замедляет выполнение операций). Эта опция не работает, если отключена опция "Детали операций".
• Образцы в стиле shell (Shell Patterns). По умолчанию команды отметки группы файлов (Select), снятия отметки (Unselect) и вывода списка файлов по фильтру (Filter) используют регулярные выражения, которые строятся по правилам, действующим в оболочке. Для того, чтобы достичь такого эффекта, выполняются следующие преобразования: '*' заменяется на '.*' (ноль или больше символов); '?' заменяется на '.' (в точности один символ) и '.' заменяется на обычную точку (literal dot). Если опция отключена, то регулярные выражения должны строиться так, как описано в man 1 ed.
• Автосохранение настроек. Если эта опция включена, то при выходе из программы Midnight Commander значения всех настраиваемых параметров сохраняются в файле ~/.mc/ini.
• Автоматические меню. Если эта опция включена, пользовательское меню будет автоматически вызываться на экран при запуске программы. Это бывает полезно, если на компьютере работают неопытные пользователи (операторы), которые должны выполнять только стандартные операции.
• Встроенный редактор. Если эта опция включена, то для редактирования файлов вызывается встроенный редактор. Если опция выключена, то будет использоваться редактор, указанный в переменной окружения EDITOR. Если такой редактор не задан, будет вызываться vi.
• Встроенный просмотр. Если эта опция включена, для просмотра файлов вызывается встроенная программа просмотра. Если опция выключена, вызывается программа, указанная в переменной окружения PAGER. Если такая программа не задана, используется команда view.
• Дополнение: показывать все. В процессе ввода команд Midnight Commander может выполнять "Завершение ввода" при нажатии на клавиши ‹Alt›+‹Tab›, пытаясь угадать окончание вводимой команды. По умолчанию при первом нажатии ‹Alt›+‹Tab› он ищет все возможные варианты завершения и, если завершения неоднозначны (имеется много разных вариантов), то только издает звуковой сигнал. При втором нажатии ‹Alt›+‹Tab› отображаются все возможные завершения. Если вы хотите видеть все возможные варианты завершения после первого нажатия ‹Alt›+‹Tab›, включите эту опцию.
• Вращающийся индикатор. Если эта опция включена, Midnight Commander отображает в верхнем правом углу вращающуюся черточку, как индикатор того, что выполняется какое-то задание (операция).
• Навигация в стиле lynx. Если эта опция включена, вы имеете возможность использовать клавиши ‹→› для перехода в подсвеченный в данный момент каталог и ‹←› для перехода в родительский по отношению к текущему каталог (при условии, что командная строка пуста). По умолчанию опция отключена.
• Расширенная команда chown. Если эта опция включена, то при обращении к командам chmod или chown вместо них будет вызываться Расширенная команда chown.
• Смена каталога по ссылкам. Установка этой опции приводит к тому, что Midnight Commander будет следовать логической цепочке подкаталогов при выполнении команд смены каталога как в панели, так и по команде cd. Так же ведет себя по умолчанию bash. Если же опция не включена, Midnight Commander будет при выполнении команды cd следовать реальной структуре каталогов, так что если вы вошли в текущий каталог по ссылке на него, то по команде cd .. вы окажетесь в его родительском каталоге, а не в той директории, где расположена ссылка.
• Безопасное удаление. Если эта опция включена, непреднамеренно удалить файл будет сложнее. В диалоговом окне подтверждения удаления предлагаемая по умолчанию кнопка изменяется с "Да" на "Нет" и операция удаления непустого каталога должна будет подтверждаться путем выбора кнопки "Да". По умолчанию эта опция отключена.
Диалоговое окно Внешний вид дает вам возможность изменить некоторые параметры отображения главного окна программы Midnight Commander на экране монитора (рис. 6.8).
Вы можете вывести на экран или отменить вывод строки главного меню, командной строки, строки подсказок, мини-статуса, строки с подсказкой по функциональным клавишам. На Linux- (или SCO-) консоли можно задать число строк, которые будут оставлены для отображения вывода команды.
Можно также указать, должны ли панели располагаться горизонтально или вертикально, изменить размеры панелей.
Рис. 6.8. Настройки внешнего вида программы
По умолчанию вся информация отображаются одним цветом, но вы можете сделать так, что права доступа и типы файлов были выделены другими цветами. Если включено выделение цветом прав доступа, поля perm и mode в форматах вывода, показывающие права пользователя, запустившего программу Midnight Commander, выделены цветом, определенным ключевым словом selected в секции [Colors] инициализационного файла ~/.mc/ini. Если включено выделение цветом типов файлов, то разными цветами выделяются каталоги, дампы памяти (файлы core), исполняемые файлы и т. д.
Если включена опция Мини-статус, в нижней части каждой панели выводится строка информации о выделенном подсветкой файле или каталоге каждой панели.
В диалоговом окне Биты символов… (рис. 6.9) вы указываете, в каком формате Ваш терминал будет обрабатывать (вводить и отображать на дисплее) информацию, представленную байтами (например, записанную в файле).
Рис. 6.9. Настройка вывода
Если терминал поддерживает только 7-битный вывод, то нужно выбрать установку 7 бит. Выбрав "ISO-8859-1" вы получите все символы из таблицы ISO-8859-1, а выбор установки Полный 8-битный вывод имеет смысл на тех терминалах, которые могут отображать все 8-битовые символы. Чтобы при просмотре или редактировании файлов в Midnight Commander видеть на экране кириллицу, установите опции Полный 8-битный вывод и Полный 8-битный ввод (как на рис. 6. 9) и нажмите экранную кнопку Дальше.
Установка опции Полный 8-битный вывод позволяет просматривать на экране файлы, набранные в кодировке KOI8-R. Если вам необходимо работать и с другими кодировками (например, cp1251), то имейте в виду, что Валерий Студенников написал чудесную заплату (patch), которая позволяет выбирать кодовые страницы при просмотре и редактировании файлов в Midnight Commander (см. http://www.linux.zp.ua:8100/mc/ или http://www.sama.ru/~despaire/mc/my-patches.html). Только вам придется самому скомпилировать версию mc с этой возможностью. Однако это не так уж сложно (см. разд. 10.3).
Используя команду меню Подтверждения, вы можете сделать так, чтобы перед выполнением операций удаления, перезаписи и запуска файла на выполнение, а также перед выходом из программы mc, выдавался дополнительный запрос на подтверждение (либо отменить такие запросы, что несколько рискованно).
Команда Распознавание клавиш… (Learn keys…) вызывает диалоговое окно, в котором вы можете протестировать работу некоторых клавиш (‹F1› - ‹F20›, ‹Home›, ‹End›), которые работают не на всех типах терминалов. В диалоговом окне появляется таблица с названиями клавиш, которые подлежат тестированию. Вы можете перемещать подсветку по названиям, используя клавишу ‹Tab› или клавиши, применяемые в редакторе vi (‹h› - влево, ‹j› - вниз, ‹k› -вверх, ‹l›- вправо). Если один раз нажать на клавиши со стрелками, после чего возле их названий в таблице появится пометка OK, то их тоже можно будет использовать для управления перемещением.
Для тестирования работы клавиш нужно нажать каждую клавишу из перечисленных в таблице. Если она работает нормально, возле ее названия в таблице появится пометка OK. После появления такой пометки клавиша начинает работать в ее обычном режиме. Например, первое нажатие на клавишу ‹F1› приводит только к появлению пометки OK (если клавиша работает нормально), а при следующих нажатиях будет вызываться окно подсказки. То же самое относится к клавишам стрелок. Клавиша ‹Tab› работает всегда. Если какая-то клавиша не работает, то после нажатия на нее пометка OK не появится. В таком случае можно связать ту реакцию системы, которая должна была последовать за нажатием неработающей (отсутствующей) клавиши, с нажатием другой клавиши или комбинации клавиш. Для этого надо переместить подсветку на название неработающей клавиши (используя мышь или клавишу ‹Tab›) и нажать ‹Enter› или клавишу пробела. Должно появиться окно красного цвета, в котором вас просят нажать клавишу, которая будет использоваться вместо неработающей. Для отмены операции нажмите ‹Esc› и дождитесь, пока красное окно исчезнет. Либо выберите и нажмите ту комбинацию клавиш, которая будет служить заменой для неработающей клавиши (и тоже дождитесь закрытия окна). Когда закончите тестирование и настройку всех клавиш, вы можете сохранить эти настройки в секции [terminal:TERM] Вашего файла ~/.mc/ini (где TERM - название используемого терминала) либо отказаться от запоминания изменений. Если все клавиши работают нормально, то сохранение, конечно, не требуется.
Команда Виртуальные ФС вызывает диалоговое окно, в котором вы можете задать значения некоторых параметров, связанных с использованием виртуальных файловых систем.
Команда Сохранить настройки обеспечивает сохранение выбранных значений параметров в ini-файле программы.
Я надеюсь, что приведенный в этом разделе материал позволит вам начать работать с программой Midnight Commander. Но возможности этой программы гораздо шире, чем это описано в настоящем разделе. В гл. 12 вы еще прочитаете о встроенном редакторе CoolEdit программы Midnight Commander. Кроме того, можно воспользоваться встроенной подсказкой, вызываемой по клавише ‹F1›. Перевод файла подсказки на русский язык (в виде bzip2-архива) вы можете найти на сайте http://linux-ve.chat.ru. Разархивируйте его, поместите в каталог /usr/lib/mc, заменив расположенный там файл mc.hlp, и вы будете при нажатии клавиши ‹F1› получать подсказку на русском языке.
Рис. 7.1. Архитектура графической системы в Linux[17]
Поскольку клиент и сервер являются отдельными процессами, они могут работать на разных компьютерах, а взаимодействовать по сети. Приложения можно запустить, например, на мейнфрейме, а картинка будет выводиться на экран персонального компьютера. Эта очень мощная особенность системы X Window является одним из основных отличий ее от MS Windows.
Кстати, в Linux (и вообще в UNIX) нет жесткого деления между графическими и текстовыми программами, как в MS Windows или OS/2. С точки зрения системы нет разницы между программой, работающей в графике, и обычной. Программы для графического режима запускают как обычные программы, т. е. из командной строки, из Midnight Comander'а и т.п. Единственным необходимым условием для их работы является то, что должен работать X-сервер. При необходимости программа сама обращается к X-серверу (через TCP/IP в общем случае, и через локальный сокет в частном, когда X-сервер и X-клиент работают на одной машине). Делает она путем вызова библиотечных функций из X-lib. Все, что ей надо для работы, это знать, где искать X-сервер (для этого используется либо переменная окружения DISPLAY, либо опция в командной строке). Более того, существуют даже программы, которые умеют работать и с X-сервером и с обычным текстовым терминалом (например, emacs) и сами разбираются при старте, как именно им работать в данном случае.
Конечно, приведенный выше рис. 7.1 очень схематичен. К примеру, как мы уже упоминали, взаимодействие библиотеки X lib с сервером в общем случае осуществляется по протоколам TCP/IP. Так что следовало бы еще отобразить программное обеспечение, реализующее протоколы TCP/IP. Еще одним важным ресурсом графической подсистемы являются шрифты. Оперировать со шрифтами может как непосредственно X-сервер, так и специальная программа, которая называется сервер шрифтов, и которую также следовало включить в рисунок.
Для каждого из типовых компонентов графической системы существует множество конкретных реализаций. В состав пакета XFree86 версии 3 входят несколько различных серверов, причем выбор конкретного сервера зависит от того, какие у вас видеоплата и монитор. Например, сервер XF86_Mono - это сервер для монохромных видео-режимов; XF86_S3 - сервер для карт, основанных на S3; XF86_S3V - сервер для S3 ViRGE и ViRGE/VX; XF86_SVGA - сервер для карт, работающих в режимах Super-VGA. Последнюю версию списка поддерживаемых X-сервером видеокарт вы можете найти на сайте http://www.xfree86.org/.
В четвертой версии XFree86 уже один X-сервер для большинства видеоадаптеров, называется он XFree86 и располагается в каталоге /usr/X11R6/bin/. Обычно на него делается ссылка с именем X, так что запустить X-сервер можно просто введя в командной строке букву X.
Различных менеджеров окон тоже существует очень много, и вы можете использовать любой из них по своему выбору. Вот несколько примеров.
• fvwm - Free Virtual Window Manager.
• fvwm2 - улучшенный вариант fvwm, позволяющий, в частности, использовать различные темы рабочего стола и динамические меню. Официальный сайт разработчиков FVWM и FVWM2 - http://www.hpc.uh.edu/fvwm/.
• fvwm95 - менеджер окон с графическим интерфейсом в стиле Windows 95.
• IceWM (http://berta.fri.uni-lj.si/~markom/icewm) - это оконный менеджер, который может эмулировать различные стандарты оконных систем (в частности, OS/2 Workplace Shell), имеет, по некоторым отзывам, довольно маленький обьем и быстро работает.
• Enlightenment (http://www.Enlightenment.org) - один из самых развитых менеджеров окон.
Можно упомянуть также Motif - коммерческий продукт, используемый во многих UNIX-системах, или его бесплатный аналог LessTif (http://www.lesstif.org), а также Xview - Linux-версию интерфейса OpenLook фирмы Sun.
Описание нескольких оконных менеджеров (Window Maker, IceWM, FLWM, FailSafe) и их сравнительный анализ вы можете найти в книге А.Федорчука [П1.6].
Разные менеджеры окон могут обеспечивать различный вид окон за счет использования различных рамок и оконных меню. Но все они используют одну и ту же базовую графическую утилиту X Window - X сервер.
Итак, вы теперь в общих чертах представляете, из каких основных частей формируется графический интерфейс в Linux. Как видите, строится он по модульному принципу и вполне возможно "собрать" его самостоятельно из отдельных компонент. Но для начинающего пользователя этот путь не самый легкий. К счастью, и не обязательно этим путем идти, поскольку разработаны (и включены практически во все дистрибутивы) так называемые интегрированные графические среды. Наиболее известными представителями таких сред являются KDE (http://www.kde.org) и GNOME (http://www.gnome.org).
Основу интегрированной графической среды KDE (K Desktop Enviroment) образует расширенная библиотека графических функций Qt фирмы Troll Tech (http://www.trolltech.com/). С использованием этой библиотеки построены собственный оконный менеджер kwm, файл-менеджер kfm, центр управления KDE (аналог панели управления Windows) и множество других компонентов, вплоть до собственного офисного пакета KOffice. Сказанное не означает, что все эти компоненты разрабатываются какой-то одной фирмой. Просто различные и независимые разработчики используют единый подход, единую идеологию создания и оформления программных продуктов. В результате получается функционально полный пакет программ, в рамках которого могут быть решены практически все задачи управления компьютером и программной средой (если не сказать, что вообще все задачи, решаемые на компьютере).
В состав версии 2.1 KDE включен файловый менеджер Konqueror, который предоставляет уникальные возможности доступа к файлам. Кроме того, что он позволяет просматривать файлы большинства известных форматов на локальных дисках, он является и интернет-браузером, по своим возможностям вполне сравнимым с Internet Explorer или Netscape Navigator.
Другой графической средой того же класса, что и KDE, является пакет GNOME (GNU Network Object Model Environment), который разрабатывается в рамках проекта GNU, а значит, относится к классу свободно распространяемого ПО (KDE до недавнего времени не полностью соответствовал этому понятию, потому что библиотека Qt распространялась не на условиях GPL; хотя сейчас ситуация изменилась и KDE тоже является свободно распространяемым). GNOME строится на основе библиотеки графических функций GTK+.
Существуют и другие разработки интегрированных графических сред, которые, однако, пока не достигли той степени развития, как KDE или GNOME, например, Xfce (http://www.xfce.org), dfm (http://www-c.informatik.uni-hannover.de/~kaiser/dfm/dfm.html) и другие.
До недавнего времени установка и настройка графического интерфейса Linux представляла собой довольно непростую задачу. Однако программы инсталяции последних версий дистрибутивов Linux (например, русифицированой версии Red Hat Linux 7.1) уже вполне успешно с ней справляются, автоматически определяя тип монитора и видеоадаптера и выбирая подходящее разрешение экрана. Но я все же приведу здесь некоторые рекомендации по настройке X Window для начинающих пользователей, имея в виду, что с некоторыми вариантами аппаратного обеспечения настройки все же придется подбирать вручную. А для того, чтобы подходить к процессу настройки осознанно, надо в общих чертах представлять, как работает видеосистема вашего компьютера.
[root]# SuperProbe › sprobe.txt
Заглянув в этот файл (воспользуйтесь клавишей ‹F3› в программе Midnight Commander), вы узнаете тип набора микросхем и обьем имеющейся у вас видеопамяти. У меня, например, SuperProbe выдала в одном случае
Chipset: S3 Trio64 (Port Probed)
Memory: 1024 Kbytes
RAMDAC: Generic 8-bit pseudo-color DAC
(with 6-bit wide lookup tables (or in 6-bit mode))
в другом случае
Chipset: Trident 3DImage985 (PCI Probed)
Memory: 4096 Kbytes
RAMDAC: Trident Built-In 15/16/24-bit DAC
(with 6-bit wide lookup tables (or in 6-bit mode))
Тип микросхем видеоадаптера необходимо знать в том случае, если у вас третья версия XFree86. Вообще говоря, программа инсталляции Linux автоматически определяет, какой сервер у вас должен стоять и инсталлирует его. Одновременно в каталоге /etc/X11/ формируется ссылка с именем X на этот сервер примерно такого вида:
@X -› /usr/X11R6/bin/XF86_SVGA (для 3 й версии XFree86).
@X -› /usr/X11R6/bin/XFree86 (для 4 й версии XFree86).
Загляните в каталог /etc/X11 и если обнаружите, что файла-ссылки с именем X там нет, создайте такую ссылку командой
[root]# ln -s /usr/X11R6/bin/XFree86 X
(естественно, файл /usr/X11R6/bin/XFree86 должен существовать).
Section "ServerLayout"
Identifier "XFree86 Configured"
Screen 0 "Screen0" 0 0
InputDevice "Mouse0" "CorePointer"
InputDevice "Keyboard0" "CoreKeyboard"
EndSection
Section "Files"
RgbPath "/usr/X11R6/lib/X11/rgb"
ModulePath "/usr/X11R6/lib/modules"
FontPath "/usr/X11R6/lib/X11/fonts/misc/"
FontPath "/usr/X11R6/lib/X11/fonts/Speedo/"
FontPath "/usr/X11R6/lib/X11/fonts/Type1/"
FontPath "/usr/X11R6/lib/X11/fonts/CID/"
FontPath "/usr/X11R6/lib/X11/fonts/75dpi/"
FontPath "/usr/X11R6/lib/X11/fonts/100dpi/"
EndSection
Section "Module"
Load "extmod"
Load "xie"
Load "pex5"
Load "glx"
Load "dri"
Load "GLcore"
Load "dbe"
Load "record"
EndSection
Section "InputDevice"
Identifier "Keyboard0"
Driver "keyboard"
EndSection
Section "InputDevice"
Identifier "Mouse0"
Driver "mouse"
Option "Protocol" "PS/2"
Option "Device" "/dev/mouse"
EndSection
Section "Monitor"
Identifier "Monitor0"
VendorName "Monitor Vendor"
ModelName "Monitor Model"
EndSection
Section "Device"
Identifier "Card0"
Driver "trident"
VendorName "Trident"
BoardName "3DImage985"
BusID "PCI:1:0:0"
EndSection
Section "Screen"
Identifier "Screen0"
Device "Card0"
Monitor "Monitor0"
SubSection "Display"
Depth 8
EndSubSection
SubSection "Display"
Depth 15
EndSubSection
SubSection "Display"
Depth 16
EndSubSection
SubSection "Display"
Depth 24
EndSubSection
EndSection
Section "DRI"
EndSection
Как видите, файл XF86Config состоит из нескольких секций, имеющих следующую структуру:
Section "Название_секции"
Identifier "Name"
SectionEntry
…
EndSection
Строки, начинающиеся символом "#", являются комментариями. Секции могут быть расположены в файле в произвольном порядке. Могут присутствовать следующие секции:
• ServerLayout - общие установки;
• InputDevice - описания устройств ввода;
• Screen - конфигурация экрана;
• Device - описания графических карт;
• Monitor - описания монитора;
• Modes - описания видеорежимов;
• Files - пути к файлам;
• ServerFlags - опции сервера;
• VideoAdaptor - описание адаптера Xv (как сказано в интерактивном руководстве man, никто не говорит, что это такое, даже если знает!);
• Module - динамически загружаемые модули;
• DRI - конфигурация DRI;
• Vendor - установки для оборудования конкретных поставщиков (Vendor-specific configuration).
причем наличие всех секций не обязательно, но могут существовать несколько разных секций одного типа (только они должны иметь уникальные идентификаторы).
Секция ServerLayout имеет наивысший приоритет, т. е. именно с нее начинается анализ файла XF86Config при загрузке X-сервера. Эта секция определяет, какие устройства ввода/вывода будут использоваться в X-сессии. Устройства ввода - это клавиатура и мышь, которые задаются в секциях InputDevice (такие секции создаются отдельно для каждого устройства). Устройства вывода обычно состоят из нескольких независимых компонентов (графический адаптер и монитор), которые связываются воедино в секции Screen, на которую указывает ссылка в секции ServerLayout. Таким образом, секция ServerLayout должна содержать, как минимум, следующие строки:
Section "ServerLayout"
Identifier "MainSection"
Screen 0 "Screen0" 0 0
InputDevice "Mouse0" "CorePointer"
InputDevice "Keyboard0" "CoreKeyboard"
EndSection
Секция Screen определяет используемые монитор и видеоадаптер и задает режимы работы экрана. Она может иметь примерно такой вид:
Section " Screen"
Identifier "Screen0"
Device "Trident 3DImage985 (generic)"
Monitor "ViewSonic|ViewSonic G771"
DefaultColorDepth 24
Subsection "Display"
Depth 8
Modes "1024x768" "800x600" "640x400"
ViewPort 0 0
EndSubsection
Subsection "Display"
Depth 16
Modes "1024x768" "800x600" "640x480"
ViewPort 0 0
EndSubsection
Subsection "Display"
Depth 24
Modes "1024x768" "800x600" "640x480"
ViewPort 0 0
EndSubsection
Subsection "Display"
Depth 32
Modes "1024x768" "800x600" "640x480"
ViewPort 0 0
EndSubsection
EndSection
Как видите, она содержит указания на используемый графический адаптер (задается в секции Device с идентификатором "Matrox Millenium G200") и монитор (задается в секции Monitor с идентификатором "Monitor0").
Cекция Screen может содержать несколько подсекций (Subsection) Display, по одной такой подсекции на каждую глубину цвета. В каждой такой подсекции вы должны прописать те режимы монитора, которые будете использовать. Режимы задаются в строке Modes. Они указываются путем перечисления их наименований, взятых из секции Monitor (в точности в том виде, как эти названия указаны после слова Modeline). В одной строке можно перечислить любое число таких имен режимов. Первый из указанных режимов будет запускаться по умолчанию, в остальные можно будет переключаться (циклически), нажимая комбинацию клавиш ‹Ctrl›+‹Alt›+‹+› или ‹Ctrl›+‹Alt›+‹-› (используются клавиши ‹+› и ‹-› на цифровой клавиатуре).
В этой подсекции указывается также размер виртуального экрана, который будет использоваться сервером. Соответствующая строка имеет вид "Virtual xdim ydim", где xdim и ydim - размерности виртуального экрана. Например, вы можете иметь дисплей с разрешением 800* 600, а размер виртуального экрана задать равным 1024* 768. Тогда в каждый момент времени вы будете видеть на дисплее только часть полного изображения. Надо, однако, учитывать, что видеопамять должна хранить изображение, равное по размеру виртуальному экрану, а также то, что нежелательно занимать всю память хранением виртуального экрана, поскольку в этом случае не остается резерва на кэширование, что может повлечь потерю 30-40% производительности сервера.
Секция Monitor обычно начинается тремя строками, в которых указывается производитель монитора и его модель, однако если у вас только одна секция Monitor, то эти строки вполне могут иметь вид:
Identifier "Unknown"
VendorName "Unknown"
ModelName "Unknown"
Далее идут две очень важные строки, определяющие допустимые значения частот вертикальной и горизонтальной синхронизации. Для современных мульти-частотных мониторов эти строки могут иметь примерно такой вид:
HorizSync 30-70
VertRefresh 50-180
Для мульти-частотных мониторов с фиксированными частотами:
HorizSync 31.5, 35.2
VertRefresh 60, 65
Для мульти-частотных мониторов с несколькими интервалами допустимых частот:
HorizSync 15-25, 30-50
VertRefresh 40-50, 80-100
Частоты горизонтальной синхронизации задаются в килогерцах, частоты вертикальной синхронизации (обновления экрана) - в герцах.
Внимание!
Обязательно проверьте, что здесь указаны значения, соответствующие характеристикам вашего монитора, приведенным в документации.
Секций Monitor в файле может быть несколько, они различаются уникальными идентификаторами (первая строка в секции). В 4-й версии XFree86 перечисление режимов монитора в этой секции является необязательным, поскольку X-сервер использует встроенный список стандартных VESA-режимов. Однако явное задание режима в секции Monitor и не возбраняется, причем, если заданный вами режим получит такое же название, как один из стандартных режимов, будут использованы ваши установки. Встроенные режимы с именами, не встречающимися в секции Monitor, будут использоваться сами по себе.
Видеорежимы могут быть заданы также в секции Modes. Таких секций в файле тоже может быть несколько. Каждая из них задает некоторый набор видеорежимов, на который можно сослаться из секции Monitor, используя ключевое слово UseModes.
Режимы могут задаваться в двух эквивалентных форматах: в виде одной строки или несколькими строками. Вот пример задания одного и того же режима в этих двух форматах:
Modeline "640x480example" 25.175 640 664 760 800 480 491 493 525 -HSync +VSync
Mode "640x480example"
DotClock 25.175
Htimings 640 664 760 800
VTimings 480 491 493 525
Flags "-HSync +VSync"
EndMode
Первое слово в каждом формате (Modeline или Mode), как и слово EndMode, являются служебными. По ним X-сервер определяет, что данная строка или группа строк служат для задания видеорежима. Следующее слово (в кавычках) является названием данного режима. Вы можете выбрать это название по своему вкусу (хотя, как пишет Игорь Николаев [П9.1], "я бы не стал использовать в названии ничего, кроме цифр и букв латинского алфавита").
Следующее число (оно может быть дробным) задает тактовую частоту развертки (частоту вывода точек на экран) в мегагерцах.
Далее следуют четыре целых числа (группа Htimings), определяющих параметры строки, а, значит, разрешение по горизонтали. Первое из этих чисел задает число видимых точек в строке. Чтобы пояснить значение следующих трех чисел, надо иметь в виду, что началом строки на экране считается не самая левая точка в строке (она попадает в невидимую, затемненную область экрана), а левая граница видимого изображения. Поэтому первое число в этой группе определяет число точек от начала до конца видимой части строки. Второе число - число точек от начала строки до начала импульса горизонтальной синхронизации (в этот момент начинается перемещение электронного луча с правой границы экрана на левую).
Третье число - число тактов развертки от начала изображения до того момента, когда электронный луч будет готов к выводу следующей строки изображения. То есть разность третьего и второго чисел задает длительность интервала, отводимого на перевод электронного луча от правой (с точки зрения пользователя) границы экрана к левой границе. И, наконец, четвертое число - общее число тактов, затрачиваемых на формирование одной строки изображения (с учетом невидимой части и времени, необходимого для перевода луча на новую строку).
Аналогично формируются следующие 4 числа (VTimings) в описании формата, только в данном случае речь будет идти о числе строк на экране (видимых и невидимых) и импульсе вертикальной синхронизации (началом экрана считаем верхнюю границу видимой части изображения).
О последней группе параметров в описании видеорежима (группа Flags) мы поговорим позже, когда рассмотрим вопрос о том, как правильно сформировать значения числовых параметров.
В большинстве случаев нет необходимости в наличии секции Modes и строки UseModes, так как достаточно встроенного в сервер набора видеорежимов, соответствующих стандарту VESA. При запуске X-сервера он автоматически выбирает из возможных режимов лучший вариант, поддерживаемый монитором и видеокартой (решение принимается на основе значений, указанных в строках HorizSync и VertRefresh секции Monitor, так что очень важно, чтобы они были заданы корректно).
Следующая секция Device, описывает вашу видеоплату. По-видимому, самая важная строка в этой секции - указание на драйвер. У меня эта строка имеет вид:
Driver "mga"
В этой секции могут быть также указаны следующие данные:
• тип набора микросхем (Chipset);
• количество видеопамяти (указывается в килобайтах);
• допустимые значения тактовой частоты развертки (dot-clocks) или наименование используемого генератора тактовой частоты;
• тип RAMDAC (RAMDAC - это часть графического контроллера, отвечающая за преобразование изображения из цифровой в аналоговую форму). Эти параметры были, по-видимому, критичны для старых видеоплат, но для современных они перестали играть существенное значение. Большинство современных видеоплат имеют программируемые генераторы частот, которые могут задавать тактовую частоту развертки в очень широких пределах. Только в том случае, если у вас какой-то экзотический тип видеоплаты (особенно если вы знаете, что она поддерживает только ограниченное число частот генератора), надо позаботиться о корректном задании режимов в этой секции. В этом случае вначале воспользуйтесь программой SuperProbe для того, чтобы узнать нужные параметры, а затем пропишите полученные значения в секции Device.
Две секции InputDevice определяют мышь и клавиатуру (в 3-й версии XFree86 вместо секций InputDevice имелись секции: Keyboard и Pointer). Во-первых, здесь нужно указать тип клавиатуры. Помните, что обычная клавиатура для персональных компьютеров обозначается как "Generic 102-key PC (intl)" вместо предлагаемого по умолчанию варианта "Generic 101-key PC". Однако наиболее часто сейчас встречаются 104-клавишные клавиатуры, так что секция, определяющая конфигурацию клавиатуры должна содержать следующие строки:
Option "XkbRules" "xfree86"
Option "XkbModel" "pc104"
Option "XkbLayout" "ru"
Option "XkbOptions" "grp:ctrl_shift_toggle"
Последняя из этих строк определяет переключатель, который будет менять раскладку клавиатуры с американской на русскую (в данном примере - ‹Ctrl›+‹Shift›).
Кроме того, здесь можно указать протокол для работы с клавиатурой (Xqueue или Standart), скорость повтора (the repeat rate), а также переопределить значения некоторых клавиш. Для начала, пожалуй, не стоит тут слишком экспериментировать. Подробнее о настройке клавиатуры будет рассказано в разд. 9.3.
В отдельной секции InputDevice задаются параметры работы мыши. Самые существенные в этой секции 2 строки (для примера привожу строки из своего файла):
Option "Protocol" "PS/2"
Option "Device" "/dev/mouse"
определяющие протокол и файл устройства. Если ваша мышь подключена к специальному ("мышиному") разъему, то в качестве параметра Protocol должно быть указано либо "PS/2", либо более длинное слово, оканчивающееся на "PS/2". Остальные протоколы используются для мышей, подключаемых через последовательный порт. Обратите внимание на то, что не всегда протокол совпадает с названием фирмы-производителя. Так, некоторые из мышей фирмы Logitech используют либо протокол MouseMan, либо Microsoft. Если ваша мышь выпущена относительно недавно, можно поставить "Auto" в графе Protocol.
Секция Files содержит несколько строк, в которых прописаны пути к файлу с базой цветов (это таблица, задающая соответствия между цифровым и словесным заданием цветов, эту строку не стоит редактировать) и каталогам с файлами шрифтов. Путей к каталогам со шрифтами может быть задано несколько. Убедитесь только, что все указанные каталоги существуют и действительно являются каталогами шрифтов (там должен быть специальный файл fonts.dir, создаваемый командой mkfontdir, этот файл не рекомендуют создавать вручную). Если при запуске сервер будет выдавать сообщение типа "Can't open default font 'fixed'" или что-то еще в таком роде, это свидетельствует о том, что в секции Files ошибка в указании пути к файлу шрифтов (нужный шрифт не найден).
В этой же секции могут быть заданы пути к каталогам, содержащим загружаемые модули. Какие именно модули загружаются, и параметры загрузки определяются в секции Module, о которой мы сейчас говорить не будем, как и о секциях ServerFlags, VideoAdaptor, DRI, Vendor. Оставьте эти секции в том виде, как они созданы программой конфигурации.
[root]# /usr/X11R6/bin/XFree86 -configure
в 4-й версии XFree86. В последнем случае создается конфигурационный файл /root/XF86Config.new. Его можно опробовать с помощью команды
[root]# XFree86 -xf86config /root/XF86Config.new
явно указывая X-серверу, какой конфигурационный файл использовать. Но проще сразу перенести его в каталог /etc/X11 под именем XF86Config-4 и работать стандартным образом.
Итак, вы имеете какой-то вариант файла /etc/X11/XF86Config-4. Попробуйте просто запустить графический режим командой X (еще раз напомню, что это просто ссылка на сервер и если команда не работает, то ссылка должна быть создана, либо нужно вместо X указывать имя используемого сервера, может быть, даже с указанием полного пути). Если вам удалось запустить X-сервер, и вы увидели курсор посредине экрана, то, значит, вы можете пропустить оставшийся текст данного подраздела и перейти к разд. 7.4.
Если вы увидели черный экран или какие-то мелькающие полоски, то вернитесь в текстовый режим, нажав комбинацию ‹Ctrl›+‹Alt›+‹Backspace› (эта комбинация может выручить вас в случае многих затруднений с графическим режимом, так что рекомендую запомнить, что она позволяет завершить работу X-сервера, а, значит, и графического режима в целом). Однако не слишком торопитесь воспользоваться этой магической комбинацией, поскольку переход в графический режим требует определенного времени; я вначале несколько раз прерывал загрузку комбинацией ‹Ctrl›+‹Alt›+‹Backspace› и не мог понять, почему у меня графика не запускается, хотя вся причина заключалась в моей поспешности.
Однако, поскольку существует опасность повредить монитору неправильным заданием параметров, лучше не заниматься экcперементами с непредсказуемыми последствиями. Целесообразней вначале протестировать тот вариант файла, который был создан, и посмотреть, нет ли в нём явных ошибок. Для этого нужно воспользоваться командой
[root]# X -probeonly › probe.log 2›&1
Эта команда запускает X-сервер в тестовом режиме и выдает протокол в файл probe.log. После запуска этой команды на экране что-то помелькает, и вновь появится командная строка оболочки, а в текущем каталоге появится файл probe.log.
В этом файле много очень полезной информации, которую надо использовать при настройке X Window (отметим, что в файле протокола /var/log/XFree86.0.log содержится еще больше информации, но нам достаточно и того, что есть в probe.log). В первых строках файла probe.log содержатся сообщения о версии XFree86 и версии ядра Linux. Затем идет сообщение о том, куда записывается протокол работы (обычно это /var/log/XFree86.0.log), и какой конфигурационный файл используется (Помните, выше было сказано, что программа ищет этот файл в нескольких местах? Так что не лишне будет узнать, какой именно файл используется.).
(==) Log file: "/var/log/XFree86.0.log", Time: Mon Feb 12 17:20:25 2001
(==) Using config file: "/etc/X11/XF86Config-4"
Далее в probe.log идет небольшое пояснение тех служебных пометок, которые используются в этом файле в начале информационных строк:
• (--) - означает, что соответствующие значения получены путем тестирования;
• (**) - означает, что установки взяты из конфигурационного файла (в нашем случае - из /etc/X11/XF86Config-4);
• (++) - означает, что установки взяты из командной строки запуска;
• (==) - означает, что используются установки по умолчанию;
• (II) - за таким значком следует информационное сообщение;
• (WW) - за таким значком следует предупреждение;
• (EE) - за таким значком следует сообщение об ошибке.
Ошибки надо, естественно, постараться исправить путем соответствующей модификации файла /etc/X11/XF86Config-4. Но мы пока продолжим рассмотрение файла probe.log, в котором далее идет несколько чисто информационных строк (отметим, что в них отображена взаимосвязь секций конфигурационного файла):
(**) |-›Screen "Screen0" (0)
(**) | |-›Monitor "Monitor0"
(**) | |-›Device "Card0"
(**) |-›Input Device "Mouse0"
(**) |-›Input Device "Keyboard0"
(**) FontPath set to "unix/:-1"
(**) RgbPath set to "/usr/X11R6/lib/X11/rgb"
(**) ModulePath set to "/usr/X11R6/lib/modules"
(--) using VT number 7
и сообщения о том, какие модули загружаются, вроде следующего:
(II) Loading /usr/X11R6/lib/modules/fonts/libbitmap.a
(II) Module bitmap: vendor="The XFree86 Project" compiled for 4.0.2, module version = 1.0.0
После исправления тех ошибок, о которых сообщают строки, помеченные значком (EE), беремся за строки с предупреждениями. В частности, вы наверняка увидите строки следующего вида:
(WW) MGA(0): Monitor0: Using default hsync range of 28-33kHz
(WW) MGA(0): Monitor0: using default vrefresh range of 43-72Hz
вслед за которыми последует множество указаний на отбраковку каких-то видеорежимов монитора:
(WW) MGA(0): Default mode "1856x1392" deleted (hsync out of range)
Строки эти являются сообщениями о тех режимах, которые X-сервер не в состоянии отображать. О важности правильного выбора частот вертикальной и горизонтальной синхронизации было уже сказано неоднократно. Тем не менее, здесь появляется повод вспомнить об этом снова. Проверьте правильность их задания еще раз.
Снова выполнив после этого команду
[root]# X -probeonly › probe.log 2›&1
и заглянув в файл probe.log, вы увидите, какие режимы для вас недоступны (обычно это режимы с высоким разрешением, типа 1600* 1200).
Давайте теперь отыщем в файле probe.log две строки следующего вида (цифры у вас, конечно, могут быть другими):
(--) MGA(0): Virtual size is 640x480 (pitch 640)
(**) MGA(0): Default mode "640x480": 25.2 MHz, 31.5 kHz, 60.0 Hz
а также строку вида (она находится где-то отдельно от двух предыдущих)
(**) MGA(0): Depth 24, (-) framebuffer bpp 24
В совокупности эти три строки указывают на то, что у вас (точнее, у меня) используется глубина цвета 24 и разрешение экрана "640 x 480" с частотой обновления картинки 60 Гц. Такие параметры совершенно неудовлетворительны, поэтому снова обращаемся к корректировке /etc/X11/XF86Config-4. Вначале надо задать нужную глубину цвета. Естественно, побольше. Предельно допустимое значение определяется объемом видеопамяти. О том, как его рассчитать, было сказано в предыдущем подразделе.
В файле /etc/X11/XF86Config-4 для каждой глубины цвета задается своя подсекция Display в секции Screen. Выбор нужной подсекции определяется строкой вида
DefaultColorDepth 24
секции Screen. Чтобы изменить разрешение экрана, например, на значение 1024 x 768, вставляем во все подсекции Display секции Screen строку
Modes "1024x768"
(разрешение выбираете по своему вкусу из стандартного ряда "640 x 350", "640 x 400", "640 x 480", "800 x 600", "1024 x 768", "1152 x 864", "1280 x 1024", "1600 x 1200" и т.д.). Можно ограничиться добавлением только одной такой строки в ту подсекцию Display, которая задана строкой DefaultDepth (или DefaultColorDepth). После этого снова выполняем команду
[root]# X -probeonly › probe.log 2›&1
чтобы убедиться, что нет грубых ошибок, и, если таковых нет, можем рискнуть и запустить графический режим командой X.
Надо иметь в виду, что отсутствие указаний на ошибки еще не гарантирует успешный запуск графического режима. Если результатом этой команды снова будет черный экран, то выйдите из графического режима с помощью комбинации ‹Ctrl›+‹Alt›+‹Backspace› и снова внимательно проанализируйте вывод команды
[root]# X -probeonly › probe.log 2›&1
Если графический режим не запускается, попытайтесь задать меньшее разрешение или меньшую глубину цвета. Обычно таким образом удается добиться успешного запуска графического режима при желаемом разрешении "1024 x 768".
Но может быть и иначе. У меня, например, на одном из компьютеров никак не удавалось запустить графический режим с разрешением "1024 x 768", графическая оболочка нормально загружалась только при разрешении "800 x 600", а при более высоком - загрузка осуществлялась, но экран дрожал и трясся. С этой проблемой мне удалось справиться путем явного задания строки Modeline в секции Monitor и подбора указанных в ней значений параметров. Делал я это следующим образом. Вначале, не обращая внимания на мерцание и дрожание экрана, запустил графический режим и программу xvidtune (о ней будет рассказано ниже). С ее помощью (кнопка "Show") определил, что по умолчанию используется режим, имеющий следующие параметры:
# 1024x768 @ 85 Hz, 68.31 kHz hsync
Modeline "1024x768" 94.5 1024 1072 1168 1376 768 769 772 808 +hsync
Я прописал эти две строки явным образом в секции Монитор и стал менять различные параметры строки Modeline. В конце концов, удалось определить, что причиной дрожания изображения являлась слишком высокая частота тактового генератора (DotClock) - 94.5 МГц. Уменьшение ее до 94 МГц привело к стабилизации изображения. Частота обновления экрана при этом снизилась до 84,55 Гц, но это, на мой взгляд, несущественно. Впрочем, при желании ее можно даже повысить, если еще поэкспериментировать с программой xvidtune. Я же этим ограничился, а окончательную корректировку изображения провел с помощью аппаратных средств монитора.
О программе xvidtune надо рассказать отдельно. Эта программа очень полезна для окончательного выбора оптимального видеорежима. Но запустить её можно только после того, как запустится графический режим. Выйдите в графический режим командой startx и запустите xvidtune в окне эмулятора терминала. Вы увидите вначале суровое предупреждение:
Рис. 7.2. Первое сообщение программы xvidtune
в котором сообщается, что ни разработчик программы, ни XFree86 Project Inc. не несут никакой ответственности за последствия ее применения. И если вы не понимаете, что делаете, то лучше не беритесь! Говорят, что на старых типах мониторов неправильной установкой параметров можно добиться того, что ваш монитор начнет дымиться (за счет неправильной установки частот синхронизации, насколько я понимаю). Но я надеюсь, что вы будете достаточно осторожны и семь раз подумаете, прежде чем применить какое-то значение режима. Если так, то вперед!
Закрываем окно с предупреждением (кнопка OK) и видим основное окно программы xvidtune (рис. 7.3).
Рис. 7.3. Основное окно программы xvidtune
Теперь вы можете начать настраивать изображение на мониторе. Если вы хотите сместить его вправо, то щелкните мышкой по кнопке Right (обратите внимание на изменение некоторых цифр в окне программы), а затем по кнопке Apply. Вы увидите, что изображение сдвинется вправо. Аналогично можно подвинуть его влево (кнопка Left), вверх (Up) и вниз (Down). Можно также увеличить размер изображения по горизонтали (Wider) или вертикали (Taller) и, наоборот, уменьшить (соответственно Narrower и Shorter).
Запомните, что первоначальные установки можно всегда вернуть нажатием клавиши R или щелчком по кнопке Restore. Эта возможность особенно полезна в тех случаях, когда необходимо восстановить стабильный режим работы после слишком кардинальных изменений, когда изображение на экране пропадает вовсе или начинает мелькать. Кнопка Fetch служит для запроса текущих значений установок режима работы монитора.
Кнопка Auto является переключателем, т. е. в режиме Auto (изображение кнопки инвертируется, т. е. отображается белыми буквами на черном фоне) нажатие на кнопки Up/Down/Right/Left и Wider/Narrower/Shorter/Taller приводит к немедленному (без щелчка по кнопке Apply) изменению размера или положения изображения. Кнопка Test временно переключает установки в указанные значения. Кнопка Show служит для того, чтобы вывести выбранные значения на стандартный вывод (практически - в окно эмулятора терминала, из которого была запущена программа). Строка выводится в формате "Modeline", т. е. в том виде, как она должна быть записана в файле XF86Config. Кнопка Next переключает X-сервер в следующий видеорежим, а кнопка Prev - в предыдущий видеорежим (как они заданы в строке "Modes").
После того, как вы подобрали оптимальные с вашей точки зрения значения параметров видеорежима, запишите эти значения на бумагу. Не забудьте записать и приведенные в правом нижнем углу значения частот вертикальной и горизонтальной синхронизации. Формально они не нужны, но обычно пишутся в комментарии к строке "Modeline". На всякий случай нажмите кнопку Show и завершите работу программы нажатием кнопки Quit. После этого осталось проверить, правильно ли вы записали значения и вписать новую строку "Modeline" в файл XF86Config.
Теперь еще обратите внимание на то, что как бы мы не изменяли положение изображения, остается неизменным значение Pixel Clock в правом нижнем углу окна программы xvidtune. Этот параметр не поддается изменению в рамках программы xvidtune. Но после того, как выбраны размеры и положение изображения на экране, можно и нужно рассчитать наилучшее значение этого параметра. Принцип расчета прост: берем максимально допустимое для вашего монитора значение частоты горизонтальной синхронизации и делим его на размер фрейма по горизонтали (это последнее число в группе HTimings), выданное программой xvidtune. Это предельно допустимое значение частоты DotClock, которое может быть задано в строке "Modeline". Для перестраховки я немного округляю это значение в сторону уменьшения, чтобы не превысить максимальное значение частоты горизонтальной синхронизации. На этом формирование строки "Modeline" можно считать завершенным.
Аналогично можно подобрать значения для других таких строк (для других разрешений), но, честно признаюсь, что мне эксперименты по изменению видеорежимов через некоторое время наскучили. Я выбрал для себя один режим работы дисплея и успокоился. Думаю, что так же будет и у вас. Но прежде, чем затвердить свой выбор, создайте по одной подсекции Display для каждого из возможных значений глубины цвета. В файле XF86Config имеется как минимум одна такая подсекция, соответствующая глубине цвета 8 бит. Таких подсекций в секции Screen может быть несколько, поэтому не изменяйте существующую, а скопируйте ее (можно несколько раз) и подкорректируйте новые экземпляры в соответствии со своими пожеланиями. А выбор той подсекции, которая будет использоваться, осуществляется заданием нужной глубины цвета в параметре DefaultColorDepht секции Screen, таким вот примерно образом: DefaultColorDepht 24. Пример того, как может выглядеть секция Screen в итоге, был уже приведен выше, когда описывалась структура файла XF86Config, так что здесь не будем приводить его повторно.
На этом рассказ о настройке X-сервера закончен и можно перейти к вопросу о настройке графического режима в целом и как можно на этот процесс повлиять.
X :0
т. е. запускает программу с именем X на дисплее с номером 0. При этом предполагается, что в одном из каталогов, перечисленных в путях поиска, найдется программа с именем X. Как вы уже знаете, это должна быть ссылка на подходящий сервер. Используя скрипт.xserverrc, удостоверьтесь, что по команде exec в нем запускается существующий X-сервер. В противном случае загрузка будет происходить очень медленно и завершится немедленным выходом.
Если в командной строке запуска xinit не указана клиентская программа, которую надо запускать, программа xinit ищет в домашнем каталоге пользователя файл .xinitrc, чтобы выполнить его как скрипт, запускающий клиентские программы. Если такого файла не существует, xinit по умолчанию выполняет вместо этого скрипта команду:
xterm -geometry +1+1 -n login -display:0
Если вы после установки Red Hat Linux еще не создали свой файл .xinitrc, и просто запустите команду xinit из командной строки, вы увидите почти пустой рабочий стол с единственным окном терминала. Поскольку менеджера окон нет, вы ничего не можете сделать с этим окном (переместить, изменить размер и т. д.), но вы можете в этом окне запустить другие программы, в том числе менеджер окон. Перейдите, например, в каталог /usr/X11R6/bin и дайте команду fvwm или twm (один из этих оконных менеджеров обычно по умолчанию установлен). После этого вид экрана несколько изменится, вы сможете перемещать окна (обычным способом, захватывая мышкой заголовок окна), а по щелчку левой кнопкой по пустому полю рабочего стола получите выход в меню.
Если остановиться на таком способе вызова графического интерфейса, то каждый раз при его запуске придется повторять одну и ту же последовательность команд (не считая других минусов этого метода). Естественно, что пользователю стоит воспользоваться возможностью создания скрипта .xinitrc для автоматизации этой рутинной работы.
Ниже приведен пример скрипта .xinitrc, который запускает часы, несколько терминалов и оставляет менеджер окон в качестве "последнего" клиента.
#!/bin/sh
xrdb -load $HOME/.Xresources
xsetroot -solid gray &
xclock -g 50x50-0+0 -bw 0 &
xload -g 50x50-50+0 -bw 0 &
xterm -g 80x24+0+0 &
xterm -g 80x24+0-0 &
twm
Важно отметить, что программы, запускаемые из .xinitrc, должны запускаться в фоновом режиме, если только они не завершаются немедленно. Иначе эти программы будут препятствовать запуску других программ. Однако одна из запущенных программ (обычно менеджер окон или эмулятор терминала) должна выполняться не в фоновом режиме, а на переднем плане, чтобы работа скрипта не завершалась (завершением работы этой программы пользователь сообщает программе xinit, что закончил работу и что сама программа xinit должна завершиться). В приведенном примере, если менеджер окон правильно сконфигурирован, то для завершения работы в X-сессии достаточно выбрать команду Exit в меню менеджера twm.
Аргументы, заданные в командной строке вызова xinit, позволяют обойти выполнение скриптов.xinitrc и.xserverrc. В командной строке может быть указана альтернативная программа-клиент и/или альтернативный сервер. Клиентская программа должна быть первым аргументом в командной строке вызова xinit. Для того чтобы вызвать конкретный X-сервер, добавьте двойное тире (после указания программы-клиента и ее аргументов), после которого укажите имя нужного сервера.
Имена программы-сервера и программы-клиента должны начинаться со слэша (/) или точки (.). В противном случае они воспринимаются как аргументы, добавляемые в командную строку вызова соответствующей (предыдущей) программы. Таким образом, можно добавлять аргументы (например, задавать цвета фона и текста), не вводя заново всю командную строку.
Если конкретное имя сервера не указано и следом за двойным тире идет двоеточие с последующей цифрой, xinit будет воспринимать это число как номер дисплея вместо предполагаемого по умолчанию нуля. Вообще все следующие за двойным тире аргументы добавляются к командной строке вызова сервера.
Вот несколько примеров командной строки вызова программы xinit.
[user]$ xinit
Этой командой будет запущен сервер, на который указывает ссылка (линк) X, и выполнен пользовательский скрипт.xinitrc, если таковой существует, а иначе просто запущен xterm.
[user]$ xinit -- /usr/X11R6/bin/Xqdss:1
Таким образом, можно запустить какой-то конкретный сервер на альтернативном дисплее.
[user]$ xinit -geometry =80x65+10+10 -fn 8x13 -j -fg white -bg navy
По этой команде будет запущен сервер, на который указывает ссылка X, и запускаемой по умолчанию команде xterm будут переданы аргументы, перечисленные в командной строке. Скрипт .xinitrc будет проигнорирован.
[user]$ xinit -e widgets -- .Xsun -l -c
В этом случае для запуска сервера используется команда.Xsun -l -c, а запускаемому по умолчанию программе-клиенту xterm будет переданы аргументы -e widgets.
Поскольку пользователю-новичку обычно не хватает квалификации для создания собственного варианта скрипта.xinitrc, администраторы сайтов могут помочь им в вызове графического интерфейса, создав общедоступный скрипт, выполняющий эту функцию. Такие скрипты обычно называются x11, xstart, или startx и являются удобным способом создания простого интерфейса для пользователей-новичков. Вот пример простейшего скрипта такого вида:
#!/bin/sh
xinit /usr/local/lib/site.xinitrc -- /usr/X11R6/bin/X bc
При инсталляции стандартной версии Red Hat Linux создается более сложный вариант скрипта startx, который расположен в каталоге /usr/X11/bin (вы можете его просмотреть). Для него существует и man-страница, в которой говорится, что этот скрипт создается просто как образец для администраторов сайтов, и предназначен для создания собственных вариантов такого скрипта.
Если просмотреть стандартный вариант скрипта startx, мы увидим, что практически он сводится к выполнению всего-навсего трех команд:
xauth add $display . $mcookie
xauth add `hostname -f`$display . $mcookie
xinit $clientargs -- $display $serverargs
То есть, в конечном итоге, startx вызывает уже рассмотренную нами команду xinit, только предварительно формирует нужные значения аргументов командной строки для нее. Первый аргумент - имя файла xinitrc, причем если в домашнем каталоге пользователя есть файл.xinitrc, то берется он (с указанием пути), а если в домашнем каталоге нет такого файла, то берется общесистемный файл /etc/X11/xinit/xinitrc, т. е. "clientargs" = "/etc/X11/xinit/xinitrc".
Аналогично формируется значение переменной serverargs: если существует файл.xserverrc в домашнем каталоге пользователя, то переменная serverargs будет указывать на него. Если такого файла нет, то serverargs укажет на /etc/X11/xinit/xserverrc. Переменной display присваивается значение: 0. Далее в скрипте startx производится анализ аргументов, которые были заданы в командной строке при его вызове (эту часть мы пока не будем детально разбирать, поскольку для начала будем вызывать скрипт без параметров) и, наконец, в конец строки вызова xinit добавляется -auth $HOME/.Xauthority. Таким образом, сразу после установки системы (пока пользователь не создал файлов .xinitrc и .xserverrc в своем домашнем каталоге) будет вызываться в следующем виде:
xinit /etc/X11/xinit/xinitrc -- :0 /etc/X11/xinit/xserverrc -auth $HOME/.Xauthority
Команды xauth и опция -auth $HOME/.Xauthority, передаваемая X-серверу, служат для авторизации пользователя, запускающего графический режим. Механизмы авторизации нас пока не интересуют, так что рассматривать эту часть не будем (если интересно, см. интерактивное руководство man с параметром Xsecurity).
#!/bin/sh
# $HOME/.xinitrc
usermodmap=$HOME/.Xmodmap
xmodmap $usermodmap
xset s noblank # отключаем хранитель экрана
xset s 300 2 # запуск screensaver-а через 5 мин.
xset m 10 5 # установка ускорения мыши
rxvt -cr green -ls -bg black -fg white -fn 7x14 \ -geometry 80x30+57+0 &
if ["$1" = ""]; then WINMGR=wmaker # по умолчанию WINMGR=wmaker
else WINMGR=$1 fi
$WINMGR
Хотя это и не обязательно, можно сделать этот файл исполняемым с помощью команды
[user]$ chmod +x .xinitrc.
Этот вариант .xinitrc позволяет вам выбрать менеджер окон, попробуйте, например:
[user]$ startx startkde
Если администратор хочет создать одинаковое начальное окружение для всех пользователей, можно сделать так, чтобы по умолчанию для пользователя создавался скрипт.xinitrc, который ссылается на общий стартовый скрипт:
#!/bin/sh
. /usr/local/lib/site.xinitrc
if [-f $HOME/.Xclients]; then
exec $HOME/.Xclients
elif [-f /etc/X11/xinit/Xclients]; then
exec /etc/X11/xinit/Xclients
Просмотрев, в свою очередь, файл /etc/X11/xinit/Xclients, вы увидите, что выбор графической среды определяется тем, что прописано в файле /etc/sysconfig/desktop.
Если при установке такой файл не был создан, создайте его сами и запишите в него одно слово: KDE (создать такой файл можно командой cat › /etc/sysconfig/desktop). После перезапуска графической оболочки вы получите желаемый результат: будет запущена графическая оболочка KDE. А уж о том, как настроить ее, читайте в гл. 15 или на русской версии сайта KDE (http://www.kde.ru).
id:3:initdefault:
определяющая уровень запуска по умолчанию (об уровнях запуска можно почитать в разд. 8.2). Замените эту строку строкой следующего вида:
id:5:initdefault:
Такое изменение заставляет Linux при запуске переходить на 5-й уровень. А в конце того же файла /etc/inittab обычно прописана строка
x:5:respawn:/usr/bin/X11/xdm -nodaemon,
которая означает, что на этом уровне запуска должен запускаться менеджер дисплея xdm.
Если вы решили запускать xdm при старте и хотите использовать, например, глубину цвета 24 бита на пиксел вместо применяемой по умолчанию 8 bpp (и ваша видеокарта и монитор поддерживают ее), вы должны изменить файл /etc/X11/xdm/Xservers (в нем всего одна строка) следующим образом:
:0 local /usr/X11R6/bin/X -bpp 24
Если вы установили KDE, то вместо xdm, вероятно, запускается kdm. После установки Black Cat Linux, например, строка в /etc/inittab, определяющая менеджер дисплея, имеет вид:
x:5:respawn:/etc/X11/prefdm -nodaemon,
а /etc/X11/prefdm есть ссылка на /usr/bin/kdm.
Очень важное примечание:
Имейте в виду, что команда respawn в только что приведенной строке означает, что при попытках перезапуска системы будет происходить перезапуск менеджера дисплея. В частности, нажатие "магической" комбинации ‹Ctrl›+‹Alt›+‹Del› будет повторно запускать систему в той же конфигурации. Поэтому если вы после установки xdm будете как-то менять системные настройки и в результате ошибочных действий нарушите хрупкое равновесие системы X Window, вы попадете в очень затруднительную ситуацию. У меня, например, после одного из опытов с редактированием файла /etc/X11/XF86Config экран после загрузки стал черным и дальше компьютер ни на что не реагировал, кроме ‹Ctrl›+‹Alt›+‹Del›, а по этой комбинации происходила просто перезагрузка и выход в ту же ситуацию. На этот случай надо помнить, как перевести систему в однопользовательский режим, а прочитать об этом вы можете в следующей главе (точнее, в разд. 8.2).
id:runlevels:action:process
где:
• id - идентификатор строки. Это произвольная комбинация, содержащая от 1 до 4 символов. В файле inittab не может быть двух строк с одинаковыми идентификаторами;
• runlevels - уровни выполнения, на которых эта строка будет задействована. Уровни задаются цифрами или буквами без разделителей, например, 345;
• process - процесс, который должен запускаться на указанных уровнях. Другими словами в этом поле указывается имя программы, вызываемой при переходе на указанные уровни выполнения;
• action - действие.
В поле action стоит ключевое слово, которое определяет дополнительные условия выполнения команды, заданной полем process. Допустимые значения поля action:
• respawn - перезапустить процесс в случае завершения его работы;
• once - выполнить процесс только один раз при переходе на указанный уровень;
• wait - процесс будет запущен один раз при переходе на указанный уровень и init будет ожидать завершения работы этого процесса, прежде, чем продолжать работу;
• sysinit - это ключевое слово обозначает действия, выполняемые в процессе загрузки системы независимо от уровня выполнения (поле runlevels игнорируется). Процессы, помеченные этим словом, запускаются до процессов, помеченных словами boot и bootwait;
• boot - процесс будет запущен на этапе загрузки системы независимо от уровня выполнения;
• bootwait - процесс будет запущен на этапе загрузки системы независимо от уровня выполнения, и init будет дожидаться его завершения;
• initdefault - строка, в которой это слово стоит в поле action, определяет уровень выполнения, на который система переходит по умолчанию. Поле process в этой строке игнорируется. Если уровень выполнения, используемый по умолчанию, не задан, то процесс init будет ждать, пока пользователь, запускающий систему, не введет его с консоли;
• off - игнорировать данный элемент;
• powerwait - позволяет процессу init остановить систему, когда пропало питание. Использование этого слова предполагает, что имеется источник бесперебойного питания (UPS) и программное обеспечение, которое отслеживает состояние UPS и информирует init о том, что питание отключилось;
• ctrlaltdel - разрешает init перезагрузить систему, когда пользователь нажимает комбинацию клавиш ‹Ctrl›+‹Alt›+‹Del› на клавиатуре. Обратите внимание на то, что системный администратор может определить действия по комбинации клавиш ‹Ctrl›+‹Alt›+‹Del›, например игнорировать нажатие этой комбинации (что вполне разумно в системе, где много пользователей).
Этот список не является исчерпывающим. Более подробно о файле inittab можно узнать из man-страниц init (8), inittab (5) и getty (8).
Обработка файла /etc/inittab процессом init начинается в однопользовательском режиме (уровень 1), в котором единственным пользователем является пользователь root, работающий с консоли. Первым делом init находит строку, которая определяет, какой уровень выполнения запускается по умолчанию:
id:3:initdefault:
Это и будет тот уровень, в котором запустится и будет работать система после загрузки, поэтому естественно, что нельзя указывать в строке initdefault уровни 0 и 6.
Далее init выполняет команды, указанные в строке с ключевым словом sysinit. В стандартной конфигурации здесь выполняется скрипт rc.sysinit из каталога /etc/rc.d. После этого процесс init просматривает файл /etc/inittab и выполняет скрипты, соответствующие однопользовательскому уровню (1 во втором поле строки), всем уровням (строки с пустым вторым полем) и уровню, заданному по умолчанию. В строке, соответствующей уровню по умолчанию, вызывается скрипт rc из каталога /etc/rc.d. Этот скрипт один и тот же для всех уровней (т. е. обязательно вызывается, на какой бы уровень выполнения не загружалась система), только в зависимости от уровня выполнения ему передается соответствующее значение параметра вызова, так что, например, для 3-го уровня вызов скрипта осуществляется строкой типа
l3:3:wait:/etc/rc.d/rc 3
Функции, выполняемые скриптами rc.sysinit и rc мы подробно рассмотрим ниже, в разд. 8.2.2, а сейчас вернемся к краткому обзору действий процесса init.
Следующая важная функция, которую выполняет этот процесс (на уровнях со 2 по 5) - запуск шести виртуальных консолей (процессов getty), чтобы предоставить пользователям возможность регистрироваться в системе с терминалов. Для этого init порождает процессы, именуемые getty-процессами (от "get tty" - получить терминал), и следит за тем, какой из процессов открывает какой терминал. Каждый getty-процесс устанавливает свою группу процессов, используя вызов системной функции setpgrp, открывает отдельную терминальную линию и обычно приостанавливается во время выполнения функции open до тех пор, пока машина не получит аппаратную связь с терминалом. Когда функция open возвращает управление, getty-процесс исполняет программу login (регистрации в системе), которая требует от пользователей, чтобы они идентифицировали себя указанием регистрационного имени и пароля. Если пользователь зарегистрировался успешно, программа login, наконец, запускает командный процессор shell и пользователь приступает к работе. Этот вызов shell именуется "login shell" (регистрационный shell, регистрационный интерпретатор команд). Процесс, связанный с shell, имеет тот же идентификатор, что и начальный getty-процесс, поэтому login shell является процессом, возглавляющим группу процессов.
Если пользователь не смог успешно зарегистрироваться, программа регистрации завершается через определенный промежуток времени, закрывая открытую терминальную линию, а процесс init порождает для этой линии следующий getty-процесс, открывающий терминал, вместо прекратившего существование.
После завершения загрузки init продолжает работать в фоновом режиме, отслеживая изменения в состоянии системы. Например, если будет подана команда telinit, позволяющая изменить уровень выполнения, процесс init обеспечит выполнение команд, заданных для нового уровня файлом /etc/inittab. Этот файл прочитывается заново и в случае поступления сигнала HUP; эта особенность избавляет от необходимости перезагружать систему для того, чтобы сделать изменения в начальной конфигурации.
Таким образом, процесс начальной загрузки init постоянно находится в оперативной памяти и при получении соответствующих сигналов повторно выполняет цикл чтения из файла /etc/inittab инструкций о том, что нужно делать, причем этот набор инструкций различен для разных уровней выполнения.
Когда суперпользователь останавливает систему (командой shutdown), именно init завершает все другие исполняющиеся процессы, размонтирует все файловые системы и останавливает процессор.
Замечание
В приведенном описании опущены многие важные детали. Более подробное описание можно найти в man-страницах по init (8), inittab (5) и getty (8), а также в документах "Linux Documentation Project's Serial HOWTO".
Замечание
Если вы некорректно модифицируете файл /etc/inittab, система может перестать загружаться. Так что перед внесением каких-либо изменений в этот файл по меньшей мере запаситесь загрузочной дискетой и сохраните копию исходного файла на случай фатальных ошибок.
LILO boot:
необходимо ввести
linux single root=/dev/hda1.
где вместо /dev/hda1 надо, естественно, подставить имя раздела с корневой файловой системой. Эта команда подключит корневой раздел и переведет систему в однопользовательский режим. В этом режиме в системе работает только один пользователь - администратор и запускается только очень небольшое число самых необходимых системных служб (system services) - включая login. (Заметим в скобках, что другим способом перевода системы в однопользовательский режим является применение команды telinit, однако в рассматриваемой ситуации, когда не проходит загрузка, воспользоваться этим способом вряд ли удастся).
Из соображений безопасности нормально сконфигурированная система при загрузке оболочки в однопользовательском режиме запросит пароль пользователя root. Это очевидно, так как иначе злоумышленнику было бы очень легко, задав соответствующие аргументы загрузчику LILO, войти в систему как root со всеми вытекающими отсюда последствиями. Чтобы злоумышленники не могли воспользоваться загрузкой в однопользовательском режиме для входа в систему без пароля, в соответствующую секцию файла lilo.conf должны быть добавлены две строки:
restricted
password=‹password›
После выхода в оболочку вы сможете отменить те правки, которые привели к краху или предпринять какие-то другие действия по выходу из сбойной ситуации. В книге Д. Такета и С.Барнета [П1.9] сказано, что этот способ не работает, если корневой раздел находится на диске SCSI. Однако, возможно, это относится к старым версиям Linux, поскольку один из моих корреспондентов (Р.Сузи) уверяет, что со SCSI-дисками никаких проблем нет, и система грузится с них в любом режиме, лишь был бы доступен initrd. Ну, а если загрузиться в однопользовательском режиме все же не получается, можно попробовать загрузить систему с загрузочной дискеты, так что позаботьтесь о том, чтобы такая дискета у вас была.
Кстати, не дожидаясь возникновения чрезвычайных ситуаций, проверьте, как будет у вас проходить загрузка в однопользовательский режим и загрузка с аварийной дискеты. После этого, если неприятности все же возникнут, вы будете чувствовать себя значительно спокойнее.
[root]# cd /mnt
[root]# mkdir floppy; mkdir cdrom; mkdir win; mkdir zip; mkdir server
Теперь отредактируйте файл /etc/fstab, добавив в него следующие строки, соответствующие тем устройствам, которые имеются в вашей системе (то, что в файле было до вас, лучше не трогать):
/dev/fd0 /mnt/floppy vfat user,noauto 0 1
/dev/cdrom /mnt/cdrom iso9660 ro,user,noauto 1
/dev/sda4 /mnt/zip vfat user,noauto,exec 0 1
/dev/hda1 /mnt/win vfat user,noauto 0 1 server:/export /mnt/server nfs defaults
Редактирование файла /etc/fstab можно выполнить и с помощью программы linuxconf, о которой будет рассказано ниже (команда File systems | Access local drive).
Если правильно настроен файл /etc/fstab, то обращение к гибкому диску или дискам CD-ROM осуществляется довольно просто. В графической среде KDE чтобы смонтировать диск надо просто щелкнуть правой кнопкой мыши по соответствующему значку и выбрать в появившемся меню команду Монтировать. Чтобы добиться примерно такого же эффекта в программе Midnight Commander, надо добавить в меню этой программы (файл /usr/lib/mc/mc.mnu) команды монтирования и размонтирования дисков. Вот пример таких команд для гибких дисков:
m Смонтировать дискету
mount /mnt/floppy
d Размонтировать дискету
umount /mnt/floppy
(предполагается, что в файле /etc/fstab прописана строка, определяющая устройство и тип файловой системы для /mnt/floppy). После этого смена дискеты в Midnight Commander под Linux будет ничем не сложнее аналогичного действия в программе Norton Commander или в FAR под MS Windows: для того, чтобы смонтировать дискету, достаточно будет последовательно нажать клавиши ‹F2› и ‹M›, для размонтирования - клавиши ‹F2› и ‹D›.
[root]# dd if=/dev/zero of=/swapfile bs=1k count=size,
где size - размер файла подкачки в килобайтах. Некоторое время назад значение параметра size должно было находиться в пределах от 40 до 131 073 и, следовательно, размер файла подкачки мог быть не более 133 890 048 байт (это чуть меньше 128 Мбайт). То же самое ограничение действовало и для разделов подкачки. Однако последние версии ядра позволяют использовать области подкачки размером до 2 Гбайт (правда, это требует выделения дополнительной памяти для ядра).
Отметим, что для создания файла подкачки нельзя использовать команду cp, поскольку этот файл должен занимать непрерывную область на диске, что не обеспечивается командой копирования.
После создания области подкачки (будь это хоть раздел, хоть файл) на ней необходимо создать соответствующую файловую систему, что делается командой mkswap следующим образом:
[root]# mkswap -c swapfile [size]
или
[root]# mkswap -c /dev/hdb3
Опция -c обеспечивает проверку указанной области на наличие плохих блоков. Если таковые обнаружены, сообщается их количество.
Linux использует страничную организацию памяти и области подкачки. Размер страницы можно указать в команде mkswap, используя опцию -p. Типичные значения, указываемые после этой опции, 4096 и 8192. Надо сказать, что команда mkswap отказывается работать с областями подкачки, размер которых менее 10 страниц, чем и объясняется то, что размер файла подкачки должен быть не менее 40 Кбайт.
Команда mkswap подготавливает область подкачки к использованию, но чтобы система могла ее использовать, необходимо эту область инициализировать (эта операция аналогична монтированию обычных файловых систем). Инициализация выполняется с помощью команды swapon. Обычно это делается во время выполнения инициализационного скрипта /etc/rc.d/rc.sysinit. Но если вы создали файл подкачки после запуска ОС, надо выполнить эту команду отдельно. Команда swapoff производит демонтаж указанных областей подкачки. Эта команда необходима для того, чтобы ядро могло снова считать в память данные из области подкачки.
ОС Linux может одновременно работать с несколькими областями подкачки (до 8). Сколько их задействовано в системе, можно увидеть с помощью команды swapon -s или просмотрев файл /proc/swaps.
[root]# rpm -Uhv apache-1.3.19-3.i586.rpm
При необходимости предварительно устанавливаем требующиеся дополнительные пакеты. После этого надо произвести все необходимые настройки сервера. Мы здесь не рассматриваем вопросы настройки сервера Apache. Пока вы не закончили с его настройкой, можно запускать сервер "вручную", чтобы проверить, как все работает. После того, как настройка сервера завершена, можно заняться организацией его автоматической загрузки при запуске системы. Для этого переходим в каталог /etc/rc.d/rcN.d и создаем там ссылку на демон httpd:
[root]# ln -s /usr/sbin/httpd SNNapache
Значение NN для этой ссылки вы можете выбрать сами (в данном случае желательно запускать этот сервер после запуска других служб, поэтому значение надо брать по-больше, например, 98). После этого сервер Apache будет автоматически загружаться при старте системы. Если потом вы захотите отказаться от его автоматического запуска, просто удалите ссылку SNNapache из каталога /etc/rc.d/rcN.d.
Надо сказать, что существует специальная утилита для управления запуском сервисов (демонов) на разных уровнях выполнения. Она называется chkconfig. Если ее запустить с опцией - list, вы получите полный список доступных сервисов, с указанием того, запускается или нет данный сервис на каждом уровне. Опции - add и - del служат для создания или удаления соответствующей ссылки в каталоге /etc/rc.d/rcN.d:
[root]# /sbin/chkconfig [--add | --del] name
Формат команды для запуска или остановки сервиса следующий:
[root]# /sbin/chkconfig [-- level levels] name [on | off | reset]
Так что запуск демона apache можно осуществить командой
[root]# /sbin/chkconfig -level 345 httpd on
Рис. 8.1. Основное окно программы ksysv
Рис. 8.2. Окно свойств службы
Рис. 8.3. Вкладка General
Рис. 8.4. Вкладка Permossions
На этом закончим рассмотрение данной программы. Конечно, не имея достаточного опыта пользоваться этой программой надо осторожно. Но, с другой стороны, откуда же опыту взяться, если его не набирать?
ps [-опции]
ps [опции]
ps [-- длинное_имя_опции [-- длинное_имя_опции]…]
При этом опции разных типов нельзя употреблять в одной команде. Дадим краткую характеристику наиболее важных опций.
Первая группа опций регулирует вывод команды. Независимо от наличия опций этой группы команда ps выдает для каждого процесса отдельную строку, но содержимое этой строки может быть разным. В зависимости от заданных опций могут присутствовать следующие поля:
• USER - имя владельца процесса;
• PID - идентификатор процесса в системе;
• PPID - идентификатор родительского процесса;
• %CPU - доля времени центрального процессора (в процентах), выделенного данному процессу;
• %MEM - доля реальной памяти (в процентах), используемая данным процессом;
• VSZ - виртуальный размер процесса (в килобайтах);
• RSS - размер резидентного набора (количество 1K-страниц в памяти);
• STIME - время старта процесса;
• TTY - указание на терминал, с которого запущен процесс;
• S или STAT - статус процесса;
• PRI - приоритет планирования;
• NI - значение nice (см. описание команды nice ниже);
• TIME - сколько времени центрального процессора занял данный процесс;
• CMD или COMMAND - командная строка запуска программы, выполняемой данным процессом; а также и другие поля, полный список которых приведен на man-странице, посвященной команде ps.
Значения, выводимые в большинстве этих полей вы поймете без дополнительных пояснений. В поле Статус процесса, как уже говорилось выше, могут стоять следующие значения:
• R - выполнимый процесс, ожидающий только момента, когда планировщик задач выделит ему очередной квант времени;
• S - процесс "спит";
• D - процесс находится в состоянии подкачки на диске;
• T - остановленный процесс;
• Z - процесс-зомби.
Рядом с указателем статуса могут стоять дополнительные символы из следующего набора:
• W - процесс не имеет резидентных страниц;
• ‹ - высоко-приоритетеный процесс;
• N - низко-приоритетный процесс;
• L - процесс имеет страницы, заблокированные в памяти.
Вторая группа опций регулирует то, какие именно процессы включаются в вывод команды. Чтобы получить список всех процессов надо использовать команду ps с опциями ax или -A. Вывод в этих двух случаях отличается только в поле CMD: в первом случае выдается полная командная строка запуска программы, а во втором - только имя запущенной программы.
Описание всех опций программы ps здесь привести невозможно. Поэтому приведем только несколько примеров ее применения, которые покажут, как пользоваться этой командой в типичных ситуациях.
Для того чтобы увидеть все процессы в системе, используя стандартную форму вывода:
[user]$ ps -e
Можно к той же команде добавить опцию -o, после которой указать через запятую, какие именно поля вы хотите видеть в выводе команды:
[user]$ ps -eo pid,user,cmd
Для того, чтобы увидеть все процессы в системе, используя форму вывода BSD-систем:
[user]$ ps ax
Для того, чтобы увидеть все процессы в системе, с применением графического отображения отношения "предок-потомок":
[user]$ ps -ef
Впрочем, для того, чтобы увидеть "лес" деревьев "предок-потомок", лучше воспользоваться очень интересным аналогом команды ps -ef - командой pstree.
Для того, чтобы увидеть, сколько % ЦПУ и памяти занимают запущенные вами процессы:
[user]$ ps -u
Чтобы узнать приоритет процесса и значение nice, воспользуйтесь опцией -l:
[user]$ ps -l
Рис. 8.5. Вывод команды top
Как видите, в верхней части окна отображается астрономическое время, время, прошедшее с момента запуска системы, число пользователей в системе, число запущенных процессов и число процессов, находящихся в разных состояниях, данные об использовании ЦПУ, памяти и свопа. А далее идет таблица, характеризующая отдельные процессы. Число строк, отображаемых в этой таблице, определяется размером окна: сколько строк помещается, столько и выводится. Графы таблицы обозначены так же, как поля вывода команды ps (см.разд. 8.4.1), так что дополнительных пояснений здесь не требуется.
Содержимое окна обновляется каждые 5 секунд. Список процессов может быть отсортирован по используемому времени ЦПУ (по умолчанию), по использованию памяти, по PID, по времени исполнения. Переключать режимы отображения можно с помощью команд, которые программа top воспринимает. Это следующие команды (просто нажимайте соответствующие клавиши, только с учетом регистра, то есть вместе с клавишей Shift):
• ‹Shift›+‹N› - сортировка по PID;
• ‹Shift›+‹A› - сортировать процессы по возрасту;
• ‹Shift›+‹P› - сортировать процессы по использованию ЦПУ;
• ‹Shift›+‹M› - сортировать процессы по использованию памяти;
• ‹Shift›+‹T› - сортировка по времени выполнения.
Кроме команд, определяющих режим сортировки, команда top воспринимает еще ряд команд, которые позволяют управлять процессами в интерактивном режиме. С помощью команды ‹K› можно завершить некоторый процесс (его PID будет запрошен), а с помощью команды ‹R› можно переопределить значение nice для некоторого процесса. Таким образом, эти две команды аналогичны командам kill и renice, которые рассматриваются в разд. 8.4.3. и разд. 8.4.4
nice [- adnice] command [args]
где adnice - значение (от -20 до +19), добавляемое к значению nice процесса-родителя. Полученная сумма и будет значением nice для запускаемого процесса. Отрицательные значения может устанавливать только суперпользователь. Если опция - adnice не задана, то по умолчанию для процесса-потомка устанавливается значение nice, увеличенное на 10 по сравнению со значением nice родительского процесса. Очевидно, что если вы не суперпользователь, то применять эту команду имеет смысл только тогда, когда вы хотите запустить некий процесс с низким значением приоритета.
Другая команда, renice, служит для изменения значения nice для уже выполняющихся процессов. Ее формат таков:
renice priority [[-p] PID] [[-g] grp] [[-u] user]
Например, команда
[root]# renice -1 987 -u daemon -p 32
увеличивает на 1 приоритет процессов с PID 987 и 32, а также всех процессов пользователя daemon.
Суперпользователь может изменить приоритет любого процесса в системе. Другие пользователи могут изменять значение приоритета только для тех процессов, для которых данный пользователь является владельцем. При этом обычный пользователь может только уменьшить значение приоритета (увеличить значение nice), но не может увеличить приоритет, даже для возврата значения nice к значению, устанавливаемому по умолчанию. Поэтому процессы с низким приоритетом не могут породить "высокоприоритетных детей".
[user]$ kill -l
Сигналы принято обозначать номерами или символическими именами. Все имена начинаются на SIG, но эту приставку иногда опускают: например, сигнал с номером 1 обозначают или как SIGHUP, или просто как HUP.
Когда процесс получает сигнал, то возможен один из двух вариантов развития событий. Если для данного сигнала определена подпрограмма обработки, то вызывается эта подпрограмма. В противном случае ядро выполняет от имени процесса действие, определенное по умолчанию для данного сигнала. Вызов подпрограммы обработки называется перехватом сигнала. Когда завершается выполнение подпрограммы обработки, процесс возобновляется с той точки, где был получен сигнал.
Можно заставить процесс игнорировать или блокировать некоторые сигналы. Игнорируемый сигнал просто отбрасывается процессом и не оказывает на него никакого влияния. Блокированный сигнал ставится в очередь на выдачу, но ядро не требует от процесса никаких действий до разблокирования сигнала. После разблокирования сигнала программа его обработки вызывается только один раз, даже если в течение периода блокировки данный сигнал поступал несколько раз.
В табл. 8.1. приведены некоторые из часто встречающихся сигналов.
Таблица 8.1. Сигналы
| N | Имя | Описание | Можно перехватывать | Можно блокировать | Комбинация клавиш |
|---|---|---|---|---|---|
| 1 | HUP | Hangup. Отбой | Да | Да | |
| 2 | INT | Interrupt. В случае выполнения простых команд вызывает прекращение выполнения, в интерактивных программах - прекращение активного процесса | Да | Да | ‹Ctrl›+‹C› или ‹Del› |
| 3 | QUIT | Как правило, сильнее сигнала Interrupt | Да | Да | ‹Ctrl›+‹\› |
| 4 | ILL | Illegal Instruction. Центральный процессор столкнулся с незнакомой командой (в большинстве случаев это означает, что допущена программная ошибка). Сигнал отправляется программе, в которой возникла проблема | Да | Да | |
| 8 | FPE | Floating Point Exception. Вычислительная ошибка, например, деление на ноль | Да | Да | |
| 9 | KILL | Всегда прекращает выполнение процесса | Нет | Нет | |
| 11 | SEGV | Segmentation Violation. Доступ к недозволенной области памяти | Да | Да | |
| 13 | PIPE | Была предпринята попытка передачи данных с помощью конвейера или очереди FIFO, однако не существует процесса, способного принять эти данные | Да | Да | |
| 15 | TERM | Software Termination. Требование закончить процесс (программное завершение) | Да | Да | |
| 17 | CHLD | Изменение статуса порожденного процесса | Да | Да | |
| 18 | CONT | Продолжение выполнения приостановленного процесса | Да | Да | |
| 19 | STOP | Приостановка выполнения процесса | Нет | Нет | |
| 20 | TSTR | Сигнал останова, генерируемый клавиатурой. Переводит процесс в фоновый режим | Да | Да | ‹Ctrl›+‹Z› |
[user]$ kill [-сигн] PID [PID..]
где сигн - это номер сигнала, причем если указание сигнала опущено, то посылается сигнал 15 (TERM - программное завершение процесса). Чаще всего используется сигнал 9 (KILL), с помощью которого суперпользователь может завершить любой процесс. Но сигнал этот очень "грубый", если можно так выразиться, поэтому его использование может привести к нарушению порядка в системе. Поэтому в большинстве случаев рекомендуется использовать сигналы TERM или QUIT, которые завершают процесс более "мягко".
Естественно, что наиболее часто команду kill вынужден применять суперпользователь. Он должен использовать ее для уничтожения процессов-зомби, зависших процессов (они показываются в листинге команды ps как ‹exiting›), процессов, которые занимают слишком много процессорного времени или слишком большой объем памяти и т. д. Особый случай - процессы, запущенные злоумышленником. Но обсуждение этого особого случая выходит за рамки данной книги.
nohup команда &
Запускаемый таким образом процесс будет игнорировать посылаемые ему сигналы (если это возможно, см. табл. 8.1). Стандартный выходной поток и стандартный поток ошибок при таком запуске команд перенаправляются в файл nohup.out или $HOME/nohup.out.
Команда nohup имеет побочный эффект, заключающийся в том, что значение nice для запускаемого процесса увеличивается на 5, т. е. процесс выполняется с более низким приоритетом.
[user]$ df -h
Сведения о количестве свободного пространства на конкретном диске можно получить, если задать в качестве параметра имя файла устройства:
[user]$ df -h /dev/hda2
Если вместо имени файла устройства указать полное (с указанием пути) имя произвольного файла или каталога, то вы получите данные о количестве используемого и свободного места в файловой системе, содержащей указанный файл (каталог).
Если место еще есть, то можно перейти к установке пакета. Хуже владельцам компьютеров с дисками маленького объема: тут каждый раз надо думать, как бы освободить место для новой программы, другими словами, что уже можно с диска удалить. Удалять можно отдельные файлы, но, конечно, с точки зрения освобождения пространства, эффективнее удалять целыми каталогами или пакетами.
Файлы (каталоги) удаляются в том случае, если они (размещенные в них файлы) вам более не нужны. Естественно, что кандидатами на удаление в первую очередь рассматриваются каталоги (или файлы) самого большого объема, и тут оказывается полезной команда du (disc usage).
Команда du позволяет узнать, сколько места занимает конкретный файл или подкаталог. Для этого надо дать команду следующего формата (в примере мы узнаем объем каталога /usr/lib)
[user]$ du -ks /usr/lib
Результатом выполнения данной команды будет примерно такая строка
91418 /usr/lib
которая означает, что каталог /usr/lib занимает 91 418 Кбайт (опция k указывает, что объем должен выдаваться в килобайтах). Опция s задана для того, чтобы выводился только суммарный объем каталога. Если вы ее опустите, то получите данные об объеме каждого подкаталога и файла в указанном каталоге, а это очень много информации. Впрочем, последней строкой все равно будет выведен суммарный объем каталога.
Если маленькую s заменить на большую S, то выводиться будет только информация об объеме подкаталогов (но не файлов), что иногда тоже полезно. О других опциях указанных команд вы можете узнать на соответствующих man-страницах или по команде info.
[root]# rpm -qa › packages
Полученный файл packages будет содержать список всех установленных в системе пакетов ПО. Этот список можно проанализировать с целью выявления ненужных вам пакетов и удалить таковые с помощью команды rpm с параметром -e. При этом будут удалены все созданные при инсталляции пакета файлы и каталоги. Этот способ самый безопасный, поскольку программа rpm предварительно проверит, не используется ли данный пакет какой-либо другой программой, и при наличии такой зависимости выдаст соответствующее предупреждение, а удалять что-либо откажется. Отмечу только, что удаление пакетов надо выполнять с правами root.
У меня, например, в полученном таким образом файле packages встретилось упоминание пакета AfterStep-APPS-990329-2. Выполнив команду
[root]# rpm -qi AfterStep-APPS
я выяснил, что этот пакет содержит некие апплеты к оконному менеджеру AfterStep. Поскольку такой менеджер я не использовал, я удалил этот пакет, а также и сам пакет AfterStep, с помощью команд
[root]# rpm -e AfterStep
[root]# rpm -e AfterStep-APPS
Это освободило около 5800 Кбайт. Воспользовавшись таким приемом, вы можете удалить все пакеты, которые не используете. Я, например, удалил такие пакеты, как gnome-core, gnome-libs, gnome-audio, поскольку в качестве графической среды использую не Gnome, а KDE. Отмечу, что когда я попытался удалить gnome-core, программа rpm отказалась это сделать, сообщив, что часть этого пакета используется пакетом xmms-gnome. Еще больше неудовлетворенных зависимостей образуется при попытке удалить gnome-libs. Однако поскольку все упоминавшиеся в этих сообщениях пакеты так или иначе были связаны с Gnome, я рискнул удалить их все, а также другие пакеты, которые были с ними связаны[20]. В результате освободилось около 7800 Кбайт дискового пространства.
2. Заглянув в каталог /usr/man, я обнаружил два подкаталога со страницами руководства man на французском и испанском языках. После их удаления освободилось еще около 100 Кбайт.
3. В каталоге /usr/lib/kbd/keymaps можно, по-видимому, удалить подкаталоги, в которых хранятся таблицы раскладок клавиатуры, предназначенные для других типов микропроцессоров, а в /usr/lib/kbd/keymaps/i386 - подкаталоги для раскладок, отличных от qwerty.
Аналогичным образом удаляются раскладки клавиатуры для различных языков, которыми вы не пользуетесь (скажем, для китайского или тайского). Эти шрифты расположены в каталоге /usr/lib/kbd/keymaps/i386/qwerty. Можно попробовать удалить ненужные шрифта из /usr/lib/kbd/consolefonts, однако если в начале таблицы раскладки клавиатуры указывается, для какого языка она служит, то о назначении файла шрифта приходиться судить по его названию.
Поскольку по умолчанию в системе устанавливаются средства локализации для различных стран (которые вам, по-видимому, не потребуются), то можно удалить из каталога /usr/share/locale все подкаталоги, соответствующие не нужным вам языкам. Всего там около 16 Мбайт, так что удаление ненужного может дать около 15 Мбайт освобожденного пространства. Еще более 2 Мбайт может дать очистка каталогов /usr/share/i18n/locales и /usr/share/i18n/charmaps.
4. В каталоге /usr/share/doc/HTML/ имеются подкаталоги с документацией на разных языках, значительная часть которой вам, по-видимому, не нужна. Я оставил в этом каталоге только три подкаталога en, ru, default, причем последний является просто ссылкой на подкаталог en, так что фактически там осталось только 2 подкаталога. Удаление этой документации освободило около 500 Кбайт.
Я думаю, что, проведя более детальный анализ содержимого своего жесткого диска, вы найдете еще много файлов, которые можно безопасно удалить. В заключение хочется только сказать, что, если после такого удаления вы попытаетесь проверить с помощью той же программы rpm корректность установки некоторых пакетов, вы можете получить сообщения об ошибках. Но это не страшно, если только вы удаляли пакеты после основательных раздумий.
Рис. 8.6. Основное окно программы linuxconf
На рис. 8.6 приводится вид окна, которое появляется при запуске программы linuxconf в графическом режиме. Первоначально правое поле окна пустое.
В левой части окна отображается древовидная структура групп конфигурируемых параметров. Если данная группа параметров содержит более мелкие подгруппы, это обозначается крестиком перед названием группы. Если щелкнуть мышкой по этому крестику, то развернется список подгрупп. Если крестик перед названием группы отсутствует, щелчок мыши по этому названию приводит к появлению в правой части окна списка параметров данной группы. Например, группа параметров User accounts (Счета пользователей) выглядит так, как изображено на рис. 8.7.
С помощью экранной кнопки Add можно добавить нового пользователя, а щелкнув мышкой по имени уже существующего, вы получите возможность изменять значения отдельных параметров счета данного пользователя (см. рис. 8.8).
Рис. 8.7. Окно управления счетами пользователей
Описание всех возможностей программы linuxconf заняло бы слишком много места в данной книге. Я надеюсь, что общее представление о программе вы получили и сможете освоиться с ней самостоятельно. Кроме того, неплохое описание этой программы можно найти в нескольких книгах по Linux, например, в [П1.3]. Надо только сказать, что в Интернете встречаются неодобрительные отзывы некоторых пользователей об этой программе. Они советуют вместо ее использования напрямую редактировать конфигурационные файлы. Однако я не наталкивался на случаи ее некорректной работы. Решайте сами, пользоваться этой программой или нет.
В заключение нужно еще сказать, что работа с программой в текстовом режиме происходит вполне аналогично, только вместо мышки для перемещения по группам приходится пользоваться клавиатурой, а, выбрав конкретную группу, надо нажать клавишу ‹Enter› для доступа к окну, в котором можно изменять значения отдельных параметров.
Рис. 8.8. Окно изменения параметров счета пользователя
PATH=$PATH:/home/user/bin
Обратите внимание на то, что двоеточия в конце нет. И имейте в виду, что каталоги просматриваются в поисках нужного файла в том порядке, как они перечислены в переменной PATH.
В отличие от MS-DOS Linux не ищет исполняемый файл в текущем каталоге. Поэтому, если вы хотите, чтобы поиск производился и в текущем каталоге, надо добавить и этот каталог (напомним, что он имеет имя, состоящее из одной точки) в переменную PATH. Но имейте в виду, что с точки зрения безопасности добавлять текущий каталог в перечень путей поиска недопустимо, так как злоумышленник может поместить в один из доступных ему по записи каталогов вредоносную программу, названную именем одной из часто используемых системных утилит. И, когда вы запустите эту программу, считая, что запускаете системную утилиту, она может нанести большой вред вашей системе, тем более, если вы запустили ее от имени суперпользователя.
При желании можно слегка "украсить себе жизнь", включив цветной вывод в команде ls (если по умолчанию он черно-белый). Для этого редактируем файл /etc/bashrc, в который добавляем строку:
alias ls = "ls -F -color"
Кстати, если вы захотите, чтобы Midnight Commander в окне эмулятора терминала был цветным, а не черно-белым, то установите переменную COLORTERM:
COLORTERM =; export COLORTERM
insmod joystick
• rmmod - служит для выгрузки или "удаления" модуля.
Пример:
rmmod joystick
• modprobe - автоматически загружает модули. Для того, чтобы отобразить текущую конфигурацию всех модулей можно воспользоваться командой: modprobe -c.
Примечание
Хотя файлы модулей имеют суффикс.o, при использовании этих команд ссылки на модули указываются без упоминания этого суффикса. Например: при упоминании модуля, файл которого называется "joystick.o", вы должны использовать в командной строке просто "joystick".
И, наконец, для третьего типа драйверов устройств программный код драйвера поделен между ядром и специальной утилитой, предназначенной для управления данным устройством. Например, для драйвера принтера ядро отвечает за взаимодействие с параллельным портом, а формирование управляющих сигналов для принтера осуществляет демон печати lpd (который использует для этого специальную программу-фильтр, о чем подробнее будет рассказано ниже, в разд. 9.6). Другие примеры драйверов этого типа - драйверы модемов и X-сервер (драйвер видеоадаптера), о котором шла речь в главе 7.
Но надо специально отметить, что во всех трех случаях непосредственное взаимодействие с устройством осуществляет ядро или какой-то модуль ядра. А пользовательские программы взаимодействуют с драйверами устройств через специальные файлы, расположенные в каталоге /dev и его подкаталогах. То есть взаимодействие прикладных программ с аппаратной частью компьютера в ОС Linux осуществляется по следующей схеме:
устройство ‹-› ядро ‹-› специальный файл устройства ‹-› программа пользователя
Такая схема обеспечивает единый подход ко всем устройствам, которые с точки зрения приложений выглядят как обычные файлы.
| Старший номер | Тип устройства |
|---|---|
| 1 | Оперативная память |
| 2 | Дисковод гибких дисков |
| 3 | Первый контроллер для жестких IDE-дисков |
| 4 | Терминалы |
| 5 | Терминалы |
| 6 | Принтер (параллельный разъем) |
| 8 | Жесткие SCSI-диски |
| 14 | Звуковые карты |
| 22 | Второй контроллер для жестких IDE-дисков |
[user]$ cat /proc/devices
Если вы решили подключить к системе какое-то новое устройство, необходимо вначале проверить, что в каталоге /dev имеется специальный файл (или ссылка на специальный файл) для этого устройства. Специальные файлы устройств создаются с помощью команды mknod (но, естественно, использовать команду mknod без необходимости и полного понимания последствий не стоит). Эта команда имеет следующий формат:
mknod [опции] имя_устройства тип_устройства старший_номер младший_номер
где тип_устройства может принимать одно из четырех значений:
• b - блок-ориентированное устройство;
• c - байт-ориентированное (символьное) устройство;
• u - небуферизованное байт-ориентированное устройство;
• p - именованный канал.
Для блок-ориентированных и байт-ориентированных устройств (b, c, u) нужны и старший и младший номера, для именованных каналов номера не используются. В следующем примере создается специальный файл для терминала, подключенного к порту COM3, который в Linux обозначается как /dev/ttyS2:
[root]# mknod -m 660 /dev/ttyS2 c 4 66
(устройства-терминалы представляют собой байт-ориентированные устройства со старшим номером 4 и младшими номерами, которые начинаются с 64).
Но вот о чем стоит подумать, так это о том, как дать пользователям права, необходимые для доступа к устройствам. Эти права устанавливаются через атрибуты специальных файлов. Можно, например, дать всем пользователям полные права (chmod 666) на доступ к таким устройствам, как /dev/cdrom, /dev/floppy, /dev/modem и так далее. Можете поступить иначе, создав группу "cdrom", сделать /dev/cdrom принадлежащим группе cdrom, а потом добавлять пользователей в эту группу по мере необходимости. Аналогичную процедуру можно применить к другим устройствам.
/sbin/kbdrate -s -r 16 -d 500
где опция -s просто подавляет вывод ненужных в данном случае сообщений. Если эту команду выполнить без указания параметров, для скорости повтора и задержки будут установлены значения по умолчанию: для скорости повтора - 10,9 символов в секунду, а для задержки - 250 миллисекунд.
Еще один вопрос, относящийся к настройке клавиатуры, - это способ изменения положения переключателей NumLock, CapsLock и ScrollLock. Для этого можно воспользоваться командой setleds. Например, для того, чтобы переключатель NumLock был по умолчанию включен, добавьте в файл /etc/rc.d/rc.sysinit следующие строки:
for tty in /dev/tty[1-9]*; do
setleds -D +num ‹ $tty
done
Изменение раскладки клавиатуры - это вопрос значительно более сложный. Но, поскольку этот вопрос имеет большое значение как вообще для настройки клавиатуры, так и для решения проблемы русификации, его необходимо рассмотреть подробнее.
И начать придется с краткого изложения проблем кодировки символов.
Рис. 9.1. Структура UNICODE.
В стандарте UNICODE кроме определенного двоичного кода (эти коды принято обозначать буквой U, после которой следуют знак + и собственно код в шестнадцатеричном представлении) каждому символу присвоено определенное имя. В следующей таблице приведено несколько примеров кодов и имен символов из стандарта UNICODE.
Таблица 9.2. Примеры именования кодов UNICODE
| Символ | UNICODE | Название символа (Character Name) |
|---|---|---|
| A | U+0041 | LATIN CAPITAL LETTER A |
| a | U+0061 | LATIN SMALL LETTER A |
| Ю | U+042E | CYRILLIC CAPITAL LETTER YU |
| + | U+002B | PLUS SIGN |
| 1 | U+0031 | DIGIT ONE |
| Ω | U+03A9 | GREEK CAPITAL LETTER OMEGA |
| ╩ | U+2569 | BOX DRAWINGS DOUBLE UP AND HORIZONTAL |
[root]# /etc/rc.d/init.d/keytable start
Оба этих варианта позволяют переключиться на новую раскладку "на ходу".
Если же только откорректировать содержимое файла /etc/sysconfig/keyboard, то перезагрузка таблицы произойдет только после перезапуска компьютера или после выполнения команды (в примере загружается раскладка из файла ru-win.map):
[root]# loadkeys /usr/lib/kbd/keymaps/i386/qwerty/ru-win.map
Впрочем, переключение "на ходу" вряд ли требуется делать, поскольку обычно человек привыкает к одной раскладке, и пальцы сами находят привычные клавиши, так что всякое изменение тут только осложнит работу. Поэтому имеет смысл поэкспериментировать один раз с различными раскладками, выбрать наиболее удобную (считай, привычную) и на этом можно успокоиться.
При установке русифицированных дистрибутивов Linux (по крайней мере Black Cat) обычно выбирается раскладка ru1 (точка на ‹Shift›+‹7›, запятая на ‹Shift›+‹6›). Для тех, кто привык работать в Windows, может оказаться более привычной раскладка как в Windows (в русском регистре точка и запятая находятся рядом с правой кнопкой ‹Shift›). Для таких пользователей имеется раскладка ru_ms. Если вас не удовлетворяют эти варианты, то можете выбрать любую из имеющихся в вашей системе, либо найти что-либо подходящее в Интернет. Предположим, что вы нашли и скачали файл ru_win_ctrl.map.gz от IP Labs (http://www.iplabs.ru/Linux/ru_win_ctrl.map.gz). Остается только положить этот файл в /usr/lib/kbd/keytables/i386/qwerty/, запустить kbdconfig и выбрать ru_win_ctrl.
После установки новой таблицы раскладки клавиатуры иногда возникают затруднения в определении того, какая именно клавиша или комбинация клавиш переключает из режима ввода английских символов в режим ввода русских. Гадать тут не надо, достаточно просмотреть файл таблицы раскладки клавиатуры. Обычно в самом начале файла эта комбинация указывается открытым текстом, правда, в большинстве случаев английским. (Если вы забыли, какая именно таблица загружена, то посмотрите файл /etc/sysconfig/keyboard).
kb mode was XLATE
press any key (program terminates after 10s of last keypress)…
keycode 125 press
keycode 125 release
keycode 126 press
keycode 126 release
keycode 127 press
keycode 127 release
Числа 125, 126, 127 и есть коды этих клавиш. Далее переходим в каталог /usr/lib/kbd/keytables/i386/qwerty, находим файл, который используется в данный момент (что-то типа ru1.map, если в каталоге /usr/lib/kbd/keytables/i386/qwerty вы найдете только ru1.map.gz, то выполните предварительно разархивацию: gunzip ru1.map.gz).
Для того, чтобы заставить клавишу работать как временный переключатель с русского на латинский (пока клавиша удерживается), надо придать ей значение AltGr, а чтобы она использовалась как постоянный переключатель - AltGr_Lock. Находим внутри ru1.map:
keycode 125 =
keycode 126 =
keycode 127 =
и меняем на:
keycode 125 =
keycode 126 = AltGr
keycode 127 = AltGr_Lock
Далее надо изменить установки тех клавиш, которые ранее использовались для переключения. Например, если в качестве постоянного переключателя использовалась клавиша ‹Ctrl› (код клавиши 97), находим строку
keycode 97 =
и вписываем:
keycode 97 = Control
В итоге получаем: клавиша, расположенная возле правой клавиши ‹Ctrl›, - фиксированный переключатель "рус/лат", а та что рядом с правой клавишей ‹Alt› - временный переключатель "рус/лат" (т. е. действующий только на то время, пока удерживается в нажатом положении соответствующая клавиша).
После редактирования сохраняем файл под новым именем (например, mymap.kmap) и записываем это имя в /etc/sysconfig/keyboard.
‹TLDE› = 49;
‹AE01› = 10;
• types
Здесь описываются возможные типы клавиш. Тип клавиши определяет как должно меняться значение, выдаваемое клавишей в зависимости от модификаторов (‹Control›, ‹Shift› и т. п.). Так, например, "буквенные" клавиши относятся к типу ALPHABETIC, что означает, что они имеют разное значение в зависимости от состояния ‹Shift› и ‹Caps Lock›. А клавиша ‹Enter› имеет тип ONE_LEVEL, что означает, что ее значение всегда одно и то же, независимо от состояния модификаторов.
• compat (сокращение от compability)
Здесь описывается "поведение" модификаторов. В модуле XKB имеется несколько внутренних переменных, которые, в конечном счете, и определяют, какой символ будет генерироваться при нажатии клавиши в конкретной ситуации. Так вот, в файлах из каталога compat как раз описывается, как должны меняться эти переменные при нажатии различных клавиш-модификаторов. В этом же разделе обычно описывается и поведение "лампочек-индикаторов" на клавиатуре.
• symbols
Это каталог содержит таблицы, в которых для каждого скан-кода (задаваемого именем скан-кода, определенным в keycodes) перечисляются все значения (symbols), которые должна выдавать клавиша. Естественно, количество различных значений зависит от типа клавиши (которые описываются в types), а какое именно значение будет выдано в конкретной ситуации, определяется состоянием модификаторов и их "поведением" (которое описывается в compat).
• geometry
Здесь описываются варианты "геометрии" клавиатуры, т. е. расположение клавиш на клавиатуре. Эти описания нужны не столько самому X-серверу, сколько прикладным программам, которые рисуют изображение клавиатуры.
Надо сказать, что в каждом из этих каталогов имеется несколько файлов (иногда, довольно много) с разными настройками. Более того, каждый файл внутри себя может содержать несколько блоков (секций, разделов) вида
тип_компонента "имя_блока" {…...};
Поэтому, для того, чтобы выбрать конкретную настройку, ее обычно указывают в виде имя_файла(имя_блока), например, us(pc104). В то же время, обычно один из блоков в файле (не обязательно самый первый) помечается флагом default. Это означает, что если указать только имя файла, то будет выбран именно этот блок.
Полная конфигурация XKB задается в секции ImputDevice, определяющей клавиатуру, файла конфигурирования пакета XFree86, т. е. в файле /etc/X11/XF86Config-4. При этом имеется три способа задания конфигурации клавиатуры в этом файле.
Первый способ задания конфигурации заключается в том, что вы можете указать непосредственно каждый из компонентов, например
Option "XkbKeycodes" "xfree86"
Option "XkbTypes" "default"
Option "XkbCompat" "default"
Option "XkbSymbols" "us(pc104)"
Option "XkbGeometry" "pc(pc104)"
Как легко догадаться, это означает, что:
• описание keycodes берется из файла "xfree86" в подкаталоге keycodes, причем из файла будет выбран тот блок, который помечен в нем флагом default;
• описание types берется из файла "default" в подкаталоге types;
• описание compat берется из файла "default" в подкаталоге compat;
• описание symbols берется из файла "us" в подкаталоге symbols, причем будет выбран блок "pc104";
• описание geometry берется из файла "pc" в подкаталоге geometry, блок "pc104";
Надо заметить, что в любом блоке (в любых компонентах) может встретиться инструкция include "имя_файла(имя_блока)" (естественно, имя_блока может отсутствовать) что означает, что в текущий блок должно быть вставлено другое описание из указанного файла (указанного блока). Поэтому полное описание может неявно включать в себя данные из многих других файлов, кроме тех, которые вы явно укажете в файле конфигурации X-сервера.
Второй способ задания конфигурации клавиатуры заключается в том, что вы можете указать одной инструкцией сразу полный набор настроек. Такие наборы называются keymaps и, также как и обычные компоненты конфигурации XKB, располагаются в отдельных файлах (которые, тоже содержат в себе несколько именованных блоков) в подкаталоге keymap.
Обычно, в каждом блоке в файлах из keymap просто указывается из каких файлов XKB должен извлечь соответствующие компоненты (хотя, в принципе, там может быть и полное описание всех компонентов), например
xkb_keymap "ru" {
xkb_keycodes { include "xfree86" };
xkb_types { include "default" };
xkb_compatibility { include "default" };
xkb_symbols { include "en_US(pc105)+ru" };
xkb_geometry { include "pc(pc102)" };
};
Обратите внимание, что в одной инструкции include может быть указано несколько файлов (блоков) через знак "+". Понятно, что это означает, что должны быть вставлены последовательно все указанные файлы.
Таким образом, в файле конфигурации X-сервера можно вместо пяти компонентов указать сразу один из готовых наборов keymap, например
Option "XkbKeymap" "xfree86(ru)"
Кроме того, эти два способа можно комбинировать. Например, если вы выбрали один из подходящих наборов keymap, но вас не устраивает один из компонентов, например geometry, то в файле конфигурации можно указать
Option "XkbKeymap" "xfree86(ru)"
Option "XkbGeometry" "pc(pc104)"
При этом, в соответствии с первой инструкцией, все компоненты будут взяты из keymap "xfree86(ru)", а вторая инструкция "перепишет" geometry, не затрагивая остальные компоненты.
Третий способ несколько отличается от предыдущих. Набор настроек можно указывать не перечислением компонентов, а с помощью задания "правил" (Rules), "модели" (Model), "схемы" (Layout), "варианта" (Variant) и "опций" (Option).
В этом наборе только Rules представляют собой некий файл (эти файлы тоже находятся в отдельном подкаталоге rules каталога /usr/X11R6//lib/X11/xkb), в котором находится таблица правил - "как выбрать все пять компонентов настроек XKB в зависимости от значений Model, Layout и т. д.". Все остальные параметры представляют собой просто "ключевые слова":
• Model обычно определяет тип "железа" - клавиатуры;
• Layout - язык или, точнее, алфавит, который "навешивается" на кнопки клавиатуры;
• Variant - различные варианты размещения знаков алфавита (заданных Layout'ом);
• Options - обычно меняет "поведение" или "расположение" модификаторов Control и Group (переключатель групп - это переключатель "языка", например, русский/латинский).
По этим словам модуль XKB при старте ищет в таблицах "правил" подходящие файлы настроек (keycodes, types, compat, symbols и geometry). Другими словами, Rules определяет некоторую функцию, аргументами которой являются Model, Layout, Variant и Options, а значение, которое возвращает эта функция, представляет собой полный набор из компонентов настроек XKB - keycodes, types, compat, symbols и geometry (или полная keymap).
Итак, если вы используете третий способ указания конфигурации XKB, то в файле конфигурации X-сервера, надо задать параметры XkbRules, XkbModel, XkbLayout и, если вам нужно что-то не совсем стандартное - XkbVariant и XkbOptions.
Например,
Option "XkbRules" "xfree86"
Option "XkbModel" "pc104"
Option "XkbLayout" "ru"
Option "XkbVariant" ""
Option "XkbOptions" "ctrl:ctrl_ac"
Option "XkbRules" "xfree86"
означает, что модуль XKB должен в соответствии с правилами, описанными в файле ./rules/xfree86, выбрать настройки для клавиатуры типа "pc104" (104 кнопки), русского алфавита (английский алфавит будет включен "по умолчанию"), вариант - "стандартный" (т. е., этот параметр можно было не писать) и, наконец, дополнительные опции для вашей "раскладки клавиатуры" - "ctrl:ctrl_ac".
Что означают различные опции, а также какие "модели" и "схемы" определены в "правилах" (и что они означают), можно посмотреть в файле xfree86.lst (или другом файле *.lst, если вы выбрали "правила", отличные от xfree86), который находится в той же директории, что и файл "правил", т. е. в подкаталоге rules.
Небольшое отступление о клавише - переключателе "рус/лат". В первых вариантах модуля XKB раскладка "русской" клавиатуры включала в себя и "переключатель групп" - рус/лат, "подвешенный" на клавишу CapsLock. С одной стороны это было удобно: в простейшем случае достаточно было выбрать "русскую раскладку" и вы автоматически получали и клавишу для переключения "на русский". Но, с другой стороны, это было неудобно для тех, кто предпочитает в качестве переключателя рус/лат другую клавишу (или комбинацию клавиш). Конечно, выбрать другой переключатель не составляло труда, но при этом оставался и переключатель на CapsLock, что многим не нравилось. Для того, чтобы убрать его, надо было "залезть" в соответствующий файл и вручную подправлять соответствующую раскладку.
В конце концов (начиная с версии 3.3.4) сами разработчики Xfree86 убрали этот "переключатель" из "русской раскладки". Но, в связи с этим появились и некоторые проблемы - теперь клавишу-переключатель надо явно "заказывать" при конфигурировании XKB.
Option "XkbKeymap" "xfree86(ru)"
К сожалению, после исключения CapsLock как переключателя рус/лат из русской раскладки (см. замечание в конце предыдущего раздела) получилось так, что "полная keymap" для русского языка осталась вообще без какого-либо переключателя "по умолчанию". Но вы можете добавить его вручную. Для этого придется найти в файле /keymap/xfree86 блок "ru". И дописать в строчку xkb_symbols ссылку на описание соответствующего переключателя групп. Для CapsLock это будет - group(caps_toggle). То есть, строчка xkb_symbols будет выглядеть как
xkb_symbols {include "en_US(pc105)+ru+group(caps_toggle)"};
Полный список возможных переключателей групп (т. е. возможных переключателей "рус/лат") можно найти в файле /usr/X11R6//lib/X11/xkb/symbols/group (проведите в этом файле поиск по ключевому слову xkb_symbols).
Теперь рассмотрим случай, когда для задания конфигурации клавиатуры используется третий способ - через "правила", "модель", "схему" и т. д. Как было сказано выше: название "правил" (rules) соответствует "архитектуре" (xfree86); "модель" (model) соответствует типу клавиатуры (pc101, pc102 и т.п.); "схема" (layout) отражает "язык" (ru).
Поэтому, подходящая конфигурация будет выглядеть примерно так:
Option "XkbRules" "xfree86"
Option "XkbModel" "pc104"
Option "XkbLayout" "ru"
С помощью строки XkbOptions можно подобрать "поведение" управляющих клавиш. Возможные значения XkbOptions и их смысл можно подсмотреть в файле /rules/xfree86.lst в той части, которая начинается строкой "! option".
Не забудьте, что, как и в предыдущем случае, надо явно выбрать переключатель групп. Для CapsLock это будет
Option "XkbOptions" "grp:caps_toggle"
И, наконец, рассмотрим первый способ - описание отдельных компонентов настройки (keycodes, compat, types, symbols, geometry).
Если вы не знаете с чего начать, подсмотрите соответствующий набор в keymap. Или попробуйте "вычислить" его через rules/model/layout. Чаще всего подойдут следующие значения:
• для keycodes выбрать файл xfree86;
• для types и compat подойдут файлы default ("по умолчанию") или complete ("полная");
• geometry, скорее всего, "pc", а количество кнопок задается названием блока в файле pc - pc(pc101), pc(pc102), pc(pc104). Полный список "геометрий" имеется в файле /usr/X11R6/lib/X11/xkb/geometry.dir.
А вот на symbols обратите особое внимание. Файл symbols/ru описывает только "буквенные" клавиши. Если вы укажете только его, то у вас не будут работать все остальные кнопки (включая Enter, Shift/Ctrl/Alt, F1-F12 и т. д.). Поэтому symbols должен состоять по крайней мере из двух файлов - en_US(pc101) (в скобках - тип клавиатуры) и, собственно, ru. Полный список symbols - в файле /usr/X11R6/lib/X11/xkb/symbols.dir.
Сюда же надо добавить и описание подходящего "переключателя рус/лат" (как уже говорилось, их перечень - в файле symbols/group).
Для первого метода список может выглядеть так
Options "XkbKeycodes" "xfree86"
Options "XkbTypes" "complete"
Options "XkbCompat" "complete"
Options "XkbSymbols" "en_US(pc101)+ru+group(alt_shift_toggle)"
Options "XkbGeometry" "pc(pc101)"
Если вам хочется задать дополнительные изменения "поведения" управляющих клавиш (то, что в третьем методе задается XkbOptions), то подсмотрите подходящую "добавку" в rules/xfree86.lst и "приплюсуйте" ее в строчку XkbSymbols. Например,
XkbSymbols "en_US(pc101)+ru+group(shift_toggle)+ctrl(ctrl_ac)"
На этом мы ограничим описание методов настройки клавиатуры, а точнее - настройки модуля XKB. Если вы хотите разобраться с этим детальнее, то обратитесь к исходному материалу И. Паскаля [П11.6].
[user]$ cat /proc/interrupts
или просмотрев файл /proc/interrupts.
В большинстве случаев IRQ4 используется первым последовательным портом (/dev/ttyS0), IRQ3 - вторым последовательным портом (/dev/ttyS1, предполагается, что у вас есть такие устройства, если нет - вы можете использовать их IRQ). IRQ5 используется некоторыми SCSI-устройствами, а IRQ12 - некоторыми сетевыми картами. Если ваша сетевая карта использует IRQ12, а ваша мышь - типа PS/2, то у вас будут проблемы, поскольку вы вынуждены будете использовать IRQ12 только для порта PS/2. Для мышей ATI-XL, Inport и Logitech ядро по умолчанию использует прерывание IRQ5, так что если вы не хотите перекомпилировать ядро, вам придется использовать для мыши именно это прерывание. Впрочем, последние версии ядра позволяют задать опции командной строки, определяющие прерывание, которое будут использовать мыши типа Inport и Logitech. Мыши типа PS/2 всегда используют прерывание IRQ12, и не существует способа изменить это, так что в случае конфликтов надо перенастраивать другие периферийные устройства.
MOUSETYPE="Microsoft"
XMOUSETYPE="Microsoft"
XEMU3=yes
Естественно, что тип мыши должен соответствовать вашей мыши, у меня, например, это "PS/2".
Чтобы вырезать и вставлять куски текста в консоли, должен быть установлен сервер мыши gpm.
Проверьте, что сервер мыши gpm запущен, для чего дайте команду:
[user]$ ps -A | grep gpm
Если в результате вы получите непустую строку, то драйвер работает. Если же процесс gpm не найден, надо проверить наличие скрипта /etc/rc.d/init.d/gpm, в котором должна найтись строка вызова демона gpm. Эта строка может иметь примерно такой вид:
daemon gpm -t $MOUSETYPE -d 2 -a 5 -B 132 # two-button mouse
(смысл параметров см. на странице man gpm).
Если сервер gpm работает, то выделять и вставлять куски текста можно следующим образом. Нажмите левую кнопку и выделяйте текст. Когда дойдете до конца нужного куска текста, отпустите кнопку. Потом нажмите правую кнопку в том месте, где вы хотите осуществить вставку. Можно даже в другой виртуальной консоли. То же самое можно проделать в X Window, но для вставки нужно нажимать среднюю клавишу, или обе, если у вас двухкнопочная мышь.
| Тип жесткого диска | Старший номер | Наименование устройства | Младший номер | |
|---|---|---|---|---|
| Диск 1 | Диск 2 | |||
| IDE на 1 контроллере | 22 | /dev/hda и /dev/hdb | 0 … 63 | 64 … 127 |
| IDE на 2 контроллере | 33 | /dev/hdc и /dev/hdd | 0 … 63 | 64 … 127 |
| SCSI | 8 | /dev/sd | 0 … 15 | 16 … 31 |
[root]# mkfs -t тип /dev/hda3
где тип - тип создаваемой файловой системы, например, ext2, а /dev/hda3 - указание форматируемого раздела диска[21].
Чтобы использовать mkfs, не обязательно иметь права суперпользователя, достаточно иметь право записи в файл соответствующего устройства.
Внимание!
Команда mkfs очень опасна! Она перезаписывает область диска, в которой хранятся inodes. Так что если вы ошибетесь в указании раздела диска, вы можете уничтожить ценные для вас данные.
После создания файловой системы ее надо смонтировать в общее дерево каталогов. Делается это с помощью команды mount, которую мы уже рассматривали, так что повторяться не стоит. Единственное, что можно отметить, так это то, что смонтировав первый раз диск или раздел, в котором вы только что создали файловую систему, вы увидите, что она пуста, т. е. не содержит никаких файлов и каталогов, кроме единственного каталога с именем lost+found. Этот каталог должен существовать в каждой файловой системе, поскольку он выполняет служебную роль: при проверке файловой системы командой fsck в этом каталоге собираются "потерянные" файлы и подкаталоги. О команде fsck мы еще поговорим, но до этого рассмотрим кратко вопрос об оптимизации работы жесткого диска, которая выполняется с помощью команды hdparm.
[user]$ hdparm опция устройство
Если после указания опции не указывать нового значения для соответствующего параметра, то будет просто выдано его действующее значение. А если запустить команду без указания опций вообще, то будут выведены значения основных параметров, действующих при работе с данным устройством (IDE-диском). Вывод выглядит примерно следующим образом:
[user]$ hdparm /dev/hda
/dev/hda:
multcount = 0 (off)
I/O support = 0 (default 16-bit)
unmaskirq = 0 (off)
using_dma = 0 (off)
keepsettings = 0 (off)
nowerr = 0 (off)
readonly = 0 (off)
readahead = 8 (on)
geometry = 1870/255/63, sectors = 30043440, start = 0
Обычно это значения, устанавливаемые по умолчанию. Как видите, большинство возможностей просто отключено. Это и естественно, поскольку разработчики дистрибутивов выбирают такие значения параметров, при которых будут работать любые типы дисков. А уж об оптимизации параметров для вашего диска придется позаботиться вам самим!
Для начала посмотрим, какую еще информацию о диске и параметрах интерфейса можно получить с помощью команды hdparm.
• Опция -i позволяет получить информацию о модели жесткого диска, его серийном номере и некоторых других параметрах.
• Опция -g выводит информацию о геометрии диска (число цилиндров/головок/секторов), его размере (числе секторов), и начальном смещении (номер сектора, с которого начинается используемое пространство, обычно 0).
• Опция -T позволяет протестировать скорость обмена данными с кэшем (т. е. скорость работы подсистемы память-ЦПУ-буфер кэш).
• Опция -е служит для тестирования скорости непосредственно записи на диск (а не в кэш-память).
Поскольку опции в команде можно комбинировать, давайте, выполним команду
[root]# hdparm -Tt /dev/hda
Результатом будут примерно такие строки (для вашего диска цифры, конечно, будут другими):
/dev/hda:
Timing buffer-cache reads: 128 MB in 1.34 seconds = 95.52 MB/sec
Timing buffered disk reads: 64 MB in 17.86 seconds = 3.58 MB/sec
Эти данные позволяют судить о производительности подсистемы ввода-вывода вашего жесткого диска. Если ваш диск не очень давнего выпуска, можно попытаться поднять производительность этой подсистемы, используя следующие опции команды hdparm:
• С помощью опции -c вы имеете возможность воздействовать на формат обмена данными между процессором и жестким диском. По умолчанию используется значение 16 бит, но если после -c указать 1 или 3, то произойдет переключение на один из режимов 32-битной передачи. Режим, имеющий номер 3, считается более надежным, хотя и работает чуть медленнее.
• Используя опцию -d 1 можно активизировать режим DMA (Direct Memory Access - прямой доступ к памяти). Однако, чтобы это имело смысл, ядро должно быть скомпилировано с поддержкой DMA.
• Опция -m задает многосекторный режим ввода-вывода. Число после опции указывает максимальное количество секторов, которые можно передать вместе. Это ускоряет передачу больших файлов. Максимально допустимое значение этого параметра для вашей модели жесткого диска указано под ключевым словом MaxMultSect в перечне параметров, выдаваемых командой hdparm -i.
• С помощью опции -p можно настраивать режим PIO (программируемый ввод-вывод). Чем выше число (можно использовать значения в интервале от 0 до 5), тем быстрее осуществляется передача данных. Повышение этого параметра ничего не дает при работе с медленным диском, но повышает опасность потери данных, так что подходите к его использованию осторожно.
• Включение опции -u приводит к тому, что снимается запрет на обработку других прерываний, установленный на время обработки дискового прерывания. Это означает, что во время ожидания запрошенных с диска данных ядро сможет принять и обработать другие запросы (например, полученные от сетевых устройств или модема). Это должно положительно сказаться на общей производительности системы, но не все аппаратные конфигурации способны работать в таком режиме!
Давайте попробуем осторожно улучшить настройки подсистемы ввода-вывода данных для жесткого диска. Изменяйте значения параметров по одному, и после каждого изменения проверяйте результат с помощью команды
hdparm -tT /dev/hda.
В случае зависания компьютера или каких-то других неприятностей (вы к ним готовы, не так ли!), перезагружайте компьютер (снова в однопользовательском режиме) и пробуйте другое значение для параметра, изменявшегося последним. Поскольку задаваемые вами установки нигде не зафиксировались, вы будете каждый раз начинать с одной и той же точки. Приведу для иллюстрации тот результат, на котором я решил остановить эксперименты:
[root]# hdparm -X66 -d1 -u1 -m16 -c3 /dev/hda
/dev/hda:
setting 32-bit I/O support flag to 3
setting multcount to 16
setting unmaskirq to 1 (on)
setting using_dma to 1 (on)
setting xfermode to 66 (UltraDMA mode2)
multcount = 16 (on)
I/O support = 3 (32-bit w/sync)
unmaskirq = 1 (on)
using_dma = 1 (on)
[root]# hdparm -tT /dev/hda
/dev/hda:
Timing buffer-cache reads: 128 MB in 1.43 seconds =89.51 MB/sec
Timing buffered disk reads: 64 MB in 3.18 seconds =20.13 MB/sec
Как видите, скорость обмена данными возросла у меня примерно в 6 раз!
Как уже было сказано, после выполнения команды hdparm с любым набором опций вновь установленные значения действуют только в текущем сеансе работы системы, а после перезагрузки оптимизированные установки будут потеряны. Поэтому после завершения экспериментов надо еще записать вызов команды с подобранными значениями опций в один из системных скриптов загрузки, например, в /etc/rc.d/rc.sysinit (в ALT Linux Junior 1.0 для настройки IDE-дисков имеется специальный скрипт /etc/rc.d/scripts/idetune). Желательно перед этим убедиться, что система ведет себя стабильно и даже выполнить команду проверки состояния файловой системы на данном устройстве (см. разд. 9.5.4).
В заключение заметим, что кроме опций, влияющих на производительность подсистемы ввода-вывода (имейте в виду, что далеко не все они были рассмотрены выше), команда hdparm имеет еще ряд опций, позволяющих управлять энергопотреблением и другими характеристиками дисковой подсистемы. Полный список всех опций команды hdparm смотрите на соответствующей man-странице (man 8 hdparm).
[root]# fsck [опции] [-t fstype] [-fs-options] filesystem
где fstype - тип проверяемой файловой системы, а в качестве filesystem можно указать либо имя устройства (например, /dev/hda4), либо точку монтирования (/, /opt, /mnt/wint) (Примечание: в man-странице по fsck сказано, что можно еще использовать метку (label) файловой системы, либо UUID, но, что такое два последних варианта, я пояснить не берусь).
Вообще говоря, команда fsck не является самостоятельной утилитой, она просто предоставляет единый интерфейс вызова специализированных программ для проверки файловых систем разных типов. Эти программы называются fsck.fstype (например, fsck.ext2) и команда fsck при запуске производит поиск соответствующей специфической программы сначала в /sbin, затем в /etc/fs и /etc, и, наконец, в каталогах, перечисленных в переменной PATH. Опции, указанные после двойного дефиса, передаются команде fsck.fstype.
Из собственных опций команды fsck (они указываются сразу после имени) стоит отметить опции -A, -a, -r и -N. Если указать опцию -a, то при обнаружении ошибок в файловой системе будет производиться их автоматическое исправление. Указание опции -A приводит к тому, что команда просмотрит файл /etc/fstab и за один прогон проверит все перечисленные в нем файловые системы. Опция -r переключает команду в интерактивный режим работы, т. е. перед тем, как произвести какие-то изменения, будет выдаваться запрос на подтверждение действия. Задание опции -N приводит к тому, что никаких изменений в файловой системе производится не будет, будет только сказано, что должно быть сделано.
При загрузке ОС Linux в некоторых случаях происходит автоматический запуск команды fsck. Основных причин для выполнения fsck на этапе загрузки системы две: некорректный выход из системы в предыдущий раз (например, резкое отключение питания или неисправность аппаратуры) и достижение заданного порога для количества выполнений операции размонтирования файловой системы. При каждом выполнении операций монтирования-размонтирования файловой системы в ее суперблоке (см. главу 16) делаются специальные отметки. Если последнее размонтирование завершилось корректно, то файловая система помечается как "чистая" (clean) и число операций монтирования-размонтирования увеличивается на единицу. Если корректного размонтирования не было, то файловая система помечена как "грязная" (dirty). На этапе загрузки ОС проверяется, являются ли все файловые системы "чистыми", и если нет, то для "грязных" систем выполняется команда fsck. Кроме того, даже если все системы "чистые", но достигнут порог для числа операций монтирования/размонтирования, запускается та же команда с опцией -A. Как было сказано выше, при этом производится проверка всех файловых систем, перечисленных в файле /etc/fstab. Порядок, в котором проверяются файловые системы, определяется числами, указанными в последнем поле каждой строки файла /etc/fstab. Файловые системы проверяются в порядке возрастания этих номеров. Первым всегда следует проверять корневой раздел. Если две файловые системы расположены на разных дисках, им может быть присвоен один и тот же номер. Это приводит к тому, что они будут проверяться одновременно, а, значит, сократится общее время проверки. Но если файловые системы расположены на одном и том же физическом устройстве (например, в разных разделах), то совпадение номеров вызовет только замедление процедуры проверки, так как головки диска должны будут совершать лишние перемещения.
Иногда требуется запустить fsck и вручную. При этом лучше всего предварительно перевести систему в однопользовательский режим и размонтировать проверяемые файловые системы (или смонтировать их в режиме "только для чтения"). Например, запуск fsck в разделе /usr обычно требуется тогда, когда файловая система разрушена и тогда любые дальнейшие действия в разрушенной системе могут привести к полному краху, а, значит, fsck должна быть запущена как можно скорее. Обычно о необходимости перехода в однопользовательский режим говорит также то, что fsck не может автоматически восстановить файловую систему при загрузке. Такое случается относительно редко, обычно при выходе из строя жесткого диска или при попытках установить какую-либо экспериментальную версию ядра, но все же об этом надо знать, чтобы не растеряться в затруднительной ситуации.
К сожалению, в процессе восстановления файловой системы приходится полностью полагаться на возможности программы fsck. Начинающему пользователю не стоит самостоятельно пытаться произвести какие-то действия в поврежденной файловой системы, потому что вы рискуете перевести ядро в паническое состояние (kernel panic).
Если fsck обнаруживает "потерянные файлы", т. е. такие файлы, которые не указаны ни в одном из каталогов, она помещает их в каталог lost+found на верхнем уровне проверяемой файловой системы. Поскольку имена файлов регистрируются только в родительском каталоге, то в данном случае их "истинные" имена неизвестны, и команда присваивает им имена, совпадающие с номерами их индексных дескрипторов.
# ЛОКАЛЬНЫЙ djet500
lp|dj|deskjet:\
:sd=/var/spool/lpd/dj:\
:mx#0:\
:lp=/dev/lp0:\
:sh:
Каждый элемент файла /etc/printcap начинается со строки, задающей имена принтера (их может быть несколько), разделяемые вертикальной чертой. Затем следует ряд параметров конфигурации, разделенных двоеточиями (обычно каждый параметр заключается в двоеточия с обеих сторон). Каждый параметр имеет вид xx=строка или xx#число, где xx - двухсимвольное имя параметра, а строка и число - присваиваемые ему значения. Если никакого значения не присваивается, переменная является булевой, и ее присутствие означает "истина". Допускаются пустые операторы: два рядом стоящих двоеточия. Строки, начинающиеся символом #, содержат комментарий. Обратная косая черта в конце строки означает, что в следующей строке идет продолжение текущей строки.
Приведенный выше пример записи определяет принтер называемый lp, dj, или deskjet, его спул размещается в директории /var/spool/lpd/dj, максимальный размер задания не имеет ограничения, печать производится на устройство /dev/lp0, и страница с заголовком (с именем пользователя, который отправил задание на печать, и другой информацией) не добавляется в начало задания печати.
Подробнее о том, как создавать такие записи, можно прочитать на справочной странице для printcap. Но о некоторых самых важных (и обязательных) параметрах стоит рассказать здесь, хотя бы просто для примера.
• sd=буферный_каталог. У каждого принтера должен быть свой буферный каталог. Все буферные каталоги должны находиться в одном каталоге (обычно это /var/spool/lpd) и иметь имена, совпадающие с полными именами обслуживаемых ими принтеров. Буферный каталог нужен даже в том случае, если описываемый принтер подключен к другой машине: задания находятся на локальной машине до тех пор, пока они не будут переданы на печать.
• lp=имя_устройства. В таком виде этот параметр должен задаваться только для локального принтера. Если принтер находится на другой машине, вместо имени устройства указывается имя уникального файла, который существует и расположен на локальном диске. Чтобы принтер мог возвращать через указанный файл информацию о своем состоянии, необходимо задать в элементе булеву переменную rw, чтобы устройство было открыто и для чтения, и для записи.
• rm и rp. Во многих случаях в качестве печатающего устройства используется сетевой принтер, подключенный к какому-то другому компьютеру в локальной (или даже глобальной) сети. В таком случае на вашей машине в файле /etc/printcap должны присутствовать две переменные rm и rp. В переменной rm определяется машина, на которую должны посылаться задания, а переменная rp задает имя принтера на этой машине.
• mx. Переменная mx используется для задания максимального размера (в байтах) печатаемого файла. Этот параметр может использоваться системными администраторами для того, чтобы предотвратить отрицательные последствия распространенной ошибки начинающих пользователей, состоящей в посылке на печать двоичных файлов (которые обычно имеют большую длину). Поскольку такие файлы могут содержать произвольные символы, в том числе символы, которые служат в качестве управляющих команд для принтера, печать двоичных файлов может приводить, например, к неоправданному расходованию бумаги и другим неприятным последствиям. На локальном принтере персонального компьютера этот параметр можно и не задавать. Я привел его для того, чтобы отметить, что для этого параметра, как и для всех других числовых параметров, значение должно отделяться от имени параметра знаком #, например, mx#0. Если написать mx=0, то такая запись не вызовет сообщений об ошибке, но она не изменяет значения переменной mx.
Еще один очень существенная группа параметров - это параметры of, if и nf. Но о них надо поговорить особо, что мы и сделаем чуть ниже в подразделе "Фильтры". Однако вначале рассмотрим программу, которая позволяет осуществить настройку принтера и создать файл /etc/printcap/.
Рис. 9.2. Основное окно printconf-gui
Как видите, в меню программы имеется команда Новая, после выбора которой мы видим следующее окно (рис. 9.3), в котором можно ввести имя очереди (которое будет и именем принтера, а поэтому должно быть уникальным), а также его синонимы (aliases).
Рис. 9.3. Задание имени очереди
Рис. 9.4. Выбор типа принтера и задание устройства
Щелкнув по команде меню Тип очереди в левом поле окна, вы получите возможность выбрать тип принтера и задать имя специального файла устройства. Тип очереди выбирается из выпадающего списка. Можно выбрать один из следующих типов:
• Локальный принтер - принтер, непосредственно присоединенный к вашему компьютеру через параллельный или USB-порт;
• Unix Printer (lpd Spool) - принтер, присоединенный к другому UNIX-компьютеру, доступ к которому осуществляется по сети TCP/IP (например, принтер, присоединенный к другому Linux-компьютеру);
• Windows Printer (SMB Share) - принтер, присоединенный к другой системе, работающей под ОС Windows или имеющей установленный сервер Samba (SMB);
• Novell Printer (NCP Queue) - принтер, присоединенный к другой системе, использующей технологию Novell's NetWare и протокол NCP;
• JetDirect Printer - принтер, непосредственно подключенный к сети, а не к какому-то компьютеру.
Мы рассмотрим только случай подключения локального принтера, а остальные варианты вы можете изучить с помощью имеющейся в программе подсказки (экранная кнопка Справка).
После выбора типа принтера и указания имени устройства щелкните по строке Printer Driver в левой колонке, и вы увидите список известных программе драйверов, упорядоченный по фирмам-производителям (рис. 9.5):
Рис. 9.5. Выбор драйвера
Если щелкнуть по треугольному значку слева от имени фирмы, раскроется список драйверов для принтеров данного производителя. На рис. 9.6 видна часть списка принтеров, производимых фирмой Hewlett Packard.
Рис. 9.6. Принтеры фирмы Hewlett Packard
Щелчок по кнопке с надписью Printer Notes… приводит к появлению окна с краткой информацией о выбранном принтере (рис. 9.7).
Рис. 9.7. Заметки о принтере
Ну, и последнее окно в этом ряду (рис. 9.8) позволяет задать некоторые параметры для выбранного принтера: режим печати (нормальный, экономичный, высокое качество), разрешение печати, размер бумаги, и т. п.
Завершив ввод, нажмите кнопку OK. После этого введенные вами данные будут сохранены в базе данных в файле /etc/printcap.
Команда Правка основного меню программы позволяет таким же способом отредактировать установки для принтера, который уже был описан ранее.
После того, как вы добавили в базу данных новый принтер или отредактировали установки ранее заведенного, обязательно необходимо перезапустить демон lpd. Для этого можно воспользоваться кнопкой Применить в основном окне программы.
Рис. 9.8. Задание параметров печати
Теперь можно попытаться распечатать пробную страничку, воспользовавшись командой Тест главного меню программы. Вам будет предложено 3 варианта тестовой страницы: Print PostScript Test Page, Print A4 PostScript Test Page, или Print ASCII Test Page. Скорее всего, тестовая страница у вас распечатается без проблем. Но если вы попробуете распечатать страницу текста из какого-либо приложения, тем более, если используются разные шрифты, да еще с кириллицей, то результат, к сожалению, может оказаться не таким радующим. Дело в том, что мы пока настроили только "нижний" слой подсистемы печати, обеспечивающий передачу потока байт от ядра ОС в параллельный порт или на сетевой принтер. Но проблема управления самим принтером (а не параллельным портом) пока не решена. В системе LPD эта проблема решается с помощью фильтров.
:if=/var/spool/lpd/dj/filter:\
Если никакого фильтра вообще не задано, то вывод на печать может выглядеть очень некрасиво. Например, при печати обычного текстового файла вывод может выглядеть примерно так:
This is line one.
This is line two.
This is line three.
Печать файла в формате PostScript выдаст листинг команд PostScript, напечатанных с этим "лестничным эффектом", а не полезный вывод. В руководстве "Printing HOWTO" приводится следующий пример простого фильтра, предназначенного только для того, чтобы устранить "лестничный эффект":
#!perl
# Предыдущая строка должна содержать полный путь к perl
# Скрипт должен быть исполнимым:
chmod 755 filter
while(‹STDIN›){chop $_; print "$_\r\n";};
# вы можете также добавить в конец прогон страницы:
print "\f";
Этот текст надо сохранить в виде файла /var/spool/lpd/dj/filter, после чего будут нормально печататься обычные текстовые файлы.
Но печать простых ASCII-файлов - это только частный случай печати. В большинстве случаев в настоящее время печатаются файлы в других форматах, например, PostScript. Проблема вывода таких файлов на печать тоже решается путем использования фильтра, только гораздо более сложного. Таких фильтров разработано уже достаточно много, но самый важный из них - программа ghostscript.
[user]$ gv filename.ps
Если вы при этом увидите на экране весь текст из файла filename.ps, вы можете попытаться отпечатать файл и на принтере. Если же вместо текста увидите пустой лист или шрифт вам не нравится, продолжайте экспериментировать с настройкой шрифтов. Но предварительно прочитайте статью [П11.12], которая послужила основой для моего рассказа о шрифтах для Ghostscript, и в которой вы найдете несколько дополнительных подсказок. Кроме того, в Интернете имеются два очень полезных ресурса [П11.13] и [П11.14], куда будет не вредно заглянуть.
Рис. 9.9. Запуск программы sndconfig
Для этого она вызывает утилиту isapnptools. Если автоматически определить карту не удается, вам придется самому выбрать тип карты из списка (рис. 9.10).
Рис. 9.10. Выбор типа звуковой карты
Далее программа спросит вас о таких установках звуковой карты, как адрес порта ввода/вывода (I/O base address), IRQ, DMA, и 16-bit DMA (рис. 9.12). Будьте готовы ответить на эти вопросы. Затем программа попробует воспроизвести 2 музыкальных фрагмента, после каждого из которых спросит вас, слышали ли вы что-нибудь. Если вы ответите положительно, будет создан файл /etc/modules.conf, и вам остается только установить программу-проигрыватель, вроде xmms (о программах воспроизведения чуть позже, в гл. 15).
Рис. 9.11. Выбор параметров звуковой карты
У меня установка звуковой карты и программы x11amp (с дистрибутивного диска) прошли почти без запинки (пришлось только подобрать порт, предлагаемое по умолчанию значение почему-то оказалось неподходящим), после чего я смог прослушивать записи из mp3-файлов так же, как делал это раньше под Windows с помощью winamp. Кстати, программа x11amp теперь называется xmms.
Если у вас возникнут какие-то затруднения, обратитесь к "Звук в Linux HOWTO" [П11.15].
[root]# cd /dev
[root]# ln -s hdc cdrom
где вместо hdc вы, естественно, должны указать ваш CD-дисковод. Если не знаете, что тут указать, то внимательно просмотрите те сообщения, которые Linux выдает при загрузке. Для этого не требуется перезагружаться, протокол загрузки сохранен в файле /var/log/dmesg и выдается на экран по команде dmesg.
Рис. 9.12. CD Player
После этого можно запустить программу управления проигрыванием CD-дисков, например xplaycd. В графической оболочке KDE имеется простой проигрыватель CD-дисков с названием "CD Player" (рис. 9.12). Вызвать его можно через меню оболочки KDE.
mount -t vfat /dev/sda4 /mnt/zip.
Может оказаться, что команда insmod ppa не срабатывает (например, если не скомпилирован модуль поддержки ppa). В этом случае после выполнения команды insmod ppa появляется сообщение об ошибке, и получить доступ к Zip-диску этим способом не удается. У меня такая ситуация возникла после перехода с версии 5.2 дистрибутива Black Cat на версию 6.02.
Тем не менее, мне удалось получить доступ к Zip-дискам. Я нашел пакет lomega версии 1.0.1 (обратите внимание на название программы - lomega, а не iomega), созданный Джоном Хоком (John Hawk, e-mail: visionary@gtemail.net). Этот пакет дает возможность работать под Linux с дисками Zip и/или Jaz фирмы Iomega. После обычной процедуры установки tar-gz-пакета (которая выполнялась с правами суперпользователя), мне легко удалось (все еще с правами суперпользователя и при условии, что в дисководе имеется носитель) смонтировать ZIP-диск.
Для того, чтобы монтирование дисков могли выполнять обычные пользователи, необходимо (от имени root) выполнить следующие команды:
[root]# chown root:root /directory/lomega.
[root]# chmod +s /directory/lomega.
Помимо обычного способа доступа к диску командами mount/umount, можно запустить отдельную программу /usr/local/bin/lomega. Запускается она только в графическом режиме и представляет собой интерфейс для работы с Zip-диском. С помощью этой программы можно смонтировать и размонтировать Zip-диск, защитить диск от записи или снять эту защиту, а также извлечь носитель из дисковода простым щелчком мыши по соответствующей кнопке. Отметим только, что для того, чтобы установить защиту от записи, необходимо размонтировать диск.
В окне программы можно увидеть статус диска (смонтирован, размонтирован, защищен ли от записи), просмотреть содержимое файловой системы и отдельно - файлы на Zip-диске, а также сделать back-up выбранных файлов. Для этого надо просто отметить нужные файлы в окне программы и нажать экранную кнопку Back Up. После этого будет выведено диалоговое окно, в котором вы можете изменить предлагаемые по умолчанию параметры команды архивации tar. Таким образом, программа lomega предоставляет удобный интерфейс для архиватора tar.
Щелкнув правой кнопкой мыши в окне программы, вы получите выпадающее меню, с помощью которого можно выполнить много разных команд, в частности, удалить некоторые файлы и каталоги. При этом удаляемые файлы фактически не уничтожаются, а просто перемещаются в "корзину" (trash), откуда их, при необходимости, можно еще восстановить. Однако эта возможность сохраняется только до тех пор, пока вы не опустошили корзину командой "Empty Trash", которую можно вызвать через то же выпадающее меню.
Программа lomega использует конфигурационный файл /etc/lomega.conf. Структура этого файла подобна структуре файла /etc/fstab и не требует подробных пояснений.
При запуске программы можно задать в командной строке следующие опции:
• -e - открывает окно файлового менеджера;
• -v - просто выводит версию программы;
• /dev/sda - указывает имя используемого устройства (должно иметься в файле lomega.conf).
Помимо двух уже описанных, имеется еще один способ получения доступа к Zip-диску из Linux: с помощью пакета mtools. Этот пакет, конечно, необходимо предварительно установить, а затем добавить следующую строку в файл /etc/mtools.conf:
drive z: file="/dev/sda4" exclusive
И все же основным способом подключения Zip-дисковода остается первый из трех описанных - с помощью модуля ppa. Упомянутые выше затруднения возникли у меня только с одной версией дистрибутива. После перехода на Red Hat 7.1 и ALT Linux Junior 1.0 (на двух разных компьютерах) я без затруднений подключаю Zip-диски стандартным способом.
[root]# rpm -i имя_rpm-архива
Если у вас была установлена предыдущая версия пакета, то в простейшем случае надо дать команду следующего формата:
[root]# rpm -U -force имя_rpm-архива
Здесь параметр -U говорит программе, что надо произвести обновление (upgrade) пакета, а опция -force требует безусловно (и без лишних вопросов) обновить все входящие в пакет файлы. Заметьте, что это очень сильное требование, и в некоторых случаях может быть лучше сохранить какие-то (например, конфигурационные) файлы от предыдущей версии. Если установка проходит нормально, и никаких дополнительных сообщений не появляется, то после завершения работы программы (после появления приглашения оболочки) вы можете пользоваться вновь установленным пакетом.
К сожалению, не всегда все так просто. Приведу конкретный пример. У меня был установлен RedHat Linux версии 5.2, причем программа Midnight Commander (mc) была версии 4.1.36. На ftp-сервере я увидел версию 4.5.30 этой программы (пакет mc-4.5.30-12.i386.rpm) и, естественно, решил ее поставить. Однако оказалось, что для этого необходимо установить еще 4 других пакета, о чем rpm мне и сообщила:
ошибка: неудовлетворенные зависимости:
redhat-logos нужен для mc-4.5.30-12
libglib-1.2.so.0 нужен для mc-4.5.30-12
libc.so.6(GLIBC_2.1) нужен для mc-4.5.30-12
libc.so.6(GLIBC_2.0) нужен для mc-4.5.30-12
Это не удивительно, если вы вспомните, что и при первоначальной установке Linux программа инсталляции тоже проверяла взаимозависимости пакетов и предлагала установить недостающие. Однако в случае инсталляции с CD-ROM все необходимые пакеты находятся на том же диске, а здесь мне пришлось вначале поискать нужные пакеты. Два пакета (redhat-logos-1.0.5-1.noarch.rpm и glibc-2.1.1-6.i386.rpm) я нашел без труда, после чего rpm перестала просить и GLIBC_2.0. А вот с libglib.so.1 вышло сложнее. Во-первых, я никак не мог найти пакета с таким названием. Как оказалось, такого пакета и не существует, файл libglib.so.1 входит в состав пакета glib-1.0.6-3.i386.rpm.
Программа rpm позволяет выяснить, какие файлы установит тот или иной пакет. Для этого надо дать следующую команду (только учтите, что текущим должен быть каталог, содержащий интересующий вас пакет):
[root]# rpm -qpl имя_rpm-архива
А для получения информации о том, для чего служит ПО, содержащееся в rpm-пакете, используйте команду
[root]# rpm -qpi имя_rpm-архива
Дело в том, что файлы RPM кроме собственно архива файлов содержат информацию о пакете, включая имя, версию и краткое описание. С помощью той же программы rpm вы можете просмотреть эту дополнительную информацию. Например, для пакета glib-1.0.6-3.i386.rpm вывод команды
[root]# rpm -qpi glib-1.0.6-3.i386.rpm
будет примерно таким:
Name: glib Relocations: (not relocateable)
Version: 1.0.6 Vendor: Red Hat Software
Release: 3 Build Date: Суб 10 Окт 1998 04:49:03
Install date: (not installed)
Build Host: porky.redhat.com
Group: Libraries Source RPM: glib-1.0.6-3.i386.rpm
Size: 55305
Packager: Red Hat Software ‹bug@redhat.com›
Summary: Handy library of utility functions
Description: Handy library of utility functions. Development libs and headers are in gtk+-devel.
Если дать команду:
[root]# rpm -qpl glib-1.0.6-3.i386.rpm
будет выдан список входящих в пакет файлов с указанием того, куда они будут установлены:
/usr/lib/libglib.so.1
/usr/lib/libglib.so.1.0.6
RPM также предоставляет мощную систему запросов по установленным в системе пакетам. По команде
[root]# rpm -qа
вы получите перечень всех установленных в системе пакетов (перечень будет очень большим, так что лучше сразу направить вывод в фильтр more или в файл, который потом просматривать с помощью less или встроенной программы просмотра из оболочки Midnight Commander). Вы можете искать информацию об отдельном пакете или об отдельных файлах. Например, вы можете легко найти, какому пакету принадлежит файл и откуда появился. Команда
[root]# rpm -qf /etc/bashrc
сообщит: bash-1.14.7-16.
Если вы беспокоитесь о том, что случайно удалили важный файл из установленного пакета, просто проверьте это:
[root]# rpm -Va
Вы будете оповещены об любых аномалиях. Потом можно переустановить пакет, если это необходимо. Любые конфигурационные файлы будут сохранены.
Как видите, rpm это очень полезная утилита, и у нее имеется много разных опций. Выше приведено только несколько примеров. Всего rpm имеет 16 основных режимов работы, которые можно объединить в 6 групп (после двоеточия приводится формат команды для соответствующего режима).
Запросы.
• Запрос: rpm [-query] [queryoptions]
• Показать метки запросов (Querytags): rpm [-querytags]
Установка и поддержка установленных пакетов.
• Установка: rpm [-install] [installoptions] [package_file]+
• Обновление: rpm [-freshen|-F] [installoptions] [package_file]+
• Деинсталляция: rpm [-uninstall|-e] [uninstalloptions] [package]+
• Проверка: rpm [-verify|-V] [verifyoptions] [package]+
Подписи (пакеты подписываются электронной цифровой подписью в формате PGP, с целью обеспечения неизменяемости и сохранения авторства пакетов).
• Проверка подписи: rpm [-verify|-V] [verifyoptions] [package]+
• Переподписывание: rpm [-resign] [package_file]+
• Добавление подписи: rpm [-addsign] [package_file]+
Работа с базой.
• Инициализация базы: rpm -i [-initdb]
• Обновление базы (Rebuild Database): rpm -i [-rebuilddb]
Создание rpm-пакетов.
• Создать пакет: rpm [-b|t] [package_spec]+
• Перекомпилировать пакет: rpm [-rebuild] [sourcerpm]+
• Скомпилировать пакет из tar-архива: rpm [-tarbuild] [tarredsource]+
Разное.
• Показать конфигурацию программы rpm: rpm [-showrc]
• Задать пользователей: rpm [-setperms] [package]+
• Задать группы: rpm [-setgids] [package]+
Подробное описание всех возможностей команды rpm выходит за рамки нашей книги Его вы можете найти в RPM-HOWTO, на страницах man и info. Кроме того, большой раздел о программе rpm имеется в книге [П1.3].
Примечание
Как и другие программы для Linux, программа rpm постоянно развивается и совершенствуется. При этом при замене версии этой программы могут возникнуть трудности с установкой пакетов, созданных в предыдущих версиях. Так было, например, при переходе с третьей на четвертую версию rpm. Так что надо использовать пакеты, соответствующие установленной у вас версии программы.
Приведенное выше описание программы rpm предполагает, что она запускается с консоли или в эмуляторе терминала. Между тем в разных дистрибутивах имеются графические оболочки для управления rpm-пакетами. В составе графической среды KDE такая оболочка называется kpackage. Вы можете запустить ее либо из командной строки, либо из основного меню KDE. Однако, на мой взгляд, она не дает никаких преимуществ по сравнению с работой из командной строки. Кроме того, она описана в книге А.Федорчука "Офис, графика, Web в Linux" [П1.6], так что я не буду тратить время на ее рассмотрение.
| Категория | Описание |
|---|---|
| LC_CTYPE | Определяет правила классификации и преобразования одиночных символов. Позволяет правильно определять вид символа: цифра, буква, значок, заглавная буква или прописная и т.д. Другими словами, включает правильную работу системных вызовов isalnum(), isalpha(), iscntrl(), isdigit(),… и т.п. для местного алфавита. Вдобавок, включает правильный перевод строчных - прописных букв: toupper() и tolower() |
| LC_COLLATE | Определяет правила сравнения и преобразования строк. Позволяет определять лексикографический порядок символов (порядок сортировки) в местном алфавите. Включает правильную работу strcoll() и strxfrm(). Оказывает непосредственное влияние на работу утилит типа sort и т.д. |
| LC_TIME | Определяет правила национального представления времени и даты. Задает именование дней недели, месяцев и т.п. а также задает способ написания даты и времени (12/24). Hепосредственно влияет на strftime(), а через нее на утилиты date и т.д. |
| LC_NUMERIC | Определяет правила национального представления чисел с плавающей точкой. Влияет на strtod() и форматы %f и %g printf(), scanf() |
| LC_MONETARY | Определяет правила национального представления денежных величин |
[user]$ locale
В ответ вы должны получить значения, присвоенные переменным окружения для управления средствами локализации. Я, например, увидел следующее:
LANG=ru
LC_CTYPE="ru_RU.KOI8-R"
LC_NUMERIC="ru_RU.KOI8-R"
LC_TIME="ru_RU.KOI8-R"
LC_COLLATE="ru_RU.KOI8-R"
LC_MONETARY="ru_RU.KOI8-R"
LC_MESSAGES="ru_RU.KOI8-R"
LC_ALL=ru_RU.KOI8-R
Можно также дать команду locale с параметром, совпадающим с именем одной из переменных окружения, например:
[user]$ locale LC_TIME
(но я не берусь объяснить то, что вы увидите).
Если результат этих проверок отрицательный (что маловероятно), то установите пакет локализации для русского языка. Найти его можно в коллекции средств локализации по адресу http://www.ping.be/linux/locales/ или на www.kiarchive.ru.
После этого надо сказать Linux, какой язык вы хотите использовать, для чего необходимо задать значения переменных окружения для управления средствами локализации: LC_CTYPE, LC_TIME, LC_COLLATE, LC_NUMERIC, и LC_MONETARY. Вообще говоря, достаточно задать всего одну переменную LC_ALL, задание которой одновременно определяет значения всех перечисленных выше переменные.
Есть еще две переменных окружения, которые имеют отношение к локализации: LANG и LINGUAS. Они действуют примерно так же, как и LC_ALL, в том смысле, что они определяют значения по умолчанию всех других переменных локализации, но, в отличие от LC_ALL, они не переопределяют значений других переменных LC_*, для которых значения заданы отдельно.
Переменная LINGUAS является GNU-расширением переменой LANG. Не все программы знают о существовании этой переменой (хотя не знают очень немногие, и таких все меньше), но эта переменная обладает тем преимуществом, что она позволяет задать несколько вариантов локализации, в порядке предпочтения. В большинстве случаев достаточно задать только одну переменную локализации - LANG. Если вы хотите использовать несколько вариантов локализации, то надо задать LANG и LINGUAS. Остальные переменные необходимо задавать только в особых случаях, которые мы здесь не рассматриваем.
LANG="ru_RU.KOI8-R"
LINGUAS="ru:en"
LC_ALL="ru_RU.KOI8-R"
Заметим, что в RU.LINUX.FAQ написано следующее: "Хотя в принципе допустимо задавать короткое именование, вроде LANG=ru_RU или даже LANG=ru, лучше использовать полное имя: LANG=ru_RU.KOI8-R. Совершенно недопустимо задавать LANG=ru_SU, такой страны больше нет :-)".
Если все, что было перечислено, сделано, можно считать, что локализация включена.
Правда, это верно только для случая, когда вы имеете права суперпользователя root. Но даже если вы простой пользователь Linux-системы и не можете редактировать файл /etc/sysconfig/i18n, то вы все же можете включить локализацию для себя, но несколько иным способом. А именно, поместите в свой файл $HOME/.profile (или в любой файл, который исполняется в процессе логирования пользователя: $HOME/.Xclients, $HOME/.xinitrc или другой) следующие строки:
export LANG=ru_RU.KOI8-R
export LINGUAS=ru_RU:en
export LC_ALL="ru_RU.KOI8-R"
Вот и все! (О том, как проверить, что локализация заработала, было сказано выше.)
[root]# loadkeys /usr/lib/kbd/keymaps/i386/qwerty/ru-win.map
Второй шаг русификации состоит в задании и загрузке таблицы экранного шрифта (SFM) в драйвер дисплея. Эти таблицы хранятся в виде файлов в каталоге /usr/lib/kbd/consolefonts. Загрузка шрифтов осуществляется немного по-разному в пакетах kbd и consoletools (соответственно, в версиях 5.2 и 6.x Red Hat Linux). В версии 5.2 загрузка шрифта осуществлялась с помощью команды setfont. Например, чтобы загрузить кодовую страницу из файла Cyr_a8x16, нужно дать команду
[root]# setfont /usr/lib/kbd/consolefonts/Cyr_a8x16
В версии 6.0 и последующих надо использовать команду consolechars с опцией -f:
[root]# consolechars -f /usr/lib/kbd/consolefonts/Cyr_a8x16
(Отметим, что команда setfont тоже сработает, только выдаст предупреждение о том, что надо пользоваться командой consolechars.)
Файлы шрифтов являются бинарными файлами размером 256*H байт, содержащими битовые образы для каждого из 256 символов, по одному байту на каждую линию образа и по H байт на символ (0 ‹ H ‹= 32). В этом случае о размере шрифта по вертикали можно судить по длине файла. В качестве файлов шрифтов могут использоваться файлы.psf; они имеют тот же самый формат и, кроме того, заголовок размером 4 байта. Некоторые файлы шрифтов содержат сразу три шрифта разного размера (например, 8х8, 8х14, 8х16), тогда в команде consolechars надо добавить опцию -H, например: -H 16, для выбора одного из размеров. Поскольку ядро Linux не поддерживает пока переключение режимов работы экрана, consolechars (как и setfont) не может изменить текущий режим EGA/VGA. Таким образом, пользователь полностью ответственен за выбор шрифта, соответствующего текущему режиму экрана.
Соответствие между символами кода ASCII и образами (или изображениями символов) из файла шрифта можно изменить, используя таблицу перекодировки (ACM - Application Charset Map). Если эту таблицу не загрузить, то, например, в программе Midnight Commander вы можете вместо красивых рамочек увидеть столбцы и строки из непонятных символов. Некоторые файлы шрифтов включают таблицу перекодировки шрифта, и тогда consolechars загрузит эту таблицу. По умолчанию файлы шрифтов находятся в каталоге /usr/lib/kbd/consolefonts, а таблицы перекодировки - в каталоге /usr/lib/kbd/consoletrans.
Таблицу перекодировки в 6-ой версии Red Hat (т. е. в пакете consoletools) можно загрузить отдельной командой consolechars с опцией -m file:
[root]# consolechars -m /usr/lib/kbd/consoletrans/koi2alt
Если таблица перекодировки не включена в файл шрифта и не указана в опции -m, то используется "тривиальная" таблица.
В версии 5.2 для загрузки таблицы перекодировки используется команда mapscrn:
[root]# mapscrn /usr/lib/kbd/consoletrans/koi2alt.
В этом случае драйвер консоли должен быть дополнительно переведен в режим перекодировки, задаваемый таблицей, путем вывода на консоль специальной escape-последовательности. Эта последовательность есть ‹esc›(K для набора символов G0 (G0 character set) и ‹esc›)K для набора символов G1 (G1 character set). Заметим, что активизировать эту таблицу необходимо в каждой консоли. При этом команда loadkeys действует одновременно во всех виртуальных консолях, а вот команда mapscrn действует только в той виртуальной консоли, в которой выполнена команда echo -ne '\033(K'.
Замечание:
Esc(K требуется, когда загружается альтернативная кодировка и активизируется таблица перекодировки псевдографики командой mapscrn koi2alt. Если шрифт koi-8, то никаких Esc(K не надо.
Замечание:
Все это не действует из-под Midnight Commander!
Существует еще таблица перекодировки для символов UNICODE. Некоторые файлы шрифтов включают эту таблицу, и она будет загружена командой consolechars, если только не задана опция -force-no-sfm. Отдельно загрузить таблицу перекодировки символов Unicode можно командой consolechars с опцией -u (см. руководство man).
Итак, для того, чтобы русифицировать консоль, нужно выполнить следующую последовательность команд:
• - для версии 5.2 Red Hat:
loadkeys /usr/lib/kbd/keytables/i386/qwerty/ru.map
setfont /usr/lib/kbd/consolefonts/Cyr_a8x16
mapscrn /usr/lib/kbd/consoletrans/koi2alt
echo -ne '\033(K'
• - для версии 6.0 Red Hat (и последующих):
loadkeys /usr/lib/kbd/keytables/i386/qwerty/ru.map
consolechars -f /usr/lib/kbd/consolefonts/Cyr_a8x16
consolechars -m /usr/lib/kbd/consoletrans/koi2alt
Но выполнять эту последовательность команд после каждого перезапуска компьютера, да еще в каждой виртуальной консоли, слишком обременительно. Поэтому рассмотрим вкратце, как русификация выполняется в дистрибутиве Black Cat Linux.
LANG=ru
LINGUAS=ru
LC_ALL=ru_RU.KOI8-R
SYSFONT=RUSCII_8x16
SYSFONTACM=koi2alt
Вызов файла i18n для задания значений переменных осуществляется из скрипта /sbin/setsysfont, из которого вызываются также команды setfont и mapscrn (в версии 5.2) или consolechars (в версии 6.0). Вот этот скрипт из Black Cat Linux версии 5.2:
-----------------------------------
#!/bin/sh
if [ -f /etc/sysconfig/i18n ]; then
. /etc/sysconfig/i18n
fi
if [ -x /usr/bin/setfont ]; then
if [ -n "$SYSFONT" ]; then
/usr/bin/setfont $SYSFONT
fi
if [ -x /usr/bin/mapscrn ]; then
if [ -n "$SCRNMAP" ]; then
/usr/bin/mapscrn $SCRNMAP
fi
fi
else
echo "can't set font"
exit 1
fi
------------------------------------
Как видно, при вызова скрипта /sbin/setsysfont выполняются команды "setfont Cyr_a8x16" и "mapscrn koi2alt". После этого, для включения в ядре кодовой таблицы пользователя, необходимо выдать на каждую виртуальную консоль последовательность "\033(K". Это реализовано путем добавления этой последовательности к файлу /etc/issue, который генерируется при загрузке системы скриптом /etc/rc.d/rc.local и вызывается на исполнение при логировании каждого пользователя. Вот пример скрипта /etc/rc.d/rc.local из версии 5.2:
-------------------------------------
#!/bin/sh
# This script will be executed *after* all the other init scripts.
# You can put your own initialization stuff in here if you don't
# want to do the full Sys V style init stuff.
if [ -f /etc/blackcat-release ]; then
R=$(cat /etc/blackcat-release)
elif [ -f /etc/redhat-release ]; then
R=$(cat /etc/redhat-release)
else
R="release 3.0.3"
fi
arch=$(uname -m)
a="a"
case "_$arch" in
_a*) a="an";;
_i*) a="an";;
esac
# This will overwrite /etc/issue at every boot. So, make any changes you
# want to make to /etc/issue here or you will lose them when you reboot.
. /etc/sysconfig/i18n
echo "" > /etc/issue.net
echo "Black Cat Linux $R" >> /etc/issue.net
echo "Kernel $(uname -r) on $a $(uname -m)" >> /etc/issue.net
if [ -n "$SCRNMAP" ]; then
echo -ne "\033(K" > /etc/issue
else
echo "" > /etc/issue
fi
if [ -f /usr/bin/linux_logo ]; then
/usr/bin/linux_logo -n -o 2 >> /etc/issue
echo "" >> /etc/issue
fi
cat /etc/issue.net >> /etc/issue
echo "" >> /etc/issue
-------------------------------------
В версии 6.02 все происходит примерно так же. Просмотрите упомянутые выше файлы, и вы убедитесь в этом сами.
FontPath "/usr/X11R6/lib/X11/fonts/misc/"
FontPath "/usr/X11R6/lib/X11/fonts/Type1/"
FontPath "/usr/X11R6/lib/X11/fonts/Speedo/"
FontPath "/usr/X11R6/lib/X11/fonts/75dpi/"
FontPath "/usr/X11R6/lib/X11/fonts/100dpi/"
Это и есть перечень каталогов шрифтов X-сервера, который в англоязычной документации называется коротко FontPath. Порядок перечисления каталогов в этом перечне существенен: когда приложение запрашивает вывод текста на экран определенным шрифтом, X-сервер поочередно просматривает каталоги из FontPath и использует для вывода текста первый шрифт, который соответствует запросу приложения.
Если используются установки, задаваемые по умолчанию, то растровые шрифты с разрешением 75 DPI обычно оказываются размещены в этом перечне перед шрифтами с разрешением 100 DPI. Следствием этого может оказаться то, что на экранах с высоким разрешением символы будут очень маленькими. Если такой эффект у вас проявляется, поменяйте порядок перечисления каталогов в FontPath.
Еще один момент, относящийся к растровым шрифтам, связан с их масштабированием. При отображении символов большого размера с помощью таких шрифтов может оказаться, что изображение символа распадается на отдельные точки. Этот эффект проявляется, например, в Netscape при выводе крупных заголовков. Чтобы избежать этого, вы можете указать после имени каталога ключевое слово "unscaled" (не масштабировать), отделив его двоеточием:
FontPath "/usr/X11R6/lib/X11/fonts/misc/:unscaled"
FontPath "/usr/X11R6/lib/X11/fonts/100dpi/:unscaled"
FontPath "/usr/X11R6/lib/X11/fonts/75dpi/:unscaled"
FontPath "/usr/X11R6/lib/X11/fonts/Type1/"
FontPath "/usr/X11R6/lib/X11/fonts/Speedo/"
FontPath "/usr/X11R6/lib/X11/fonts/misc/"
FontPath "/usr/X11R6/lib/X11/fonts/100dpi/"
FontPath "/usr/X11R6/lib/X11/fonts/75dpi/"
При этом можно, как в приведенном выше примере, указать как возможность использования масштабируемых, так и немасштабируемых шрифтов, определив свои предпочтения порядком перечисления строк в XF86Config.
Кстати, раз уж вы заглянули в XF86Config, неплохо заодно проверить и другие установки, определяющие конфигурацию X-сервера. Неправильное задание параметров работы монитора может доставить гораздо больше головной боли, чем неправильный выбор шрифта. В частности, убедитесь, что частота обновления экрана выбрана максимально возможной для вашей аппаратной конфигурации (85 Hz - это великолепно, 75 Hz - неплохо, а 60 Hz - это просто вредно для вашего зрения).
FontPath "unix/:-1"
Эта строка является ссылкой на номер порта, который будет использоваться для связи с фонт-сервером.
Использование фонт-сервера не означает, что имеет место полный отказ от перечня каталогов со шрифтами. Только теперь это перечень переносится в конфигурационный файл программы xfs. По умолчанию это файл /etc/X11/fs/config. В секции "catalogue" этого файла и перечислены теперь все каталоги со шрифтами. Соответствующая секция файла /etc/X11/fs/config должна выглядеть примерно так: catalogue = /usr/X11R6/lib/X11/fonts/misc:unscaled,
/usr/X11R6/lib/X11/fonts/100dpi:unscaled,
/usr/X11R6/lib/X11/fonts/75dpi:unscaled,
/usr/X11R6/lib/X11/fonts/Type1,
/usr/X11R6/lib/X11/fonts/Speedo,
/usr/X11R6/lib/X11/fonts/misc,
/usr/X11R6/lib/X11/fonts/100dpi,
/usr/X11R6/lib/X11/fonts/75dpi,
/usr/local/share/fonts/ttfonts
(обратите внимание на отсутствие запятой в последней строке).
Правда, вы можете по-прежнему включить строки с указанием путей к каталогам шрифтов в файл XF86Config (вместе со строкой "FontPath "unix/:-1"), но они будут обрабатываться не фонт-сервером, а X-сервером. xfs от Redhat способен обслуживать как шрифты Type 1, так и шрифты True Type.
[root]# ps ax | grep xfs
Если xfs уже установлен в вашей системе (в противном случае установите его), вы должны увидеть строку примерно такого вида:
401? S 0:04 xfs -droppriv -daemon -port -1
По этой строке можно определить, какой порт использует эта программа. Этот же номер должен быть указан в строке вида
FontPath "unix/:port_number"
в секции "Files" в конфигурационном файле X-сервера (в xfree86 это файл /etc/X11/XF86Config). Скорее всего секция "Files" в этом случае вообще содержит только одну строку FontPath, например, такую:
FontPath "unix/:-1"
Впрочем, можно не искать файл /etc/X11/XF86Config, а выполнить команду:
[root]# xset -q,
в выводе которой вы должны увидеть такие строки:
FontPath
"unix/:-1"
Если перечень каталогов шрифтов XFree86 содержит строку типа unix:/port_number, где port_number совпадает с номером порта, используемым программой xfs (Вы получили его по команде ps), то сервер xfs у вас установлен корректно. В противном случае, вы должны добавить ссылку на него в перечень каталогов шрифтов XFree86 либо с помощью команд:
[root]# xset fp+ unix/:port_number
[root]# xset fp rehash
либо путем непосредственной корректировки файла /etc/X11/XF86Config и последующего перезапуска X Window.
Для редактирования файла /etc/X11/XF86Config вы должны иметь права суперпользователя. Если вы таких прав получить не можете, то для корректной установки фонт-сервера вы должны обратиться к администратору. Какие шрифты имеются в Вашей системе?
Давайте теперь посмотрим, какие шрифты установлены в системе. Поскольку вы уже знаете (загляните еще раз в FontPath), в каких каталогах находятся файлы шрифтов, вы можете непосредственно просмотреть эти каталоги. Но одного наличия файла со шрифтом еще недостаточно для того, чтобы шрифт был доступен для X-сервера. Для того, чтобы увидеть список шрифтов, известных X-серверу, лучше воспользоваться командой xlsfonts, которая выводит на экран перечень таких шрифтов. Если запустить ее с опцией -lll, то она дополнительно выдаст массу информации о каждом шрифте. Перенаправьте вывод в файл:
[root]# xlsfonts › fontlist
и вы получите список доступных шрифтов в файле fontlist.
Но для того, чтобы этот список прочитать, надо иметь представление о том, как именуются шрифты. Без этого прочитать полученный файл fontlist будет очень трудно.
Существует стандарт консорциума X (X Consortium) на имена шрифтов для X Window System, который называется X Logical Font Description Conventions (обычно упоминаемый как XLFD). Полное описание его дано в [П13.11]. В соответствии с этим стандартом имя шрифта состоит из 14 полей:
• foundry (fndry) - производитель шрифта (Adobe, Bitstream и т.п.);
• family (fmly) - название семейства шрифтов (например, Times);
• weight (wght) - толщина (bold, demibold, medium);
• slant (slant) - наклон (roman, italic, oblique);
• set width (sWdth) - ширина (normal, condensed, double wide);
• add style (adstyl) - стиль (serif, sans serif, decorated);
• pixel size (pxlsz) - размер символа по вертикали (в пикселах, 0 означает масштабируемый шрифт);
• point size (ptSz) - размер символа по горизонтали;
• resolutionX (resx) - разрешение по горизонтали;
• resolutionY (resy) - разрешение по вертикали;
• spacing (spc) - ширина символов (пропорциональный, моноширинный);
• avg width (avgWdth) - среднее значение ширины глифов шрифта;
• registry (rgstry) - название стандарта на кодировку символов (koi8, iso8859);
• encoding (encdng) - язык или кодовая страница (r, u).
Здесь в начале каждой строки указано наименование поля, затем (в скобках) сокращение этого наименования, используемое в программе xfontsel (о ней чуть ниже), после чего дается перевод (приблизительный) наименования поля. В скобках после русского перевода названия поля приводится по несколько примеров возможных значений этого поля, которые поясняют его назначение.
При задании конкретного шрифта поля в его имени принято разделять дефисами. Приведем пару примеров имен в стандарте XLFD:
-adobe-times-medium-r-normal-*-14-140-75-75-p-74-iso8859-1
-misc-fixed-medium-i-semicondensed-*-13-120-75-75-c-60-koi8-r
-adobe-courier-bold-o-normal-*-10-100-75-75-M-60-iso8859-1
(если какое-то поле не определено, то в соответствующей позиции ставится звездочка; таким образом можно одной строкой задать множество шрифтов).
В качестве параметра команде xlsfonts можно указать имя конкретного шрифта или семейства шрифтов (этой возможностью просто необходимо воспользоваться, если вы задали опцию -lll, иначе масса полученной информации окажется слишком велика).
Но просмотр списка шрифтов, выдаваемого командой xlsfonts, мало информативен в том смысле, что при этом вы не видите изображений символов, которые будет давать на экране данный шрифт. В этом плане гораздо удобнее воспользоваться программой xfontsel, которая работает в графическом режиме и выводит в своем окошке изображения некоторых символов данного шрифта, позволяющих представить себе, как будет выглядеть выводимый текст.
Эти две команды могут оказаться полезными, как для определения того, какие шрифты уже имеются в системе, так и для проверки того, что новые шрифты успешно установились. Я не буду здесь подробно описывать, как пользоваться этими командами. Воспользуйтесь соответствующими man-страницами или системой info.
На мой взгляд, пользователь обычно руководствуется в выборе шрифта только следующими признаками из перечисленных выше: семейство шрифтов (fmly), вариант шрифта - жирный шрифт или обычный (wght), наклон (slant), ширина шрифта (sWdth), размер шрифта в пикселах (pxlsz), стандарт (rgstry) и язык (encdng).
Попробуйте выбирать разные значения этих параметров в программе xfontsel и вы получите неплохое представление о том, какие шрифты установлены в вашей системе. Для русскоязычных пользователей выбор шрифта для просмотра стоит начать с двух последних полей. Задайте для поля rgstry значение koi8, а для поля encdng - значение r, и вы увидите сколько русскоязычных шрифтов в кодировке koi8-r у вас установлено. Кириллические шрифты задаются также значениями iso8859-5 в двух последних полях.
Кроме xlsfonts и xfontsel cуществуют еще несколько программ для просмотра установленных в системе шрифтов.
• Чтобы увидеть полный набор символов шрифта, можно воспользоваться командой xfd -fn fontname. В качестве fontname здесь можно использовать как полное имя шрифта, так и строку с символами маскирования (*), а также синонимы имен шрифтов, заданные в файле font.alias. Пример:
xfd -fn -*-helvetica-medium-r-*
• В графической среде KDE имеется Менеджер шрифтов, который тоже показывает все установленные шрифты, а также позволяет удалить некоторые (но устанавливать новые, кажется, не умеет!).
• В Gnome имеются утилиты font selector, character picker и gfontview.
xlsfonts › fontlist
а после этого пересчитаете число файлов в каталогах, перечисленных в FontPath, то скорее всего обнаружите, что в fontlist перечислено гораздо больше шрифтов, чем имеется файлов со шрифтами. Чтобы понять, почему это так, надо разобраться с файлами fonts.dir, fonts.alias и fonts.scale. Если вы заглянете в любой каталог со шрифтами, то найдете там по крайней мере файл fonts.dir, а может быть и два других: fonts.alias и fonts.scale. Для чего же они нужны?
Структура файла fonts.dir очень проста и из нее становится ясно, зачем этот файл нужен. Каждая строка файла fonts.dir (кроме первой) содержит имя одного из файлов со шрифтом, содержащегося в том каталоге, где расположен данный файл fonts.dir, вслед за которым (после пробела или символа табуляции) указывается имя содержащегося в этом файле шрифта. Пример:
koi12x24.pcf.gz -cronyx-fixed-medium-r-normal-24-170-100-100-c-120-koi8-u
Первая строка файла fonts.dir содержит число шрифтов, перечисленных в этом файле (и, соответственно, имеющихся в данном каталоге со шрифтами). Файл fonts.dir совершенно необходим для того, чтобы X-сервер мог работать со шрифтами. По-видимому (я могу судить об этом только на основании проведенных экспериментов, поскольку в литературе такого описания не встречал), при запуске X-сервера или фонт-сервера на основе файлов fonts.dir из каталогов шрифтов в оперативной памяти создается таблица доступных для системы шрифтов.
Файл fonts.scale, по-видимому, задает список масштабируемых шрифтов и необходим некоторым приложениям для корректной работы с такими шрифтами. В большинстве случаев это либо точная копия файла fonts.dir, либо просто ссылка на fonts.dir. Естественно, что в каталогах с растровыми шрифтами мы такого файла не найдем.
Файл fonts.alias - это еще один конфигурационный файл, оказывающий влияние на работу со шрифтами. Уже по названию ("alias" - прозвище, кличка) можно догадаться о его назначении. Строки этого файла имеют следующий вид:
синоним XLFD_имя_реального_шрифта
При этом каждая строка должна оканчиваться только символом конца строки и владельцем файла должен быть суперпользователь. Вот для примера первые строки из файла /usr/X11R6/lib/X11/fonts/misc/fonts.alias в системе Redhat:
fixed -misc-fixed-medium-r-semicondensed-13-120-75-75-c-60-iso8859-1
variable -*-helvetica-bold-r-normal-*-*-120-*-*-*-*-iso8859-1
Слово fixed здесь является синонимом или ссылкой ('alias'). Каждый раз, когда запрашивается шрифт fixed, будет фактически происходить обращение к шрифту, указанному во второй колонке. Шрифт кажется маловат? Просто поменяйте имя, на которое дана ссылка этим определением. Тот же самый принцип применим ко всем шрифтам, включая True Type. Более того, если у вас не установлены шрифты True Type, вы можете использовать этот же трюк для того, чтобы использовать какой-то из шрифтов Type 1 вместо запрашиваемых приложением шрифтов True Type.
Маленькое ПРЕДОСТЕРЕЖЕНИЕ для тех, кто имеет привычку "сильно быстро делать": некоторые синонимы должны быть известны системе в любой момент времени! В первую очередь это относится к синонимам "cursor", "fixed" и "variable" в каталогах /misc. Если таких строк в misc/fonts.alias нет, или они указывают на несуществующий шрифт, то графическая оболочка просто откажется запускаться.
Файл fonts.alias важен для некоторых приложений, которые не могут нормально обрабатывать данные, предоставляемые файлом fonts.scale. Самый характерный пример - Netscape. Без fonts.alias вы можете столкнуться с тем, что Netscape будет отображать только шрифты с размером символов от 0 до 12 точек. Создав корректный файл fonts.alias в каталоге со шрифтами True Type, вы получите возможность выбирать из большего числа вариантов в "Preferences | fonts" в Netscape. Приведем небольшой пример. Предположим, что в файле fonts.scale имеются строки:
arial.ttf -monotype-Arial-medium-r-normal--0-0-0-0-p-0-ascii-0
arial.ttf -monotype-Arial-medium-r-normal--0-0-0-0-p-0-fcd8859-15
arial.ttf -monotype-Arial-medium-r-normal--0-0-0-0-p-0-iso8859-15
arial.ttf -monotype-Arial-medium-r-normal--0-0-0-0-p-0-iso8859-1
Это масштабируемые шрифты, так что в их именах не указаны размеры. Поэтому в файле fonts.alias должны, соответственно, присутствовать строки (в файле они должны быть записаны без переносов, просто в книге строка целиком не умещается в рамках страницы):
-monotype-Arial-medium-r-normal- 6-60-0-0-p-0-iso8859-1 -monotype-Arial-medium-r-normal--9-90-75-75-p-0-iso8859-1
-monotype-Arial-medium-r-normal--7-70-0-0-p-0-iso8859-1 -monotype-Arial-medium-r-normal--9-90-75-75-p-0-iso8859-1
-monotype-Arial-medium-r-normal--8-80-0-0-p-0-iso8859-1 -monotype-Arial-medium-r-normal--10-100-75-75-p-0-iso8859-1
-monotype-Arial-medium-r-normal--9-90-0-0-p-0-iso8859-1 -monotype-Arial-medium-r-normal--11-110-75-75-p-0-iso8859-1
-monotype-Arial-medium-r-normal--10-100-0-0-p-0-iso8859-1 -monotype-Arial-medium-r-normal--12-120-75-75-p-0-iso8859-1
-monotype-Arial-medium-r-normal--11-110-0-0-p-0-iso8859-1 -monotype-Arial-medium-r-normal--12-120-75-75-p-0-iso8859-1
-monotype-Arial-medium-r-normal--12-120-0-0-p-0-iso8859-1 -monotype-Arial-medium-r-normal--12-120-75-75-p-0-iso8859-1
-monotype-Arial-medium-r-normal--13-130-0-0-p-0-iso8859-1 -monotype-Arial-medium-r-normal--13-130-75-75-p-0-iso8859-1
-monotype-Arial-medium-r-normal--14-140-0-0-p-0-iso8859-1 -monotype-Arial-medium-r-normal--14-140-75-75-p-0-iso8859-1
-monotype-Arial-medium-r-normal--15-150-0-0-p-0-iso8859-1 -monotype-Arial-medium-r-normal--15-150-75-75-p-0-iso8859-1
-monotype-Arial-medium-r-normal--18-180-0-0-p-0-iso8859-1 -monotype-Arial-medium-r-normal--18-180-75-75-p-0-iso8859-1
-monotype-Arial-medium-r-normal--24-240-0-0-p-0-iso8859-1 -monotype-Arial-medium-r-normal--24-240-75-75-p-0-iso8859-1
После этого Netscape будет корректно масштабировать шрифт Arial.
Обратите внимание на различие в размерах шрифта в правой и левой колонках. Например, в первой строке слева указан размер в 6 точек, а справа - 9 точек. С помощью этого приема удается преодолеть "склонность" Netscape к использованию слишком маленьких шрифтов. Просто подберите справа цифры в соответствии с Вашими вкусами.
Создавать файлы fonts.dir, fonts.scale и fonts.alias вручную - занятие не из простых. Поэтому разработаны специальные программы, которые запускаются в каталоге со шрифтами и создают эти файлы. Файл fonts.dir в каталоге с растровыми шрифтами можно создать с помощью команды mkfontdir. Для создания файлов fonts.dir и fonts.scale в каталогах со шрифтами Type1 надо воспользоваться утилитой type1inst (ftp://ftp.metalab.unc.edu/pub/Linux/X11/xutils/). Это скрипт на языке perl, который автоматически создает файлы fonts.dir и fonts.scale, необходимые для того, чтобы система X-Window могла использовать шрифты. Рекомендации по установке и настройке этого скрипта вы найдете в файле README, который поставляется вместе с пакетом.
Для шрифтов True Type необходима своя утилита ttmkfdir, которую можно найти на многих сайтах с программным обеспечением для Linux. В Redhat эта утилита включена в состав rpm-пакета Freetype.
На странице "Some Linux for Beginners" (http://home.c2i.net/dark/linux.html) вы можете найти скрипт на языке python, с помощью которого можно создать файл fonts.alias.
[root]# mkfontdir
которая создает в каталоге со шрифтами файл fonts.dir.
Если производится инсталляция шрифтов Type1, то чтобы сделать эти шрифты доступными для X-Window, надо воспользоваться утилитой type1inst (ftp://ftp.metalab.unc.edu/pub/Linux/X11/xutils/), которая создаст файлы fonts.dir и fonts.scale. После установки утилиты просто перейдите в каталог с новыми шрифтами и запустите type1inst:
[root]# cd directory
[root]# type1inst
Далее необходимо добавить имя нового каталога со шрифтами к перечню каталогов шрифтов. Если пакет xfs у вас уже запущен, вы можете сделать это путем редактирования конфигурационного файла /etc/X11/fs/config.
Теперь надо заставить шрифт-сервер перечитать перечень каталогов, что можно сделать командой:
[root]# /etc/rc.d/init.d/xfs restart
Ваши новые шрифты должны быть теперь доступны для X.
Если вы не используете шрифт-сервер, то вам необходимо добавить имя каталога, содержащего файлы Ваших новых шрифтов, к перечню каталогов шрифтов X-сервера в файле /etc/X11/XF86Config. Это можно сделать в каком-либо текстовом редакторе, а можно с помощью команды
[root]# xset fp+ /usr/share/fonts/new
(имя каталога будет добавлено в конец списка) или
[root]# xset +fp /usr/share/fonts/new
(имя каталога будет добавлено в начало списка). После этого надо дать команду
[root]# xset fp rehash
чтобы X-сервер нашел новые шрифты.
[root]# cd /usr/share/fonts/ttf
и, если в именах файлов встречаются заглавные буквы, преобразуйте все имена в нижний регистр. В [П13.2] приводится небольшой скрипт для автоматического преобразования имен файлов в нижний регистр, однако у меня этот скрипт отказался работать. Но в любом случае преобразовать имена и удалить пробелы из имен файлов можно и вручную.
Далее необходимо создать в каталоге со шрифтами True Type файлы fonts.scale и fonts.dir. Это, конечно, тоже можно сделать вручную, если вы внимательно прочитали весь предыдущий материал, но я, например, не хотел бы этим заниматься. Тем более, что существует утилита ttmkfdir, которую можно найти на многих сайтах с программным обеспечением для Linux. В Redhat эта утилита включена в состав rpm-пакета Freetype. Выполните следующие команды:
[root]# /usr/sbin/ttmkfdir -o fonts.scale
[root]# mkfontdir
После этого в каталоге с новыми шрифтами True Type должны появится файлы fonts.dir и fonts.scale.
К сожалению, команды ttmkfdir и mkfontdir не всегда сообщают об ошибках, поэтому после их запуска необходимо убедиться, что нужные файлы созданы, не пусты и содержат корректно сформированные (т. е. соответствующие XLFD, смотри выше) наименования шрифтов. Как пишут авторы [П13.2, П13.13], неприятности могут возникнуть потому, что иногда файлы шрифтов могут не в полной мере соответствовать формату True Type. Если такое имеет место, то описание этого шрифта, выдаваемое по команде ttmkfdir, будет существенно отличаться от формата описаний шрифтов, определяемого стандартом XLFD. Возможно, содержащееся в файле описание шрифта не корректно. Файлы шрифтов, вызывающие такой эффект, рекомендуется просто удалить. Поэтому до создания файла fonts.scale надо запустить программу ttmkfdir без параметров. В этом случае вывод идет на экран. Длина выдаваемых строк может отличаться, но их структура должна быть одинаковой и соответствовать стандарту XLFD. Если же какой-то из файлов со шрифтами вызывает появление в выводе чего-то другого, то такой файл лучше удалить. Только после этого можно выполнять команду
[root]# ttmkfdir -o fonts.scale
Еще одна причина возникновения проблем состоит в том, что ttmkfdir почему-то сортирует имена шрифтов в файле fonts.scale в обратном порядке. Этот факт не вызывает затруднений, если вы используете команду ttmkfdir в указанном выше формате. Но если вы попытаетесь подключить декоративные шрифты, которые часто содержат изображения не для всех возможных символов, то просто дать команду
[root]# ttmkfdir -o fonts.scale
уже недостаточно. Дело в том, что по умолчанию ttmkfdir допускает отсутствие в шрифте не более 5 символов. Но имеется специальная опция (-m nnn, где nnn - число), которая позволяет увеличить допустимое число отсутствующих изображений. Если запустить ttmkfdir в следующем виде:
[root]# ttmkfdir -m 100 -o fonts.scale
то созданный в том же каталоге и при тех же файлах шрифтов файл fonts.scale получится гораздо большего объема, т. е. будет содержать больше наименований шрифтов. При этом, как раз из-за обратного порядка перечисления имен, файлы с неполным набором символов окажутся в начале файла fonts.scale. В силу этого приложения могут быть "введены в заблуждение" и "схватить" первый попавшийся (в данном случае - неполный) шрифт. Тогда вместо отсутствующих символов вы увидите просто пробелы. Впрочем, с этой проблемой нетрудно справиться. Просто после создания файла fonts.scale надо изменить порядок строк в нем, для чего после выполнения команды
[root]# ttmkfdir -m 100 -o fonts.scale
надо сделать следующее:
1. Выполнить команду [root]# tac fonts.scale › fonts.dir
2. Перенести строку с числом шрифтов из конца полученного таким образом файла fonts.dir в его начало;
3. Убедиться, что файл fonts.dir заканчивается символом конца строки.
Теперь мы имеем корректно сформированный файл fonts.dir! Но список в файле fonts.scale все еще имеет обратный порядок. Однако, поскольку эти два файла (по крайней мере в данном случае) должны быть идентичны, то остается только выполнить команду
[root]# cat fonts.dir › fonts.scale
или
[root]# cp fonts.dir fonts.scale
Следующий шаг, вообще говоря, не является обязательным, но позволяет в некоторых случаях повысить читаемость шрифтов на экране. Этот шаг заключается в создании файла fonts.alias в каталоге с TT-шрифтами (или в корректировке существующего файла). О том, как это можно сделать, говорилось выше, в разд. 11.4.5. В том же разделе упоминался скрипт, который позволяет (по словам автора интернет-страницы [П13.14] легко создать файл fonts.alias в каталоге со шрифтами True Type. Полученный с помощью скрипта файл fonts.alias может оказаться очень большим, особенно если создавали файл fonts.dir (который используется скриптом как основа для создания fonts.alias) с помощью команды ttmkfdir с опцией "-m 100". Да и без этого в нем окажется масса имен шрифтов, которые вы никогда не будете использовать. Поскольку в типичном случае вполне достаточно только кириллических шрифтов, можно попробовать удалить из fonts.alias все неиспользуемые шрифты с помощью следующей последовательности команд (оставляем только кириллические шрифты):
[root]# grep 'iso8859-5"' fonts.alias › newfonts.alias
[root]# grep 'koi8-r"' fonts.alias ›› newfonts.alias
[root]# cat newfonts.alias › fonts.alias
Возможно, этот же прием стоит применить к файлам fonts.dir и fonts.scale, только предварительно продумав все последствия. Если вы войдете в азарт и захотите провести такие же корректировки не только в каталогах со шрифтами True Type, но в других каталогах со шрифтами, то, по крайней мере, не забывайте, что нельзя просто удалить шрифты, которые имеют в качестве второго имени (синонима) названия cursor, fixed и variable.
Теперь вы можете добавить новый каталог к перечню каталогов шрифтов xfs. Пользователи дистрибутивов, основанных на Redhat, могут сделать это с помощью утилиты chkfontpath (она тоже входит в пакет Freetype):
[root]# /usr/sbin/chkfontpath -add /usr/share/fonts/ttf
Если такой утилиты нет, это можно сделать редактированием конфигурационного файла фонт-сервера xfs, а именно, файла /etc/X11/fs/config. (Помните, что имена каталогов в перечне НЕ ДОЛЖНЫ иметь слэша (/) в конце!)
После этого осталось только перестартовать фонт-сервер xfs. Если вы пользовались утилитой chkfontpath, то она осуществляет рестарт xfs автоматически. Если вы вручную редактировали перечень каталогов со шрифтами, то перестартовать xfs можно командой
[root]# /etc/rc.d/init.d/xfs restart
После того, как вы перезапустили xfs, перезапустите также X-сессию.
На этом все! Вы можете проверить, подключились ли новые шрифты с помощью команды xlsfonts. Например, если среди устанавливаемых шрифтов должны были быть шрифты arial, можно выполнить команду:
[root]# xlsfonts | grep arial
(можно также воспользоваться командой xfontsel). Если новые шрифты видны через xlsfonts, тогда они доступны и для X Window, и наоборот.
Теперь, когда шрифты True Type установлены, вы можете попробовать, как они работают, например, в Netscape.
1. Запустите Netscape.
2. Откройте окно "Preferences/Appearence/Fonts" и раскройте выпадающий список "Variable Width Fonts". Там теперь должны появиться вновь установленные шрифты (я, например, увидел "Verdana (Microsoft)", именно тот единственный ttf-шрифт, который устанавливал). Выберите один из них.
3. Разрешите масштабирование, нажав кнопку "Allow Scaling" рядом со списком "Variable Width Font".
4. Установите опцию "Use my default fonts".
5. Затем выберите размер 12 в выпадающем списке справа.
6. Щелкните по кнопке OK.
Теперь текст в окне Netscape должен отображаться выбранным Вами шрифтом.
set meta-flag on
set convert-meta off
set output-meta on
Этого можно добиться разными способами. Поскольку вы являетесь суперпользователем своего компьютера, можно определить переменную INPUTRC=, например, создав файл /etc/profile.d/readline.sh следующего содержания:
#!/bin/bash
INPUTRC="/etc/inputrc"; export INPUTRC
и сделать этот файл исполняемым. Кроме того, прописать в файле /etc/inputrc
set meta-flag on
set convert-meta off
set output-meta on
После этого библиотека readline (и bash) начнет воспринимать русские буквы.
Еще один вариант: не задавать INPUTRC=, а прописать те же значения в файле ~/.inputrc в домашнем каталоге каждого пользователя.
См. страницу man readline.
export LESSCHARSET=koi8-r
Это решение годится для всех 8-битовых кириллических кодировок.
При правильно настроенной локализации указывать LESSCHARSET НЕ НАДО. Более того, в ~/.lesskey надо добавить
#env
LESSCHARSET=
чтобы программа игнорировала установку LESSCHARSET= другими "глупыми" программами (к примеру, man). После этого надо запустить lesskey для получения бинарного файла ~/.less. В противном случае он не будет вызывать setlocale(LC_CTYPE,") и, как следствие, не будет icase search для русских букв.
alias nroff='nroff -Tlatin1'
Просмотр некоторых файлов в mc запускается через nroff, вызов которого осуществляется по расширению имени файла. Поэтому в файле /usr/lib/mc/mc.ext следует в строке вызова nroff изменить параметр вызова с -Tascii на -Tlatin1.
[user]$ mount -t vfat -o umask=002,noexec,gid=500,codepage=866,iocharset=koi8-r /dev/hdb1 /mnt
То есть все русские имена на диске FAT сохраняются в Codepage 866! Для работы этой опции ядро (›2.0.36) должно быть пересобрано с поддержкой NLS, кодовыми страницами CP866, NLS KOI8-R и, конечно же, с поддержкой VFAT.
[global]
character set = koi8-r
client code page = 866
preserve case = yes
short preserve case = yes
Первые две опции указывает внутреннюю кодировку имен файловой системы (client code page) и внешнюю кодировку пользователя (character set).
Следующие две опции указывают, что надо сохранять регистр длинных и коротких имен файлов.
alias rlogin='rlogin -8'
DEFAULT set outbinary
Вы можете встретить проблемы при работе в кодировке cp1251 - не передается маленькая русская буква "я" (ASCII-код 0xff). У протокола Telnet 0xff - это первый символ управляющей последовательности. Дабы передать собственно "я", нужно его удваивать: 0xff, 0xff. При использовании KOI8-R такая проблема отсутствует.
/set translation russian
/set eight_bit_characters on
/Times New Roman (times.ttf);
/Times New Roman Bold (timesbd.ttf);
/Times New Roman Bold Italic (timesbi.ttf);
/Times New Roman Italic (timesi.ttf);
Более подробные инструкции вы найдете в документации к программе Ghostscript и в разд. 9.6.
Конечно, я рассказал далеко не обо всех моментах, связанных с подключением новых и использованием имеющихся шрифтов для системы X Window. Например, за рамками рассмотрения остались вопросы настройки шрифтов в конкретных приложениях, а также вопросы преобразования шрифтов True Type в шрифты Type1. Но все изложить невозможно, поэтому остается только отослать читателя к списку доступной литературы (см. [П13] приложения).
[user]$ cat file.txt | more
или
[user]$ more file.txt
Команда less представляет собой улучшенный и доработанный вариант команды more, который рекомендуется использовать вместо more во всех случаях. Имейте в виду, что команда less используется для вывода на экран страниц интерактивной подсказки man.
Для просмотра только нескольких последних строк текстового файла существует специальная команда tail, которой в качестве параметра можно указать количество выводимых строк. Можно предположить, что наличие такой команды было очень полезно в те времена, когда текстовые файлы создавались с помощью программы cat, путем прямого ввода с терминала, таким вот примерно образом:
[user]$ cat ›› file.txt
В этом случае после любого перерыва в работе просто необходимо было просмотреть последние из введенных строк, чтобы вспомнить, на чем была остановлена работа.
Однако те времена давно уже прошли. Для создания текстов стали использовать текстовые редакторы, а для сохранения -не простые ASCII-файлы, а специальные, достаточно изощренные, форматы, позволяющие сохранить не только сам текст, но и информацию об абзацах, страницах, стилях, шрифтах и много что еще. И для просмотра таких файлов стали требоваться специальные программы (на сленге компьютерщиков - вьюеры), которые не выводят на экран все специальные символы форматирования, а преобразуют их в соответствующие отступы, выступы, пробелы, шрифты и т. д. Рассмотрим такие просмотрщики для двух распространенных форматов файлов.
[root]#./INSTALL
Инсталляционный скрипт выводит на экран несколько вопросов, в частности о том, в какой каталог разместить файлы программы. На каждый вопрос предлагается вариант ответа, который можно принять, просто нажав клавишу ‹Enter›. Если предлагаемый по-умолчанию ответ вас не устраивает, введите собственный вариант ответа. В остальном надо просто следовать инструкциям, выдаваемым программой установки. Если вы где-то ошиблись, можно прервать установку комбинацией ‹Ctrl›+‹C› и начать все заново.
В конце концов, появляется сообщение о том, что установка успешно завершена (естественно, по-английски, что-то вроде "installed successfully").
После установки в том каталоге, куда вы установили программу (напомню, что по-умолчанию это /usr/local/Acrobat4), создаются несколько подкаталогов:
• каталог bin содержит скрипт для запуска программы,
• каталог Reader содержит файлы подсказки и некоторые платформенно-зависимые файлы (смотри примечание ниже),
• каталог Fonts содержит шрифты,
• каталог Browsers содержит скрипт для запуска Acrobat Reader из браузера Netscape.
Примечание
Если вы выбрали сетевой вариант инсталляции, то в каталоге Reader будут установлены несколько вариантов бинарных файлов, и скрипт запуска программы будет выбирать тот вариант бинарного файла, который нужен для рабочей станции, с которой производится вызов программы!
Наконец, в завершение инсталляции, вы можете сделать так, чтобы не было необходимости каждый раз для запуска программы Acrobat Reader сначала переходить в каталог, где расположен скрипт запуска. Для этого надо создать ссылку на этот скрипт в одном из каталогов, указанных в переменной $PATH. Для примера создадим такую ссылку в каталоге /usr/bin:
[root]# ln -s /usr/locale/Acrobat4/bin/acroread /usr/bin/acroread
Для того, чтобы было удобно запускать программу в графической среде, остается только создать значок ("иконку") на рабочем столе (если вы не помните, как это сделать, смотрите описание используемой Вами графической среды) и на этом процесс инсталляции программы можно считать завершенным.
Теперь вы можете запустить Acrobat Reader (естественно, для этого должен быть запущен графический режим), используя команду acroread или щелчком по иконке на рабочем столе.
Если вы не создали ссылку, то надо указывать в командной строке полный путь к скрипту запуска:
[user]$ /usr/local/Acrobat4/bin/acroread
Для того, чтобы просмотреть с помощью Acrobat Reader какой-то конкретный файл или даже несколько, можно сразу указать имена этих файлов в командной строке. Например,
[user]$ acroread /user/share/docs/Samba/Collection.pdf
Рис. 12.1. Окно программы Acrobat Reader
Если вы введете команду acroread ‹filename›, когда Reader уже запущен, активная копия Reader отобразит заданный файл.
Если вы хотите получить подсказку по использованию программы, введите одну из команд
[user]$ acroread -help
[user]$ acroread -helpall
С помощью программы Acrobat Reader вы можете преобразовать файлы формата PDF в файлы формата PostScript уровней 1 или 2 при условии, что вы делаете это в командной строке графического режима. Для этого надо выполнить примерно следующую команду:
[user]$ cat sample.pdf | acroread -toPostScript › sample.ps
С помощью аналогичных команд (более подробное описание которых вы сможете найти в документации к программе) можно преобразовывать сразу группу файлов.
Для обратного преобразования PDF-файла в файл формата PostScript уровня 2, надо набрать следующую команду:
[user]$ acroread -toPostScript -level2 pdf_file_1
Я не буду подробно описывать все меню и возможности программы Acrobat Reader, поскольку она широко распространена и многим читателям знакома. Лучше остановимся подробнее на специфических средствах просмотра файлов Linux.
Рис. 12.2. Окно программы gv
Кнопка Page служит для перехода к следующей или предыдущей странице документа. Такие же переходы можно осуществить при помощи двух небольших кнопок, обозначенных символами ‹‹ и ›› в левой вертикальной колонке. Рядом с кнопкой Page расположена кнопка, не имеющая постоянного названия, потому что она служит для задания одной из 4 возможных ориентаций вывода текста. Текст можно выводить на страницу, ориентированную обычным образом (Portrait), с поворотом на 90 градусов (Landscape), на 180 градусов (Upside-Down, т. е. вниз головой), на 270 градусов (Seascape).
Рис. 12.3. Окно выбора файла для просмотра в gv
Рис. 12.4. Окно настроек программы gv
Следующая кнопка служит для задания масштаба изображения, который и указывается на этой кнопке. Еще одна кнопка служит для выбора формата бумаги. Это нужно для организации печати, ибо программа gv и есть средство для предварительного просмотра того, что получится на бумаге.
В левом столбце имеется еще одна интересная вещь: серый прямоугольник над кнопками ›› и ‹‹. Внутри этого прямоугольника имеется еще один прямоугольник, который можно захватить мышкой и подвигать в пределах внешнего прямоугольника. Проделайте это и вы поймете назначение этого элемента: выводить в окно просмотра различные части страницы.
Рис. 12.5. Внешний вид окна программы "Просмотрщик PS/PDF".
О программе "Просмотрщик DVI" я тоже не буду рассказывать, ограничившись уже приведенным упоминанием о ней и сообщением о том, что она предназначена для просмотра файлов формата DVI, создаваемых системой верстки TEX.
[user@linux tmp]$ wvVersion book-p1.doc
Version: word8, Encrypted: No
[user@linux tmp]$ wvSummary book-p1.doc
The title is В
The subject is
The author is kos
The keywords are no comments found
The template was Normal.dot
The last author was kos
The rev # was 12
The app name was Microsoft Word 8.0
PageCount is 1
WordCount is 52757
CharCount is 300716
Security is 0
Codepage is 0x4e3 (1251)
Основной утилитой пакета является программа wvWare (или wvConvert), вызов которой осуществляется следующим образом
wvWare [OPTION…] filename.doc › filename.html
Основные опции:
• -x --config=config.xml
Указывает на используемый выходной фильтр.
• -c --charset=charset
Задает кодовую страницу для iconv.
• -p --password=password
Задает пароль для зашифрованных документов Word.
• -d --dir=dir
Задает каталог, в котором будет сохранена создаваемая графика.
• -v -version
Выдает версию пакета wvWare.
• -? -help
Выводит краткую справку по использованию программы.
Выходной фильтр, указываемый опцией -x или -config=, задает формат выходного файла. Если эта опция не задана, то выходной фильтр ищется в текущем каталоге или (если в текущем не нашли) по месту установки пакета. По умолчанию используется фильтр wvHtml.xml, т. е. doc-файл преобразуется в формат HTML.
После преобразования полученный файл можно просмотреть с помощью соответствующей программы просмотра, например, html-файл - с помощью любого Web-браузера. Конечно, при этом некоторые возможности форматирования, имеющиеся в Word, теряются, и это надо иметь в виду, просматривая полученные файлы.
Насколько я могу судить, именно программы пакета wv используются для открытия файлов MS Word в некоторых текстовых редакторах для Linux, например, в AbiWord.
[user]$ iconv -f866 -tKOI8-R -o ‹outfile› infile
Если не указать выходной файл (опция -o), то результат будет выдаваться на экран (используя фильтры more или less можно удобно просмотреть файл). Чтобы получить список всех возможных кодировок (а он огромен!), дайте команду iconv -list, а для получения помощи: iconv -? или iconv -usage. Между прочим, man-страница не выдается. Впрочем, других опций все равно очень немного: только -verbose (сообщать дополнительные сведения), -V, и -version (обе опции служат для вывода версии программы).
Программу recode можно найти на http://www.iro.umontreal.ca/~pinard/recode/.
Запускается она примерно так:
[user]$ recode CP1251..KOI8-R winfile.txt
Кроме упомянутых команд вы можете воспользоваться программой "Russian Anywhere", которая существует как в версии для Windows (где я с ней и познакомился), так и в версии для командной строки Linux (создатели обещают выпустить и графическую оболочку). Эту программу можно скачать (как в исходных кодах, так и в виде исполняемого модуля) с сайта разработчика http://www.livotov.org/software/.
Исполняемый модуль программы имеет название re. Его лучше поместить в один из каталогов, указанных в переменной PATH.
Программа вызывается из командной строки. Для того, чтобы перекодировать какой-то файл, который "не читается", в кодировку KOI8-R, надо дать команду:
[user]$ re ‹SourceFile› ‹DestFile›? K
где:
• ‹SourceFile› - исходный (нечитаемый) файл;
• ‹DestFile› - перекодированный файл;
• ? - сообщает RE, что кодировка исходного файла не известна и re должна проанализировать файл и самостоятельно определить его кодировку;
• K - задает кодировку для результирующего файла (в данном случае KOI-8).
Если вы знаете кодировку исходного файла, вы можете указать ее вместо символа "?". Например, если вы хотите перекодировать файл letter.txt, который был создан в Windows, и вы знаете, что файл сохранен в кодировке 1251, то надо дать команду:
[user]$ re letter.txt letter-koi.txt W K
После этого, просмотрев файл letter-koi.txt, вы увидите вполне читаемый русский текст в KOI8-R.
Полный формат вызова перекодировщика:
[user]$ re options filename_from filename_to cp_from cp_to [s/d/f] [u/l/s]
где options: [-v][-E|-R|-N][-e|-s]
• -v - выдавать информацию о ходе обработки;
• -n - не выдавать информацию о ходе обработки (задано по умолчанию);
• -E - преобразовывать все символы p, H из русских в английские;
• -R - преобразовывать все символы p, H из английских в русские;
• -N - оставлять все p, H (русские и английские) как в исходном тексте (задано по умолчанию);
• -e - перекодировать все символы 0x80 - 0xFF;
• -s - перекодировать только 64 символа русского алфавита (задано по умолчанию),
а cp_from и cp_to - любой из следующих символов, обозначающих возможные кодировки (по умолчанию - W,K).
Таблица 12.1. Обозначение кодировок в программе re.
| Символ | Кодировка | Символ | Кодировка |
|---|---|---|---|
| W | Windows | _ (подчеркивание) | _xxe |
| D | Dos | % | %hex |
| K | KOI-8 | \\ | \'hex |
| L | Latin | G | Graph_win |
| I | Iso | ‹ | binhex |
| H | HEX | + | +UTF7- |
| S | ShiftKbrd | C | C_MIC |
| M | Mac | Y | Y_c16 |
| A | AFF | Z | Z_c32 |
| O | Odd(UTF8_1) | F | F(UTF8_2) |
| B | Base64 | P | Pict |
| E | Express | N | N_Estl |
| T | T-Html | V | V_Vpp855 |
| U | User | X | X_sp |
| - (тире) | uue | J | J_diff |
[root]# rpm -i ispell-3.1.20-23.i386.rpm
а для второго - команду
[root]# rpm -i ispell-russian-3.1.20-23.i386.rpm.
После этого в каталоге /usr/lib/ispell появятся файлы русского словаря russian.aff и russian.hash (остальные словари, например, немецкий) можно удалить, если вы не собираетесь производить проверку правописания на этих языках.
Для проверки текста теперь достаточно дать команду следующего вида:
[user]$ ispell -drussian edit.htm
Естественно, имя файла edit.htm здесь взято для примера; вы должны подставить имя того файла, который вы хотите проверить, причем файл должен находиться в текущем каталоге, иначе надо указать полное имя файла с указанием пути.
Рис. 12.6. Проверка правописания с помощью ispell
Принцип работы программы ispell очень прост: каждое встречающееся в файле слово должно иметься в словаре программы. Если слово в словаре не найдено, считается, что найдена ошибка, и на экран выводится сообщение, пример которого можно увидеть на рисунке 12.5. В самой верхней строке выведено обнаруженное ошибочное слово и имя проверяемого файла. Ниже выведено несколько строк (число можно задать) из этого файла, содержащих обнаруженную ошибку. Если в словаре обнаружены слова, похожие на ошибочное, то они выводятся ниже (с порядковыми номерами). Далее следует строка подсказки и командная строка программы.
В командной строке в нижней части можно использовать следующие клавиатурные команды.
Таблица 12.2. Команды замены в программе ispell.
| Команда | Выполняемое действие |
|---|---|
| ‹R› | Заменить ошибочное слово (программа предложит набрать правильное слово в нижней строке экрана) |
| ‹пробел› | Пропустить данное вхождение слова |
| ‹A› | Пропустить все вхождения данного слова в текущей сессии работы с программой |
| ‹I› | Пропустить это слово и включить его в персональный словарь (который хранится в файле .ispell_russian в домашнем каталоге пользователя |
| ‹U› | То же самое, только слово записывается в нижнем регистре (маленькими буквами) |
| ‹Q› | Немедленный выход из программы (вначале запрашивается подтверждение, а проверяемый файл остается не измененным; сделанные замены не проводятся) |
| ‹X› | Прервать проверку, записать проведенные изменения и выйти из программы |
| ‹!› | Временный выход в оболочку shell |
Рис. 12.7. Внешний вид окна редактора Cooledit
Этот редактор обеспечивает выполнение большинства функций редактирования, присущих полноэкранным редакторам текста. С его помощью можно редактировать файлы практически любого размера, поскольку верхняя граница для размера редактируемого файла составляет 16 Мбайт. Обеспечивается редактирование исполняемых (двоичных) файлов без потери данных.
Поддерживаются следующие возможности:
• копирование, перемещение, удаление, вырезание и вставка блоков текста;
• отмена предыдущих операций (по комбинации клавиш ‹Ctrl›+‹U›);
• выпадающие меню;
• вставка файлов;
• макро-определения;
• поиск и замена по регулярным выражениям (другими словами, по шаблонам, сформированным с использованием специальных символов), а также собственный вариант операций поиска и замены, основанный на функциях scanf-printf;
• выделение текста комбинацией клавиш ‹Shift›+‹стрелки› в стиле MS Windows - MAC (только для linux-консоли);
• переключение между режимами вставки-замены символа.
Редактор очень прост и практически не требует обучения (тем более, что можно найти версии, в которых основная часть пунктов меню русифицирована, такая версия была включена, например, в дистрибутив Black Cat 5.2). Для того, чтобы узнать, какие клавиши вызывают выполнение определенных действий, достаточно просмотреть выпадающие меню, вызываемые нажатием клавиши ‹F9› в окне редактора (рис. 12.8).
Рис. 12.8. Выход в меню Cooledit по клавише ‹F9›
Если вы работаете в консоли Linux, для работы с блоками текста можно использовать следующие комбинации клавиш: ‹
• Shift›+‹клавиши стрелок› - выделение блока текста;
• ‹Ctrl›+‹Ins› - копирует блок в файл cooledit.clip;
• ‹Shift›+‹Ins› - производит вставку последнего скопированного в cooledit.clip блока в позицию курсора;
• ‹Shift›+‹Del› - удаляет выделенный блок текста, запоминая его в файле cooledit.clip.
Если у вас установлена программа gpm - драйвер мыши для консоли, то вы можете нажать на левую кнопку мыши в начале выделяемого блока, перенести курсор в конец блока и отпустить кнопку (тем самым выделить текст), а затем перенести курсор туда, куда надо вставить фрагмент, и нажать на правую кнопку мыши для вставки выделенного текста.
Редактор поддерживает макросы. Для того, чтобы определить макрос, нажмите ‹Ctrl›+‹R›, после чего введите строки команд, которые должны быть выполнены. После завершения ввода команд снова нажмите ‹Ctrl›+‹R› и свяжите макрос с какой-нибудь клавишей или комбинацией клавиш, нажав эту клавишу (комбинацию). Макрос будет вызываться нажатием ‹Ctrl›+‹A› и назначенной для него клавиши. Макрос можно также вызвать нажатием любой из клавиш ‹Alt›, ‹Ctrl› или ‹Esc› и назначенной макросу клавиши, при условии, что данная комбинация не используется для вызова какой-либо другой функции.
Макро-команды после определения записываются в файл cedit/cooledit.macros в Вашем домашнем каталоге. Вы можете удалить макрос удалением соответствующей строки в этом файле.
При выполнении операций замены (по функциональной клавише ‹F4›) вы можете использовать функции поиска и замены scanf для поиска и замены в соответствии с шаблонами формата языка C. Вначале посмотрите man-страницы sscanf и sprintf, чтобы узнать, что такое шаблоны формата и как они работают.
Приведем пример: предположим, вы хотите заменить все вхождения блоков текста, состоящих из открывающей скобки, трех разделенных запятыми чисел, и закрывающей скобки, на блок, состоящий из слова apples, третьего числа исходного блока, слова oranges и потом второго числа из исходного блока. Тогда в диалоговом окне, которое появится при вызове команды замены (‹F4›), надо задать следующие шаблоны:
Enter search string
(%d,%d,%d)
Enter replace string apples %d oranges %d
Enter replacement argument order
3,2
Последняя из этих строк говорит, что третье и второе число должны быть подставлены на места первого и второго аргументов. Рекомендуется все же при осуществлении замены пользоваться опцией "спрашивать подтверждение" ("Prompt on replace"), потому что программа считает совпадениями все случаи, когда число аргументов совпадает с заданным, хотя это не всегда означает полное совпадение. Scanf также не обращает внимания на количество символов пробела.
Встроенный редактор обрабатывает символы из второй половины кодовой таблицы (160+). Но когда редактируете бинарные файлы, лучше установить опцию Биты символов (Display bits) из меню Настройки в положение "7 бит", чтобы сохранить формат файла.
Для того, чтобы описать здесь все функции встроенного редактора, потребовалось бы слишком много места. Да в этом и нет нужды, поскольку для его использования достаточно запомнить, что все основные операции можно выполнить через пункты меню, которое вызывается нажатием клавиши ‹F9› в окне редактирования. Кроме того, можно прочитать man-страницу по команде man mcedit или info mcedit.
В завершение этой краткой справки по встроенному редактору программы Midnight Commander мне хочется рассказать о том, как осуществляется перенос фрагментов текста из одного файла в другой.
Если вы работаете в консоли, то эта задача решается через меню или с помощью следующих операций:
• отмечаем начало блока с помощью клавиши ‹F3›;
• перемещаем курсор к концу блока;
• отмечаем конец блока с помощью клавиши ‹F3›;
• набираем комбинацию ‹Ctrl›+‹Insert›;
• закрываем этот файл, открываем другой;
• ставим курсор туда, куда хотим вставить данный фрагмент, и нажимаем комбинацию клавиш ‹Shift›+‹Insert›.
Все, задача выполнена. Перенос фрагмента текста этим способом может быть произведен из одной виртуальной консоли в другую.
Но все это работает только в консоли. А при работе с тем же редактором в окне графической оболочки та же задача была для меня достаточно долгое время проблемой.
Я не сразу нашел способ ее решения (т. е. переноса фрагмента текста), который работает как в консоли, так и в окне графической оболочки. Этот способ состоит в переносе фрагмента текста через другой файл (по умолчанию используется файл ~/.cedit/cooledit.clip). Выделите фрагмент текста, выберите пункт меню Файл | Копировать в файл (File | Copy to file) и нажмите ‹Enter›. Затем переходите в другой файл, ставите курсор туда, куда надо вставить фрагмент, и выбираете пункт меню Файл | Вставить файл (File | Insert file).
Рис. 12.9. Окно редактора KEdit.
Во многих редакторах, и в том числе в KEdit, операции перемещения по тексту и удаления, можно выполнять также с помощью "горячих" комбинаций клавиш (возможно, в связи с тем, что на старых терминалах не было клавиш стрелок?):
• ‹Ctrl›+‹A› - переместить курсор в начало строки.
• ‹Ctrl›+‹B› - переместить курсор на один символ вправо.
• ‹Ctrl›+‹E› - переместить курсор в конец строки.
• ‹Ctrl›+‹N› - переместить курсор на одну строку вниз.
• ‹Ctrl›+‹P› - переместить курсор на одну строку вверх.
• ‹Ctrl›+‹D› - удалить символ справа от курсора.
• ‹Ctrl›+‹H› - удалить символ слева от курсора.
Основные команды по переносу блоков текста из одного места в другое осуществляются с помощью тех же комбинаций, которые используются в редакторе из Midnight Commander и многих других редакторах, так что пальцы находят эти комбинации уже автоматически:
• ‹Ctrl ›+‹C› - скопировать выделенный текст в буфер обмена (clipboard);
• ‹Ctrl›+‹X› - вырезать выделенный фрагмент текста и поместить его в буфер обмена;
• ‹Ctrl›+‹V› - вставить фрагмент текста из буфера обмена в позицию курсора;
• ‹Ctrl›+‹K› - удалить текст от курсора до конца строки и поместить его в специальный буфер (kill-buffer);
• ‹Ctrl›+‹Y› - вставить фрагмент текста из специального буфера в позицию курсора. С помощью комбинации ‹Ctrl ›+‹ J› можно отформатировать текущий абзац текста. Форматирование, впрочем, заключается только в том, что очень длинные строки текста разбиваются на такие, длина которых не превышает величину, заданную в соответствующей опции пункта меню Настройки.
Комбинация ‹Ctrl›+‹F› вызывает функцию поиска подстроки.
Для сохранения результатов редактирования в файле можно воспользоваться пунктом меню Файл | Сохранить или комбинацией ‹Ctrl›+‹S›. Если вы хотите сохранить редактируемый текст в файле с другим именем, то тут надо действовать только через меню (Сохранить как).
KEdit поддерживает печать. Вы можете распечатать как весь редактируемый файл, так и выделенный фрагмент текста. Печать осуществляется на принтере, заданном по умолчанию. Дополнительно можно подключить любую из утилит печати, которые во множестве разработаны для UNIX.
Что меня особенно восхитило при первом знакомстве с KEdit, так это встроенная возможность проверки правописания и возможность просмотра и редактирования файлов как в кодировке CP-1251, так и в кодировке koi8-r.
Для смены кодировки надо поиграть выбором шрифтов в пункте меню Настройки | Шрифт. К сожалению, не все шрифты поддерживают обе кодировки, но после нескольких попыток удается выбрать нужный шрифт. Для проверки правописания достаточно выбрать пункт меню Редактирование | Проверка правописания. Естественно, что в системе должна быть установлена программа ispell, и, кроме того, перед началом проверки стоит войти в пункт меню Настройки | Проверка правописания и выбрать русский словарь и желаемую кодировку символов (смотри рис. 12.10).
Кстати, пункт меню Настройки вообще желательно повнимательнее посмотреть перед началом редактирования каких-то файлов, выбрать нужные вам установки, после чего сохранить их (подпункт Записать установки).
Рис. 12.10. Настройка проверки правописания в KEdit
Еще одна приятная, на мой взгляд, встроенная функция редактора KEdit - возможность вызова почтовой программы прямо из редактора. Я не смог проверить работу этой функции, поскольку на домашнем компьютере (изолированном) у меня некуда посылать письма. Но такой функцией я часто пользуюсь на работе, в MS Word, и она кажется мне очень полезной и удобной.
В общем, этот редактор с первого знакомства произвел на меня самое благоприятное впечатление, так что я рекомендую вам познакомиться с ним поближе. Возможно, вы даже изберете его для редактирования ASCII-файлов при работе в графическом режиме.
Рис. 12.11. Внешний вид окна редактора Nedit
После первого же знакомства с этим редактором я решил отказаться от использования KWrite и перейти на Nedit. А. Федорчук [П1.6] тоже считает, что Nedit приближается к идеалу текстового редактора, и даже называет его "лучшим редактором всех времен и народов".
Пожалуй, единственным (на мой взгляд, не очень существенным) недостатком Nedit по сравнению с KEdit или KWrite можно считать только то, что меню, сообщения и подсказки выдаются на английском языке. Правда, в меню нет такого пункта, как отправка почтового сообщения, но зато есть возможность выполнить любую команду оболочки shell или создать макрос, что с лихвой перекрывает отсутствие прямого вызова почтовой программы.
Рис. 12.12. Окно задания шрифтов в Nedit
Переключить редактор на ввод русскоязычного текста для меня не составило труда. Для этого нужно войти в пункт меню Preferences/Text Fonts… и задать нужные шрифты в строках ввода соответствующего окна (см. рис. 12.12). А, поскольку запомнить эти длинные строки с именами фонтов довольно трудно, можно воспользоваться кнопкой Browse… и выбрать шрифт из выводимого списка (см. рис. 12.13). Выбирать надо шрифт, имеющий кодировку KOI8-R. Обратите внимание, что для выбора шрифта надо отметить по одному варианту в каждом из трех предлагаемых столбцов, иначе Вы, вероятнее всего, получите сообщение о том, что такой шрифт отсутствует.
Рис. 12.13. Выбор шрифтов в Nedit
Учитывая, что в силу достаточно долгого периода использования таких редакторов, как редакторы файловых менеджеров FAR для MS Windows и Midnight Commander, у меня сложились устойчивые привычки по использованию некоторых комбинаций клавиш, мне было очень приятно обнаружить, что для вырезания, копирования и вставки блоков текста в Nedit используются привычные комбинации ‹Ctrl ›+‹X›, ‹Ctrl›+‹C› и ‹Ctrl›+‹V›. Выделение блока текста осуществляется либо мышкой, либо клавишами-стрелками при удерживаемой клавише ‹Shift›. Если удерживать ‹Shift›+‹Alt›, будет выделяться прямоугольный столбец. Операции с выделенными блоками можно проделать не только с помощью клавиатуры, но и через пункты меню Edit. Это удобно, если вы не помните комбинацию клавиш для выполнения задуманной операции. А старые привычки не всегда помогают, в частности для отмены последней операции в Nedit используется не ‹Ctrl›+‹U›, а ‹Ctrl›+‹Z›.
В том же меню Edit имеются два подпункта (Lower-case и Upper-case), с помощью которых можно перевести текст в выделенном блоке, соответственно, в нижний и верхний регистры.
Пункт File главного меню содержит подпункты, с помощью которых выполняются обычные операции открытия и сохранения редактируемых файлов. Обратите внимание на то, что с помощью подпункта Open Previous вы легко можете вернуться к редактированию тех файлов, с которыми работали в предыдущих сеансах. Подпункт Include file… (‹Alt›+‹I›) позволяет вставить содержимое выбранного файла в позицию курсора, подпункт Print… служит для вывода редактируемого файла на принтер.
Пункт Search главного меню содержит обращения к операциям поиска и замены, а также быстрого перехода к нужной строке или к сделанной ранее закладке (и установки такой закладки-отметки).
Для настройки программы в соответствии с Вашими вкусами и привычками служит пункт меню Preferences. Я уже рассказал, как выбрать шрифт для вывода текста в окне программы. Здесь же вы можете с помощью команды Language Mode выбрать язык (например, html или С), по правилам которого будет осуществляться подсветка элементов текста (служебных слов или тэгов), установить размер табуляции (Tabs…), а также включить или выключить нумерацию строк текста, отображение строки статистики, подсветку синтаксиса, режим сохранения резервной копии файла, режим вставки/замены символа.
Пункт Shell используется для запуска команд оболочки и внешних программ. Здесь Вы, в частности, найдете вызов программы проверки правописания ispell, только нет возможности через меню программы подключить русский словарь. Но эта трудность легко преодолевается за счет использования файла ресурсов .nedit в домашнем каталоге пользователя. Достаточно в строке, определяющей вызов программы ispell, добавить параметр -d russian и проверка русскоязычных текстов заработает (в отдельном окне терминала).
Через тот же файл ~/.nedit можно настроить цвета фона и текста, геометрию окна программы и некоторые другие параметры. То же самое можно сделать и в специальной секции [nedit] файла.Xdefaults в Вашем домашнем каталоге. Правда, такой секции в этом файле по умолчанию нет, но ее можно создать, как это рекомендуется в книге А.Федорчука.
Но вернемся к пунктам меню. Пункт Windows служит для переключения между окнами (которых можно открыть одновременно несколько). Назначение пункта Help, я думаю, понятно без дополнительных пояснений. К сожалению, подсказка дается по-английски и отсутствует поиск подсказки по ключевым словам и фразам.
В этом кратком описании я не касался пункта меню Macro, а также тех подпунктов главного меню, которые ориентированы на действия, выполняемые при редактировании исходных текстов программ (например, вставка кодов ASCII, подсветка парных скобок или компиляция программного кода). Но даже и на основании того, что было сказано в данном подразделе, можно сделать вывод, что Nedit - это достаточно мощный и удобный редактор для работы с ASCII-файлами в графическом режиме. Если вы хотите узнать о нем побольше, почитайте статьи A.Федорчука в Интернет или его книгу [П1.6].
Рис. 12.14. Основное окно редактора Ted
Приведу краткий список основных возможностей Ted.
• Редактирование файлов в режиме WYSIWIG. При этом вы можете использовать все шрифты, для которых у вас имеются.afm-файлы и которые доступны для X11. Ted поставляется с .afm-файлами для шрифтов Adobe, которые имеются для систем, основанных на Motif, и могут использоваться со всеми postscript-принтерами: Times, Helvetica, Courier и Symbol. Другие шрифты могут быть добавлены с помощью обычных процедур, используемых для этого в X11. Поддерживаются такие свойства шрифтов как выделение (bold), курсив (italic), подчеркивание, верхние и нижние индексы.
• Вставка рисунков в формате bitmap.
• Печать на PostScript-принтерах.
• Работа с файлами в формате Acrobat PDF.
• Проверка правописания для 12 языков, основанных на латинском алфавите.
• Отправка документов по e-mail не выходя из Ted.
• Операции Cut/Copy/Paste, включая обмен с другими приложениями.
• Поиск/Замена.
• Форматирование абзацев: отступ на первой строке, смещение всего абзаца, использование линеек.
• Разбиение текста на страницы.
• Вставка таблиц и операции с таблицами: операции с колонками и строками таблиц, изменение размеров с помощью линеек.
• Поддерживается вставка символов из разных кодовых таблиц.
• Гиперссылки и закладки (bookmarks).
• Сохранение документа в текстовом и HTML-формате.
Ted можно использовать для чтения сообщений электронной почты, посланных с Windows-машин. Можно также сконфигурировать Ted как просмотрщик RTF-файлов для Netscape.
Рис. 12.15. Проверка правописания в редакторе Ted
О том, что Ted может быть полностью русифицирован, я узнал из статьи Виктора Вагнера [П14.19]. Самая интересная возможность русифицированной версии - наличие проверки правописания для русскоязычного текста. Вызов этой функции производится с помощью пункта меню Инструменты | Правописание. При этом появляется дополнительное окно (см. рис. 12.15), в котором надо щелкать по кнопочке "Найти следующее" для поиска очередной ошибки.
Правда, судя по первому впечатлению, в той версии, которую я видел (версия 2.6), реализация данной функции имеет много недостатков. Во-первых, все слова, набранные латинским шрифтом, обозначаются как ошибки (хотя даже ispell без проблем игнорирует их). Во-вторых, воспринимаются как ошибки слова, начинающиеся с заглавной буквы (программа предлагает такое слово набрать полностью заглавными буквами). И, что самое непонятное, очень много правильно набранных слов воспринимаются как ошибочные, причем первым же вариантом исправления предлагается в точности то же самое слово.
Впрочем, много и других ошибок. Именно поэтому я вернулся к версии 2.7 и, следуя рекомендациям В.Вагнера, попытался русифицировать ее.
Первым делом надо научить Ted вводить и отображать русские буквы. Для того, чтобы Ted правильно отображал шрифты в кодировке koi8-r на экране, надо создать файл xfonts.dir в директории /usr/local/afm, где Ted держит метрики шрифтов (*.afm), поместив в него следующий текст
Courier-Bold-*-courier-bold-r-normal--*-*-*-*-*-*-*-*
Courier-BoldOblique-*-courier-bold-o-normal--*-*-*-*-*-*-*-*
Courier-Oblique-*-courier-medium-o-normal--*-*-*-*-*-*-*-*
Courier-*-courier-medium-r-normal--*-*-*-*-*-*-*-*
Helvetica-Bold-*-helvetica-bold-r-normal--*-*-*-*-*-*-*-*
Helvetica-BoldOblique-*-helvetica-bold-o-normal--*-*-*-*-*-*-*-*
Helvetica-Oblique-*-helvetica-medium-o-normal--*-*-*-*-*-*-*-*
Helvetica-*-helvetica-medium-r-normal--*-*-*-*-*-*-*-*
Times-Bold-*-times-bold-r-normal--*-*-*-*-*-*-*-*
Times-BoldItalic-*-times-bold-i-normal--*-*-*-*-*-*-*-*
Times-Italic-*-times-medium-i-normal--*-*-*-*-*-*-*-*
Times-Roman-*-times-medium-r-normal--*-*-*-*-*-*-*-*
После этого русские буквы вводятся и отображаются нормально. Однако проблема решена еще не полностью: после того как поработаешь с Format tool или любым диалогом, содержащим строку ввода, Ted снова перестает вводить русские буквы. Решение этой проблемы, предложенное Иваном Паскалем, состоит в том, что создается пустой файл /usr/X11R6/lib/X11/locale/koi8-r/Compose и в файл /usr/X11R6/lib/X11/locale/compose.dir добавляется строчка:
koi8-r/Compose ru_RU.KOI8-R
Это решение у меня вполне сработало (за исключением того, что клавиша ‹Delete› перестала удалять символы и стала вставлять пробелы, так что для исправления ошибок приходится пользоваться клавишей ‹BackSpace›).
Теперь рассмотрим вопрос о добавлении новых шрифтов. Вместе со стандартным дистрибутивом Ted поставляются только 4 шрифта: Courier, Helvetica, Symbol и Times. Если вы хотите оформлять свои документы более разнообразно, нужно добавить другие шрифты. В Ted можно использовать любой шрифт из числа тех, которые видны у вас в графической оболочке, однако для этого нужно кое-что сделать. Чтобы узнать, какие шрифты у вас имеются, запустите программу xfontsel и выберите тот шрифт, который хотите добавить. Предположим, что это Bookman Light.
Для того, чтобы Ted увидел новый шрифт, необходимо поместить метрику этого шрифта (метрика - это файл формата.afm) в директорию /usr/local/afm. Метрику можно либо найти готовую, либо создать самому. Ted весьма привередлив к метрикам шрифта. Как пишет В.Вагнер, Ted долгое время отказывался грузить шрифты от kapella, поскольку в afm-файле отсутствуют упоминания нескольких символов, фигурирующих в Adobe Standard Encoding. Вместе с тем, работа с метриками шрифта - обязательное свойство более-менее продвинутой программы форматирования, поскольку той информации о шрифте, которую предоставляет X сервер, недостаточно для качественной печати. Если вы попытаетесь работать с Ted, используя метрики, не соответствующие Вашим шрифтам, результат будет безобразный - слова будут наезжать друг на друга.
Готовые метрики шрифтов можно найти в коллекции Adobe base35, которая находится на FTP-сервере ftp://ftp.adobe.com, а инструкцию по их установке - в файле подсказки по редактору Ted.
В заключение замечу, что Ted позволяет осуществить русификацию интерфейса. Достаточно перевести на русский язык файл ресурсов, который находится в каталоге /usr/X11R6/lib/X11/app-defaults/ru и называется Ted. Если такого каталога нет, его нужно создать и складывать туда все русифицированные ресурсы. После этого, будучи запущенным с русской локалью, Ted будет выводить все меню и большую часть сообщений в диалоговых окнах по-русски.
Рис. 12.16. Основное окно редактора AbiWord
К сожалению, пока что этот редактор еще находится в состоянии разработки (я смотрел версии 0.7.8 и 0.7.14). При обращении к некоторым пунктам меню вместо указанного (или ожидаемого) результата появляется сообщение о том, что данный пункт пока не работает. В версии 0.7.8 это относилось к таким функциям, как создание нумерованных списков, стили, нумерация страниц и вставка символов. Вместо выполнения соответствующей функции появлялось сообщение: "пока не реализовано" ("not implemented yet"). И приглашение-просьба: если вы программист, присоединяйтесь к разработке, а если не программист, то будьте терпеливы. В версии 0.7.14 некоторые из этих недоработок уже устранены, однако часть ошибок все еще не исправлена. В частности, если в диалоговом окне открытия файла просто подсветить какой-то каталог и попытаться перейти в него нажатием клавиши ‹Enter›, происходит вызов нового экземпляра программы. Правда, текущим каталогом для этого нового экземпляра оказывается тот каталог, куда мы и хотели попасть, но напрасное открытие новых окон раздражает (да и ресурсы зря расходуются). Если же осуществлять переход в каталог двойным щелчком мыши, то нового окна не открывается. Есть и другие ошибки, причем при некоторых редактор просто закрывается, без предупреждений и сохранения результатов предыдущей работы. Так что считать это продукт готовым к применению пока что рановато.
Однако в целом он производит очень приятное впечатление и версия 0.7.14 кажется гораздо более работоспособной, чем 0.7.8. Это свидетельствует о том, что работа над программой продолжается. Поэтому давайте наберемся терпения в надежде, что появление полноценного продукта, реализующего все заявленные в меню возможности, не за горами.
Между прочим, по адресу http://www.hippo.ru/~hvv/abiword/ можно найти русифицированную версию AbiWord.
Рис.12.17. Стартовое окно программы KWord
Рис. 12.18. Окно выбора типа открываемого документа
В этом окне предлагается либо создать новый документ на основе одного из шаблонов, либо открыть существующий документ. Здесь же имеется возможность просмотреть список тех документов, с которыми вы работали в предыдущих сеансах и быстро вызвать один из них.
Как только вы вызвали на редактирование какой-то документ, или открыли новый, вид окна кардинальным образом изменяется (рис. 12.19). Появляются и новые пункты меню и панели инструментов и линейки форматирования страницы.
Рис. 12.19. Основное окно программы KWord
Работа с новым текстовым редактором обычно начинается с создания нового документа, поэтому и мы давайте создадим новый документ и попытаемся вводить текст. Для начала надо выбрать шрифт, естественно, русифицированный. В KWord это делается через пункт меню Формат | Шрифт. После выбора этого пункта меню появится окошко выбора шрифта (рис. 12.20), в котором этот самый выбор и осуществляем.
В русифицированной версии Linux среди этих шрифтов найдутся и шрифты в кодировках KOI8-R и cp1251. Выбираем один из них и начинаем вводить текст. Кстати, основные характеристики шрифта можно выбрать и, не заглядывая в меню, поскольку на панели инструментов (рис. 12.20) имеются выпадающие списки для наименования шрифта, размера символов, значки для задания жирного, подчеркнутого, зачеркнутого шрифта, а также для изменения цвета символов и превращения части текста в верхние и нижние индексы. Впрочем, значки на панели инструментов можно добавлять или, наоборот, убирать. Но о настройках панелей инструментов поговорим позже, а пока вернемся к набору текста.
Рис. 12.20. Выбор шрифта в KWord
Как только введен первый абзац, возникает желание придать ему благообразный вид. Что и сделаем с помощью пункта меню Формат | Абзац. Появится окно с пятью вкладками, изображенное на рис. 12.21. На первой вкладке можно задать отступы для строк абзаца (отдельно для первой строки и остальных), межстрочные интервалы и интервалы между двумя последовательными абзацами. Величина всех интервалов и отступов задается в миллиметрах. На второй вкладке задается положение строк данного абзаца на странице: смещение их влево, вправо, по центру или равномерное растяжение по ширине страницы.
Вкладка Рамка позволяет заключить данный абзац в рамку (например, чтобы как-то выделить данный абзац из общего текста). Две последних вкладки служат для задания формата списков и установки позиций табуляции, но об этом поговорим позже (если выдастся случай).
Следующий пункт в меню Формат позволяет задать формат целой страницы. После выбора пункта Формат / Страница появляется окно с тремя вкладками. Первая из них служит для задания ориентации страницы (книга или альбом), размера страницы (например, А4), ширины полей. На второй вкладке можно задать размещение текста в несколько колонок (столбцов). И третья вкладка определяет свойства верхнего и нижнего колонтитулов. Но нам пока еще не до таких тонкостей, давайте закончим набор первой страницы текста и посмотрим, как же готовая страница будет выглядеть на экране.
Рис. 12.21. Окно форматирования абзаца
Только вначале отметим, что так же, как и для выбора шрифта, для форматирования абзаца не обязательно пользоваться соответствующим пунктом меню. Во-первых, можно использовать панель инструментов "Формат", на которой можно выбрать один из стандартных стилей абзаца (правда, поначалу список выбора стиля не богат, но можно создать собственный стиль через пункт меню Формат | Менеджер стилей), положение строк на странице и сдвинуть абзац вправо. Кроме панели инструментов для форматирования абзаца можно воспользоваться линейками слева и вверху окна ввода текста. Эти линейки позволяют задать поля страницы и отступы абзаца.
Итак, если вы закончили ввод теста или хотя бы набрали целую страницу, можно посмотреть, как эта страница будет выглядеть отпечатанной. Для этого надо воспользоваться пунктом меню Файл | Предварительный просмотр или соответствующим значком на панели инструментов "Файл". В отличие от MS Word для предварительного просмотра страницы вызывается отдельная программа - "Просмотрщик PS/PDF" (о ней было сказано несколько слов выше). Если что-то в изображении страницы вам не понравится, можно вернуться к форматированию страницы и абзацев, чтобы после внесения изменений снова перейти к предварительному просмотру. Только, чтобы увидеть изменения, просмотрщик придется открыть снова, так что текущий экземпляр лучше закрывать.
Чтобы не потерять нечаянно результаты работы, давайте сохраним файл на диске. Для сохранения файла можно воспользоваться пунктом меню Файл | Сохранить или Файл | Сохранить как. В последнем случае можно задать новое имя файла и выбрать каталог, в котором окажется новый файл.
Раз уж мы заглянули в меню Файл, давайте посмотрим, какие в нем еще есть пункты. В общем, ничего неожиданного здесь не обнаруживается. Имеются пункты Новый, Открыть, Открыть недавние, Сохранить, Сохранить как, Создать шаблон из документа, Статистика (в этом пункте можно получить сведения о числе символов, слов и предложений в набранном тексте), Печать, Просмотр перед печатью, Сведения о документе (здесь вы можете ввести некоторые данные о себе, как авторе документа), Закрыть (текущий документ) и Выход.
Меню Правка тоже не содержит ничего неожиданного: в нем есть пункты Отменить (предыдущее действие), Повторить (т. е. заново выполнить отмененное действие), Вырезать, Копировать, Вставить, Выбрать всё (т. е. выделить все), Поиск и Замена.
А вот следующее меню для пользователей MS Word окажется непривычным. Оно называется Вид. В MS Word тоже имеется пункт меню с таким названием, но он содержит совершенно другие подпункты. А в KWord здесь обнаруживаются пункты:
Новый вид - выбор этого пункта приводит к открытию нового окна редактора KWord, в котором выведен тот же документ, который вы редактировали в первом окне. В отличие от запуска новой копии программы (нового окна с тем же файлом) при открытии нового вида все изменения, вносимые Вами в текст, будут отображаться в обеих окнах.
Закрыть все виды - приводит к выходу из программы.
Разделить вид - окно редактирования делится на две или большее число панелей, в каждой из которых выводится редактируемый файл. То же самое, что и Новый вид, только без открытия нового окна. В каждом виде можно перемещаться по тексту независимо.
Удалить вид - закрывает текущий вид, т. е. ту панель или окно, в котором в данный момент находится курсор.
Расположение разделителя - позволяет расположить панели видов вертикально или горизонтально.
Далее идут два пункта-переключателя: Page mode и Preview mode. В режиме Page mode в панели редактирования отображается одна страница текста, как вы видели на рис. 12.19. В режиме Preview mode на экран выводятся сразу все страницы документа. Линейки прокрутки позволяют перемещаться по страницам. Это позволяет посмотреть, как будут располагаться рисунки, таблицы и т. д.
Далее идет неактивизированный пока (я работал с версией 1.1 post-beta программы KWord) пункт Непечатаемые символы, после которого следуют еще три переключателя: Рамка врезки, Верхний колонтитул и Footer (в смысле "нижний колонтитул"). Эти три переключателя включают (или, соответственно, выключают) отображение соответствующих элементов оформления страницы (впрочем, Рамка врезки не является элементом оформления страницы, она видна только на экране).
Назначение последнего пункта в меню Вид очевидно из его названия - Масштаб. Впрочем, вместо этого пункта удобнее пользоваться выпадающим списком на панели инструментов. Тем более, что задать произвольное значение масштаба невозможно ни тем, ни другим способом, можно только выбрать одно из предустановленных значений.
Рис. 12.22. Параметры верхнего и нижнего колонтитулов
Раз уж речь зашла о колонтитулах, стоит упомянуть, что на вкладке Колонтитулы, которая становится доступной при выборе пункта меню Формат | Страница, можно задать по три параметра для верхнего и нижнего колонтитулов (смотри рис. 12.22).
В одном из колонтитулов обычно выводят номер текущей страницы. В KWord это можно сделать из следующего меню - Вставить. Надо выбрать пункт Переменная и из появившегося списка выбрать пункт Page Number.
А вообще через меню Вставить можно вставить картинку, таблицу, формулу, специальный символ, разрыв страницы, содержание, переменную, выражение (Expression), текстовый фрейм, фрейм с картинкой, фрейм с объектом (Object Frame). Правда с картинками работать достаточно сложно. Щелчок мышкой по картинке не приводит к появлению меню или каких-то символов, служащих для изменения размера. Надо умудриться щелкнуть по рамке картинки в левом верхнем углу, где имеется маленькая область, щелчок по которой приводит к появлению маленьких квадратиков в углах изображения и центрах сторон, уцепившись за которые, можно изменять размер картинки.
Несколько успешнее удается вставлять фрейм с картинкой. Вызвать меню управления фреймом тоже нелегко - надо попасть в ту же маленькую область на границе фрейма правой кнопкой мыши, чтобы вызвать это меню, но все же уже можно что-то сделать. После вызова меню появляется окно, избраженное на рис. 12.23.
Рис. 12.23. Окно настройки фрейма (врезки)
В этом окне можно задать взаимоотношения основного текста и врезки (см. рис. 12.23) и размер врезки, который для фреймов с картинками определяет и размеры изображения. Однако попытки изменения размеров картинок очень часто приводят к тому, что программа "сваливается".
Вставка таблиц работает, однако таблицы получаются пока не слишком красивые. Вставка формул - это пока, вообще, что-то неприменимое. Подпункт " Expression " позволяет вставить в текст несколько фиксированных фраз (привет, прощай, адрес e-mail и т. п.). В качестве вставляемых переменных могут использоваться номер страницы, число страниц в документе, имя файла, имя текущего каталога, текущие дата и время (причем, как я понял, либо время вставки этого параметра, либо время последнего редактирования документа), те данные, которые вы ввели в пункте Файл | Сведения о документе, а также любые определенные Вами значения. По поводу вставки переменных тоже можно высказать некоторые претензии. В частности, после первого сохранения файла вставка времени и даты сохраняется, а после второго сохранения - пропадает.
В меню Инструменты мы видим три пункта: Проверка правописания, Пользовательские переменные и Автозамена. Проверка правописания представляет собой графическую оболочку к встроенному вызову программы ispell. При обнаружении незнакомого слова оно выделяется и выводится окно, изображенное на рис. 12.24. Можно заменить слово одним из предлагаемых вариантов или пропустить его ("игнорировать" ошибку). Можно также напрямую поправить слово в строке предлагаемой замены, после чего нажать кнопку Заменить.
Рис. 12.24. Возможные реакции на ошибочные слова
Пункт Пользовательские переменные служит для определения собственных переменных, а пункт Автозамена - для задания правил автоматического исправления наиболее характерных и часто встречающихся ошибок, типа двух заглавных букв в начале слова. Можно изменить правила замены или задать собственные.
Через пункт меню Настройки можно включить или отключить отдельные панели инструментов, настроить вид этих панелей и привязки "горячих" клавиш, а также произвести некоторые настройки самой программы.
Ну, и, наконец, последний пункт главного меню, имеющий традиционную для KDE структуру: помощь по программе, сведения о Kword, и сведения о KDE. Помощь по программе пока (в версии 1.1) отсутствует, а сведения об авторах видны на рис. 12.25. На вкладке "Перевод” сообщается, что перевод сделан Андреем Черепановым.
Рис. 12.25. Сведения о разработчиках программы
На этом описание текстового процессора KWord можно считать завершенным. К сожалению, пока что и его нельзя признать полностью функциональным тестовым процессором. Главные претензии - работа с рисунками и таблицами. Но с русским языком процессор работает вполне нормально и даже позволяет выбрать кодировку символов. Как это сделать в MS Word (если это вообще возможно), мне не известно. Так что для создания не очень сложных документов KWord вполне пригоден.
| Программа | Команда |
|---|---|
| Текстовый процессор | swriter |
| Менеджер презентаций | simpress |
| Электронная таблица | scalc |
| Программа работы с графикой | sdraw |
| Программа обработки формул | smath |
Рис. 12.26. Окно программы slovo
Некоторые затруднения у вас может вызвать получение транскрипции, поскольку для корректной работы этой части программы необходимо установить специальные шрифты (это естественно, обычные шрифты не содержат знаков транскрипции). Однако в руководстве к программе, которое прилагается и в русскоязычном варианте, необходимые действия подробно описаны, так что объяснять это здесь нет нужды. По крайней мере, у меня все получилось, думаю, что и у вас тоже все будет нормально, разве что придется приложить небольшие усилия.
После запуска программы появляется окно, изображенное на рис. 12.26, только первоначально три нижних поля пусты.
Вы можете выбрать требующее перевода слово из списка в верхнем поле, либо прямо ввести его в строке ввода (второе сверху поле). В процессе ввода происходит перемещение подсветки в списке слов на слово, ближайшее к введенной Вами комбинации символов. Нажатие на клавишу ‹Enter› приводит к появлению перевода в нижнем поле окна программы и транскрипции в поле, расположенном над переводом. Пункт меню Словари позволяет сменить словарь (не все словари позволяют выводить транскрипцию, в моем случае этим свойством обладал только словарь Мюллера).
Надеюсь, что приведенных пояснений вполне достаточно для того, чтобы вы смогли результативно пользоваться этой программой.
Еще один распространенный англо-русский словарь встретился мне в составе дистрибутива ALT Linux Junior 1.0. Это словарь mova Евгения Цимбалюка. Окно графической оболочки для этого словаря изображено на рис. 12.27.
Рис. 12.27. Окно графической оболочки словаря mova
В строке ввода (она выделена желтым цветом) вводим английское слово и нажимаем клавишу "^Word”. Можно просто скопировать неизвестное слово в строку ввода. Инструкции по использованию программы даны в прилагаемом к ней файле Readme_mova_koi.txt, причем на русском языке, так что здесь подробных пояснений давать не требуется.
NET4: Linux TCP/IP 1.0 for NET4.0
IP Protocols: ICMP, UDP, TCP, IGMP
IP: routing cache hash table of 512 buckets, 4Kbytes
TCP: Hash tables configured (established 8192 bind 8192)
NET4: Unix domain sockets 1.0/SMP for Linux NET4.0.
NET4: Ethernet Bridge 008 for NET4.0
Далее нужно убедиться, что в состав ядра включен драйвер для вашей сетевой карты. Вообще-то, ядра, включаемые в стандартные дистрибутивы, обеспечивают поддержку большинства распространенных сетевых плат (что, конечно, увеличивает объем ядра). Так что с очень высокой вероятностью нужный драйвер входит в ядро. В процессе загрузки ядра выполняется процедура автоматического обнаружения сетевой карты. Если такое обнаружение было успешным, то в файле /var/log/dmesg вы найдете соответствующие сообщения. У меня они имеют вид:
eth0: 3Com PCI 3c905C Tornado at 0x4000, 00:01:02:b4:6c:65, IRQ 9
product code 'DU' rev 00.11 date 09-02-00
8K byte-wide RAM 5:3 Rx:Tx split, autoselect/Autonegotiate interface.
MII transceiver found at address 24, status 782d.
Enabling bus-master transmits and whole-frame receives.
Если карта не обнаружена, то вам придется перекомпилировать ядро (или поменять карту). Перекомпиляция ядра может иметь смысл и в том случае, если вы хотите удалить из ядра ненужные драйверы устройств, которые вы не используете. Но все же в большинстве случаев стандартное ядро успешно решает задачи поддержки сетевых возможностей, так что на вопросе перекомпиляции ядра сейчас мы останавливаться не будем. Рассмотрим только вопрос о динамическом подключении драйвера сетевой карты.
[root]# /sbin/insmod [-fkmpsxXv] [-o имя_устройства] файл_драйвера
Например, для сетевой карты можно выполнить команду следующего вида:
[root]# /sbin/insmod -o eth0 /lib/modules/2.2.x/net/net.o
Здесь 2.2.х надо заменить на версию установленного у вас ядра, а вместо net.o надо подставить имя модуля, соответствующего вашей сетевой плате. Поскольку у меня была плата 3Com, я выбрал 3с509.o (посмотрите перечень в подкаталоге /lib/modules/2.2.x/net/).
Замечание:
В последних версиях Linux вместо insmod используется modprobe.
Ядро именует драйверы Ethernet как eth0, eth1 и т. д., так что для подключения, например, второй сетевой карты надо в этом примере eth0 заменить на eth1.
Кстати, ядро не может автоматически определить наличие двух сетевых адаптеров. В этом случае вам придется произвести некоторые дополнительные настройки. Однако обсуждение этого вопроса выходит за рамки данной книги, ищите ответы в книге О. Кирха и других источниках.
В некоторых случаях в команде требуется дополнительно задать номер порта и номер используемого прерывания, а также некоторые другие опции, но подробнее об этом см. на странице man insmod.
Аналогично, для подключения модуля, обеспечивающего работу с модемом по протоколу PPP, надо дать команду
[root]# /sbin/insmod /lib/modules/2.2.11/net/ppp.o
(драйвер должен существовать и располагаться в указанном каталоге).
[root]# rpm -qa | grep net
или менеджером пакетов (если вы работаете с KDE). Если пакет не установлен, то необходимо установить его с вашего дистрибутивного диска.
| Дистрибутив. | Настройка интерфейса и маршрутизации | Запуск демонов |
|---|---|---|
| Debian | /etc/init.d/network | /etc/init.d/netbase /etc/init.d/netstd_init /etc/init.d/netstd_nfs /etc/init.d/netstd_misc |
| Slackware | /etc/rc.d/rc.inet1 | /etc/rc.d/rc.inet2 |
| RedHat | /etc/sysconfig/network-scripts/ifup-‹ifname› | /etc/rc.d/init.d/network |
[root]# /sbin/ifconfig lo 127.0.0.1
Теперь, чтобы проверить работоспособность протоколов TCP/IP на вашей машине, дайте команду:
[root]# ping 127.0.0.1
[root]# /sbin/ifconfig eth0 192.168.0.15 netmask 255.255.255.0 up
Если не указывать маску подсети, то по умолчанию устанавливается маска подсети 255.0.0.0.
В некоторых случаях необходимо бывает изменить адрес прерывания, используемого сетевой картой, порта ввода-вывода или типа соединения, используемого в сети. Это можно сделать, выполнив следующую команду:
root# /sbin/ifconfig eth0 irq 5 io_addr 220 media 10baseT
Не все устройства (платы) поддерживают динамическое изменение этих параметров (т. е. может потребоваться переустановить переключатели на плате).
[root]# netstat -nr
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
10.72.128.101 0.0.0.0 255.255.255.255 UH 0 0 0 eth0
10.72.128.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
127.0.0.0 0.0.0.0 255.0.0.0 U 0 0 0 lo
0.0.0.0 10.72.128.254 0.0.0.0 UG 0 0 0 eth0
Если таблица пуста, то вы увидите только заголовки столбцов. Тогда надо использовать route. С помощью команды route можно добавить или удалить один (за один раз) статический маршрут. Вот ее формат:
[root]# /sbin/route [-f] операция [-тип] адресат шлюз [dev] интерфейс
Здесь аргумент операция может принимать одно из двух значений: add (маршрут добавляется) или delete (маршрут удаляется). Аргумент адресат может быть IP-адресом машины, IP-адресом сети или ключевым словом default. Аргумент шлюз - это IP-адрес компьютера, на который следует пересылать пакет (этот компьютер должен иметь прямую связь с вашим компьютером). Команда
[root]# /sbin/route -f
удаляет из таблицы данные обо всех шлюзах. Необязательный аргумент тип принимает значения net или host. В первом случае в поле адресата указывается адрес сети, а во втором - адрес конкретного компьютера (хоста).
Как правило, бывает необходимо настроить маршрутизацию по упоминавшимся выше трем интерфейсам:
• локальный интерфейс (lo),
• интерфейс для платы Ethetnet (eth0),
• интерфейс для последовательного порта (PPP или SLIP). Локальный интерфейс поддерживает сеть с IP-номером 127.0.0.1. Поэтому для маршрутизации пакетов с адресом 127… используется команда:
[root]# /sbin/route add -net 127.0.0.1 lo
Если у вас для связи с локальной сетью используется одна плата Ethernet, и все машины находятся в этой сети (сетевая маска 255.255.255.0), то для настройки маршрутизации достаточно вызвать:
[root]# /sbin/route add -net 192.168.36.0 netmask 255.255.255.0 eth0
Если же вы имеете насколько интерфейсов, то вам надо определиться с сетевой маской и вызвать команду route для каждого интерфейса.
Поскольку очень часто IP-пакеты с вашего компьютера могут отправляться не в одну единственную сеть, а в разные сети (например, при просмотре разных сайтов в Интернете), то в принципе надо было бы задать очень много маршрутов. Очевидно, что сделать это было бы очень сложно, точнее просто невозможно. Поэтому решение проблемы маршрутизации пакетов перекладывают на плечи специальных компьютеров - маршрутизаторов, а на обычных компьютерах задают маршрут по умолчанию, который используется для отправки всех пакетов, не указанных явно в таблице маршрутизации. С помощью маршрута по умолчанию вы говорите ядру "а все остальное отправляй туда". Маршрут по умолчанию настраивается следующей командой:
[root]# /sbin/route add default gw 192.168.1.1 eth0
Опция gw указывает программе route, что следующий аргумент - это IP-адрес или имя маршрутизатора, на который надо отправлять все пакеты, соответствующие этой строке таблицы маршрутизации.
После настройки маршрутизации можно проверить, что у вас получилось. Для этого снова дайте команду
[root]# netstat -nr
Если вывод команды выглядит так, как это было показано выше, но не содержит строки, которая в графе Destination содержит 0.0.0.0, а в графе Gateway указывает на маршрут, используемый для соединений по умолчанию, то вы, вероятно, не задали этот маршрут.
HOSTNAME="new_host_name.localdomain.upperdomain"
DOMAINNAME=localdomain.upperdomain
Тогда в процессе инициализации системы эти имена будут восстанавливаться, потому что файл /etc/sysconfig/network вызывается из /etc/rc.d/rc.sysinit.
Кроме того, имя компьютера должно быть прописано в файле /etc/hosts, который связывает имя компьютера с его IP-адресом. Каждая строка файла /etc/hosts должна начинаться с IP-адреса, за которым следует имя данного узла. Следом за именем можно записать произвольное число псевдонимов этого узла.
Даже если ваш компьютер не подключен к сети, в файле /etc/hosts должна быть прописана хотя бы одна строка следующего вида.
127.0.0.1 localhost localhost.localdomain
Если же ваш компьютер подключен к TCP/IP сети, то в этом файле дополнительно нужно прописать строку вида
192.168.0.15 host_name host_name.localdomain
Файл /etc/hosts используется в механизмах разрешения имен. В больших сетях трудно было бы поддерживать в актуальном состоянии файлы /etc/hosts на всех компьютерах, если бы это был основной инструмент для определения IP-адресов по именам. Поэтому обычно для разрешения имен используются серверы DNS. Однако файл /etc/hosts все равно необходим, хотя бы для обращения к серверу DNS. Поэтому в нем имеет смысл указать IP-адреса и соответствующие имена шлюзов и серверов DNS и NIS. А чтобы все приложения использовали этот файл при разрешении имен, должен иметься файл /etc/hosts.conf, содержащий строку
order hosts,bind
которая говорит, что при разрешении имен сначала должен использоваться файл /etc/hosts, а затем должно происходить обращение к серверу DNS. В большинстве случаев в файле /etc/hosts.conf достаточно иметь две строки:
order hosts,bind
multi on
Эти параметры указывают системе преобразования имен, что надо просмотреть файл /etc/hosts перед тем, как посылать запрос к серверу, и что следует возвращать все найденные в /etc/hosts адреса для данного имени, а не только первый.
Но настройка механизма разрешения имен не ограничивается редактированием файлов /etc/hosts и /etc/hosts.conf. Необходимо еще указать компьютеру имена серверов DNS. Они прописываются в файле /etc/resolv.conf. Этот файл имеет весьма простой формат. Это текстовый файл, каждая строка которого задает один из параметров системы преобразования имен. Как правило, используются три ключевых слова-параметра:
• domain - задает имя локального домена.
• search - задает список имен доменов, которые будут добавляться к имени машины, если вы не укажете явно имени домена. Это позволяет ограничить область поиска и избежать некоторых ошибок (например, вы ищете компьютер linux.msk.ru, а механизм разрешения имен выведет вас на linux.spb.ru).
• nameserver - этот параметр, который вы можете указывать несколько раз, задает IP-адрес сервера преобразования имен, на который ваша машина будет посылать запросы. Повторяя этот параметр, вы можете задать несколько серверов.
Если вы не собираетесь заводить поддержку сервиса имен для своей сети (что является довольно сложной организационной и технической проблемой), и доверяете ведение своих имен администратору локальной сети или вашему IP-провайдеру, то вам достаточно задать файл /etc/resolv.conf примерно следующего вида:
domain abcd.ru
search abcd.ru xyz.edu.ru
nameserver 192.168.10.1
nameserver 192.168.12.1
В этом примере машина находится в домене abcd.ru. Если вы зададите имя машины, не указывая домена, например "pc1”, то система преобразования имен попытается сначала найти машину "pc1.abcd.ru”, а в случае неудачи - "pc1.xyz.edu.ru”. Для преобразования имен ваша машина будет обращаться к серверам по адресам "192.168.10.1” и "192.168.12.1”.
[user]$ ping 192.168.0.2
или (тут вы одновременно проверяете и работу службы DNS)
[user]$ ping pc1
Если соединение с сетью установлено, должны появиться и периодически обновляться строчки примерно такого вида:
64 bytes from 192.168.0.2: icmp_seq=0 ttl=32 time=1.2 ms
64 bytes from 192.168.0.2: icmp_seq=1 ttl=32 time=1.0 ms
64 bytes from 192.168.0.2: icmp_seq=2 ttl=32 time=1.0 ms
64 bytes from 192.168.0.2: icmp_seq=3 ttl=32 time=1.0 ms
64 bytes from 192.168.0.2: icmp_seq=4 ttl=32 time=1.1 ms
Это означает, что сетевое соединение работает. Для того чтобы прервать тестирование сети, нажмите комбинацию клавиш ‹Ctrl›+‹C›.
Рис. 13.1. Главное меню программы netconf
Надо только иметь в виду, что многие опытные пользователи Linux критически относятся к возможностям пакета linuxconf и предпочитают прямое редактирование конфигурационных файлов. Но для новичка эти утилиты могут оказаться удобнее, поэтому дадим их краткую характеристику на примере программы netconf. Запустив ее, вы увидите окно, изображенное на рис. 13.1.
Для того чтобы задать имя вашего компьютера, надо нажать кнопку Basic host information, после чего появится еще одно окно с пятью закладками. На закладке Host name задается имя компьютера, а на закладке Adaptor1 - параметры IP-соединения (см. рис. 13.2).
Рис. 13.2. Задание имени через netconf
Рис. 13.3. Настройка сетевого адаптера
Можно ввести параметры непосредственно в появившиеся строки ввода (если вы знаете, что нужно вводить), а можно выбрать подходящий вариант из списка, который появляется, если щелкнуть мышкой по треугольнику в конце строки. После завершения ввода параметров надо нажать экранную кнопку Accept.
Адрес сервера DNS и настройка системы разрешения имен задается в окне, появляющемся при нажатии на кнопку Name server specification (DNS) программы netconf (рис. 13.3). При выходе из программы после завершения редактирования появится дополнительное окно с запросом (рис. 13.4), в котором надо выбрать вариант Activate the changes.
Как видите, пользоваться этой программой несколько удобнее, чем искать нужные конфигурационные файлы и править их вручную. Здесь все настройки сети собраны в одном месте, и их легко задать в одном сеансе работы с программой. Надо только иметь в виду, что для работы с этой программой (как и с конфигурационными файлами) необходимо иметь права суперпользователя.
Рис. 13.4. Настройка системы разрешения имен через netconf,
Рис. 13.5. Сохранение
[user]$ telnet linux2
Если программе удалось подключиться к указанному компьютеру, на экране появится сообщение "Connected to server linux2" и приглашение к входу в систему, как если бы вы сидели за терминалом компьютера linux2. Вводите имя (user5) и пароль, и вы будете работать на этом компьютере.
Команда rlogin может быть использована для выхода на удаленный компьютер вполне аналогично команде telnet, хотя лучше сразу указать в командной строке имя пользователя:
[user]$ rlogin -l user5 linux2
Завершив работу, не забудьте закрыть сессию (командой exit). После этого программа telnet (или rlogin) докладывает, что сессия закрыта, и вы возвращаетесь к командной строке локальной оболочки.
Когда вы работаете с программой telnet, вы полностью работаете на удаленном компьютере: команды выполняются в его оперативной памяти, вы видите (по команде ls) каталоги и файлы на дисках удаленного компьютера и т. д. Только вывод результатов осуществляется на ваш монитор. В рамках программы telnet невозможно, например, открыть для просмотра файл, расположенный на локальном диске. Ваш компьютер выполняет только роль удаленного терминала. Если же вы хотите организовать обмен файлами между вашим компьютером и удаленным, можно воспользоваться программой ftp.
ftp ›
Если ввести знак вопроса, программа выдаст перечень возможных команд. Первая команда, которую нужно в этом случае ввести, - команда open, после которой надо указать сетевое имя компьютера, на котором запущен ftp-сервер. Если анонимный доступ к этому серверу разрешен, то вы получите запрос на ввод имени и пароля пользователя. По команде pwd можно узнать имя текущего каталога на удаленном компьютере, а по команде dir - вывести список файлов и подкаталогов этого каталога. Команда cd имя_каталога используется для смены текущего каталога на удаленном компьютере.
В любой момент вы можете повторно ввести команду ? или ее эквивалент help, чтобы получить подсказку по возможным командам. Для получения более подробной подсказки по конкретной команде надо ввести имя интересующей вас команды после help или ?, например, так:
ftp › help dir
Если вы хотите выполнить какую-то команду на локальном компьютере (например, выяснить имя текущего каталога), надо дать соответствующую команду, перед которой поставить восклицательный знак:
ftp ›! pwd
! - это команда интерпретатора, вызывающая новый экземпляр оболочки shell локального компьютера. Первый аргумент, следующий за!, должен быть командой оболочки, а все остальные аргументы - аргументами вызываемой команды. Для смены текущего каталога на локальном компьютере имеется специальная команда lcd (очень полезная, поскольку часто до запуска ftp забываешь перейти в тот каталог, куда хочешь скопировать файл с удаленного компьютера; не выходить же из-за этого из программы ftp).
Для пересылки файла на удаленный компьютер используется команда
ftp › put имя_файла
(или ее синоним send), а для копирования файла с удаленного компьютера в текущий каталог на локальном диске - команда
ftp › get имя_файла
В принципе этих двух команд вполне достаточно для организации обмена файлами с удаленным компьютером, но как же неудобно ими пользоваться! Приходится набирать полностью имена всех пересылаемых файлов. Поэтому испытываешь воистину большое облегчение, когда узнаешь, что существуют такие команды как mput и mget. Они позволяют задать шаблон имени пересылаемых файлов, и будут дополнительно переспрашивать, надо ли пересылать каждый конкретный файл. Благодаря этому можно (самый крайний случай) заказать пересылку всех файлов:
ftp › mget *
а потом либо подтверждать пересылку очередного файла, либо отказываться. Конечно, когда файлов в каталоге очень много, то и это окажется утомительной процедурой, но ведь можно задать более разумный шаблон! Так что думайте, как облегчить себе работу.
Перед тем, как начать пересылку файлов, следует еще выполнить одну из команд, определяющих режим пересылки: ascii или binary. По умолчанию программа использует режим "ascii", и это вполне допустимо при пересылке текстовых файлов, но если вы собираетесь передать или получить исполняемый файл, то необходимо задать режим "binary". Процесс пересылки файлов можно прервать с помощью комбинации клавиш ‹Ctrl›+‹C›.
Пока вы находитесь в программе ftp, вы можете выполнить некоторые операции с файлами и каталогами на удаленном компьютере (конечно, для этого надо иметь соответствующие права). По команде
ftp › rename from_name to_name
осуществляется переименование файла или каталога; команда
ftp › mkdir name
создает каталог, а
ftp › delete name
удаляет файл или каталог. Еще одна интересная команда - system, позволяет выяснить тип операционной системы на удаленном компьютере. Ну, и наконец, команда close (или disconnect) позволяет завершить сеанс работы с удаленным компьютером, не выходя из программы ftp (т. е. предполагается, что после этого вы снова дадите команду open, например, для соединения с другим компьютером). Если же вы хотите вообще выйти из программы, то надо дать команду bye.
Я думаю, что приведенных здесь сведений вполне достаточно для успешной работы с программой ftp (для копирования файлов с удаленного или на удаленный компьютер, на котором запущен ftp-сервер). С другими возможностями этой очень полезной и широко применяемой программы вам придется знакомиться самостоятельно (вернее, с помощью man-страниц и системы info).
[root]# mount -o rsize=1024,wsize=1024 serv1:/common /mnt/serv1
Если в ответ вы получите сообщение, содержащее слова "Permission denied", значит вам не разрешен доступ на сервер.
Размонтировать файловую систему, смонтированную таким образом, можно обычной командой
[root]# umount /mnt/serv1.
Конечно, если вам постоянно необходимо монтировать каталог /common с сервера serv1, то лучше добавить в файл /etc/fstab строку следующего вида:
serv1:/common /mnt/serv1 nfs rsize=1024,wsize=1024 0 0
Это обычный формат строки файла /etc/fstab:
device mountpoint fs-type options dump fsckorder
Подробнее о выборе опций монтирования файловой системы NFS вы можете прочитать в NFS-HOWTO (этот документ имеется в русском переводе, см. [П15.7]).
[root]# smbclient -L pc1
для того чтобы увидеть доступные из сети ресурсы компьютера PC1. Если компьютер PC1 работает под управлением Windows NT, то надо сразу указать имя пользователя, который имеет права доступа к компьютеру:
[root]# smbclient -U user -L pc1
и в ответ на запрос программы ввести пароль этого пользователя, иначе вы не увидите даже списка открытых ресурсов.
В ответ на такой запрос вы получите примерно следующую информацию:
Domain=[WORKGROUP] OS=[Windows NT 4.0] Server=[NT LAN Manager 4.0]
Sharename Type Comment
--------- ---- -------
ADMIN$ Disk Remote Admin
public Disk
C$ Disk Default share
IPC$ IPC Remote IPC
G Disk
Server Comment
--------- -------
PC2 Samba 1.9.15p8
PC5
PC25 Samba 1.9.15p8
PC1
Обратите внимание на то, что вслед за строкой Server Comment перечисляются другие SMB-сервера в сети с доступными ресурсами.
Для того чтобы получить доступ к ресурсу на удаленном компьютере, надо дать команду следующего вида:
[user]$ /usr/sbin/smbclient servicename -U user [password]
где servicename - это имя машины и ресурса, которые должны бы вообще-то иметь вид \\pc1\public, но из-за ограничений оболочки каждый слэш надо удваивать, поэтому команда принимает следующий вид:
[user]$ /usr/sbin/smbclient \\\\PC1\\public -U user mypasswd
(в той версии Samba, которая стоит у меня, прекрасно работают и обратные слэши, которые к тому же не надо удваивать:
[user]$ /usr/sbin/smbclient //PC1/public -U user mypasswd
скорее всего и у вас будет то же самое).
Указывать имя пользователя в опции необходимо только в том случае, если оно не совпадает с именем пользователя, от имени которого вы запустили программу smbclient. Естественно, что пароль необходим только в том случае, если доступ к ресурсу защищен паролем.
Если доступ к ресурсу дан, вы получите приглашение программы:
Server time is Sat Mar 11 15:58:27 2000
Domain=[WORKGROUP] OS=[Windows NT 4.0] Server=[NT LAN Manager 4.0]
smb: \›
В ответ на это приглашение вы можете вводить одну из следующих встроенных команд программы smbclient (этот перечень вы можете получить, введя команду h или ?:
smb: \> h
ls dir du lcd cd
pwd get mget put mput
rename more mask del open
rm mkdir md rmdir rd
prompt recurse translate lowercase print
printmode queue cancel quit q
exit newer archive tar blocksize
tarmode setmode help ? !
[user]$ /usr/sbin/smbmount //PC1/public /mnt/pc1 -U 123 -W 456'
(в этом примере сетевой ресурс монтируется в локальный каталог /mnt/pc1, причем владельцем каталога объявляется пользователь 123 и группа 456). При необходимости нужно будет ввести пароль пользователя (тот же, по которому вы получали доступ к ресурсу в команде smbclient).
Команда smbumount позволяет обычным пользователям размонтировать файловую систему, смонтированную командой smbmount (пользователь root может воспользоваться обычной командой umount. Формат команды (используется название точки монтирования из того же примера):
[user]$ /usr/sbin/smbumount /mnt/pc1
Если после монтирования сетевого ресурса запустить программу Midnight Commander и перейти в каталог /mnt/pc1, то вы увидите файлы каталога public на компьютере PC1. Думаю, вы согласитесь с тем, что теперь с ними работать будет значительно проще, чем через smbclient.
Затруднения
Если что-то не получается, то проделайте следующее:
1. Убедитесь, что между двумя компьютерами имеется связь по сети, для чего дайте команду ping IP-adress с вашего компьютера на тот компьютер, к которому вы хотите получить доступ.
2. Если такая связь есть, проверьте работу DNS, для чего дайте ту же команду ping, но уже с именем удаленного компьютера: ping RemoteName.
3. Если вы подключаетесь к общему ресурсу компьютера, работающего под Windows 95/98, то этого должно быть достаточно; если же вы подключаетесь к Windows NT или 2000, то надо проверить имя пользователя и домена, с которыми ваш компьютер обращается к NT, для чего лучше всего просмотреть журнал событий (аудит входа в систему) на удаленном компьютере; если потребуется, то задать имя пользователя и имя домена (последнее задается в файле /etc/smb.conf).
NET4: Linux IPX 0.44 for NET4.0
IPX Portions Copyright (c) 1995 Caldera, Inc.
IPX Portions Copyright (c) 2000 Conectiva, Inc.
Если строк, напоминающих эти, не найдется, то ваше ядро не имеет поддержки IPX и вам придется его перекомпилировать. При компиляции ядра (на этапе выполнения команды make config) нужно на вопрос:
The IPX protocol (CONFIG_IPX) [N/y/m/?]
ответить либо " y ”, либо " m ”. На следующий вопрос (о поддержке full internal net) вы можете ответить отрицательно (если не хотите превратить свой Linux-компьютер в полноценный Novell-сервер).
Поддержка протокола SPX в ядре не требуется (если речь идет только о клиентской части), но требуется поддержка протокола NCP (надо ответить утвердительно на вопрос "NCP file system support”).
Естественно, что должна также быть обеспечена поддержка сетевых средств вообще и настроен интерфейс сетевой платы (см. разд. 13.2).
Если у вас уже была установлена предыдущая версия пакета ncpfs и вы просто обновляете инсталляцию, то до выполнения процедуры установки надо выполнить (все, что вы будете дальше делать, - надо делать, имея права пользователя root) команду
[root]# umount -v -a -tncpfs
по которой размонтируются все ранее смонтированные через ncpfs ресурсы.
Проверить, установлены ли пакеты ipxutils и ncpfs можно с помощью команд
[root]# rpm -q ipxutils
ipxutils-2.2.0.18-3
[root]# rpm -q ncpfs
ncpfs-2.2.0.18-3
Номера версий могут отличаться. Если упомянутые пакеты не установлены - установите (найти их можно в каталоге RPMS инсталляционного диска). Например, на дистрибутивном диске ASPLinux 7.1 нашлась версия 2.2.0.18-3 пакета ncpfs в виде файла ncpfs-2.2.0.18-3.i386.rpm, и пакет ipxutils той же версии, так что установка была выполнена следующим образом:
[root]# rpm -Uhv ipxutils-2.2.0.18-3.i386.rpm
[root]# rpm -Uhv ncpfs-2.2.0.18-3.i386.rpm
Теперь вы должны выяснить, какой IPX-фрейм "бегает" у вас по сети - это очень важно (узнайте это у администратора сервера Nowell). В качестве примера примем, что у вас используется 802.3. Выполните команды
[root]# /sbin/ipx_configure -auto_primary=on -auto_interface=off
[root]# /sbin/ipx_interface add -p eth0 802.3
[root]# /usr/bin/slist
Последняя команда должна выдать список серверов Nowell Netware в сети, который выглядит примерно так:
Known NetWare File Servers Network Node Address
-------------------------------------------------------------
TEST 00034165 000000000001
SOFT 3123DB21 000000000001
NWSTEND 00100100 000000000001
Если вы не получите подобного списка серверов, не отчаивайтесь, - возможно, еще не все потеряно. Известны случаи, когда установленный пакет mars_nwe мешал нормальной работе с Novell-серверами. Удалите его перед установкой вышеуказанных пакетов
[root]# rpm -e mars_nwe.x.y.z
Далее создайте каталог, в который вы будете монтировать каталоги с Novell-сервера (если нужно несколько серверов, то должно быть несколько каталогов - по одному для каждого сервера). Например, для сервера NetWare1 создайте каталог /mnt/nw1. Теперь можно выполнить команду (для bindery-сервера) монтирующую том soft сервера NetWare1 с правами Novell- пользователя nwuser1 в каталог /mnt/nw1:
[root]# /usr/bin/ncpmount -S netware1 -V soft -U nwuser1 /mnt/nw1
Для NDS имя пользователя пишется по форме
cn=username.ou=unit.o=organization.
Например, если у вас контекст prog.firm, имя пользователя nwuser1, то вызов этот выглядит следующим образом:
[root]# /usr/bin/ncpmount -S netware1 -U cn=nwuser1.ou=prog.o=firm /mnt/nw1
Если все в порядке, то у вас будет спрошен пароль, и если вы его правильно введете, то каталоги сервера станут видны в указанном каталоге монтирования. Иногда команда ncpmount не срабатывает немедленно из-за задержек с прохождением пакетов. В таком случае подождите около 1 минуты и попробуйте снова.
Для размонтирования достаточно указать только точку монтирования:
[root]# /usr/bin/ncpumount /mnt/nw1
Однако выполнять все указанные действия необходимо с правами пользователя root. Если вы хотите иметь возможность монтировать сервера Novell от имени обычного пользователя (в домашний каталог, со своими правами доступа к серверам), то в конец файла /etc/rc.d/rc.local нужно вставить команды ipx_configure -auto_primary=on -auto_interface=off ipx_interface add -p eth0 802.3 chmod +s `which ncpmount` chmod +s `which ncpumount`
Тогда при загрузке Linux они будут выполнены автоматически и обеспечат пользователям возможность выполнять команды ncpmount и ncpumount. После этого пользователи смогут монтировать в свои домашние каталоги сервера Novell командой ncpmount.
Предостережение!
Никогда не вставляйте команды ncpmount в файл типа /etc/rc.d/rc.local! Это небезопасно с той точки зрения, что если злоумышленник проникнет в вашу машину - то он получит доступ и к серверам Novell. Лучше, если вы будете выполнять монтирование по мере необходимости. И не забывайте размонтировать их по исчерпанию необходимости. В команде ncpmount можно задать и пароль в виде параметра команды, но стоит этого делать: такой вызов сохраняется в истории команд и пароль может стать известным злоумышленнику. Не стоит и сохранять пароль в каком-либо скрипте, - это тоже канал возможной компрометации пароля.
--------------------------------------
Адрес машины 192.168.110.23
Сетевая часть 192.168.110.
Машинная часть .23
--------------------------------------
Маска 255.255.255.0
Адрес сети 192.168.110.0
Широковещательный адрес 192.168.110.255
--------------------------------------
Для выхода в Интернет с персональных (в частности, домашних) компьютеров чаще всего используется модем и телефонная линия. Существуют два протокола, которые позволяют передавать IP-сообщения по телефонным линиям. Это протокол SLIP (Serial Line Internet Protocol - межсетевой протокол для последовательного канала) и протокол РРР (Point-to-Point Protocol - протокол "точка-точка"). SLIP по возрасту старше и поэтому не всегда удовлетворяет предъявляемым ныне требованиям, а РРР - более современный универсальный протокол, который завоевывает все большую популярность. Он обеспечивает гораздо более стабильное соединение и может поддерживать работу целого ряда сетевых протоколов помимо IP.
Для установления SLIP-соединения в дистрибутивы Linux обычно включается программа dip, а РРР-соединение устанавливается с помощью программы pppd. Эта программа конфигурирует соединение, устанавливает лимиты MTU и получает IP-адреса. В отличие от dip, pppd не умеет устанавливать соединение с удаленной хост-системой. Чтобы использовать pppd, нужно сначала установить соединение, для чего обычно используется программа chat. Сначала эта программа устанавливает соединение, а затем pppd конфигурирует его.
Протокол PPP предусматривает возможность использования средств аутентификации пользователя, подключающегося к серверу. Обычно аутентификация осуществляется за счет проверки имени и пароля пользователя. Существует два основных способа аутентификации, определяемых протоколами PAP (Password Authentication Protocol) и CHAP (Challenge Handshake Authentication Protocol).
PAP-аутентификация происходит следующим образом. При установлении PPP соединения сервер предлагает пользователю использовать аутентификацию по протоколу PAP. Пользователь соглашается и затем передает свое имя и пароль открытым текстом. Если удаленную сторону имя и пароль устраивают, то аутентификация считается успешной.
Имена и пароли для PAP хранятся в файле /etc/ppp/pap-secrets в виде отдельных строк следующего формата: имя пользователя, имя удаленного сервера и пароль. У него должны быть такие права доступа "rw- --- ---".
В принципе, в PAP используется только имя и пароль пользователя, а имя удаленного сервера нужно только для того, чтобы можно было определить, какой пароль нужно использовать в случае, когда вы используете одно и то же имя у разных провайдеров, например:
username demos pas12345
username citynet pas98765
Заметим, что хотя пароль передается в открытом виде, удаленная сторона может хранить пароль в виде результата какой-либо хэш-функции, например, MD5, в качестве параметра которой выступает пароль.
CHAP-аутентификация происходит следующим образом. При установлении PPP соединения удаленный сервер предлагает пользователю аутентификацию по протоколу CHAP. Пользователь соглашается, и сервер высылает ему ключ (challenge), состоящий из случайной последовательности символов, и свое имя. Пользователь берет свой пароль и присланный ключ, и прогоняет их через алгоритм MD5. Получившийся результат высылает вместе со своим именем серверу. Сервер, зная пароль пользователя и высланный ему ключ, в свою очередь, проделывает тоже самое у себя, и, если его результат совпадает с присланным, то аутентификация считается успешной. Таким образом, пароль не передается в открытом виде, но удаленный сервер должен хранить пароли пользователей (обычно в открытом виде).
Имена и пароли для CHAP хранятся у пользователя в файле /etc/ppp/chap-secrets, права доступа у него должны быть такие же, как для PAP: "rw- --- ---", и формат строк тоже совпадает.
Протокол PPP позволяет организовать аутентификацию в одних случаях через PAP, а в других - через CHAP. Для этого клиентское ПО при запуске определяет, каким образом можно аутентифицировать себя, исходя из локального имени и имени удаленной стороны, проверяя, есть ли в файлах /etc/ppp/pap-secrets или /etc/ppp/chap-secrets строки с такими именами. И если, скажем, удаленная сторона предлагает CHAP, а в файле /etc/ppp/chap-secrets соответствующего пароля не имеется, то будет запрошен PAP, и, если это устраивает удаленную сторону, то аутентификация пройдет по PAP.
Отдельно нужно рассказать о том, как происходит аутентификация в том случае, когда у провайдера установлен Windows NT Remote Access Server (RAS). Windows NT RAS поддерживает два протокола аутентификации: PAP и так называемый MS CHAP 80. Аутентификация через PAP пройдет в том случае, если в Windows NT RAS установлен параметр "Allow any authentication including clear text". Если же администраторы провайдера установили параметры "Require encrypted authentication" или даже "Require Microsoft encrypted authentication", то единственный способ аутентификации - это MS CHAP 80.
Что же такое MS CHAP 80? В CHAP могут использоваться различные методы шифрования и передачи пароля. Описанному выше методу с использованием алгоритма MD5 присвоен номер 05. Microsoft разработал свой метод с использованием алгоритмов MD4 и DES для Windows NT 3.5, 3.51, 4.0 и Windows 95, назвал его MS CHAP и ему был присвоен номер 80. Это метод описан в RFC 2433. Но видимо, что-то там оказалось не так, и после SP3 был выпущен pptp3-fix (включенный в SP4) и rras30-fix с новым методом за номером 81, названный MS CHAP V2. Предыдущий вариант MS CHAP теперь называется MS CHAP V1.
Для того, чтобы из Linux можно было аутентифицироваться по методу MS CHAP 80, нужно собрать пакет pppd с поддержкой этого метода.
PPP: version 2.3.0 (demand dialling)
TCP compression code copyright 1989 Regents of the University of California
PPP Dynamic channel allocation code copyright 1995 Caldera, Inc.
PPP line discipline registered
Большинство руководств, в частности, PPP-HOWTO, рекомендуют в том случае, когда вы таких строк не найдете, перекомпилировать ядро, включив при компиляции поддержку PPP (о том, как перекомпилировать ядро, рассказано в гл. 17). Если поддержка протокола PPP в ядре была организована в виде модуля, то нужно подключить модуль поддержки PPP командой
[root]# /usr/sbin/insmod ppp
Описываемая ниже программа kppp подключает этот модуль автоматически. После успешного запуска kppp вы должны обнаружить приведенное выше сообщение о подключении PPP в файле /var/log/messages.
После того, как вы будете уверены, что поддержка протокола PPP обеспечена, можно подключить модем к компьютеру, соединить его с телефонной линией и перейти к настройке соединения вашего компьютера с сервером провайдера. Поскольку соединение происходит по протоколу PPP, именно его надо настраивать.
Есть два способа заставить работать PPP: сконфигурировать вручную и использовать конфигурационную программу.
Ручная конфигурация - дело довольно сложное, требующее редактирования файлов и написания скриптов. Работы, говорят, немного (только надо предварительно прочитать PPP HOWTO или другое руководство), но легко сделать ошибку. Если вы хотите попробовать ручной способ конфигурации, то обратитесь к рекомендациям Игоря Сысоева на его страничке http://www.nitek.ru/~igor/pppd/. Он, правда, описывает настройку PPP для операционной ситемы FreeBSD, однако для Linux все делается вполне аналогично.
Но все же для новичков предпочтительнее воспользоваться одним из специальных инструментов, автоматизирующих выполнение этих задач. В составе графической среды KDE для создания и изменения учетных записей PPP имеется превосходная программа kppp. Эта утилита облегчает настройку соединения; в большинстве случаев от вас потребуется только правильно указать учетную информацию.
Рис. 14.1. Сообщение о невозможности запуска kppp
Если запускать kppp с правами администратора, то таких сообщений не появляется, открывается главное окно программы, изображенное на рис. 14.2.
Рис. 14.2. Главное окно программы kppp
Рис. 14.3. Окно настройки kppp
Начать надо, конечно, с создания новой учетной записи соединения с провайдером услуг Интернета, для чего щелкнуть по кнопке Создать. Появляется окно выбора варианта создания нового соединения, изображенное на рис. 14.4.
Рис. 14.4. Выбор варианта создания нового соединения
Если воспользоваться кнопкой Мастер, то следующие два окна предоставят возможность выбора страны подключения (России в этом списке пока нет) и одного из известных программе провайдеров Интернет-услуг в выбранной стране (рис. 14.5). Поскольку я не думаю, что вы будете пользоваться услугами одного из тех провайдеров, о которых известно программе, придется отказаться от использования мастера настройки, и выбрать вариант Настройка дозвона.
Рис. 14.5. Диалоги, представляемые в варианте "Мастер настройки"
После щелчка по кнопке Настройка дозвона появляется окно Новое соединение, на котором вы видите 6 вкладок (см. рис. 14.6). Вообще говоря, вводить все данные, упоминающиеся на этих вкладках, вовсе не обязательно. Но мы рассмотрим их все последовательно, а что именно можно не вводить, вы определите экспериментально.
Рис. 14.6. Вкладка Дозвон
На вкладке Дозвон, которая открывается первой, надо ввести следующие данные:
• Имя соединения - название, которое вы хотите дать учетной записи (например, название вашего провайдера). Имя нужно только потому, что вы можете иметь возможность выхода в Интернет через разных провайдеров и тогда имя необходимо для выбора варианта соединения;
• Номер телефона - номер телефона (или телефонов), по которому вы будете выходить на модемный пул провайдера. Для добавления номера в список надо сначала щелкнуть по клавише Добавить. В номерах телефонов можно использовать дефисы (для облегчения чтения номеров). Если несколько номеров перечислены один за другим через двоеточие (1111111:2222222:3333333), kppp будет набирать эти номера один за другим, если получит в ответ сигнал занятости. Кнопка Удалить используется для удаления из списка подсвеченного номера, а кнопки со стрелками применяются для изменения порядка номеров в списке.
• Авторизация - в этом раскрывающемся списке вы можете выбрать один из следующих способов аутентификации: Сценарии, PAP, Терминал или CHAP. Это методы проверки Вашего имени пользователя и пароля. Вам, возможно, придется выяснить у вашего провайдера, какой способ идентификации следует использовать (чаще всего применяется PAP);
• Сохранить пароль - установите этот переключатель во включенное состояние, если не хотите вводить пароль при каждом соединении. Правда, если вас заботят вопросы безопасности, то лучше этого не делать!
Вы можете также указать параметры, которые нужно передать pppd, нажав кнопку Настройка аргументов pppd. При этом откроется отдельное окно Настройка аргументов pppd (рис. 14.7). Задаваемые в этом окне аргументы kppp передаст демону pppd. Допустимые значения аргументов вы можете найти на man-странице pppd.
Рис. 14.7. Окно Настройка аргументов pppd
На вкладке IP-адрес (рис. 14.8) либо введите постоянный IP-адрес, если провайдер выделил вам его, либо укажите, что вы будете использовать динамическое выделение IP-адреса.
На этой же вкладке находится переключатель Автоконфигурация DNS-имени машины по данному IP-адресу. Руководство по программе kppp рекомендует быть осторожным при задании этой опции и включать ее только в том случае, когда вы абсолютно уверены в необходимости этого.
Если включить автоконфигурацию, то kppp, после успешного установления соединения с сервером, будет запрашивать имя домена и имя, назначаемое вашему компьютеру, у сервера DNS (см. описание вкладки "DNS-серверы" ниже). При этом сервер DNS определяет указанные имена по IP-адресу, который назначен данному сеансу связи по протоколу PPP. Исходное имя машины (hostname) и имя домена, введенное на вкладке DNS-серверы, при задании этой опции игнорируются. Они будут восстановлены после завершения сеанса связи по протоколу PPP.
Рис. 14.8. Вкладка IP-адрес
Эта опция полезна в случаях, когда вы хотите использовать такие протоколы, как talk, для которых требуется, чтобы имя машины совпадало с именем, соответствующим IP-адресу машины. Но если вы хотите соединиться с Интернетом только для обычного просмотра WWW-страниц, обмена почтовыми сообщениями или использования chat, то включать опцию не следует. Дело в том, что у нее есть побочный эффект, заключающийся в невозможности новых подключений к X-серверу. Другими словами, вы не сможете запускать какие-то приложения в графическом режиме, пока не завершите сеанс связи.
Рис. 14.9. Вкладка Шлюз
На вкладке Шлюз (рис. 14.9) выберите либо Шлюз по умолчанию, либо, если провайдер сообщил вам IP-адрес статического шлюза, введите его в поле Статический шлюз. Нужно только отметить, что по мнению разработчиков программы kppp, опция "Назначить данный адрес шлюзом по умолчанию" должна быть включена в подавляющем большинстве случаев.
Настройка службы имен (вкладка DNS-серверы, рис. 14.10) может производиться автоматически (тогда провайдер сам задает адреса серверов DNS, когда начинается сеанс связи) или в ручном режиме. Но в любом случае вы должны ввести имя домена (например, demos.online.ru) и хотя бы один IP-адрес сервера DNS для того, чтобы иметь возможность использовать ориентированные на человеческое восприятие Интернет-имена, такие, например, как ftp.kde.org. Адреса DNS-серверов должны указываться в численной форме, например: 212.24.32.192. Эти адреса будут добавлены во время исполнения команды в файл /etc/resolv.conf. После завершения сеанса связи файл /etc/resolv.conf будет возвращен в исходное состояние.
Рис. 14.10. Вкладка DNS-серверы
Когда вы введете цифры, нажмите кнопку Добавить, и они попадут в Список адресов серверов DNS. (Вы не сможете нажать кнопку Добавить, пока не введете полный IP-адрес сервера DNS в поле IP-адреса.)
Если переключатель Закрыть доступ к существующим серверам DNS на время соединения установлен во включенное состояние, то на время сеанса связи будет "отключен" список адресов DNS, заданный в файле /etc/resolv.conf.
Вкладка Скрипт подключения (рис. 14.11) позволяет создать сценарий регистрации, который будет выполняться при установлении соединения, если вы выберете вход по сценарию в поле Аутентификация на вкладке Дозвон. Не все провайдеры требуют использования сценария регистрации; вам необходимо выяснить у своего провайдера, надо ли выполнять какие-либо особенные рекомендации при установке соединения.
Рис. 14.11. Вкладка Скрипт подключения
Сценарий регистрации строится по принципу "вопрос-ответ". Ваш компьютер посылает информационную строку или запрос серверу, а затем ожидает получения информационной строки или запроса от сервера провайдера. Кроме команд посылки и ожидания строк в сценариях можно использовать еще некоторые команды. Вот перечень возможных команд:
• Expect: kppp ожидает получения указанной строки;
• Send: kppp будет посылать указанную строку серверу;
• Scan: kppp будет просматривать входной поток символов в ожидании указанной строки. После получения этой строки все поступающие символы до первого символа "конец строки" будут сохранены во внутреннем буфере. Пробелы в начале и конце строки игнорируются;
• Save: Сохранить полученную строку в указанном регистре. Пока что может использоваться единственный регистр "password";
• Pause: Пауза на указанное число секунд;
• Hangup: Послать модему сигнал "повесить трубку";
• Answer: Перевести модем в режим ожидания ответа;
• Timeout: Изменить заданное по умолчанию значение паузы и установить его в указанное значение (в секундах). Вы можете изменять это значение в скрипте несколько раз, если это необходимо;
• Prompt: Выдать пользователю строку запроса, причем в заголовке окна запроса будет приведена подсказка, которую вы указали при задании этой команды. Если в строке подсказки вы вставили ##, эти символы будут заменены на текущее содержимое внутреннего буфера (см. выше команду Scan). Вводимые пользователем в ответ на запрос символы будут отображаться в строке ввода;
• PWPrompt: Как и в предыдущей команде пользователю будет выдана строка запроса, однако вводимые им символы не будут отображаться (точнее, будут заменены звездочками). Используется для ввода паролей;
• ID: Послать серверу имя пользователя, введенное в главном окне kppp (рис. 14.2). Если имя в главном окне не указано, будет выдан запрос на ввод имени. В качестве заголовка запроса выводится введенная вместе с этой командой строка. Вводимые пользователем символы отображаются на экране. Если запрос имени пользователя встречается в скрипте второй раз, то введенное в первом запросе имя пользователя сразу же выводится на экран, независимо от того, был ли он указан в главном окне программы;
• Password: Послать серверу пароль, введенный в главном окне kppp. Если пароль в главном окне не задан, будет выдан запрос на его ввод. Заголовком запроса служит введенная в правом поле строка. Вводимые пользователем символы пароля отображаются в виде звездочек;
• LoopStart: kppp будет ожидать получения указанной строки. Строка запоминается для использования в команде LoopEnd;
• LoopEnd: kppp будет ожидать получения указанной строки для выхода из цикла. Если первой получена строка, заданная в соответствующей команде LoopStart, будет осуществлен переход к строке, следующей за командой LoopStart, т. е. возврат к первой строке цикла. Сценарии регистрации составляются следующим образом. Сначала используйте раскрывающийся список в левой верхней части окна, чтобы выбрать нужную команду. В строке ввода справа от раскрывающегося списка вводится строка информации, передаваемая в данной команде (или параметры команды, вроде продолжительности паузы).
После полного определения команды нажмите кнопку Добавить, чтобы добавить ее в конец сценария. Таким образом, можно последовательно задавать команды для создания сценария шаг за шагом. Если вам необходимо изменить сценарий, можно удалить какие-то команды или вставить новые. Удалить шаг из сценария можно выделив его и нажав кнопку Удалить. Для того, чтобы вставить команду в сценарий, сформируйте новую команду указанным выше образом, после чего выделите в сценарии ту команду, после которой надо вставить новую, и щелкните по кнопке Вставить.
Пример сценария входа, который ожидает от сервера предложение ввести имя пользователя, выдает пользователю приглашение для ввода имени пользователя, затем такое же приглашение для ввода пароля и, в конце, после небольшой паузы, ожидает от пользователя строку "ppp", приведен в табл. 14.1.
Таблица 14.1. Пример сценария входа
| Команда | Параметр команды | Назначение |
|---|---|---|
| Prompt | Нажмите клавишу ‹Enter› | Отправляет серверу символ конца строки |
| Expect | Username: | Ожидание приглашения сервера на ввод имя пользователя |
| ID | Передать имя пользователя из учетной записи | |
| Expect | Password: | Ожидание приглашения с сервера ввести пароль |
| Password | Передать пароль из учетной записи | |
| Expect | Welcome | Ожидание приветственного сообщения сервера |
| Pause | 3 | Устанавливает длительность паузы в 3 секунды. |
Рис. 14.12. Вкладка Выполнить
Рис. 14.13. Вкладка Учет
В нижней части вкладки имеется выпадающий список "Учет трафика", с помощью которого можно выбрать один из трех вариантов подсчета числа полученных и отправленных байт: входящий трафик, исходящий трафик или и то и другое. Можно также и отказаться от учета трафика. Мониторинг трафика может оказаться полезным, если вы платите провайдеру за количество байт, полученных вами во время соединения - даже, например, при месячной постоянной абонентской оплате.
После того, как вы закончили создание учетной записи, нажмите на кнопку OK. Теперь в окне Настройка kppp появится новая учетная запись. Если вы хотите ее модифицировать, выделите ее одним щелчком мыши, потом нажмите кнопку Изменить в окне Настройка соединения.
Теперь самое время предоставить системе информацию о типе подключения и скорости Вашего модема на вкладке Устройство (рис. 14.14).
Рис. 14.14. Вкладка Устройство
Здесь вы указываете, к какому порту подключен модем, его скорость, некоторые аппаратные установки и другие настройки.
В раскрывающемся списке Устройство модема вы можете выбрать последовательный порт, к которому подключен ваш модем.
Ниже приведен список соответствия названий последовательных портов в MS-DOS (и Windows) и Linux. Если вы знаете, что ваш модем присоединен, например, к порту COM2 в Windows, то в Linux это будет соответственно /dev/ttyS1.
• COM1 = /dev/ttyS0
• COM2 = /dev/ttyS1
• COM3 = /dev/ttyS2
• COM4 = /dev/ttyS3
В некоторых дистрибутивах Linux имеется символическая ссылка /dev/modem, которая указывает на файл реального устройства. В документации по kppp не рекомендуется использовать эту ссылку вместо указания на реальное устройство.
После того, как вы выбрали порт для подключения модема, вы можете установить режим Управления потоком. Хотя предоставляется возможность выбрать другой режим управления потоком из раскрывающегося списка, рекомендуется оставить значение, заданное по умолчанию - CRTSCTS, которое означает аппаратное управление потоком (XON/XOFF означает программное управление потоком).
Следующее поле, Окончание строки, позволяет установить корректное значение этого параметра для вашего модема. Для большинства модемов подходит значение CR/LF. Если же у вас возникают трудности с опросом модема, попробуйте поменять установку этого параметра.
В поле Скорость соединения выберите одну из скоростей, поддерживаемых вашим последовательным портом. Имейте в виду, что последовательный порт способен обеспечить гораздо более высокие скорости передачи данных, чем любой модем. Поэтому вначале здесь можно установить самое большое из возможных значений, а в случае, если с установлением соединения будут возникать проблемы, постепенно переходить на меньшие значения скорости.
Рис. 14.15. Вкладка Модем
Переключатель Использовать lock-файл (файл блокировки) по умолчанию установлен во включенное состояние. Это значит, что kppp будет блокировать устройство при работе в режиме "он-лайн", предотвращая, таким образом, доступ к модему. Если задана опция "Использовать lock-файл" для kppp, то не должна использоваться аналогичная опция для pppd. В противном случае pppd не сможет запуститься и kppp выдаст сообщение об ошибке.
В поле Таймаут модема указывается время в секундах, в течение которого kppp ожидает ответа CONNECT после набора номера. В руководстве к программе kppp рекомендуется установить здесь значение, равное 30 секундам.
На вкладке Модем (рис. 14.15) задаются настройки для модема.
Самым важным элементом на этой вкладке является, пожалуй, кнопка Команды модема. При нажатии этой кнопки появится диалоговое окно Редактирование команд модема (рис. 14.16), позволяющее изменять процесс набора номера, установки соединения и другие настройки модема. Если ваш модем является Hayes-совместимым, то вам, скорее всего, не требуется ничего здесь менять.
Внимание!
Ознакомьтесь с документацией к вашему модему для настройки строки инициализации, строки набора и других параметров.
Рис. 14.16. Диалоговое окно Редактирование команд модема
Кнопка Опрос модема на вкладке Модем служит для того, чтобы программа kppp попыталась идентифицировать модем в вашей системе. Появится окно, в котором отображается индикатор хода опроса. В случае успешного опроса в открывшемся диалоговом окне появятся сведения, которые программа kppp получила от модема. Успех этой операции зависит от того, выдаст ли модем верные идентификационные данные.
При нажатии кнопки Терминал kppp откроет мини-терминал, с помощью которого можно проверить конфигурацию модема (но надо знать соответствующие команды).
Перемещая движок Громкость динамика модема, вы можете изменять громкость динамика модема во время набора номера и установки соединения.
Вкладка График позволяет изменить цвета на графике, отображающем количество байт, проходящих между вашим компьютеров и провайдером в режиме "он-лайн". Этот график выводится в отдельном окне Монитор подключения, которое открывается, если установлена соответствующая опция в главном окне программы (см. рис. 14.2).
Рис. 14.17. Вкладка Разное
На вкладке Разное (рис. 14.17) вы можете задать значение следующих опций:
• Таймаут pppd - определяет интервал времени между запуском скрипта и стартом pppd, в течение которого kppp будет ожидать установления устойчивого соединения по протоколу PPP. Если соединение не установлено, то по истечении этого времени связь будет прервана и процесс pppd остановлен;
• Встроить в панель KDE при соединении - установите этот переключатель во включенное состояние, чтобы после установки связи kppp отображалась значком в Панели. (Эта опция перекрывает действие переключателя Свернуть окно при соединении);
• Автодозвон при разъединении - установите этот переключатель во включенное состояние, если хотите, чтобы kppp мгновенно восстанавливало соединения при разрыве связи;
• Показывать время в строке заголовка - включите этот режим, чтобы видеть время соединения;
• Разъединить при остановке X-сервера - если вы выберете эту опцию, kppp будет корректно завершать сеанс связи при выключении Xсервера. Это полезная опция, если вы не хотите терять время на разрыв соединения при выходе;
• Выход при разъединении - когда вы разрываете соединение с провайдером, kppp автоматически закрывается. В противном случае, вы вернетесь к исходному окну kppp;
• Свернуть окно при соединении - сворачивание окна kppp в панель задач при установке соединения.
Ну, и наконец, на вкладке О программе представлена некоторая информация о kppp, такая как сведения об авторах, авторских правах и лицензионном соглашении.
На этом описание настроечных параметров программы kppp завершено. Надеюсь, что приведенных сведений достаточно для конфигурирования соединения с провайдером. Рассмотрим вкратце процесс непосредственного подключения к Интернету с помощью программы kppp.
Рис. 14.18. Строка ввода команды оболочки KDE
Можно также запустить окно консоли и выполнять в нем команду
[user1]$ kppp &
В появившемся главном окне kppp (рис. 14.2), выберите вариант соединения, введите имя пользователя и пароль учетной записи для доступа в Интернет.
Если вы хотите отладить конфигурацию или наблюдать за процессом соединения, установите переключатель Монитор подключения во включенное состояние.
Чтобы начать сеанс, нажмите на кнопку Соединить. Появятся два окна. В одном из них (рис. 14.19) показан статус соединения, например, так:
Рис. 14.19. Статус соединения
Второе окно (Монитор подключения) отображает команды инициализации модема и процесс обмена данными с сервером провайдера. Если вы не сделали этого раньше, вы можете открыть окно Монитора, воспользовавшись кнопкой Журнал в окне статуса, изображенном на рис. 14.19.
После установления соединения с провайдером kppp свернется в кнопку или иконку на Панели задач в зависимости от того, какие значения опций вы задали на вкладке PPP (см. выше). Окно монитора тоже закрывается.
Чтобы просмотреть статистику соединения, например, пропускную способность или IP-адреса, откройте окно статуса kppp (рис. 14.20)
Рис. 14.20. Окно статуса после запуска kppp
и нажмите на кнопку Подробности. Появится окно статистики соединения (рис. 14.21).
Несмотря на то, что kppp вроде бы работает, давайте займемся проверкой того, что все настроено правильно. Первым делом введите (от имени пользователя root) команду
[root]# /sbin/ifconfig
По этой команде должны быть показаны все работающие ("поднятые") сетевые интерфейсы. Среди них должен быть "кольцевой интерфейс" (Local Loopback) и ppp0, причем для ppp0 в информации, выводимой по этой команде, можно найти присвоенный вам IP-адрес и адрес сервера, с которым вы соединились (эта же информация имеется и в окне статистики, изображенном на рис. 14.21).
Рис. 14.21. Окно статистики соединения.
Вот пример вывода команды /sbin/ifconfig:
lo Link encap Local Loopback
inet addr 127.0.0.1 Bcast 127.255.255.255 Mask 255.0.0.0
UP LOOPBACK RUNNING MTU 2000 Metric 1
RX packets 0 errors 0 dropped 0 overrun 0
TX packets 0 errors 0 dropped 0 overrun 0
ppp0 Link encap Point-to-Point Protocol
inet addr 192.168.17.1 P-t-P 192.168.18.1 Mask 255.255.255.0
UP POINTOPOINT RUNNING MTU 1500 Metric 1
RX packets 33 errors 0 dropped 0 overrun 0
TX packets 42 errors 0 dropped 0 overrun 0
Если Вы, в частности, не обнаружите в выводе информации о "кольцевом интерфейсе", то вернитесь к разд. 13.2, где об этом говорится, и настройте локальный интерфейс.
Теперь дайте команду
[root]# ping z.z.z.z,
где z.z.z.z - IP-адрес сервера DNS (этот адрес вы должны были получить у провайдера и приписать в настройках kppp). Если все корректно работает, то вы увидите строки следующего вида:
[root]# ping 212.22.66.70
PING 212.22.66.70 (212.22.66.70): 56 data bytes
64 bytes from 212.22.66.70: icmp_seq=0 ttl=255 time=268 ms
64 bytes from 212.22.66.70: icmp_seq=1 ttl=255 time=247 ms
64 bytes from 212.22.66.70: icmp_seq=2 ttl=255 time=266 ms
^C
- - 212.22.66.70 ping statistics --
3 packets transmitted, 3 packets received, 0% packet loss round-trip min/avg/max = 247/260/268 ms
(Для того, чтобы прервать работу команды ping, надо нажать комбинацию клавиш ‹Ctrl›+‹C›.)
Следующий этап проверки состоит в запуске команды
[root]# netstat -nr
Я в этом случае увидел всего три строки, включая строку заголовка (хотя у вас может оказаться и больше):
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
192.168.14.1 0.0.0.0 255.255.255.255 UH 0 0 0 ppp0
0.0.0.0 192.168.14.1 0.0.0.0 UG 0 0 0 ppp0
Если вывод команды выглядит подобным образом, но не содержит строки, в которой в графе Destination стоят 4 нуля (0.0.0.0) (она указывает на маршрут, используемый для соединений по умолчанию), то вы, вероятно, не включили переключатель "Присвоить данному шлюзу маршрут по умолчанию" на вкладке Настройка соединения | Шлюз.
Далее вы можете попытаться установить соединение с сервером провайдера по одному из протоколов telnet, ftp, finger, используя известные вам цифровые IP-адреса.
Если все эти проверки завершились успешно, вы можете запустить любой Интернет-браузер (а в KDE и запускать дополнительно ничего не надо - используйте Konqueror), задать имя (URL) ресурса и отправиться в путешествие по виртуальному миру. Если запустить почтового клиента, то можно получать и отправлять электронную почту. Подробнее о том, как это сделать, будет сказано в разд. 14.4 и разд. 14.5, где кратко описаны браузеры и почтовые клиенты для Linux.
Правда, не всегда все проходит так гладко. Если вам не удается после установления соединения получить выход в WWW, прочитайте ниже разд. 14.3.3, где рассмотрены возможные затруднения.
Чтобы разорвать соединение, если приложение прикреплено к Панели, щелкните один раз по его значку. В открывшемся окне статуса соединения нажмите на кнопку Разъединить.
Если вы выбрали режим сворачивания в Панель задач, разверните приложение и тоже нажмите кнопку Разъединить.
daemon.* /dev/console
daemon.* /var/log/kppp.log
(обратите внимание на то, что между двумя частями записи в каждой строке должен быть хотя бы один символ табуляции). После внесения изменений в файл /etc/syslog.conf выполните команду kill -HUP ‹pid›, где ‹pid› - идентификатор запущенного в это время процесса syslogd. По этой команде syslogd перечитает свой конфигурационный файл. Следствием выполненных вами действий будет то, что pppd будет выдавать сообщения о своих действиях на консоль и записывать эти же сообщения в файл /var/log/kppp.log. Его и смотрите!
Искать в этом файле надо сообщения, начинающиеся на:
• "pppd[NNN]: Connected…" - означает, что скрипт соединения завершился успешно.
• "pppd[NNN]: sent [LCP ConfReq"… - сообщение о том, что pppd пытался начать диалог с удаленным сервером.
• "pppd[NNN]: rcvd [LCP ConfReq"… - сообщение о том, что pppd получил ответ (negotiation frame) от удаленного сервера.
• "pppd[NNN]: ipcp up" - означает, что pppd дошел до той точки, где, по его мнению, соединение готово для передачи по нему IP-трафика.
Если вы не находите строки с сообщением "rcvd", то у вас серьезные проблемы с установлением соединения (например, по каналу не передаются все 8 бит). В этом случае может оказаться полезным записывать в файл протокола весь поток байтов, передаваемых между Вашим компьютером и удаленным сервером. Для этого измените две упоминавшиеся выше строки в файле syslog.conf следующим образом:
daemon.*,kern.* /dev/console
daemon.*,kern.* /var/log/kppp.log
и снова перезагрузите демон syslog, как это было сказано выше. Затем запустите pppd с опцией "kdebug 25". Теперь все символы, передаваемые по каналу PPP-соединения, будут записываться в файл протокола.
Просмотрите этот файл в поисках сообщений, похожих на следующее:
ppp_toss: tossing frame, reason = 4
Оно означает, что программа PPP не успевает обрабатывать пакеты от удаленной машины. Это может быть потому, что ваш центральный процессор не способен принимать символы с последовательного порта с той скоростью, с которой они поступают. Если в приведенной выше строке указана причина (Reason), отличная от 4, это может свидетельствовать о других сбоях в работе последовательного порта.
На начальном этапе установления соединения вы можете увидеть одно или несколько сообщений, содержащих строку "bad fcs". Это говорит об ошибках в контрольной сумме получаемых PPP-пакетов, и обычно случается в начале сессии, когда удаленная система посылает сообщения типа "hello this is the XYZ company". Если такие сообщения продолжают появляться тогда, когда соединение уже установлено, это говорит о шуме в телефонной линии и сбоях в передаче пакетов.
Может оказаться, что на сервере провайдера установлен Remout Access Server (RAS), который настроен на использование алгоритма аутентификации MS CHAP 80. Вы можете определить, запрашивает ли сервер установление подлинности, используя этот алгоритм, при анализе файла протокола pppd. Если сервер запрашивает установление подлинности по MS CHAP, то вы увидите строки типа:
rcvd [LCP ConfReq id=0x2 ‹asyncmap 0x0› ‹auth chap 80› ‹magic 0x46a3›]
modprobe: Can't locate module ppp-compress-21
modprobe: Can't locate module ppp-compress-24
modprobe: Can't locate module ppp-compress-26
• Ответ:
Добавьте в /etc/conf.modules:
alias ppp-compress-21 bsd_comp
alias ppp-compress-24 ppp_deflate
alias ppp-compress-26 ppp_deflate
• Вопрос:
кррр звонит, отдает имя, пароль и сразу отваливается, в протоколах пишет следующее:
Sep 12 18:10:34 dimon pppd[1410]: By default the remote system is required to authenticate itself
Sep 12 18:10:34 dimon pppd[1410]: (because this system has a default route to the internet)
Sep 12 18:10:34 dimon pppd[1410]: but I couldn't find any suitable secret (password) for it to use to do so.
Sep 12 18:10:34 dimon pppd[1410]: (None of the available passwords would let it use an IP address.)
Кто виноват и что делать?
• Ответ:
Проверьте правильность заполнения имени и пароля.
Попробуйте в /etc/ppp/options добавить параметр noauth.
На этом закончим рассмотрение программы kppp. Ей было уделено очень много места в этой главе, но я считаю, что это оправдано, поскольку эта программа составляет основу вашего соединения с Интернетом. Только в том случае, когда вам удалось такое соединение установить, вы можете пользоваться браузерами, электронной почтой и другими благами Интернета, о которых я кратко и расскажу в следующих разделах.
[root]# cd /mnt/cdrom/RedHat/RPMS/
[root]# rpm -i lynx-2.8.2-2.i386.rpm
(естественно, цифры у вас могут быть другими, в зависимости от того, какая версия программы находится на диске).
После инсталляции программы можно ее запустить либо в одном из виртуальных терминалов, либо в консольном окне в графической оболочке. При первом запуске появится окно, напоминающее то, которое изображено на рис. 14.22.
Рис. 14.22. Окно браузера lynx после первого запуска
Обратите внимание на подсказку в двух нижних строках окна (на белом фоне), а также в третьей снизу строке (на синем фоне). Сразу же этой подсказкой и воспользуемся для того, чтобы настроить программу: нажмите клавишу ‹O› (латинское) для того, чтобы получить доступ к опциям программы. Окно примет вид, изображенный на рис. 14.23.
Рис. 14.23. Меню опций программы lynx.
Переход от параметра к параметру в этом окне осуществляется по тем же принципам, что и переходы по ссылкам при путешествиях по Интернету, так что запоминайте!
Гипертекстовые ссылки выделены в тексте синим цветом, а текущая (активная) ссылка выделена красным цветом. Клавиши ‹Стрелка вверх› и ‹Стрелка вниз› используются для перемещения от ссылки к ссылке, клавиши ‹Enter› и ‹Стрелка вправо› вызывают переход по активной ссылке, клавиша ‹Стрелка влево› - возврат к предыдущей странице.
Давайте, для примера, изменим значение параметров Display character set и Assumed document character set(!). Для этого с помощью клавиши ‹Стрелка вниз› сместим подсветку (красную) на первый из этих параметров и нажмем клавишу ‹Стрелка враво› или ‹Enter›. Появится выпадающий список, в котором надо выбрать, например, Cyrillic (koi8-r). Выбор осуществляем теми же клавишами ‹Стрелка вверх› и ‹Стрелка вниз›, после чего нажимаем ‹Enter›. Аналогичным образом параметру Assumed document character set(!) присваивается значение koi8-r.
Значения некоторых параметров меняются путем прямого редактирования соответствующей строки. Примером такого параметра является Editor или Preferred document language.
После того, как вы задали таким образом значение всех параметров, надо проследовать по ссылке Accept Changes, чтобы сохранить эти значения в файле настройки lynx.
Для того, чтобы открыть какую-либо интернет-страницу, надо нажать клавишу ‹G›. В третьей снизу строке окна lynx появится приглашение на ввод URL. Вводите нужный вам адрес, нажимаете клавишу ‹Enter› и страница открывается. Выглядит она, конечно не так, как в графических браузерах. Вместо картинок даются только имена соответствующих файлов (в квадратных скобках), таблицы преобразованы в последовательный текст, и т. д.. Посмотрите для сравнения, как выглядела 15.03.2000 г. главная страница известного сервера IXBT.Hardware.ru в графическом браузере Netscape (рис. 14.24) и в lynx (рис. 14.25).
Рис. 14.24. Главная страница сервера IXBT.Hardware.ru в графическом браузере Netscape
Рис. 14.25. Главная страница сервера IXBT.Hardware.ru в браузере lynx
Конечно, графический интерфейс и возможность использования таблиц существенно повышают информативность страницы и облегчают ее восприятие. Так что в большинстве случаев вы будете пользоваться каким-либо из графических браузеров (к рассмотрению которых мы сейчас перейдем). Но не забывайте и о существовании lynx, возможно он вам кое-где пригодится!
[root]# cd /mnt/cdrom/RedHat/RPMS/
[root]# rpm -Uhv netscape-common-4.70-1bc.i386.rpm
[root]# rpm -Uhv netscape-communicator-4.70-1bc.i386.rpm
Описанию этого браузера и приемов работы с ним посвящены целые книги, поэтому здесь нет необходимости (да и возможности) приводить подробное описание. На рис. 14.24 вы видите в общем-то привычное (для тех, кто использовал Netscape и раньше) главное окно браузера.
Трудности в использовании Netscape Navigator-а версии 4.70, насколько мне известно из листа рассылки blackcat-list, были связаны с русификацией программы и подключением java. На рис. 14.24 видно, что команды меню даны на английском. В общем-то, у большинства пользователей это не вызывает затруднений. Тем более, что при установке последних версий дистрибутивов (я имею в виду ALTLinux Junior 1.0 и Red Hat Linux CE 7.1) инсталлируется уже полностью русифицированная версия 4.74 этого браузера.
Надо сказать, что в последнее время появились очень противоречивые сведения о дальнейшей судьбе этого браузера. С одной стороны в новостях сообщалось, что браузер перестал поддерживаться и развиваться фирмой Netscape Communication Corporation. С другой стороны, выходят как новые версии ветки 4.xx этого браузера, так и уже второй вариант (6.2) шестой версии. Версию 6 (правда, в варианте 6.0 для Windows) я пробовал установить, но она мне показалась настолько тяжеловесной, что я вернулся к версии 4. Под Linux же мои попытки скачать и установить версию 6 окончились неудачей из-за того, что инсталляцию надо было проводить по сети, а связь то и дело срывается. Но пока что в каждом из встречавшихся мне дистрибутивов включена одна из версий Netscape Communicator, и эти версии меня вполне устраивают. Поэтому до сих пор основным браузером под Linux для меня является Netscape Navigator.
Но после установки ALTLinux Junior 1.0 обнаружилось, что кроме Netscape Communicator установлен и браузер Mozilla (на рис. 14.26 вы видите, что он сообщил мне о себе и своей версии). Первое знакомство с этой программой показывает, что она очень похожа на Netscape Navigator. Конечно, некоторые изменения в организации меню имеются (Вы это можете и сами увидеть, сравнив рис. 14.24 и рис. 14.27), но если вы имеете опыт работы с Navigator-ом, то легко освоите и Mozilla.
Сходство Netscape Navigator и Mozilla далеко не случайно. В апреле 1998 года независимая в то время компания Netscape Communications решила переработать свой популярный браузер Navigator, переведя его на механизм отображения html страниц (рендеринга) Gecko и превратив в проект с открытым исходным кодом. Тем самым компания привлекала к разработке браузера широкий круг разработчиков, заинтересованных в модифицировании и распространении исходного кода Netscape. Исходный код Mozilla был опубликован в 1999 году. На веб-сайте http://www.mozilla.org все желающие получили доступ к исходным кодам, возможность внесения изменений, участие в группах новостей разработчиков, возможность получения и распространения информации, связанной с браузером.
Рис. 14.26. Окно браузера Mozilla
Проект Mozilla выпустил несколько предварительных версий или выпусков (build) браузера. Каждый такой build отличается от предыдущего в лучшую сторону: добавляются новые функции, исправляются ошибки и пр. Некоторые из них получили особое название - Milestone Builds ("верстовые столбы"). Эти выпуски обозначаются буквой M с добавлением номера очередной "версты" (например, M18) и являются своеобразными вехами в истории развития проекта.
Начиная с М18 проект Mozilla разветвился. Дело в том, что браузер Mozilla, включая механизм рендеринга Gecko, был положен в основу разработки шестой версии Netscape (права на который перешли к компании AOL Time Warner), и, в то же время продолжалась разработка самостоятельного браузера Mozila 1.0. Версия 6.0 браузера Netscape-6 на основе Mozilla, которая появилась в октябре 2000 года, подверглась резкой критике, но более поздняя версия 6.1 получила положительные отклики.
В ноябре 2001 года на сайте Mozilla.org появилась бета-версия браузера Mozilla с номером 0.9.6. В Mozilla 0.9.6 исправлено несколько ошибок и добавлены новые функции, такие как отображение значков страниц в поле адреса и поддержка форматов изображений.bmp и.ico на разных платформах. В числе других нововведений, произведенных в версии 0.9.6, стоит отметить функцию просмотра страницы перед печатью (Print Preview), расширенные опции настройки вида веб-страниц в версии браузера для Mac OS, а также улучшенные контекстные меню. Благодаря новой функции пользователи Mozilla теперь могут выделить любое слово на веб-странице и вызвать поиск по этому слову в поисковой машине. Кроме браузера, в Mozilla входят почтовая программа, программа чтения новостей Usenet и другие компоненты. Дистрибутив программы немного увеличился, его размер составляет 9,1 Мбайт. Скачать его можно с веб-сайтов http://www.mozilla.org или http://www.mozilla.ru.
Рис. 14.27. Окно программы Mozilla с отображением "My Sidebar"
Браузер Mozilla уже широко используется, хотя все еще сохраняет статус бета-версии. По словам разработчиков, следующие две бета-версии будут нацелены на повышение производительности и стабильности программ электронной почты и чтения новостей. Но дата выпуска окончательной версии 1.0 до сих пор остается тайной. От разработчиков не удается получить более-менее точной информации о сроках. "Если все будет хорошо, версия 1.0 будет выпущена сразу после выхода версии 0.9.9", - сообщается в "Манифесте", посвященном грядущей версии 1.0, на сайте Mozilla.org. Пока это единственная точная информация.
В то же время исходный код проекта Mozilla уже и сейчас высоко оценен сообществом разработчиков. Механизм рендеринга страниц Gecko, например, применяется в качестве ядра других браузеров, таких как браузер Galeon, разработанный в рамках проекта с открытым исходным кодом GNOME.
Внешне отличия Mozilla от Netscape Navigator не очень существенны. В первую очередь бросается в глаза появление боковой панели, которая называется "My Sidebar". Вы видите ее на рис. 14.27. При запуске Mozilla панель может не отображаться в окне программы. Но ее всегда можно вызвать (или убрать из вида) простым щелчком мыши по узенькой вертикальной полоске, которая расположена на левой границе панели, отображающей текст просматриваемой странички (на рис. 14.27 она выделена овалом).
My Sidebar представляет собой набор вкладок в левой части окна, каждая из которых содержит "горячую" информацию с какого-либо ресурса Интернета, обновляемую с некоторой периодичностью. Это могут быть последние новости, прогноз погоды, календарь, ваша адресная книга и многое другое. Другими словами, My Sidebar - это настраиваемый пользователем список ссылок (представляющий собой развитие концепции "закладок") на те ресурсы Интернета, к которым вам приходится часто обращаться. Естественно, что имеются механизмы добавления и модификации вкладок (см. рис. 14.28).
Рис. 14.28. Формирование состава вкладок на панели My Sidebar
Между прочим, существует сайт Sidebar.Ru, посвященный боковой панели Mozilla Netscape 6. На этом сайте представлены примеры новых закладок для My Sidebar.
Таким образом, хотя браузер Mozilla еще не вышел из стадии бета-тестирования, он кажется очень перспективной разработкой. Не зря компания Red Hat объявила, что когда выйдет версия Mozilla 1.0, она войдет в качестве браузера по умолчанию в состав популярного дистрибутива Red Hat Linux и заменит в этом дистрибутиве браузер Netscape 4.xx. Впрочем, Red Hat пока не отрицает и возможности использования Netscape версии 6 (хотя отмечает, что у этого варианта есть некоторые недостатки из-за того, что его код не является полностью открытым), а также рассматривает в качестве возможного варианта браузер Konqueror, разрабатываемый в рамках проекта KDE.
Рис. 14.29. Konqueror при просмотре локального каталога
Для просмотра Web-страничек достаточно ввести в поле "Местоположение" URL ресурса, и вы получите к нему доступ (если, конечно, у вас настроен выход в Интернет). Между прочим, на рис. 14.30 специально приведен вид той же самой WWW-страницы, которая использовалась для иллюстрации рассказа о браузерах lynx и Netscape Navigator (см. рис. 14.24 и рис. 14.25). Мне показалось, что с локальными файлами Konqueror работает даже быстрее, чем Netscape Navigator, особенно при загрузке очень больших файлов (т. е., при нехватке оперативной памяти).
Еще одним преимуществом этого навигатора для некоторых пользователей может оказаться то, что он полностью русифицирован (вы можете видеть это на рис. 14.29 и рис. 14.30). И позволяет выбрать кодировку просматриваемой страницы из очень большого числа вариантов: посмотрите команду меню Вид | Кодировка документа.
Что мне особенно нравится в этом браузере, так это то, что Konqueror позволяет легко и удобно просматривать файлы многих форматов. В первую очередь это касается разных текстовых файлов (ASCII, html, ps), но также и наиболее распространенных графических форматов (gif, jpeg, png, tiff, bmp). Правда, для некоторых форматов файлов для просмотра используется вызов специализированных программ на основе ассоциаций имен файлов с соответствующей программой. Но это естественно и, я думаю, вас не удивит. Более того, если для какого-то типа файлов просмотрщик не определен, Konqueror предлагает пользователю задать нужную ассоциацию.
Рис. 14.30. Konqueror при просмотре титульной странички IXBT.Hardware
Вообще говоря, файловому менеджеру Konqueror надо бы посвятить отдельную главу, по объему не меньшую, чем глава, посвященная Midnight Commander. Но пока такой возможности у меня нет, так что придется вам знакомиться с этим браузером самостоятельно (вы можете также прочитать статью [П16.23]).
Рис. 14.31. Задание идентификационных данных пользователя
На вкладке Профиль вы должны ввести свои идентификационные данные, для того, чтобы KMail была способна правильно получать и отправлять ваши сообщения. Те данные, которые вы введете в поля Имя и Организация, будут автоматически добавляться в заголовок любого сообщения, которое вы отправляете. В поля Адрес E-mail и Адрес для ответа введите адрес вашего электронного почтового ящика. В поле Файл подписи вы можете указать путь к файлу, содержимое которого будет добавляться в конце каждого отправляемого сообщения. Можно не создавать отдельный файл для сохранения этого текста, а просто ввести нужный текст в поле, имеющееся на закладке Профиль. Имеется также возможность варьировать содержание заключительных фраз Ваших писем (например, вставлять случайно выбранные изречения). В этом случае надо задействовать подпись из файла и проставить отметку возле надписи "Файл является программой".
Вкладка Сеть определяет установки, по которым KMail определяет, как отправлять и где получать ваши сообщения. Эти установки в значительной степени зависят от того, каким образом вы соединяетесь с почтовым сервером.
В поле Отправка почты надо указать имя почтового сервера и имя домена, в котором этот сервер находится (рис. 14.32). Если почтовым сервером является программа Sendmail, работающая на вашем компьютере, то вы должны задать ее местоположение. Если же вы отправляете почту на другой почтовый сервер по протоколу SMTP, то требуется указать имя сервера и номер порта. Если вы не знаете, как правильно задать соответствующие настройки, проконсультируйтесь у своего провайдера или системного администратора. Если при настройке выхода в Интернет вы правильно настроили обращение к серверу DNS, то кроме имени сервера никакой другой информации о нем задавать не надо, все остальное будет находиться автоматически. Значение, введенное в поле Порт, вам менять, скорее всего, не требуется.
Рис. 14.32. Задание параметров почтового сервера
В поле Входящая почта нужно определить хотя бы один почтовый ящик, что делается путем нажатия экранной кнопки Добавить. При добавлении почтового ящика программа попросит вас задать его тип: POP3 или локальный (в последнем варианте имеется в виду, что на данном компьютере запущен демон Sendmail и пользователи компьютера обмениваются сообщениями). К сожалению, пока что (в версии 1.2) KMail не может работать с IMAP-серверами. После задания типа ящика программа предложит вам ввести ваше имя, логин, пароль, имя сервера и номер порта. Номер порта (по умолчанию 110) обычно изменять не стоит. Можно установить опцию сохранения пароля в конфигурационном файле, но делать это не рекомендуется, поскольку пароль там хранится в открытом виде. Зато программа не будет просить ввести его при каждом соединении с сервером. А уж "иметь или не иметь" уверенность в том, что никто ваш пароль не узнает, каждый решает сам. Впрочем, просмотреть конфигурационный файл может только сам пользователь и суперпользователь root, так что в случае персонального компьютера особой опасности здесь не просматривается.
Рис. 14.33. Задание параметров обращения к почтовому ящику
Здесь же вы можете установить период обращения (в минутах) к почтовому серверу (это в случае, если вы подключены к нему постоянно), указать папку, в которую будет поступать вся входящая корреспонденция (по умолчанию - inbox). Правда, если вы хотите как-то сортировать приходящие письма уже на этапе получения, целесообразнее использовать для этого фильтры, а не простое перенаправление в папку с другим именем. Параметр Удалять почту с сервера лучше, на мой взгляд, установить, чтоб ваши письма не занимали зря дисковое пространство сервера. И, наконец, вы можете здесь же задать программу, которую KMail будет запускать перед приемом почты. Только имейте в виду, что необходимо указать полный путь к файлу программы, а также то, что KMail будет ожидать завершения работы этой программы и только затем продолжит свою работу.
Для проверки созданной таким образом конфигурации можно попытаться отправить хотя бы одно тестовое письмо. Давайте закроем окно настроек и вернемся к главному окну программы (рис. 14.34), которое является также окном Просмотра почты. Это окно будет в дальнейшем появляться сразу после запуска программы KMail. Оно разделено на три окна (или панели) меньшего размера.
Окно папок (слева вверху). В этом окне отображается список папок с сообщениями. Для того, чтобы выбрать папку, просто щелкните по ней мышкой. Список сообщений, содержащихся в этой папке, будет отображен в Окне Заголовков.
Рис. 14.34. Окно просмотра почты
Окно заголовков (верхнее правое окно). Это окно содержит информацию (флаг статуса, отправитель, тема и дата отправки сообщения) из заголовков сообщений, содержащихся в выбранной папке. Щелчком мыши по заголовку вы выбираете сообщение, после чего его содержание отображается в окне сообщений. Вы можете отметить сразу несколько сообщений. Для этого надо щелкнуть по заголовку первого сообщения, а затем, при нажатой клавише ‹Shift›, щелкнуть по какому-то другому заголовку. Будут выбраны (помечены) эти два сообщения, а также все сообщения, заголовки которых расположены в окне заголовков между первыми двумя.
Порядок, в котором сообщения отображаются в окне заголовков, можно изменить, щелкая мышкой по заголовкам столбцов в окне заголовков сообщений.
Окно сообщений (нижнее окно). В этом окне отображается заголовок выбранного сообщения и его тело, т. е. собственно содержание сообщения. При просмотре сообщения вы можете пользоваться клавишами ‹PageUp› и ‹PageDown› для перехода к следующей странице, или использовать клавиши стрелок для смещения на одну строку.
Однако, если вы пока еще не получали никаких электронных писем, два последних окна у вас пусты. Так что рассмотрение того, как работать с полученными сообщениями, пока отложим и вернемся к отправке нашего первого тестового сообщения. Для того, чтобы создать новое сообщение, надо вызвать окно редактора сообщений, что можно сделать через команду меню Письмо | Новое письмо, с помощью соответствующей иконки на панели инструментов или "горячими" клавишами ‹Ctrl›+‹N›. Если вы не задали текст подписи в окне настроек или в файле подписи, появится запрос на ввод имени файла, в противном же случае откроется окно Редактора, изображенное на рис. 14.35.
Рис. 14.35. Окно Редактора сообщений
Как видите, вам сразу предоставляется шаблон (или заготовка) нового письма. На приведенном рис. 14.35 этот шаблон минимален, он содержит только подпись, но путем соответствующих настроек шаблон можно сделать гораздо изощреннее.
Первым делом введите в верхнем поле (или строке ввода) адрес получателя письма. Если у вас уже имеются записи в Адресной книге, можно вызвать ее с помощью имеющихся рядом с этими полями клавиш с тремя точками, после чего перенести из нее адреса в поля Получатель: и Cc: двойным щелчком по нужному адресу. В одно и то же адресное поле можно внести сразу несколько адресов, разделив их запятыми. Рекомендуется указывать полные адреса (вида user@domain.com) даже для локальных пользователей.
После завершения ввода текста отправляем письмо через команду меню Письмо | Отправить. Для отправки можно воспользоваться соответствующей кнопкой на панели инструментов (конвертик со стрелкой) или комбинацией клавиш ‹Ctrl›+‹Enter›. Подготовленное письмо можно сохранить в папке черновиков (Drafts), чтобы отправить позже. Если при попытке отправить письмо связи с сервером не было, письмо сохраняется в папке Outbox и будет отправлено в следующем сеансе связи.
К письму можно присоединить один или несколько файлов. Проще всего это сделать с помощью кнопки с изображением канцелярской скрепки на панели инструментов, но можно и через соответствующую команду меню. Появится окно выбора файла. После выбора файла появится еще предложение определить тип файла, вид кодировки и дать краткое описание файла. Когда вы закончите с этим и нажмете кнопку Ok, в нижней части окна Редактора появляется дополнительная панель, отображающая свойства присоединенного файла. Вы еще имеете возможность удалить присоединенный файл, просмотреть его, отредактировать данные о нем или присоединить другие файлы. Все это делается через меню, которое появляется по щелчку правой кнопкой мыши на имени присоединенного файла.
Итак, первое письмо мы отправили. Теперь давайте получим входящую почту. Делается это с помощью команд меню Проверить почту или Проверить почту в ящике (можно также использовать кнопку на панели инструментов или "горячую" комбинацию ‹Ctrl›+‹L›). Перед установлением соединения с сервером программа запросит у вас пароль (рис. 14.36). Если с паролем все в порядке (и других проблем с установлением связи тоже нет), программа осуществляет прием писем. При этом в нижней строке окна программы отображается индикатор процесса загрузки почты с сервера. Если в ходе этого сеанса связи с сервером вы получите то сообщение, которое только что послали сами себе, то вас можно поздравить: почтовый клиент настроен и работает! Если же вы получите сообщение об ошибке, убедитесь, что сетевое подключение работает, перепроверьте установки, которые вы сделали, для чего снова вызовите команду меню Настройки | Параметры.
Рис. 14.36. Запрос пароля доступа к почтовому ящику
После получения почты надо ее просмотреть. Для этого заглянем в папку Inbox. Для принятых сообщений в ней установлены различные значения флага статуса. Статус может принимать следующие значения:
• Новое (красная точка, сообщение выделено красным цветом) - сообщение получено в первый раз и еще не прочитано.
• Непрочитанное (зеленая точка, сообщение выделено голубым цветом) - сообщение уже было получено с сервера по крайней мере один раз, но еще не прочитано.
• Прочитано (тире) - сообщение прочитано.
• Отправлен ответ (голубая стрелка с загнутым хвостом) - на это сообщение был сформирован ответ.
• В очереди (конверт) - сообщение было поставлено в очередь в выходном ящике (outbox) и будет отправлено позже.
• Отправлено: (конверт, повернутый под углом к горизонтали) - сообщение было отправлено.
Вы можете изменить значения статуса произвольным образом через команду меню Письмо | Установить статус или аналогичную команду в выпадающем меню.
Переместив подсветку на первое из писем, помеченных как непрочитанное, вы получаете доступ к его содержимому (в нижней панели окна просмотра). Перемещаться от одного письма к другому удобнее всего с помощью мыши, но можно это делать и с помощью клавиатуры, для чего служат следующие "горячие" клавиши:
• ‹N› - следующее сообщение
• ‹P› - предыдущее сообщение
• ‹+› - следующее не прочитанное сообщение
• ‹-› - предыдущее не прочитанное сообщение После прочтения письмо можно удалить. С большинством писем так и случается. Однако некоторые письма вам, возможно, захочется сохранить. Если оставлять их в папке Inbox, то вскоре писем в этой папке скопится так много, что разбираться с ними будет трудновато. Чтобы избежать этой неприятности, стоит с самого начала сортировать сохраняемую корреспонденцию, раскладывая ее по соответствующим архивным папкам. Предварительно надо создать эти папки. KMail поддерживает возможность создания вложенных папок, так что структуру папок лучше продумать заранее (хотя можно и создавать папки по мере необходимости). Для создания папки воспользуйтесь командой меню Папка | Создать. Приводить рисунок я не буду, там все интуитивно понятно.
Для того, чтобы переместить прочитанное письмо в какую-то из архивных папок, переместите на это письмо подсветку и воспользуйтесь командой меню Письмо | Переместить в. Появится выпадающее меню, содержащее список папок. Если какая-то папка (например, Archiv) содержит вложенные папки, то в этом меню будет фигурировать как имя самой папки, так и, дополнительно, "дети папки" (например, "дети Archiv"). Щелчок по команде "дети" вызовет вложенное меню, в котором будут перечислены вложенные папки. Чтобы переместить письмо в выбранную папку (или подпапку), достаточно щелкнуть мышкой по имени нужной папки. Можно перемещать сообщения и методом перетаскивания их мышкой из окна заголовков в окно папок (удерживая нажатой левую кнопку мыши).
Создать в какой-то папке вложенную или изменить название существующей папки, можно также, щелкнув по имени папки правой кнопкой мыши и выбрав соответствующую команду из появляющегося меню. Хочется отметить, что выпадающее меню можно вызвать практически для любого элемента окна KMail (как и KDE вообще), что очень удобно. Если, например, вы вызовете такое меню щелчком по имени папки, вы увидите, в частности, команды Стереть удаленные письма и Очистить. Последнее означает, что все письма, находящиеся к этому моменту в папке, будут перемещены в мусорную корзину (Trash). Эта операция аналогична операции удаления одиночного письма, только применяется сразу ко всем сообщениям в данной папке. Впрочем, это не совсем так. Дело в том, что при удалении писем с помощью операции Удалить, письмо фактически не удаляется из файла, представляющего данную папку (эти файлы находятся в подкаталоге Mail вашего домашнего каталога). Удаляется ссылка на данное сообщение в индексном файле, и письмо более не отображается в окне просмотра заголовков. Поэтому файлы папок со временем могут стать очень большими. Для того, чтобы реально удалить сообщение из файла папки и, тем самым, сократить объем этих файлов, необходимо выполнить упомянутую выше операцию Стереть удаленные письма. Операция Очистить перемещает все письма из папки в "мусорную корзину" и стирает удаленные письма. Если операцию Очистить проделать по отношению к папке Trash, то ее содержимое будет уничтожено безвозвратно.
В программе KMail для файлов папок с сообщениями используется формат mbox, один из форматов, широко используемых для этого в UNIX-системах. В таком файле сообщения располагаются одно за другим, и начало очередного сообщения определяется по особой строке, начинающейся словом From (не путайте со строкой From: из заголовка сообщения, содержащей адрес отправителя сообщения). Если вы использовали до сих пор какой-то другой почтовый клиент, вы можете использовать специальные конвертеры для преобразования ранее полученной почты в формат mbox. В составе дистрибутива ALTLinux Junior имеется специальная программа для импорта папок и адресных книг из нескольких почтовых систем (включая Outlook Express, Pegasus-Mail, Eudora Light). Если у вас другой дистрибутив, поищите конвертеры на сайте http://kmail.kde.org.
Описание программы KMail я закончу кратким перечислением тех ее возможностей и опций, которые не были упомянуты выше. Приводить их подробное описание здесь нет возможности, и я надеюсь, что разобраться с ними вы сможете самостоятельно. Итак, программа KMail позволяет:
• принимать письма с нескольких почтовых серверов (и) на несколько разных адресов;
• распечатать письмо не покидая программы (команда Файл | Печать);
• производить контекстный поиск письма по различным ключевым словам (команда Правка | Поиск письма);
• отображать письма в html-формате (команда Папка | Предпочитать html обычному тексту) и просматривать письма вместе с заголовками в текстовом виде (команда Письмо | Просмотр источника);
• изменять (устанавливать) кодировку для отображаемых писем (команда Письмо | Установить кодировку);
• производить проверку правописания создаваемых сообщений;
• подписывать создаваемые письма электронной цифровой подписью (по алгоритму PGP) и шифровать отправляемые письма;
• производить автоматическую сортировку входящих писем по заданным фильтрам.
Закончить я хочу теми же словами, которыми начал этот раздел: программа KMail очень быстро совершенствуется, и в скором времени будет обладать всеми возможностями, присущими лучшим программам этого класса. Именно поэтому я выбрал ее в качестве почтового клиента под Linux.
Рис. 15.2. Главное меню KDE
Команды Каталог и Домашний каталог служат для быстрого перехода в нужный каталог и просмотра его содержимого с помощью файлового менеджера Konqueror (о нем мы уже говорили в гл. 14 и еще не раз упомянем ниже).
В верхней части главного меню появляется отделенный горизонтальной чертой список часто запускаемых или недавно вызывавшихся команд (естественно, что появляется он не при первом запуске KDE, а после того, как вы немного поработаете в оболочке).
Смысл подавляющего числа команд меню не требует особых пояснений - они вызывают соответствующее приложение, и этим все сказано. Но две из них рассмотреть необходимо: это Центр управления и Настройки панели.
Рис. 15.3. Один из экранов Центра управления KDE
Первое, что я делаю, - настраиваю фон или тему рабочего стола с помощью команд Фон и Менеджер тем меню Внешний вид и интерфейс главного меню Центра управления. На приведенных выше рисунках вы можете видеть результат. Одновременно можно выбрать основные цвета (команда Цвета) и стиль оформления графических элементов (команда Стиль), однако я обычно оставляю здесь установки по умолчанию.
Рис. 15.4. Задание шрифтов для разных элементов экрана
Далее просто необходимо выбрать (с учетом своих вкусов и, возможно, особенностей зрения) шрифты, которыми будут выводиться различные надписи. На рис. 15.4 вы видите правую панель Центра управления, соответствующую команде Шрифты.
Для изменения какого-либо шрифта надо щелкнуть по экранной кнопке Выбрать. Появится окно, изображенное на рис. 15.5, в котором и осуществляется такой выбор. После того, как выбор шрифта произведен, вы щелкаете по кнопке Ok. Однако это еще не значит, что такой шрифт будет использоваться в KDE. Для того, чтобы изменения вступили в силу, надо еще нажать кнопку Применить на панели Центра управления (рис. 15.4). Это, кстати, касается не только шрифтов, а любых изменений, производимых с помощью Центра управления.
Рис. 15.5. Окно выбора шрифтов
Если вы хотите, чтобы экран гас в то время, когда вы уходите от своего компьютера, а тем более, если вы хотите, чтобы вернуть экран в активное состояние можно было только после ввода пароля, воспользуйтесь вложенной командой Хранитель экрана.
Вид и содержание главного меню KDE тоже можно настраивать. Но надо иметь в виду, что главное меню считается элементом панели KDE, а поэтому и команды меню, связанные с его собственной настройкой, надо искать там, где речь идет о настройке панели: в команде Настройка панели главного меню или в команде Внешний вид и интерфейс | Панель Центра управления KDE.
Добравшись одним из этих способов до вкладки Меню, вы увидите картинку, изображенную на рис. 15.6.
Я думаю, что из этого рисунка ясно, какие параметры главного меню можно изменить на этой вкладке. Как видите, состав и содержание элементов меню здесь изменить невозможно. Для этого надо вызвать отдельную программу - Редактор меню KDE, что делается через команду Настройка панели | Редактор меню того же главного меню.
Рис. 15.6. Настройка главного меню
Окно программы Редактор меню KDE представлено на рис. 15.7. Здесь можно как создать новую команду меню, так и новое подменю, указать название приложения и имя запускаемого файла, а также назначить запуск программы от имени другого пользователя.
Рис. 15.7. Редактор меню KDE
На вкладке Расширенные можно назначить "горячую" клавишу, по которой можно будет вызывать приложение, не прибегая к помощи меню и мыши.
Я думаю, что теперь вы сможете при желании перестроить главное меню KDE в соответствии со своими вкусами и привычками. Поэтому обратимся к вопросу настройки другого важнейшего элемента графического интерфейса KDE - панели.
Рис. 15.8. Выпадающее меню для Панели
Как видите, с помощью первой вкладки (Общие) можно переместить панель к любой границе экрана, изменить ее размер, задать скорость движения при автоскрытии и определить терминальное приложение. На следующей вкладке (Внешний вид и интерфейс) задаются еще несколько аналогичных параметров. Поэкспериментируйте! Только не забывайте нажимать кнопку Применить, иначе никаких изменений не произойдет. Вкладку Меню мы уже рассматривали, а двумя следующими вкладками (Кнопки и Аплеты) я не пользуюсь (пробовал поменять фон кнопок и панели, но мне это не понравилось).
Теперь обратите внимание на первую команду (Добавить) в меню, изображенном на рис. 15.8. Если переместить на эту команду указатель мыши, то вы увидите, что добавить можно как отдельный элемент (т. е. кнопку или иконку) на панель задач, так и четыре вида дополнительных панелей (или четыре вида расширений основной панели). Я не вижу смысла приводить здесь изображения всех этих панелей, расскажу для примера только об одной из них - дополнительной панели задач (на рис. 15.10 она расположена над основной панелью).
Рис. 15.9. Окно настроек панели
Обратите внимание на серый и как бы ребристый прямоугольник в левом конце этой дополнительной панели. Щелкнув по нему правой кнопкой мыши, вы получите возможность удалить дополнительную панель или добавить на нее что-то (только кнопку мыши надо удерживать). С помощью таких же серых и ребристых прямоугольников можно получить доступ к меню других элементов главной панели.
Рис. 15.10. Дополнительная панель задач
Меню управления кнопками на панели появляются после щелчка правой кнопкой мыши по самой кнопке (рис. 15.11).
Рис. 15.11. Выпадающее меню для кнопки на Панели
Первый элемент в этом меню (Панель меню) вызывает уже известное нам меню настроек панели, следующие два служат для перемещения или удаления данной конкретной кнопки, а последний вызывает окно, изображенное на рис. 15.12. В этом окне вы можете изменить некоторые параметры той кнопки, щелчок по которой вызвал появление меню. Изменить можно рисунок на кнопке, вызываемую по ней программу, права, с которыми программа запускается, и список типов файлов, ассоциированных с данным приложением.
Рис. 15.12. Свойства ссылки
Подробнее со всеми свойствами и возможностями панели вам придется разбираться самостоятельно, а я закончу тем, что расскажу вам "страшную" историю. Во время знакомства с ее возможностями и опциями настройки я умудрился однажды вообще удалить панель с экрана. Как уж это получилось, я тогда даже не понял. Но факт тот, что пропали и сама панель, и главное меню, и спасительная буква "K", а, следовательно, возможность вообще что-либо запустить. Мне долго пришлось искать выход из этой ситуации, но он, конечно же, нашелся. Щелкнув по пустому полю на рабочем столе, я получил выпадающее меню, в котором нашлась команда Помощь по рабочему столу. Изучив эту подсказку, я узнал, что панель представляет собой отдельную программу, которая называется kicker. Запустив эту программу с помощью того же выпадающего меню рабочего стола (Выполнить команду), я успешно вернул панель на ее законное место.
В этом разделе нам осталось только сказать пару слов о значках ("иконках") на рабочем столе. Они тоже могут использоваться для запуска приложений или быстрого доступа к некоторым файлам или каталогам. Впрочем, вы вероятно, знакомы с ними по работе в Windows. Мне, как и вам, наверное, неоднократно приходилось видеть экраны мониторов, усыпанные такими значками. Правда, сам я не сторонник такой россыпи картинок на рабочем столе. На мой взгляд, гораздо удобнее пользоваться хорошо структурированным главным меню. Но о вкусах не спорят… Так что, если вам это нравится, щелкайте по пустому пространству рабочего стола, и создавайте новую ссылку на приложение, файл или устройство, как это показано на рис. 15.13.
Рис. 15.13. Создание новой ссылки на рабочем столе.
Если же хотите знать мое мнение, то из значков на рабочем столе необходимы только значки, ссылающиеся на устройства, и, в первую очередь, на floppy-дисковод и дисковод CD-ROM. С помощью таких значков очень удобно монтировать и размонтировать сменные носители: достаточно вызвать выпадающее меню (щелчком правой кнопки мыши по соответствующему значку) и выбрать нужную команду.
На этом я закончу свое очень краткое введение в KDE. Точнее, не введение в KDE, а краткое описание программы kicker. Потому что кроме этой программы KDE включает в себя еще массу разнообразных приложений, общим числом более сотни. Описать их все не представляется возможным, поэтому я вернусь к решению той задачи, которую сформулировал в начале этой главы: подобрать набор Linux-приложений, которые необходимы простому пользователю для комфортной работы. Но начать надо с конкретизации самого понятия "удобная рабочая среда".
Рис. 15.14. Окно файлового менеджера Konqueror с двумя панелями и "командной строкой"
Как видите, есть даже командная строка. Правда, мне лично не хватает привычных кнопок, ассоциированных с клавишами ‹F1› - ‹F10› и некоторых других элементов интерфейса, так что я в большинстве случаев предпочитаю пользоваться "настоящим" Midnight Commander. Но в чем Konqueror превосходит Midnight Commander, так это в средствах просмотра файлов. И для этих целей я использую именно Konqueror. В нем в большинство файлов можно "заглянуть" так же удобно, как и в любой каталог. Это касается не только текстовых или html-файлов, но и, например, графических файлов разных форматов. В общем, Konqueror, безусловно, является одним из элементов удобной пользовательской среды, а уж в каких случаях им пользоваться - дело вкуса и привычек (или наличия необходимых знаний и соответствующей степени знакомства с продуктом).
Из дополнительно устанавливаемых утилит в первую очередь надо упомянуть архиватор bzip2 (если он не установлен). Его необходимо установить, поскольку архивы в этом формате нередко будут встречаться вам в Интернете.
В составе KDE имеется довольно удобная утилита Архиватор (ark), которая умеет работать с разными типами архивных файлов. Она позволяет просматривать архивы разных форматов (tar, tar.gz, tar.bz2, zip, rar, zoo, lzh, a), а также создавать новые архивы.
О некоторых программах, которые в главном меню KDE первоначально отнесены к группе утилит, я еще напомню вам в следующих разделах. А здесь, в завершение раздела об утилитах хочу сказать пару слов о двух средствах, необходимых на мой взгляд для любого компьютера при любой операционной системе. Это источник бесперебойного питания с соответствующим программным обеспечением и антивирусный пакет.
В разделе о файловой системе уже было сказано, что выключать компьютер с Linux простым отключением питания недопустимо: это может привести к непоправимым сбоям в файловой системе. Но ведь отключение питания может произойти и не по вашей воле. Поэтому очень желательно приобрести и установить источник бесперебойного питания, а также найти, инсталлировать и настроить программные средства для выключения системы по сигналу о выключении питания. К сожалению, я не могу дать здесь более подробные рекомендации, но упомянуть об их существовании и необходимости посчитал полезным.
Так же кратко упомяну и об антивирусных средствах. До недавнего времени считалось, что Linux не подвержен опасности заражения вирусами. Это даже преподносилось как одно из достоинств этой операционной системы. Однако в последнее время стало ясно, что это далеко не так. Впрочем, это и не удивительно, если вспомнить, что самый известный из вирусов, - червь Морриса, - был создан и распространялся именно в UNIX-сетях. Просто до некоторого времени авторы вирусов не уделяли внимания Linux из-за малой распространенности этой ОС и отсутствия у них необходимых знаний о ней. Так что антивирусные утилиты становятся необходимым компонентом программного обеспечения также и на компьютерах, работающих под Linux.
К счастью, создатели антивирусного ПО тоже не дремлют. Как "Лаборатория Касперского" (www.kaspersky.ru), так и "Диалог-наука" (www.dials.ru) уже выпустили версии своих известных антивирусных программ AVP (или KAV) и DrWeb для Linux. К сожалению, эти продукты распространяются на коммерческой основе. Однако обе фирмы предоставляют всем желающим "урезанные" версии своих программ, которые позволяют обнаружить заражение, но не обладают способностью лечить зараженные файлы.
Рис. 15.15. Электронная таблица KSpread
Когда говорят об "офисных приложениях", обычно имеют в виду не только работу с текстом, но и электронные таблицы, программу для построения схем, системы подготовки презентаций, а также и какую-либо из систем управления базами данных (хотя последнее уже необходимо далеко не всем). Здесь два основных конкурента в борьбе за место на вашем рабочем столе - пакеты OpenOffice.org и KOffice, хотя нельзя забывать и о программах проекта Gnome.
Рис. 15.16. Система подготовки презентаций KPresenter
Рис. 15.17. Программа для создания диаграмм KChart
В состав пакета KOffice входит основной набор офисных приложений: электронная таблица KSpread (рис. 15.15), система подготовки презентаций KPresenter (рис. 15.16), программа для создания диаграмм KChart (рис. 15.17) и простенькая "рисовалка" KIllustrator. Все эти компоненты можно объединить в один Рабочий стол KOffice (рис. 15.18), что позволяет легко переключаться между этими приложениями.
Рис. 15.18. Рабочий стол Koffice с запущенной программой KIllustrator
Я не могу утверждать, что эти приложения обеспечивают все возможности, которые имеются в пакете Microsoft Office, но пакет KOffice интенсивно развивается и совершенствуется, так что если не сейчас, то в ближайшем будущем будет удовлетворять потребности рядового пользователя. Его обновленные версии можно найти на сайте http://koffice.kde.org/.
Что касается электронных таблиц, то, по отзывам в Интернете, очень неплохая электронная таблица для Linux разработана в рамках проекта Gnome. Называется она Gnumeric и найти ее можно по адресу ftp://ftp.gnome.ru/gnumeric/.
Возможности этой программы (по крайней мере по той информации, которая опубликована на сайте http://www.gnome.ru), впечатляют. Она поддерживает 95% встроенных функций Excel и 100% инженерных функций, внутри-табличные зависимости, все встроенные в Excel форматы представления данных (числовой, денежный, учетный, даты, времени, процентов, дробный, научный, текстовый, специальный) и многое другое. В составе Gnumeric имеются фильтры для импорта файлов в форматах:
• MS Excel (вся суммарная информация, весь текст таблиц + формулы, стили, выделения, встроенные изображения, настройки принтера);
• Формат Lotus 1-2-3 .wk1;
• Applix;
• Psion;
• Sylk;
• XBase;
• Oleo;
• XML (собственный формат);
• HTML (различный);
• CSV (значения, разделенные запятыми);
а также фильтр для экспорта таблиц в формат Excel (итоговая информация, весь текст таблиц + формулы, названия). Реализована 361 функция электронных таблиц и 17 аналитических инструментов. Поддержка MS Excel выполнена на высоком уровне, большая часть функций работает (не реализованы пока некоторые финансовые и математические функции). Gnumeric локализован для различных языков и обрабатывает числовые форматы в соответствии с правилами различных стран и языков.
Что касается СУБД, то скажу только, что для Linux разработано или адаптировано более десятка разных СУБД, от Gadfly до Oracle. Наиболее часто в литературе упоминаются PostgreSQL и MySQL. По этим двум СУБД уже выпущено несколько книг (на русском языке), так что, если вас эта тема интересует, вы без труда найдете необходимую информацию.
Рис. 15.19. Главное окно программы GIMP
Кроме этих окон можно открыть (из меню, вызываемого через команду Файл | Диалоги) различные вспомогательные окна, служащие для выбора инструментов, шаблонов, задания цвета (палитра), слоев (layers) и т. д.
Окно инструментов (рис. 15.19) содержит:
• главное меню, состоящее всего из трех элементов - Файл, Расш (ирения) и Справка;
• кнопки инструментов (два ряда квадратиков с изображениями);
• панель выбора цветов фона и "краски" (внизу слева);
• индикатор статуса инструментов (внизу справа).
Одиночный щелчок левой кнопкой мыши по кнопке с указанием инструмента означает выбор соответствующего инструмента, а двойной щелчок вызывает появление окна настройки. Задержите указатель мыши над любым элементом, и вы увидите краткое пояснение назначения этого элемента. Одиночный щелчок по квадратикам на панели выбора цвета и по любому из трех элементов на панели статуса вызовет появление соответствующего окна, в котором можно произвести нужный выбор. Такие же окна можно вызвать и через меню Файл | Диалоги.
Второе окно, которое вы всегда будете использовать при работе с рисунком, - это окно изображения (Image Window).
Рис. 15.20. Окно рисунка (Image Window) в GIMP
На рис. 15.20 показано, как выглядит это окно при его открытии (через команду меню Файл | Новый), когда в нем еще ничего не рисовали и не открывали файл с готовым рисунком. Белое поле в этом окне - это то место, где вы можете проявить свои творческие способности. Если отображаемый в окне рисунок не помещается в окне, можно использовать линейки прокрутки.
Я надеюсь, что первоначальное представление о том, как запустить GIMP и управлять им вы получили. Полное описание приемов работы с этой программой не входит в мою задачу. Если вам это интересно, загляните на сайт А. Селезнева "GIMP по-русски" по адресу http://gimp.linux.ru.net/.
Кроме того, рекомендую вам просмотреть обзор другого программного обеспечения для работы с графикой под Linux, который вы найдете в статье В. Галактионова "Существует ли графика для Linux", опубликованной в №4 журнала "Мир ПК" за 2001 год (http://osp.ru/pcworld/2001/04/078.htm).
Рис. 15.21. Значок календаря на панели
Один щелчок мышкой по этому значку - и разворачивается окно программы. Вид его зависит от того, в каком состоянии программа завершила работу предыдущий раз. Основных видов четыре, один из них изображен на рис. 15.22 (календарь на день). Можно отобразить календарь на день, на неделю (причем показывать можно только рабочую неделю, а можно - вместе с выходными), на месяц. Имеется также вариант, при котором перечень событий отображается в виде списка. Можно переключить календарь на отображение списка задач (в других вариантах этот список отображается в левой нижней панели Календаря).
Задать новое событие можно через команду Действие главного меню Календаря. Открывается окно с тремя вкладками, изображенное на рис. 15.23.
Рис. 15.22. Календарь на день
Рис. 15.23. Календарь. Задание нового события
На первой вкладке вы вводите название события, время его начала и (при желании) время завершения. Здесь же можно ввести какой-то комментарий к событию и указать, за какое время до его наступления программа должна напомнить вам о нем, чтобы, например, не опоздать на назначенную встречу. По вашему желанию можно отнести событие к одной из определенных категорий. Если вы поставите отметку напротив надписи "Повторяющееся событие", то стоит перейти на вкладку Повторение, чтобы задать параметры повторения (см. рис. 15.24). На вкладке Приглашенные можно задать список участников события.
Рис. 15.24. Календарь. Определяем периодичность события
Когда наступит установленное для напоминания о событии время, на экране появится небольшое окно с соответствующей информацией (рис. 15.25).
Рис. 15.25. Сообщение программы Календарь
Чтобы ввести новую задачу, нужно тоже воспользоваться главным меню программы или дважды щелкнуть по панели Задачи (см. рис. 15.22).
После этого остается только заняться выполнением запланированных задач, а программа будет напоминать вам, когда необходимо прерваться, чтобы принять участие в запланированных совещаниях, не опоздать на назначенную встречу или вовремя принять лекарство. Если же вы желаете просмотреть полный перечень запланированных событий и/или задач за определенный период, это можно сделать экспортировав содержимое базы данных в HTML-файл (команда меню Файл | Экспорт). Как это будет выглядеть, вы можете увидеть на рис. 15.26.
Рис. 15.26. Вывод календаря в виде HTML-файла
Рис. 15.27. Netscape Messenger
С помощью той же программы можно организовать просмотр новостей.
В качестве Интернет-браузера я использую либо Netscape Navigator, либо Konqueror, а в качестве FTP-клиента - встроенные средства Midnight Commander. Для соединения с каким-либо сервером по FTP с помощью Midnight Commander надо вызвать меню любой из панелей и выбрать команду FTP-соединение. Появится строка ввода, изображенная на рис. 15.28. Если вы не помните, в каком формате вводится адрес удаленной машины, то нажмите клавишу ‹F1› и вы получите исчерпывающую подсказку. Можно сделать еще проще - набрать в командной строке
[user]# cd ftp://somehost.org/pub/dir/
или даже сразу указать имя и пароль пользователя:
[user]# cd ftp://USER:PASSWORD@someserver.ru/mydir
Можно занести часто используемые адреса FTP в списке любимых каталогов (нажмите ‹Ctrl›+‹\›) и потом вызывать их при необходимости с помощью той же коммбинации клавиш ‹Ctrl›+‹\›. Работать по протоколу FTP из программы Midnight Commander очень удобно - вы работаете с каталогами удаленной машины так же, как с локальными (если не считать задержек по времени, конечно).
Рис. 15.28. Соединение с FTP-сервером
Рис. 15.29. XPlayCD
В отличие от CD-проигрывателя она рассчитана на стерео-записи: две полоски рядом с изображением динамика позволяют отдельно регулировать громкость звука в правой и левой колонках (щелкайте мышкой по полоске или справа от нее). Других преимуществ у XPlayCD по сравнению с CD-проигрывателем я не увидел.
Как CD проигрыватель, так и XPlayCD позволяют только прослушивать аудио-записи в том формате, который используется на CD-ROM. Если же вы хотите воспроизвести какой-либо файл формата MP3, получившего большое распространение в Интернете, вам надо воспользоваться программой xmms - X MultiMedia System (которая до 10 июня 1999 г. называлась X11Amp). Последняя устанавливается вместе с KDE, а по виду и возможностям очень напоминает (рис. 15.30) известный Windows Amplifier, или WinAmp. Версия 1.2.4, которая установилась у меня из дистрибутива Red Hat CE 7.1, была довольно капризна, но после того как я скачал (с сайта http://www.xmms.org) и установил версию 1.2.5, программа начала работать вполне устойчиво.
Рис. 15.30. Главное окно программы xmms
Рассмотрим некоторые элементы главного окна программы. В правом верхнем углу вы видите три обычные кнопки управления окном: свернуть в значок на панели, минимизировать (оставить только заголовок окна), закрыть программу.
В том варианте, который загружается по умолчанию, хоть и с трудом, но можно разглядеть на черном фоне пять вертикально расположенных букв: O, A, I, D, V. Щелчок левой кнопкой мыши по одной из этих букв вызывает следующую реакцию.
O Появляется меню настроек программы.
A По идее должно заставлять программу выводить свое окно поверх всех остальных окон, но пока, видимо, не работает.
I Выводит информацию о воспроизводимой мелодии (естественно в том объеме, который сохранен в mp3-файле).
D Увеличивает вдвое размер окна.
V Появляется меню управления режимами визуализации.
Рядом с буквами находится панель визуализации, в которой отображается время воспроизведения (либо прошедшее, либо оставшееся, в зависимости от настройки) и спектрограмма мелодии (вид которой тоже можно настроить).
Под названием программы находится панель, в которой во время воспроизведения бегущей строкой отображается название воспроизводимой мелодии и ее номер в текущем списке (playlist). Щелчком правой кнопки мыши по этой панели вызывается еще одно окно настроек (которое можно вызвать также щелчком левой кнопки по непонятному значку в верхнем левом углу окна программы). Поскольку все команды упоминавшихся меню русифицированы (по крайней мере у меня), то описывать их назначение не имеет смысла. Ниже бегущей строки с названием мелодии выводится скорость битового потока (MP3 bitrate in KBps), обычно 128 или 112 Кбит/с, ширина полосы в килогерцах (обычно 44) и индикатор стерео или моно режима.
Ниже той панели, о которой мы только что говорили, находятся два ползунка - регулятор громкости и баланса, и две кнопки. Первая из этих кнопок (EQ), вызывает графический эквалайзер, а вторая (PL) - окно управления списком воспроизводимых мелодий (playlist). Ниже располагается индикатор (в виде ползунка), показывающий, какая часть мелодии воспроизводится.
Еще ниже располагаются обычные для CD-проигрывателя кнопки управления воспроизведением (переключение на предыдущую мелодию списка, воспроизведение, пауза, стоп, переключение на следующую мелодию в списке, извлечение CD-диска, что в данном случае означает загрузку нового списка мелодий). Далее следуют кнопки воспроизведения мелодий из списка в случайном порядке и повторного воспроизведения списка после его завершения.
Большинству настраиваемых опций программы соответствуют горячие клавиши, однако приводить здесь их перечень я не вижу смысла: все они указаны в соответствующих командах меню и те, кто привык пользоваться больше клавиатурой, чем мышью, легко смогут их найти и заучить. Я также не буду объяснять назначение и приемы работы с графическим эквалайзером: вы либо знаете это лучше меня, либо, как и я, вообще не пользуетесь этим устройством.
Таким образом, осталось рассказать только о том, как использовать списки мелодий ("плей-листы"). Итак, чтоб вызвать окно редактирования списка мелодий, щелкните по маленькой кнопке, рядом с которой стоят буквы PL. Появится окно, изображенное на рис. 15.31, в котором имеется 5 кнопок.
Рис. 15.31. Редактор списков мелодий
Эти кнопки ведут себя несколько необычно. Каждая из них предоставляет несколько вариантов выбора, но чтобы произвести выбор, надо не просто щелкнуть по кнопке, а, удерживая кнопку нажатой, перевести указатель мыши на нужный вариант и только после этого отпустить клавишу мыши. Давайте рассмотрим назначение этих кнопок (в порядке их расположения - слева направо). В табл. 15.1 приведены изображения того, что вы увидите, когда будете удерживать каждую кнопку, и что получите, отпустив кнопку мыши на каждом из появляющихся вариантов.
Таблица 15.1. Кнопки управления playlist
Кнопка
Описание
• + URL - появится строка ввода, в которой надо будет ввести URL файла в Интернете (Интранете); только имейте в виду, что в этой строке можно ввести имя конкретного файла с мелодией и нельзя ввести адрес списка мелодий;
• + DIR - появляется окно с деревом каталогов, позволяющее вам выбрать каталог с файлами мелодий; все файлы из этого каталога будут включены в список мелодий;
• + FILE - появится диалоговое окно выбора файлов, а после выбора файла (только одного) соответствующая мелодия будет включена в список (в виде имени файла или названия, если программа сумеет извлечь его из файла);
Кнопка
Описание
• - MISC: появляется предложение удалить "мертвые" (dead) файлы, то есть файлы, ссылка на которые присутствует в списке, но является по каким-либо причинам ошибочной (например, файл уже удален с диска);
• - ALL: удаление всех файлов из текущего списка;
• - CROP: удалить из списка все файлы, кроме тех которые помечены;
• - FILE: удалить помеченные файлы;
Кнопка
Описание
• INV SEL - инвертировать текущие пометки;
• SEL ZERO - снять все отметки с файлов текущего списка;
• SEL ALL - отметить все файлы текущего списка;
При выборе файлов для пометки можно пользоваться клавишами ‹Shift› и ‹Ctrl›, чтобы выбрать несколько файлов подряд или добавить к числу отмеченных отдельные файлы;
Кнопка
Описание
• SORT LIST - появляется дополнительное меню, в котором можно выбрать один из возможных вариантов сортировки списка;
• FILE INF - появляется окно с информацией о текущей мелодии (если, конечно, программа в состоянии извлечь такую информацию из файла);
• MISC OPT - эта кнопка служит только для доступа к двум другим вариантам, доступным по этой кнопке;
Кнопка
Описание
• NEW LIST - удаляет текущий список мелодий;
• SAVE LIST - позволяет сохранить текущий список мелодий в отдельном файле;
• LOAD LIST - позволяет загрузить список мелодий из файла.
Загрузить список файлов в xmms можно не только с помощью редактора списка мелодий, но и непосредственно из командной строки, с помощью одной из следующих команд:
xmms file1.mp3 file2.mp3 file3.mp3
xmms*.mp3
xmms playlist.m3u
Если в это время программа xmms уже запущена, то текущий список мелодий будет удален, а список, заданный командной строкой, будет загружен.
Что еще надо сказать, так это то, что xmms может воспроизводить не только файлы формата mp3, но и обычные аудио-CD. Только для того, чтобы создать список мелодий в этом случае, надо воспользоваться кнопкой +DIR и выбрать каталог /mnt/cdrom.
Рис. 15.32. Окно программы aKtion после запуска
Управление программой осуществляется очень просто. Вдоль нижней границы окна располагается семь кнопок. Над кнопками расположен ползунок регулятора громкости. Первая из экранных кнопок открывает стандартный диалог KDE "Открыть файл", с возможностью задания фильтров отображения файлов тех форматов, которые поддерживаются программой aKtion. Назначение следующих четырех очевидно из тех изображений, которые на них нанесены: воспроизведение, остановка, перемотка к началу, переход в конец (правда, у меня две последних кнопки действуют как-то не так, как ожидается). Следующая кнопка, с изображением гаечного ключа, служит для вызова окна меню настроек (рис. 15.33), а последняя кнопка вызывает подсказку по программе.
Окно настроек программы можно также вызвать, если во время демонстрации видео удерживать нажатой правую кнопку мыши в любой точке выводимого изображения. Появится выпадающее меню, содержащее несколько команд для управления изображением и среди них команду Настройка программы.
Окно настроек содержит 5 вкладок. Начнем с вкладки Разное (рис. 15.33). Первая группа параметров определяет способ загрузки видеофайла. При первом варианте (Загружать в память) файл просто полностью загружается в память до начала воспроизведения. Во втором варианте (Загружать в память и декодировать) файл не только загружается в память, но еще и производится его декомпрессия, и только после этого начинается его воспроизведение. В третьем варианте (Загружать только необходимые участки) предварительная загрузка не производится, части файла загружаются в память по мере необходимости. Последний вариант используется по умолчанию.
Следующие три параметра касаются использования разных типов памяти, я тут использую значения, установленные по умолчанию.
Рис. 15.33. Окно настроек программы aKtion
Далее идет строка ввода, в которой можно указать, с какого каталога будет начинаться поиск нужного видео-файла (если строка пуста, то начальной точкой поиска будет ваш домашний каталог). Вы можете ввести полное имя нужного каталога или выбрать его, нажав кнопку справа с тремя точками.
Ниже строки, задающей начальный каталог, идут два параметра, назначение которых очевидно из названий: Воспроизводить в цикле и Автоматически начинать воспроизведение видео после открытия файла, а затем две строки ввода для задания местоположения файла программы xanim и ее параметров.
На вкладке Аудио особых пояснений требует только одна опция: Пропускать кадры для синхронизации видео и звука. Эта опция необходима при работе на медленных машинах, на которых видео и аудио могут воспроизводиться с разной скоростью (изображение отстает от звука). В таком случае надо включить данную опцию. Это приведет к снижению качества воспроизведения изображения, поскольку часть кадров видео будет пропускаться, но результат может быть вполне приемлемым (все зависит от скорости процессора и объема памяти в компьютере).
Выключение параметра Показывать уровень громкости приводит к исчезновению ползунка регулятора громкости в основном окне программы, а переключатель Начальная громкость задает уровень громкости, устанавливаемый при запуске программы.
Вкладка Цветность содержит некоторые параметры, менять которые может оказаться необходимым в тех случаях, когда Ваш дисплей не позволяет воспроизводить True Color (16-битные цвета). По умолчанию здесь задано отсутствие преобразований цвета ("Нет"). Установка значений, больших 1.0, в последней строке вкладки ("Гамма дисплея") приводит к тому, что изображение становится ярче.
Вкладка Масштабирование позволяет выбрать режим вывода изображения: от половинного до полноэкранного.
Программа aKtion предоставляет возможность сделать снимок экрана в процессе вывода видео, для чего надо в нужный момент нажать клавишу ‹C›. Вкладка Захват изображения позволяет задать формат файла с захваченным изображением и указать каталог, в котором этот файл будет сохранен. Возможны следующие форматы выходных файлов: bmp, jpeg, pbm, pgm, png (используется по умолчанию), ppm, xbm, xpm.
Поскольку aKtion является просто оболочкой к программе xanim, то список поддерживаемых форматов видео-файлов вы можете просмотреть по команде man xanim. К сожалению, с помощью aKtion удается просмотреть далеко не любой видео-файл. По крайней мере мне не удалось с ее помощью просмотреть два недавно приобретенных CD-диска с фильмами в формате MPEG4. А вот программа xine из дистрибутива ASP Linux 7.2 с ними справилась.
Рис. 15.34. Главное окно программы xine (окно просмотра)
Одновременно обычно выводится и второе окно с панелью управления (рис.15.35). Если оно не появилось, вы можете вызвать его щелчком правой кнопки мыши в окне просмотра или нажатием клавиши ‹G› на клавиатуре. Таким же образом можно отключить вывод панели управления («спрятать панель»). На панели управления имеется набор кнопок, аналогичный набору управляющих кнопок на панели обычного видеомагнитофона: кнопки запуска воспроизведения, временной остановки (pause), перемотки в начало и конец и т.д.
Рис. 15.35. Панель управления программы xine.
Если вы, например, хотите воспроизвести VCD или DVD, то после появления на экране панели управления щелкните кнопкой мыши по кнопке с надписью VCD (или DVD). Это заставляет Xine искать диск в соответствующем устройстве. Если диск найден, вы можете запустить воспроизведение щелчком по кнопке с изображением треугольника в верхней части круглой «ручки» на правой стороне панели.
Рис. 15.36. Выбор файла для воспроизведения.
Если же вы хотите воспроизвести фильм, который находится в файле на жестком диске или CD, надо сначала добраться до нужного файла. Для этого нужно открыть окно MRL-браузера (рис. 15.36), что достигается щелчком по кнопке на панели управления, над которой изображен значок “://”. Аббревиатура MRL означает Media Resource Locator, то есть указатель медиа-ресурса(ов). В качестве такого указателя могут выступать:
• полный путь к файлу на диске, перед которым стоит указание на тип MRL в виде «file://», например, file://some/file.vob.
• указатель на программный канал: fifo://[[mpeg1:mpeg2]:/]some/fifo. В этом случае Xine получает видео из специального программного канала /some/fifo. По умолчанию Xine предполагает, что входной поток имеет формат mpeg-2, если же нужно воспроизвести формат mpeg1 или mpeg2, нужно явно указать это в MRL.
• указатель на стандартный ввод stdin: stdin://[mpeg1:mpeg2]. Как и в случае с программным каналом (fifo:// MRL), Xine предполагает, что вход идет в формате mpeg2, если ему явно не указано противное.
• указание на DVD-диск: dvd://VTS_xx_y.VOB. Отличие этого варианта от задания источника в виде file:// MRL состоит в том, что Xine читает данные непосредственно с DVD, не используя файловую систему.
• vcd://track - Воспроизводится указанный трек с VCD.
• html://server.somewhere.tld/foo/bar.mpg. Xine обращается к указанному URL и пытается воспроизвести файл.
В окно MRL-браузера вы вначале должны выбрать тип источника, щелкнув левой кнопкой мыши по одной из кнопок в поле окна, обозначенном словом «Source». Не могу вам сказать, что произойдет после выбора VCD, DVD или CDA - не было у меня дисков в этих форматах. Если же вы выберите вариант file, то в основном поле окна отобразится содержимое текущего каталога. Дальше можно перейти в любой каталог вашей файловой структуры (в том числе в каталог, куда смонтирован CD-ROM) и выбрать файл для воспроизведения. Проще всего переходы по структуре каталогов осуществлять, щелкая мышью по нужному каталогу (чтобы переместить на него подсветку), а затем щелкая по кнопке Select. Когда вы уже добрались до нужного файла и переместили на него подсветку, нужно вместо Select щелкнуть по кнопке с изображением треугольника. Начнется показ выбранного фильма в окне просмотра. Если же после выбора файла щелкнуть по кнопке Select, то для начала воспроизведения придется воспользоваться упоминавшейся выше кнопкой панели управления с изображением треугольника.
Окно MRL-браузера можно закрыть щелчком по кнопке Dismiss. Можно также одним щелчком правой кнопки мыши по свободному полю в окне просмотра разом закрыть все вспомогательные окна (включая окно панели управления). Тот же эффект достигается нажатием клавиши ‹G› (обратно на экран они вызываются тем же способом).
Все фильмы (или файлы), которые вы просматривали в текущем сеансе работы с программой, запоминаются в списке просмотренных фильмов (или плей-листе - playlist). Этот список можно просмотреть в отдельном окне (рис.15.37), которое называется Playlist Editor. Вызвать его на экран можно щелчком по четвертой слева кнопке на панели управления xine. В список можно добавлять фильмы (кнопка Add справа) или удалять из него как отдельные позиции, так и весь список разом с помощью кнопок в нижней части окна (всмотритесь в изображения над кнопками и вы поймете из назначение). Можно также сохранить список фильмов (кнопка Save) или загрузить ранее сохраненный список (кнопка Load в правой стороне окна).
Рис. 15.37. Список фильмов / файлов (playlist)
Программа имеет еще одно вспомогательное окно, о котором стоит упомянуть (рис.15.38). Оно появляется после нажатия на пятую слева кнопку на панели управления. Назначение этого окна состоит в изменении некоторых параметров вывода изображения на экран и изменения “шкурок” (skins), то есть изменения внешнего вида окон. Впрочем, имеющиеся в этом окне ползунки изменения яркости, контраста и других параметров изображения в текущей версии (0.9.8) не работают. А вот «шкурки» можно менять и даже добавлять новые, скачивая их из Интернета (так же как в программах XMMS или Winamp). Для смены «шкурки» достаточно выбрать ее имя щелчком кнопки мыши по ее имени в правой части диалогового окна изменения параметров (рис. 15.38).
Рис. 15.38. Окно изменения параметров
А теперь вернемся к описанию панели управления программы xine, изображенной на рис. 15.35. После того, как вы выбрали файл для воспроизведения, имя этого файла высвечивается на панели. Если воспроизведение не началось автоматически, можно запустить его, щелкнув по треугольнику, расположенному в верхней части круга (или круглой «ручки») на правой стороне панели. Остальные значки на этом круге выполняют следующие функции (перечисление идет по часовой стрелке):
• остановить воспроизведение;
• начать воспроизведение следующего фильма из списка (плей-листа);
• извлечь носитель из дисковода (естественно, не работает, если загружен файл с жесткого диска);
• начать воспроизведение предыдущего фильма из списка (плей-листа);
• пауза / продолжить воспроизведение.
Слева из-под круга «выступают» две кнопки, которые позволяют ускорить или замедлить воспроизведение (две аналогичных кнопки справа от круга в текущей версии не работают). Левее круга расположен регулятор громкости звука в виде изображения динамика (или громкоговорителя). Щелчком мыши по этому изображению можно включить или полностью выключить звук (тот же эффект достигается щелчком по уменьшенному изображению динамика, расположенному ниже основного). Плавное изменение громкости производится с помощью щелчков мышкой по горизонтальным полоскам, находящимся левее основного выключателя звука. Ниже этого выключателя находится изображение фотоаппарата, с помощью которого можно получить моментальный снимок экрана, наподобие того, что изображен на рис. 15.39.
В правом верхнем углу панели управления находятся два значка в виде крестиков. Правый из них служит для выхода из программы, а левый (крестик со стрелками) - для переключения между полноэкранным и оконным режимами работы программы. Замечу, что при переключении в полноэкранный режим панель управления и вспомогательные окна остаются на экране. Если они мешают, их можно убрать с экрана (и вернуть на экран при необходимости) с помощью клавиши ‹G›.
В левом нижнем углу панели вы тоже видите два значка. Один из них - выключатель проигрывателя, а второй (сильно уменьшенное изображение гаечного ключа) вызывает окно настроек. У программы масса возможностей по настройке и конфигурации, однако рассматривать их мы не будем. Если вас этот вопрос заинтересует, прочитайте комментарии в файле ~/.xine/config.
И, наконец, ползунок-индикатор в верхней части панели управления позволяет быстро перейти к любой стадии воспроизведения (просто щелкните по горизонтальной черте в нужном месте).
Рис. 15.39. Начинаем просмотр фильма
Мы рассматривали только графическую оболочку программы xine. Между тем, можно запустить xine просто из командной строки, причем в командной строке можно указать дополнительные аргументы. Например, по команде
$ xine --help
вы получите краткую сводку возможных значений аргументов командной строки и список управляющих клавиш. Можно также непосредственно запустить воспроизведение из командной строки, указав источник видео:
$ xine ‹mrl›
где ‹mrl› - указатель медиа-ресурса, т.е. Media Resource Locator. Например, для воспроизведения файла /some/where/foo.vob команда должна иметь вид:
$ xine file://some/where/foo.vob
или просто
$ xine /some/where/foo.vob
Для воспроизведения третьего трека с видео-CD (VCD) надо дать команду:
$ xine vcd://3
а для прямого доступа к DVD - команду типа:
$ xine dvd://VTS_01_1.VOB
И, в заключение, приведу список комбинаций клавиш, с помощью которых можно управлять программой в процессе воспроизведения (вне зависимости от того, каким образом она была запущена), не вызывая на экран панель управления (но при условии, что окно программы является активным):
• ‹Enter› - начать воспроизведение,
• ‹пробел› - пауза,
• ‹стрелка вверх› - ускорить воспроизведение,
• ‹стрелка вниз› - замедлить воспроизведение,
• ‹0› - перейти в начало текущего потока (фильма или мелодии);
• ‹1›-‹9› - перейти в точку, отстоящую на 10-90% от начала текущего потока;
• ‹стрелка влево› - сместиться на 15 секунд назад;
• ‹стрелка вправо› - сместиться на 15 секунд вперед;
• ‹Ctrl›+‹стрелка влево› - сместиться на 60 секунд назад;
• ‹Ctrl›+‹стрелка вправо› - сместиться на 60 секунд вперед;
• ‹PgUp› - перейти к предыдущему пункту в списке фильмов (playlist);
• ‹PgDown› - перейти к следующему пункту в списке фильмов (playlist);
• ‹F› - переключение в полноэкранный режим (и обратно);
• ‹A› - переключение отношения размеров сторон окна просмотра (AUTO/16:9/4:3/DVB);
• ‹I› - переключение в режим черезстрочного вывода (interlaced mode);
• "‹", "›" - увеличить / уменьшить размер окна просмотра;
• ‹+› или ‹-› - переход на следующий / предыдущий аудио-канал, при этом на панели управления изменяется значение указателя “AUD:” (эта опция используется в том случае, когда в источнике записано несколько аудио-потоков, как это иногда бывает на DVD);
• ‹,› ‹.› - сменить канал субтитров (change subtitle channel), при этом на панели управления изменяется значение указателя “SUB:”;
Примечание: Нужно, наверное, сказать, что субтитры бывают записаны в файле видеофильма в виде отдельного потока (подобно аудио). Поток 0 соответствует субтитрам на языке, используемом по умолчанию. Если имеются субтитры на других языках, эта опция позволяет выбрать нужный поток.
• ‹n›, ‹m› - синхронизировать аудио и видео потоки;
• ‹Home› - переустановить синхронизацию аудио и видео потоков;
• ‹G› - скрыть управляющие окна (панель, плей-лист и т.п.);
• ‹H› - скрыть окно просмотра (эта клавиша работает только в том случае, если панель управления отображается на экране); такая возможность бывает полезна при воспроизведении аудио-потоков, например, формата mp3 (а также при неожиданном появлении начальника);
• ‹Q› - выход из программы.
В заключении нужно сказать, что программа Xine (по крайней мере, в том виде, как она поставляется разработчиком), не может воспроизводить зашифрованные DVD-диски. Дело в том, что некоторые производители DVD-дисков с целью увеличения собственной прибыли защищают свои диски с помощью собственных алгоритмов шифрования, так что воспроизводить эти диски можно только на оборудовании (или с использованием программного обеспечения) этих же производителей. Как сообщается в документации к программе Xine, включить в программу код, обеспечивающий возможность воспроизведения таких записей не было бы проблемой. Но это, возможно, стало бы нарушением законодательства некоторых стран (в первую очередь - американского). Поэтому разработчики не обеспечивают такой возможности, хотя и считают использование алгоритмов шифрования нарушением прав потребителей.
Рис. 15.40. Игры из стандартного набора KDE
Одна из самых известных игр, - Doom, созданная компанией id Software, впервые была опубликована в конце 1993 года. В этой игре вы должны пройти сложный лабиринт, сражаясь с фантастическими монстрами, которые стремятся вас "убить". Существуют сетевые версии этой игры. Первоначально выпущенная для MS-DOS, DOOM была затем перенесена на NeXT, SGI, Macintosh-и, Atari Jaguar, MS Windows. Первая версия для Linux была разработана Дэвидом Тейлором (David Taylor). В декабре 1997 г. id Software выпустила DOOM под лицензией GNU General Public License. Вы можете найти версию этой игры под названием LxDoom по адресу http://lxdoom.linuxgames.com/current.html.
Еще в 1995 году была начата разработка проекта FreeCiv - клона популярной игры Civilization. FreeCiv обеспечивала режим коллективной игры через Интернет еще за несколько месяцев до того, как компания Hasbro Interactive включила подобные возможности в свой продукт.
Но самый большой вклад в дело убеждения разработчиков и пользователей в том, что к Linux как к платформе для игр можно относиться серьезно, внесла другая игра - Quake, которая вышла в 1996 году. К 1997 году один из основателей фирмы Id Software Джон Кармак (John Carmack) предложил сообществу разработчиков Quake на условиях лицензии GNU General Public License, а программист Дейв Кирш (Dave Kirsh) из той же компании перенес эту игру на Linux. Сегодня компании используют Quake III для демонстрации новейшей аппаратуры и дистрибутивов Linux. Кармак (и его компания) активно поддерживает идею игр на Linux; он перенес на открытую платформу и Quake III: Arena.
Таким образом, к настоящему времени все типы популярных компьютерных игр доступны в версиях для ОС Linux. Для Linux созданы и аркадные игры, и симуляторы, и стратегии, и "стрелялки", и игры любых других типов. В составе дистрибутивов полного комплекта игр вы, конечно, не найдете. Если у вас есть желание поиграть в такие игры, их надо устанавливать дополнительно, для чего либо купить их, либо скачать из Интернета.
Я закончу свой рассказ об играх ссылками, по которым вы сможете разыскать такую игру, которая вам понравится.
Начните знакомство с миром игр с чтения "Linux Gamers’ HOWTO" (http://www.dirac.org/linux/LG-HOWTO.txt). Русский перевод этого документа сделал Дмитрий Самойлов. Самую свежую версию перевода можно найти по адресу http://linuxgames.hut.ru/data/docs/HOWTO/LG-HOWTO-ru.html.
После этого можно отправиться на сайт http://freshmeat.com, где вы найдете около 300 различных игр. На русскоязычном сайте http://linuxgames.hut.ru имеется база данных по играм, в которой 184 игры, в том числе 143 - свободно распространяемые.
На сайте http://linuxgames.org.ru/games.php3 вы найдете перечень игр под Linux, классифицированных по жанрам, с кратким описанием и ссылками на статьи с более подробными сведениями.
Если вы не нашли нужной игры на этих сайтах, можете заглянуть еще по следующим адресам:
• Linux Games (http://www.linuxgames.com);
• Linux Game Tome (http://happypenguin.org);
• Loki Entertainment Software (http://www.lokigames.com);
• Hyperion Software (http://www.hyperion-software.com);
• Tribsoft (http://www.tribsoft.com/);
• Unreal Tournament (http://www.unrealtournament.com/).
На этом я закончу рассмотрение вопроса о создании под Linux удобной рабочей среды пользователя. Изложение здесь поневоле получилось достаточно поверхностным. Но если сделать описание более подробным, то каждый раздел этой главы превратился бы в целую книгу. Я все же надеюсь, что приведенный мной обзор может служить обоснованием вывода о возможности решения той задачи, которая была сформулирована в начале главы, а именно, о возможности использования Linux для создания удобной пользовательской среды.
| Тип ФС | Назначение |
|---|---|
| minix | Файловая система minix - это первая файловая система, которая использовалась в Linux. Она имела массу недостатков: ограничения размера раздела жесткого диска 64 мегабайтами; длина имени файла была ограничена 30 символами и т. д. Она продолжает использоваться для дискет и RAM-дисков |
| extfs | Еще одна из ранних версий файловой системы для Linux, расширение файловой системы minix. В настоящее время заменена файловой системой ext2 и уже не используются |
| ext2fs | Вторая расширенная файловая система (second extended filesystem) была создана как расширение файловой системы extfs. ext2fs обеспечивает более высокую производительность (в части скорости и использования центрального процессора), поддерживаются длинные имена и большие размеры файлов |
| xiaf | Файловая система Xiaf была создана на основе minix с целью обеспечения большей устойчивости и безопасности. Она обеспечивает выполнение основных функций файловой системы без излишней сложности |
| msdos | Файловая система, используемая для разделов, сформатированных в MS-DOS и Windows. Имена файлов в msdos должны удовлетворять стандарту 8.3 |
| umsdos | Файловая система UMS-DOS является расширением файловой системы DOS, используемым под Linux. В ней добавлено использование длинных имен файлов, идентификаторы пользователя и группы (UID/GID), разрешения в стиле POSIX и специальные файлы (устройства, именованные каналы и т. д.) при этом совместимость с DOS не потеряна |
| hpfs | Файловая система для разделов OS/2. В Linux обеспечивается только чтение из разделов hpfs |
| proc | Это файловая система, которая используется для обращения к структурам данных ядра. Файлы этой системы не занимают дискового пространства. Подробнее см. страницу man proc(5) |
| nfs | Сетевая файловая система, используемая для доступа к дискам, расположенным на удаленных компьютерах |
| swap | Раздел или файл свопинга OC Linux |
| sysv | Файловая система Unix System V. Она поддерживает файловые системы Xenix FS, SystemV/386 FS и Coherent FS |
| iso9660 | Файловая система для монтирования CD-ROM, соответствующая стандарту ISO 9660 |
| vfat | Файловая система FAT-32. Поддерживаются длинные имена файлов |
| smb | Это сетевая файловая система, которая поддерживает протокол SMB, используемый Windows, Windows NT и Lan Manager. Для того, чтобы использовать эту файловую систему, надо иметь специальную программу монтирования smbmount |
| ncpfs | Это сетевая файловая система, обеспечивающая поддержку протокола NCP, применяемого в Novell NetWare. Для того, чтобы использовать эту файловую систему, надо тоже иметь специальную программу, которую можно найти на сайте ftp://linux01.gwdg.de/pub/ncpfs |
| Загрузочная запись | Группа блоков 1 | Группа Блоков 2 | … | Группа блоков n |
| Суперблок | Описание группы блоков (Group Descriptors) | Битовая карта блоков (Block Bitmap) | Битовая карта индексных дескрипторов (Inode Bitmap) | Таблица индексных дескрипторов(Inode Table) | Область блоков данных |
| Название поля | Тип | Комментарий |
|---|---|---|
| s_inodes_count | ULONG | Число индексных дескрипторов в файловой системе |
| s_blocks_count | ULONG | Число блоков в файловой системе |
| s_r_blocks_count | ULONG | Число блоков, зарезервированных для суперпользователя |
| s_free_blocks_count | ULONG | Счетчик числа свободных блоков |
| s_free_inodes_count | ULONG | Счетчик числа свободных индексных дескрипторов |
| s_first_data_block | ULONG | Первый блок, который содержит данные. В зависимости от размера блока, это поле может быть равно 0 или 1 |
| s_log_block_size | ULONG | Индикатор размера логического блока: 0 = 1 Кб; 1 = 2 Кб; 2 = 4 Кб |
| s_log_frag_size | LONG | Индикатор размера фрагментов (кажется, понятие фрагмента в настоящее время не используется) |
| s_blocks_per_group | ULONG | Число блоков в каждой группе блоков |
| s_frags_per_group | ULONG | Число фрагментов в каждой группе блоков |
| s_inodes_per_group | ULONG | Число индексных дескрипторов (inodes) в каждой группе блоков |
| s_mtime | ULONG | Время, когда в последний раз была смонтирована файловая система. |
| s_wtime | ULONG | Время, когда в последний раз производилась запись в файловую систему |
| s_mnt_count | USHORT | Счетчик числа монтирований файловой системы. Если этот счетчик достигает значения, указанного в следующем поле (s_max_mnt_count), файловая система должна быть проверена (это делается при перезапуске), а счетчик обнуляется. |
| s_max_mnt_count | SHORT | Число, определяющее, сколько раз может быть смонтирована файловая система |
| s_magic | USHORT | "Магическое число" (0xEF53), указывающее, что файловая система принадлежит к типу ex2fs |
| s_state | USHORT | Флаги, указывающее текущее состояние файловой системы (является ли она чистой (clean) и т.п.) |
| s_errors | USHORT | Флаги, задающие процедуры обработки сообщений об ошибках (что делать, если найдены ошибки). |
| s_pad | USHORT | Заполнение |
| s_lastcheck | ULONG | Время последней проверки файловой системы |
| s_checkinterval | ULONG | Максимальный период времени между проверками файловой системы |
| s_creator_os | ULONG | Указание на тип ОС, в которой создана файловая система |
| s_rev_level | ULONG | Версия (revision level) файловой системы. |
| s_reserved | ULONG[235] | Заполнение до 1024 байт |
| Название поля | Тип | Назначение |
|---|---|---|
| bg_block_bitmap | ULONG | Адрес блока, содержащего битовую карту блоков (block bitmap) данной группы |
| bg_inode_bitmap | ULONG | Адрес блока, содержащего битовую карту индексных дескрипторов (inode bitmap) данной группы |
| bg_inode_table | ULONG | Адрес блока, содержащего таблицу индексных дескрипторов (inode table) данной группы |
| bg_free_blocks_count | USHORT | Счетчик числа свободных блоков в данной группе |
| bg_free_inodes_count | USHORT | Число свободных индексных дескрипторов в данной группе |
| bg_used_dirs_count | USHORT | Число индексных дескрипторов в данной группе, которые являются каталогами |
| bg_pad | USHORT | Заполнение |
| bg_reserved | ULONG[3] | Заполнение |
| Название поля | Тип | Описание |
|---|---|---|
| i_mode | USHORT | Тип и права доступа к данному файлу |
| i_uid | USHORT | Идентификатор владельца файла (Owner Uid) |
| i_size | ULONG | Размер файла в байтах |
| i_atime | ULONG | Время последнего обращения к файлу (Access time) |
| i_ctime | ULONG | Время создания файла |
| i_mtime | ULONG | Время последней модификации файла |
| i_dtime | ULONG | Время удаления файла |
| i_gid | USHORT | Идентификатор группы (GID) |
| i_link_scount | USHORT | Счетчик числа связей (Links count) |
| i_blocks | ULONG | Число блоков, занимаемых файлом |
| i_flags | ULONG | Флаги файла (File flags) |
| i_reserved1 | ULONG | Зарезервировано для ОС |
| i_block | ULONG[15] | Указатели на блоки, в которых записаны данные файла (это поле подробно описано в разд. 16.4) |
| i_version | ULONG | Версия файла (для NFS) |
| i_file_acl | ULONG | ACL файла |
| i_dir_acl | ULONG | ACL каталога |
| i_faddr | ULONG | Адрес фрагмента (Fragment address) |
| i_frag | UCHAR | Номер фрагмента (Fragment number) |
| i_fsize | UCHAR | Размер фрагмента (Fragment size) |
| i_pad1 | USHORT | Заполнение |
| i_reserved2 | ULONG[2] | Зарезервировано |
| Идентификатор | Значение | Назначение флага (поля) |
|---|---|---|
| S_IFMT | F000 | Маска для типа файла |
| S_IFSOCK | A000 | Доменное гнездо (socket) |
| S_IFLNK | C000 | Символическая ссылка |
| S_IFREG | 8000 | Обычный (regular) файл |
| S_IFBLK | 6000 | Блок-ориентированное устройство |
| S_IFDIR | 4000 | Каталог |
| S_IFCHR | 2000 | Байт-ориентированное (символьное) устройство |
| S_IFIFO | 1000 | Именованный канал (fifo) |
| S_ISUID | 0800 | SUID - бит смены владельца |
| S_ISGID | 0400 | SGID - бит смены группы |
| S_ISVTX | 0200 | Бит сохранения задачи (sticky bit) |
| S_IRWXU | 01C0 | Маска прав владельца файла |
| S_IRUSR | 0100 | Право на чтение |
| S_IWUSR | 0080 | Право на запись |
| S_IXUSR | 0040 | Право на выполнение |
| S_IRWXG | 0038 | Маска прав группы |
| S_IRGRP | 0020 | Право на чтение |
| S_IWGRP | 0010 | Право на запись |
| S_IXGRP | 0008 | Право на выполнение |
| S_IRWXO | 0007 | Маска прав остальных пользователей |
| S_IROTH | 0004 | Право на чтение |
| S_IWOTH | 0002 | Право на запись |
| S_IXOTH | 0001 | Право на выполнение |
| Идентификатор | Значение | Описание |
|---|---|---|
| EXT2_BAD_INO | 1 | Индексный дескриптор, в котором перечислены адреса дефектных блоков на диске (Bad blocks inode) |
| EXT2_ROOT_INO | 2 | Индексный дескриптор корневого каталога файловой системы (Root inode) |
| EXT2_ACL_IDX_INO | 3 | ACL inode |
| EXT2_ACL_DATA_INO | 4 | ACL inode |
| EXT2_BOOT_LOADER_INO | 5 | Индексный дескриптор загрузчика (Boot loader inode) |
| EXT2_UNDEL_DIR_INO | 6 | Индексный дескриптор каталога для удаленных файлов (Undelete directory inode) |
| EXT2_FIRST_INO | 11 | Первый незарезервированный индексный дескриптор |
| Название поля | Тип | Описание |
|---|---|---|
| Inode | ULONG | Номер индексного дескриптора (индекс) файла |
| Rec_len | USHORT | Длина этой записи |
| Name_len | USHORT | Длина имени файла |
| Name | CHAR[0] | Имя файла |
| Размер блока | Максим. размер файловой системы | Максим. размер файла | |
|---|---|---|---|
| Ext3FS | 1-4 Кбайт | 4 Tбайт | 2 Гбайт |
| XFS | от 512 байт до 64 Кбайт | 18 тысяч петабайт | 9 тысяч петабайт |
| JFS | 512, 1024, 2048, 4096 байт | от 4 петабайт (при 512-байтных блоках) до 32 петабайт (при 4-килобайтовых блоках) | От 512 Тбайт (при 512-байтовых блоках) До 4 петабайт (при 4-килобайтовых блоках) |
| ReiserFS | До 64 Кбайт (пока что фиксирован, 4 Кбайт) | 4 Гбайт блоков, 16 Тбайт | 4 Гбайт, 210 петабайт в ReiserFS (3.6.xx) |
[root]# rpm -i kernel-2.2.16-1.i386.rpm
По этой команде программа rpm установит в каталог /boot четыре файла: System.map-x.y.z-a, vmlinux-x.y.z-a, vmlinuz-x.y.z-a и module-info-x.y.z-a (где x.y.z-a - это номер версии нового ядра), создаст каталог /lib/modules/x.y.z-a, в котором разместит модули нового ядра, а также установит скрипт /sbin/installkernel.
Если у вас есть такое желание, вы можете предварительно (или потом) выполнить команду
[root]# rpm -qpl kernel-2.2.16-1.i386.rpm,
которая выдаст полный список устанавливаемых из пакета файлов. Выполнение этих команд еще ничего не меняет в системе, только подготавливает файлы для запуска нового ядра.
Я после установки пакета с ядром решился сразу запустить скрипт /sbin/installkernel. Скрипт завис, его пришлось снимать комбинацией клавиш ‹Ctrl›+‹C›. Тогда я стал разбираться с тем, что делает этот скрипт. Вот его полный текст:
#------------------- начало скрипта ------------------
#! /bin/sh
# /sbin/installkernel — written by tyson@rwii.com
#
INSTALL_PATH=/boot
KERNEL_VERSION=$1
BOOTIMAGE=$2
MAPFILE=$3
if [ -f $INSTALL_PATH/vmlinuz-$KERNEL_VERSION ]; then
mv $INSTALL_PATH/vmlinuz-$KERNEL_VERSION \
$INSTALL_PATH/vmlinuz.old;
fi
if [ -f $INSTALL_PATH/System.map-$KERNEL_VERSION ]; then
mv $INSTALL_PATH/System.map-$KERNEL_VERSION \
$INSTALL_PATH/System.map.old;
fi
cat $BOOTIMAGE > $INSTALL_PATH/vmlinuz-$KERNEL_VERSION
cp $MAPFILE $INSTALL_PATH/System.map-$KERNEL_VERSION
ln -fs vmlinuz-$KERNEL_VERSION $INSTALL_PATH/vmlinuz
ln -fs System.map-$KERNEL_VERSION $INSTALL_PATH/System.map
if [ -x /sbin/lilo ]; then /sbin/lilo; else /etc/lilo/install; fi
#------------------- конец скрипта ------------------
Как видите, скрипту требуются некоторые параметры, а я запускал его без аргументов. Однако, поскольку программа rpm уже разместила в /boot файлы vmlinux-2.2.16-1, vmlinuz-2.2.16-1 и System.map-2.2.16-1, а также создала ссылки с именами vmlinuz и System.map, я решил, что осталось только перезапустить lilo. Но прежде чем запускать lilo, я подредактировал файл /etc/lilo.conf, добавив туда секцию с указанием на ядро 2.2.16 (просто скопировал секцию с меткой linux, после чего подправил строки image и label). Причем новую секцию поставил первой. Вот что у меня получилось (добавленные мной строки выделены жирным шрифтом):
#------------------- начало файла /etc/lilo.conf -----------
boot=/dev/hdb1
map=/boot/map
install=/boot/boot.b
prompt
timeout=50
image=/boot/vmlinuz-2.2.16-1
label=linux-2.2.16
root=/dev/hdb1
read-only
image=/boot/vmlinuz-2.2.11-4bc
label=linux
root=/dev/hdb1
read-only
other=/dev/hda1
label=dos
table=/dev/hda
#------------------- конец файла /etc/lilo.conf ------------
Обратите внимание на то, что в данном случае Linux грузится со второго диска, поскольку на первом диске стоит Windows NT, и в качестве загрузчика используется NT Loader.
После этого я запустил команду /sbin/lilo, причем вначале с параметрами -t -v, чтобы посмотреть, что она будет делать, а только потом уже - без параметров, для реального исполнения. Когда команда отработала, я перезагрузился, однако на этапе загрузки система зависла, выведя строку LIL-. Пришлось воспользоваться загрузочной дискетой (заготовленной еще при установке системы) и выполнить команду
[root]# dd if=/dev/hdb1 of=/mnt/hda1/bootsect.lnx bs=512 count=1
Все правильно, команда lilo меняет загрузочный сектор, а я забыл "подсунуть" загрузчику его обновленный вариант.
Еще раз перезагружаюсь, и с радостью вижу сообщение о том, что загрузилось ядро 2.2.16-1.
Если у вас LILO является основным загрузчиком (установлен в MBR первого диска), то последнюю операцию (копирование загрузочного сектора в файл) выполнять, конечно, не нужно.
[root]# bzip2 -d linux-2.4.XX.tar.gz | tar xvf -
(где "XX" надо заменить на номер версии ядра, у меня была просто 2). Если вы скачали архив, сжатый программой gzip, то, естественно, команда будет иметь вид:
[root]# gunzip linux-2.4.XX.tar.gz | tar xvf -
Можно также воспользоваться следующим вариантом команды:
[root]# tar xvzf linux-2.4.2.tar.gz
В результате в текущем каталоге появится новая директория linux. Сделайте ее текущей с помощью команды cd. 17.5.2. Обновление программного обеспечения
Если вы владеете английским, то неплохо просмотреть файл README в каталоге linux и файлы Changes и Configure.help в подкаталоге linux/Documentation. Впрочем, тем кто не владеет английским, тоже необходимо заглянуть по крайней мере в файл linux/Documentation/Changes. Дело в том, что в этом файле приведен состав программного обеспечения, необходимого для компиляции нового ядра.
В приводимой ниже табл. 17.1 показан его состав для случая ядра 2.4.2.
Таблица 17.1. ПО, необходимое для компиляции нового ядра
| Программа | Версия | Как определить версию |
|---|---|---|
| Gnu C | 2.91.66 | gcc --version |
| Gnu make | 3.77 | make --version |
| Binutils | 2.9.1.0.25 | ld -v |
| util-linux | 2.10o | fdformat --version |
| Modutils | 2.4.2 | /sbin/insmod -V |
| e2fsprogs | 1.19 | /sbin/tune2fs |
| Reiserfsprogs | 3.x.0b | reiserfsck 2›&1|grep reiserfsprogs |
| pcmcia-cs | 3.1.21 | cardmgr -V |
| PPP | 2.4.0 | pppd --version |
| isdn4k-utils | 3.1pre1 | isdnctrl 2›&1|grep version |
Рис. 17.1. Основное меню программы make xconfig
Рис. 17.2. Меню General setup
Как видите, здесь можно просто выбрать один из трех вариантов "y", "n" и "m" (если какой-то из вариантов недоступен, то и возможности его выбрать нет) или получить подсказку по отдельному параметру (кнопка Help). Поскольку число параметров в этой группе велико, справа имеется полоса прокрутки.
Впрочем, мне не кажется, что конфигурировать ядро, используя графический интерфейс, проще, чем с помощью команды make config. Так или иначе, надо продумать и дать ответ на вопрос о каждом параметре конфигурации. Так что, может быть, лучше уж не торопиться и последовательно отвечать на вопросы, задаваемые make config? А иначе (в графическом режиме, я имею в виду) возникает шанс сбиться с пути и пропустить какую-то из кнопок. С другой стороны, преимуществом графического режима является возможность вернуться к какому-то из уже пройденных этапов и изменить ранее заданные значения тех или иных параметров. Кроме того, в каждом из окон имеется кнопка Next, пользуясь которой можно последовательно пройти все этапы конфигурации.
В общем, представление о вариантах осуществления шага конфигурации вы получили, а решать Вам. Отмечу только, что воспользоваться командой make menuconfig вы сможете только при условии, что у вас в системе установлена библиотека ncurses и пакет ncurses-devel.
Я думаю, что сказанного достаточно для того, чтобы вы смогли сконфигурировать ядро, поэтому переходим к дальнейшим шагам.
Root device is (3,5)
Boot sector 512 bytes.
Setup is 2360 bytes.
System is 887 kB make[1]: Выход из каталог '/opt/kernel/2.4.2/linux/arch/i386/boot'
И в текущем каталоге должны появиться файлы System.map и vmlinux. Кроме того, в подкаталогах каталога linux тоже появляется масса новых файлов (в том числе и .o-файлы, которые упоминались выше, как мешающие повторному проведению компиляции ядра в том же каталоге).
На этом собственно компиляция ядра и заканчивается. В дополнение приведу еще три замечания из документации к ядру.
• Если в качестве загрузчика вы используете LILO, то после компиляции можно выполнить команду make install, однако рекомендуется вначале проверить (и подкорректировать) конфигурационный файл LILO.
• Хотя такое событие и очень маловероятно, но если ваша система не может загружать ядро в формате bzImage, вы можете скомпилировать его как zImage. Однако, надо иметь в виду, что поддержка zImage будет в ближайшем будущем отменена, поэтому разработчики предлагают тем, у кого возникнут проблемы с загрузкой ядра в формате bzImage сообщить об этом (приложив детальное описание конфигурации) в список рассылки linux-kernel и Питеру Анвину (H.Peter Anvin, hpa+linux@zytor.com).
• И, наконец, если вы вдруг захотите создать загрузочный диск (без корневой файловой системы или LILO), вставьте дискету в дисковод A: и дайте команду make bzdisk.
boot = /dev/hda2
compact
delay = 50
root = current
image = /boot/vmlinuz-2.2.11-4bc
label = linux
read-only
other = /dev/hda1
table = /dev/hda
label = dos
Начиная со строки image, идут секции конфигурационного файла, соответствующие разным операционным системам, которые должны загружаться по выбору пользователя. В каждой такой секции имеется строка label. В этой строке записывается имя, которое вводится в ответ на приглашение LILO и служит для выбора пользователем загружаемой ОС.
Скопируйте секцию image и замените в новой секции название образа ядра и метку. Файл /etc/lilo.conf примет следующий вид:
boot = /dev/hda2
compact
delay = 50
root = current
image = /boot/vmlinuz-2.2.11-4bc
label = linux
read-only
image = /boot/vmlinuz-2.4.2
label = linux-2.4.2
read-only
other = /dev/hda1
table = /dev/hda
label = dos
После того, как вы откорректировали файл /etc/lilo.conf, необходимо выполнить команду /sbin/lilo, чтобы изменения вступили в силу. Эта команда (которая в руководстве называется map-installer) обновляет карту загрузки системы. Прежде, чем запускать /sbin/lilo для модификации загрузочных процедур, выполните эту команду с параметром -t. При этом будет выполнена вся процедура инсталляции загрузчика, кроме изменения map-файла и записи модифицированного загрузочного сектора, т. е. выполнен тест нового варианта. Если добавить еще опцию -v, это позволит убедиться в том, что сделанные Вами изменения разумны.
Не стоит полностью убирать возможность загрузки предыдущей, работающей версии ядра, тем более, что это никак не мешает загрузке нового ядра, ведь LILO обеспечивает многовариантную загрузку.
Все! После переустановки LILO командами
[root]# /sbin/lilo -t -v
[root]# /sbin/lilo
Вы можете перезагрузить компьютер и выбрать при загрузке новое ядро.
Рис. 18.1. Windows NT 4.0, запущенная на виртуальном компьютере с базовой ОС Linux
Виртуальный компьютер "строится" из следующего набора виртуальных устройств:
• виртуальные IDE и SCSI жесткие диски;
• виртуальный CD-ROM;
• стандартный дисковод гибких дисков;
• контроллер жестких IDE-дисков Intel 82371 PCI Bus Master, поддерживающий два первичных (primary) и два вторичных (secondary) IDE-диска;
• адаптер SCSI-дисков, совместимый с BusLogic BT-958;
• стандартный PCI графический адаптер, стандартная 101/102-клавишная клавиатура, PS/2-совместимая мышь;
• сетевая карта AMD PCNET Family Ethernet adapter (PCI-ISA);
• последовательные порты COM1-COM4, параллельные порты LPT1-LPT2;
• звуковая карта, совместимая с Sound Blaster 16.
Этот набор виртуальных устройств отличается от набора устройств реального компьютера, на котором запускается виртуальная машина (за исключением некоторых устройств, например, процессора и клавиатуры), и не зависит от последнего. Если операционная система устанавливается непосредственно внутри виртуального компьютера, то в процессе установки все эти устройства определяются корректно. При "включении питания" виртуального компьютера (что делается с помощью специальной кнопки Power On/Off в меню программы-эмулятора), видно, как BIOS осуществляет тестирование "аппаратной части" и даже, как и на физическом компьютере, можно войти в программу Setup, чтобы задать или изменить настройки BIOS. На виртуальный компьютер можно установить любую операционную систему и работать с ней обычным образом.
Естественно, что две ОС, одновременно работающие на одном физическом компьютере, так или иначе борются за реальные ресурсы базового компьютера, а поэтому требования к нему достаточно высоки. Фирма-разработчик формулирует эти требования следующим образом:
• Pentium II 266MHz или выше, с ОЗУ как минимум 64 Mбайт;
• видео-адаптер, поддерживаемый сервером XFree86 (для получения всех преимуществ полноэкранного режима);
• в качестве базовой операционной системы может использоваться ОС Linux с ядром 2.0.32 или выше, библиотекой glibc версии от glibc2 до glibc6 (с glibc1 не работает), для SMP-систем ядро должно быть версии 2.2.0 или выше;
• для VMware необходим X-сервер, причем рекомендуется XFree86-3.3.4 или выше.
rpm -Uhv vmware-x.y.z-nnn.i386.rpm
(где vmware-x.y.z-nnn.i386.rpm - имя файла, который вы скачали).
3. Запускаем конфигурационный скрипт /usr/bin/vmware-config.pl.
Замечание.
Этот скрипт можно будет использовать для того, чтобы заново сконфигурировать VMware каждый раз, когда происходит замена или обновление ядра. Переустанавливать VMware при этом нет необходимости. При выполнении скрипта на экране появляется ряд вопросов, некоторые ответы на которые можно найти в [П20.4, П20.5]. Отмечу только два момента. Первый момент касается используемого ядра. Я натолкнулся на это затруднение, когда ставил VMware на систему с ядром 2.2.16. К сожалению, в этой версии ядра имеется какая-то особенность, препятствующая нормальной работе системы виртуальных машин, поэтому пришлось поменять ядро на более позднюю версию. Однако если вы установите новое ядро не из исходных текстов, а из rpm-пакета (при инсталляции Linux из дистрибутива Red Hat и его клонов тоже происходит установка ядра из такого пакета), то в системе может не оказаться файлов заголовков ядра. А один из вопросов, задаваемых скриптом /usr/bin/vmware-config.pl, касается местонахождения файлов заголовков, соответствующих запущенной версии ядра. Необходимые файлы можно установить (переключившись во второй терминал) из пакета kernel-headers-x.y.z.i386.rpm (соответствующей установленному у вас ядру) и указать правильный путь к ним (этот путь можно узнать, просмотрев вывод команды rpm -qpl kernel-headers-x.y.z.i386.rpm).
4. После завершения работы скрипта можно покинуть shell, запущенный от имени root.
Инсталляция собственно системы виртуальных машин завершена, однако надо еще установить лицензию, создать собственно виртуальный компьютер, установить на нем ОС и пакет VMware Tools.
Рис. 18.2. Окно редактора конфигурации
Надо иметь в виду, что нельзя устанавливать второй диск (Slave), если не установлен первый диск (Master) на соответствующем канале контроллера (P-S не устанавливают до P-M, а S-S, соответственно, до S-M). Если не соблюсти это правило, то виртуальная машина не сможет загружаться с заданного таким образом диска. Обычно используют первую позицию, P-M (primary master), для подключения жесткого диска и третью позицию, S-M (secondary master), для диска CD-ROM. Возле надписи "Device Type" находится список выбора типа диска: виртуальный диск, плоский диск (plain disk), реальный диск (raw disk) и CD-ROM. Виртуальный диск (Virtual disk) - это файл в файловой системе базового компьютера, который для ОС виртуальной машины выглядит как реальный физический диск. Этот файл может располагаться как на диске базового компьютера, так и на удаленной файловой системе. Если создается виртуальная машина с виртуальным жестким диском, то можно установить на нее новую ОС без переразбиения физического диска и даже без перезагрузки базового компьютера. Плоский диск (plain disk) подобен виртуальному, но может иметь размеры более 2Гбайт. Он компонуется из нескольких файлов - экстентов (extents), размером не более 2 Гбайт. В отличие от виртуальных дисков при создании плоского диска все отводимое под такой диск пространство сразу занимается и заполняется нулями. Реальный диск (Raw disk) - это жесткий диск или раздел жесткого диска базового компьютера, к которому получает прямой доступ виртуальная машина. При подключении такого диска становится возможным загрузить в виртуальной машине операционную систему, ранее установленную в один из разделов базового компьютера (при условии, что этот раздел находится на локальном IDE или SCSI диске).
После выбора типа диска надо выбрать один из трех возможных режимов его работы: persistent, nonpersisten, undouble.
В режиме "с записью" ("Persistent") все операции записи немедленно производятся на реальный диск (или в файл, моделирующий реальный диск).
В режиме "без записи" ("Nonpersistent") записи на диск, осуществляемые виртуальным компьютером, выглядят как операции записи на реальный диск, но фактически запись данных на физический диск не производится, и данные теряются по завершении сессии работы на виртуальном компьютере (когда "выключается питание" виртуального компьютера или производится перезагрузка ОС). В этом режиме VMware только читает с реального диска, а операции записи в течение сессии производятся во временный файл (redo log file), который уничтожается при завершении сессии. Все блоки данных, которые были модифицированы и записаны в файл.redo, при повторном обращении к ним считываются уже из этого файла, а не с реального диска. По завершению сессии файл уничтожается. Файл.redo располагается в том же каталоге, где по умолчанию располагаются файлы виртуальных дисков, однако его местоположение можно изменить, воспользовавшись командой Misc в меню редактора конфигурации. Режим "без записи" удобен, когда требуется запускать виртуальный компьютер из одного и того же состояния, например при тестировании разрабатываемого или для демонстраций нового ПО. В этом режиме могут работать все типы дисков.
Режим "с отложенной записью" ("Undoable") очень похож на режим "без записи" в том смысле, что все операции записи на диск, осуществляемые виртуальным компьютером, фактически производятся во временный файл (.redo) на реальном диске. Но при отключении питания виртуального компьютера, пользователю предлагается на выбор три возможности: записать все изменения на реальный диск; отказаться от изменений, возвращая диск к его исходному состоянию; запомнить изменения, чтобы в следующей сессии начать работу с того состояния, в котором закончена работа в предыдущем сеансе (сохранить redo-файл). Режим полезен, когда надо поэкспериментировать с установкой нового ПО или выполнением некоторых административных функций, что может вызвать проблемы в работе компьютера. Если сохранить файл redo, то при следующем запуске ВМ будет предложено либо восстановить все изменения, сделанные в ходе предыдущей сессии, либо отказаться от них, либо отключить ВМ.
Если вы только начинаете осваивать систему VMware, то оптимальным вариантом из числа рассмотренных является, на мой взгляд, подключение виртуального диска в режиме "Persistent".
После установки типа диска и режима записи, введите в поле "Name" имя файла, которое будет использоваться для данного виртуального диска и укажите размер виртуального диска (если это просто виртуальный диск, то его объем не может быть больше 2 Гбайт). Первоначально файл виртуального диска имеет объем не более 1 Мбайт, и его размер возрастает только по мере установки программного обеспечения на виртуальную машину. После задания всех параметров виртуального диска щелкните по экранной клавише "Install".
SCSI-диски устанавливаются вполне аналогично IDE-дискам.
Установка CD-ROM еще проще, чем жесткого диска. Тут надо задать только один параметр - имя устройства. Можно еще определить, подключать ли CD-ROM автоматически при запуске виртуальной машины. Для подключения дисковода гибких дисков надо выбрать тип: устройство (Device) или файл (File), и задать или выбрать имя устройства (например, /dev/fd0 или /dev/fd1), определив, будет ли дисковод подключаться автоматически. Необходимо иметь в виду, что физический floppy-дисковод не может использоваться одновременно операционными системами двух (и более) виртуальных машин или виртуальным и базовым компьютером. В процессе работы с виртуальной машиной можно в любой момент отключить дисковод, воспользовавшись командой "Devices" главного меню. И, наоборот, можно подключить дисковод через ту же команду меню, освободив его предварительно в других ВМ и в базовом компьютере. На базовом компьютере для этого надо размонтировать диск (в Linux) или переключиться на какие-то каталоги других дисков во всех запущенных программах (если на базовом компьютере запущена Windows).
Следующим шагом по идее должна быть установка сетевой карты, но пока этот этап пропустим, поскольку, как и в реальном компьютере, подключиться к сети можно и позже. То же самое можно сказать про подключение последовательных и параллельных портов и звуковой карты. А вот подключить мышь и выделить виртуальной машине оперативную память просто необходимо. Система VMware позволяет пользователям задавать как объем оперативной памяти, выделяемой каждому виртуальному компьютеру, так и общее количество ОП, зарезервированное для использования виртуальными машинами. Правильная настройка этих параметров очень важна, поскольку может существенно повлиять на производительность как виртуального компьютера, так и системы в целом. Количество памяти, выделяемое всем виртуальным машинам, задается через меню Settings системы VMware. При работе с редактором конфигурации можно определить только количество ОП, выделенной данной виртуальной машине. Для начала, пока у вас всего одна виртуальная машина, выделите ей половину оперативной памяти базового компьютера.
Остается только выбрать операционную систему и задать значения некоторых дополнительных параметров (команда Misc). Для первого раза проще всего согласиться с тем вариантом, который задается по умолчанию. Единственный из этих дополнительных параметров, значение которого нужно ввести, это путь к файлу .redo, и то только в том случае, когда необходим режим работы "с отложенной записью".
После создания виртуальной машины, необходимо сохранить ее конфигурацию в файле, для чего щелкнуть по экранной кнопке Save и ввести имя конфигурационного файла.
Поскольку на созданный таким образом виртуальный компьютер еще не установлена ОС, переходим к ее установке. Процедура установки ОС - обычная (разве что потребуется войти в BIOS виртуального компьютера и установить возможность загрузки с CD-ROM): вставляется загрузочный CD-ROM в дисковод и запускается виртуальный компьютер.
Сразу же после первого запуска ОС на виртуальной машине просто необходимо установить дополнительные компоненты для ОС, которые называются VMware Tools и включают в себя некоторые дополнительные драйверы, в частности драйвер SVGA. Хотя система VMware способна работать и без него, однако из графических режимов на виртуальной машине будет доступен только режим VGA (640 х 480, 16 цветов). Если же установить драйвер SVGA из VMware Tools, то будут поддерживаться высокие разрешения дисплея и глубина цвета до 32 бит, причем повысится и быстродействие графической подсистемы.
Для установки VMware Tools после запуска ОС на виртуальном компьютере передайте управление базовой ОС (комбинацией клавиш ‹Ctrl›+‹Alt›+‹Esc›) и выберите команду меню Settings | VMware Tools Install программы VMware. Вы увидите сообщение о том, что конфигурация виртуальной машины временно изменена для установки VMware Tools. Изменение конфигурации виртуальной машины заключается в том, что вместо диска A: подключается образ дискеты, содержащий необходимые для установки VMware Tools файлы. Запустите с этой виртуальной дискеты программу VMwareTools.exe (из подкаталога, соответствующего установленной Вами ОС). В процессе инсталляции программа установки предупреждает, что будет запущена утилита изменения установок видеоадаптера, с чем нужно согласиться, после чего остается только нажать кнопку Finish. Инструкции по конфигурации видео-драйвера даются в открывающемся автоматически окне программы Notepad. После того, как откроется окно свойств экрана, доберитесь до вкладки Адаптер, щелкните по кнопке Изменить и выберите вариант "Установить с диска" (остальное понятно из рис. 18.3).
Рис. 18.3. Установка драйвера SVGA
Рис. 18.4. Окно выбора конфигурации
Поскольку у вас пока создан только один виртуальный компьютер, то достаточно подсветить строку с именем единственного конфигурационного файла, а затем надо "включить питание" кнопкой Power On главного окна программы VMware.
Дальше все будет происходить так, как и при загрузке выбранной ОС на обычном компьютере. В частности, если есть желание посмотреть или изменить установки BIOS виртуального компьютера, то надо успеть вовремя нажать клавишу ‹F2›, чтобы попасть в меню BIOS.
Первое, о чем надо помнить при работе с виртуальной машиной - это способ выхода из окна виртуальной машины комбинацией клавиш ‹Ctrl›+‹Alt›+‹Esc›, что особенно полезно при работе в полноэкранном режиме ВМ. В этот режим можно переключиться с помощью кнопки Full Screen на панели VMware. В этом случае будет полная иллюзия того, что физический компьютер работает под управлением Windows и только "волшебная" комбинация клавиш ‹Ctrl›+‹Alt›+‹Esc› может вернуть вас к действительности.
Следующим этапом работы на "новом компьютере" будет установка необходимого ПО внутри виртуальной машины, которая осуществляется точно так же, как и на обычном компьютере.
Запустите виртуальную машину. На всякий случай проверьте, что виртуальная машина имеет доступ к дисководу CD-ROM или дисководу гибких дисков (в зависимости от того, какой из них потребуется в процессе инсталляции). Для этого можно воспользоваться командой Devices главного меню системы VMware.
Вставьте установочный диск в соответствующий дисковод и запустите программу установки. Как это сделать, я здесь не буду объяснять, надеюсь, что вы имеете некоторые навыки работы с той операционной системой, которую собираетесь запускать на ВМ.
После инсталляции ОС я установил на своем виртуальном компьютере MS Office и еще ряд программ, с которыми привык работать в старой системе. Сделайте то же самое и начинайте работать!
Рис. 18.5. Виртуальная машина приостановлена
Для возврата в состояние до приостановки:
1. Запустить VMware и выбрать ту виртуальную машину, работу которой приостановили.
6. Щелкнуть по кнопке Resume на панели VMware.
Все приложения, с которыми вы работали в момент приостановки ВМ, снова запустятся, причем окажутся в том самом состоянии, какое было в момент остановки.
DEVICE /dev/hda
# Partition type: MBR
RDONLY 0 62
# Partition type: HPFS/NTFS
ACCESS 63 8193149
# Partition type: Linux swap
NO_ACCESS 8193150 8466254
Как видите, этот файл содержит информацию о разделах диска, типе файловой системы в каждом разделе (правда, только в строке комментария) и правах доступа к разделу. Эту информацию можно представить в виде табл. 18.1.
Таблица 18.1. Информация из файла описания диска
| Тип раздела | Размещение (сектора) | Access Rights |
|---|---|---|
| Загрузочная запись | С 0 по 62 включительно | Read-Only |
| NTFS или FAT | С 63 по 8193149 включительно | Read-Write |
| Linux swap | С 8193150 по 8466254 включительно | Нет доступа |
Рис. 18.6. Выбор профиля оборудования для виртуального компьютера
12. Только для Windows 2000: После того, как вы запустите Windows 2000 (в качестве ОС на виртуальном компьютере) вы увидите диалоговое окно Найдено новое оборудование (Found New Hardware), в котором предлагается установить новый драйвер для видео-контроллера. Этого делать не нужно. Щелкните по кнопке Отмена (Cancel) для того, чтобы закрыть диалоговое окно и откажитесь от предлагаемой перезагрузки компьютера. Windows 2000 автоматически обнаружит и установит драйвер для сетевой карты AMD PCnet PCI Ethernet. После этого вы должны установить пакет VMware Tools для Windows (на виртуальном компьютере). После того, как будет установлен SVGA-драйвер от фирмы VMware, Inc. (входящий в состав пакета VMware Tools для Windows), перезагрузите ОС Windows 2000 на виртуальной машине. После перезагрузки вы можете поменять разрешение экрана у виртуальной машины (Свойства экрана | Параметры).
Если вы хотите использовать звуковую карту, работая с ОС Windows 2000 на виртуальном компьютере, прочитайте руководство по ее подключению на сайте фирмы VMware.
Только для Windows 95/98: вы увидите диалоговое окно Обнаружено новое оборудование. Windows предложит вам произвести поиск драйверов для него. Для большинства устройств драйверы уже установлены при инсталляции системы, однако, в некоторых случаях может понадобиться установочный CD ROM диск. Windows попросит вас несколько раз перезагрузиться при установке новых драйверов.
В некоторых случаях Windows может не распознать CD-ROM диск, когда выдается запрос на поиск драйверов. В таком случае рекомендуется попытаться указать в качестве пути к драйверу каталог C:\windows\system\ или отказаться от установки драйвера данного конкретного устройства. Подключение таких устройств может быть выполнено позже.
Когда Windows установит виртуальные устройства и драйверы для них, надо удалить из системы неработающие устройства, соответствующие реальному оборудованию. Для этого используйте вкладку Система | Устройства в Панели управления. Выберите неработающее устройство и щелкните по кнопке Удалить. Только учтите, что нужно предварительно выбрать профиль оборудования, соответствующий виртуальному компьютеру, чтобы не удалить устройства, работающие при запуске ОС с физического диска.
Только для Windows NT: После завершения загрузки ОС просмотрите протокол загрузки, чтобы определить те устройства, которые не подключились. Вы можете отключить их в профиле "Виртуальный компьютер", используя менеджер устройств (Панель управления | Устройства).
13. Убедитесь, что все виртуальные устройства работают корректно, особенно сетевые адаптеры. Помните, что состав оборудования виртуального компьютера существенно отличается от набора устройств, реально имеющихся на Вашем физическом компьютере.
Только для Windows 95/98: Если какое-то виртуальное устройство отсутствует, воспользуйтесь опцией Панель управления | Добавить новое оборудование.
14. Установите VMware Tools (если вы еще не сделали этого). Пакет VMware tools будет запускаться в обеих конфигурациях оборудования, но окажет какое-то влияние на работу только в конфигурации "Виртуальный компьютер".
Примечания.
1. Когда вы в следующий раз загрузите Windows в реальном компьютере, используя профиль оборудования, соответствующий реальной конфигурации аппаратуры, в списке устройств могут появиться некоторые виртуальные устройства. Вы можете удалить их или отключить тем же самым способом, который был описан выше для отключения реальных устройств из профиля оборудования, соответствующего виртуальному компьютеру.
2. Если вы при задании конфигурации виртуального компьютера установили для реального диска режим "с отложенной записью" (undoable), то при перезагрузке ОС вы должны будете либо согласиться с тем, чтобы все операции с диском, проделанные внутри виртуальной машины были сохранены на диске, либо отказаться от сохранения изменений. Подробнее о режимах работы дисков см. в разд. 18.4.
| Диапазон | Используется для | Пример |
|---|---|---|
| ‹net›.1* | Базовый компьютер | 192.168.0.1 |
| ‹net›.2 - ‹net›.127 | Статические адреса | 192.168.0.1 - 192.168.0.127 |
| ‹net›.128 - ‹net›.254 | Распределяемые через DHCP | 192.168.0.128 - 192.169.0.254 |
| ‹net›.255 | Широковещательный запрос | 192.168.0.255 |
ethernet0.address = 00:50:56:XX:YY:ZZ
где 'XX' - шестнадцатеричное значение из интервала 00h-3Fh, 'YY' и 'ZZ' - шестнадцатеричные значения из интервала 00h - FFh (система VMware не позволяет использовать произвольные адреса, так что надо поддерживаться именно такого формата).
Заметим, что если вы, придерживаясь указанного формата, присвоите фиксированный адрес только некоторым виртуальным компьютерам в сети (а другие будут получать адреса динамически), конфликтов между адресами, назначенными "вручную", и адресами, назначенными автоматически, возникнуть не должно. 18.8.4 Установка средств сетевой поддержки
А теперь, получив необходимые предварительные знания, займемся подключением виртуального компьютера к сети.
Но прежде, чем заниматься таким подключением, вы должны определить для себя, какой из вариантов подключения вы будете использовать: "Host-only" или "Bridged networking" (как было сказано выше вариант "Custom" мы не рассматриваем). Эти два варианта ниже будут рассмотрены отдельно.
Хотя в разделе об инсталляции системы VMware было сказано, при задании конфигурации виртуального компьютера можно отказаться от конфигурирования сетевой поддержки, однако для того, чтобы такую поддержку задействовать, вам придется переустановить систему VMware. К счастью, сделать это очень просто, причем при такой переинсталляции не нарушается конфигурация созданных в системе виртуальных компьютеров (в частности, сохраняется вся информация, записанная на виртуальных дисках). Дело в том, что и конфигурация виртуальных машин и все относящиеся к ним файлы хранятся в двух подкаталогах домашнего каталога пользователя, создавшего виртуальный компьютер: ~/vmware и ~/.vmware. Эти каталоги не изменяются при переустановке ПО VMware, и, после такой переустановки, ранее созданные виртуальные машины будут снова запускаться без проблем (по крайней мере, в том случае, если вы не меняете версии ПО).
Для того, чтобы переустановить систему VMware надо сначала удалить ее, а потом установить заново. Если она устанавливалась из rpm-пакета, то переустановка выполняется командами
[root]# rpm -qa | grep VMware
(позволяет узнать точное имя установленного пакета, которое нужно в следующей команде)
[root]# rpm -e VMware-2.0.3-799
[root]# rpm -Uhv VMware-2.0.3-799.i386.rpm
причем перед запуском третьей команды надо перейти в каталог, где располагается указанный пакет.
Если вы устанавливали систему из tar-архива, то для ее удаления надо запустить скрипт vmware-uninstall.pl.
После того, как вы переустановили ПО, необходимо (как и при первой инсталляции) запустить скрипт vmware-config.pl, и теперь уже не пропускать этап задания конфигурации сети. Ниже приводится образец диалога, который происходит на этом этапе:
-------------------------------------------------------------------------
Do you want this script to automatically configure your system to allow your Virtual Machines to access the host filesystem? (yes/no/help)
The version of Samba used in this version of VMware is licensed as described in the "/usr/share/doc/vmware/SAMBA-LICENSE" file.
Hit enter to continue.
Enabling networking (this is required to share the host filesystem).
Trying to find a suitable vmnet module for your running kernel.
None of VMware's pre-built vmnet modules is suitable for your running kernel. Do you want this script to try to build the vmnet module for your system (you need to have a C compiler installed on your system)? [yes]
Extracting the sources of the vmnet module. Building the vmnet module.
The module loads perfectly in the running kernel.
Enabling host-only networking (this is required to share the host filesystem).
Do you want this script to probe for an unused private subnet? (yes/no/help) [yes]
What will be the IP address of your host on the private network? 192.168.36.20
What will be the netmask of your private network? 255.255.255.0
-------------------------------------------------------------------------
Ответ на первый из приведенных в этом примере вопросов определяет, будет ли на базовом компьютере установлен Samba-сервер фирмы VMware. Если вы отвечаете утвердительно ("yes"), то на базовом компьютере устанавливается Samba-сервер vmware-smbd (это специально доработанная фирмой версия сервера Samba, см. выше). После этого Ваше решение требуется еще только для того, чтобы решить, задать ли IP-адреса самому или предоставить их выбор скрипту. Это решение вы принимаете, когда отвечаете на вопрос
"Do you want this script to probe for an unused private subnet? (yes/no/help)".
Если вы решили использовать только вариант "Bridged networking", то лучше ответить "n", и указать в ответе на следующий вопрос реальный адрес, полученный от администратора сети. Если же вы решите создать виртуальную сеть ("Host-only networking"), то лучше предоставить выбор адресов скрипту. Впрочем, и в последнем случае можно задавать адреса самому, придерживаясь соглашений, о которых было кратко рассказано выше.
Если же на первый вопрос в приведенном примере вы отвечаете отрицательно (т. е. отказываетесь от установки Samba-сервера от фирмы VMware), то следующим вопросом будет:
"Do you want to be able to use the network in your Virtual Machines? [yes]".
Как видите, этот вопрос предполагает только один вариант ответа (если вы отвечаете "нет", то оказываетесь от поддержки сети вообще). В случае же утвердительного ответа скрипт еще раз интересуется, не желаете ли вы сконфигурировать и "host-only networking":
Do you want to be able to use host-only networking in your Virtual Machines? [yes]
Если вы ответите "нет", то сможете использовать только вариант "Bridged networking", о чем свидетельствует появление следующего сообщения:
Starting VMware services:
Virtual machine monitor [OK]
Virtual ethernet [OK]
Bridged networking on /dev/vmnet0 [OK]
Если же вы задействовали и вариант "Host-only networking", то это сообщение примет вид:
Starting VMware services:
Virtual machine monitor [OK]
Virtual ethernet [OK]
Bridged networking on /dev/vmnet0 [OK]
Host-only networking on /dev/vmnet1 (background) [OK]
В заключение скрипт еще попросит вас ввести имя и пароль пользователя, которому будет дан доступ к серверу Samba, и завершит работу.
Как следует из изложенного, интерфейс vmnet0 (используемый для "Bridged networking") задействуется в любом случае, даже если вы пытаетесь настроить сетевые службы системы VMware только на использование варианта "Host-only".
После завершения работы конфигурационного скрипта запустите систему VMware, выберите (если их несколько) нужный вам конфигурационный файл виртуального компьютера (через меню File | Open) и, не запуская виртуальный компьютер, проделайте следующее:
1. Запустите Редактор конфигурации (меню Settings | Configuration Editor).
2. Щелкните по значку "+" слева от надписи "Ethernet Adapters". Появятся три дополнительные строки, соответствующие трем возможным виртуальным сетевым адаптерам. Переместите подсветку (курсор) на первую из этих строк. В правой части окна (которое до этого было пустым) появится картинка, подобная той, что изображена на рис. 18.7.
Рис. 18.7. Окно настройки сетевого адаптера.
3. Щелкните по треугольнику возле выпадающего меню выбора типа подключения (Connection Type) и выберите один из трех возможных вариантов (Bridged, HostOnly или Custom), в соответствии с принятым Вами ранее решением. Как было сказано выше, вариант Custom выбирать не стоит, пока вы не освоите систему VMware значительно лучше автора этой книги.
4. После этого надо щелкнуть по кнопке Install и сохранить конфигурацию щелчком по кнопке Safe.
На этом установка необходимых сетевых средств системы VMware завершена. Однако требуется еще сконфигурировать сетевые службы операционной системы, запускаемой на виртуальном компьютере (в качестве пояснения приведем рис. 18.8).
Рис. 18.8. Настройка сетевых средств в ОС виртуального компьютера
При этом в качестве сетевой платы надо выбрать плату AMD PCNET Family Ethernet adapter (PCI-ISA), а затем либо задать фиксированный сетевой адрес, либо задействовать динамическое получение адреса по протоколу DHCP. Более подробно о том, как это можно сделать, смотрите в руководствах по ОС, запускаемой на виртуальном компьютере. Стоит только отметить, что если вы установите на виртуальном компьютере несколько ОС и будете выбирать одну из них при загрузке, то надо будет настроить сетевые службы в каждой из этих ОС. Поскольку чаще всего в каждый момент времени может быть запущена только одна из этих ОС, можно использовать один и тот же IP-адрес во всех этих системах. Скорее всего, вам придется перезапустить ОС виртуального компьютера, чтобы сделанные изменения вступили в силу.
Если вы подключаетесь к реальной физической сети, то после этого вы сможете "увидеть" другие компьютеры локальной сети, раскрыв окно "Сетевое окружение" в Windows. А, следовательно, вы получите доступ и к тем ресурсам (дискам, каталогам, принтерам), которые на этих компьютерах отданы "в общее пользование". Однако ресурсы вашего базового компьютера вы, скорее всего, еще не увидите. Для того, чтобы дать доступ из Windows к дискам Linux-компьютера, необходимо запустить на последнем сервер Samba и правильно его настроить. Полностью описывать здесь настройки Samba-сервера нет никакой возможности: об этом написаны отдельные книги.
А теперь рассмотрим несколько примеров настройки для конкретных ситуаций, связанных с системой VMware. Надеюсь, что их рассмотрение позволит понять принципы такой настройки, а в совокупности с ранее приведенными сведениями, - и настроить нужную вам конфигурацию выхода виртуального компьютера в сеть.
Рис. 18.9. Доступ к диску базового компьютера через "Сетевое окружение"
Необходимо отметить одну особенность настройки сетевых средств на виртуальном компьютере, проявляющуюся тогда, когда ОС виртуального компьютера загружается с физического диска. Особенность состоит в том, что в этом случае обязательно надо создать отдельный профиль оборудования для загрузки ОС Windows в виртуальном компьютере, в которой отключить реальную сетевую карту Ethernet, как это было сказано в разд. 18.7. В противном случае у вас могут возникнуть трудности с подключением адаптера AMD PCNET PCI для Ethernet, который должен работать в виртуальном компьютере. Впрочем, то же самое верно и для других вариантов, так что не забывайте создавать отдельный профиль оборудования для запуска на виртуальном компьютере.
Рис. 18.10. Диск базового компьютера смонтирован как диск G: в ОС виртуального компьютера
Конечно, давать полный доступ к Linux-разделу диска в реальной жизни не стоит, если вы задумываетесь и об обеспечении безопасности в вашей сети, так как все системные файлы Linux становятся доступны для редактирования из виртуального компьютера. Надо корректно настроить сервер Samba, предоставив доступ только к специально выделенному каталогу.
interfaces = ‹физические сети› ‹виртуальная сеть›.1/24
где ‹физические сети› - это список обслуживаемых физических сетей, а ‹виртуальная сеть› - это сетевая часть адреса, назначенного для виртуальной сети. Предположим для примера, что базовый компьютер имеет в реальной сети адрес 209.220.166.34, а виртуальной сети в варианте "host-only" ему присвоен адрес 192.168.0.1. Тогда указанная строка принимает вид:
interfaces = 209.220.166.34/24 192.168.0.1/24
или, задавая маску сети явным образом, так:
interfaces = 209.220.166.34/255.255.255.0 92.168.0.1/255.255.255.0
Подробнее об этом см. man-страницу 5 smb.conf.
Если вы не помните, какой IP-адрес присвоен виртуальному интерфейсу, дайте команду /sbin/ifconfig vmnet1.
[user]$ /usr/sbin/smbmount //vmware/public /mnt/vm1 -U user1
(Подробнее см. документацию по Samba или страницу man smbmount).
Рис. 18.11 иллюстрирует эту возможность. На нем показан каталог на диске виртуального компьютера, смонтированный в файловую систему Linux. При этом в виртуальном компьютере запущен MS Word, о чем свидетельствует наличие временных файлов, создаваемых этой программой. А сам каталог в данном случае просматривается из Linux при помощи браузера Konqueror.
Рис. 18.11. Ресурс виртуального компьютера смонтирован в каталог /mnt/vm в ОС базового компьютера (просмотр через Konqueror)
[user]$ su
2. Выполнить команду
[root]# /usr/bin/vmware-smbpasswd vmnet1 -a ‹username›
где ‹username› - это имя пользователя, которого вы добавляете в список.
3. Выполнить то, что будет сказано в инструкциях, появляющихся на экране (программа vmware-smbpasswd является вариантом стандартной программы smbpasswd. Если вы знакомы с последней, вы можете использовать любые ее опции).
4. Покинуть бюджет пользователя root:
[root]# exit
Если вы получите сообщение "Unknown virtual interface "vmnet1", значит либо у вас не используется сервер Samba от VMware, либо не задействован вариант "Host Only" (который обслуживается этим интерфейсом).
[root] # echo 0 ›/proc/sys/net/ipv4/ip_forward
Здравствуйте, Виктор! Неделю назад приобрёл Вашу книгу "Самоучитель Linux для пользователя". Книга безусловно понравилась. Но хотя я в Linux весьма посредственный пользователь, не смог удержаться чтобы не написать Вам о подключении ttf-шрифтов к gs. Дело в том что я как-то пытался это сделать, прочитав статью в интернете (возможно Вашу). Но не получилось, из-за того что названия шрифта писал в Fontmap неверно. То есть как в Вашей книге на 357 странице(обратно)/Times New Roman (times.ttf);Порывшись внутри файла шрифта, я нашёл в нём его "правильное" имя. И теперь мой файлик Fontmap.GS, (вернее его часть) выглядит так./usr/share/ghostscript/7.05/lib/Fontmap.GS/ArialMT (arial.ttf) ;/Arial-BoldMT (arialbd.ttf) ;/Arial-BoldItalicMT (arialbi.ttf) ;/Arial-ItalicMT (ariali.ttf) ;/CourierNewPSMT (cour.ttf) ;/CourierNewPS-BoldMT (courbd.ttf) ;/CourierNewPS-BoldItalicMT (courbi.ttf) ;/CourierNewPS-ItalicMT (couri.ttf) ;/TimesNewRomanPSMT (times.ttf) ;/TimesNewRomanPS-BoldMT (timesbd.ttf) ;/TimesNewRomanPS-BoldItalicMT (timesbi.ttf) ;/TimesNewRomanPS-ItalicMT (timesi.ttf) ;/Tahoma (tahoma.ttf) ;/Tahoma-Bold (tahomabd.ttf) ;/Verdana (verdana.ttf) ;/Verdana-Bold (verdanab.ttf) ;/Verdana-BoldItalic (verdanaz.ttf) ;/Verdana-Italic (verdanai.ttf) ;Мало того - это работает! Хочу заметить, что konqueror, настроенный на работу с ttf-шрифтами, при печати создаёт файл.ps внутри которого указаны именно эти шрифты! Я не назначал Aliases пока на TrueType, потому родные шрифты грузятся по умолчанию.С уважениемПолубанов Сергей.