Linux: Полное руководство (fb2)


Настройки текста:



Linux Полное руководство

Введение

Об этой книге

Все большую и большую популярность в России и во всем мире завоевывает Linux — UNIX-подобная операционная система для IBM-совместимых персональных компьютеров. Растет количество приложений, разработанных для нее. Постоянно расширяется круг задач, для которых она используется. Из операционной системы для программиста и администратора интернет-сервера она уже превратилась в реальную альтернативу ОС Windows в сфере домашнего и офисного применения.

Эта книга призвана помочь читателю освоить ОС Linux и научиться полноценно работать в ней. Я предполагаю, что читатель знает, с какой стороны подойти к компьютеру, умеет решать свои прикладные задачи, работая в среде Windows или хотя бы MS DOS, и хочет попробовать на практике операционную систему совсем другого класса, чтобы в дальнейшем, возможно, полностью «пересесть» на нее. Изложение материала происходит последовательно, начиная с этапа установки ОС и заканчивая советами по разработке собственных приложений. Знакомство с операционной системой — соперницей Windows начинается с описания прикладных программ, работающих под ее управлением и предназначенных для решения повседневных задач, стоящих перед пользователем домашнего компьютера: редактирование текста и изображений, работа в Интернете, проигрывание музыки и видео и т.п. Для облегчения перехода с Windows на Linux в конце книги приведена таблица соответствия популярных Windows-приложений приложениям Linux, разработанным для решения тех же задач. Далее в разделе для пользователя изложены основные сведения о внутренней организации Linux — ядре, файловой системе, процессах и демонах, их взаимодействии, — необходимые для настройки и базового администрирования системы, то есть обслуживания многопользовательской среды, установки программного обеспечения, обеспечения сохранности данных. Собственно сетевому администрированию, то есть настройке различных сетевых служб, посвящен второй раздел книги. И для читателей, знакомых с программированием в среде Windows, предназначен последний раздел, освещающий особенности разработки приложений в ОС Linux и некоторые полезные инструменты разработчика.

Почему Linux?

Устанавливая Linux, вы получаете множество преимуществ:

♦ Гибкость. Мало того, что практически все в Linux поддается настройке в соответствии с именно вашими задачами и оборудованием, так вам еще и становятся доступны исходные тексты ядра и приложений, и вы можете модифицировать систему так, как вам нужно. Такое можно встретить далеко не в каждой операционной системе, особенно семейства Windows. Вы видели где-нибудь исходные тексты хотя бы Блокнота Windows? Мне, например, очень не хватает функции замены текста в этом редакторе. Для решения этой проблемы я написал собственный редактор, в котором и реализовал эту функцию. А если мне нужно сделать небольшое изменение в ядре? Не буду же я полностью переписывать Windows? Остается только надеяться, что новая функция будет реализована в следующей версии, и ради этой единственной функции устанавливать «монстра», пожирающего еще больше системных ресурсов.

♦ Дешевизна. ОС Linux абсолютно бесплатна. Конечно, компакт-диски с дистрибутивами продаются за деньги, но эти деньги вы платите не за лицензию, а за сам носитель, подбор программного обеспечения на нем и программу-инсталлятор — все, как у пиратов, с той лишь разницей, что это: а) полностью легально, б) гарантированно работает и пользуется технической поддержкой. Вы можете и не покупать дистрибутив, а анонимно и бесплатно выкачать исходные тексты или уже собранные программы из Интернета, установив их самостоятельно и заплатив только за трафик — и это тоже полностью легально. Вам не придется ничего доплачивать, устанавливая Linux на каждый следующий компьютер, не нужно покупать отдельную лицензию на использование Linux на сервере. В любом случае стоимость всего программного обеспечения составит всего несколько долларов. Я не буду сравнивать стоимость построения Linux-сервера со стоимостью аналогичного сервера на платформе Microsoft, вы сами можете это сделать на сайте компании Microsoft.

♦ Простота обслуживания. Сама система и все службы настраиваются путем редактирования конфигурационных файлов. Это обычные текстовые файлы; зная их расположение и формат, вы сможете настроить любой дистрибутив, даже если у вас под рукой нет никаких инструментов, кроме текстового редактора. Кроме того, для облегчения перехода с ОС Windows NT/2000/2003 Server, где сервисы настраиваются в основном через графический интерфейс, создано множество графических конфигураторов, работа с которыми интуитивно понятна и позволяет сосредоточиться на сути выполняемых действий, а не способе их выполнить.

♦ Нетребовательность к ресурсам. Системные требования зависят от дистрибутива (конкретной реализации Linux) и версии ядра. Существуют дистрибутивы, специально созданные для корректной работы на старых и «бедных» машинах. Например, для организации интернет-сервера на базе дистрибутива Red Hat версии 5.2 вам вполне хватит компьютера с процессором Intel 80486DX и 32 мегабайтами ОЗУ. А окончательно устаревшую 386 машину, на которой никакая современная ОС Windows не запустится, под управлением Linux можно вернуть в строй в качестве маршрутизатора или брандмауэра.

В чем же причина того, что большинство пользователей до сих пор не рассматривают Linux как полноценную настольную операционную систему? Нет, не в том, что Linux так недружелюбен, как его малюют. И не в том, что под Linux нет ни офисных приложений, ни игр. И не в том, что Linux довольно долго имел проблемы с русским языком. Причина заключается в правильной маркетинговой политике Microsoft — нужно отдать ей должное. Совсем не обязательно создать лучший программный продукт, нужно убедить в том, что он лучше. Это я о Windows (про DOS я вообще молчу — урезанная версия XENIX, которая, в свою очередь является урезанной версией UNIX) — эта операционная система использовала UNIX-решения 20 летней давности, в то время как о существовании самой UNIX некоторые пользователи Windows 95 и не догадывались.

Задача этой книги — не только научить пользователей работать с Linux, но и развеять мифы о том, что это сложная и неподъемная система, предназначенная только для профессионалов. Если вы читаете эту книгу, то для себя данный миф вы уже почти разрушили. Осталось только чуть-чуть. Вам осталось узнать об истории создания и развития Linux. Ведь о развитии DOS и Windows знают все — об этом написано даже в школьных учебниках по информатике. А про Linux и UNIX в лучшем случае говорят: «Есть такая система».

История Linux

Все началось с игры

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

В далеком 1965 году начались работы над созданием операционной системой MULTICS (MULTiplexed Information and Computing System) для компьютера GE-645 (об этом компьютере вы точно не прочитаете в школьном учебнике по информатике). Инициатором была компания Bell Laboratories (подразделение компании AT&T), а ее помощниками выступали не менее известные организации — General Electric и Массачусетский технологический институт (МТИ). Что же ожидали от MULTICS? Процессорное время GE-645 стоило очень дорого, поэтому нужна была система разделения процессорного времени, обеспечивающая высокую скорость обработки данных и их совместное использование. Посмотрите на рис. 1 — это система GE-645. Обратите внимание, какое помещение она занимает. А теперь вспомните процессор Intel 80386. К чему это я? Производительность GE-645 чуть выше, чем у процессора 80386. До чего техника дошла (кстати, «шла» она к этому лет эдак 20)!

Рис. 1. GE-645 © General Electric Information Systems Equipment Division, 1968

Операционная система Multics была запущена в 1969 году, но она не оправдала возложенных на нее надежд. Поэтому вскоре компания Bell Laboratories прекратила работу над этой системой. Коммерческого успеха эта система не принесла. Правда, для справедливости нужно отметить, что МТИ умудрился продать около 80 инсталляций этой системы, причем некоторые из них «дожили» до начала 90-х годов.

Но не бывает худа без добра. Multics послужила своеобразным толчком для создания новой операционной системы — UNIX.

Что же произошло в 1969 году, который считают годом рождения UNIX? Четыре сотрудника Bell Labs, а именно Руд Кенедей (Rudd Canaday), Дуг Мак-Илрой (Doug McIlroy), Дэннис Ричи (Dennis Ritchie) и Кен Томпсон (Ken Thompson) попытались возродить Multics. Все они ранее работали над проектом Multics и не смогли смириться с таким поворотом событий.

Прежде всего был разработан проект файловой системы — потом эта файловая система стала файловой системой UNIX. Кен Томпсон написал программы, эмулирующие работу файловой системы и режима подкачки. Получилось что-то вроде прототипа ядра новой системы. Это ядро было предназначено для GE-645.

А сейчас на арене появляется та самая игра — «Космическое путешествие», симулятор полета, написанный Кеном Томпсоном под Multics. Но после прекращения работы над Multics эту игру оказалось не на чем запускать. Обнаружив в углу лаборатории редко используемую машину PDP-7, Томпсон с Ричи решили переписать игру для нее. Переносить программу на перфоленте оказалось неудобно, и Томпсон разработал для PDP-7 файловую систему, утилиты для работы с файлами и командную оболочку. Все это писалось на машине GE и переносилось на PDP-7 на перфоленте, но, как только был закончен ассемблер для PDP-7, система встала на собственные ноги. Получилась новая операционная система для компьютера PDP-7, которую назвали, по аналогии с Multics, "UNICS" (UNiplexed Information and Computing Service). Такое название ей дал Питер Нейман (Peter Neumann). Кто же переименовал ее в UNIX, до сих пор не известно.

Рис. 2. PDP-7

В то время все программное обеспечение, том числе и операционные системы, писалось на машинно-зависимом языке (ассемблере), то есть если программа, например, написана для компьютера PDP-7, ее нельзя запустить на компьютере с другой архитектурой, например, на GE. Кен Томпсон задался целью сделать универсальную систему, которая могла бы работать на нескольких платформах, то есть создать переносимую, независимую от «железа» операционную систему. Для своей системы он начал разрабатывать язык В, на котором он хотел переписать всю систему. Но «до ума» этот язык довел Дэннис Ричи, обновленная версия языка стала называться С. Да, этот тот самый язык, на котором каждый из нас написал не одну программу. Сейчас мы подходим к созданию той идеологии UNIX'a, которая используется по сей день.

О работе над новой операционной системы руководство компании Bell Labs ничего не знало. Они думали, что ведущие программисты работают над системой обработки текстов для AT&T. Действительно, Томпсон написал строковый (не текстовый!) редактор ed, который присутствует до сих пор во всех современных дистрибутивах, а Ричи создал программу roff. Новые разработки понравились компании AT&T, которая была заинтересована в дальнейшем развитии проекта и приобрела новый компьютер — PDP-11. Для этого компьютера UNIX был полностью переписан: вся система, включая ядро, была написана на языке С, что позволило переносить систему на другие платформы. На ассемблере была написана только та часть ядра, которая была непосредственно связана с «железом». Это было в 1971 году.

Становление UNIX как операционной системы

Очень много новых функций в ядро системы было добавлено всего за один год — с 1971 по 1972. Система заметно «возмужала» по сравнению с 1969 годом. Теперь она действительно стала похожа на операционную систему. Но система не распространялась — ее использовало только одно подразделение AT&T, Первым шагом системы за пределы компании AT&T стала установка системы в компании New York Telephone. Система была установлена на компьютере PDP-11/20. обладавшем аж 56 килобайтами оперативной памяти и двумя жесткими дисками по 2,4 Мб каждый, С этого момента началось распространение системы.

Уже в начале 1973 года насчитывалось 16 инсталляций системы. Это довольно неплохо для времен, когда такую роскошь, как компьютер, могла позволить себе только крупная организация, и то не каждая. Компьютер тогда покупался для решения промышленных задач, а не для набора текста и прослушивания музыки.

Вот что писал Ричи о UNIX'e: "Мы хотели сохранить не только хорошую среду программирования, в которой можно было решать задачи, но и систему, вокруг которой могло сформироваться товарищество. Мы по опыту знали, что сущностью совместного использования компьютера (the essence of communal computing) является не только замена перфокарточного ввода на терминал, но и предоставление средств и стимулов для более тесного общения, реализуемого средствами удаленного доступа к машине, работающей в режиме разделения времени."

Летом 1974 года в журнале «Communications of the ACM» появилась первая статья о UNIX. Ее авторами были, как и следовало ожидать, Томпсон и Ричи. Они описывали общее устройство UNIX. В той же статье говорилось, что по состоянию на июль 1974 года система была установлена уже на 600 (!) компьютерах. Вы только вдумайтесь в цифру: количество инсталляций за год возросло более чем в 37 раз. Самое интересно, что система развивалась почти при полном отсутствии поддержки со стороны AT&T.

После этой статьи операционной системой UNIX заинтересовались многие научно-исследовательские организации. Но AT&T не имела права заниматься бизнесом, следовательно, система не могла продаваться. Чтобы система все-таки развивалась, Томпсон бесплатно рассылал всем желающим наборы дисков с операционной системой. Такой поворот событий повлек следующую волну развития ОС. Например, студенты Йельского университета разработали командную оболочку (shell), а студенты другого университета создали первую сеть на основе UNIX. В университете Беркли (Калифорния) опять-таки студенты создали огромное количество различных утилит и новую оболочку.

Если вы читали какую-то литературу по UNIX, то, наверное, знаете, как нумеровались версии UNIX — V1, V2 и т.д. Откуда взялась именно такая нумерация версий? В 1971 году Ричи и Томпсон написали руководство по программированию в UNIX. Версия, которая описывалась в первом издании этого руководства, стала называться V1, далее — V2 и т.д. Если быть предельно точными, то вот даты выхода изданий руководства:

♦ 3 ноября 1971 г. (описывалась версия V1)

♦ 12 июня 1972 г. (описывалась версия V2)

♦ Февраль 1973 г. (V3)

♦ Ноябрь 1973 г. (V4)

♦ Июнь 1974 г. (V5)

♦ Май 1975 г. (V6)

♦ Январь 1979 (V7)

♦ Февраль 1985 г.

♦ Сентябрь 1986 г.

♦ Октябрь 1989 г.

После 1979 года нумерация Vn больше не использовалась — чуть позже мы с вами узнаем, почему именно.

Важную роль в развитии UNIX сыграл Калифорнийский университет в Беркли. Как уже было сказано, студенты (точнее, аспиранты) этого университета разработали новую командную оболочку и несколько очень важных утилит. Одной из этих утилит мы пользуемся до сих пор — это текстовый редактор vi (правда, в 1975 году он назывался ex). В том же 1975 году Томпсон написал версию Pascal для UNIX.

Модифицированная в университете Беркли система получила название BSD (Berkeley Software Distribution). Все мы слышали название FreeBSD, некоторые из нас даже работали с этой системой. Так вот, сейчас мы знаем, откуда оно произошло. Данная система содержала Pascal и редактор ex (vi). Университет Беркли имел право заниматься коммерческой деятельностью, поэтому первая версия BSD сначала продавалась по цене $50. Всего было продано 30 копий системы. В 1978 году вышла вторая версия BSD — 2BSD. Вторая версия продавалась активнее — было продано 75 копий. Идеи, разработанные в Беркли, позже были использованы в следующей версии UNIX от Bell Labs.

Два года спустя Питер Вэйнер (Peter Weiner) и Гейнц Ликлама (Hienz Lycklama) создали компанию Interactive Systems, которая тоже принялась продавать UNIX. Правда, продавалась она под другим именем — Irdis (это первый клон UNIX).

Вернемся к нумерации Vn. Прекратилась она в 1979 году — в этом году вышла последняя «настоящая» UNIX — UNIX V7. В ее состав входили компилятор С, программы awk, make, uucp, find, cpio и командная оболочка Bourne (и, разумеется, много других программ, которых здесь перечислять нет смысла). Именно эта система была перенесена Дэннисом Ричи и Стивом Джонсоном (оба — сотрудники AT&T) на платформу Interdata, а чуть позже несколько программистов из австралийского университета перенесли ее на платформу Interdata 8. Правда, после переноса на другую платформу немного пострадала производительность системы — за все нужно платить. Университет Беркли занялся решением этой проблемы и решил ее. В 1982 году вышла версия 2.8.1BSD, которая работала значительно быстрее предшествующей.

Бурное развитие UNIX

В 1980 году агентству DARPA (the Defense Advanced Research Projects Agency) потребовалось увеличить мощность компьютеров, на которых базировалась сеть ARPANET (предок сети Интернет). Ресурсы стареньких PDP-10 были уже полностью исчерпаны, поэтому решено было перейти на более мощные компьютеры — VAX. Но для этих компьютеров нужен был стек протоколов TCP/IP. Реализация TCP/IP от DEC отпала по ряду причин, поэтому агентству DARPA ничего другого не оставалось, как выбрать систему BSD. Данный факт положительно отразился на развитии UNIX — ее выбрали основной системой для интернета.

Рис. 3. PDP-10

Рис. 4. VAX

Благодаря тому, что UNIX сделалась основой интернета, темпы ее развития возросли. В начале 80-х вышло много различных версий UNIX. Выпускали их разные компании, по основными конкурентами были компания AT&T и университет Беркли. Первая выпустила системы Programmer's Workbench (рабочее место программиста) и UNIX System III. Университет Беркли тоже не отставал — с октября 1980 года по сентябрь 1983 года было выпущено 6 версий системы — 4, 4.1, 4.1a, 4.1b, 4.1c, 4.2. Последняя версия отличалась высокопроизводительной файловой системой и встроенной поддержкой сети (TCP/IP). До этого сеть в UNIX поддерживалась, мягко говоря, весьма слабо. Но после реализации стека TCP/IP для UNIX все изменилось. В 1983 году большинство подключенных к интернету компьютеров составляли компьютеры VAX с ОС UNIX.

Какие бывают UNIX'ы?

Как только компании осознали, что на UNIX можно заработать, причем заработать неплохо, на рынке появилось множество клонов UNIX под разными названиями. Например, компания Sun Microsystems (основана в 1982 году, а одним из основателей был автор редактора ex — Билл Джой) перенесла BSD на платформу, разработанную в Стенфорде, чем положила начало новому типу рабочих станций.

Наверное, вы когда-нибудь слышали об операционных системах IRIX, XENIX, HP-UX — все эти системы UNIX-подобные, их создали, соответственно, компании SGI, SCO, Hewlett-Packard. О XENIX можно вообще долго говорить, но все, что вам нужно знать об этой системе — это то, что она является первым коммерческим UNIX'ом для платформы Intel. ОС IBM HP-UX 1.0 основана на системе System III от AT&T. Кстати, в 1983 году с компании AT&T был снят запрет заниматься компьютерным бизнесом, после чего компания сразу же принялась продавать свою систему System V от Bell Labs (не забываем, что это подразделение AT&T). Выпускала UNIX и компания IBM. Правда, она немного опоздала: продажи ее UNIX — системы AIX — начались только в 1990 году.

Обилие различных версий UNIX стало причиной так называемых UNIX-войн, когда конкурирующие компании выпускали все новые и новые версии UNIX'a.

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

Происхождение Linux

Операционная система Minix

В 80-х годах мощности персональных компьютеров не хватало для запуска на них ОС UNIX, по к началу 90-х ситуация радикально изменилась. Вычислительные мощности персональных компьютеров достигли нужного уровня, что позволило запускать UNIX на обычном PC. К этому же времени начали появляться версии UNIX для PC. Одной из таких систем была система Minix. Система Minix была разработана в 1987 году Эндрю Таненбаумом (Andrew S. Tannenbaum) как учебная программа: ее назначением была демонстрация устройства и принципа работы реальных операционных систем.

Поскольку Minix была больше демонстрационной, нежели реальной системой, она была далека от совершенства. К тому же она была ориентирована на процессор 80286, который был более доступным в то время. Исходные коды (12 000 строк) этой операционной системы были опубликованы в книге А. Таненбаума «Операционные системы», которую мог прочитать любой желающий. Одним из читателей этой книги оказался Линус Торвальдс — будущий создатель Linux.

Линус Торвальдс

Линус Бенедикт Торвальдс (Linus Benedict Torvalds) родился 28 декабря 1969 года в г. Хельсинки, Финляндия. Первым компьютером Линуса был Commodore VIC-20, который купил его дед Лео Вальдемар Тёрнквист. Лео Вальдемар был профессором в Университете Хельсинки.

На «Коммодоре» Линус написал первую программу «Hello, World!». Наверно, все мы начинали именно с этой программы. За 4 года (компьютер был куплен в 1981 году) Линус выжал из него все, что мог, поэтому он стал копить деньги на новый компьютер. Основным источником его доходов в то время были школьные стипендии. В 1987 году он купил компьютер Sinclair QL. Это был очень мощный на то время компьютер. На Sinclair QL был установлен 32-разрядный процессор Motorola 68008 и 128 Кб оперативной памяти. Не удивляйтесь: именно 128 Кб. Это было очень много: для сравнения, на «Коммодоре» было установлено всего 3,5 Кб. На новом компьютере была установлена операционная система Q-DOS.

За четыре года Линус основательно освоил компьютер и заинтересовался работой операционной системы. В своей книге «Just for fun» он пишет: «Операционками я заинтересовался так: купил флоппи-контроллер, но к нему прилагался такой поганый драйвер, что пришлось написать новый. Пока писал — обнаружил проколы в самой операционной системе или, по крайней мере, несоответствие между тем. что обещала документация, и тем, что реально происходило. Я с этим столкнулся, когда моя программа отказалась работать.»

Sinclair QL «прожил» у Линуса 3 года — на год меньше, чем его предшественник. За эти три года Линус написал собственный ассемблер, текстовый редактор и несколько компьютерных игр.

После школы Линус поступил в Хельсинский университет на факультет компьютерных наук. На первом курсе ему немного не повезло — он вынужден был пойти служить в армию и прослужил там 11 месяцев. После возвращения из армии он продолжил учебу в университете. На втором курсе он прочитал книгу Таненбаума, посвященную операционным системам. Потом Линус писал: «Как только я прочел предисловие, познакомился с концепцией UNIX и узнал, на что способна эта мощная, строгая и красивая операционная система, я захотел купить такой компьютер, на котором сможет работать UNIX. Я решил, что поставлю себе Minix — единственную по-настоящему полезную из известных мне версий.»

С этого все и началось…

Рис. 5. Линус Торвальдс

Линус недоволен Minix

В январе 1991 года Линус приобрел в кредит компьютер на базе процессора Intel 80386@33Mhz с 4 мегабайтами оперативной памяти. На компьютер была установлена операционная система Minix. Но установленная система не совсем оправдала его ожидания. Больше всего ему не нравилась программа эмуляции терминала, которая была для него просто необходима — ведь с ее помощью он подключался к университетскому MicroVAX'y. Линус писал: «Беда была в том, что я хотел скачивать и закачивать файлы. То есть мне нужно было уметь писать на диск. Для этого моей программе эмуляции нужен был драйвер дисковода. А еще ей был нужен драйвер файловой системы, чтобы она могла вникать в организацию диска и записывать скачиваемые файлы.... разработка драйверов для дисковода и файловой системы казалась интересным делом. И я решил им заняться. Написал драйвер дисковода. А поскольку я хотел записывать файлы в файловую систему Minix, к тому же эта система была хорошо документирована, я сделал свою файловую систему совместимой с системой Minix. Таким образом, я мог читать файлы, созданные в Minix, и писать файлы на тот же диск, так что Minix могла читать файлы, созданные моей программой эмуляции терминала»

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

Кроме отвратительной терминальной программы Линусу не нравилось то, что в Minix нельзя было перевести текущую программу в фоновый режим. После написания своей программы эмуляции терминала Линус фактически взялся за написание своей операционной системы.

Сначала он принялся писать различные системные вызовы, но эта работа ему быстро надоела — ведь заранее нельзя знать, что именно тебе понадобится. Поэтому он взял оболочку Bourne Again Shell (bash) и попытался запустить ее на своей системе методом научного «тыка» (в математике этот метод называется методом Коши). Он запускал оболочку, она требовала какой-то системный вызов и завершала свою работу с ошибкой. Линус анализировал, какой вызов был нужен оболочке, и реализовывал его. В 1991 году оболочка все-таки запустилась. Это был очень важный момент в развитии новой ОС: был заложен ее фундамент.

25 августа Линус написал в группу новостей comp.os.minix первое сообщение о создании новой операционной системы. Сохранился даже оригинал этого сообщения:

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

Organisation: 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) far 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 prac-

tical within a few months, and I'd like to know what fea-

tures 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 :-(.

Вот перевод этого сообщения:

From: torvalds@klaava.Helsinki.FI (Linus Benedict Torvalds)

Newsgroups: comp.os.minix

Subject: Что вам не хватает в minix?

Summary: небольшой опрос для новой операционной системы

Message-ID: <1991Aug25.205708.9541@klaava.Helsinki.FI>

Date: 25 Aug 91 20:57:08 GMT

Organization: Университет Хельсинки


Привет всем пользователям minix


Я разрабатываю (бесплатную) операционную систему (это

просто хобби, ничего «огромного» и профессионального вроде

GNU) для чипов 386(486) AT. Я пишу ее начиная с апреля

и похоже, что скоро она будет готова. Мне очень важно

узнать, что вам нравится/не нравится в minix, потому что

моя ОС напоминает minix (та же самая файловая система (из

практических соображений) и много еще чего).

На данный момент я перенес в нее bash(1.08) и gcc(1.40),

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

все будет готово и я хотел бы знать, какие функции вам

нужны. Принимаются любые заявки, но их выполнение я не

гарантирую :-)

Linus (torvalds@kruuna.helsinki.fi)


PS. Система свободна от кода minix и обладает много-

потоковой файловой системой. Она не переносима (поскольку

использует переключение задач 386 и др.) и возможно

никогда не будет поддерживать ничего, кроме АТ-

винчестеров, поскольку кроме них у меня ничего нет :-(.

Версия Linux 0.01 была выпущена 17 сентября 1991 года. В своей книге «Just for fun» Линус пишет:

«И вот я решился ее выложить. Я не делал публичных объявлений, а просто написал пятерым-десятерым хакерам на личные адреса, что она лежит на FTP-сайте. В числе прочих я написал знаменитому среди фанатов Minix Брюсу Эвансу и Ари Лемке. Я выложил исходники самой Linux и еще несколько бинарников, чтобы можно было хоть что-то делать. Я сказал, что нужно, чтобы запустить все это хозяйство. На машине должна была стоять Minix (версия 386) и нужен был компилятор GCC. Причем на самом деле нужна была моя версия GCC, поэтому ее я тоже выложил.

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

Я стал распространять свою операционку прежде всего, чтобы доказать, что все это не пустая болтовня — я действительно что-то сделал. В Интернете много болтают. О чем бы ни шла речь — об операционке или о сексе — многие в киберпространстве просто вешают лапшу на уши. Поэтому важно после того как ты растрезвонил, что пишешь операционку, иметь возможность сказать: «Вот — я ее и правда сделал. Я не трепло — можете сами посмотреть».

При чем здесь пингвины?

Кто и когда придумал для новой операционной системы название и логотип? Линус с самого начала хотел назвать свою операционную систему FREAX. Вот и работали бы мы сейчас на FREAX'ax. Если не верите — найдите в Интернете файл kernl/Makefile ядра версии 0.11.

А название "Linux" получилось следующим образом. Ари Лемке отвел место на FTP-сервере под исходные коды новой системы. Он назвал каталог с новой операционной системой pub/OS/Linux, Впоследствии именно это название за ней и закрепилось.

А логотип Linux придумали в 1996 году. Тогда в рассылке linux-kernel mailing list прозвучала идея о выборе логотипа для Linux. Сами понимаете, желающих заняться разработкой логотипа — предостаточно, поэтому различных вариантов было много. В процессе обсуждения логотипа Линус сказал, что ему нравятся пингвины. В ответ на это было предложено множество пингвинов в разных позах. Был также вариант пингвина, держащего на руках земной шар. На это Линус ответил: «бедный пингвин не так силен, чтобы удержать земной шар, он, пожалуй, будет раздавлен… Так что если вы думаете о «пингвине», вы должны представлять себе слегка растолстевшего сидящего пингвина, хорошо поевшего и отрыгнувшего. Он сидит с довольной улыбкой — мир кажется прекрасным, если вы только что съели несколько галлонов свежей рыбы…».

Логотип Linux — полностью соответствует пожеланию Линуса. Логотип создал Ларри Ивинг (Larry Ewing), причем он нарисовал его прямо в Linux с помощью программы GIMP (The GNU Image Manipulation Program). Если вы хорошо знаете зоологию (или хотя бы видели пингвинов по телевизору), то, наверное, заметили, что у настоящих пингвинов клюв и ласты — черные, а у нашего пингвиненка — оранжевые. Это сделано специально, чтобы пингвин был узнаваем.

Рис. 6. Символ Linux

Путь к первой версии (1.0)

Нумерация версий Linux началась с 0.01, и путь к стабильной версии 1.0 занял почти три года.


Версии ядра Linux до версии 1.0 Таблица 1

Версия Дата выхода Особенности версии
0.01 17.09.1991 Только ядро, включающее драйвер диска и несколько драйверов устройств. Программ не было. Практически система использоваться не могла
0.03 26.10.1991 В системе уже запускалась командная оболочка и компилятор С. Систему уже можно было использовать и писать в ней новые программы
0.10 12,1991 Система поддерживала AT-жесткий диск. Программы login не было — после загрузки ядра сразу загружалась оболочка bash.
0.11 12.1991 Уже что-то. Эта версия поддерживала FDD, многонациональные клавиатуры, мониторы VGA, EGA, Hercules. Самое главное, что системой начали пользоваться — ее загрузили и установили несколько человек
0.12 05.01.1992 Появилась подкачка — свопинг оперативной памяти на диск. Систему скачало насколько сотен человек. Это первая версия системы, которая распространялась по лицензии GPL
0.96 04.1992 Нет, я не пропустил насколько версий. Просто нумерация была изменена в связи с приближением к стабильной версии. Данная версия позволяла запускать систему X Window — у Linux появился графический интерфейс
0.99.14 12.1993 А вот здесь я пропустил определенное количество подверсий версии 0.99 — их описывать просто нет смысла
1.0 16.04.1994 Первая версия! С момента выхода версии 0.01 прошло 2 года и 7 месяцев

В апреле 1992 года Орест Збровски перенес на Linux систему X Window. Это был настоящий прорыв — но не из-за того, что у Linux появился графический интерфейс, а потому что обмен между X-клиентом и X-сервером осуществлялся с помощью UDS — UNIX Domain Sockets. Coкеты позволили использовать сеть в Linux. Система «повзрослела», что вдохновило Торвальдса на изменение нумерации версий. Вот что он сам пишет но этому поводу: «мы с большим воодушевлением принялись разрабатывать сети для Linux поверх этих самых Domain Sockets, хотя они вовсе не были для этого предназначены. Я был настолько уверен, что все получится, что даже сделал скачок в нумерации версий. В марте 1992 года я планировал выпустить версию 0.13. А вместо этого, получив графический интерфейс пользователя, уверился, что мы на 95% достигли цели — выпуска полноценной, надежной операционной системы, пригодной к тому же для работы в сети. И поэтому выпустил версию 0.95.»

Разработка сетевой подсистемы — дело довольно сложное. Именно поэтому у версии 0.99 так много подверсий. Версия 1.0 уже могла использоваться в сети.

Они создавали Linux

Линусу помогало много энтузиастов, но на первых порах особенно важен вклад следующих добровольцев:

♦ Вернер Альмесбергер (Werner Almesberger) — разработал драйверы FDD и загрузчик Linux — LILO (Linux LOader);

♦ Теодор Тсо (Theodore Ts'o) — создал файловую систему ext2 (у меня эта файловая система использовалась до конца прошлого года!), библиотеки, распределитель памяти ядра;

♦ Дональд Беккер (Donald Becker) — занимался разработкой сетевых драйверов;

♦ Олаф Кирч (Olaf Kirch) — написал руководство по сетевому администрированию Linux;

♦ Питер Мак-Дональд (Peter McDonald) — разработал поддержку загружаемых модулей в версии 0.99. Правда, в современных версиях ядра этот механизм полностью переделан;

♦ Пол Гортмейкер (Paul Gortmaker) — разработал драйвер RTC (Real Time Clock), несколько сетевых драйверов (в т.ч. NE-2000), написал документы «Linux Ethernet HOWTO» и «Boot-Prompt HOWTO».

Первые дистрибутивы

Если системой заинтересовались, значит, ее нужно распространять. Сейчас Linux распространяется в виде так называемых дистрибутивов. Но первые версии распространялись по-другому. Версии 1991 года помещались на двух дискетах, копии которых можно было скачать с сервера университета в Хельсинки. Первая дискета была загрузочной — на ней было ядро. Вторая содержала корневую файловую систему и основные утилиты. Установка и конфигурирование первых версий системы было очень сложным занятием. Установить систему мог только эксперт в UNIX.

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

Первые дистрибутивы появились в 1992 году, когда Линус выпустил ядро Linux по Стандартной Общественной лицензии GNU (GPL). Независимые разработчики (группы программистов) начали выпускать свои дистрибутивы Linux: они разрабатывали программы установки, программы управления пакетами, прикладные программы. Ясно, что каждый дистрибутив выпускался под своим именем.

Первый дистрибутив, созданный в феврале 1992 года Оуэном Ле Бланк (Owen Le Blanc), назывался MCC Interim Linux (Manchester Computing Centre — Манчестерский компьютерный центр). Любой желающий мог загрузить этот дистрибутив с FTP-сервера MCC. Чуть позже сотрудники университета Техаса разработали дистрибутив TAMU.

А в октябре 1992 года появился дистрибутив Softlanding Linux System (SLS), созданный Питером Мак-Дональдом (Peter McDonald). Важность этого дистрибутива заключается даже не в том, что это первый дистрибутив, содержавший систему X Window и поддержку TCP/IP. SLS — это прямой предок всемирно известного дистрибутива Slackware.

«Размножение дистрибутивов»

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

♦ На дискетах (только сейчас вместо дискет используются CD и DVD);

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

С удешевлением CD-ROM дистрибутивы начали распространяться на CD. Первыми компаниями, распространявшими дистрибутивы на CD, были: InfoMagic, Morse Telecommunication, Nascent, Red Hat Software, Trans-Ameritech, Walnut Creek и Yggdrasil Computing Inc. Один CD — намного удобнее двух-трех десятков дискет (средний размер первых дистрибутивов был около 50 Мб). К тому же на CD можно было записать много дополнительной информации: дополнительные программы, коды ядра и приложений, систему X Window, документацию и пр. Диск с дистрибутивом стоит от 20 до 40 долларов, а дистрибутив на дискетах — 20 долларов. Как видите, разница небольшая (если не считать стоимости односкоростного CD-ROM, который тогда стоил 100 долларов).

Первое, что вы должны помнить о версии дистрибутива — то, что версия дистрибутива почти никогда не совпадает с версией ядра. Например, взять версию дистрибутива Mandrake 10.1 — она содержит версию ядра 2.6. Точно также было и с первыми дистрибутивами: дистрибутив мог называться XXX 2.0 release, но содержать версию ядра 1.0, что создавало определенную путаницу.

О дистрибутивах можно говорить очень долго. Сегодня существует три основных дистрибутива: Red Hat, Slackware и Debian. Все остальные дистрибутивы являются производными от этих трех дистрибутивов. На наших просторах более популярны RH-совместимые дистрибутивы (Mandrake, ALT Linux, ASP Linux), поэтому мы остановимся только на этих дистрибутивах, точнее только на дистрибутиве Red Hat, поскольку, если описывать историю каждого (или более или менее известного) дистрибутива, можно написать книгу толще, чем та, которую вы держите в руках.

Компания Red Hat была основана Марком Ивингом (Marc Ewing) в 1994 году, а в 1995 году была куплена компанией АСС Bookstores, принадлежавшей Бобу Янгу (Bob Young). Дистрибутивы от Red Hat пользовались большой популярностью, поскольку они были достаточно надежны (их смело можно было устанавливать даже на серверы), обладали удобной программой установки и удобными средствами конфигурирования системы. Red Hat — это самая большая коммерческая компания, которая занимается только ОС Linux.

Давайте рассмотрим этапы развития дистрибутивов Red Hat (источником информации послужил сайт компании Red Hat — http://fedora.redhat.com/about/history/).


История дистрибутивов Red Hat Таблица 2

Дата Версии Описание
29 июля 1994 Просто бета-версия Первая бета-версия, основанная на ядра версии 1.1.18 и системе управления пакетами RPP (разработка Red hat). Данная версия поставлялась на CD, на котором кроме всего прочего поставлялась полная документация к этой системе. Не получила широкого распространения. Данная версия называлась «Red Hat Software Linux»
31 октября 1994 RHL 0.9 (Halloween) Первая бета-версия, получившая широкое распространение. Пользователи могли выбрать два ядра — стабильное (1.0.9) или экспериментальное (1.1.54). В этой версии появился графический интерфейс к программе rpp — LIM (Linux Installation Manager). Кроме LIM в этой версии появились графические программы настройки ОС: управления пользователями и группами, файлом fstab и сетью
май 1995 RHL 1.0 (Mother's Day) Первый релиз (не бета-версия). Построена на ядре 1.2.8. В документации она называлась не "Red Hat Software Linux", a «Red Hat Commercial Linux». Очевидно, изменение название произошло после покупки компании Rad Hal фирмой АСС Bookstores. Логотип этой версии содержал «красную шляпу» — на логотипе был изображен мужчина, несущий в одной руке красную шляпу, а в другой — портфель
Август 1995 RHL 2.0 beta Отличительная особенность этой версии — поддержка формата исполнимых файлов ELF (Executable Linkage Format), до этого использовался формат "a.out". Система управления пакетами RPP была заменена системой RPM. в результате чего была полностью не совместима с предыдущими версиями
20 сентября 1995 RHL 2.0 То же самое, но не бета-версия. Дистрибутив использует систему RPM
23 ноября 1996 RHL 2.1 В этой версии были исправлены некоторые ошибки предыдущей. На основе этой версии компания Digital создала диск «Red Hat 2.1 LINUX» (для x86-компьютеров), который послужил основой для созданий RH для платформы Alpha («Red Hat Linux/Alpha 2.1»)
Март 15, 1996 RHL 3.0.3 (Picasso) Первая многоплатформенная версия. Поддерживались архитектуры x86 и Alpha. Для Альфы использовался формат исполнимых файлов a.out, а для x86 — ELF. В этой версии появился X-сервер Metro-X, утилита настройки принтера и оболочка glint для программы rpm.
июль-август 1996 RHL 3.0.4/3.95 (Rembrandt) Система RPM переписана на С (до этого она была написана на Perl). Появились новые средства конфигурирования, модуль РАМ (Pluggable Authentication Modules). Благодаря переходу на ядро версии 2.0 появилась возможность использовать модули ядра, а до этого на дисках дистрибутива RH поставлялось 72 варианта ядер, из которых пользователь должен был выбрать наиболее подходящее его «железу»
3 октября 1996 RHL 4.0 (Colgate) Ядро — 2.0.1B. Поддерживаются уже три архитектуры: x86, Alpha и SPARC. Впервые на Alpha используется формат ELF. Изменен логотип дистрибутива, который используется до сих пор — $$$intro.tif
3 февраля 1997 RHL 4.1 (Vanderbilt) Исправляла ошибки предыдущей версии
19 мая 1997 RHL 4.2 (Biltmore) Отличалась использованием стабильной, хотя и устаревшей, версии libc 5.3. Использование устаревшей версии себя оправдало: в версии 5.4 обнаружилось очень много ошибок
27 августа– 16 сентября 1997 RHL 4.8/4.8.1/4.95 (Thunderbird) Использовалась библиотека glibc 2.0.
7–16 октября 1997 RHL 4.9/4.9.1/4.96 (Mustang) Исправлены ошибки, связанные с переходом на другую версию C-библиотек (с libc на glibc)
1 декабря 1997 RHL 5.0 (Hurricane) Этот дистрибутив включал программу резервного копирования ВRU2000-РЕ™ и клиент для Real Audio™
1 июня 1998 RHL 5.1 (Manhattan) Особенности этого дистрибутива; графическая среда GNOME (но не устанавливалась по умолчанию), единая утилита конфигурации — linuxconf, браузер Netscape (до этого использовался браузер Red Baron, содержавший много ошибок).
12 октября 1998 RHL 5.2 (Apollo)
17 марта 1999 RHL 5.9 (Starbuck)
19 апреля 1999 RHL 6.0 (Hedwig) Среда GNOME наконец-то интегрирована в дистрибутив. Ядро 2.2, glibs 2.1. Это первый мой RH-дистрибутив. Запомнился как отличный стабильный дистрибутив. У меня до сих пор есть компакт-диск с этим дистрибутивом.
6 сентября 1999 RHL 6.0.50 (Lorax) Новый инсталлятор системы anaconda мог работать как в текстовом, так и графическом режимах.
4 октября 1999 RHL 6.1 (Cartman) -
27 марта 2000 RHL 6.2 (Zoot) ISO-образы этой версии были доступны на FTP-сервере Red Hat
25 сентября 2000 RHL 7.0 (Guinness) Б составе дистрибутива была новая версия библиотеки glibc 2.2 и последняя версия gcc 2.96. Включение версии gcc 2.96 не было согласовано с разработчиками gcc, что вызвало небольшой конфликт между ними и компанией Red Hat
31 января 2001 RHL 7.0.90 (Fisher) Первая версия, использующая ядро 2.4
16 апреля 2001 RHL 7.1 (Seawolf) Впервые появилась поддержка большого количества языков (дистрибутив поддерживал даже китайский и японский языки). Вместе с Netscape поставлялся браузер Mozilla
2-21 августа 2001 RHL 7.1.93, 7.1.94 (Roswell) По умолчанию использовалась новая версия файловой системы — ext3 вместо ехt2. А вместо LILO начал использоваться загрузчик GRUB. Хотя при установке можно было выбрать LILO, если GRUB пользователю не нравился
22 октября 2001 RHL 7.2 (Enigma) Довольно неплохая версия, она «прожила» на моем компьютере до версии 7.3. Правда, в ней были некоторые ошибки, которые были исправлены в версии 7.3. Особенности: GNOME 1.4, KDE 2.2. Послужила основой для дистрибутива Red Hat Enterprise Linux 2.1 AS (Advanced Server).
22 марта 2002 RHL 7.2.91 (Skipjack)
6 мая 2002 RHL 7.3 (Valhalla) Выход версии 7.3 не планировался — сразу должна была выйти версия 8.0. Поэтому версию 7.3 нужно рассматривать как «переходную» версию. В версии 8.0 должны быть gcc3, GTK+ 2, Python 2 и другие новые версии инструментальных средств. Но они «опаздывали» к запланированному сроку выпуска версии 8.0, поэтому было решено выпуск версии 8.0 немного отложить, а вместо нее выпустить версию 7.3 без всех этих нововведений. Но в версии 7.3 все же были исправлены некоторые ошибки версии 7.2. Я лично работал с этим дистрибутивом, и он мне понравился даже больше, чем 8.0. Это последний дистрибутив, содержавший браузер Netscape
6 мая 2002 RHEL 2.1 AS (Pensacola) Red Hal Enterprise Linux 2.1 AS — дистрибутив, предназначенный для корпоративного применения. Его основа — дистрибутив RH 7.2
30 сентября 2002 RHL 8.0 (Psyche) В этой версии были gcc 3.2, glibc 2.3, GNOME 2, KDE 3.0.3 и OpenOffice.org 1.0.1
31 марта 2003 RHL 9 (Shrike) Основан на ядре 2.4.20 с поддержкой NPTL (Native POSIX Thread Library). Послужил основой для Red Hat Enterprise Linux 3
21 июля 2003 RHL 9.0.93 (Severn) Это последняя версия «Красной Шапочки» — после этого дистрибутивы стали называться Fedora Core (для настольных систем) и RHEL (для корпоративного применения). Fedora Core — это открытый (читайте — бесплатный) проект, a RHEL — коммерческий проект от RH
25 сентября 2003 FC 0.94 (Severn) Пробная версия Fedora Core
13 октября 2003 FC 0.95 (Severn) Первый дистрибутив от RH, использующий репозиторий yum для обновления системы
22 октября 2003 RHEL 3 (Taroon) Red Hat Enterprise Linux 3 поддерживал одновременно 7 архитектур: Intel x86, Intel Itanium, AMD AMD64, IBM zSeries, IBM iSeries, IBM pSeries и IBM S/390. Основан на ядре 2.4.21
5 ноября 2003 FC 1 (Yarrow) Первый релиз Fedora Core, используется пока что ядро 2.4 — в последний раз
12 февраля; 29 марта; 27 апреля 2004 FC 1.90, 1.91, 1.92 Первые версии, использующее ядро 2.6. Поддерживаются архитектуры x86 и x86-64
5 марта 2004 FC 1 (Yarrow) Fedora Core 1 для x86-64
18 мая 2004 FC 2 (Tettnang) Второй релиз Fedora Core; KDE 3.2, GNOME 2.6
8 ноября 2004 FC3 (Heidelberg) Третий релиз Fedora Core. GNOME 2.8 и KDE 3.3. Довольно «глючное» создание, до недавнего времени обитавшее на моем компьютере
13 июня 2005 FC 4 (Stentz) Четвертый релиз Fedora Core. GNOME 2.10 и KDE 3.4 Довольно много нововведений

Дистрибутив Red Hat Linux имеет множество потомков — производных дистрибутивов, которые основаны на RH и практически полностью с ним совместимы. Самыми известными потомками RH являются:

♦ Linux Mandrake (версия MDK 5.1 была основана на RH 5.1) — а на MDK основан ALT Linux;

♦ Black Cat (Версия BC 5.2 основана на RH 5.2) — впоследствии BC перерос в ASP Linux.

Выбор дистрибутива

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

Строго говоря, название Linux принадлежит только ядру. Другие компоненты ОС Linux и прикладные программы для нее разрабатываются не какой-то одной компанией, а независимыми группами программистов, работающих на условиях Стандартной Общественной Лицензии (General Public License; ее русский перевод можно прочитать по адресу http://rus-linux.net/MyLDP/histori/gpl/gplrus.html). Эта лицензия обязывает ее держателя бесплатно предоставлять исходный код распространяемого им программного обеспечения, так что теоретически каждый может легально скачать с публичного сервера тексты программ, скомпилировать и собрать их на своем компьютере и получить готовую к установке операционную систему.

Если вы решитесь собрать Linux с нуля, то прочитать руководство можно по адресу www.linuxfromscratch.org (русский перевод: multilinux.sakh.com). Если нет — то покупайте дистрибутив. Необходимость платить деньги вовсе не противоречит некоммерческой идеологии Linux; поставщик дистрибутива продает не код, а только услуги по его записи на носитель, доставке, установке, технической поддержке и т.п.

На сегодня существуют и поддерживаются разработчиками сотни разных дистрибутивов, различающихся по области применения, версии ядра, составу включенных в них прикладных программ, требованиям к аппаратному обеспечению и другим признакам. Классификации этого многообразия посвящены статьи В.Костромина и А.Федорчука в Библиотеке ЛинуксЦентра по адресу www.linuxcenter.ru/lib/articles/distrib.

Можно с уверенностью утверждать, что каждый начинающий пользователь Linux столкнется или уже столкнулся с проблемой выбора среди такого изобилия. Какой дистрибутив лучше? Чем отличается Red Hat от Mandrake? Некоторых начинающих пользователей этой замечательной ОС вводят в заблуждение имена дистрибутивов, например, LinuxXP. Вот они его и покупают, а потом полностью разочаровываются в Linux. Не скажу, что LinuxXP очень плохой дистрибутив, но у начинающего пользователя будет меньше проблем с полной, а не облегченной, версией какого-нибудь «серьезного» дистрибутива, например, Linux Mandrake или Fedora Core.

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

Прежде всего нужно определиться, для чего вам нужен Linux. Хотите ли вы глубоко изучать эту операционную систему? Или, быстро освоив ее, заменить ею Windows в своем офисе, чтобы избежать визитов «борцов с компьютерным пиратством»? Или, может быть, вам нужно настроить сервер для выхода вашей локальной сети в Интернет? Многие компании выпускают дистрибутивы, адаптированные под любое из указанных применений.

Следующий вопрос — совместимость с имеющимся у вас оборудованием: установится ли выбранный дистрибутив на ваш компьютер? А если установится, то не откажется ли работать, например, с модемом? Не секрет, что долгое время разрыв по количеству поддерживаемых устройств между Windows и Linux был попросту вопиющим. Сегодня ситуация значительно выровнялась. Нынешние дистрибутивы неплохо распознают современное оборудование — процессоры, чипсеты, IDE-, SCSI- и USB-устройства. Практически наверняка не возникнет проблем даже с TV-тюнерами и приводами CD-RW.

Правда, почти у всех дистрибутивов не сложились отношения с Windows-модемами. Ситуация обусловлена тем, что производители не спешат предоставить информацию по своим продуктам для создания Linux-драйверов. Первая попытка поддержки Windows-модема была сделана компанией ALT Linux, на сайте которой есть пакет hsf, обеспечивающий работу устройств на чипе Connexant. В Интернете можно также поискать драйверы для других модемов, скажем, Motorola.

Примерно то же самое относится и к GDI-принтерам. Их производители неохотно поддерживают Linux, во многих случаях приходится надеяться исключительно на энтузиастов. Относительно благополучно дела обстоят разве что с оборудованием компании Oki.

В целом же ситуацию с аппаратным обеспечением можно подытожить таким образом: со «средним» оборудованием, не слишком старым и не самым новым, существенных проблем возникнуть не должно. Для новейших, дорогих и «навороченных» устройств могут поддерживаться лишь их базовые функции, то есть деньги, заплаченные вами за усовершенствования, окажутся потрачены впустую. Поэтому стоит предварительно изучить список совместимых устройств и базовую комплектацию (как минимум версию ядра и графической системы XFree86) каждого конкретного дистрибутива. Обычно эту информацию легко найти на сайте разработчика: например, для Red Hat это hardware.redhat.com/hcl.

Что касается минимальных системных требований, то малыми ресурсами могут обойтись лишь дистрибутивы, предназначенные к установке на компьютеры, обслуживающие сеть (шлюзы, интернет-серверы), которые в графическом режиме работать не должны. Для дистрибутивов же, ориентированных на домашнее или офисное применение, официальные данные (как и в случае с Windows) занижаются беззастенчиво. Да, на машине с Pentium 133 и 32 MB RAM можно запустить Linux, но не работать. Pentium 200 MMX и 64 MB больше похожи на правду, но если вы планируете использовать оконную среду KDE 3, то и 128 MB памяти не окажутся лишними. В противном случае применяйте менее ресурсоемкую среду GNOME. Дополнительно нужно учитывать потребности прикладных программ, которые сами по себе могут быть весьма немаленькими.

Одно из правил, которое следует всегда помнить: ОС Linux гораздо более требовательна к объему оперативной памяти, чем к частоте процессора: Pentium III 600 МГц/32 Мб будет работать гораздо медленнее, чем Celeron 400 МГц/64 Мб.

Следует позаботиться и о видеосистеме — она должна обеспечивать (как минимум) комфортную работу с разрешением 1024×768. Дело в том, многие Linux-приложения проектировались исключительно для данного режима, поэтому при использовании 800×600 могут возникнуть затруднения (часть окна просто не будет видна).

Потребности в дисковом пространстве вполне стандартны по нынешним временам. Минимальная конфигурация требует 300–500 Мбайт, однако новичкам рекомендуется сразу устанавливать определенный набор прикладных программ, для которого требуется около 1,5 Гбайт. К тому же нужно оставить место для документов и рабочих файлов, так что в качестве отправной точки вполне подойдут два гигабайта.

Я перечислю несколько дистрибутивов, которые купить можно, но сначала скажу о тех, которые покупать категорически не советую. Не нужно покупать экзотические дистрибутивы вроде LinuxXP и Lindows (он же Linspire). Правда, последний дистрибутив — редкость в интернет-магазине, но если вы его все-таки найдете, то не вздумайте покупать. Не верите мне? Тогда купите его. Вы поймете, что даром потратили свои деньги и время.

В некоторых интернет-магазинах дистрибутивы Linux ставятся в один ряд с дистрибутивами FreeBSD. Так вот, FreeBSD покупать не стоит — во всяком случае, если вы не хотите купить еще одну книгу, но только по FreeBSD. Да, FreeBSD является дальним родственником Linux, но начинающему Linux-пользователю лучше с FreeBSD не связываться.

Вы смело можете покупать Linux Mandriva (в прошлом — Linux Mandrake) и Fedora Core 4 (в прошлом — Linux Red Hat), а также дистрибутивы, так или иначе основанные на них — это ALT Linux 2.4, ASP Linux 10. Также смело можете купить не очень новую, но проверенную версию Linux Mandrake 10 — очень хороший дистрибутив.

Вы можете купить дистрибутив Knoppix, но не как основной дистрибутив, а как вспомогательный, который вы сможете использовать как средство восстановления системы, когда в очередной раз вы переустановите Windows или же после неудачного эксперимента с загрузчиком Linux перестанет загружаться. Особенность Knoppix в том, что он может загружаться и нормально работать с компакт-диска.

Дистрибутивы Debian и Slackware Linux — очень хорошие, стабильные и проверенные временем, но вам их лучше не покупать, поскольку они основаны на BSD-системе инициализации, которая ближе к миру BSD и в этой книге подробно не рассматривается. Конечно, если вы можете себе позволить еще одну книгу — по Slackware — то можете его купить. Но все-таки Slackware несколько сложнее в освоении, поэтому я рекомендую попробовать этот дистрибутив после того, как вы научитесь работать с Mandrake или Fedora Core. То же самое относится и к SuSe — немецкому дистрибутиву со своими, немецкими, особенностями. Лично мне больше нравятся французский дистрибутив Mandrake.

Дистрибутив Gentoo, о котором много говорили определенное время назад, хорош тем, что позволяет настроить систему «под себя» в прямом смысле этого слова. Все устанавливаемые программы компилируются на вашем компьютере, а не устанавливаются из RPM-пакетов, содержащих уже откомпилированные на чужой машине двоичные файлы. Это главное достоинство этого дистрибутива, но оно же является и его главным недостатком — Gentoo начинающим пользователям противопоказан.

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

Теперь давайте рассмотрим дистрибутивы Linux Mandrake, Fedora Core 3 и Slackware Linux поближе. Первые два рассматриваются, чтобы у вас была возможность сравнить, a Slackware — чтобы вы поняли, почему его вам не нужно покупать (во всяком случае — пока).

Смотреть на дистрибутивы я буду глазами начинающего пользователя, поэтому не удивляйтесь, что я не буду приводить рекомендации по исправлению той или иной ошибки — начинающий пользователь не знает, как ее исправить. Во время установки и работы с системой буду проводить небольшие тесты: а именно, сколько времени занимает процесс установки, сколько — загрузка системы, копирование файла и т.д. Время буду измерять не какой-нибудь программой, а обычным секундомером, встроенным в мобильник — это же домашние условия. Все дистрибутивы тестировались на следующей рабочей лошадке: Duron 1,6 GHz/256MB/HDD 40 GB 7200 rpm Maxtor/128 MB GeForceFX.

Итак, начнем наш обзор. И начнем его с классики, то есть с дистрибутива Fedora Core.

Fedora Core 3 Установка

Дистрибутив Fedora Core 3 поставляется на четырех компакт-дисках, но программа установки, если не отмечать какие-нибудь дополнительные пакеты, а оставить все как есть, требует только первые три компакт-диска.

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

Программа установки спросила меня, хочу ли я протестировать установочные диски. Как начинающий и ничего не понимающий в установке Linux пользователь, я согласился. Да мне и не хотелось «убивать» нормально работающий и уже установленный Linux Mandrake в случае, если что-то с компакта не скопируется, ведь FC3 должен быть установлен на его место.

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

Программа установки очень удобна и проста — даже у начинающего пользователя не будет с ней проблем. Выбираю Выборочную установку и ручное разбиение дисков. Даже если вы — начинающий пользователь, я настоятельно рекомендую сделать то же. Ведь если выбрать другой тип установки, ваш винчестер будет переразбит, что приведет к потере всех ваших данных и установленной Windows вместе с ними. Здесь у меня будет небольшая погрешность в измерениях — ведь у меня уже есть созданные Linux-разделы, я только изменил тип файловой системы с ext2 на ext3 и выбрал форматирование этих разделов. Если у вас никогда еще не был установлен Linux, вам понадобится дополнительное время на создание разделов и изменения границ уже имеющихся разделов.

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

Следующий шаг — выбор программного обеспечения. Ведь я — начинающий пользователь, поэтому не знаю, что и для чего используется. Просто оставляю все как есть. Как пользователь понимающий, нужно заметить, что FC3 по умолчанию использует среду GNOME, a KDE вообще даже не предлагается устанавливать.

Появляется окно «Запуск процесса установки…» и я перезапускаю секундомер. До этого весь подготовительный этап занял 7 минут и 31 секунду (7:31).

Рис. 7. Установка Fedora Core 3

Началось копирование пакетов на мой жесткий диск. Таймер программы-инсталлятора при копировании бессовестно врал: показывал 15 минут до вставки второго диска, а после этого момента стал показывать 10 минут, хотя прошло больше чем 5 минут. Четвертый диск в моем случае (все пакеты — по умолчанию) не понадобился. Установка (до появления окна перезагрузки компьютера) заняла 15 минут и 38 секунд (15:38).

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

Вторая перезагрузка

Сразу перезагружаю систему. Запускаю секундомер (с момента начала загрузки ядра). Запуск системы (до окна ввода имени пользователя и пароля) занял на моей машинке всего 1 минуты и 8 секунд. Запуск GNOME занял еще 7 секунд.

Начинаю работать с системой. Обновленный GNOME (версия 2.8.0) мне очень понравился. Первым делом я попытался выяснить, что же все-таки случилось с моей звуковой платой. Поскольку я начинающий пользователь, на ум мне не пришло ничего другого, кроме проверки уровня громкости. Ааа! Так все же устройства выключены, вот поэтому я и не слышал звук! Включаю, устанавливаю максимальную громкость. Запускаю проигрыватель компакт-дисков и вставляю Extra CD. GNOME предложил мне или открыть диск (чтобы просмотреть дорожку данных) или же воспроизвести (аудио-дорожки). Мелочь, а приятно. Выбираю воспроизведение. Все равно звука нет. В общем, звуковую карточку я пока оставил в покое. Пока посмотрю, что же нового в системе.

Во время исследования файловой системы, я обнаружил, что файловые системы Windows (а у меня 4 Windows-раздела), не подмонтированы. Подмонтировать вручную особого труда не составляет, но что, если человек впервые видит Linux, и еле справился с установкой ОС, он ведь не знает, что есть команда mount! Но это уже другой вопрос — как говорится, RTFM перед установкой.

Посмотрим, сколько места осталось после установки системы. Это можно выяснить программой df. Я устанавливал систему на раздел /dev/hda5, а раздел /dev/hda6 использовал для каталога /home. Сама система (/dev/hda5) заняла 2446188 блоков по 1 Кб, то есть 2 388 Мб. На разделе /dev/hda6 место практически не использовалось, поскольку при установке я не создавал пользователей.

Программное обеспечение

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

Рис. 8. Photo Tool

Также понравился обновленный GIMP 2.0.5, хотя с ним делал только скриншоты, его интерфейс стал более красивым и удобным (рис. 9).

Рис. 9. Панель инструментов The GIMP2.0.5

Хочу просмотреть видео. Пусть и без звука. Запускаю Helix Player — именно этот проигрыватель используется в FC3 для просмотра видео. Открываю файл, который без проблем воспроизводился в MDK, и вижу картину "The player does not have the capabilities to play back this content". Больше комментариев нет.

Далее все как обычно — Open Office, Project Planner. Диаграммы DIA, утилиты настройки системы. Стоп! Кажется, в группе Интернет есть что-то новенькое — Firefox Web Browser. Запускаю. Как следует из названия, данный браузер основан на Mozilla. Только почему-то на английском.

Исследовав опции, я так и не нашел выбора языка интерфейса, скорее всего, для его русификации нужно доустановить какой-то пакет.

Тесты

Переходим к самому интересному — тестам. Тесты будут следующими: тест чтения блока данных с помощью hdparm, тест на время копирования большого файла с раздела FAT32 в раздел ext3 и копирование этого же файла из одного раздела ext3 в другой раздел ext3. Хотел запустить привычный мне Midnight Commander, но его я не нашел и попытался установить с помощью утилиты «Управление пакетами». Данная утилита мне не понравилась. Она отлично подходит для начинающего пользователя, который и сам не знает, что он хочет установить. Мне же лучше было ввести имя пакета и установить его. К сожалению, в этой программе данной возможности не было.

Рис. 10. Управление пакетами

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

Рис. 11. Браузер файлов

У нас есть уже все необходимые программы для проведения тестов. Начнем по порядку — с hdparm. Запускаю Терминал (находится в меню Приложения→Система). Результат чтения блока размером в 174 Мб за 3,02 сек довольно неплохой — это около 57,68 Мб/с.

Теперь буду копировать файл размером ровно 700 Мб. Это фильм, который мне так и не удалось просмотреть. Получил такие результаты:

♦ Копирование с раздела FAT32 (/dev/hda10) на раздел ext3 (/dev/hda6): 2 мин 32 сек.

♦ Копирование с раздела ext3 (/dev/hda6) на раздел ext3 (/dev/hda5): 1 мин 04 сек.

Как видите, с «родными» разделами FC3 работает в два раза быстрее. Файловая система ext3 использовалась только потому, что при нормальной установке она предлагается по умолчанию — ее и выберет начинающий пользователь. Он же и не подозревает о наличии других файловых систем.

Все, обзор FC3 на этом заканчивается, и я решил выключить компьютер. При выключении вижу картину из серии «Не ждали»:

Power down

acpi_power_off called

И все. Так машинка простояла минут пять, пока я вручную не выключил питание. Лично я вспомнил времена Windows 95: «А теперь питание компьютера можно отключить… вручную».

Диагноз

Лично я так и не понял, для кого этот разрабатывался этот дистрибутив: для начинающих или для продвинутых пользователей. Если для начинающих, о чем свидетельствует дружественный интерфейс GNOME, то почему так много недоработок, с которыми начинающий справиться не в состоянии: неработающая звуковая плата (у меня довольно распространенная модель, поэтому такая неисправность будет наблюдаться не только у меня), ошибки при воспроизведении видео (очень актуальная задача для домашнего компьютера), не подключены файловые системы, а вдобавок ошибка при выключении питания? И это при том, что я поработал с системой какой-то час. Поработай я больше, даже не могу предположить, сколько недоработок я бы нашел в ней. Если же дистрибутив разрабатывался для продвинутых пользователей, почему нет привычных им программ (того же МС)? В любом случае я бы не рекомендовал этот дистрибутив начинающим пользователям. Сначала нужно поучиться на более легком дистрибутиве, у которого с самого начала все работает, а затем переходить на Fedora Core 3, если, конечно, захочется.

Fedora Core 4, к сожалению, попробовать не получилось, привожу только версии программного обеспечения, входящего в этот дистрибутив.

Преимущества Недостатки
Дружественный интерфейс GNOME 2.8.0 Проблемы с определением звуковой карты
Хороший выбор программного обеспечения Не хватает видео-кодеков
Удобная программа установки Проблемы с выключением питания
Новые версии GNOME и KDE По умолчанию не устанавливаются некоторые привычные программы
По умолчанию не подмонтируются файловые системы Windows
Требует самостоятельной донастройки после установки
Программное обеспечение
Fedora Core 3 Fedora Core 4 (**)
Ядро версия 2.6.9 Ядро версия 2.6.11
GNOME 2.8.0 GNOME 2 8 3
KDE 3.3.0 KDE 3.4.0
Open Office 1.1.2 Open Office 1.9.104
GIMP 2.0.5 GIMP 2.2.7
Загрузчик GRUB Загрузчик GRUB
Slackware

Вторым дистрибутивом я решил выбрать Slackware. Просто хотелось на него посмотреть: ведь до этого я видел его в работе только несколько раз. А тут еще и последняя на данный момент версия — 10.1. Дистрибутив поставляется на двух дисках.

Установка

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

Welcome to Slackware version 10.1 (Linux kernel 2.4.29)

Что? Неужели последний дистрибутив от Slackware основан на старом ядре? Возможно, разработчики посчитали, что новое им не нужно.

Так и есть: в состав Slackware и Debian включаются только старые добрые версии программного обеспечения, в том числе и ядра. Так разработчики пытаются создать стабильный дистрибутив, чтобы в нем не было различного рода недоработок.

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

Enter 1 to select a keyboard map

Неужели установка системы будет в текстовом режиме? Да еще и без меню. Ага, нет, меню все-таки появилось, но текстовое. Меню выбора раскладки клавиатуры содержит список файлов (!) раскладок безо всякого описания. Догадайся, мол, сам. Выбираю qwerty/ru.map и нажимаю Enter. Честно говоря, текстовая программа установки выглядит как-то архаично. Такое впечатление, что устанавливается одна из первых версий Red Hat. Уже в 6.0 версии Red Hat программа установки была намного удобнее, хотя она тоже работала в текстовом режиме. Затем система предложила ввести пароль пользователя root. На данный момент пароля нет, поэтому можно просто нажать Enter, что я и сделал. Система сообщила, что для изменения таблицы разделов можно ввести команду fdisk. Мне повезло — Linux-разделы у меня уже есть, а начинающему пользователю лучше вообще отложить эту затею и попросить кого-нибудь более знающего переразбить жесткий диск за него. Только на использование текстовой версии fdisk может уйти минут пять — это при условии, если знаешь, что делаешь. К тому же fdisk не умеет изменять размеры разделов без уничтожения всей информации. Поэтому лучше использовать для этой цели какую-нибудь другую программу, например, тот же Partition Magic для Windows. Да, есть в Slackware более удобная программа — cfdisk, но в программе установке о ней ни слова…

Для начала установки нужно ввести команду setup. Ввожу. Появляется меню программы установки. KEYMAP я уже выбрал, поэтому выбираю второй пункт ADDSWAP. Он позволяет установить раздел подкачки для вашей системы. У меня уже создан, поэтому программа запросила разрешения только активизировать этот раздел. После этого появилось текстовое окошко FORMAT, в котором нужно выбрать, какие Linux-разделы нужно форматировать, а также файловую систему. По умолчанию предлагается Reiser FS, но для равенства условий я решил выбрать ext3, чтобы результаты файлового тестирования были более объективными. Программа установки работает только на английском языке, поэтому если не знаете его. лучше вам попытаться установить другой дистрибутив.

Затем программа спросила, хочу ли я добавить найденные Windows-разделы в /etc/fstab. Соглашаюсь и добавляю 2 из четырех разделов — для экономии времени. После этого нужно выбрать источник установки, выбираю Slackware CD or DVD, а также опцию auto для автоматического определения диска.

Какие пакеты устанавливать? Выбираю full, то есть установку всех пакетов, чтобы не терять время на их выбор. До этого весь подготовительный процесс занял 6 минут и 6 секунд. У вас, скорее всего, этот показатель будет другим. А если у вас еще нет Linux-разделов, то можно смело умножить это время на 2.

Время копирования пакетов с двух компактов заняло 13 минут и 10 секунд. После копирования пакетов программа установки настраивает шрифты, документацию и выполняет другие действия. На все про все ушло 53 секунды.

Вот мы и добрались до самого интересного. Программа установки не знает, откуда брать ядро. Она предлагает несколько вариантов: bootdisk, Slackware CD и др. Причем первый — по умолчанию. Я его и выбрал, просто механически так получилось. Программа попросила вставить загрузочную дискету в дисковод /dev/fd0. У меня не только нет этой дискеты, но и самого дисковода. Отказаться — никак. Пришлось, не долго думая, нажать Reset и повторить весь процесс заново. Правильный вариант — Slackware CD. Затем — список ядер. Какое устанавливать? Я выбрал ядро, которое использовалось при установке:

/cdrom/kernel/bare.i/bzImage

Следующий этап — просто анекдотический. Программа хочет создать загрузочный диск, который она запрашивала на предыдущем этапе. Во как. Я отказался от этой возможности. После этого я также отказался от использования НОТPLUG-устройств. Для экономии времени.

Настройку загрузчика LILO я производил вручную. Не полагаясь на интеллектуальные возможности программы, я выбрал expert и ввел все параметры вручную. LILO установил в MBR. Затем добавил две записи: Linux (/dev/hda5) и Win (/dev/hda1). Обычно эти параметры указываются автоматически — но это в нормальных программах установки… Для инсталляции LILO выбрал команду меню Install LILO.

После этого нужно указать различные параметры системы — тип мыши, параметры сети (я их не устанавливал), выбор запускаемых сервисов (оставил как есть). Потом программа спросила, хочу ли я добавить свои собственные консольные шрифты. А откуда ж они у меня? Ясно, что я отказался от этого. Затем — параметры времени (UTC или не UTC, выбор региона, я выбрал Europe/Kiev).

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

Последний этап — ввод пароля root. Все. Перезагружаться сами не захотели — мол, уже не маленькие, знаете, как Ctrl+Alt+Del нажимать. Нажимаю заветную комбинацию, и система перезагружается. С момента выбора ядра до перезагрузки прошло 4 минуты и 51 секунда.

Загружаюсь. Система встретила меня голой консолью. Ввожу имя пользователя root и свой пароль. Все. Для запуска X Window (ну и KDE) нужно ввести startx. Некоторые пользователи Linux, даже которые уже использовали эту ОС, и не подозревают о существовании такой команды.

Вторая перезагрузка

Я перезагружаю систему, чтобы вычислить время второй загрузки. Оно составило 22 секунды до появления приглашения ввести имя пользователя и пароль и еще 22 секунды на запуск X Window и KDE. Итого 44 секунды. После установки на разделе размером 3 Гб осталось 473 Мб свободного места.

Программное обеспечение

В этом дистрибутиве используется новая версия KDE — 3.3.3 и еще более новая, чем в FC3, версия GIMP — 2.2.3.

KDE русифицировать никак не удалось. Я установил все пакеты, а из доступных языков был только английский. И кому нужен такой дистрибутив?

Существенным недостатком, на мой взгляд, является отсутствие пакета OpenOffice. Вместо него установлен K Office 1.3.4.

Рис. 12. Рабочий стол KDE 3.3 (Slackware)

Тесты

А вот тут началось самое интересное. Результат hdparm такой же, как и у FC3. 174 Мб скопировалось за 3,01 секунды. При копировании того же самого 700-Мбайтного фильма я получил следующие результаты:

♦ Копирование с FAT32-раздела на ext3-раздел: 1 мин 12 сек (!)

♦ Копирование с ext3-раздела на ext3-раздел: 0 мин 31 сек

Вот вам и ядро 2.4. Разница с FC почти в два раза: Slackware в два раза быстрее работает с файлами, чем Fedora Core. Файловая система одна и та же — ext3. Уже и не знаешь, куда отнести версию ядра 2.4 — к преимуществам или недостаткам. Никуда не буду относить. Будем считать это особенностью данного дистрибутива.

Диагноз

Неудобная текстовая англоязычная программа установки сразу отпугнет начинающих пользователей. Отсутствие Open Office и поддержки русского языка тоже не в сторону выбора дистрибутива. Зато это компенсируется быстрой работой файловой системы и более быстрым запуском системы: 44 секунды против 1 минуты и 15 секунд у FC3. Этот дистрибутив можно порекомендовать квалифицированным пользователям, знающим толк в Linux — уж они-то смогут довести его «до ума». И вообще, учитывая особенности этого дистрибутива, он больше подходит для установки на сервере, чем на рабочей станции.

Преимущества Недостатки
Дружественный интерфейс KDE 3.3 Неудобная, текстовая и англоязычная программа установки
Высокая производительность файловой системы Нет поддержки русского языка. Ее обеспечить можно, но начинающему пользователю придется потратить на это уйму времени
Быстрая загрузка системы Отсутствует пакет Open Office
Программное обеспечение
Ядро версия 2.4.29
GNOME 2.6.2
KDE 3.3
Open Office — отсутствует
GIMP 2.2.3
Загрузчик LILO
Linux Mandrake 10.1

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

Установка

Как и Fedora Core 3, Mandrake поставляется на четырех компакт-дисках. Все четыре диска нужны при установке — даже если не отмечать дополнительные пакеты.

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

Весь подготовительный процесс в моем случае (напомню, что я не создавал разделы — они уже были созданы) занял всего 2 минуты и 1 секунду. На копирование пакетов, выбранных по умолчанию, понадобилось всего 7 минут и 2 секунды. После копирования пакетов на указание дополнительных параметров (я оставил все по умолчанию, только добавил одного пользователя) понадобилось 1 минута и 12 секунд. Итого на установку системы понадобилось 10 минут и 15 секунд (!)

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

Вторая перезагрузка

Вторая загрузка (с запуском X Window и автоматическим входом пользователя) заняла 42 секунды. После установки осталось свободным 2,1 Гб дискового пространства.

Программное обеспечение

На четырех компакт-дисках Linux Mandrake вы найдете все необходимое программное обеспечение — от офисных приложений до простых игрушек. Для меня наиболее важны офисный пакет OpenOffice 1.1.0 и графический редактор GIMP 1.2.5. Версия GIMP не очень новая, но это поправимо — всегда можно загрузить новейшую.

Рис. 13. Рабочий стол

Рис. 14. Windows-разделы сразу правильно подмонтированы

Рис. 15. Воспроизведение фильма

В качестве оконной среды по умолчанию используется KDE версии 3.2 — довольно удачная и быстрая версия.

С воспроизведением видеофайлов нет никаких проблем — все фильмы, имеющиеся у меня на Windows-разделах, были воспроизведены проигрывателем Totem — даже те, для которых я в Windows выкачивал из Интернета дополнительные кодеки.

Тесты

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

♦ Hdparm: 174 Мб прочитано за 3,02 секунды, скорость чтения 57,55 Мб/с;

♦ Копирование 700-Мбайтного файла с FAT32-раздела на ext3-раздел: 01:26;

♦ Копирование 700-Мбайтного файла с ext3-раздела на ext3-раздел: 0:36.

Диагноз

Linux Mandrake — отличный дистрибутив для начинающих пользователей. После установки системы пользователь получает «готовую к употреблению» рабочую среду. Все, что ему нужно настроить (и то, только если он это не сделал при установке системы) — это настроить сеть и/или подключение к Интернету. Никаких особых проблем ни при установке, ни при работе с дистрибутивом не возникло.

Преимущества Недостатки
Простая и быстрая установка Особых недостатков нет, если не считать немного устаревших версий GNOME и GIMP
Хороший выбор программного обеспечения
После установки система полностью готова к работе и не требует донастройки
Нет проблем ни со звуком, ни с видео-кодеками
Программное обеспечение
Linux Mandrake 10 Linux Mandriva 2005 (*)
Ядро версия 2.6.3 Ядро версий 2.6.11.6
GNOME 2.4.1 GNOME 2.9.3
KDE 3.2 KDE 3.3.2 с поддержкой функций 3 4 0
Open Office 1.1.0 Open Office 1.1.4
GIMP 1.2.5 GIMP 2.2.5
Загрузчик GRUB Загрузчик GRUB
Примечание

Linux Mandriva Limited Edition 2005 — это первый выпуск популярного дистрибутива после слияния компаний MandrakeSoft и Conectiva. В этом дистрибутиве есть очень много интересного — от полной поддержки контроллеров Adaptec до поддержки игровых консолей Xbox.

Разное

ASP Linux

Если вы не достанете Mandrake (что маловероятно), установите ASP Linux (www.asplinux.ru) — вам понравится. Своей отлаженностью и стабильностью он произвел на меня очень приятное впечатление.

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

ASP Linux также выделяется улучшенной поддержкой украинского языка и возможностью легкой смены кодировки (koi8-r, koi8-u, cp1251, iso8859-5). Естественно, в состав дистрибутива входят OpenOffice и другие традиционные Linux-приложения. Неожиданностью для меня стало наличие антивируса (eSafe от компании Aladdin), а включение в дистрибутив бухгалтерского программного обеспечения (от компании Hansa) — явление просто уникальное. Имеется также масса вспомогательных средств, например, система автоматического обновления, автоопределение приводов CD-RW и DVD и т.п.

Наиболее полный дистрибутив версии 7.3 «Восток» распространяется на десяти (!) компакт-дисках, среди которых три установочных, два с исходными текстами, по одному с документацией, играми и пользовательскими приложениями. На отдельном CD-ROM поставляется полная версия Acronis OS Selector 8.0, еще один диск содержит демонстрационные версии серверных приложений.

В коробочную поставку ASP Linux входят печатные руководства «Быстрый старт», «Руководство по инсталляции», «Руководство пользователя», «Руководство администратора», которые фактически освобождают пользователя от необходимости приобретения дополнительной литературы по Linux.

К тому же на Documentation CD, кроме традиционных FAQ и HOWTO от группы Linux Documentation Project, содержатся и их переводы, выполненные командой ASP Linux и сторонними переводчиками. Просмотр электронной документации обеспечивается через удобный гипертекстовый интерфейс.

На момент написания книги уже вышла десятая версия этого отличного дистрибутива.

ALT Linux

Использовать для обучения дистрибутив ALT Junior 2 я не рекомендую — уж слишком все там просто. Так вы уподобитесь иным пользователям Windows, которые привычно переустанавливают ОС при малейших затруднениях. Зато этот дистрибутив прекрасно подойдет, если вы хотите заменить Windows в офисе или дома — поставьте и не мучайтесь. В нем имеется полный комплект «стандартных» офисных приложений, приложения для работы в Интернете, проигрыватели MP3 и MP4, поддерживаются цифровые камеры, USB-принтеры и много чего еще. Сразу после установки практически все это будет уже настроено, останется лишь изменить имя компьютера и параметры PPP-соединения. Интересно, что при этом ALT Junior 2 очень компактен, все необходимое ПО уместилось фактически на одном компакт-диске, на втором размещены исходные тексты и дополнительные средства разработки.

Что еще хорошо в этом дистрибутиве, а точнее, в политике компании ALT Linux (www.altlinux.ru), так это сопровождение — обновления появляются регулярно и оперативно. Скажем, версия 2.0 отличалась некоторой нестабильностью работы, однако вскоре вышел доработанный Junior 2.1.

Дистрибутив ALT Master предназначен для пользователей, уже знакомых с Linux. Он также создает впечатление более стабильного и надежного, чем ALT Junior. К тому же в коробочной версии вы найдете целых шесть компакт-дисков с различным программным обеспечением для Linux, в том числе — популярный эмулятор VMWare, который позволяет запускать одну ОС внутри другой.

Говоря о локализации, зачастую подразумевают только перевод интерфейса и возможность ввода символов национального алфавита и напрочь забывают о документации. Компания ALT Linux демонстрирует более цельный подход и в этом вопросе: в комплект стандартной поставки ALT Junior 2 входит печатное руководство по установке операционной системы. Хотя, на мой взгляд, в нем не хватает иллюстраций, с его помощью новичку будет гораздо проще инсталлировать ОС. Кроме того, в нем содержится краткая информация по установке дополнительных программ и обновлений.

В состав коробочной версии дистрибутива ALT Master входят четыре (!) прекрасных печатных руководства: по инсталляции ОС, администратора и пользователя, а также отдельное по OpenOffice. Можно с уверенностью сказать, что на первое время этой литературы более чем достаточно. А если учитывать, что руководства составлены разработчиками ALT Linux и все описанные в них примеры ориентированы на «родной» дистрибутив, то им и вовсе цены нет.

Говоря о политике компании ALT, невозможно не упомянуть Sisyphus — ежедневно обновляемый репозиторий пакетов программного обеспечения. Все дистрибутивы ALT Linux созданы на его основе. Для чего это нужно? Если у вас есть постоянный доступ к Интернету, вы можете настроить ваш дистрибутив на ежедневное обновление пакетов — тогда ваша система всегда будет поддерживаться в «актуальном состоянии» и вам не нужно будет периодически устанавливать новые версии — все будет происходить автоматически.

Конечно, автоматическое обновление имеет свои преимущества и недостатки — вы же обновляете программное обеспечение, а не простую базу данных. Новое программное обеспечение может содержать новые функции, что является положительной стороной, но и «подводные камни»: никто не знает, сколько ошибок было внесено в программу при исправлении уже известных ошибок и добавлении новых функций. Лично я никому не доверяю обновлять свою систему (это даже недопустимо с точки зрения безопасности), поэтому предпочитаю покупать и устанавливать новые версии дистрибутивов. Впрочем, если в ваш дистрибутив какой-то пакет не включен, в репозитории Sisyphus вы, скорее всего, его найдете.

Подробнее о Sisyphus вы сможете прочитать по адресу www.altlinux.ru.

SuSE Linux

SuSE Linux — немецкий дистрибутив компании Novell. Это очень хороший, надежный дистрибутив с «немецким качеством». Чего стоит только тот факт, что разработчик этот дистрибутива — компания Novell — разработала одну из самых надежных сетевых операционных систем Novell Netware. Ранние версии SuSE грешили недружелюбием по отношению к русскому языку, но в последних версиях этот недостаток искоренен. Последние версии SuSE можно порекомендовать не только опытным (как это было с предыдущими версиями), но и начинающим пользователям Linux. Последняя на момент написания этих строк (9.2) версия SuSE содержит:

♦ ядро версии 2.6.8;

♦ KDE версии 3.3.0;

♦ Open Office 1.1.3 — популярный офисный пакет, аналог MS Office;

♦ KOffice 1.3.3 — еще один офисный пакет;

♦ The GIMP 2.0.4 — мощнейший графический редактор, аналог PhotoShop;

♦ много другого полезного программного обеспечения.

Версия 9.2 поставляется на пяти компакт-дисках — как видите, дистрибутив не маленький (для сравнения: Mandrake 10 поставляется на четырех CD).

Подробно об этом дистрибутиве вы сможете узнать по адресу www.suse.com, а если заинтересуетесь, то можете купить его в любом интернет-магазине.

Knoppix

Эта разработка Клауса Кноппера (www.knopper.net/knoppix) — самый лёгкий и быстрый способ познакомиться с Linux. Дистрибутив поставляется на одном-единственном компакт-диске и может работать прямо с него, без установки на компьютер. Хотя при желании вы можете и установить его на жесткий диск, а дополнительные программные пакеты скачивать из архива на www.debian.org. Да, этот дистрибутив основан на Debian, т.е. не родствен Red Hat.

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

Самая свежая на момент написания этой книги версия дистрибутива — Knoppix 3.8.1 — продается в интернет-магазине knoppix.ru за 99 рублей.

Debian

Debian — это целая линия развития Linux, альтернативная Red Hat и не слишком совместимая с ней. Среди лидирующих дистрибутивов Debian — единственная полностью некоммерческая система. Если разработкой Red Hat занимается Red Hat Software, а за Slackware стоит Walnut Creek, то дистрибутив Debian/GNU Linux создает и поддерживает группа энтузиастов — строго в духе движения за открытые исходники. Не зря его предпочитает Ричард Столлмен, лидер Фонда Свободного Программного Обеспечения.

Debian — настоящая энциклопедия свободных программ: в его состав входит более 15490 пакетов заранее скомпилированного программного обеспечения, которые можно бесплатно скачать с www.debian.org/distrib/packages. Там же предлагаются дополнительные пакеты, которые нельзя включать в основной дистрибутив, потому что их лицензии не соответствуют принятому в этой группе определению бесплатного программного обеспечения (с правом дальнейшего распространения, наличием исходных текстов, разрешением их модификации и использования в качестве основы новых разработок). Система управления пакетами у Debian собственная, похожая на Red Hat'овскую только внешне.

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

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

Глава 1 Установка операционной системы

1.1. Подготовка жесткого диска

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

Примечание

Существует несколько определений файловой системы. Для себя вы можете выбрать одно из нижеприведенных — они оба вполне корректны.

Файловая система — часть операционной системы, обеспечивающая выполнение операций над файлами.

Файловая система — способ организации и представления битов на жестком диске.

Разделом называется участок жесткого диска, к которому можно обратиться как к отдельному диску, что достигается использованием таблицы разбиения жесткого диска (partition table). Эта таблица записана в самом начале диска и подразделяется на 4 секции, содержащие характеристики 4 возможных разделов: их расположение, тип и отметку об активности. Отметка об активности используется загрузчиками некоторых ОС, в частности, Windows может быть загружена только из «активного» раздела.

Эти 4 раздела называются первичными (primary). Один из разделов может иметь тип «расширенный» (extended). Такой раздел содержит собственную таблицу разбиения на один или несколько разделов, называемых логическими (logical). Таким образом, пространство жесткого диска может быть структурировано удобным вам способом.

Итак, на вашем диске достаточно места для установки Linux, но все это место находится в активно используемом разделе, содержащем ОС Windows и все данные. Вы можете:

♦ Полностью переразметить диск.

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

 1. Убедитесь, что у вас есть компакт-диск, с которого можно переустановить исходную ОС;

 2. Создайте резервную копию всех своих данных;

 3. Разбейте диск на разделы с помощью утилиты fdisk от Windows;

 4. Восстановите свои данные и возвращайтесь к установке Linux.

♦ Уменьшить имеющийся большой раздел с сохранением данных.

Существует несколько программ, позволяющих это сделать. В предыдущие дистрибутивы Red Hat входила утилита fips, умевшая работать с разделами FAT и FAT32, но не NTFS. Она все еще доступна по адресу http://www.igd.fhg.de/~aschaefe/fips, но в современные дистрибутивы обычно не включена. Вместо нее лучше воспользоваться программой PartitionMagic от Symantec Norton, понимающей все типы файловых систем. Ваши действия:

 1. Уплотните существующие данные (дефрагментируйте ваш диск), чтобы увеличить свободное место в «конце» раздела.

 2. Уменьшите размер раздела, создав на диске неразмеченное пространство.

 3. Создайте новые разделы. Можете отложить этот шаг до этапа установки Linux: инсталляторы современных дистрибутивов (в частности, Fedora Core и Mandrake) вызывают специальную программу для работы с разделами диска.

1.1.1. Рекомендуемая схема разбиения диска

♦ Раздел подкачки или свопинга (swapping) — используется виртуальной памятью. Иными словами, данные, не умещающиеся в оперативной памяти, перемещаются на жесткий диск. Например, у вас в данный момент свободно всего 8 Мбайт оперативной памяти, а вы пытаетесь открыть документ размером в 16 Мбайт. В оперативную память при этом будут загружены первые несколько мегабайт, а все остальное будет находиться во внешней памяти. Когда вам потребуется перейти в конец документа, операционная система подкачает в память нужные данные, а неиспользуемые будут помещены во внешнюю память. Размер раздела подкачки должен быть не меньше 32 Мбайт. Обычно его размер равен удвоенному объему оперативной памяти.

♦ Раздел /boot — содержит ядро операционной системы и несколько файлов, используемых при загрузке. Необходимость этого раздела вызвана «барьером 1024 цилиндра», то есть тем, что BIOS большинства персональных компьютеров «не видит» цилиндров с номерами больше 1024. Рекомендуемый размер этого раздела — 100 Мбайт.

♦ Корневой раздел, содержащий файлы, необходимые для работы системы и прикладных программ;

♦ Раздел /home для пользовательских данных.

1.1.2. Имена разделов в ОС Linux

Linux представляет наименования разделов как имена файлов, в виде /dev/xxyN, где:

♦ /dev — это каталог, в котором расположены все файлы, связанные с устройствами;

♦ xx — две буквы названия раздела, указывающие тип устройства, на котором размещается раздел. Как правило, это либо hd (если это IDE диск), либо sd (для SCSI дисков);

♦ y — буква, описывающая само устройство, на котором находится раздел. Например, /dev/hda (первый IDE жесткий диск) или /dev/sdb (второй SCSI диск);

♦ N — число, обозначающее непосредственно раздел. Первичные разделы нумеруются числами с 1 по 4. Нумерация логических разделов начинается с 5, даже если первичных разделов меньше четырех.

Таким образом, /dev/hda2 — это второй первичный раздел на первом диске IDE, a /dev/sdb5 — это первый логический раздел на втором диске SCSI.

1.1.3. Разделы и точки монтирования

С логической точки зрения файловая система каждого раздела представляет собой отдельное дерево каталогов. Объединение их в общую иерархическую структуру с одним корнем достигается путем ассоциирования раздела с одним из каталогов, содержащихся в корневом каталоге. Эта операция называется монтированием (mounting). Монтирование раздела дает доступ к нему через указанный каталог, называемый точкой монтирования (mounting point).

Например, если раздел /dev/sdb5 был смонтирован как /home/ivan/doc, то все файлы и каталоги, находящиеся в /home/ivan/doc, физически будут размещаться на /dev/sdb5. А файлы, находящиеся в /home/ivan/doc/Russian, — на /dev/sdb6, если назначить каталог Russian точкой монтирования для раздела /dev/sdb6.

1.2. Загрузка программы установки

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

Самый удобный и уже самый распространенный способ. Первый диск любого дистрибутива — загрузочный. Вставьте его в дисковод, перезагрузите компьютер, войдите в BIOS Setup и сделайте CD-привод первым в последовательности загрузки.

Некоторые дистрибутивы (например, Mandrake 10.0) предлагаются на DVD, с которыми нужно поступать точно так же (если, конечно, у вас есть соответствующий привод).

1.2.2. С использованием загрузочной дискеты

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

1. Скопируйте каталоги dosutils и images на жесткий диск (желательно на С:).

2. Перезагрузите компьютер в режиме MS DOS.

3. Введите команду rawrite (если вы — на свой страх и риск— предпочитаете работать в Windows, то пользуйтесь командой rawritewin):

С:\>с:\dosutils\rawrite

На запрос программы

Enter disk image source file name:

введите:

с:\images\boot.img — для обычной установки или

с:\images\bootnet.img — для установки по сети.

А затем на предложение программы ввести диск назначения введите имя дискеты:

Enter destination drive:

а:

4. Вы получили загрузочную дискету. Вставьте ее в дисковод и перезагрузите компьютер.

Внимательно прочитайте INSTALL.TXT в корневом каталоге CD, загляните также в каталог images и прочитайте файл README. Инструкции по установке обычно находятся там.

1.2.3. С использованием жесткого диска

Если вы скачали образы компакт-дисков дистрибутива, то можете прожечь их на CD и устанавливать так, как сказано в п. 1.2.1. Когда скорость вашего CD-привода слишком мала (например, 4x), имеет смысл разместить ISO-образы на жестком диске, а с CD только загружаться. Загрузочный образ находится в каталоге images на первом диске дистрибутива и называется boot.iso.

Если какой-то вариант Linux у вас уже установлен, то вы можете извлечь этот файл из файла образа, смонтировав этот образ:

$ mount -о loop -t iso9660 <файл_iso> <точка_монтирования>

Прожгите файл boot.iso на компакт-диск и загрузитесь с этого компакт-диска.

Если ваш BIOS поддерживает загрузку с USB-устройств, то вы можете скопировать на USB-диск загрузочный образ images/diskboot.img с первого диска дистрибутива. Из-под Linux это можно сделать так:

$ dd if=diskboot.img of=/dev/sda1

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

Если вы загружаетесь с дистрибутивного CD, но устанавливать собираетесь с жесткого диска, то в ответ на приглашение загрузчика

boot:

введите тот вариант загрузки, который позволяет выбрать устройство (в дистрибутиве Fedora Core эта директива называется askmethod). Укажите инсталлятору раздел диска и каталог, в котором находятся образы дисков дистрибутива.

1.2.4. Установка по сети

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

Рис. 1.1. Установка RedHat по протоколу FTP

1.3. Установка Fedora Core

1.3.1. Описание дистрибутива

Название проекта Fedora Core не имеет никакого отношения к знакомому нам с детских дет произведению К.И. Чуковского «Федорино горе». Fedora Core является наследницей линейки RedHat (бесплатной), a Fedora означает фетровая шляпа (против Красной Шапочки RedHat)

Fedora Core Linux — это наследник культового дистрибутива Red Hat Linux, созданный сообществом добровольцев Fedora Project (http://www.redhat.com/fedora) при участии и спонсорской поддержке компании Red Hat. Дистрибутивы Fedora Core содержат только новейшие версии программного обеспечения. Лучшие решения, найденные командой разработчиков Fedora, Red Hat включает в программное обеспечение, поставляемое в ее коммерческих дистрибутивах Enterprise Linux.

Несмотря на это, Fedora Core — не тестовая площадка для энтузиастов, а полноценный дистрибутив, пригодный для домашнего, офисного или серверного применения. Дистрибутив включает удобную программу для установки и полный набор приложений — офисные пакеты, браузеры и web-сервера, мультимедийные средства и инструменты разработчика ПО. Fedora Core Linux может легко соседствовать с MS Windows как на одном компьютере, так и в локальной сети, а офисный пакет OpenOffice позволяет без проблем открывать, редактировать и сохранять документы в форматах MS Word и MS Excel.

Версии Fedora Core — 1, 2, 3 и 4. Системные требования

На момент написания этой книги вышло четыре версии дистрибутива Fedora Core. Первая версия работала еще недостаточно стабильно. Во второй замечен довольно неприятный баг, мешающий сосуществованию Fedora Core 2 и Windows, особенно Windows XP, на одном компьютере: после установки FC2 на некоторые жесткие диски Windows перестает загружаться. Данные в разделах Windows при этом не портятся, но для того, чтобы Windows снова стала распознавать эти разделы, требуется вручную реконфигурировать жесткий диск. В третьей версии этот баг устранен, однако появилось множество других. Так что рекомендуется использовать вторую версию вместо третьей. В последней, четвертой версии FC ошибки предыдущих версий были исправлены. Так что что в качестве рекомендации могу посоветовать именно ее.

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

Команда разработчиков Fedora Project обещает выпускать новые версии дистрибутива 2-3 раза в год. Вы можете следить за новостями на странице http://fedora.redhat.com.

Системные требования всех версий обычны для современных дистрибутивов:

♦ процессор класса не ниже Pentium (Pentium 200 МГц для работы в текстовом режиме, Pentium II 400 МГц или лучше — для работы с графикой);

♦ память: не менее 64 Мб для текстового режима, не менее 192 Мб (рекомендуется 256 Мб) для графического;

♦ пространство на диске зависит от выбранного типа установки:

♦ 620 Мб — минимальная установка;

♦ 1.1 Гб — сервер;

♦ 2.3 Гб — настольный компьютер;

♦ 3.0 Гб — рабочая станция;

♦ 6.9 Гб — полная установка.

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

Вторая версия Fedora Core отличается от первой следующими новинками:

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

♦ Новая версия системы X Window X11R6.7.0.

♦ Новая версия оконной среды GNOME (2.6), которая работает значительно быстрее предыдущей.

♦ Новая версия оконной среды KDE (3.2.2), в которой исправлены некоторые проблемы, включая проблемы с переводом интерфейса.

♦ Xfce 4: легкое и быстрое окружение рабочего стола.

♦ Поддержка технологии Subversion 1.0, которая должна заменить технологию CVS.

♦ Реализация системы безопасности SELinux.

В третьей версии добавлены или обновлены:

♦ Новая версия оконной среды GNOME 2.8.0.

♦ Новая версия оконной среды KDE 3.3.0 (к сожалению, пока только на английском).

♦ Клиент электронной почты Evolution 2.0.

♦ Дополнительная «целевая» политика безопасности SELinux, следящая не за всеми операциями, а только за определенными демонами.

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

В четвертой версии Fedora Core, появившейся 13 июня 2005 г. можно отметить следующие особенности:

♦ Ядро версии 2.6.11.

♦ Fedora Core 4 стала первым дистрибутивом, скомпилированным с помощью четвертого компилятора GNU С (GCC).

♦ Новая версия системы X Window X11R6.7.0.

♦ Новые версия оконных сред: GNOME 2.10 и KDE 3.4.0.

♦ Кластерная файловая система GFS 6.1.-0.pre22.

♦ Универсальный просмотрщик документов Evince 0.2.1.

♦ Существенно улучшенная и расширенная целевая политика безопасности SELinux (дополнительно стали покрываться еще 80 демонов).

♦ Eclipse 3.1М6. — полнофункциональная среда Java-разработок.

♦ Некоторые приложения оказались из дистрибутива изъяты. В четвертой версии FC вы не найдете exim, XFce 4, медиаплеера xmms и даже KOffice. Разработчики пошли, на мой взгляд, вполне правильным путем и стали помещать в дистрибутивы только приложения, лучшие в своей функциональной категории. Например, возможности XFce 4 с лихвой покрываются возможностями KDE и GNOME, так зачем же из дистрибутива делать свалку программ. При этом, если вам нужна какая-то программа, отсутствующая в дистрибутиве, вы всегда сможете ее бесплатно скачать.

Детальную информацию о новинках и нововведениях в четвертой версии можно узнать по адресу www.rhd.ru/docs/manuals/fedora/4/RELEASE-NOTES-ru.html.

Специальная технология разграничения доступа SELinux

SELinux (Security Enhanced Linux) — это технология, позволяющая лучше защитить ваш компьютер от взлома и непродуманных действий пользователей. Технология SELinux работает совместно с механизмом нрав доступа в Linux, позволяя администратору ввести дополнительные правила доступа к файлам.

Работает это так: если права доступа запрещают доступ к файлу, запрос отклоняется сразу. Если же права доступа разрешают доступ к файлу, настает черед SELinux. Система SELinux проверяет текущие правила работы с данным файлом для запросившего его процесса, запустившего процесс пользователя и выполняемой им «роли» (например, сам администратор может запретить себе доступ к критически важным ресурсам, когда он не в административной роли. Тогда даже украденный пароль root не слишком поможет злоумышленнику). Если правила SELinux не разрешают доступ к этому файлу, операция отклоняется. Как видите, SELinux — это еще один барьер в системе безопасности вашего сервера (или просто домашнего компьютера).

Кроме ограничения доступа к файлам, с помощью SELinux можно ограничивать действия отдельных пользователей, групп пользователей, процессов. Подробно о SELinux на русском языке вы сможете прочитать по адресу http://www.opennet.ru/base/sec/intro_selinux.txt.html.

1.3.2. Особенности установки различных версий Fedora Core

Fedora Core 2: подготовка к совместной жизни с Windows

Если вы собираетесь держать на одном компьютере ОС Windows и Fedora Core 2, то не торопитесь устанавливать FC 2. Дело в том, что программа-инсталлятор этой версии дистрибутива по-своему определяет параметры физической разметки жесткого диска. После того, как эти параметры будут занесены в таблицу разделов, Windows перестанет распознавать диск. Чтобы обойти эту ошибку, нужно помешать инсталлятору автоматически определять параметры разметки диска, указав их вручную.

Для определения геометрии диска (цилиндры, головки и секторы, CHS) служит утилита fdisk, входящая в любой дистрибутив Linux. Если никакого Linux у вас еще не установлено, то загрузитесь с первого компакт-диска устанавливаемого дистрибутива и в ответ на приглашение загрузчика введите параметр ядра rescue:

boot: linux rescue

Будет загружено средство восстановления операционной системы. Выберите язык, раскладку клавиатуры и нажмите кнопку Continue. В командной строке введите команду:

fdisk -l /dev/hda

(/dev/hda — это ваш загрузочный жесткий диск, на который вы собираетесь устанавливать Linux).

Программа fdisk выведет среди прочей информации сведения о количестве цилиндров, головок и секторов (CHS) вашего диска, как показано на рис. 1.2.

Рис. 1.2. Информация о геометрии диска

Затем перезагрузитесь с первого компакт-диска (Ctrl+Alt+Del) и в ответ на приглашение загрузчика введите геометрию диска:

boot: linux hda=C,H,S

где С — количество цилиндров, H — количество головок и S — количество секторов.

В нашем случае строка загрузки Linux будет выглядеть так:

linux hda=2438,255,63

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

Примечание

Не следует пытаться определять геометрию диска с помощью BIOS, так как способы определения CHS у ОС Linux и BIOS отличаются, и вы можете указать неправильную информацию. Для определения CHS нужно использовать только fdisk!

Если вы поспешили и уже установили Fedora Core 2, в результате чего ваша Windows XP перестала загружаться, обратитесь к сайту Red Hat. По адресу http://www.redhat.com/archives/fedora-devel-list/2004-May/msg00908.html вы сможете прочитать рекомендации по решению проблемы загрузки Fedora + XP.

Особенности и преимущества процесса установки Fedora Core 4

Собственно особенностей то никаких и нет — все стандартно. А среди преимуществ, на которые упирают даже сами разработчики — это наличие подробнейшего руководства по установке Fedora Core 4.

1.3.3. Установка загрузчика

На одном из этапов установки (в некоторых дистрибутивах — ближе к началу, в других — к концу) программа-инсталлятор позволит вам выбрать и установить загрузчик. Стандартными загрузчиками Linux служат LILO (LInux LOader) или GRUB (GRand Unified Boot loader). Сейчас я не буду описывать достоинства и недостатки этих загрузчиков, а только скажу, что я бы выбрал LILO: он мне больше нравится. Потом вы сможете сменить загрузчик в любой удобный для вас момент. Программа установки спросит вас, куда установить загрузчик:

♦ В MBR (Master Boot Record — Главная загрузочная запись);

♦ В первый сектор раздела Linux;

♦ Не устанавливать загрузчик вообще.

Если вы не планируете загружать Linux посторонним загрузчиком, например, загрузчиком Window NT — NTLoader, то устанавливайте загрузчик в MBR. В этом случае загрузчик получит управление сразу после загрузки компьютера, и вы сможете выбрать любую из установленных на вашем компьютере операционных систем.

Рис. 1.3. Выбор загрузчика

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

Последний вариант — Не устанавливать загрузчик — следует использовать, если вы хотите загружать Linux с дискеты.

1.3.4. Продолжение установки

Выберите класс установки (рис. 1.4).

Рис. 1.4. Выбор класса установки

Класс «Персональный компьютер» подойдет для начинающих пользователей. Будут установлены: графический интерфейс, очень похожий на привычный рабочий стол ОС Windows, и программы, необходимые для домашнего использования компьютера или для организации домашнего офиса. Этот набор программного обеспечения будет занимать около 1.5 Гбайт на жестком диске, а если вы установите сразу две оконных среды (GNOME и KDE), то такой вариант займет около 1.8 Гбайт.

Класс «Рабочая станция» подойдет, если вы планируете использовать свой компьютер в локальной сети или для разработки программного обеспечения. Класс «Рабочая станция» занимает около 2 Гбайт на жестком диске, а если вы хотите установить данный класс с возможностью выбора графической среды (KDE или GNOME), то такой вариант займет около 2.3 Гбайт.

Класс «Сервер» нужно использовать, если вы хотите установить и настроить сервер на основе ОС Linux. Будет установлено все необходимое для организации сервера программное обеспечение. Графический интерфейс по умолчанию не устанавливается. Минимальный размер установки — 1.3 Гбайт и еще около 900 Мбайт, если графический интерфейс вам все-таки нужен.

Я рекомендую вам выбрать класс установки «Выборочная», даже если вы — начинающий пользователь. Этот класс позволяет более гибко настроить вашу систему еще на стадии установки, точно определить устанавливаемые пакеты и их размер.

После выбора класса установки программа поинтересуется, как вы будете разбивать жесткий диск: автоматически или с использованием программы Disk Druid. Если вы сомневаетесь — выберите автоматическое создание разделов.

Рис. 1.5. Уточнение параметров автоматического разбиения

При выборе автоматического разбиения программа попросит вас уточнить параметры разбиения:

♦ Удалить все Linux-разделы (Remove all Linux Partitions).

♦ Удалить все разделы (Remove all Partitions).

♦ Оставить все разделы и использовать свободное место (Keep all partitions).

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

Если вы выберете возможность просмотра автоматически созданных разделов, то следующий шаг установки вы сделаете с программой разметки диска Disk Druid (рис. 1.6).

Рис. 1.6. Программа Disk Druid

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

Для редактирования параметров раздела предназначена функция Изменить. Она позволяет изменить точку монтирования раздела, его тип и размер. Если раздел уже был создан на диске, то программа Disk Druid не в состоянии изменить его размер. Для изменения размера нужно удалить этот раздел и создать заново, но с другими параметрами.

Для создания Linux-раздела нам нужно удалить один из Windows-разделов. Желательно удалять тот, который вы создали с помощью программы Partition Magic, поскольку он не содержит данных. После удаления раздела на его месте нужно создать три раздела:

1. Linux Native (файловая система ext2 или ext3, точка монтирования /);

2. Linux Swap (точка монтирования не нужна);

3. Linux Native (файловая система ext2 или ext3, точка монтирования /home).

В таблице 1.1 представлена рекомендуемая схема разбиения единственного жесткого диска (/dev/hda) для установки на нем двух ОС: Linux и Windows.


Схема разбиения диска /dev/hda Таблица 1.1

Раздел Активный Тип/ФС Размер, Гб Комментарий
hda1 (диск С:) Да Первичный/vfat 1.5-2 Для самой Windows больше и не нужно, приложения можно поместить на диск D:
hda2 Расширенный Все оставшееся место На жестком диске может быть четыре первичных раздела. Дополнительные разделы следует помещать в расширенный раздел. Некоторые ОС (в частности. Windows) требуют, чтобы их раздел был обязательно первичным и активным. Linux может загружаться как с активных, так и с неактивных разделов
hda5 Логический/ext2 или ext3 2.5-3 Для корневой файловой системы Linux. Нумерация логических разделов начинается с 5!
hda6 Linux swap 128-256 Мб Не следует этот раздел помещать в конец диска, поскольку операционная система использует его в качестве раздела подкачки. Минимальный размер данного раздела — 32 Мб
hda7 Логический/ext2 или ext3 5-10 Для пользовательских данных — файловой системы /home
hda8 (диск D:) Логический/vfat Все оставшееся место Это диск D: — на него следует устанавливать программы Windows

Далее программа-инсталлятор предложит вам настроить сеть и брандмауэр (рис. 1.7) — эти шаги можно пропустить, оставив их настройку на потом. Систему безопасности SELinux обязательно выключите или, в крайнем случае, оставьте в режиме предупреждений — в этом режиме она не запрещает недопустимые с ее точки зрения действия пользователя, а протоколирует их.

Рис. 1.7. Настройка безопасности

Вы также можете выбрать дополнительные языки, установить дату и время и ввести пароль суперпользователя (пользователя root). Задаваемый пароль должен быть не короче 8 символов. При вводе символы не будут отображаться на экране. Категорически не рекомендуется использовать в качестве пароля что-то вроде 123456, qwerty, password и тому подобное. Подумайте о выборе пароля: он должен быть одновременно легким для запоминания и трудным для подбора. Осторожно! Забыв этот пароль, вы не сможете настраивать систему.

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

Теперь нужно выбрать пакеты программ для установки (рис. 1.8). Если вы хотите выбрать пакеты самостоятельно, установите переключатель «Уточнить наборы».

Рис. 1.8. Выбор групп пакетов

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

Обязательно создайте загрузочную дискету. Если вы в очередной раз переустановите ОС Windows, она поместит в MBR собственный загрузчик, который и не подумает загружать вашу ОС Linux. В таком случае загрузитесь с загрузочной дискеты, зарегистрируйтесь как пользователь root и введите команду grub (или lilo, если вы используете LILO).

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

Я рекомендую использовать графический вход в систему: при этом система X Window (графический интерфейс) будет загружаться автоматически, и вам не нужно будет запускать ее командой startx.

Все, установка завершена. Извлеките компакт-диск из привода и перезагрузите компьютер.

Загрузчик предложит вам список установленных у вас операционных систем. Выберите из него Linux. Если у вас двухпроцессорная машина, то следует выбрать пункт не Linux, a Linux-smp — это SMP-ядро, поддерживающее несколько процессоров.

1.4. Особенности установки Mandrake 10.0

Относительно недавно вышла версия 10.1 этого замечательного дистрибутива. В ее состав вошли средства для работы с WiFi и Bluetooth-устройствами, драйверы для ноутбуков Intel Centrino (на этой платформе производится большая часть ноутбуков). Что же касается программного обеспечения, входящего в дистрибутив, то в нем вы найдете:

♦ Ядро версии 2.6.8.

♦ Новые версии графических интерфейсов KDE 3.2.3 и GNOME 2.6.

♦ Компилятор gcc версии 3.4.1.

♦ Web-сервер Apache версии 2.0.50 и интерпретатор PHP 4.3.8.

♦ СУБД MySQL версии 4.0.18.

♦ Новую версию популярного офисного пакета OpenOffice — 1.1.3.

Загрузите с компакт-диска программу-инсталлятор. Когда появится экран приветствия, вы можете нажать <Ввод> для начала установки в обычном режиме или <F1> для выбора из списка дополнительных режимов (рис. 1.9).

Рис. 1.9. Дополнительные режимы установки

Эти режимы включают:

♦ vgalo — если у вас слабенькая видеоплата и вам нужно произвести установку системы при разрешении 640×480 (16 цветов);

♦ text — если вы хотите, чтобы программа установки работала в текстовом режиме;

♦ linux — самая обыкновенная установка;

♦ expert — режим эксперта (вы должны хорошо разбираться в «железе», чтобы устанавливать систему в этом режиме);

♦ rescue — если вы хотите восстановить уже установленную систему.

Вы также можете ввести дополнительные параметры, например,

linux mem=512M

После нажатия Enter будет запущена программа установки в нормальном графическом режиме, и система будет знать, что у вас установлено 512 Мб оперативной памяти.

В отличие от предыдущей версии Linux Mandrake, выбор класса установки ограничен двумя пунктами:

♦ Установка (Install)

♦ Обновление (Upgrade).

Если у вас установлен Linux Mandrake версии 8.1 или выше, вы можете его обновить до версии 10.0. Если же у вас установлена версия Mandrake древнее 8.1 или вообще другой дистрибутив, нужно выбрать пункт «Установка».

При выборе пункта «Установка» старая версия Linux Mandrake, если она была у вас установлена, будет уничтожена. В то же время, если вы хотите изменить разбиение диска или тип файловой системы Linux, вам нужно выбрать именно этот пункт.

Рис. 1.10. Выбор уровня безопасности

После выбора раскладки клавиатуры инсталлятор Linux Mandrake (который, кстати, называется DrakeX) предложит вам установить уровень безопасности. Помните, чем выше уровень безопасности, тем неудобнее работать в системе пользователю. Для домашней машины (на которой вы будете экспериментировать) подойдет средний уровень, а для сервера сети не лишним будет и повышенный. Не устанавливайте параноидальный уровень безопасности при установке системы: вам потом будет трудно ее настроить. Данный уровень подойдет для систем, относящихся к классу «поставил и забыл»: программных маршрутизаторов или шлюзов, администрирование которых не выполняется или выполняется очень редко. Обычно такие системы таятся где-нибудь в углу серверной комнаты и работают круглосуточно, например, передавая пакеты из одной локальной сети в другую.

Вы сможете полностью настроить систему, не дожидаясь для этого перезагрузки (рис. 1.9). Настройке поддаются:

♦ Раскладка клавиатуры (Keyboard)

♦ Страна (Country/Region)

♦ Часовой пояс (Timezone)

♦ Тип мыши (Mouse)

♦ Тип принтера (Printer)

♦ Тип звуковой платы (Sound card)

♦ Параметры видео подсистемы (Graphical interface)

♦ Параметры сети (Network)

♦ Уровень безопасности (Security level)

♦ Параметры брандмауэра (Firewall)

♦ Загружаемые сервисы (Services)

♦ Конфигурация начального загрузчика Linux (Bootloader)

♦ Параметры других устройств, например, ISDN-платы или TV-тюнера.

Рис. 1.11. Настройка параметров системы

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

Если вы хотите запускать систему X Window автоматически при загрузке Linux, нажмите кнопку Параметры (Options). Если же ваша система будет использоваться в качестве сервера, автоматическая загрузка X Window не нужна.

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

♦ IP-адрес этого компьютера и его имя, которое должно быть прописано на сервере DNS — эту информацию вы можете уточнить у администратора вашей сети;

♦ IP-адрес шлюза;

♦ IP-адрес сервера DNS.

Инсталлятор позволяет настроить традиционное соединение по модему, по локальной сети, ISDN/ADSL-соединения и даже выделенное соединение.

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

Рис. 1.12. Выбор служб, запускаемых при загрузке системы

Вы не знаете, что именно стоит отключить? Думаю, в этом вам поможет таблица 1.3 (см. п. 1.9).

Откажитесь от автоматического обновления системы, и установка завершена. Нажав кнопку Дополнительно, вы можете создать дискету для клонирования Linux. Эта дискета может понадобиться, если у вас есть несколько одинаковых компьютеров, на которые нужно установить Linux. Я же рекомендую создать эту дискету, даже если у вас всего один компьютер — дискета для клонирования существенно облегчит переустановку системы на этом компьютере. Конечно, вы не будете переустанавливать Linux так же часто, как Windows, но кто его знает?

Чтобы использовать дискету клонирования, загрузитесь с первого CD, когда увидите приветствие программы установки, нажмите <F1> и введите defcfg="floppy".

1.5. Проблемы при установке

1.5.1. Конфликты Fedora Core 1 и 2 с различным оборудованием

Материнские платы ASUS

На материнскую плату ASUS серии P4P800 Fedora Core 2 не устанавливается. Пока данная проблема не решена. Остается сменить либо материнскую плату, либо дистрибутив. Следить за ходом устранения ошибки можно по адресу https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=121819.

LCD-мониторы

На некоторых LCD-мониторах не удается запустить программу установки в графическом режиме. В этом случае в ответ на приглашение boot введите параметр nofb:

linux nofb

Ноутбуки SONY

На некоторых моделях ноутбуков SONY VAIO возникают проблемы с установкой Fedora Core 2, решить которые поможет параметр ядра:

linux pci=off ide1=0x180,0x386

Не работает мышь

В процессе установки Fedora Core 2 обыкновенные COM-мыши (последовательные) не работают. Они начнут работать после завершения установки, а пока обходитесь клавиатурой или подключите PS/2-мышь.

1.5.2. Fedora Core: не удается войти в систему как root в графическом режиме

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

setfiles /etc/security/selinux/file_contexts /root

1.5.3. Ошибка Signal 11

Возникает при сбое шины памяти вашего компьютера. Это может произойти, если ваше аппаратное обеспечение не поддерживается Linux или драйвер для этого аппаратного обеспечения работает некорректно. Список поддерживаемых аппаратных средств находится по адресу http://bugzilla.redhat.com/hwcert, а по адресу http://www.bitwizard.nl/sig11 вы сможете более подробно прочитать об ошибке Signal 11.

1.5.4. Не определяется мышь

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

1.5.5. Проблемы с переходом в графический режим

Программа установки Linux работает в графическом режиме. Если у вас старая видеокарта, не поддерживающая разрешения 800×600, или старый монитор, вам придется запускать инсталлятор в режиме с низким разрешением. В ответ на приглашение boot: введите lowres — программа установки будет использовать разрешение 640×480.

1.5.6. Проблемы при загрузке

ОС Linux может использовать разделы, которые расположены дальше 1024-го цилиндра, но не может загружаться с таких разделов. Поэтому, если вы не можете создать Linux-раздел «ближе» к началу диска, создайте небольшой раздел для точки монтирования /boot (не более 100 МБ), который нужно разместить до 1024-го цилиндра. Второй вариант — загрузка с дискеты.

1.5.7. Проблемы с графическим экраном загрузчика

1. GRUB: отредактируйте файл /boot/grub/grub.conf, закомментировав строку splashimage.

2. LILO: отредактируйте файл /etc/lilo.conf, удалив строку message=/boot/message. Изменения вступят в силу после введения команды lilo.

1.5.8. Не загружается система X Window

Зарегистрируйтесь в системе и введите команду startx. Если при запуске X Window возникла ошибка, запустите конфигуратор системы X Window.

1.5.9. Я забыл пароль пользователя root

Бывает… Перезагрузите компьютер и в строке приглашения загрузчика lilo введите linux single. Будет запущен однопользовательский режим. Для изменения пароля введите команду passwd root.

1.5.10. У меня больше оперативной памяти!

Иногда Linux не может точно определить объем оперативной памяти. Например, у вас установлено 128 Мбайт, а Linux видит только 64. Для исправления этого в файл /etc/lilo.conf допишите строку:

append="mem=128M"

Для того, чтобы изменения вступили в силу, введите команду lilo.

1.5.11. Не работают принтер или звуковая плата

В более ранних версиях Red Hat Linux настройка принтера происходила при установке операционной системы. Теперь принтер и звуковую плату нужно конфигурировать отдельно. В Red Hat Linux для этого служат графические конфигураторы redhat-config-printer и sndconfig соответственно. В Fedora Core — system-config-printer и system-config-soundcard.

1.6. Как удалить Linux

Любой дистрибутив Linux удаляется в два этапа:

1. Удаление загрузчика Linux. Проще всего восстановить оригинальный загрузчик Windows 98, введя команду fdisk /mbr в командной строке Windows. Если у вас Windows 2000/XP, восстановить оригинальный загрузчик помогут команды fixboot и fixmbr — именно в таком порядке. Удалить загрузчик LILO можно и с помощью самого LILO: зарегистрируйтесь как пользователь root и введите команду lilo -U.

2. С помощью программы установки Linux удалите разделы Linux. Для этого выберите тип установки «Установка» (Install), затем выберите ручное разбиение диска, удалите Linux-разделы, сохраните таблицу разделов и перезагрузите машину, нажав Reset.

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

Прежде чем устанавливать на своем компьютере вторую операционную систему, обязательно сделайте резервное копирование важных данных, потому что процесс установки операционной системы включает в себя переразбиение жесткого диска на разделы и форматирование созданных разделов. Переразбиение жесткого диска необходимо, потому что Linux и Windows используют разные файловые системы. Хотя существуют средства установки Linux в раздел FAT/FAT32 — Lin4Win, но я не рекомендую их использовать, т.к. в этом случае Linux работает крайне нестабильно и медленно.

Рассмотрим два наиболее распространенных варианта установки нескольких операционных систем:

1. Вы устанавливаете Windows 9x и Linux.

2. Вы устанавливаете Windows NT, Windows 9x и Linux.

1.7.1. Установка Windows 9x и Linux

Главное правило при такой установке заключается в том, что сначала следует устанавливать Windows 9x, и только после этого Linux. Дело в том, что при установке Windows 9x перезаписывает главную загрузочную запись MBR (Master Boot Record) и загрузить Linux с диска вы уже не сможете. При этом очень напрашивается следующий совет: создайте загрузочную дискету для Linux! Если вы в очередной раз переустановите Windows, без этой дискеты загрузить Linux не удастся.

Что делать, если вы переустановили Windows и Linux больше не загружается:

♦ У вас есть загрузочная дискета для Linux. Загрузитесь, используя эту дискету. Затем зарегистрируйтесь в системе как пользователь root и введите команду lilo. Затем перезагрузите машину (команда reboot).

♦ У вас нет загрузочной дискеты: используйте программу loadlin — ее описание будет приведено ниже.

♦ Нет загрузочного диска и нет программы loadlin: переустановите Linux — после установки Windows, естественно. При установке Linux не форматируйте разделы, и ваши данные останутся неповрежденными.

Оптимальным загрузчиком при данной схеме установки (Windows 9x + Linux) будет LILO. Я бы не рекомендовал использование каких-либо посторонних загрузчиков, как бы стабильно они ни работали. Во время инсталляции Linux программа установки спросит, куда устанавливать LILO — выберите MBR.

В случае деинсталляции Linux (после того, как вы уже удалили разделы Linux) восстановить MBR, то есть удалить LILO, поможет команда fdisk /mbr. При этом нужно использовать программу fdisk из комплекта загрузочного диска Windows.

1.7.2. Установка Windows 9x, Windows NT/2000/XP и Linux

Первый способ

В этом способе используется загрузчик NTLoader. Выполните установку Windows 2000 в раздел NTFS, a Windows 9x — в раздел FAT/FAT32. Не забудьте приготовить четыре системных дискеты для восстановления! Напомню, что если вы хотите установить Windows 95, то ее нужно устанавливать первой, а потом Windows 2000. При установке Windows 98 и Windows 2000 порядок установки не имеет значения.

Устанавливать Linux нужно после установки Windows 2000. При этом необходимо учесть, что раздел Linux должен находиться до 1024 цилиндра! Это связано с «барьером 1024 цилиндра» — Linux может использовать разделы, расположенные после цилиндра 1024, но не может загружаться с таких разделов. В последних версиях Linux данная проблема устранена, но рассматриваемый способ установки требует, чтобы вы создали раздел Linux до цилиндра 1024 — иначе вам придется загружать Linux с дискеты.

Еще раз напоминаю: обязательно создайте загрузочную дискету для Linux. При установке LILO выберите MBR — Linux перезапишет главную загрузочную запись. Далее загрузите с четырех загрузочных дискет Windows 2000 и выберите пункт «Recover» в меню загрузчика и режим «Command mode». Затем зарегистрируйтесь в системе как Administrator. Выполните команды fixboot и fixmbr — теперь Windows 2000 будет нормально загружаться.

Примечание

Утилиты fixboot и fixmbr используются в Windows 2000 для восстановления главной загрузочной записи (MBR). Команда fixmbr практически аналогична команде fdisk /mbr в Windows 9x.

Затем загрузитесь с системной дискеты Linux и войдите в систему как root. Откройте в любом текстовом редакторе файл /etc/lilo.conf. В начале файла есть ссылка на загрузочный раздел по умолчанию, например, /dev/hda. Вам нужно изменить это значение на диск и раздел, в который была установлена ОС Linux, например /dev/hdb1.

Введите команду lilo и увидите, что загрузочный раздел не является первым на диске — именно это вам и нужно. В этом случае загрузочная запись Windows 2000 не будет повреждена. Запишите загрузчик Linux в файл /bootsect.lnx:

# dd if=/dev/hdb1 bs=512 count=1 of=/bootsect.lnx

Теперь этот файл нужно скопировать на дискету:

# mount -t msdos /dev/fd0 /mnt

# copy /bootsect.lnx /mnt

# umount /mnt

Перезагрузите Linux командой reboot и загрузите Windows 2000. Скопируйте файл bootsect.lnx в корневой каталог диска С: и присвойте ему атрибут read-only. Добавьте строку в файл boot.ini:

С:\bootsect.lnx ="Linux"

В результате при перезагрузке компьютера вы сможете загрузить Linux с помощью NTLoader.

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

Существует более простой способ установки Linux и любой операционной системы семейства Microsoft Windows — Windows 9x, NT, 2000. Сначала нужно установить все ОС Windows, а потом установить Linux. При этом вместо начального загрузчика будет использоваться не NTLoader, a LILO. В этом случае вы получите двойное меню: сначала нужно выбрать между загрузкой Linux и Windows, а потом выбрать нужную вам ОС Windows — Windows 9x или NT/2000 — в зависимости оттого, какую систему вы установили, кроме Windows NT. Второе меню — это как раз меню загрузчика NTLoader.

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

В этой книге я просто не мог не упомянуть о компактном загрузчике loadlin, который позволяет загрузить Linux из-под DOS или Windows 95.

Если вы используете Windows 98, loadlin работать у вас не будет — нужно перезагрузиться в режиме MS DOS. Кроме этого, следует учесть, что при использовании loadlin могут возникнуть проблемы с разделами FAT32. В этом случае создайте загрузочную дискету DOS (format a: /s) и в autoexec.bat этой дискеты пропишите loadlin. Загрузить Linux из-под операционных систем Windows 98, Me или Windows 2000/NT вам не удастся в любом случае.

Использовать loadlin я рекомендую лишь в том случае, если при очередной переустановке Windows оказался «затертым» MBR (а вместе с ним и LILO), а системную дискету Linux вы не создали. Вызов программы loadlin имеет следующий формат (описание параметров приведено в табл. 1.2):

loadlin <ядро> <root=корневая_ФС> <опции>

или

loadlin @файл_с_параметрами


Параметры программы loadlin Таблица 1.2

Параметр Описание
Ядро Ядро, которое вы используете. Если у вас на данный момент нет именно того ядра, которое было установлено, можно взять практически любое (лучше не самое древнее). Обычно ядро можно взять на компакт-диске с дистрибутивом Linux. Оно вам потребуется всего один раз — нужно только загрузиться и перезаписать lilo (команда lilo)
root= корневая_ФС Корневая файловая система, например root=/dev/hda3
опции Опции, которые будут переданы ядру во время загрузки. Обычно используется ro vga=normal
@файл_с_параметрами Если параметры, которые вы передаете loadlin (а не ядру!) окажутся слишком длинными, то их можно записать в отдельный файл, а затем указать его имя в качестве параметра

Совет: можно включить загрузку Linux в стартовое меню DOS. Для этого отредактируйте свой config.sys следующим образом (см. листинг 1.1).

Листинг 1.1. Фрагмент файла config.sys

[MENU]

MENUIТЕМ=DOS, Load DOS

MENUITEM=LINUX, Load Linux

MENUDEFAULT=DOS,5


[LINUX]

install=c:\loadlin\loadlin.exe c:\loadlin\kernel\vmlinuz root=/dev/hda3 ro vga=normal


[DOS]

; ваш предыдущий config.sys

1.8. Первый запуск Linux

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

Как же так, вы ведь слышали, что настоящие линуксоиды работают в среде командной строки? Сейчас найдем и командную строку.

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

В большинстве дистрибутивов Linux по умолчанию обслуживается шесть текстовых виртуальных консолей, седьмая — графическая. На ней вы и находитесь. Чтобы переключиться с нее на первую текстовую консоль, нажмите комбинацию клавиш Ctrl+Alt+F1 (на шестую — Ctrl+Alt+F6).

В ответ на приглашение программы login: введите root и нажмите <Ввод>. Потом введите пароль, и ваш сеанс работы в текстовой консоли начат.

Информацию о сетевом имени машины, версии ОС, архитектуре можно получить по команде uname -а.

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

#useradd < имя >

Если вам ответили «command not found», то, значит, в вашей системе эта команда называется adduser.

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

#passwd < имя >

Теперь можно регистрироваться под новым именем на другой виртуальной консоли. Чтобы с текстовой консоли переключиться на другую текстовую, нажмите комбинацию Alt+Fn, где n — число от 1 до 6. Вы снова увидите приглашение login:.

Зарегистрировались? Обратите внимание на строку приглашения. На той консоли, где вы зарегистрировались как root, она оканчивается символом #, а для любого обычного пользователя — символом $. Кроме этого символа, приглашение обычно состоит из имени пользователя, имени системы и текущего каталога, причем вид его можно изменить, как только вы узнаете, как это делать. В дальнейших примерах строки, начинающиеся с # или будут обозначать вводимую команду, а строки без такого символа — ее сообщения.

Теперь убедитесь сами, что Linux — действительно многозадачная и многопользовательская система, то есть, в отличие от Windows, несколько пользователей могут работать одновременно. Спросите, кто сейчас работает в системе, введя команду who.

Вы увидите что-то вроде:

root tty1 <дата и время начала сеанса root>

ivan tty2 <дата и время начала сеанса ivan>

root :0 <дата и время начала сеанса root>

<на графической консоли>

ttyN — это номер виртуальной текстовой консоли.

Если вы потерялись и хотите узнать, на какой консоли находитесь сейчас, введите команду tty. Если вы забыли, под каким именем зарегистрировались на текущей консоли, введите команду whoami. Команда w покажет не только работающих сейчас пользователей, но и запущенные ими задачи.

Листать экран можно комбинациями клавиш Shift+PgUp и Shift+PgDn.

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

Если вы хотите, не сходя с этой консоли, поработать под именем другого пользователя, введите su <имя>. По умолчанию в качестве имени подставляется root. Обычно это нужно для того, чтобы быстро выполнить какое-то администраторское действие. Возвращайтесь к работе под своим именем по команде exit.

Чтобы переключиться обратно на графическую консоль, нажмите Alt+F7.

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

Рис. 1.13. Окно виртуального терминала

Количество виртуальных терминалов, в отличие от количества виртуальных консолей, не ограничено ничем, даже традицией.

Чтобы завершить сеанс работы на виртуальном терминале или на виртуальной консоли, введите команду exit (на виртуальной консоли можно также logout) или нажмите комбинацию клавиш Ctrl+D.

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

# shutdown -h 19:00 [Конец рабочего дня]

При этом за несколько минут до указанного времени всем, кто работает в системе, будет разослано предупреждающее сообщение «Конец рабочего дня», после чего система будет корректно остановлена. Краткой формой этой команды служит halt, останавливающая систему сейчас же и без предупреждения. Перезагрузиться можно командой reboot.

1.9. Стандартные сервисы Linux

Описание стандартных сервисов Linux приведу в виде таблицы (см. табл. 1.3).


Стандартные сервисы Linux Таблица 1.3

Сервис Описание Нужен?
anacron, crond Планировщики заданий, запускающие по графику определенные программы Да
арmd Отслеживает состояние батарей ноутбука. У вас стационарный компьютер? Тогда смело отключайте этот сервис Конечно, он вам понадобится, если у вас умный ИБП; тогда apmd может корректно завершить работу системы, если пропало напряжение, а батарея ИБП разряжена
atd Еще один планировщик заданий
autofs Средство автоматического монтирования сменных носителей (CDROM, дискета) Да
chargen, chargen-up Внутренний сервис демона xinetd, генерирующий символы с определенным интервалом времени и посылающий его по сети
cpuspeed Динамическое управление скоростью процессора
cups Система печати в Unix-подобных ОС (Common Unix Print System). Принтер у вас есть? Тогда она нужна
cups-config-daemon Демон для конфигурирования cups
diald Автоматический дозвон к провайдеру
gpm Поддержка мыши в консоли Linux Да
gssftp FRP-сервис, входящий в состав суперсервера xinetd (гл.11) и использующий авторизацию на Kerberos-сервере
irda Поддержка работы с инфракрасным портом
irqbalance Осуществляет балансировку прерываний на многопроцессорных системах
Internet Устанавливает соединение с провайдером при загрузке системы и обрывает его при завершении работы
iptables Межсетевой экран
haldaemon Собирает информацию об оборудовании
keytable Загружает раскладку клавиатуры, указанную в файле /etc/sysconfig/keyboard Да
klogd Протоколирует сообщения ядра в файле /var/log/kernel Да
kudzu Ищет изменения в аппаратной конфигурации компьютера. Вполне может запускаться вручную. Обычно запуск kudzu необходим один раз — после установки системы, потом его можно отключить и запускать только при установке новых устройств в компьютер (или удалении ранее установленных)
lisa Демон, собирающий информацию о ресурсах сети Microsoft
linuxconf Организовывает выполнение различных задач конфигурирования при загрузке системы
mdmonitor Мониторинг и управление программным RAID
named Сервер DNS
netfs Обеспечивает монтирование удаленных сетевых файловых систем (NFS, SMB, NCP (NetWare))
network Поддержка сети. Этот сервис должен быть включен всегда, поскольку даже графическая система и система печати в Linux нуждаются в нем Да
nfslock Механизм блокирования файлов NFS
numlock Включение режима клавиатуры Num Lock
oki4daemon Поддержка OKI 4w-принтеров
pcmcia Поддержка устройств PCMCIA
portmap Необходим для приложений, использующих удаленный вызов процедур RPC. Нужен для NFS и NIS (Network Information Service)
psacct Служба учета процессов
httpd, proftpd, wu-ftpd, sendmail, postfix Web-, FTP- и почтовые серверы. Пока включать их не нужно, поскольку они не настроены и будут дополнительной «дырой» в безопасности вашей системы
random Улучшает качество генерации случайных чисел Да
rawdevices Не вдаваясь в технические подробности, просто отключите этот сервис
readahead, readahead_early Сервисы, позволяющие выполнять предварительную загрузку программ в оперативную память
rhncd В дистрибутивах Red Hat и Fedora — демон, который периодически подключается к серверу Red Hat на предмет обновлений
smartd Мониторинг жёстких дисков, с использованием протокола S.M.A.R.T
saslauthd Обработка запросов аутентификации
spamassassin Сервис, предназначенный для борьбы со спамом
sshd Сервер, предназначенный для безопасного удаленного администрирования системы
syslog Служба ведения системных журналов
smb Если вы планируете работать в сети Microsoft, включите этот сервис, но только после его настройки, описанной в административном разделе. А пока отключите Да
winbind Используется для аутентификации Samba-пользователей в домене NT
xfs Сервер шрифтов, нужен для системы X Window Да
named Сервер DNS
ypbind Служба, используемая для обеспечения доступа к NIS-серверу
yum Сервис, осуществляющий обновление системы в автоматическом режиме

Узнать, какие сервисы установлены у вас в системе, можно воспользовавшись системной утилитой system-config-services (пункт меню Системные параметры→Настройка сервера→Службы) — это в Fedora Core. Кроме того, можно воспользоваться консольной утилитой ntsysv.

1.10. Справочная система

«Родной» для UNIX справочной системой, аналогом Справки Windows, служат страницы интерактивного руководства (manual pages, man-страницы). Ими снабжена практически каждая программа, важный конфигурационный файл или системный вызов. Это обычные текстовые файлы, содержащие сведения о назначении, синтаксисе, опциях команды, формате файла, примеры их применения, имена и URL разработчиков. Обычный дистрибутив содержит тысячи страниц такой документации. Просматривают ее командой man. Например, man man — это вызов справки о самой команде man.

При установке каждого программного пакета включенные в его состав man-страницы копируются в стандартные каталоги, так что программа man легко их находит. В этих каталогах страницы сгруппированы в секции по темам. Перечислим эти секции в порядке просмотра программой man:

1 Команды пользователя

8 Системные команды

2 Системные вызовы

3 Библиотечные вызовы (подпрограммы)

4 Устройства

5 Форматы файлов

6 Игры

7 Разное

9 Ядро (kernel internals)

Так что, если вас интересует справка не о консольной команде exit, а о системном вызове exit(), запрашивайте ее командой man 2 exit.

Чтобы ознакомиться с содержанием раздела, введите команду

man <номер_раздела> intro

Вот несколько самых употребительных команд управления выводом man-справки на экран:

<Ввод> вывод следующей строки текста

<Пробел> вывод следующего экрана текста

<Q> выход из программы

</>образец<Ввод> поиск образца

<N> повторение поиска.

Альтернативой команде man служит гипертекстовая справочная система info. Ссылки обозначены звездочками (*), и перемещает по ним клавиша <Tab>. Чтобы пройти по ссылке, нажмите <Ввод>. Чтобы перейти на следующую или предыдущую страницу, нажмите <N> или <P> соответственно. Чтобы попасть на один уровень иерархии страниц вверх, нажмите <U>. И клавиша <Q> завершает работу с программой info.

Сверхкраткую (одна строка) справку о командах дает команда

whatis <ключевое_слово>

Для работы ей нужна база данных о системных командах, создаваемая программой makewhatis.

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

$ apropos config

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

Команда man с ключом -k тоже умеет выполнять поиск по ключевым словам. Если вы хотите узнать, какие программы имеют отношение к некоторому системному файлу (конфигурационному или журнальному, например, /etc/passwd), введите команду

$ man -k passwd

Вы получите список man-страниц по командам, функциям, формата файлов и т.п., на которых встречается слово «passwd». В общем, поиск информации в справочной системе UNIX очень похож на поиск в Интернете: находите что-то похожее и переходите по ссылкам все ближе к истине.

Есть и команда help: она выводит справку о встроенных командах командной оболочки (о командных оболочках сказано в гл.3).

Наконец, правильно написанные команды понимают ключи --help и --usage, с которыми выдают краткую справку о себе.

К сожалению, многие страницы документации на русский язык пока не переведены. Linux — ОС некоммерческая, и переводом занимаются добровольцы на общественных началах. Может быть, со временем к ним присоединитесь и вы? А пока загляните на

http://www.linuxshare.ru/projеcts/trans/index.html

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

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

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

2.1.1. Имена файлов и каталогов

Имена файлов и каталогов могут иметь длину до 255 символов. Символы «/» (слэш) и символ с кодом 0 запрещены. Кроме того, ряд символов имеет специальное значение для командного интерпретатора, и их использование не рекомендуется. Это символы:

~ ! @ # $ & % * ( ) [] {} ' " \ : ; > < ` пробел

Если вам все-таки нужно употребить один их этих символов в имени файла, то при указании его имени в команде этот символ нужно экранировать знаком «\» (обратный слэш) или заключать все имя в двойные кавычки. Например, вы хотите вывести на экран командой cat содержимое текстового файла с именем my file, содержащим символ пробела:

$ cat my file # неправильно

cat: my: No such file or directory

cat: file: No such file or directory


$cat "my file" # правильно

Привет!

$cat my\ file # правильно

Привет!

Знак # — это символ комментария для командного интерпретатора bash, о котором подробнее рассказано в главе 8. Командный интерпретатор игнорирует все символы от этого знака до конца введенной строки. Возможность комментировать не слишком полезна при вводе команд с консоли, но неоценима при написании командных сценариев, о которых мы еще будем говорить.

Заметьте, что точки среди специальных символов нет, и имена вроде this.is.а.text.file.containing.the.famous.string.hello.world допустимы и широко распространены. Часто последняя отделенная точкой часть имени используется подобно «расширению имени» в Windows, обозначая файл определенного типа, но это обозначение несет смысл только для человека. Так, человеку имя файла ivan_home.tar.gz подсказывает, что это домашний каталог пользователя ivan, упакованный архиватором tar и сжатый компрессором gzip.

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

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

Имена каталогов строятся по точно тем же правилам, что и имена файлов.

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

Корневой каталог обозначается символом «/» (слэш), и этим же символом разделяются имена каталогов в списке. Таким образом, абсолютным именем файла README в домашнем каталоге пользователя den будет /home/den/README.

В каждом каталоге существуют два особых «подкаталога» с именами «две точки» и «точка». Первый из них служит указанием на однозначно определенный родительский каталог, а второй — на сам данный каталог. Для корневого каталога, у которого нет родителя, оба эти «подкаталога» указывают на корневой каталог. С помощью этих имен образуются относительные имена файлов. Так, именем вышеупомянутого файла README относительно домашнего каталога /home/ivan пользователя ivan будет ../den/README.

2.1.2. Назначение основных системных каталогов

В системных каталогах находятся файлы, необходимые для управления и сопровождения системы, а также стандартные программы. Их имена, расположение и содержание почти одинаковы почти во всех ОС Linux, поэтому эти каталоги называют также стандартными. Впрочем, на данный момент эпитет «стандартные» отражает скорее благие пожелания, чем действительность: иерархия каталогов одинакова только для дистрибутивов, связанных единством происхождения, а исторически сложившиеся различия создают опасность несовместимости разных дистрибутивов. Стандарт файловой иерархии для UNIX-подобных систем разрабатывает группа добровольцев, и с его текущей версией можно ознакомиться по адресу http://www.pathname.com/fhs.

Краткое описание основных каталогов линии Red Hat и Fedora Core сведено в табл. 2.1.


Стандартные каталоги Таблица 2.1

Каталог Назначение
/bin Основные программы, необходимые для работы в системе: командные оболочки, файловые утилиты и т.п.
/sbin Команды для системного администрирования, а также программы, выполняемые в ходе загрузки
/boot Файлы, необходимые для загрузки системы (образ ядра)
/home Домашние каталоги пользователей, кроме root
/dev Файлы устройств
/etc Файлы настроек: стартовые сценарии, конфигурационные файлы графической системы и различных приложений
/lib Системные библиотеки, необходимые для основных программ, и модули ядра
/lost+found Восстановленные после аварийного размонтирования части файловой системы
/media Сюда обычно монтируются съёмные носители: компакт-диски, flash-накопители
/mnt Временные точки монтирования жестких дисков Использовать этот каталог необязательно: подмонтировать файловую систему можно к любому другому каталогу
/opt Дополнительные пакеты программ. Если программа, установленная сюда, больше не нужна, то достаточно удалить ее каталог без обычной процедуры деинсталляции
/proc Виртуальная файловая система, дающая доступ к информации ядра (например, выведите на экран файл /proc/cpuinfo). Другие файлы в этом каталоге в каждый момент времени содержат информацию о выполняющихся в этот момент программах
/root Домашний каталог суперпользователя. Домашние каталоги всех остальных могут находиться на отдельном разделе, но /root должен быть в корневой файловой системе, чтобы администратор всегда мог войти в систему для ремонтных работ
/tmp Временные файлы
/var Часто меняющиеся данные: системные журналы и протоколы приложений, замки. Почтовые ящики, очереди печати и т.п.
/usr Практически все остальное: программы, исходные коды, документация. Сюда по умолчанию устанавливаются новые программы

Скорее всего, в ваш дистрибутив включена man-страница hier, подробно описывающая назначение этих каталогов и их основных подкаталогов.

2.1.3. Типы файлов

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

В ОС Linux можно выделить следующие типы файлов:

♦ обычные файлы — последовательность байтов (текстовые документы, исполняемые программы, библиотеки и т.п.);

♦ каталоги — именованные наборы ссылок на другие файлы;

♦ файлы физических устройств, подразделяющихся на:

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

 • файлы байт-ориентированных, или символьных, устройств, позволяющих связанным с ними драйверам выполнять буферизацию собственными средствами;

♦ символические ссылки (symlink, symbolic link);

♦ именованные каналы (named pipes);

♦ гнезда (sockets).

Обычные файлы и каталоги

Свойства (атрибуты) файлов и каталогов можно вывести на терминал с помощью команды ls с ключом -l:

$ls -l /home/den/README

-rwxr-xr-- 1 den users 0 Feb 14 19:08 /home/den/README

Что это за свойства?

Первый символ выведенной строки, в данном случае дефис, обозначает тип файла. Другие значения этого свойства: d — каталог, b — блочное устройство, с — символьное устройство, l — символическая ссылка, p — именованный канал и s — гнездо.

Следующие 9 символов означают права доступа к файлу. Они делятся на три тройки, обозначающие права: владельца, членов его группы и всех остальных. Внутри каждой тройки может присутствовать или отсутствовать: право чтения (r), записи (w) и исполнения (x, от execute). Отсутствие права обозначается символом дефиса. С файлом README из нашего примера владелец (в общем случае, пользователь, создавший его) имеет право делать все, что угодно; члены его группы — только читать и запускать файл на выполнение; все остальные — только читать.

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

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

Для каталога вывод команды ls выглядит так же, но значение некоторых свойств отличается.

$ls -l -a /home/den

drwx------ 3 den users 4096 Feb 14 19:02 .

drwxr-xr-x 4 root root 4096 Feb 02 11:32 ..

[...]

Ключ -а нужен, чтобы увидеть псевдоподкаталоги «.» и «..» (их имена начинаются с точки, поэтому эти файлы скрыты).

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

Файлы физических устройств

Все подключенные к компьютеру устройства понимаются операционной системой как файлы: вывод информации на терминал, печать на принтере, отправка почты — все это, с точки зрения ОС, есть запись в файл. Технически файл устройства — это коммуникационный интерфейс драйвера, ведающего взаимодействием с этим устройством. Большинство таких файлов располагается в каталоге /dev.

Загляните в этот каталог, введя команду ls -l /dev. Вывод этой команды займет несколько экранов, что создает повод для знакомства с командой-фильтром more, выводящей поступающие к ней на вход данные по одному экрану за раз:

$ ls -l /dev | more

Чтобы увидеть следующий экран, нажмите пробел; чтобы прервать работу команды — Ctrl+С. О символе вертикальной черты, разделяющей команды ls и more, подробнее сказано в п. 3.3.1.

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


Наиболее часто используемые стандартные имена устройств Таблица 2.2

Файл Устройство
null Пустое устройство. Все данные, выводимые в него, просто исчезают. Удобно использовать его для вывода ненужных сообщений
console Системная консоль, т.е. физически подключенные клавиатура и монитор
ttyN Пользовательская (виртуальная) консоль. Linux поддерживает до 6 таких консолей, для переключения между которыми служит комбинация клавиш Alt+Fn, где n — число от 1 до 6
pts/N Виртуальный терминал. Программа графического режима, в окне которой можно работать как в консоли
mouseN Мышь
audioN Звуковая карта
ttySN Последовательный порт. Файл /dev/ttyS0 соответствует порту COM1 в MS-DOS. /dev/ttyS1 — порту COM2
lpN Параллельный порт
cuaN Специальное устройство для работы с модемом
ethN Сетевая плата
fdN Дисковод для гибких дисков. Первому, то есть А:, соответствует /dev/fd0, для В: используется имя /dev/fd1
hdxN Жесткий диск с интерфейсом IDE, где x — буква, обозначающая номер такого диска (начиная с а), N — номер раздела на диске
sdxN Жесткий диск с интерфейсом SCSI

Вместо размера файла команда ls выдает два числа. Это так называемые старший и младший номера устройства. Старший номер несет информацию о драйвере, к которому относится данный файл, а младший номер указывает, к какому именно из однотипных устройств следует обращаться.

Жесткие и символические ссылки

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

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

$ln /home/den/README /home/den/readme_too

$ls -l /home/den/README

-rwxr-xr-- 2 den users 0 Feb 14 19:08 /home/den/README

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

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

Символическая ссылка создается той же командой ln с ключом -s:

$ln -s /home/den/README /home/den/do.not.readme

$ls -l /home/den/do.not.readme

lrwxrwxrwx 1 den users 16 Feb 14 19:17 /home/den/do.not.readme -> /home/den/README

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

$ cat /home/den/do.not.readme

$

Значение самой ссылки, то есть имя файла, на который она ссылается, можно узнать с помощью команды readlink.

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

Можно даже закольцевать такую цепочку:

$ touch a1

$ ln -s a1 a2; rm a1

$ ln -s a2 a1

$ ls -l a? # это шаблон имени. Ему соответствуют все имена из двух букв, первая «а»

a1 -> a2

a2 -> a1

$ cat a1

cat: a1: Too many levels of symbolic links

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

Символическая ссылка на каталог может участвовать в образовании полного имени файла, но есть одна тонкость: по ссылке нельзя проследовать обратно в направлении корня дерева каталогов. Вместо псевдоподкаталога «..» подставляется родительский каталог каталога-оригинала. Так, если в домашнем каталоге пользователя ivan есть ссылка на домашний каталог пользователя den, то путь /home/ivan/link_to_den_home/.. эквивалентен не /home/ivan, a /home/den/.., то есть /home.

Именованные каналы

Этот тип файла еще называется буфером FIFO (First In — First Out). Через файлы такого типа два независимых процесса (две работающих программы) могут обмениваться данными: все, что записано в файл одним процессом, может быть прочитано оттуда другим. Именованный канал создается командой mkfifo.

Гнезда

Механизм гнезд (сокетов, sockets) впервые появился в версии 4.3 BSD UNIX (ветвь UNIX, начавшая развиваться в калифорнийском университете Беркли). Позже он превратился в одну из самых популярных систем сетевого обмена сообщениями, реализованную во многих, не только UNIX-подобных, операционных системах. В честь создателей этот механизм до сих пор называют Berkeley Sockets.

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

Межпроцессный обмен через гнезда используется такими стандартными компонентами Linux, как служба учета syslog и оконная система X Window.

2.1.4. Команды работы с файлами и каталогами

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

имя_команды [короткие_ключи] [длинные_ключи] [аргументы]

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

Имена коротких ключей, или опций, состоят из одной буквы, перед которой стоит символ «-» (дефис). У ключа может быть свой аргумент. Короткие ключи, у которых нет аргументов, можно соединять под одним дефисом: так, команда ls -l -a -d эквивалентна команде ls -lad.

Имена длинных ключей — это осмысленные слова, перед которыми стоят два символа «-» (дефис). Большинство команд понимают ключи --help и --usage, требующие вывести краткую справку об использовании команды. Необязательный ключ «--» сигнализирует об окончании списка ключей и начале аргументов.

Справку о ключах и аргументах команды можно получить по команде man.

Текущий каталог

Текущий каталог — это каталог, от которого отсчитываются относительные пути. В каждый момент времени с каждой работающей программой, в том числе с командной оболочкой, связан единственный такой каталог. Узнать, какой каталог сейчас является текущим, можно с помощью команды pwd без аргументов.

Сменить текущий каталог можно командой

cd [новый_каталог]

Для смены текущего каталога на домашний каталог пользователя можно вместо имени нового каталога указать специальный символ ~: cd ~.Разрешается переходить также в псевдоподкаталоги «.» и «..». В первом случае ничего не изменится, а во втором текущим каталогом станет родительский.

Просмотр содержимого каталога

Уже знакомая команда ls [имя_каталога] выводит его содержимое на экран. Если не указывать имя каталога, команда выведет содержание текущего каталога.

Вместо имени каталога можно указать шаблон имен файлов: например, ls my* покажет все файлы и подкаталоги, имена которых начинаются с «my».

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

Создание и удаление файла

Создать пустой файл можно командой

touch <имя_файла>

Вообще-то она предназначена для того, чтобы для всех заинтересованных программ (например, утилиты сборки проекта make) файл выглядел новее, чем на самом деле: она меняет время последнего изменения файла на текущее время. Но если файла с таким именем не существует, то она его создаст.

Текстовые файлы можно создавать, вводя текст с консоли:

$ cat > hello.world

Привет!

Оказывается, команду cat можно заставить не только выводить файл на консоль, но и вводить с нее. Это достигается перенаправлением ввода-вывода, о котором подробнее будет сказано в главе 8. В таком режиме команда cat считает своими входными данными поток байтов, поступающий с клавиатуры, и выводит его в указанный файл. Иными словами, в файл записывается все, что вы после этой команды введете с клавиатуры. Чтобы закончить ввод, нажмите Ctrl+D.

Если файл с указанным именем существует, то команда cat перепишет его. Чтобы вместо этого добавить данные в конец файла, перенаправьте ее вывод с помощью символов >>:

$ cat >> hello.world

Каталог создается командой

mkdir <имя_каталога>

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

Удалить пустой каталог можно командой

rmdir <имя_каталога>

Удаляется файл командой

rm <имя_файла>

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

♦ -i: требует подтверждения удаления для каждого удаляемого файла. Если вы заказали удаление группы файлов (например, по шаблону имени rm chernovik*), то среди них может оказаться файл, который вам еще нужен: безопаснее применить ключ -i. Подтвердите удаление каждого файла или откажитесь от него, введя символ Y или N соответственно;

♦ -f: не запрашивать подтверждения, не выводить сообщений об ошибках. Если указаны оба ключа -i и -f, то срабатывает последний указанный;

♦ -r: рекурсивное удаление каталога со всеми его подкаталогами. Непустой каталог можно удалить только так.

Копирование и перемещение файла

Файл копируется командой cp. Формат этой команды:

cp [ключи] <исходный_файл> {<файл_назначения> | <каталог_назначения>}

Полезные ключи команды cp:

♦ -i: требовать подтверждения перед перезаписью существующего файла;

♦ -f: не требовать подтверждения;

♦ -r: рекурсивно копировать каталог со всеми подкаталогами;

♦ : сохранять атрибуты файла;

♦ -d: копировать символические ссылки вместо файлов, на которые они указывают;

♦ -s: создавать символические ссылки вместо копирования (-l — жесткие);

♦ -u: не переписывать существующий файл, если он модифицирован позже;

♦ : игнорировать подкаталоги, расположенные в других файловых системах.

Кстати, команда cat с перенаправленным выводом тоже может скопировать файл:

$ cat hello.world > copy.of.hello.world

Команда mv перемещает или переименовывает файлы. Формат команды:

mv [ключи] <исходный_файл> {<файл_назначения> | <каталог_назначения>}

Ключи -i, -f имеют тот же смысл, что для команд cp и rm.

Просмотр текстовых файлов

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

file <имя_файла>

Если ее ответ содержит слово «text», то файл можно безопасно вывести на терминал. Вывод двоичного файла может сбить кодировку так, что вместо набираемых на клавиатуре символов вы увидите черт знает что. Если это все же случилось, введите вслепую команду

$ tput reset

(или, если вы работаете в графическом режиме в окне виртуального терминала, выберите в его меню команду Терминал|Сброс и очистка для среды GNOME или Edit|Reset & Clear Terminal для среды KDE).

Кроме уже упомянутой команды cat, для вывода файла на терминал служат команда

more <имя_файла>

и ее улучшенный вариант less.

Команда-фильтр more разбивает поток своего вывода на порции размером в экран и ожидает ввода пользователя для отображения следующей порции. Чтобы увидеть следующую строку, нажмите <Ввод>; чтобы увидеть следующий экран, нажмите <пробел>; чтобы прервать работу команды, нажмите <Q> или Ctrl+C.

Утилита less позволяет листать выводимый файл не только вперед, но и назад (клавишами PgDn и PgUp), перемещаться к указанному месту в файле, искать по образцу и дает еще много полезных возможностей. В общем, man less.

Если интересующая вас информация находится в конце файла (например, вы хотите просмотреть журнал системных сообщений messages в каталоге /var/log, чтобы узнать, что именно только что пошло наперекосяк), то вам поможет команда

tail [-N] [имя_файла]

где N — число выводимых строк файла, считая от последней. Командой

head [-N] [имя_файла]

можно просмотреть, наоборот, только первые N его строк. Значение N по умолчанию равно 10.

Если вы хотите просмотреть не весь файл, а только те его строки, которые содержат заданный фрагмент текста, используйте команду-фильтр grep. Например, я хочу сменить клавишу переключения раскладки клавиатуры в графическом режиме. Я знаю, что строки конфигурационного файла /etc/X11/xorg.conf, имеющие отношение к клавиатуре, содержат фрагмент XKB… а может, Xkb или xkb? Неважно:

$ grep -in xkb /etc/X11/xorg.conf

[...]

65: Option "XkbLayout" "us,ru"

66: Option "XkbOptions" "grp:shift_toggle,grp_led:scroll"

Я указал ключи: -i, требующий игнорировать различия регистра в образце для поиска и файле, и -n, требующий выводить номера строк, в которых встречается образен xkb.

Для всех команд ключи без аргументов можно соединять: запись -in эквивалентна записи -i -n.

Редактирование текстовых файлов

Вышеприведенный пример показывает, что переключением раскладки клавиатуры в графическом режиме управляет комбинация клавиш Shift + Shift. Неудобно: в консольном режиме я привык к Ctrl+Shift. Надо заменить значение shift_toggle на ctrl_shift_toggle. Такие мелкие правки конфигурационных файлов — обычное дело для администратора, поэтому средство их внесения присутствовало в UNIX-системах всегда. Это консольный редактор vi, входящий в каждый дистрибутив Linux (в дистрибутив Fedora Core 3 включен его улучшенный вариант vim, но команда vi тоже доступна: она стала псевдонимом для команды vim).

Итак, я делаю на всякий случай резервную копию конфигурационного файла /etc/X11/xorg.conf и приступаю к его редактированию:

$ cp /etc/X11/xorg.conf /etc/X11/xorg.conf.sav

$ vi /etc/X11/xorg.conf

Перемещаюсь к строке 66 командой 66G (буква G заглавная: редактор vi различает регистры). Клавишами управления курсором перемещаюсь к началу слова shift.

Включаю режим вставки командой i (строчная буква). Набираю ctrl_. Выключаю режим вставки клавишей Esc. Сохраняю изменения командой :w. Выхожу по команде :q.

Сложно и на вид бессистемно? Да. Зато есть команда :help.

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

РЕЖИМ ВСТАВКИ.

Включение режима вставки:

♦ i в текущей позиции курсора;

♦ I перед первым непробельным символом в текущей строке;

♦ w в новой строке, добавленной после текущей;

♦ W в новой строке, добавленной перед текущей.

Выключение режима вставки:

♦ <Esc>

Команды режима вставки:

♦ Ctrl+a повторить предыдущую вставку;

♦ Ctrl+у вставить символ, находящийся над курсором (в предыдущей строке);

♦ Ctrl+e вставить символ, находящийся под курсором (в следующей строке).

КОМАНДНЫЙ РЕЖИМ.

Удаление (здесь и далее N — это число):

♦ N x N символов под курсором и справа от него;

♦ N X N символов слева от курсора;

♦ N dd N строк;

♦ D до конца текущей строки;

♦ N D до конца текущей строки и еще N-1 строку.

Копирование и вставка строк:

♦ N yy взять в буфер N строк от текущей и ниже;

♦ p вставить содержимое буфера после текущей строки;

♦ P вставить содержимое буфера перед текущей строкой.

Поиск и переход:

♦ N G перейти к строке с номером N;

♦ $ G перейти к последней строке файла;

♦ /<образец> искать образец вниз от курсора;

♦ ?<образец> искать образец вверх от курсора;

♦ n повторить поиск в том же направлении;

♦ N (буквально «N»): повторить поиск в обратном направлении.

Сохранение и выход:

♦ :w сохранить текущий файл;

♦ :w <имя> сохранить под новым именем, если файл <имя> еще не существует;

♦ :w! <имя> сохранить пол новым именем, переписав существующий файл;

♦ :q выйти;

♦ :q! принудительно выйти без сохранения;

♦ :wq сохранить и выйти.

Разное полезное:

♦ N u отменить последние N изменений;

♦ N Ctrl+r вернуть последние N отмененных изменений;

♦ U отменить изменения в последней строке;

♦ N r <символ> заменить N следующих символов на <символ>;

♦ N >> добавить отступ (Tab) в N следующих строк;

♦ N << удалить один отступ (Tab) из N следующих строк;

♦ :sh временно выйти в оболочку (вернуться — exit);

♦ :!<команда> выполнить команду оболочки.

Поиск файлов

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

В разных каталогах может оказаться несколько исполняемых файлов с одинаковыми именами. Какой из них будет исполнен? На этот вопрос отвечает команда which. Она просматривает каталоги, перечисленные в переменной окружения PATH, в поисках исполняемого файла с указанным именем, и выводит абсолютное имя первого встреченного из них.

Команда whereis ищет не только исполняемый файл, но и его справочные страницы и исходный код.

Команда locate ищет файл по образцу имени, опираясь на свою базу данных о файловой системе. Ее вариант с повышенной безопасностью slocate сохраняет данные о правах доступа к файлам, так что пользователь не увидит тех файлов, на которые у него нет прав. В дистрибутиве Fedora Core 3 команда locate представляет собой символическую ссылку на утилиту slocate.

Команда find ищет файл по его атрибутам в указанном каталоге и его подкаталогах на заданную глубину. Например, при установке операционной системы я отказался устанавливать файловый менеджер Midnight Commander, а теперь он мне понадобился. Для каждого из 4 компакт- дисков дистрибутива запускаю команду поиска по шаблону имени «mc*», то есть всех файлов, имена которых начинаются с mc:

$find /media -name mc*

/media/cdrecorder/Fedora/RPMS/mc-4.6.1-0.8.i386.rpm

В итоге на третьем диске найден пакет RPM. Об установке программного обеспечения из пакетов RPM будет сказано в главе 7.

Изменение прав доступа к файлу

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

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

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

Первым владельцем файла становится его создатель. Дальше файл можно передать другому владельцу или в другую группу командой

chown [ключи] <новый_пользователь>[:новая_группа] <файл>

или

chgrp [ключи] <новая_группа> <файл>

В некоторых реализациях Linux передать файл другому владельцу имеет право только суперпользователь, а в других — также его текущий владелец.

Набор прав доступа состоит из прав на чтение, запись и исполнение файла. В символьном представлении он выглядит как строка «rwx», где вместо любого символа может стоять дефис. Буква означает наличие права (r — чтение, w — запись, x — исполнение), дефис — его отсутствие.

Очевидно, что эти три бита могут быть записаны еще и как восьмеричное число. Так, права доступа r-x (чтение и исполнение без записи) понимаются как три двоичные цифры 101 или как восьмеричная цифра 5. Численное представление прав доступа называется абсолютным, или двоичной маской.

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

<права_владельца><права_группы><права_остальных>

В абсолютном представлении права владельца являются старшим разрядом восьмеричного числа, права группы — вторым и права остальных — третьим. Так, права rwxr-x--x выглядят как число 111 101 001, или 751.

Команда изменения прав доступа chmod понимает как абсолютное, так и символьное указание прав.

Назначим файлу /home/den/README права rw-r-----, то есть разрешим себе чтение и запись, группе только чтение, остальным пользователям — ничего:

$cd ~ # переход в свой домашний каталог

$chmod 640 README # 110 100 000 == 640

$ls -l README

-rw-r----- 1 den users 0 Feb 14 19:08 /home/den/README

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

$chmod go+x README

$ls -l README

-rw-r-x--x 1 den users 0 Feb 14 19:08 /home/den/README

Формат символьного режима:

chmod <категория><действие><набор_прав> <файл>

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


Аргументы команды chmod в символьном режиме Таблица 2.3

Аргумент Значение
Категория u Владелец
g Группа владельца
o Прочие
a Все пользователи, то есть «a» эквивалентно «ugo»
Действие + Добавить набор прав
- Отменить набор прав
= Назначить набор прав
Право r Право на чтение
w Право на запись
x Право на исполнение
s Право смены идентификатора пользователя или группы
t Бит прилипчивости (sticky-бит)
u Такие же права, как у владельца
g Такие же права, как у группы
o Такие же права, как у прочих

Название бита прилипчивости унаследовано от тех времен, когда объем оперативной памяти был маленьким, а процесс подкачки медленным. Этот бит позволял оставлять небольшие часто используемые программы в памяти для ускорения их запуска. Сейчас его значение переосмыслено: этот бит, установленный для каталога, приводит к тому, что удалять файлы из этого каталога могут только владелец файла и владелец каталога. Обычно это используется в каталогах, открытых для записи всем (например, /tmp).

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

Так, команда su (substitute user), позволяющая «стать» другим пользователем без завершения своего сеанса и входа под новым именем (это нужно, например, чтобы быстро выполнить административную задачу от имени суперпользователя), имеет следующие атрибуты:

$ls -l `which su`

-rwsr-xr-x 1 root root [размер, дата, время] /bin/su

Биты «x» сообщают, что любой пользователь может запустить эту программу, а бит «s» — о том, что во время ее выполнения он будет пользоваться правами суперпользователя root (если, конечно, знает пароль).

Обратите внимание на применение обратных апострофов: они нужны для того, чтобы направить вывод команды which на вход команды ls.

Следует учитывать, что программы, требующие установления SUID (или SGID) для своей работы, являются потенциальными дырами в системе безопасности. Представьте такую ситуацию: у вас в системе установлена программа superformat, которая предназначена для форматирования дисков. Создание файловой системы, пусть даже на дискете, — это привилегированная операция, требующая полномочий суперпользователя.

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

А если она завершает работу аварийно, например, по ошибке переполнения стека (такие случаи отмечались)? Тогда запустивший ее пользователь получит права root! Неквалифицированный пользователь с правами root — это намного хуже, чем просто крах системы. Помните о потенциальной опасности при работе с такими программами и по возможности избегайте использования прав SUID и SGID.

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

Я позволю себе сделать еще несколько замечаний относительно прав доступа SUID и SGID:

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

2. Перед использованием программ, требующих привилегии root, убедитесь в их надежности. Если программа получена из ненадежного источника, лучше ее не использовать. Надежными источниками считаются сайты или FTP-серверы разработчиков дистрибутивов Linux, Желательно получить исходный код такой программы, чтобы убедиться, что она не производит каких-либо несанкционированных действий.

3. Нет ни одной причины, по какой нужно было бы разрешить использование SUlD-программ в домашних каталогах пользователей. Для разделов, в которые разрешена запись обыкновенным пользователям, установите опцию nosuid в файле /etc/fstab.

2.2. Изнанка файловой системы

С точки зрения операционной системы, под файловой системой понимается внутренняя управляющая структура, заведующая хранением данных на физическом носителе, их поиском, извлечением и записью по запросам программ. Такие управляющие структуры в каждом семействе операционных систем строятся по схожим принципам. Так, DOS/Windows используют файловую систему FAT с вариантами FAT32 и VFAT. Файловые системы UNIX-подобных ОС разнообразнее, но тоже могут быть объединены в одно семейство. Linux умеет работать со множеством файловых систем, как с родными, и с еще большим их количеством обмениваться данными.

Примечание

Хотя существуют средства установки Linux в раздел FAT/FAT32 — Lin4Win, я не рекомендую их использовать, т.к. в этом случае Linux работает крайне нестабильно и медленно.

Типичным представителем файловых систем UNIX является «вторая расширенная файловая система» ext2fs, основная до недавнего времени файловая система Linux. С момента выхода ядра версии 2.4.16 она начала уступать место «файловой системы по умолчанию» полностью совместимой с ней системе ext3fs. Рекомендуется использовать именно ext3fs, и именно она устанавливается по умолчанию инсталляторами большинства современных дистрибутивов.

2.2.1. Файловая система ext2fs — предшественница ext3fs

Рассмотрим логическую структуру файловой системы ext2fs.

Физически жесткий диск разбит на сектора размером 512 байт. Первый сектор дискового раздела в любой файловой системе считается загрузочной областью. В первичном разделе эта область содержит загрузочную запись — фрагмент кода, который инициирует процесс загрузки операционной системы при запуске. На других разделах эта область не используется. Остальные сектора объединены в логические блоки размером 1, 2 или 4 килобайта. Логический блок есть наименьшая адресуемая порция данных: данные каждого файла занимают целое число блоков. Блоки, в свою очередь, объединяются в группы блоков. Группы блоков и блоки внутри группы нумеруются последовательно, начиная с 1.

Раздел диска, на котором сформирована файловая система ext2fs, может быть представлен такой схемой:

Структуры данных, применяемые при работе с файловой системой ext2fs, описаны в заголовочном файле /usr/include/linux/ext2fs.h.

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

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

Рис. 2.1. Структура файловой системы

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

Битовой картой блоков (block bitmap) называется структура, каждый бит которой показывает, отведен ли такой же по счету блок какому-либо файлу. Значение 1 показывает, что блок занят. Эта карта служит для поиска свободных блоков в тех случаях, когда надо выделить место под файл.

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

Каждому файлу соответствует один и только один индексный дескриптор (inode, i-узел, информационный узел), который идентифицируется своим порядковым номером — индексом файла. В индексном дескрипторе хранятся метаданные файла. Среди них — все атрибуты файла, кроме его имени, и указатель на данные файла.

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

Сколько блоков с данными можно так адресовать? Адрес блока занимает 4 байта, блок, как уже сказано, — 1, 2 или 4 килобайта. Значит, путем косвенной адресации можно разместить 256 — 1024 блока. Размер файла, занимающего столько блоков, считайте сами.

А если файл еще длиннее? Следующий адрес в массиве-указателе указывает на блок двойной косвенной адресации (double indirect block). Этот блок содержит список адресов блоков, которые, в свою очередь, содержат списки адресов следующих блоков данных.

И, наконец, последний адрес в массиве-указателе задает адрес блока тройной косвенной адресации, то есть блока со списком адресов блоков, которые являются блоками двойной косвенной адресации.

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

Во-первых, одному индексному дескриптору может соответствовать любое количество имен, приписанных к разным каталогам, и все они являются настоящими. Количество имен (жестких ссылок) учитывается в индексном дескрипторе. Именно это количество вы можете увидеть по команде ls -l.

Во-вторых, удаление файла означает просто удаление записи о нем из данных каталога и уменьшение на 1 счетчика ссылок.

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

Сам каталог таким же образом приписан к своему родительскому каталогу. Корневой каталог всегда записан в индексный дескриптор с номером 2 (номер 1 отведен для списка адресов дефектных блоков). В каждом каталоге хранится ссылка на него самого и на его родительский каталог — это и есть псевдоподкаталоги «.» и «..».

Таким образом, количество ссылок на каталог равно количеству его подкаталогов плюс два.

Данные каталога представляют собой связный список с записями переменной длины и выглядят примерно так, как на рис. 2.2.

Рис. 2.2. Строение каталога в ext2fs

А как же файлы физических устройств? Они могут находиться в тех же каталогах, что и обычные файлы: в каталоге нет никаких данных, говорящих о принадлежности имени файлу на диске или устройству. Разница находится на уровне индексного дескриптора. Если i-узел обычного файла указывает на дисковые блоки, где хранятся его данные, то в i-узле файла устройства содержится указатель на список драйверов устройств в ядре — тот элемент списка, который соответствует старшему номеру устройства (рис. 2.3).

Рис. 2.3. Разница между обычным файлом и файлом устройства

Свойства файловой системы ext2fs:

♦ Максимальный размер файловой системы — 4 Тбайт.

♦ Максимальный размер файла — 2 Гбайт.

♦ Максимальная длина имени файла — 255 символов.

♦ Минимальный размер блока — 1024 байт.

♦ Количество выделяемых индексных дескрипторов — 1 на 4096 байт раздела.

2.2.2. Журналируемые файловые системы

Представим такую ситуацию. У вас есть жесткий диск, скажем, на 80 Гб. Сегодня таким объемом никого не удивишь, не так ли? Вы поленились разбить его на разделы, и у вас есть один большой раздел, занимающий все ваши 80 Гб. И вот в момент записи на диск произошло отключение питания. Хорошо, если это случилось во время записи данных какого-то файла, пусть и очень важного: файл можно восстановить хотя бы частично. А вот если свет погас, когда операционная система записывала метаданные, то расположение файла на диске перестанет соответствовать списку принадлежащих ему блоков в индексном дескрипторе. Файловая система может утратить целостность, то есть такое состояние, когда каждый блок принадлежит не более чем одному файлу (inode). В результате вы можете не досчитаться не одного, а сотни файлов.

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

Если при монтировании файловой системы в процессе загрузки операционная система обнаруживает, что чистый бит не установлен, она запускает средство проверки файловой системы — программу fsck. Представляете, сколько времени займет такая проверка? Даже при условии, что ошибок будет мало или вообще не будет, придется ждать довольно долго. А если еще будет нарушена целостность, тогда восстановление этой целостности займет еще несколько минут вашего времени.

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

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

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

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

И все же лучшим средством от неожиданного отключения до сих пор являются источники бесперебойного питания…

Современные версии ядра Linux (2.6.x) поддерживают в качестве родных четыре журналируемые файловые системы: ReiserFS, ext3fs, XFS и JFS. Из них журналирование данных поддерживает только ext3fs. Список файловых систем, которые поддерживаются вашим ядром, содержится в файле /proc/filesystems.

ReiserFS

Разработана Хансом Райзером (Hans Reiser) и его компанией Namesys (http://www.namesys.com) и официально включена в ядро 2.4.4. Преимущества данной ФС в основном проявляются в работе с мелкими файлами: они целиком хранятся в своих i-узлах (inode), без выделения блоков в области данных. Вместе с экономией места это способствует и росту производительности, так как данные и метаданные хранятся в непосредственной близости и могут быть считаны одной операцией ввода/вывода.

Другая особенность ReiserFS состоит в том, что хвосты файлов длиной меньше чем в один блок могут быть упакованы в один дисковый блок (режим тайлинга). Это обеспечивает около 5% экономии дискового пространства. Именно работа с маленькими файлами (меньше килобайта) и обслуживание большого их количества выделяет данную ФС среди прочих.

ReiserFS несовместима с ext2fs на уровне утилит обслуживания файловой системы, однако соответствующий инструментарий, объединенный в пакет reiserfsprogs, уже давно включается в стандартную поставку современных дистрибутивов. Если у вас его нет, то скачать можно по адресу ftp://ftp.namesys.com/pub/reiserfsprogs/reiserfsprogs-3.6.19.tar.gz.

Там же можно взять патчи для ядра 2.4.x.

К сожалению, загрузчики Linux (LILO и GRUB) не способны загрузить ядро Linux с раздела ReiserFS, оптимизированного в режиме тайлинга. Поэтому под каталог /boot лучше отводить отдельный раздел с файловой системой, совместимой с ext2fs.

XFS

При работе с огромными (терабайтными) файлами вне конкуренции остается файловая система XFS, разработанная компанией Silicon Graphics (сейчас SGI) специально для операций с мультимедийными данными и впервые появившаяся в 1994 г. в версии ОС Irix 5.3. Она использует 64-битную адресацию, что позволяет увеличить максимальный размер файловой системы до 18 тысяч петабайт (при этом предельный размер файла составляет 9 тысяч петабайт).

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

XFS эффективно распараллеливает операции ввода-вывода: она делит все пространство раздела на несколько равных областей (allocation group), служащих своего рода автономными файловыми системами в рамках единой XFS.

Пакет утилит обслуживания xfsprogs можно скачать с http://oss.sgi.com/projects/xfs/download.html (содержит ссылку на российское зеркало).

JFS

Разработана IBM для рабочих станций под управлением ОС AIX, затем портирована для Linux и выпущена по Стандартной Общественной Лицензии. Всю необходимую информацию о ней можно найти по адресу http://jfs.sourceforge.net.

Размер журнала составляет примерно 40% от размера файловой системы. Эта файловая система может содержать несколько сегментов, содержащих журнал и данные. Такие сегменты называются агрегатами и могут монтироваться отдельно. Умеет она также хранить маленькие файлы и каталог и, содержащие не больше 8 файлов, в пределах индексного дескриптора.

Широкого признания пока не получила.

Ext3fs

Файловая система ext3fs официально включена в ядро Linux с версии 2.4.16. Впервые она появилась в дистрибутивах RedHat и SuSE. Современные дистрибутивы, основанные на ядре 2.6.x, предлагают установить ext3fs по умолчанию.

Некоторые источники утверждают, что ext3fs — это всего лишь «надстройка» над файловой системой ext2fs, а не самостоятельная файловая система. Благодаря такому происхождению ext3fs совместима со всеми программами для обслуживания и настройки файловой системы ext2fs. И перейти на ext3fs можно простым добавлением файла журнала к ext2fs, не только без переформатирования раздела, но даже и без перезагрузки машины. Более того, ОС Linux на старых ядрах, не поддерживающих ext3fs, могут работать с разделами, на которых сформирована эта файловая система, просто подключая их как разделы ext2fs.

Кроме того, ext3fs — самая надежная из рассмотренных в этом параграфе новых файловых систем: в ней предусмотрено журналирование операций не только с метаданными, но и с данными файлов.

Журнал может быть включен в одном из следующих режимов:

♦ полного журналирования (journal);

♦ последовательном (ordered, применяется по умолчанию);

♦ обратной записи (writeback).

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

Самый быстрый режим — это «обратная запись». Это обыкновенное журналирование только метаданных.

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

Какой режим выбрать? Если ваш сервер является файловым (FTP, WWW-сервер), то есть таким, который используется пользователями для хранения файлов, выберите режим полного журналирования — пользователи будут вам благодарны. Пусть в этом режиме сервер будет работать чуть медленнее, зато в случае ЧП можно минимизировать потери информации. Во всех остальных случаях нужно установить режим «Последовательный», точнее вообще не нужно ничего устанавливать — он используется по умолчанию.

2.3. Создание и монтирование файловых систем

Создание файловой системы «вручную». Команда mkfs

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

В ходе установки Linux файловые системы на разделах жесткого диска создал для вас инсталлятор, и переделывать за ним ничего не нужно. Ручное создание ФС может понадобиться при подключении нового диска или, что гораздо чаще, дискеты. Выполняет его команда mkfs:

mkfs [-t <тип>] [опции_ФС] ФС [блоков]

Типы и описание файловых систем, поддерживаемых Linux, вы найдете в справочной системе по команде man fs. Те типы, которые чаще всего используются на съемных носителях, перечислены в таблице 4.3. Ясно, что если вы «отформатируете» дискету с типом vfat, то она будет читаться и из-под Windows, а если с типом ext2/ext3 — только из-под Linux.

Если не указывать тип, то будет создана ФС с типом по умолчанию — в настоящий момент это ext2.

В качестве аргумента ФС можно указывать либо имя устройства (/dev/fd0), либо точку монтирования (/media/usbdisk). Последним аргументом можно указать количество блоков, которые нужно отвести под новую файловую систему.

Опции_ФС — это параметры, специфические для файловой системы определенного типа. Например, для ext2/ext3 можно указать:

♦ -b <размер_блока> (по умолчанию 4096 байт, но может быть и 1024 или 2048);

♦ -N <количество_i-узлов>,

♦ -i <байт_на_i-узел>.

Утилита mkfs передает эти опции настоящему конструктору ФС, которого вызывает в зависимости от указанного типа. Установленные у вас конструкторы можно найти по команде ls /sbin/mkfs*, а список опций конкретной ФС посмотреть на man-странице соответствующего конструктора (например, man mkfs.vfat).

Замечу только, что для ext3fs после ключа -J можно указать опции журналирования: size=<размер> — размер журнального файла в мегабайтах, и device=<устройство> — внешний журнал, заранее созданный на другом разделе.

Как я уже сказал, преобразовать существующий раздел ext2fs в ext3fs можно без перезагрузки системы, простым добавлением журнала командой tune2fs:

# tune2fs -j /dev/hd5

Дополнительные конструкторы (для ReiserFS, XFS и т.п.) устанавливаются из пакетов reiserfsprogs и xfsprogs соответственно.

В результате на новом разделе образуется корневой каталог новой файловой системы и в нем — подкаталог /lost+found. Не удаляйте этот подкаталог: утилита fsck, предназначенная для проверки целостности ФС, помещает в него найденные куски нарушенных файлов.

Настройка автоматического монтирования при загрузке компьютера. Команда mount

Чтобы с новой файловой системой можно было работать, она должна быть при помощи операции монтирования включена в общее дерево каталогов (п.1.1.3). О ручном монтировании/размонтировании применительно к съемным носителям сказано в п.4.2.5, а здесь я скажу, как сделать так, чтобы разделы жесткого диска автоматически монтировались при загрузке системы и демонтировались при останове. Для этого их нужно прописать в файл /etc/fstab, который читает команда mount в ходе начальной загрузки (об этапах загрузки и загрузочных сценариях см. п.9.1).

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

<устройство> <точка_монтирования> <тип> <опции> <дамп> <номер_fsck>

♦ Устройство — это файл устройства, к которому подключен раздел (например, /dev/hda5). Для сетевой файловой системы здесь должно быть указано имя сервера и каталог на нем.

♦ Точка_монтирования — это имя каталога, к которому файловая система будет подключена. Он должен существовать и (желательно) быть пустым. Для раздела подкачки (swap) значение этого поля не используется, но в файле /etc/fstab присутствовать все равно должно.

♦ Вместо типа ФС можно указать значение auto: в этом случае команда mount попытается определить тип самостоятельно.

♦ Дамп — это отметка о необходимости резервного копирования данной ФС программой dump (п.10.4.3). Значение 1 говорит о том, что резервировать нужно, значение 0 — нет.

♦ Номер_fsck: утилита fsck обычно запускается перед автоматическим монтированием ФС, проверяет ее на целостность и пытается исправить найденные ошибки. Это процедура долгая, и для ускорения загрузки можно либо отключить проверку для некоторых ФС (значение 0), либо для некоторых разделов запускать ее параллельно. Значение этого поля задает порядок проверки разных ФС: если номера одинаковые, то системы будут проверяться параллельно. Ясно, что ускорение может получиться только в том случае, когда параллельно проверяемые разделы находятся на разных физических дисках.

Справку об опциях монтирования команды mount можно получить по команде man mount. В таблице 2.4 перечислены самые употребительные из них.


Основные опции монтирования Таблица 2.4

Опция Назначение
auto ФС может быть смонтирована автоматически
га Смонтировать файловую систему в режиме «только чтение»
rw Смонтировать файловую систему для чтения и для записи (по умолчанию)
dev ФС может содержать файлы блочных и символьных устройств. Они интерпретируются как специальные файлы
exec Файлы на ФС могут быть исполняемыми
suid Разрешить использование битов SUID и SGID
user Разрешить непривилегированному пользователю монтировать и размонтировать данную файловую систему. Это значение влечет за собой noexec, nosuid и nodev, если после него явно не указано exec, suid или dev
noauto nodev noexec nosuid nouser Значения, противоположные соответствующим без «no»
defaults Установки по умолчанию: rw, suid, dev, exec, auto, nouser, async
codepage=<значение> Интерпретировать символы в именах файлов согласно кодовой странице
iocharset=<значение> Выводить символы в именах файлов согласно набору символов

Программа установки создала файл /etc/fstab, в котором перечислены все ваши Linux-разделы (корневой, swap и, если вы послушались п.1.3.4, /home). Теперь нужно сделать так, чтобы из-под Linux были видны данные на ваших Windows-разделах. Проверьте, поддерживает ли ваше ядро типы ФС на Windows-разделах (cat /proc/filesystems, в выводе команды должны присутствовать слова vfat и/или ntfs). Обычно ядро, поставляемое с дистрибутивом, собрано без поддержки NTFS — если ваш Windows-раздел отформатирован с этим типом, то вам придется либо пересобрать ядро, либо, что гораздо проще, конвертировать раздел в тип FAT32.

Итак, после всех этих проверок я вписал в файл /etc/fstab строку:

/dev/hda6 /mnt/disk_e vfat rw,codepage=866,iocharset=utf8

…и получил каталог /mnt/disk_e, всем файлам в котором приписан в качестве владельца root, а в качестве прав доступа — rwx-rxr-x. Если вас такой режим доступа не устраивает и хочется иметь право писать в этот каталог от имени непривилегированного пользователя, прочитайте на man-странице команды mount об опциях uid, gid и umask.

Глава 3 Работаем в командной строке

3.1. Как устроен Linux: ядро и процессы

Главная, постоянно находящаяся в оперативной памяти, часть ОС Linux называется ядром (Kernel). Ядро ОС обрабатывает прерывания от устройств, выполняет запросы системных процессов и пользовательских приложений, распределяет виртуальную память, создает и уничтожает процессы, обеспечивает многозадачность посредством переключения между ними, содержит драйверы устройств, обслуживает файловую систему (см. рис. 3.1).

Рис. 3.1. Устройство ОС Linux

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

Начальная загрузка системы состоит в том, что файл с образом ядра считывается в оперативную память, начиная с нулевого адреса. Этот файл находится в каталоге /boot и называется vmlinuz-x.y.z, где x.y.z — это номер версии ядра. На текущий момент большинство дистрибутивов основано на ядре версии 2.4, хотя уже вышло ядро 2.6 (Fedora Core 3) и кое-где еще встречается версия 2.2.

Примечание

По соглашению разработчиков ядра, все ветви с четным номером (2.2, 2.4 и т.д.) считаются стабильными и рекомендуются для широкого использования, а на ветвях с нечетным номером испытываются новые идеи, Линус Торвальдс предложил распространить эту схему нумерации и на третью цифру версии: в ядра с нечетными номерами добавлять новые функции, а в четных — только исправлять обнаруженные ошибки.

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

Этих компонент ОС Линус Торвальдс не создавал: они поступили из проекта GNU (http://www.gnu.org), участники которого с 1984 года работают над созданием полноценной UNIX-подобной ОС, целиком состоящей из свободно распространяемого программного обеспечения. К 1991 году им не хватало только ядра, и эту-то прореху и заполнил Торвальдс. Так что ОС, которой посвящена эта книга, правильнее называть не Linux, а «операционной системой GNU, основанной на ядре Linux», или просто GNU/Linux.

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

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

Рис. 3.2. Виртуальная память процесса

Напоминаю, что такое виртуальная память. Каждому процессу разрешено считать, что его адреса начинаются с нулевого адреса и от него наращиваются. Таким образом, в 32-разрядной ОС процесс может адресовать 4 гигабайта оперативной памяти. Механизм виртуальной памяти позволяет процессу думать, что именно столько ему и выделено, хотя физически объем ОЗУ вашей машины — какие-то жалкие 256 Мбайт. Недостающую память заменяет жесткий диск путем записи временно не используемых страниц памяти в раздел подкачки (свопинга).

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

3.2. Жизнь процесса

Таблица процессов

С точки зрения ядра процесс представляет собой запись в таблице процессов. Эта запись содержит данные, существующие в течение всего времени жизни процесса, и сведения о его состоянии. Размер таблицы процессов позволяет запускать несколько сотен процессов одновременно. Другая важная информация о процессе — например, таблица всех открытых процессом файлов — хранится в его адресном пространстве. Запись в таблице процессов и пространство процесса вместе составляют контекст, или окружение, процесса. В него входят:

♦ PID — идентификатор процесса. Он принудительно назначается планировщиком при запуске процесса.

♦ PPID — идентификатор родительского процесса (о порождении процессов — дальше в этом же параграфе).

♦ TTY — имя управляющего терминала (терминал, с которого запущен процесс).

♦ WD — текущий каталог процесса, от которого отсчитываются относительные пути.

♦ RID, RGID — реальные ID и групповой ID пользователя, запустившего процесс.

♦ EUID, EGID — эффективные ID и GID: см. п.2.1.4.8.

♦ NICE — показатель уступчивости. Процессы выполняются в режиме разделения времени, то есть время центрального процессора делится между готовыми к выполнению процессами с учетом их приоритета. Чем выше показатель уступчивости, тем ниже приоритет.

♦ Переменные окружения.

Системные вызовы fork() и exec() или как размножаются процессы

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

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

Может случиться и так, что процесс выполняет вызов exec() без fork(): тогда не возникает нового процесса, но в старом начинает выполняться другая программа. Например, программа login выполняется с привилегиями суперпользователя, поскольку ей нужен доступ к файлу паролей. Проверив пароль, она устанавливает себе права зарегистрировавшегося пользователя и выполняет вызов exec(), замещая свой код кодом командной оболочки. После этого из командной оболочки изменить свои привилегии обратно на root нельзя, потому что кода программы login в текущем процессе уже нет.

Рис. 3.3. Как размножаются процессы

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

Снимок протекающих в системе процессов — команда ps

Моментальный снимок протекающих в системе процессов можно посмотреть с помощью команды ps (process status). Без аргументов она покажет список процессов, связанных с текущей консолью (или виртуальным терминалом). Список возможных ключей команды можно, как обычно, получить по команде ps --help. Вот некоторые полезные из них:

♦ -p <список_PID>: только процессы с указанными ID;

♦ -u <список_USERID>: только запущенные указанными пользователями;

♦ : все процессы в системе;

♦ -f: полная форма вывода;

♦ : вывод иерархии процессов в форме дерева.

Рис. 3.4. Фрагмент иерархии процессов

Динамика процессов — команда top

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

Категории процессов

Процессы делятся на три категории:

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

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

♦ Демоны. Запускаются после инициализации ядра. Выполняются в фоновом режиме, не связаны ни с одним пользователем, обеспечивают работу различных служб (например, управление сетью). Главным демоном считается init — процесс инициализации системы.

Примечание

Название «демон» (daemon) не имеет ничего общего с потусторонними существами: это просто сокращение от Disk And Execution MONitor.

3.3. Взаимодействие процессов

Из всех средств межпроцессного взаимодействия, которыми так богаты UNIX-подобные ОС, в этой главе мы рассмотрим только конвейеры и сигналы.

3.3.1. Конвейер (pipe)

В главе 2 вы познакомились с командой-фильтром more, вызываемой так:

< команда_выводящая_много_строк > | more

Символ «|» — это и есть конвейер. Его можно понимать как канал, в который один процесс может только писать, а другой — только читать из него. Выборка и помещение информации в такой канал происходит в порядке FIFO (First In/First Out).

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

Например, я хочу узнать, осталась ли у меня еще свободная виртуальная консоль, чтобы зарегистрироваться там и спросить справку по какой-то команде, не прерывая процессов, протекающих на других консолях. Я знаю, что виртуальную консоль обслуживает программа mingetty, которая после регистрации на этой консоли замещает свой код на код командной оболочки. Значит, мне нужно подсчитать количество процессов mingetty. Есть команда wc (word count), умеющая подсчитывать число строк, слов или байтов в файле. Есть команда grep, умеющая выбирать из файла строки, содержащие указанный фрагмент текста. Соединяю их конвейером:

$ ps -е | grep mingetty | wc -l

3.3.2. Сигналы

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

Всего в Linux 63 сигнала, обозначаемых своими номерами или символическими именами. Имена всех сигналов начинаются с SIG, и эту приставку часто опускают: так, сигнал, требующий прекратить выполнение процесса, называется SIGKILL, или KILL, или сигнал 9.

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

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

$ kill [-s <сигнал>] <PID>

где <сигнал> — это номер или символическое имя.

Несколько часто встречающихся сигналов перечислены в таблице 3.1. Полный список можно получить по команде kill -l (list).


Сигналы Linux Таблица 3.1

Имя Назначение Реакция процесса-получателя
1 HUP Hangup — отбой Демоны перечитывают свои конфигурационные файлы
2 INT Interrupt Прекратить выполнение (перехватывается)
3 QUIT Сильнее, чем INT то же
4 ILL Illegal instruction. Программная ошибка Обработать ошибку. По умолчанию — прекратить выполнение
8 FPE Floating point exception Вычислительная ошибка (деление на ноль) Обработать ошибку. По умолчанию — прекратить выполнение
9 KILL Убить процесс Немедленно прекратить выполнение. Не перехватывается
11 SEGV Segmentation violation. Попытка доступа к чужой области памяти Обработать ошибку. По умолчанию — прекратить выполнение
13 PIPE Нет процесса, читающего из конвейера Обработать ошибку
15 TERM Termination. Завершить процесс Корректно завершить выполнение. Перехватывается
17 CHLD Завершился дочерний процесс Принять возвращенное им значение

Некоторые сигналы посылаются по нажатии комбинации клавиш. Так, Ctrl+C посылает сигнал INT, a Ctrl+\ (обратный слэш) — сигнал QUIT. Получает эти сигналы тот процесс, который сейчас занимает консоль — например, ожидает вашего ввода.

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

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

3.4. Командная оболочка. Bash

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

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

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

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

Для Linux разработано много командных интерпретаторов. Вот несколько из них:

sh Bourne shell, оболочка Борна, стандарт для многих UNIX-подобных систем;

bash Bourne Again shell, «еще одна оболочка Борна»;

csh С shell, оболочка Си: синтаксис ее командного языка похож на синтаксис языка С;

tcsh tiny С shell, минимальная оболочка Си;

pdksh public domain Korn shell, общедоступная оболочка Корна;

sash stand-alone shell, автономная оболочка, может быть использована в случае, когда программные библиотеки недоступны.

Список всех установленных в системе программ-оболочек находится в файле /etc/shells. У меня он выглядит так:

/bin/sh

/bin/bash

/sbin/nologin # это "оболочка" для тех,

              # кому запрещен вход в систему

/bin/ash

/bin/bsh

/bin/ksh

/usr/bin/ksh

/usr/bin/pdksh

/bin/tcsh

/bin/csh

Начальная оболочка для каждого пользователя, запускаемая для него при регистрации в системе, указывается в файле /etc/passwd:

$ grep den /etc/passwd # выбрать из файла строки,

                       # содержащие подстроку den

den:x:501:501:Denis:/home/den:/bin/bash

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

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

По умолчанию новому пользователю назначается оболочка bash. Это прекрасная оболочка, включающая много усовершенствований и лучших свойств других ободочек, и менять ее я не рекомендую. В дальнейшем, говоря «оболочка», я буду иметь в виду именно bash.

3.4.1. Встроенные команды

Список встроенных команд оболочки bash можно получить по команде help или найти на man-странице в секции SHELL BUILTIN COMMANDS. Напоминаю, что поиск в выводе команды man выполняется командой /<образец><Ввод>, а поиск следующего вхождения образца — по нажатии клавиши <n>.

Справку по команде, имя которой вы знаете, можно получить командой help <имя>.

Вот несколько полезных встроенных команд:

♦ alias <псевдоним> <длинная команда с аргументами> — назначение псевдонима. Без аргументов выводит список всех имеющихся псевдонимов. Обратите внимание, что у пользователя root команда rm сделана псевдонимом для «rm -i», чтобы он не забыл воспользоваться ключом -i (см.п.2.1.4.3). Вы тоже можете назначить псевдоним для опасной команды risk, создав сценарий, который сначала будет спрашивать «а вы уверены?», и только при положительном ответе запускать risk на выполнение. Дайте этому сценарию имя risk, а внутри него ссылайтесь на настоящую команду risk по ее полному пути. Удалить псевдоним из списка можно командой unalias.

♦ echo [аргументы] — вывод аргументов на экран. Полезно, если нужно выполнить подстановку (п.3.4.4) и посмотреть, что получится.

♦ enable <имя_команды> — заставляет оболочку вместо встроенной команды выполнить исполняемый файл с таким же именем. Полезно, если у вас есть собственный сценарий по имени, например, echo.

♦ eval [аргументы] — конструирование команды на лету, из указанных аргументов, и отправка ее на выполнение.

♦ let <переменная>=<арифметическое выражение> — вычисление выражений. Так, команда var= 1 + 2 присвоит переменной var (см. п.3.4.3) значение «1 + 2», а команда let var=1+2 — значение «3».

♦ source <файл> — прочитать и выполнить команды, содержащиеся в файле. Применяется для определения пользовательских переменных и функций (п.3.4.3).

Другие встроенные команды служат инструкциями командного языка bash.

3.4.2. История команд

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

Команда history без аргументов выводит всю историю, нумеруя при этом команды в порядке их ввода.

Если вас интересуют только последние несколько команд:

$ history 23 # показать последние 23 команды

Если вас интересуют все команды, имеющие отношение к монтированию каталога public:

$ history | grep mount | grep public

# еще один пример конвейера

Номера команд выводятся для того, чтобы вы могли снова ввести эту команду, набрав

$ ! <номер>

или

$ !! # запускает последнюю из введенных команд

или

$ !<первые_буквы> # запускает последнюю из команд,

# начинающихся с этих букв.

Стрелки «вверх» и «вниз» перемещают по командной истории, не отправляя команду на выполнение, а вводя ее в командную строку для редактирования.

Последнюю команду может для вас отредактировать сама оболочка. Для этого вместо команды введите:

$ ^что_заменить^чем_заменить

Например, вы запросили справку по команде оболочке bash: man bash. Если сразу после этого вы хотите посмотреть справку по оболочке csh, можете вместо man csh набрать

$ ^ba^c

Помните, что замене подлежит первое вхождение подстроки «что_заменить».

Если вы хотите не изменить, а дополнить последнюю команду (например, пропустить ее вывод через фильтр more), введите

$ !! | more

3.4.3. Переменные

Описание и использование переменных

Как любой язык программирования, командный язык bash поддерживает переменные. Тип их — строковый. Оператор присваивания выглядит так:

$ <имя_переменной>=<значение>

Имя должно начинаться с буквы и может состоять из латинских букв, цифр, знака подчеркивания. Если значение переменной содержит специальные символы, их нужно экранировать кавычками или обратным слэшем (см. п. 2.1.1).

Операция подстановки значения переменной обозначается символом $ (не путайте с приглашением bash). Вывести значение переменной можно командой echo:

$ cwd=/home/den/MyDownloads/packages

$ echo cwd # выводит имя переменной

cwd

$ echo $cwd # выводит значение переменной

/home/den/MyDownloads/packages

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

$ export HELLO="Hello from environment!" # пробел нужно экранировать

Чтобы почувствовать разницу, создайте простейший командный сценарий, выводящий значения двух переменных. Для записи сценария можно создать пустой файл и открыть его в каком-нибудь ASCII-редакторе, а можно вспомнить п.2.1.4 и воспользоваться командой cat:

$ cat > myscript

echo Env variable: $HELLO

echo Local variable: $hello # помните о разнице в регистре?

# Это другая переменная.

^D

$

Комбинация клавиш Ctrl+D завершает ввод и закрывает файл, и вы снова видите приглашение оболочки.

Получившийся файл сценария нужно сделать исполняемым (п.2.1.4):

$ chmod а+x myscript

Теперь осталось определить переменную hello и запустить сценарий:

$ hello="Hello from local"

$ echo $hello

Hello from local

$ ./myscript

Env variable: Hello from environment!

Local variable:

$

Переменные окружения

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

Несколько таких переменных перечислены в таблице 3.2.


Переменные окружения bash Таблица 3.2

Имя Назначение
BASH_VERSION Версия оболочки
USER Имя. под которым вы зарегистрировались
UID, EUID Реальный и эффективный userID
HOME Путь к вашему домашнему каталогу
HOSTNAME Имя вашего компьютера
HOSTTYPE Тип процессора (i386 или другой)
OSTYPE Операционная система (linux-gnu)
HISTFILE, HISTSIZE Расположение и размер файла истории команд
LANG Язык текущего сеанса
LINES, COLUMNS Число строк и столбцов на экране текстовой консоли
PS1, PS2, PS3, PS4 Переменные, определяющие вид приглашения оболочки
PATH Порядок просмотра каталогов в поисках исполняемого файла с заданным вами именем, когда полный путь к нему не указан

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

Обратите внимание на переменную PATH: среди каталогов, в которых bash ищет исполняемый файл, нет текущего. Поэтому в предыдущем примере, если бы вы попытались исполнить сценарий командой myscript, оболочка ответила бы «Command not found». Нужно было указать путь к исполняемому файлу, и мы указали его относительным способом, считая от текущего каталога: ./myscript.

Переменная PS1 у меня выглядит так: [\u@\h \W]\$. Это значит, что приглашение оболочки у меня формируется из регистрационного имени (username), имени машины (hostname), текущего каталога (working dir) и символа $. Я могу и изменить его:

[den@dhsi.labs ~]$ pssave=$PS1 # сохраняю старое значение

[den@dhsilabs PS1="\W>"

~> # новое приглашение состоит из имени текущего каталога и символа >

-> cd My* MyDownloads>

MyDownloads > PS1=$pssave # поиграли, и хватит

[den@dhsilabs MyDownloads]$

Удалить переменную можно командой unset <имя>.

Быстрая смена каталога

Переменная CDPATH задает список каталогов, в которых будет происходить поиск нужного подкаталога при смене каталога (использовании команды cd). Проще всего пояснить, как работает CDPATH, на примере. Пусть в моем каталоге /home/denis/books/linux-server есть подкаталоги chapter1 ... chapter20. Если мне нужно перейти в подкаталог chapter2, то я могу сэкономить на наборе имени его родительского каталога, внеся это имя в переменную CDPATH:

$ export CDPATH=:.:/home/denis/books/linux-server

Теперь по команде cd chapter2 я попаду в каталог /home/denis/books/linux-server/chapter2 из любого места файловой системы, если подкаталога chapter2 нет в текущем каталоге.

Настройка командной строки. Утилита tput

Наверное, многим хочется, чтобы их компьютер не был похож на компьютер коллеги за соседним столом. Кто-то меняет темы, кто-то — обои. Мы попробуем изменить командную строку текстовой консоли. Рассмотрим сценарий, выводящий текущий каталог в правом верхнем углу — обычно этот угол при выводе текста остается свободным. Для чего? А просто так — чтобы было не как у всех.

Для манипуляции с курсором и цветом букв и фона используется утилита tput. В п.2.1.4 вы узнали, как применить ее для восстановления «сбитой» консоли, а сейчас посмотрите на то, что она умеет еще. А потом прочитайте man-страницу.

Листинг 3.1. Демонстрация возможностей утилиты tput

#!/bin/bash


function prompt_command {

 # сохраняем текущую позицию курсора

 tput sc

 # вычисляем длину, необходимую для вывода текущего каталога

 # текущий каталог можно узнать с помощью команды pwd

 let backwash=$(tput cols)-$(echo $(pwd) | wc -m)-2

 # позиционируем курсор Y=0, X=длина

 tput cup 0 ${backwash}

 # установка цвета букв, начертание — жирное

 tput setaf 4 ; tput bold

 # выводим полный путь в квадратных скобках

 echo -n " ["

 # устанавливаем цвет

 tput setaf 6

 # отображаем путь

 echo -n "$(pwd)"

 # устанавливаем цвет для закрывающей скобки

 tput setaf 4 ; tput bold

 # отображаем ]

 echo -n "]"

 # возвращаем курсор в исходную позицию

 tput rc

}


PROMРТ_СОММAND=prompt_соmmand


GREEN="\[$(tput setaf 2 ; tput bold)\]"

WHITE="\[$(tput setaf 7 ; tput bold)\]"

NO_COLOUR="\[$(tput sgr0)\]"


case $TERM in

xterm*|rxvt*)

 TITLEBAR='\[\033]0;\u@\h \007\]'

 ;;

*)

 TITLEBAR=""

 ;;

esac


PS1="${TITLEBAR}\

 $GREEN\u@\h \

 $WHITE\$$NO_COLOUR "

PS2='> '

PS4='+ '

Команды утилиты tput:

tput setaf [1-7] установка цвета символов с использованием ANSI ESC-последовательности;

tput setab [1-7] установка цвета фона;

tput rev обратить цвета фона и переднего плана;

tput bold установка жирного начертания;

tput dim отключение жирного начертания;

tput smul установка подчеркнутого начертания;

tput rmul отключение подчеркнутого начертания.

3.4.4. Подстановка переменных и команд

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

$ cd $cwd

Вывести на экран файл README из этого каталога можно, введя команду

$ more ${cwd}/README

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

Мощным инструментом оболочки bash является подстановка команд, то есть замена имени команды на результат ее выполнения. Так, считая /home/den/МуDownloads/packages текущим каталогом, мы могли бы присвоить переменной cwd то же самое значение проще:

$ cwd=`pwd` # напоминаю, что команда pwd возвращает

            # путь к текущему каталогу

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

$ ps -ef | grep $USER | less

3.4.5. Шаблоны имен файлов

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


Символы шаблонов Таблица 3.3

Символ Значение Пример
* Произвольная строка символов, в том числе пустая ~/*.png — все файлы в домашнем каталоге с расширением png; Glava* — файлы Glava, Glava03 и Glava.old
? Любой одиночный символ Glava?? — файлы Glava03 и GlavaXZ, но не Glava и не Glava.old
[m,M,x] Любой символ ив перечисленных в скобках Glava0[3,8] — файлы Glava03 и Glava08, Glava?[3,8] — файлы Glava03, Glava08, Glava13, Glava18, Glava23
[a-nA-N] Любой символ ив указанных интервалов Glava0[2-4,9] — Glava02, Glava03, Glava04, Glava09
[^a-n,x,y] Любой символ, на указанный в скобках Glava[^0]* — все главы, начиная с 11

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

$ touch \* # создаст файл с именем "*". Только не

           # удаляйте его потом командой rm * !

$ rm Glava0\[3\,8\] # удалит файл с именем Glava0[3,8],

                    # а не Glava03 и Glava08.

3.4.6. Потоки ввода-вывода

Как я уже сказал, каждому процессу сопоставлена таблица открытых им файлов. Три первых позиции в этой таблице заняты всегда: каждый процесс открывает потоки (помните, что в UNIX файл — это и есть поток данных?) для ввода и вывода данных, а также вывода сообщений об ошибках и другой диагностической информации. Эти потоки:

♦ 0 — стандартный ввод (stdin),

♦ 1 — стандартный вывод (stdout),

♦ 2 — стандартный поток сообщений об ошибках (stderr).

Ссылаться на эти потоки можно по их файловым дескрипторам. 0, 1 и 2 — это и есть такие дескрипторы.

По умолчанию потоки ввода-вывода связываются с консолью, с которой запущен процесс: стандартный ввод — с клавиатурой, другие два потока — с экраном (рис. 3.5, потоки cmd1).

Все потоки можно перенаправить в другой файл. Это может быть файл на диске, файл устройства (например, принтер или /dev/null) или стандартный поток другого процесса.

Для перенаправления стандартного вывода команды используется символ > («больше»). Если местом назначения служит файл, то можно его не перезаписывать, а присоединить (append) выводимые данные в его конец. Для такого перенаправления применяется символ >>.

Стандартный ввод перенаправляется символом < («меньше»).

Для перенаправления стандартного потока ошибок используется конструкция 2>. Чтобы присоединить stderr к stdout и перенаправить их вместе, пользуйтесь переадресацией 2>&1.

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

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

cmd2 < file1.txt | cmd3 2>&1 > file2.txt

cmd4 2> /dev/null | tee file3.txt file4.txt file5.txt

Рис. 3.5. Перенаправление потоков ввода-вывода

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

3.4.7. Группировка команд

Кроме конвейеров, команды можно соединять в списки. Простейший вид списка — несколько команд, разделенных точкой с запятой:

$ lpr myfile.txt ; lpq

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

В списки можно группировать не только одиночные команды, но и конвейеры:

$ ps -ef | head -n 1; ps -ef | grep httpd


UID    PID   PPID  С STIME TTY TIME     CMD

root   13565 1     0 13:11 ?   00:00:00 /usr/local/sbin/httpd

nobody 13566 13565 0 13:11 ?   00:00:00 /usr/local/sbin/httpd

nobody 13567 13565 0 13:11 ?   00:00:00 /usr/local/sbin/httpd

nobody 13642 13565 0 13:16 ?   00:00:00 /usr/local/sbin/httpd

Первый конвейер вырезает из списка процессов заголовок, а второй — информацию о демоне httpd.

Если требуется запустить команду на заднем плане и не ждать ее выполнения (асинхронный режим), то нужно завершить ее управляющим оператором &:

$ du --human-readable --total /home > diakusage.txt &

Команда du сообщает, сколько места на диске занято файлами в указанном каталоге. Обратите внимание на ключи: их имена предваряются не одним минусом, а двумя. Большинство команд поддерживает как короткие однобуквенные ключи, так и длинные — с осмысленными, легко запоминаемыми именами. Напоминаю, что список и значения ключей команды cmd можно получить, выполнив ее с ключом --help или --usage.

Конвейеры (или одиночные команды) в списке можно соединять управляющими операторами && и ||, получая «список И» или «список ИЛИ» соответственно:

cmd1 && cmd2 cmd3 || cmd4

Вторая команда в «списке И» будет выполнена только в случае успешного завершения первой. Типичный пример — создание каталога и переход в него:

$ mkdir mydir && cd mydir

Вторая команда в «списке ИЛИ» будет выполнена только в случае неуспешного завершения первой (возврата ею ненулевого значения):

$ my_command || echo "Команда my_command не найдена" | mail den

Вторая команда (конвейер) в этом примере формирует и посылает письмо с отчетом о неуспехе пользователю den.

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

$ ( date; free; who; ) > logfile

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

$ pwd; ( cd / tmp ; pwd ) ; pwd;

/home/den

/tmp

/home/den

$

Если нужно часто выполнять одну и ту же последовательность команд, можно оформить ее как функцию:

$ function morning_report {

> date;

> free;

> W;

> }

$ morning_report | mail root

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

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

$ cat > foo

myvar="Моя переменная"

function myfun {

 echo $myvar

}

^D

$ source foo

$ myfun

Моя переменная

$

Команда source выполняет инструкции, содержащиеся в файле, в текущей оболочке в отличие от исполнения файла, содержащего сценарий: тот выполняется в дочерней оболочке, и определенные в ней переменные и функции для родительской оболочки невидимы. Чтобы заметить разницу, удалите переменную myvar и функцию myfun из памяти оболочки командой unset, сделайте файл foo исполняемым командой chmod (п.3.4.3) и исполните его. Убедитесь, что после его выполнения переменная myvar и функция myfun остались не определены.

3.4.8. Инициализационные файлы bash

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

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

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

Команду установки переменной CDPATH, рассмотренной в п.3.4.3, имеет смысл добавить в .bash_profile, чтобы не пришлось вводить ее вручную в начале каждого сеанса работы в bash.

Глава 4 Рабочее место пользователя

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

♦ офисный набор: текстовый процессор, редактор электронных таблиц, система управления базами данных;

♦ средства просмотра и редактирования графической информации;

♦ средства общения с коллегами (электронная почта, интернет-пейджер);

♦ средства получения информации из Интернета: веб-браузер, ftp-клиент;

♦ программы для воспроизведения аудио- и видеозаписей;

♦ узкопрофессиональные программные пакеты: математические, инженерные, бухгалтерские, разработчика программного обеспечения и т.п.

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

4.1. Графическая система X Window

Работа в графическом режиме под Linux возможна благодаря системе, именуемой X Window (или просто Иксы; только не называйте ее X Windows), разработанной в Массачусетсом технологическом институте (MIT) и ставшей стандартом для всех UNIX-подобных систем. Сами по себе Иксы — это не графический интерфейс как таковой, а лишь набор спецификаций, которым этот самый графический интерфейс должен соответствовать. В настоящее время действует версия 11 выпуск 6 стандарта на графическую подсистему для UNIX-систем, которая кратко обозначается как X11R6.

Группа программистов, возглавляемая Дэвидом Вексельблатом (David Wexelblat) создала свободно распространяемую реализацию X Window для процессоров i80386-Pentium IV и совместимых с ними. Эта версия получила название XFree86, поскольку могла выполняться в операционных системах, предназначенных для процессоров, использующих систему команд x86 — Linux, FreeBSD и других. Однако с версии 4.4 команда разработчиков XFree86 перешла на новую лицензию, которую общественность сочла несовместимой со Стандартной Общественной лицензией и поэтому недостойной включения в некоммерческую ОС.

Блюдя чистоту идеи открытого кода, другая команда запустила проект X.Org (http://www.x.org), представляющий собой развитие XFree86 от версии 4.3, еще имевшей «правильную» лицензию. В результате одни дистрибутивы (например, Fedora Core) содержат реализацию стандарта X11 от X.org, а другие (например, предыдущие ОС Red Hat) — от XFree86.org. Различия коснулись имен и расположения некоторых файлов.


Имена файлов в разных реализациях X11 Таблица 4.1

XFree86.org X.org
Исполняемые файлы X Server XFree86 Xorg
Файл настроек X Server /etc/X11/XF86Config /etc/X11/xorg.conf
Файл журнала X Server /var/log/XFree86.$DISPLAY.log /var/log/Xorg.$DISPLAY.log

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

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

Один из X-клиентов — это оконный менеджер (или диспетчер окон). Он управляет размещением окон на экране, определяет их вид и характер управляющих элементов. То есть именно он и представляет собой графический интерфейс пользователя (GUI) в собственном смысле. Таким образом, пользователь ОС Linux, в отличие от пользователя Windows, не привязан к одному графическому интерфейсу; таковых, определяемых оконным менеджером, теоретически может быть невообразимое множество.

От оконных менеджеров отличаются так называемые интегрированные графические среды, или просто оконные среды. Их отличие в том, что наряду с функциями управления окнами они предоставляют доступ к некоторым наборам утилит и приложений, написанных специально для конкретной среды, более или менее тесно в нее встроенных и легко обменивающихся данными. Со многими популярными диспетчерами окон и оконными средами можно познакомиться по адресу http://xwinman.org.

Почти в любой дистрибутив включены хотя бы две интегрированные графические среды: KDE и GNOME. Я рекомендую использовать среду KDE — это очень мощная и одновременно простая в освоении и использовании оконная среда.

Не зря ее чаще, чем GNOME, назначают средой по умолчанию. По внешнему виду и функциональности вчерашним пользователям Windows она наиболее симпатична.

Обычно система X Window запускается автоматически при загрузке системы. Вы увидите графический менеджер регистрации (в зависимости от настроек вашей системы он может выглядеть по-разному), приглашающий вас ввести имя пользователя и пароль. Менеджер регистрации позволяет также выбрать сеанс, то есть оконную среду (KDE, GNOME или другую), которую вы будете использовать. Одна из установленных оконных сред запускается по умолчанию.

Из оконной среды вы можете переключиться на текстовую виртуальную консоль, нажав комбинацию клавиш Ctrl+Alt+F<n>, где n — число от 1 до количества запущенных виртуальных консолей (по умолчанию их 6, но несколько можно отключить. Как это сделать, вы узнаете в п.9.1.2). Чтобы вернуться на графическую консоль, нажмите Alt+F7.

4.2. Оконная среда KDE

По своей простоте и интуитивности среда KDE (K Desktop Environment, http://www.kde.org) подобна графическим интерфейсам MacOS или Windows. KDE предоставляет богатые возможности взаимодействия программ, обладает встроенным механизмом drag-and-drop, полностью реализует вид и ощущение (look-and-feel) рабочего стола.

4.2.1. Рабочий стол KDE

Рабочий стол KDE состоит из трех частей:

1. самого рабочего стола, на котором могут размещаться значки файлов, каталогов и устройств;

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

3. панели задач, которая предназначена для переключения между работающими программами.

Привычный пользователь Windows сразу же ищет кнопку «Пуск». Есть в KDE такая кнопка. Она называется кнопкой «K» и находится в начале управляющей панели (по умолчанию — в левом нижнем углу). Под ней, как и в Windows, скрывается многоуровневое иерархическое меню. В вашем дистрибутиве оно, как и встроенная гипертекстовая справка, может быть даже русифицировано.

Рис. 4.1. Рабочий стол KDE

Для быстрого вызова меню «K» можно использовать комбинацию клавиш Alt+F1.

4.2.2. Запуск программ и переключение между ними

В общем случае запустить программу или приложение на выполнение можно несколькими способами:

♦ Щелкнуть мышкой по значку программы на панели (если таковой имеется).

♦ Щелкнуть мышкой по соответствующему значку рабочего стола (если такой есть).

♦ Выбрать программу из меню «K».

♦ Использовать файловый менеджер, например, Konqueror.

♦ Выбрать в меню «K» команду «Выполнить программу» и ввести имя запускаемой программы в строку ввода появившегося диалога. Быстро вызвать этот диалог можно комбинацией клавиш Alt+F2.

♦ Запустить программу с виртуального терминала.

Виртуальный терминал — это программа (Kterm или Konsole), в окне которой вы можете работать в режиме командной строки, как на обычной виртуальной консоли.

Примечание

Для знающих английский язык: названия приложений вроде Konqueror, Konsole, Kontact — это не опечатки, а знак того, что приложения разрабатывались для Оконной Среды K. Название «K» не расшифровывается никак. Впрочем, есть версия, что это название было выбрано в пику CDE (Common Desktop Environment), коммерческой оконной среде, разработанной для коммерческой UNIX.

Переключаться между запушенными приложениями можно комбинацией клавиш Alt+Tab. Вызвать контекстное меню любого объекта можно правой кнопкой мыши. В общем, все как в Windows... и еще несколько виртуальных рабочих столов. Они обозначены кнопками с цифрами на панели задач. Окна приложений открываются на текущий рабочий стол, и, когда вы наведете там достаточный беспорядок, вы сможете переключиться на чистый стол щелчком по такой кнопке или комбинацией клавиш Ctrl+Tab. Обратите внимание, что комбинация Alt+Tab переключает только между приложениями текущего стола.

4.2.3. Файловый менеджер Konqueror

Основные возможности

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

Как я любой другой файловый менеджер, Konqueror умеет:

♦ Копировать, перемещать, переименовывать и удалять файлы и каталоги;

♦ Просматривать файлы различных форматов;

♦ Создавать ссылки на файлы;

♦ Изменять свойства файла.

Команды меню и инструментальные кнопки представляют собой объединение команд, знакомых вам по Проводнику Windows и по привычному веб-браузеру. Кнопка «Домой» в режиме файлового менеджера выполняет переход в домашний каталог. Часть рабочей области можно отвести под виртуальный терминал (меню Окно|Эмуляция терминала).

Можно переключить Konqueror и в режим Midnight Commander. Все режимы на самом деле задаются настроечными файлами в каталоге ~/.kde/share/apps/konqueror/profiles (помните, что «~» — это ваш домашний каталог).

Программа, пользующаяся этими настройками, называется kfmclient.

Konqueror — не только файловый менеджер

При работе с FTP-сервером удобно видеть сразу два каталога — локальный и удаленный. Если вы используете Konqueror для работы с FTP, вы можете разделить окно «Завоевателя» на две части. Для этого нажмите Ctrl+Shift+L. Перед этим весьма желательно развернуть окно на весь экран. Выберите одну из частей (какую вам удобнее) и в строке Адреса (Location) введите адрес вашего FTP-сервера: ftp://ftp.server.ru. «Завоеватель» попросит вас ввести имя пользователя и пароль, а после этого вы сможете удобно работать с FTP-сервером.

Если в строке Адреса ввести smb:/, вы увидите рабочие группы и домены Windows, если таковые есть в вашей сети. Для работы этой функции должен быть установлен и запущен пакет Samba (подробнее см. п.6.3).

А теперь попробуйте ввести в строке адреса rlan:/. Думаю, вы найдете в своей сети много интересного.

Вставьте Audio CD в ваш привод CD-ROM. Запустите Konqueror и введите audiocd:/. Вы увидите список дорожек вашего Audio CD, которые будут представлены в виде отдельных WAV-файлов. В зависимости от установленных плагинов вы можете преобразовать дорожки в форматы MP3 или OGG или же просто сохранить на диске как WAV-файлы.

4.2.4. Центр управления KDE

Центр управления играет ту же роль, что панель управления Windows, с той лишь разницей, что Панель управления настраивает всю систему в целом, а Центр управления — только KDE. Зато в пределах KDE настройке поддается практически все. В разных дистрибутивах и разных версиях KDE может отличаться не только организация и состав разделов Центра управления, но и способ его вызова. Так, в KDE версии 3.2 он называется Настройка своего рабочего стола и вызывается через K|Система, а в KDE 3.3 он вернулся в меню K. Следующая таблица (табл. 4.2) пригодна для KDE 3.2. Последней вышла версия KDE 3.4. Ее особенности мы рассмотрим в отдельном разделе (см. п.4.2.7).


Разделы Центра управления Таблица 4.2

Раздел Описание
LookNFeel В этом разделе находятся настройки виртуальных рабочих столов, декорации окон, панелей (в том числе и панели задач), пиктограмм, стиля и оформления окон, фона рабочего стола и хранителя экрана
Безопасность Параметры шифрования, в том числе поддерживаемые алгоритмы шифрования
Звук Параметры сервера звука aRts и системных звуков
Информация Сведения о системе. Этот раздел — своеобразный аналог программы Sysinfo из пакета Norton Utilities
Периферия Настройки периферийных устройств: цифровой камеры, клавиатуры и мыши
Компоненты Опции различных компонентов и служб KDE
Просмотр Web Параметры браузеров Konqueror и Netscape
Сеть Настройки для работы с сетью. В этом разделе можно указать, как с сетью будете работать вы. Настраивать же собственно сеть может только администратор
Система Общесистемные параметры, например, параметры менеджера регистраций. Изменить их вправе только суперпользователь (администратор)
Специальные возможности В этом разделе вы сможете определить привязки клавиш, раскладки клавиатуры, выбрать страну и язык
Управление питанием Загляните в этот раздел, если вы используете ноутбук

В разделе Специальные возможности→Страна и язык обязательно установите свою страну (Россия или Украина), выберите язык и установите кодировку (koi8-r или koi8-u). Все эти параметры необходимы для правильного отображения русскоязычных символов в окнах приложений KDE.

4.2.5. Работа со съемными носителями в KDE

Чтобы ОС Linux получила доступ к данным на вашей дискете, компакт-диске или flash-накопителе, файловая система съемного носителя должна быть включена в общее дерево каталогов как одна из его ветвей. Этот процесс называется монтированием. Логически он представляет собой сопоставление корневому каталогу подключаемой файловой системы какого-то из уже существующих каталогов. Этот каталог называется точкой монтирования. После того, как к каталогу примонтирована другая файловая система, все бывшие в нем файлы временно — до размонтирования — становятся недоступны, а вместо них видны файлы съемного носителя. Отсюда следует, что в качестве точки монтирования лучше выбирать пустой каталог.

Оконная среда KDE до версии 3.3 не выполняла монтирование автоматически, и вы должны знать, как сделать это вручную.

Обычно команда mount применяется в формате:

mount -t <тип_ФС> <устройство> <точка_монтирования>

Устройство — это имя файла этого устройства. Большинство современных CD-ROM-приводов подключаются к IDE контроллеру, поэтому для ссылки на компакт-диск используется имя IDE-устройства — чаще всего /dev/hdc. Инсталлятор обычно распознает CD-ROM и создает символическую ссылку /dev/cdrom->/dev/hdc.

Типы файловой системы на съемных носителях чаще всего такие:


Таблица 4.3

Название Система
ext2 Основная файловая система Linux
ext3 Журналируемая надстройка, полностью совместимая с ext2
vfat Файловая система Windows: FAT, VFAT, FAT32
iso9660 Файловые системы для компакт-дисков

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

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

Так, для подключения flash-накопителя я:

1. включаю его в USB-порт;

2. перехожу в текстовую консоль или открываю окно виртуального терминала;

3. mount /media/usbdisk # или mount /dev/sda1.

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

umount [устройство | точка_монтирования]

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

При работе с компакт-дисками обычно не возникает сбоев, потому что лоток привода CD-ROM контролируется системой. Вы просто не сможете извлечь компакт-диск до тех пор, пока устройство не будет размонтировано. А вот при работе с дискетами и flash-накопителями проконтролировать вас некому. Помните, что, пока вы не размонтировали дискету, физическая запись на нее не будет произведена. Это значит, что, если вы сохранили свой документ на дискету и вытащили ее из дисковода, файла документа на ней не будет, несмотря на то, что вы вышли из текстового редактора. Вы забыли размонтировать файловую систему!

4.2.6. Добавление собственных команд в контекстное меню KDE

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

Давайте создадим дополнительную команду, которая делает файл исполняемым. Это действие очень полезно, если вы часто пишете сценарии bash (глава 8). Ведь сценарии bash — это обычные файлы, созданные в текстовом редакторе. Чтобы сценарий запускался, нужно с помощью команды chmod +x имя_файла сделать его исполняемым — но команду вводить лень, хочется все сделать мышкой…

В любимом текстовом редакторе создайте файл следующего содержания:

Листинг 4.1. Файл make_exe.desktop

[Desktop Entry]

ServiceTypes=all/allfiles

ServiceType=application/x-shellscript

Actions=MakeExe


[Desktop Action MakeExe]

Name=Make executable

Name[ru]=Сделать файл исполняемым

Exec=chmod +x %f

Icon=kfm

Рассмотрим первую секцию. Первая директива задает тип файлов, для которых можно выполнить указанное действие. В данном случае действие доступно для всех файлов (allfiles). Если вам нужно выполнить какое-то действие для каталога, то значением директивы ServiceTypes должно быть inode/directory.

Вообще в качестве значения этой директивы можно указать любой MIME-тип, например:

ServiceTypes=audio/x-mp3

Если действие должно быть выполнено для всех типов файлов, кроме некоторых, используйте директиву ExcludeServiceTypes. Например, действие архивирования не имеет смысла производить над архивами:

ServiceTypes=all/allfiles

ExcludeServiceTypes=application/x-zip,kdedevice/*

Директива Actions определяет действия, описанные в файле. В данном случае описано только одно действие MakeExe, которое определено в секции [Desktop Action MakeExe]. Директива Name — это надпись, которую вы увидите в контекстном меню KDE. Желательно писать ее на английском языке. Директива Name[ru] — это надпись, которую увидит пользователь локализованного KDE.

Директива Exec — это команда, которая будет выполнена. %f — параметр, определяющий имя файла; то есть имя файла, на котором вы щелкнули правой кнопкой, будет подставлено вместо %f.

Созданный файл сохраните под именем make_exe.desktop.

Как видите, в этом нет ничего сложного. Осталось только сохранить файл в нужном каталоге — /usr/share/apps/konqueror/servicemenus. Для записи в этот каталог нужны права суперпользователя. Если же администратор системы не вы, то скопируйте файл в каталог ~/.kde/share/apps/konqueror/servicemenus, и новая команда будет доступна только вам.

4.2.7. Новое в KDE 3.4

В состав дистрибутива Fedora Core 4 вошла новая версия KDE 3.4, в которой, как сообщают (www.kde.org), исправлено более 6500 ошибок, учтено более 1700 пожеланий, включено 80000 пополнений от различных разработчиков. Среди главных новшеств:

♦ Полностью обновлена система корзины.

♦ Новая версия KPDF с возможностью выбора, копирования и вставки текста и изображений из PDF, а также с другими улучшениями.

♦ Добавлен синтезатор речи с возможностью интеграции в браузер Konqueror, текстовый редактор Kate, PDF-просмотрщик KPDF.

♦ Приложение Kontact поддерживает больше серверов совместной работы (groupware).

♦ Улучшен механизм обнаружения подключенных устройств через HAL. Теперь KDE монтирует съемные носители автоматически, но не спешите радоваться: кириллицу в именах файлов на USB-диске она автоматически не распознает, так что п.2.3 вам еще пригодится.

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

♦ Появилась возможность использования файлов в формате SVG (Scalable Vector Graphics) в качестве обоев для рабочего стола.

Рис. 4.2. Центр управления KDE 3.4

4.3. Оконная среда GNOME

4.3.1. Общее описание и методика работы

Что за зверь эта GNOME

Среда GNOME (GNU Network Object Model Environment — Сетевая Объектная Среда GNU) — один из основных конкурентов среде KDE. Среда GNOME (www.gnome.org) является частью проекта GNU (www.gnu.org), начатого в 1984 году и ставящего своей целью создание полноценной UNIX-подобной системы, целиком состоящей из свободно распространяемого кода.

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

В среде GNOME настраивается практически все: один раз настроив сеанс по своему вкусу, вам больше не нужно будет повторять его настройку, потому что менеджер сеансов позаботится о сохранении настроек. Как и в KDE, в GNOME поддерживается метод drag-and-drop.

На данный момент в составе большинства дистрибутивов Linux поставляется версия GNOME 2.6, но она уже считается устаревшей, поскольку относительно недавно вышла версия GNOME 2.10. Справедливости ради нужно отметить, что некоторые дистрибутивы (например, Fedora Core 3) содержат версию GNOME 2.8, которая не сильно отличается от версии 2.10.

Основные элементы среды — это рабочий стол, панель GNOME и панель задач. На панели GNOME (узкая полоска вверху экрана) расположены кнопки главного меню Приложения (выбор приложения) и Команды (различные команды, например, Выполнить или Завершить сеанс), а также апплеты. Все остальное пространство называется рабочим столом (см. рис. 4.3). Нижняя полоска внизу экрана — это панель задач. Ее можно временно убрать с экрана, щелкнув по стрелке в углу. Апплеты — небольшие программы, которые работают внутри панели и запускаются щелчком мыши по значку на панели. Сразу после установки вы можете увидеть там, например, календарь.

Рис. 4.3. Рабочий стол GNOME

Один из базовых принципов GNOME 2 состоит в том, чтобы упрощать все, что только можно: элементов управления под рукой у пользователя должно быть как можно меньше. Девизом GNOME 2 стала фраза «just works» — «работает, и все», без дополнительных настроек.

Так, монтирование съемных носителей выполняется автоматически: вставьте компакт-диск или flash-накопитель, и на рабочем столе сразу же появится соответствующий значок. Размонтируйте носитель командой Отсоединить (Eject) из контекстного меню этого значка. Следует отметить также, что GNOME распознает тип съемного носителя и в зависимости от типа запускает то или иное приложение. Например, когда вы вставите DVD-диск, будет запущен DVD-проигрыватель.

Файловый менеджер Nautilus

Начиная с версии 1.4, в пакет GNOME входит файловый менеджер Nautilus, в дальнейших версиях ставший файловым менеджером по умолчанию. Это разработка компании Eazel, собравшей у себя ветеранов Apple — создателей интерфейса Macintosh, до сих пор никем не превзойденного по простоте и удобству. В нем нет ничего лишнего: ни панели инструментов, ни адресной строки — только окно с файлами и каталогами.


Рис. 4.4. Файловый менеджер Nautilus

Каждый каталог открывается в новом окне, а размер, положение окна и представление файлов (значками или списком) привязаны к этому каталогу: в следующем сеансе окно этого каталога откроется в том же месте рабочего стола. Такой интерфейс называется пространственно ориентированным. Идея состоит в том, что на настоящем рабочем столе бумажные папки не замещают друг друга, а всегда лежат там, куда вы их последний раз переложили. Считается, что так новичку легче применить навыки, приобретенные в реальном мире. Если же вы не новичок, и привыкли к нормальному интерфейсу браузера, то пользуйтесь правой кнопкой мыши или смените настройки через конфигурационный файл в ~/.gconf/apps/nautilus/preferences.

Кнопка «Назад», привычная по Проводнику Windows, выглядит как галочка в левом углу строки состояния. В диалоге открытия файла отсутствует строка ввода имени, но ее можно вызвать комбинацией клавиш Ctrl+L.

В Nautilus встроена возможность записи компакт-дисков: программа nautilus-cd-burner.

С версии 2.6 основным веб-браузером стал Epiphany (http://www.gnome.org/projects/epiphany), облегченная версия браузера Galeon на движке Mozilla. Роль почтового клиента исполняет органайзер Evolution.

Настроить среду GNOME можно как из меню Приложения→Параметры (Applications→Desktop Preferences), так и из командной строки. Графический конфигуратор называется gconf-editor.

Расширенная система управления MIME-типами

Следующая особенность GNOME 2.8-2.10 — расширенная система управления MIME-типами. Если вы пытаетесь открыть не зарегистрированный в системе MIME-тип (например, файл с расширением .doc, а система не знает, какое приложение обрабатывает файлы с таким расширением), то будет отображено окошко, в котором можно будет связать данный тип с конкретным приложением для его обработки.

Рис. 4.5. Аналог команды «Открыть с помощью»

Если для данного типа установлено несколько программ (например, для HTML-файлов установлено несколько браузеров), то, щелкнув по файлу правой кнопкой мыши, вы сможете выбрать предпочитаемое приложение — прямо как команда «Открыть с помощью» в Windows. Такая организация интерфейса упрощает работу с Linux начинающим пользователям.

Поддержка службы DNS-Based Service Discovery

Теперь GNOME поддерживает службу DNS-Based Service Discovery, которая позволяет организовать привычное для пользователей Windows сетевое окружение — вам не нужно ни ломать голову над настройкой Samba, ни настраивать посторонние программы для просмотра Windows-сети.

Рис. 4.6. Самое обычное сетевое окружение

Особенности последних версий

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

Рис. 4.7. Выбор темы рабочего стола

Центр управления GNOME тоже стал намного приятнее. Чего только стоит апплет управления раскладками клавиатуры (Приложения→Параметры→Клавиатура)! До его появления некоторые пользователи и не знали, что такое раскладка Dvorak (или любая другая) — теперь можно не просто выбрать раскладку, но и «посмотреть» на нее.

Рис. 4.8. Выбор раскладки клавиатуры

Как на панель GNOME, так и на панель задач можно добавить еще несколько полезных апплетов, щелкнув по панели правой кнопкой мыши. Лично мне очень понравился апплет Монитор сети, наблюдающий за состоянием сетевого соединения и показывающий, кроме всего прочего, еще и силу сигнала, что особенно актуально для беспроводных средств связи и dial-up соединений. Для более подробной информации о сетевых соединениях используйте новую утилиту nettool.

Рис. 4.9. Сетевой монитор

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

GNOME 2.10 входит в состав дистрибутива Fedora Core 4. К ней добавилась новая тема — Clearlook — и панель GNOME стала организована логичнее (рис. 4.10).

Рис. 4.10. Панель GNOME 2.10

4.3.2. Добавление собственных команд в контекстное меню GNOME

Меню Сценарии в GNOME устроено и действует аналогично меню Действия в KDE. Только если в случае KDE файл контекстного меню имел определенный формат, то в GNOME это — обычный bash-сценарий. Хорошо это или плохо, зависит от того, хорошо ли вы знаете bash. Хорошее знание языка командного интерпретатора bash поможет вам создать очень сложные сценарии, автоматизирующие огромное количество рутинной работы.

Идея достаточно проста. Вы создаете bash-сценарий и помещаете его в каталог ~/.gnome2/nautilus-scripts/. В этом каталоге можно создавать подкаталоги — они будут отображаться как дополнительные меню.

Теперь рассмотрим пример сценария, конвертирующего изображение в формат GIF при помощи программы-конвертера convert (листинг 4.2). Файл, по которому пользователь щелкнул правой кнопкой мыши, передается нашему сценарию как первый аргумент (о передаче аргументов сценариям говорится в п.8.1).

Листинг 4.2. Файл x2gif

#!/bin/bash

convertprg=`which convert`


while [ $# -gt 0 ] ; do

 picture=$1

 filetype=`file $picture | cut -d ' ' -f 3`

 if [ $filetype = "image" ]

 then

  newfile=`echo "$picture" | cut -d . -f 1`

  $convertprg "$picture" "$newfile".gif

 fi

 shift

done

4.3.3. Автоматическая смена обоев

Обои на рабочем столе рано или поздно надоедают, и хочется их сменить. Делать это вручную — лень: это ж сколько придется щелкать мышкой. Автоматизируем эту рутинную процедуру, написав сценарий, выбирающий обои из каталога /home/den/Wallpapers (где у меня хранятся мои любимые обои) случайным образом. Собственно установку обоев выполняет утилита GNOME gconftool-2.

Листинг 4.3. Файл change_wallpaper

#!/bin/bash

export DIR='/home/den/Wallpapers/'

export NUMBER=$RANDOM

export TOTAL= 0

for f in `ls $DIR`

do

 let "TOTAL += 1"

done

let "NUMBER %= TOTAL"

export CURRENT=0

for f in `ls $DIR`

do

 if [ $CURRENT = $NUMBER ]

 then

  /usr/bin/gconftool-2 -t string -s /desktop/gnome/background/picture_filename $DIR/$f

  break

 fi

 let "CURRENT += 1"

done

Но это еще не все. Можно сэкономить и на запуске сценария change_wallpaper, заставив его запускаться автоматически. Во-первых, вы можете добавить его в сценарии загрузки системы (п. 9.1.2). Для домашнего компьютера, который на ночь выключают, это неплохое решение: вы будете каждый день сидеть за столом с новыми обоями. Во-вторых, вызов сценария change_wallpaper можно поместить в сценарий запуска GNOME. И в-третьих, change_wallpaper можно вручить диспетчеру расписаний cron (п.9.4) для выполнения по назначенному вами расписанию — хоть каждую минуту.

4.4. Офисные пакеты

Open Office и К Office

В среде Linux наибольшее распространение получили два офисных пакета: K Office и Open Office, оба — свободно распространяемые. В большинство дистрибутивов включены они оба, так что вы можете выбирать инструмент, исходя из конкретной задачи.

Пакет Open Office обладает гораздо большим количеством возможностей, чем K Office, и наиболее приближен по своей функциональности к MS Office.

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

С другой стороны, K Office хуже справляется с форматами MS Office. При попытке открыть большие документы, например, документ MS Word 97/2000/XP размером 1.2 Мб, программа K Word просто закрылась. Точно так же себя ведет и программа K Spread — прайс-лист одной фирмы (около 1М) загружался около 30 секунд, а когда индикатор достиг отметки 100%, окно программы просто закрылось. K Presenter кое-как открыл презентацию PowerPoint, но… Лучше я не буду говорить о том, что я увидел.


Состав пакета Open Office Таблица 4.4

Приложение Назначение
Writer Текстовый процессор, предлагающий мощные функции для создания и редактирования документов разных форматов
Calc Редактор электронных таблиц
Draw Программа Draw ориентирована на векторную графику и служит для создания рисунков, эмблем и плакатов
Impress Программа для создания презентаций
Math Благодаря этому редактору, вы можете вставлять математический формулы в различные документы пакета
Image Программа предназначена для сканирования и обработки фотографий
Schedule Планировщик, который поможет вам организовать свой рабочий день
Примечание

Open Office — это бесплатный вариант пакета Star Office от Sun Microsystems. Названия программ, входящих в состав обоих пакетов, отличаются только префиксом, OO или SO соответственно. Например, SO Writer и OO Writer — это одна и та же программа.


Состав пакета K Office Таблица 4.5

Приложение Назначение
K Word Текстовый процессор, аналог программы MS Word
K Spread Редактор электронных таблиц. Обладает несколькими оригинальными функциями, которые вы не найдете ни в OO Spreadsheet, ни в MS Excel
K Chart Приложение для построения диаграмм
K Illustrator, Kontour Редактор векторной графики
K Presenter Программа для создания презентаций
K Formula Редактор математических формул

При помощи K Word можно сохранять текстовые файлы в формате PDF. Выполните команду Файл→Печать и вместо принтера выберите опцию Печать в файл PDF.

K Spread не поддерживает формат MS Excel, но совместима с форматом GNUmeric — редактора электронных таблиц, входящего в состав большинства Red Hat-подобных дистрибутивов; а уж из GNUmeric можно экспортировать таблицу в MS Excel. Если в вашем дистрибутиве этого пакета нет, то скачать его можно с http://www.gnome.org/projects/gnumeric.

Возможностей K Presenter хватит даже для самой сложной презентации. Программа K Presenter, как и все программы K Office, довольно быстро работает, что немаловажно, если вам нужно показывать презентацию на стареньком 486-ом ноутбуке. К тому же, если у вас установлена KDE, скорее всего, будет установлен и K Office, чего нельзя сказать об Open Office.

Уменьшение времени запуска Open Office

Наверное, вы заметили, что любое приложение из пакета Open Office запускается, мягко говоря, медленно. Чтобы ускорить этот процесс, нужно установить утилиту быстрого запуска Open Office. Помните, что-то подобное было в Microsoft Office, только в случае с Open Office данная утилита действительно работает.

Утилита называется Open Office Quick Starter. Пакет, содержащий эту утилиту, называется ooqs или ooqs-kde — в зависимости от дистрибутива. В случае, если вы используете GNOME, вам нужен пакет ooqstart-gnome. В большинстве дистрибутивов эти пакеты имеются. Все, что вам нужно сделать, — установить нужный пакет и наслаждаться быстрым запуском Open Office.

Новое в Open Office 2.0

В состав дистрибутива Fedora Core 4 входит пакет Open Office версии 2.0. По сравнению с версией 1.1 в нем улучшена совместимость с форматами документов MS Office. Текстовый редактор OO Writer теперь поддерживает вложенные таблицы, вертикальную ориентацию текста в ячейке, появилась возможность импорта документов в формате WordPerfect, OO Calc теперь разрешает таблицы того же размера, что и MS Excel, то есть 65536 строк, поддерживает диагональные линии в ячейках и колонтитулы в стиле MS Excel; добавилась также возможность импорта таблиц Lotus 1-2-3 до версии 9.7. Появилась возможность открывать защищенные паролем документы MS Word и MS Excel (если пользователь, конечно, знает пароль).

Рис. 4.11. СУБД OO Base

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

В составе пакета появилось новое приложение — OO Base. Как нетрудно догадаться по названию, это СУБД, позволяющая создавать и управлять таблицами, запросами, формами и отчетами. Мастер таблиц предлагает множество заготовок таблиц делового и личного (например, фитнесс-дневник) назначения. OO Base понимает базы данных dBase, MS Access, ODBC, JDBC, MySQL, импортирует электронные таблицы и текстовые файлы, может использовать LDAP сервер как источник данных.

4.5. Издательские системы

Язык разметки TeX

TeX (произносится «тех») — это система подготовки документов, содержащих большое количество формул и таблиц. Она была разработана в конце 70-х гг. американским математиком Дональдом Кнутом, автором знаменитой книги «Искусство программирования». Система TeX была портирована на платформу Unix программистами Говардом Трики (Howard Trickey) и Павлом Куртисом (Pavel Curtis).

Размер документа, содержащего много формул, в формате TeX раз в десять меньше, чем в формате MS Word. К тому же документ TeX не зависит от платформы. Это объясняется тем, что в системе TeX вид и расположение всех объектов документа описываются текстовыми директивами подобно тому, как это делается в формате HTML. Только директивы TeX начинаются с обратной косой черты.

Текст документа TeX набирается в любом ASCII-редакторе. Затем исходный текст (файл с расширением .tex) компилируется в файл DVI (Device Independent), который не зависит от платформы и устройства. Этот файл уже можно просматривать, печатать и отправлять в издательство. Для его просмотра и печати предназначена программа xdvi из пакета tetex-xdvi.

Например, так выглядит фрагмент страницы с набранной формулой в ASCII-редакторе:

\layout Enumerate

Математических:

\begin_inset Formula $\sin\frac{\alpha}{2}$

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

Рис. 4.12. Фрагмент документа TeX

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

TeTeX — система подготовки документов для UNIX-подобных ОС. В состав дистрибутива Fedora Core 3 входит пакет tetex-latex версии 2.0.2. Более ранние версии TeTeX (до версии 0.9) не умели конвертировать TeX-документы в формат PDF. Начиная с версии 0.9, в состав TeTeX входит утилита pdftex, которая предназначена для прямого конвертирования tex-файла в формат PDF.

Коллекцию ссылок на справочные материалы по языку TeX можно найти по адресу http://www.tex.uniyar.ас.ru/doc.htm.

Текстовый процессор LyX

Работа над любым документом распадается на две части: разработку содержания документа и представление его в удобном для читателя виде. Принцип WYSIWYG («видишь то, что получишь на печати») облегчает только вторую часть работы, и обычный автор, не будучи одновременно дизайнером, не умеет и не хочет использовать все возможности какого- нибудь MS Word для грамотного оформления своей статьи. Автор предпочел бы описать структуру своего документа так, чтобы легко было применить к нему стиль, разработанный профессиональным дизайнером, и сосредоточиться на своей работе, а не на подробностях оформления.

Этот принцип называется WYSIWYM (What You See Is What You Mean, «видишь то, что подразумеваешь»), и реализован в текстовом процессоре LyX (http://www.lyx.org). LyX — это визуальный редактор TeX, отображающий документ не в точности так, как он будет выглядеть на бумаге, но достаточно похоже, и вместе с тем не затемняющий его структуры. На рисунке 4.13 показано продолжение работы над документом example: вставка сноски.

Рис. 4.13. Вставка сноски

LyX не создает DVI-файлы в домашнем каталоге пользователя. Найти их можно во временном каталоге. Обычно это /tmp/lyx_tmpdir???????, где ?????? — это произвольная последовательность букв и цифр. Если вы запускали просмотр DVI несколько раз, у вас будет несколько таких каталогов. Поищите DVI-файлы в этих каталогах — вы обязательно найдете нужный вам файл. Для автоматизации поиска этих файлов откройте окно виртуального терминала и введите команду:

find /tmp/lyx_tmpdir* -name *.dvi

Издательская система Scribus

TeX/LaTeX — удачная система для верстки научных работ, но в мире Windows есть много издательских систем, куда лучше приспособленных для создания макетов: Corel Ventura®, Quark Xpress®, Adobe Pagemaker®, InDesign®… Что же делать пользователю Linux? Не устанавливать же Windows из-за PageMaker.

Положение сторонников свободного программного обеспечения изменилось в 2003 г., когда вышел финальный релиз пакета компьютерной верстки Scribus 1.0 (http://www.scribus.org.uk, автор ядра программы — Франц Шмид).

Scribus — полноценная издательская система, в которой реализованы все необходимые для предпечатной подготовки документов функции, в том числе цветоделение по каналам CMYK, система управления цветом, поддержка Unicode для вывода на нетрадиционных языках, экспорт результатов в форматы PDF и PostScript. В качестве внутреннего формата хранения данных программа использует язык описания XML, что облегчает экспорт данных в другие пакеты.

Программа Scribus поддерживает такие распространенные графические форматы, как Encapsulated PostScript (EPS), JPEG, TIFF, Portable Network Graphics (PNG), XpixMap (xpm). Начиная с версии 1.0, Scribus поддерживает русский язык.

Scribus был включен в состав следующих дистрибутивов:

♦ Debian (нестабильный релиз)

♦ Gentoo Linux

♦ Mandrake 8.2

♦ Lindows

♦ Lycoris

♦ Fink 0.4

Если вы используете один из этих дистрибутивов, то, возможно, Scribus уже установлен у вас. А если нет, то пакет scribus версии 1.2 можно скачать из репозитария Sisyphus по адресу ftp://ftp.altlinux.ru/pub/distributions/ALTLinux/Sisyphus/SRPMS.classic/scribus-1.2.1-alt1.1.src.rpm.

Перед его установкой убедитесь, что у вас уже установлены:

♦ библиотека Qt-3.3;

♦ библиотека libpng версии 1.2.x:

♦ ghostscript — интерпретатор языков PostScript и PDF — версии 7.x;

♦ шрифты PostScript. Шрифты TTF поддерживаются Scribus начиная с версии 0.4.7.

♦ среда KDE: для работы самой Scribus она не нужна, но понадобится, если вы хотите использовать метод drag-and-drop.

Дополнительно можно установить Little CMS — систему управления цветом и цветоделения с поддержкой ICC-профилей, а взять ее можно с http://www.littlecms.com. В меню Edit появится команда Color Management System.

4.6. Графика в Linux

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

4.6.1. Графические редакторы

Редактор растровой графики GIMP — обрабатываем фото

The GIMP (The GNU Image Manipulation Program) — свободно распространяемый редактор растровой графики, по своим функциям ставший достойной заменой программе Photoshop. Вот некоторые возможности GIMP (далеко не все!):

♦ поддерживает практически все форматы растровой графики: GIF, JPEG, PNG, TIFF, BMP, AVI, MPEG, PS, PCX, XPM, TGA и другие;

♦ содержит множество инструментов для обработки изображений;

♦ поддерживает работу со слоями;

♦ полный Альфа-канал;

♦ может использоваться для создания анимации — Gif, AVI;

♦ содержит средства для разложения видео в форматах MPEG1, XANIM на кадры;

♦ поддерживает сценарии и расширения, благодаря которым можно добавить в программу новые функции. Поддерживаются сценарии Script-Fu, Perl-Fu, Python-Fu;

♦ обладает улучшенным управлением памятью: в результате размер изображения ограничен только объемом жесткого диска;

♦ операции Отмена (Undo) и Повтор (Redo) ограничены только дисковым пространством;

♦ имеет многочисленные инструменты выделения областей: выделение прямоугольной, произвольной, эллиптической и других областей;

♦ снабжен огромным набором графических фильтров, расширяемым с помощью плагинов.

Программа The GIMP доступна по адресу http://www.gimp.org.

Оценка: отлично.

KPaint

Программа KPaint, входящая в состав KDE, представляет собой полную противоположность программе The GIMP. KPaint обладает небольшим числом функций и инструментов, в ней нет системы плагинов, а о каналах и слоях эта программа вообще ничего не знает. Даже для создания самых простых изображений приятнее и удобнее использовать программу GIMP. KPaint поддерживает форматы BMP, EPS (встраиваемый PostScript), TIFF, GIF, JPEG, PNG, ICO, PGN, XPM.

Оценка: удовлетворительно.

KIconEdit — редактор иконок

Программа KIconEdit — редактор пиктограмм KDE. Используется для создания пиктограмм для среды KDE. Довольно простой редактор, позволяющий быстро создать пиктограмму для вашей программы.

Оценка: хорошо.

4.6.2. Программы — просмотрщики изображений

Следующая группа программ — это программы просмотра изображений: GQView, KView, KuickShow, ImageMagick, Electric Eyes (ее). Я предпочитаю программу GQView — она больше напоминает мне популярную программу ACDSee.

GQView

GQView можно использовать вместе с программами The GIMP. Electric Eyes и XPaint. Для редактирования загруженного изображения в программе The GIMP нажмите Ctrl+1, в Electric Eyes — Ctrl+2, в XPaint — Ctrl+3. Разумеется, указанные программы должны быть установлены. Вы хотите использовать другой редактор? Нажмите кнопку Конфигурация на панели инструментов программы, в открывшемся окне перейдите на закладку Редакторы и пропишите свой редактор (нужно указать название редактора и командную строку).

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

Программа поддерживает форматы файлов: JPEG, TIFF, GIF, PNG, XPM, BMP, PCX, PGM, PPM. Могу порекомендовать для использования в качестве основного просмотрщика.

Оценка: отлично.

Electric Eyes

Следующая программа — Electric Eyes. Эта программа в некоторых дистрибутивах не устанавливается по умолчанию или вообще отсутствует. Для ее установки нужно установить пакет «ее». Взять его можно с http://ftp.vn.ua/pub/unix/redhat-7.2/RedHat/RPMS/ee-0.3.12-5.i386.rpm.

Electric Eyes — не только просмотрщик: с его помощью можно редактировать изображения, сохранять файлы в других форматах.

Для перехода в режим редактирования щелкните правой кнопкой мыши на изображении и выберите команду Просмотр→Показать/убрать панель редактирования.

Используя панель редактирования, очень легко отредактировать цветовую гамму рисунка, изменить размер, повернуть изображение, сделать скриншот экрана или выбранного окна. Для «фотографирования» экрана нажмите кнопку Снять содержимое экрана целиком и сейчас. Вы также можете выбрать окно для снятия — нажмите кнопку Выбрать окно для снятия.

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

Программа поддерживает форматы: JPEG, GIF, PNG, TIFF, PS, BMP и другие.

Оценка: отлично.

KuickShow

Программа быстрого просмотра KuickShow соединяет в себе функции файлового браузера с программой просмотра. Программа относится к среде KDE, чем и объясняется первая буква в ее названии.

При щелчке по имени файла этот файл будет загружен в новое окно программы. Файлы можно открывать и в том же окне, и в новом. При желании можно установить полноэкранный режим просмотра. Программа в состоянии организовать даже слайд-шоу. Поддерживаются все графические форматы, известные KDE (*.jpeg, *.jpg, *.gif, *.xpm, *.ppm, *.pgm, *.pbm, *.pnm, *.png, *.bmp, *.psd, *.eim, ".tiff, *.xcf).

В программу встроены функции предварительного просмотра и печати. KuickShow обладает всеми необходимыми для просмотрщика функциями — ни больше, ни меньше. Конечно, в отличие от GQView, она не умеет составлять списки коллекций, но я сомневаюсь, что вам когда-нибудь понадобится эта функция.

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

Оценка: отлично.

KView

Программа KView является достойной альтернативой программе KuickShow. KView не умеет показывать слайд-шоу в автоматическом режиме, зато она и состоянии повернуть изображение на заданный угол, отразить и сохранить результат, а также работать в полноэкранном режиме. Для перехода в этот режим нажмите комбинацию клавиш Ctrl+Shift+F. Кроме того, KView умеет еще и сканировать изображения.

Оценка: отлично.

Kooka

Следующая группа программ предназначена для сканирования изображений: это Kooka и XSane. Первая программа, как указывается в документации KDE, предназначено для сканирования и распознавания текста. Коротко о ней можно сказать так: до FineReader ей еще очень далеко.

Оценка: удовлетворительно.

XSane

Для сканирования изображений я предпочитаю использовать программу XSane (http://www.xsane.org). Правда, она работает не очень стабильно. но результаты сканирования лучше, чем у программы Kooka.

Оценка: удовлетворительно.

4.6.3. Как сделать снимок экрана

KSnapShot

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

Можно воспользоваться комбинациями клавиш KDE — Ctrl+Print и Alt+Print. Первая делает снимок всего экрана, а вторая — только активного окна. Но куда потом вставить этот снимок? В KPaint? Попробуйте. В нормальный редактор, например, The GIMP, копню экрана вставить невозможно, а использовать KPaint очень неудобно.

KSnapShot позволяет установить задержку, за время которой можно подготовить экран к съемке: открыть нужные окна, меню приложения или меню KDE. Через установленное время программа сфотографирует весь экран или текущее окно, оповестит об этом звуковым сигналом и предложит сохранить снимок.

ImageMagick

Пакет ImageMagick обычно используется для просмотра изображений и преобразования их в другой формат. Честно говоря, мне не понравился интерфейс и набор функций этого просмотрщика. Но в пакете ImageMagick есть полезная утилита import, позволяющая легко и быстро сделать снимок экрана. Может быть, среда KDE у вас вообще не установлена, поэтому программой ksnapshot воспользоваться нельзя? Тогда введите (в X-терминале или окне запуска приложений вашей оконной среды) команду:

$ sleep 5; import -window root screen.png

Команда sleep генерирует необходимую задержку в секундах. Думаю, 5 секунд хватит, чтобы вы смогли привести экран в нужный вид: вывести на передний план нужное окно, выбрать нужный пункт меню и т.п. Через 5 секунд будет выполнена команда import. Она сделает снимок корневого окна, то есть всего экрана, и запишет его в файл screen.png. Формат PNG для снимков экрана оптимален. Если вам нужен другой формат, например, JPG, просто измените расширение выходного файла:

$ sleep 5; import -window root screen.jpg

А как сделать снимок конкретного окна? Первый способ — указать координаты или геометрию окна, предварительно узнав их по команде xwininfo:

$ sleep 5; import -crop 400x300 screen1.png

$ sleep 5; import -geometry геометрия screen2.png

После запуска программы xwininfo указатель мыши изменит свой вид со стрелки на крестик. Щелкните по окну, и программа предоставит о нем подробную информацию.

И второй способ:

$ import window.png

Команда sleep не нужна, поскольку программа import предоставит вам возможность выбрать нужное окно — указатель мыши тоже изменится на крестик. Щелкните на нужном окне, и буквально через полсекунды в файл window.png будет записан образ выбранного окна.

Программа import довольно гибкая, рекомендую прочитать man этой программы — вы найдете там много интересного.

А что если вам нужно сделать снимок текстовой программы, а не графического окна? Проще всего запустить эту программу в X-терминале, сделать снимок окна X-терминала и отрезать обрамление окна с помощью GIMP.

4.7. Полезные трюки

Просмотр в консоли документов MS Word и PDF

Для просмотра и редактирования документов MS Word с успехом используется Open Office Writer, но иногда нам нужно быстро просмотреть документ (например, вспомнить номер телефона, указанный в конце документа), и запускать тяжеловесный OO Writer не хочется.

Для просмотра документов MS Word нам понадобятся две утилиты — wvWare и w3m. Первая — это конвертер документов Word в формат HTML (wvware.sourceforge.net), а вторая — универсальный браузер, которым мы будем просматривать полученный HTML-файл. Обе утилиты входят в состав современных дистрибутивов, правда, могут не устанавливаться по умолчанию.

Итак, для просмотра документа document.doc введите команду (конвейер):

$ wvWare -x /usr/lib/wv/wvHtml.xml document.doc | w3m -Т text/html

Если вы собираетесь пользоваться этой длиннющей командой часто, оформите ее как bash-сценарий viewdoc, не забыв сделать файл viewdoc исполняемым. Поместите сценарий в каталог /usr/local/bin, чтобы он был доступен всем пользователям системы.

#!/bin/bash

wvWare -х /usr/lib/wv/wvHtml.xml $1 2>/dev/null | w3m -T text/html

Обратите внимание на перенаправление «2>/dev/null». Таким образом мы подавляем сообщения об ошибках, чтобы они не путались с выводом конвертера.

Теперь для просмотра документа document.doc можете воспользоваться командой:

$ viewdoc document.doc

Такой же сценарий можно написать и для просмотра PDF-документов. Конвертером в этом случае будет утилита pdftohtml (http://pdftohtml.sourceforge.net). Для просмотра созданного программой HTML-кода мы будем применять текстовый браузер elinks.

Итак, для просмотра файла file.pdf будем используем команду:

$ pdftohtml -q -noframes -stdout file.pdf | elinks

Опять создадим сценарий /usr/local/bin/viewpdf, автоматизирующий работу:

#!/bin/bash

pdftohtml -q $1 ~/temp.html elinks ~/temp.html

А вот в дистрибутиве Fedora Core 4 таких фокусов проделывать не нужно: в него включен Evince — быстрый просмотрщик документов в формате PDF и PostScript.

Глава 5 Звук и видео в Linux

5.1. Почему воспроизведение аудио в Linux лучше, чем в Windows

Самыми распространенными аудиоподсистемами для Linux являются OSS (Open Sound System) и ALSA (Advanced Linux Sound Architecture). Обе системы поддерживают большое количество ISA- и PCI-звуковых карт, поэтому, скорее всего, вам не придется разыскивать в Интернете драйвер для своей звуковой карты. В последнее время чаше используется система ALSA, которая полностью совместима с системой OSS, но содержит много дополнительных функций.

Сейчас Linux, если не идеально, то, во всяком случае, подходит для работы со звуком. Когда Линусу Торвальдсу прислали первые патчи, оптимизирующие Linux для работы с аудиоинформацией (так называемые low latency-патчи), он не одобрил эту идею. В результате — отставание от Windows по работе со звуком как минимум на три года. В 1995 году насчитывалось 30-35 (сейчас насчитывается около 800) приложений для Linux, способных работать со звуком. Работать-то они работали, но довольно криво. Сейчас объясню, почему.

Для работы со звуком в реальном времени нужно минимизировать задержки (англ. latency — время ожидания). Latency в 100 мс вы уж точно услышите невооруженным ухом, задержку в 10 мс можно услышать в виде небольшого шума на фоне — тумана. Идеальное время задержки — 3 мс для аудио (WAV) и 1 мс для MIDI. Кстати, проблема latency — это проблема не только Linux, а всех операционных систем, не являющихся системами реального времени (RTOS — Real Time Operation System) — Windows, MacOS. До появления системы ALSA время задержки при работе с аудиоинформацией в Linux (использовалась система OSS/Free) составляло около 150 мс. Система ALSA снизила время задержки до 6 мс — результат лучше, чем у Windows 2000.

В настоящее время задержки (последняя версия ALSA) составляет 4.3 мс. Это довольно неплохо, что позволило Linux вырваться на второе место по обработке аудиоинформации среди не-RT операционных систем. На первом месте — MacOS X (CoreAudio API), на третьем — Windows 2000 (ASIO) и Mac OS 9.

В пользу ОС Linux говорит также ее надежность и стабильность при работе с любыми данными. Даже если взять непрофессиональную работу с мультимедиа-данными — прослушивание MP3: в Linux у меня еще ни разу не заикался Xmms, что бы я ни делал. В Windows же при открытии больших документов в том же Word наблюдаются искажения при проигрывании музыки с помощью WinAmp.

5.2. Прослушивание музыки

mpg123

Это самая простая утилита, позволяющая слушать музыку в консольном режиме. Скачать ее можно с домашней страницы разработчика www.mpg123.de.

В графическом режиме запускайте ее через виртуальный терминал:

$ mpg123 file.mp3

Программа позволяет прослушивать музыку, записанную в форматах MPEG 1.0/2.0 (уровни 1, 2 или 3). С помощью mpg123 вы можете как проигрывать отдельные песни, так и создавать списки песен:

$ mpg123 file-list.txt

В файле file-list.txt перечислите имена файлов (по одному в каждой строке), которые вы хотите прослушать. Можно указывать файлы, расположенные как на локальной машине, так и на удаленной, например:

/home/den/mp3/track01.mp3

ftp://ftp.server.ru/pub/song.mp3

http://www.server.ru/audio/tracks.mp3

Еще одна полезная консольная программа — cplay (http://www.tf.hut.fi/~flu/cplay). Это оболочка для различных аудиоплейеров, позволяющая удобно создавать списки песен для проигрывания. Вы переходите в нужный вам каталог, выбираете песню, нажимаете Enter, и cplay запускает mpg123 для проигрывания выбранного файла. Использовать эту программу намного удобнее, чем mpg123, поскольку вам не нужно вручную создавать списки песен, к тому же cplay отображает индикатор проигрывания и время, прошедшее с начала проигрывания. Для выхода из программы нажмите клавишу <Q>.

Xmms

Наверное, самым знаменитым проигрывателем MPEG-файлов является Xmms — полный аналог популярной программы WinAmp (http://www.xmms.org). К сожалению, в дистрибутивах, основанных на Red Hat начиная с версии 8.0, из него исключена возможность проигрывания MP3. Программы с открытым исходным кодом оказались законодательно несовместимы с этим коммерческим форматом, и компания Red Hat переработала все мультимедийные приложения, удалив из них весь код, связанный с MP3.

Пользователям таких дистрибутивов можно посоветовать скачать раннюю (1.2.7) версию пакета xmms с ftp://ftp.sunet.se/pub/multimedia/xmms/1.2.x и дополнить ее из http://mcmcc.bat.ru/RPMS/mpg123-xmms-1.2.7-13.p.i386.rpm.

Другие программы

Для проигрывания MIDI-файлов в состав Linux (не во всех дистрибутивах) входят сразу две программы: KMid и AWE32 (полное название TkAWEMidi). Первая программа входит в состав KDE (пакет kdemultimedia), поэтому, если среда KDE у вас установлена, она всегда будет вам доступна. Кроме MIDI-файлов, KMid позволяет проигрывать и караоке (KAR-файлы).

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

В состав KDE входит аудиосервер aRts (демон artsd; в среде GNOME ту же роль играет eSound, esd). Как написано в документации по KDE, «звуковой сервер позволяет вам слышать системные звуки и при этом одновременно проигрывать mp3-файл или играть в игру с фоновой музыкой. С ее помощью системные звуки обогащаются различными эффектами, а программисты имеют возможность легко включать в программы поддержку звука».

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

Примечание

В программу Xmms можно включить поддержку сервера aRts, добавив модуль aRts Driver 0.4 (libartsout.so). Этот модуль не устанавливается по умолчанию в некоторых дистрибутивах.

Поддерживает звуковой сервер MP-проигрыватель NoAtun, вводящий в состав KDE. Поэтому вам придется решить, какой проигрыватель использовать. Если вы хотите использовать Xmms, тогда вы не будете слышать системные звуки, или же вы будете использовать NoAtun, но будете слышать звуки KDE. Лично я предпочитаю первое: дело в том, что любая программа, поддерживающая aRts, «съедает» больше системных ресурсов, чем Xmms.

Рассмотрим пару полезных трюков, которые можно проделать с помощью NoAtun. Допустим, вы хотите слышать одну музыку, то есть вам нужно убрать голос исполнителя. Выполните команду меню Параметры→Эффекты и установите эффект VoiceRemoval.

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

Вам также доступны эффекты реверберации, расширения стереобазы (ExtraStereo), питч (замедление и ускорение воспроизведения).

При запуске любой программы, использующей aRts, будет запущен сервер aRts, если он не был до этого запущен. Сервер aRts можно запускать и при загрузке KDE. Для этого запустите Центр управления KDE и перейдите в раздел Звук→Звуковой сервер. В этом разделе вы можете установить различные параметры звукового сервера — от метода ввода/вывода звука до частоты дискретизации. В качестве метода ввода/вывода звука вы можете выбрать один из методов: Open Sound System, Advanced Linux Sound Architecture, Threaded (многопотоковая) OSS или Автоопределение.

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

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

5.2.1. Сравнение Xmms и NoAtun

Сегодня самыми популярными проигрывателями для Linux являются программы Xmms и NoAtun. Первая программа поставляется с большинством дистрибутивов, а вторая входит в состав KDE. Как вы используете программу Xmms? Скорее всего, просто для прослушивания музыки, а она много чего умеет. В этом параграфе мы поговорим о нестандартных возможностях программы Xmms — плагинах, скинах. Параллельно будем сравнивать возможности Xmms с возможностями программы NoAtun.

Полное название проигрывателя Xmms — X Multimedia System. Программа Xmms использует интерфейс WinAMP и поддерживает скины программы WinAMP. Xmms может воспроизводить звук, записанный в форматах MP3, WAVE, MOD, S3M и других. Версия 1.2.7 поддерживает плагины input, output, general и visualization.

Окно программы Xmms состоит из трех частей: главное окно, эквалайзер и редактор песен. На рис. 5.1 изображена программа Xmms в «полной комплектации».

Рис. 5.1. Проигрыватель Xmms

Как я уже отмечал, программа поддерживает форматы MPEG 1/2/3, WAVE, MOD, S3M, а также формат AudioCD. Таким обилием форматов не может похвастаться программа NoAtun. Честно говоря, меня не интересуют форматы MOD, S3M, CIN (ID Software), мне нужна поддержка только форматов MP1/2/3, WAVE и AudioCD.

Программе NoAtun очень не хватает поддержки AudioCD. Конечно, можно запустить проигрыватель AudioCD KsCD, но зачем — ведь есть Xmms. Если вы хотите узнать, какие еще форматы поддерживает ваш Xmms, откройте окно опций (нажмите Ctrl+P). На странице Звуковые модули Ввода/Вывода представлены все модули, отвечающие за поддержку тех или иных форматов.

В этом же окне вы можете выбрать модуль вывода: драйвер OSS, модуль вывода звука eSound или модуль записи на диск. Для нормального воспроизведения нужно использовать драйвер OSS. Нажав кнопку Настройка, вы можете настроить выбранный драйвер. Если у вас установлена звуковая карта Sound Blaster 16, ViBRA или AWE32/64, в настройках драйвера OSS вы можете установить трехмерное стереорасширение (3D Stereo Enhancement).

Теперь немного поговорим о модуле записи на диск. Если установить этот модуль в качестве основного модуля вывода, музыка не будет воспроизводиться с помощью драйвера OSS, а будет записываться на диск в виде WAVE-файла. А это значит, что любой формат, который поддерживается модулями ввода программы Xmms, вы можете конвертировать в WAVE.

Скорее всего, MP3 конвертировать в WAVE вам не придется: это просто неразумно. А вот «сграбить» пару компактов, не выходя из любимой программы — это можно. Откройте компакт-диск (для этого нажмите Shift+L, чтобы загрузить каталог, и выберите каталог /mnt/cdrom) и включите модуль записи на диск. Теперь нажмите кнопку Play. Процесс записи можно остановить в любой момент. Все! Все дорожки будут записаны на диск (в ваш домашний каталог) в виде WAVE-файлов. Имена файлов будут типа TrackN.wav.

Естественно, во время записи музыки вы не услышите, потому что модуль OSS не используется. Стоит заметить, что Xmms «грабит» компакты значительно быстрее, чем программа Grip (по крайней мере у меня). Потом эти файлы можно будет преобразовать в MP3 с помощью любого конвертера, например, lame или l3end. Преобразовать WAVE в MP3 можно так:

$ lame -b 128 input.wav output.mp3

Опция -b устанавливает скорость потока (bitrate) 128 Кбит/с. Более подробно о преобразовании WAVE в MP3 вы можете прочитать на страницах помощи программы lame, выполнив следующую команду:

$ man lame

Программа NoAtun также обладает модулем записи на диск. Его можно выбрать в окне Эффекты. Должен заметить, что в программе NoAtun этот модуль не работает. Впрочем, он и не нужен — все равно программа NoAtun не поддерживает AudioCD.

На странице Эффекты→Общие модули вы можете выбрать нужный вам эффект или дополнительный модуль. Например, модуль Смена песни позволяет установить команду, которая будет выполнена после воспроизведения песни, и команду, которая будет выполнена после воспроизведения всех песен. Первая команда может включать параметр %s, который будет заменен названием только что воспроизведенной песни. Эту возможность можно использовать для автоматического конвертирования WAVE в MP3. Вы будете слушать музыку, a Xmms будет конвертировать ее в формат MP3.

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

♦ LADSPA (по умолчанию)

♦ SOX

♦ Модуль удаления голоса

♦ Улучшенное стерео (расширение стереобазы)

♦ Эхо.

Включив модуль удаления голоса, вы будете слышать только одну музыку. Конечно, качество работы этого модуля очень сильно зависит от качества записи вашего MP3. Этот модуль намного лучше работает с AudioCD — голос полностью удаляется.

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

Теперь рассмотрим модули визуализации. Лично мне больше всех нравится модуль G-Force. Кроме обыкновенной визуализации, он обладает множеством дополнительных функций, например, функцией измерения скорости кадров (fps). Нажмите <?> в окне модуля, и вы увидите список функций модуля.

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

Нам осталось рассмотреть только скины. Нажмите Alt+S, чтобы открыть окно просмотрщика «шкур» — так официально называется окно выбора скипа. У вас нет «шкур»? Где их взять? На официальном сайте http://xmms.org или на http://www.skinbase.org. Подойдут также ваши «шкуры» от WinAmp'a. Zip-файлы скинов нужно скопировать в каталог /usr/share/xmms/Skins. После этого установленные «шкуры» будут доступны всем пользователям системы. Если вы хотите, чтобы с трудом добытая «шкура» была доступна только вам или же если у вас нет прав на запись в каталог /usr/share, установите «шкуру» и каталог ~/.xmms/Skins.

Как видите, программа NoAtun уступает программе Xmms практически по всем параметрам. Кроме того, NoAtun, работая через звуковой сервер aRts, требует больше памяти, чем Xmms, воспроизводящий звук непосредственно через /dev/dsp.

Чтобы запустить Xmms сразу после окончания работы с NoAtun, остановите демон аудиосервера artsd, иначе вы получите сообщение, что звуковая плата занята другим приложением — а именно этим демоном.

5.3. «Ограбление» Audio-CD

Вот мы и подошли к самому интересному моменту в этой главе. Допустим, вы одолжили у кого-то новый компакт-диск и захотели сохранить его содержимое в формате MP3 на своем жестком диске. Под Windows написано множество программ, позволяющих «грабить» музыку с компакт-дисков, самые известные — AudioGrabber, EAC и CDEX. Но не устанавливать же Windows только для того, чтобы «сграбить» пару компактов? Есть программа-аудиограббер и для Linux. Это консольная программа cdparanoia (http://www.xiph.org/paranoia) и графическая оболочка для нее Grip (http://www.nostatic.org/grip), работающая в среде GNOME.

Запустите программу Grip, затем нажмите кнопку «Eject», вставьте компакт-диск и снова нажмите кнопку «Eject».

Вы видите, что вместо названия песен отображаются только надписи Track1..TrackN. Вряд ли нас устраивают такие названия, поэтому нажмите кнопку Toggle Disc Editor. Окно программы Grip расширится, и вы увидите редактор названий песен. После того, как вы введете названия песен, нажмите кнопку Save disc info.

Перед началом «ограбления» компакт-диска перейдите на вкладку Config программы Grip. Нас интересуют опции на вкладках CD, Rip, MP3, ID3.

На вкладке CD можно указать имя и параметры CD-привода. По умолчанию используется устройство /dev/cdrom. Вы же можете указать другое устройство CD-ROM, например /dev/hdd (если CDROM подключен как Slave ко второму контроллеру).

Теперь откройте вкладку Rip→Options и отключите надоедающий режим Auto-eject after rip. В этом режиме после того, как Grip скопировал на винчестер содержимое аудиодорожек, компакт-диск автоматически извлекается из привода. На вкладке MP3→Options вы можете установить скорость потока MP3 (по умолчанию используется 128 Кбит/с). Здесь же можно установить количество процессоров, которые будут использованы для сжатия музыки (параметр Number of CPUs to use).

Как работает аудиограббер? Сначала он читает дорожку компакт-диска и записывает ее в WAV-файл. Затем он запускает MP3-компрессор и сжимает WAV-файл. После сжатия исходный WAV-файл удаляется. Вы можете отключить параметр Delete .wav after encoding, чтобы WAV-файл не удалялся после сжатия, но помните, что WAV-файлы занимают очень много дискового пространства. Например, обыкновенный аудио компакт-диск в формате WAV будет занимать около 650 МБ на жестком диске, а этот же компакт-диск в формате MP3 — всего около 65Мб (при битрейте 128 Кбит/с).

Примечание

Битрейт (bitrate) — количество информации, описывающей одну секунду звука. Опыт показывает, что битрейт 128 Кбит/с для большинства людей достаточен, чтобы считать звучание идеальным. Значение 128 Кбит/с является пороговым значением, выше которого качество не так существенно увеличивается при увеличении битрейта, чем до него. Но тем не менее чем битрейт больше, тем лучше. Сейчас стараются использовать битрейт 160-192 Кбит/с.

Теперь мы готовы приступить к непосредственному преобразованию аудиодорожек в MP3-файлы. Выберите нужные вам дорожки с помощью правой кнопки мыши и перейдите на вкладку Rip. Вам доступны два режима: Rip+Encode и просто Rip. В первом случае программа Grip создаст WAV-файлы и преобразует их в формат MP3. Во втором случае преобразование в формат MP3 произведено не будет. Нажмите кнопку Rip+Encode. Если вы не выбрали ни одной дорожки, Grip спросит вас, хотите ли вы записать сразу весь компакт-диск.

Программа Grip работает очень быстро, поскольку используются сразу два потока — один для чтения дорожек CD и записи их в WAV-файл, а другой — для преобразования WAV-файла в формат MP3. Например, вы выбрали две дорожки. Сначала Grip прочитает первую и сохранит ее на диск в формате WAV. Затем, пока будет читаться вторая дорожка, Grip параллельно будет сжимать первый WAV-файл. Качество сжатия тоже вполне приемлемое: песня продолжительностью 3 минуты 30 секунд заняла 3.36 Мб в формате MP3 (при битрейте 128 Кбит/с).

5.4. Программы для просмотра видео

Обзор программ

Как вы знаете, видео может быть записано в форматах AVI, VCD, DVD, MPEG-1, MPEG-2, MPEG-4. Больше всего нас (во всяком случае меня) интересует самый распространенный формат — последний. Своей популярности формат MPEG-4 добился благодаря тому, что он не требует никакой дополнительной аппаратуры, как, например, DVD. В зависимости от дистрибутива у вас могут быть установлены разные программы для просмотра видео. Самые распространенные: XMovie (http://heroines.sourceforge.net/xmovie-1.8.tar.gz), Gtv и Xine.

Программа XMovie поддерживает видео, записанное в форматах MPEG-1/2, DVD и QuickTime. Программа Gtv — поддерживает AVI, MPEG-1/2, VCD. Как видите, эти программы не поддерживают нужный нам формат. Если вам нужен MPEG-4, то вам прямая дорога к Xine

В состав KDE входит простенький видео проигрыватель aKtion. Возможности его довольно скудны: он поддерживает только MPEG1, QuickTime, AVI и анимированный GIF. К тому же MPEG полностью не поддерживается — воспроизведение без звука. Почему так слабо? Да потому, что aKtion — это всего лишь оболочка для старого проигрывателя xanim.

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

Программа Xine

Программа Xine (http://xinehq.de) — свободно распространяемый видеопроигрыватель для UNIX-систем. Поддерживает форматы VCD, DVD, MPEG-1/2 и дополнительно MPEG-4, а также другие форматы. Это значит, что программу можно расширить, добавив в нее поддержку нужных форматов. Однако в некоторых дистрибутивах поддержка MPEG-4 добавлена, а в некоторых нет. Например, в дистрибутиве ALT Junior 1.1 я не смог просмотреть фильм в формате MPEG-4 с помощью Xine. Пришлось обновить систему. Во второй версии дистрибутива ALT Junior с поддержкой MPEG-4 все было нормально.

Кроме пакета самого проигрывателя xine-ui, необходимо скачать и библиотеку xine-lib с тем же номером версии, а если смотрите видео-DVD, то установите дополнительно и xine-vcdx — плагин, обеспечивающий удобство управления. Пакеты RPM версии 0.99.3 можно взять с http://people.linux-online.ru/xpdev/bloody/rpms.

Рис. 5.2. Проигрыватель Xine

Когда программа будет установлена, введите команду xine-check для проверки конфигурации вашей системы: программа определит используемый вами сервер звука, видеодрайвер и другие параметры.

Программа Xine по умолчанию использует видеодрайвер XShm и аудиодрайвер alsa09, но можно их сменить, указав новые драйвера как аргументы опций -V и соответственно. Проигрыватель поддерживает аудиосистемы OSS, ALSA, aRts, ESD, Irix и Sun Audio и видеодрайверы Xvideo, XShm, OpenGL, SDL, ASCII Art library, Syncfb и framebuffer.

Если вы установили какой-нибудь драйвер (аудио или видео), a xine перестал запускаться, запустите xine с параметрами -A null и -V null или заново введите команду xine-check.

Список опций команды xine можно посмотреть, как обычно, введя xine --help.

Остановлюсь только на опции -n, разрешающей управлять проигрывателем по сети.

Для управления по сети создайте файл ~/.xine/passwd и добавьте в него строку ALL:ALLOW. Затем добавьте строку

xinectl 6789/tcp # управление через порт 6789

в файл /etc/services. Запустите xine с параметром -n, а на том компьютере, с которого собираетесь управлять, выполните команду telnet <имя_узла> 6789. Теперь можно управлять проигрывателем по сети. Введите команду help для получения краткой помощи по командам для сетевого управления.

Просмотр DVD

Для просмотра DVD в Linux используется проигрыватель Totem (меню K Мультимедиа→Видео→Проигрыватель Totem, если вы работаете в среде KDE, или Приложения→Звук и видео→Видеопроигрыватель Totem, если в GNOME).

Для открытия DVD-диска выберите в меню команду Фильм→DVD. Сначала Totem отобразит меню DVD-диска (файл VIDEO_TS.VOB), в котором вы сможете выбрать звуковой поток (язык фильма), титры и др.

Рис. 5.3. Totem

Смотрим телепередачи под Linux

Чтобы смотреть телевизор без отрыва от любимого компьютера, придется купить TV-тюнер. Я рекомендую приобретать тюнеры производства компании AverMedia. Не пожалейте денег на тюнер этой компании. А внешние USB-тюнеры, наоборот, не покупайте: для них еще не создано стабильных драйверов под ОС Linux. К тому же пропускная способность шины USB 1.1 недостаточна для качественного просмотра телепередач.

Следующий момент, который важно учесть при выборе TV-тюнера, это поддерживаемые им стандарты. Телевещание в странах СНГ производится в системе SECAM, а звук передается в системе D/K. Поэтому при покупке тюнера, убедитесь, что он поддерживает оба эти стандарта. Если ваш тюнер поддерживает только PAL, изображение будет черно-белым, а если отсутствует поддержка D/K, то… Я умолчу об этом (не хочется вспоминать издаваемый шум).

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

1. установите из вашего дистрибутива пакет kernel-source, содержащий исходные тексты ядра и модулей;

2. загляните в появившийся каталог /usr/src/linux-2.xx.хх/Documentation/video4linux/bttv, где 2.xx.xx — версия ядра;

3. читайте README и CARDLIST (в некоторых версиях ядра он называется CARDS).

После подключения TV-тюнер придется настраивать. Здесь вам поможет bttv mini-HOWTO на русском языке по адресу

http://linux.yaroslavl.ru/docs/howto/mini/BTTV-Mini-HOWTO-0.3

Облегчить вам работу по настройке тюнера сможет конфигурационная утилита с графическим интерфейсом GCbttv (http://freshmeat.net/projects/gcbttv).

Наконец, TV-тюнер подключен и настроен, и пора смотреть передачи.

Лучше всего использовать программы, поддерживающие библиотеку libXaw. Во многие дистрибутивы включен XawTV (домашняя страница http://linux.bytesex.org/xawtv) — набор программ для управления видеоустройством video4linux, захвата видеопотока в файл в различных форматах или вывода его на экран. Настройки главной программы xawtv, собственно просмотрщика TV, хранятся в файле .xawtv. Создайте вручную файл примерно такого содержания:

[global]

fullscreen = 800 x 600

freqtab = europe-east

pixsize = 128 x 96

pixcols = 1

jpeg-quality = 75


[defaults]

norm = SECAM

capture = over

source = Television

Если вы чувствуете, что ваш старенький компьютер не «вытянет» полноэкранного режима 800×600, установите разрешение экрана 640×480. В зависимости от поворотливости вашего компьютера установите уровень JPEG-компрессии. Чем выше качество, тем больше нагрузка на систему. Обычно для максимального качества хватает значения jpeg-quality=90. Но самым оптимальным значением будет все-таки 75.

Затем указываем программе, что мы будем принимать передачи в формате SECAM. Частотная таблица каналов — europe-east. Если вы живете в западной Европе, укажите europe-west.

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

♦ tvtime — программа, имитирующая телевизор на компьютере, выводя изображение на экран с частотой 50/60 Гц, снимая тем самым проблему с чересстрочным изображением;

♦ GnomeTV — простая программа для просмотра телепередач в оконной среде GNOME, перестала развиваться в 2001 году;

♦ KwinTV — интегрирована в среду KDE;

♦ bttvgrab — мощная программа, позволяющая записывать телепередачи на диск.

5.5. Воспроизведение неподдерживаемых форматов

Во многих дистрибутивах Linux мы не можем воспроизвести, казалось бы, привычные форматы — DivX, Windows Media (WMV), QuickTime, DVD и в некоторых случаях даже MP3. Причина всему этому — всевозможные лицензионные соглашения, нарушения которых не допускается. Но выход из ситуации есть: распространять тот или иной кодек в составе дистрибутива запрещено, но никто не мешает вам загрузить его и использовать в свое удовольствие.

В большинстве случаев кодеки выполнены в виде динамических библиотек Windows (dll-файлов). Чтобы их использовать в Linux, вам понадобится mplayer — это кроссплатформенное приложение, позволяющее воспроизводить различные форматы мультимедиа. Найти программу mplayer в Интернете не проблема. А вот кодеки найти намного сложнее. Я рекомендую загрузить пакет essential, который доступен по адресу: http://www.mplayerhq.hu/homepage/dload.html.

Установим этот пакет:

$ tar -jxvf essential-20050216.tar.bz2

$ cp essential-20050216/* /usr/lib/win32/

Чтобы кодеки стали доступны, вам нужно перезапустить mplayer.

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

http://www.geniusweb.com/LDP/HOWTO/html_single/EVD-Playback-HOWTO

И еще: если у вас не воспроизводятся DVD, то, возможно, с вашим дистрибутивом все нормально, просто у вас слишком слабый компьютер. Для воспроизведения DVD нужен компьютер не слабее Pentium III 500 Mhz и 256 Мб оперативной памяти. Также убедитесь, что включен DMA (прямой доступ к памяти) для вашего DVD-привода.

Глава 6 Сеть и интернет

6.1. Основные сетевые понятия

6.1.1. Протокол и интерфейс

В основе сети Интернет лежит протокол TCP/IP, поэтому знакомство с понятием протокола необходимо любому пользователю.

Протокол — это совокупность правил, определяющая взаимодействие абонентов вычислительной системы (в нашем случае — сети) и описывающая способ выполнения определенного класса функций. Еще один термин, который мы будем часто употреблять, интерфейс. Интерфейс — это средства и правила взаимодействия компонент системы между собой. Чтобы лучше понять значения этих терминов, обратите внимание на рис. 6.1. На этом рисунке изображены две системы (компьютера) — А и В.

Рис. 6.1. Протоколы и интерфейсы

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

Прежде чем перейти к протоколу TCP/IP, рассмотрим семиуровневую модель взаимодействия открытых систем (сокращенное название — модель OSI), разработанную в начале 80-х годов международной организацией по стандартизации ISO.

Средства взаимодействия (см. рис. 6.2) в модели OSI делятся на семь уровней:

1. Физический.

2. Канальный.

3. Сетевой.

4. Транспортный.

5. Сеансовый.

6. Представительный.

7. Прикладной.

Рис. 6.2. Модель OSI

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

Примечание

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

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

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

Приложение (процесс 1) формирует стандартное сообщение, которое передается прикладному уровню. Точнее, процесс 1 работает на прикладном уровне.

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

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

6.1.2. Уровни взаимодействия OSI

Физический уровень (Physical Layer)

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

Функции физического уровня реализуются сетевым адаптером или последовательным портом. Примером протокола физического уровня может послужить спецификация 100Base-TX (технология Ethernet).

Канальный уровень (Data link Layer)

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

Этот уровень выполняет адресацию по физическим адресам (MAC-адресам), «вшитым» в сетевые адаптеры предприятием-изготовителем. Каждый сетевой адаптер имеет свой уникальный MAC-адрес.

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

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

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

Рис. 6.3. Основные топологии локальных компьютерных сетей

Сетевой уровень (Network Layer)

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

Локальные сети соединяются специальными устройствами — маршрутизаторами. Маршрутизатор собирает информацию о топологии межсетевых соединений и на основании этой информации пересылает сообщения сетевого уровня в сеть назначения. Сообщения на сетевом уровне называются пакетами. Чтобы передать пакет от компьютера-отправителя компьютеру-адресату, который находится в другой локальной сети, нужно совершить некоторое количество транзитных передан между сетями. Иногда их еще называют хопами (от англ. hop — прыжок). При этом каждый раз выбирается подходящий маршрут.

На сетевом уровне работают несколько видов протоколов: сетевые протоколы, которые обеспечивают передвижение пакетов по сети; протоколы маршрутизация RIP и OSPF; протоколы разрешения адреса ARP (Address Resolution Protocol).

Классические примеры протоколов сетевого уровня: IP (стек TCP/IP), IPX (стек Novell).

Транспортный уровень (Transport Layer)

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

1. Срочность.

2. Восстановление прерванной связи.

3. Наличие средств мультиплексирования нескольких соединений.

4. Обнаружение ошибок.

5. Исправление ошибок.

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

Примеры протоколов транспортного уровня: TCP и UDP (стек TCP/IP), SPX (стек Novell).

Сеансовый уровень (Session Layer)

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

Сеанс — это логическое соединение между компьютерами. Каждый сеанс имеет три фазы:

1. Установление соединения. Здесь узлы «договариваются» между собой о протоколах и параметрах связи.

2. Передача информации.

3. Разрыв связи.

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

Представительный уровень (Presentation Layer)

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

Пример протокола представительного уровня: SSL (Secure Socket Layer), обеспечивающий секретный обмен данными.

Прикладной уровень (Application Layer)

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

Примеры протоколов: HTTP, FTP, TFTP, SMTP, POP, SMB, NFS.

Интернет и модель OSI

При взаимодействии открытой системы и Интернета модель OSI упрощается, так как некоторые протоколы Интернета включают в себя функции нескольких уровней. Если к сети Интернет подключается один пользователь, а не вся сеть, то автоматически исчезают канальный и физический уровни, потому что нет сетевых адаптеров, а значит, нет и физических адресов. В данном случае конечным протоколом будет протокол типа «точка-точка», например, PPP. В этот протокол будут вложены все остальные.

Основные протоколы

Среди сетевых протоколов выделяются следующие основные:

♦ TCP/IP (Transmission Control Protocol / Internet Protocol) — святыня всех святынь. Это базовый транспортный сетевой протокол. На этом протоколе основана вся сеть Интернет.

♦ RIP (Routing Information Protocol) используется для маршрутизации пакетов в компьютерных сетях.

♦ ICMP (Internet Control Message Protocol) — протокол межсетевых управляющих сообщений. Он применяется для проверки доступности узла, установления соединения и т.п.

♦ FTP (File Transfer Protocol) — протокол передачи файлов. Служит для обмена файлами между системами. Например, вам нужно передать файл на сервер или, наоборот, скачать файл с сервера. Для этого вам нужно подключиться к файловому серверу (он же FTP-сервер) и выполнить необходимую вам операцию. Подключение осуществляется с помощью FTP-клиента. Простейший FTP-клиент входит в состав практически любой операционной системы. Обычно для запуска FTP-клиента нужно ввести команду ftp.

♦ HTTP (Hyper Text Transfer Protocol) — протокол обмена гипертекстовой информацией, то есть документами HTML. Протокол HTTP используется веб-серверами. HTTP-клиенты называются браузерами.

♦ POP (Post Office Protocol) — протокол почтового отделения. Этот протокол используется для получения электронной почты с почтовых серверов. А для передачи почтовых сообщений на сервер служит протокол SMTP (Simple Mail Transfer Protocol).

♦ SLIP (Serial Line Internet Protocol) — протокол подключения к сети Интернет по последовательной линии. Используется для установления связи с удаленными узлами через низкоскоростные последовательные интерфейсы. В настоящее время вытеснен протоколом PPP и практически не используется.

♦ PPP (Point-to-Point Protocol) обеспечивает управление конфигурацией, обнаружение ошибок и повышенную безопасность при передаче данных на более высоком уровне, чем протокол SLIP.

6.1.3. Протокол TCP/IP и IP-адресация

Любому компьютеру в IP-сети (TCP/IP-сети) назначен уникальный адрес, который называется IP-адресом. IP-адрес — это 32-разрядное двоичное число, которое принято записывать в виде четырех десятичных чисел, разделенных точками, например, 111.111.213.232 или 127.0.0.1.

Уникальность IP-адреса достигается достаточно просто: IP-адреса назначаются централизованно Сетевым Информационным Центром (NIC, Network Information Center). Если ваша локальная (или даже региональная) сеть не соединена с Интернет, то внутри сети вы можете использовать любые IP-адреса без согласования с NIC. Если же ваша сеть подключена к Интернету, протокол TCP/IP обеспечивает работу вашей сетевой программы с любым компьютером в мире, как будто тот находится в локальной сети.

Любая сеть, в том числе локальная, может быть разделена на подсети. О причинах и целях такого разбиения вы можете прочитать в руководстве IP Sub-networking-HOWTO, которое вы найдете на сайте http://dkws.narod.ru или на http://www.dhsilabs.com.ua. Подсети связывает маршрутизатор, в роли которого может выступать любой компьютер с двумя или более сетевыми интерфейсами, например, двумя сетевыми платами.

Каждая сеть (подсеть) также имеет свой уникальный адрес. Под сетью можно понимать «пачку» IP-адресов, идущих подряд, то есть 192.168.1.0–192.168.1.255. Самый младший и самый старший адреса резервируются. Младший (192.168.1.0) служит адресом сети и используется, когда нужно указать всю сеть (подсеть), например, при задании маршрутизации для нее. Старший служит широковещательным (broadcast) адресом: в этот адрес направляются сообщения, которые нужно передать сразу всем компьютерам сети. Широковещательные запросы очень часто используются, например, для построения ARP-таблиц.

Для каждой сети (подсети) определена ее маска. Фактически, маска — это размер сети, то есть число адресов в сети. Маску принято записывать в десятично-побайтном виде:

♦ 255.255.255.0 — маска на 256 адресов (0–255)

♦ 255.255.255.192 — маска на 64 адреса (192–255)

♦ 255.255.0.0 — маска на 65536 адресов (256*256)

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


Классы IP-сетей Таблица 6.1

Класс Первые биты Диапазон адресов Количество узлов Маска
А 0 1.0.0.0–126.0.0.0 16777216(224) 255.0.0.0
В 10 128.0.0.0–191.255.0.0 65536(216) 255.255.0.0
C 110 192.0.1.0–223.255.255.0 256 (28) 255.255.255.0
D 1110 224.0.0.0–239.255.255.255 Multicast
E 11110 240.0.0.0–247.255.255.255 Зарезервирован

Адреса узлов (компьютеров) в сети класса А выглядят как 125.*.*.*, класса В — как 136.12.*.*, класса С — как 195.136.12.*,

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

Адреса класса E зарезервированы для будущего применения.

За некоторыми адресами закреплены особые значения, приведенные в таблице 6.2.


Специальные IP-адреса Таблица 6.2

Адрес Назначение
0.0.0.0 Адрес узла, сгенерировавшего этот пакет
255.255.255.255 Широковещательный адрес (ограниченное широковещание). Пакет с таким адресом будет рассылаться всем узлам, которые находятся в той же сети, что и источник пакета
127.0.0.1 Loopback — адрес локального компьютера. Используется дли тестирования сетевых программ и взаимодействия сетевых процессов. При попытка отправить пакет по этому адресу данные не передаются по сети, а возвращаются протоколам верхних уровней как только что принятые. Любой адрес подсети 127.0.0.0 относится к локальному компьютеру
10.0.0.0 Изолированная сеть класса А, которая использует протокол IP, но не подключена к Интернету. Маска сети 255.0.0.0
172.16.0.0–172.31.0.0 16 изолированных IP-сетей класса В. Маска каждой сети 255.255.0.0
192.168.0.0–192.168.255.0 256 сетей класса С, маска каждой сети 255.255.255.0

6.1.4. DNS — система доменных имен

Человеку обычно легче запомнить символьное имя (www.dhsilabs.com.ua), чем последовательность чисел (217.20.163.34). Компьютеру же, наоборот, проще обрабатывать числа, а не символьную информацию. Для преобразования IP-адреса в символьное имя и обратно используется служба доменных имен — DNS (Domain Name System).

Домены объединены в иерархическую структуру. Корневой домен управляется центром InterNIC, который назначает домены верхнего (первого) уровня для каждой страны и регистрирует национальных координаторов. Национальные координаторы (в России это — RU-CENTER, http://www.nic.ru) повторяют эту процедуру в своем домене и так далее, в результате типичное доменное имя подразделения компании выглядит как на рисунке 6.4.

Рис. 6.4. Иерархическая структура системы доменных имен

DNS можно назвать гигантской распределенной базой данных. Ее поддерживают серверы имен (name server, DNS-сервер), которые снабжают всех информацией о данном домене или нескольких доменах сразу. Для каждой зоны (группы узлов, приписанных к этому домену, но не к его поддоменам) есть по крайней мере два сервера имен, которые содержат всю информацию относительно хостов (узлов) в этой зоне.

Что происходит, когда пользователь вводит в окне браузера адрес department.firma.isp.ru? Запрос на разрешение (преобразование) имени в IP-адрес сначала отправляется серверу имен, принадлежащему провайдеру пользователя. Если этот сервер знает такое имя, он возвращает IP-адрес, и браузер устанавливает соединение с нужным компьютером. Если же нет, то сервер имен провайдера обращается к корневому серверу, обслуживающему домен наивысшего уровня, тот перенаправляет запрос DNS-серверу домена ru, тот обращается к DNS-серверу домена isp, тот — к DNS-серверу домена firma, а этот последний возвращает IP-адрес зарегистрированного в нем хоста department. Если эта цепочка запросов оборвется на каком-либо звене, то пользователю будет сообщено о невозможности разрешения имени компьютера в IP-адрес.

6.1.5. Порты

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

Этот номер может быть любым, но за наиболее популярными службами закреплены стандартные номера, чтобы клиенты были твердо уверены, что обращаются к нужному серверу. Так, стандартный номер порта электронной почты 25, пересылки файлов — 21, веб-сервера — 80, службы telnet — 23, сервера имен — 53. Стандартные номера выбираются из промежутка от 0 до 1023. Числа начиная с 1024 и до 65 535 можно использовать для своих собственных номеров портов.

6.1.6. Динамическое выделение адреса

Как я уже сказал, IP-адрес любого устройства, подключенного к Интернету, должен быть уникальным. Это означает, что статически назначенный вам адрес не сможет использовать никто другой, даже тогда, когда вы отключитесь от сети. Избавиться от такого расточительного расходования адресов помогает механизм DHCP (Dynamic Host Configuration Protocol), позволяющий множеству временно подключающихся к сети клиентов совместно использовать один и тот же небольшой набор адресов.

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

6.2. Подключение к локальной сети

Если среди вашего оборудования есть сетевая плата, то она будет обнаружена при установке системы. Если же вы установили сетевую плату после установки системы, то запустите средство поиска нового оборудования. Обычно для этого применяется утилита kudzu (в дистрибутиве Linux Mandrake 10 есть своя — harddrake). Запускать ее нужно от имени суперпользователя.

Kudzu самостоятельно определит новое устройство и установит его: пропишет устройство в файл установленного оборудования (имя его зависит от дистрибутива: попробуйте /etc/modules.conf, /etc/modprobe.conf, /etc/sysconfig/hwconf) и добавит его модуль (драйвер) в состав ядра.

Нужно напомнить, что eth0 — это первая сетевая плата, eth1 — вторая и т.д. Скорее всего, у вас есть всего одна — eth0. Ее мы и будем настраивать.

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

Сейчас же все в корне изменилось: конфигураторы Linux стали такими ми же удобными, как и апплеты Панели управления Windows. Тем не менее, мы рассмотрим не только настройку с помощью конфигураторов, но те самые команды, с помощью которых администраторы настраивали сеть лет десять назад. В этой книге будем ориентироваться на современные дистрибутивы Linux Mandrake и Red Hal Linux (Fedora Core) — совсем старые их версии рассматривать нет смысла — я не встречал ни одного сервера, на котором был бы установлен Red Hat версии ниже 7.x.

6.2.1. Настройка сети в Linux Mandrake

Начнем с моего любимого дистрибутива — Linux Mandrake. Запустите конфигуратор drakconf, в нем выберите апплет «Сеть и Интернет», далее «Новое соединение», а в появившемся окне — «Соединение по локальной сети».

Если у вас в сети есть DHCP-сервер, рекомендую выбрать автоматическую настройку. Если же такого сервера нет или у вас другие планы относительно этого компьютера, выбираем ручную настройку.

Рис. 6.5. Конфигуратор DrakConf

Кроме IP-адреса сетевого интерфейса и маски сети обязательно укажите опцию «Запускать при запуске», в противном случае вам придется поднимать интерфейс eth0 каждый раз при запуске/перезапуске Linux. Опция Network Hotplugging в официальной документации не описана, но, насколько я понял, она используется для определения физического подключения к сети. В режиме Network Hotplugging, если ваш компьютер не подключен физически (с помощью кабеля) к хабу или другому компьютеру, то при попытке обращения к интерфейсу вы получите сообщение «Сеть недоступна». Поэтому, если физической сети у вас нет, а сеть как таковая вам нужна, например, для тестирования сетевых приложений, рекомендуется этот режим не включать.

Рис. 6.6. Указание параметров сетевого интерфейса при ручной настройке

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

Следующий вопрос конфигуратора — адрес узла Zeroconf — это поле можете с чистой совестью оставить пустым и нажать Далее.

Настройка сети уже почти завершена — осталось только перезапустить сеть.

Если вы изменяли имя узла (а при первой настройке так оно и бывает), рекомендуется сразу же перезапустить систему X Window: нажмите Ctrl+Alt+Backspace и заново войдите в систему.

Для изменения параметров уже созданного соединения используется апплет «Управление соединениями». Он позволяет изменить все параметры, которые вы ввели с помощью предыдущего апплета, а также просмотреть информацию об интерфейсах.

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

6.2.2. Настройка сети в Linux Red Hat

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

Вернемся к настройке сети. Выберите нужный вам адаптер и нажмите кнопку Изменить.

В появившемся окне введите IP-адрес и сетевую маску. Обязательно выключите режим Configure using DHCP — мы настраиваем интерфейсы вручную, а не с помощью DHCP. Также следует включить режим Activate On Boot — тогда наш интерфейс будет «поднят» при загрузке системы. Этот режим нужно включать для всех постоянных соединений, например, соединения по локальной сети или по выделенной линии. Вернувшись в окно настройки сети, укажите имя компьютера — COMP5. А затем нажмите кнопку Далее. Все, сеть настроена.

Для изменения параметров сетевого соединения удобнее использовать графический конфигуратор redhat-config-network.

Рис. 6.7. Настройка сети

6.2.3. Настройка сети в Fedora Core

Графический конфигуратор в Fedora Core называется internet-druid (рис. 6.8). Можно запустить его и из меню оконной среды (в GNOME это Система→Мастер подключения к Интернет).

Рис. 6.8. Настройка сети

Выберите «Соединение Ethernet», а дальше следуйте инструкциям. После создания соединения для вас будет запущен конфигуратор system-config-network, позволяющий указать дополнительные параметры сетевого интерфейса или изменить только что введенные. В дальнейшем его можно вызвать из меню оконной среды (в GNOME это Система→Управление устройствами сети).

Рис. 6.9. Указание параметров сетевого интерфейса при ручной настройке

6.2.4. Проверка работы сетевого интерфейса

Если вы не подняли (активировали) интерфейс в процессе графического конфигурирования, сделайте это сейчас. Перейдите на текстовую консоль или откройте окно терминала и выполните команду ifup eth0 (деактивировать интерфейс можно командой ifdown eth0).

Для получения сведений об активных интерфейсах выполните команду ifconfig. Она покажет примерно следующее:

eth0 Link encap:Ethernet HWaddr 00:02:F0:73:B0:85

inet addr:192.168.1.11 Beast:192.168.1.255

Mask:255.255.255.0

UP BROADCAST MULTICAST MTU:1500 Metric:1

[...]


lo Link encap:Local Loopback

inet addr:127.0.0.1 Mask:255.0.0.0

UP LOOPBACK RUNNING MTU:16436 Metric:1

[...]

Интерфейс lo, которого вы не настраивали, — это интерфейс обратной петли. Не отключайте его, он необходим для работы некоторых приложений.

В первых двух строчках утилита ifconfig выводит тип (Ethernet) адаптера, его физический адрес (MAC-адрес) и присвоенный ему IP-адрес. Дальше — параметры интерфейса, указывающие, что он запушен и используется.

MTU (Maximum Transfer Unit) — максимальный размер единицы передачи данных. Практически все протоколы позволяют использовать в кадре поля переменной длины, это касается даже заголовка кадра. Максимально допустимое значение длины поля — это как раз и есть MTU.

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

Теперь проверим, как работает соединение. Это делают командой ping (пингуют нужный адрес).

# ping 192.168.1.11

Эта команда посылает на указанный адрес по протоколу ICMP маленький пакет, требующий эхо-ответа, раз за разом, пока не будет остановлена (например, нажатием комбинации клавиш Ctrl+). Обычно ею пользуются для проверки доступности узлов.

Потом пропингуйте свою машину по имени, которое вы ей дали: ping dhsilabs.

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

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

<IP-адрес> <полное_имя_узла> <псевдонимы>

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

6.2.5. Настройка сети в старых дистрибутивах

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

Добавьте в файл установленного оборудования (скорее всего, он будет называться /etc/conf.modules) сведения о своей сетевой плате.

Добавьте в ядро модуль сетевой платы:

# insmod rtl8139.о (для Realtek 8139)

# insmod ne2k-pci.o (для NE2000 PCI)

Назначьте интерфейсу IP-адрес:

# ifconfig eth0 <IP_ адрес > broadcast <BROADCAST_адрес> netmask <маска>

Указать шлюз для выхода в Интернет можно командой route:

# route add default gateway <IP_адрес_шлюза>

Если в Интернет выходить вы пока не собираетесь, то удалить установленный маршрут можно командой route del default. Команда route без аргументов выводит текущую таблицу маршрутизации пакетов.

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

6.3. Подключение к Windows-сети

Вам удалось достучаться (ping) до всех компьютеров своей локальной сети, работающих под управлением ОС Windows, но хотелось бы большего? Например, обмениваться с ними файлами? Если в вашей сети есть папки, к которым открыт общий сетевой доступ, то это возможно. Поможет вам пакет Samba.

Название Samba происходит от названия протокола SMB (Server Message Block), он же NetBIOS, на котором основана работа Windows-сети. Пакет Samba содержит набор приложений, позволяющих Linux-машине включиться в работу такой сети — как в роли клиента, так и в роли сервера.

В роли обычного пользователя вам достаточно уметь подключаться к Windows-сети как клиенту. Для этого вам понадобятся пакеты samba-common и samba-client, входящие в большинство современных дистрибутивов. Если их у вас нет, то загляните на http://www.samba.org.

Пусть сетевой доступ к папке открыт на компьютере, имя которого в сети Windows USER5. Посмотрим сначала на список всех доступных ресурсов на этом компьютере:

$ smbclient -L user5 -U <имя_пользователя>

Имя пользователя — это не ваше регистрационное имя на Linux-машине, а имя того пользователя машины Windows, кто имеет доступ к ее ресурсам. После ввода пароля вы увидите что-то вроде:

Domain=[USER5] OS=[Windows 5.1]

Server=[Windows 2000 LAN Manager]

Sharename  Type Comment

---------  ---- -------

SharedDocs Disk

WIN (C)    Disk

ADMIN$     Disk Remote Admin

Public     Disk

[...]

Public — это та папка, которая вас интересует. Для приема-передачи файлов предназначена программа smbclient. Чтобы ускорить (или автоматизировать) ввод пароля, введите ее в таком виде:

$ smbclient //user5/public -U <имя_пользователя>%<пароль>

Вы увидите приглашение программы:

smb: >

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


Команды программы smbclient Таблица 6.3

Команда Описание
ls Выводит список файлов в папке
cd [папка] Выполняет переход в заданный каталог на сервере (учтите, что именно на сервере, а не на клиентском компьютере). В том случаи, если каталог не указан, то smbclient просто выдаст имя текущего каталога
get [файл] [локальное имя] Получает указанный файл из общего ресурса и сохраняет его на локальном компьютере. Если указано локальное имя, то полученный с сервера файл будет сохранен на клиентском компьютере под этим именем
put [файл] [удаленное имя] Копирует файл на сервер и сохраняет его там под указанным именем. Если это имя не указано, то файл при сохранении переименовываться не будет
mget [файлы] Получает все указанные файлы с сервера
mput [файлы] Копирует все указанные файлы на сервер
del [файлы] Удаляет на сервере указанные файлы, если, конечно, пользователь обладает на это правами
! Позволяет временно выйти из smbclient, чтобы выполнить команду на локальном компьютере. Например, ! ls — это просмотр текущего каталога на локальной машине
exit или quit Завершение сеанса работы программы smbclient

Использовать программу smbclient не очень удобно. Если вы собираетесь обмениваться файлами часто, то лучше использовать программу smbmount, которая умеет монтировать удаленный общий ресурс как обычную файловую систему. Ниже приведен пример команды, которая монтирует папку customers компьютера USER5, используя имя пользователя den. Точка монтирования — каталог /mnt/customers:

$ smbmount //user5/customers -U den /mnt/customers -U 500 -G 100

В этом примере владельцем смонтированного каталога объявляется пользователь с идентификатором (UID) 500 и идентификатором группы 100.

Закончив работу с обшей папкой, размонтируйте ее командой

$ smbumount /mnt/customers

Если вместо русских имен файлов вы видите непонятные символы, значит, кодировки кириллицы на вашем компьютере и на Windows-машине различны и вам нужно указать дополнительные опции монтирования: codepage=<arg> — для кодовой страницы, применяемой на удаленной машине (обычно для кириллицы это cp866), и iocharset=<arg> — для кодовой страницы на стороне Linux. Значение iocharset зависит от установленной локали, и узнать его можно по команде locale:

$ locale

LANG=ru_RU.UTF-8

[...]

В моем примере на стороне Linux используется Юникод (а могло бы быть, например, KOI8-R), и команда монтирования будет выглядеть так:

$ smbmount //user5/customers /mnt/customers \

>-о username=den,password="12345",\

>codepage=cp866,iocharset=utf8

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

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

Обратите внимание, что при монтировании внешних файловых систем значение кодовой страницы пишется как «cp866», а для локальных файловых систем (раздела FAT32 на вашем жестком диске, где установлена Windows) — просто «866».

Запускать программу smbmount имеет право только суперпользователь. Чтобы обычный пользователь мог ее запустить, следует установить для нее атрибут SUID, однако такое решение является небезопасным. Выходом из этого положения может послужить запуск программы smbmount при загрузке системы. Добавьте в сценарии автозагрузки (советую — в /etc/rc.local, см. п.9.1.2) вызов программы smbmount для монтирования файловых систем совместного использования, с которыми вы работаете чаще всего. После этого обычные пользователи смогут работать с удаленными ресурсами как с обычной локальной файловой системой.

6.4. Подключение к Интернету

Если вы собираетесь входить в Интернет через локальную сеть, то ничего дополнительно настраивать не нужно. Надо только в настройках eth0 указать IP-адрес шлюза, через который вы собираетесь выходить, а остальное — забота администратора локальной сети.

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

6.4.1. Настройка модема

Модем подключается очень просто — вам достаточно вставить плату модема в корпус компьютера или подключить внешний модем, и система автоматически определит и установит его. В случае, если у вас старый дистрибутив, например, Red Hat Linux версии 6 и ниже, то вам самим придется создать ссылку /dev/modem на устройство /dev/ttySn, где n — это номер последовательного порта. Напомню, что устройство /dev/ttyS0 соответствует порту COM1 в DOS. В принципе, создавать ссылку даже не обязательно, потому что в любой коммуникационной программе можно указать устройство, с которым она будет работать. Устройство /dev/modem используется большинством программ по умолчанию.

Для проверки работоспособности модема можно использовать программу minicom. Это обычная терминальная программа. Первый раз ее нужно запускать от имени суперпользователя с опцией -s (setup): в этом режиме программа выводит конфигурационное меню, позволяющее создать (или отредактировать) настроечный файл /etc/minirc.dfl (рис. 6.10). Нужно изменить только устройство, которое будет использоваться в качестве модема.

Рис. 6.10. Программа настройки minicom

Для тестирования модема обычно используются стандартные AT-команды. Инициализировать модем можно командой ATZ, поднять и положить трубку — ATH1 и ATH0 соответственно, а набрать номер — ATDPномер, используя импульсную систему набора номера, и ATDTномер, используя тональную систему.

Ссылку можно также создать программой modemtool в RedHat, а в Linux Mandrake нужно воспользоваться все тем же конфигуратором DrakConf.

Будет справедливо отметить, что Linux не работает с программными модемами для Windows (win-модемы). А вот модемы, которые подключаются к шине USB, в ОС Linux использовать можно. Только для этого нужно включить в ядро поддержку шины USB и USB-модемов.

В последнее время некоторые производители программных модемов (например, Lucent) обратили внимание и на Linux-пользователей. Компания Lucent выпустила драйверы под Linux для своего модема — их вы можете найти в Интернете.

Также следует учитывать появившиеся относительно недавно внутренние аппаратные PCI-модемы. С ними Linux работать может, но не со всеми и «через не хочу». Что можно порекомендовать пользователям, у которых установлен win-модем? Просто купить аппаратный COM-модем (не USB!). Этим вы сэкономите себе и нервы, и время. Внешний аппаратный модем, пригодный для домашнего использования, стоит от 20 до 40 долларов — не так уж и много. На сервере же внутренний модем вообще непригоден: тут нужен внешний и только внешний. Желательно ZyXEL. Цены на него начинаются от 100 долларов, но он того стоит, уж поверьте.

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

♦ http://www.linmodems.org/ — здесь можно найти ссылки на драйверы для Win-модемов;

♦ http://linux-forever.narod.ru/writes/zyhel.htm — настройка модема ZyXEL OMNI 56K PCI;

♦ http://www.loe.lg.ua/help/newl/solaris/Untitled/index-106.html — HOWTO по настройке Win-модемов.

Примечание

О том, как настроить ADSL-соединение и вообще выделенную линию, можно прочитать в моей книге «Linux-сервер своими руками». Также в этой книге описано подключение и настройка сетевой карты.

6.4.2. Подготовка к выходу в Интернет

Рассмотрим, как можно подключить Linux к Интернету. Отмечу, что это подключение имеет больший смысл, нежели подключение Windows, так как Linux намного лучше и, что самое главное, быстрее работает с сетевыми устройствами. Лично у меня соединение с моим провайдером при использовании Linux работает где-то в два раза быстрее и не простаивает, как при работе в Windows.

У вас, конечно же, есть модем, выбран и оплачен провайдер, от него получены логин-имя, пароль и все остальные сведения, которые могут потребоваться для доступа к его службам. Осталось убедиться в том, что ваша конфигурация Linux поддерживает протокол PPP, по которому происходит соединение с Интернетом, и настроить его. Проверьте, установлен ли у вас пакет ppp, и если нет, то доустановите его из вашего дистрибутива (п. 7.4).

В современных дистрибутивах настроить подключение по протоколу PPP можно по-разному:

♦ Используя конфигуратор (в Linux Mandrake это программа DrakConf). Если операционная система предоставляет средства для удобной настройки соединения, так почему бы ими не воспользоваться? Зачем действовать в обход? Не модифицируем же мы реестр Windows вручную с помощью regedit для создания нового соединения.

♦ Используя программу kppp. В предыдущих версиях Linux Mandrake конфигуратор DrakConf был менее удобен, поэтому многие пользователи предпочитали использовать программу kppp. Она очень напоминает стандартный Windows-дайлер, в котором интегрированы все функции по установке и управлению соединениями.

♦ Редактируя конфигурационные файлы вручную (в этой главе этот способ не рассматривается. Если вы заинтересовались им, рекомендую прочитать мою книгу «Linux-сервер своими руками»).

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

DrakConf (точнее, его модуль — DrakConnect) — отличная и удобная программа, но при работе с ней нужно учитывать некоторые нюансы. Теперь обо всем по порядку. Выполняем команду drakconf, выбираем апплет Сеть и Интернет→Новое соединение→Модемное соединение. Можно сразу запустить апплет Сеть и Интернет — командой drakconnect.

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

♦ Название соединения, номер телефона, имя пользователя и пароль.

♦ Назначение IP-адреса: автоматическое (с помощью DHCP) или вручную. Рекомендуется использовать автоматическое назначение IP-адреса, поскольку практически все провайдеры настраивают DHCP-сервер для назначения IP-адресов клиентов.

♦ Назначение IP-адреса DNS-сервера: автоматическое или ручное. Выбираем автоматическое и нажимаем Далее.

♦ Назначение IP-адреса шлюза: автоматическое.

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

Последний вопрос конфигуратора — стоит ли подключаться к Интернету прямо сейчас. Я согласился. Несколько минут DrakConnect тщетно пытался набрать номер, но так и не набрал его. А причина была в том. что он использовал тоновый набор номера, а моя АТС — импульсный. Да, вы правильно меня поняли, от проверки только что созданного соединения стоит отказаться.

Рис. 6.11. Основные параметры соединения

Дальнейшую настройку соединения будем производить в программе kppp, потому что «умений и навыков» конфигуратора DrakConf для этого явно недостаточно.

Программа kppp, входящая в состав KDE (пакет kdenetwork), предназначена для того, чтобы совместно с демоном pppd (Point-to-Point Protocol Daemon) устанавливать и поддерживать соединение с провайдером. Запустите ее в окне терминала или выберите из меню K→Интернет→Kppp и сразу же нажмите кнопку Настроить.

Рис. 6.12. Программа kppp

Интерфейс программы предельно прост. Однако хотелось бы дать несколько рекомендаций по работе с этой программой:

1. Вам нужно изменить имя устройства, которое будет использовано kppp, то есть имя модема, и указать его скорость. Но не подумайте только, что если вы установите скорость 56700, то ваш модем на 9600 заработает с большей скоростью. Иногда нужно, наоборот, занизить скорость, чтобы соединение не обрывалось.

2. На вкладке Устройство укажите устройство, к которому подключен ваш модем: /dev/ttyS0, если это СОМ, и /dev/ttyS1, если COM2.

3. Измените команду набора номера в окне Команды модема. По умолчанию используется тональный набор (команда ATDT). Для работы с импульсной системой набора номера используйте команду ATDP.

4. Нужно изменить права доступа к демону /usr/sbin/pppd, позволяющие обычному пользователю его запускать. В противном случае запускать программу kppp вам придется от имени суперпользователя.

Рис. 6.13. Изменение команды набора номера

Теперь можно попытаться набрать номер. Для этого нажмите OK и в окне KPPP нажмите кнопку Подключиться.

После установки соединения на панели задач KDE вы увидите статистику подключения, а именно, сколько времени вы провели в сети. Открыв окно с названием соединения, вы увидите скорость подключения и сможете прервать сеанс связи нажатием кнопки Разъединить.

Рис. 6.14. Панель задач KDE с кнопкой работающего соединения

6.4.3. Специальные возможности браузеров

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

Konqueror

Каковы же возможности Konqueror? Я и не сомневался, что он поддерживает последние стандарты HTML (4.0) и CSS. А вот как у него обстоят дела с Java и JavaScript? Очень много сайтов написано с использованием JavaScript и Java-апплетов.

Я попробовал загрузить документ, содержащий Java-скрипт. Визуальные эффекты отображались так же, как в старом недобром Internet Explorer. Это меня обрадовало. Но я решил копнуть глубже.

Вас не раздражают всплывающие окна? Этим особенно знаменита Система Лидеров. Например, когда вы заходите на сайт одного из участников системы, браузер открывает еще несколько окон и загружает в них сайты других участников. Кроме своих денег, мы еще теряем и часть нервных клеток — меня ничто так не раздражает, как вываливающиеся окна, а также приглашения установить Flash. К счастью, с окнами мы сейчас справимся. Выполните команду меню Настройка→Настроить Konqueror. Перейдите в раздел Java & JavaScript (рис. 6.15).

Рис. 6.15. Настройка политики JavaScript

Вы можете вообще отключить JavaScript, но я предпочитаю создать «черный список». Нажмите кнопку Добавить, затем введите имя сайта или домена, например, free-pics.com и правило Запретить. Обратите внимание: вы можете указать как имя узла, так и имя всего домена.

После настройки JavaScript я решил посмотреть, как же Konqueror работает с Java-апплетами. По умолчанию поддержка Java отключена, поэтому на вкладке Java ее нужно включить и указать путь к программе Java: /usr/bin/java или просто java.

С флешем (Flash) дела обстоят лучше. Браузер Konqueror использует плагин Flash Player программы Netscape. Поэтому, если в вашей системе установлен браузер Netscape или Mozilla, ваш Завоеватель будет отображать «флешки».

Но что больше всего мне понравилось в этом браузере, так это то, что я могу изменить строку идентификации агента. Например, я могу «замаскироваться» под Internet Explorer 5.5 on Windows 2000. Пусть думают, что у меня Windows стоит. Для чего это нужно? Когда вы посещаете узел, в протоколах веб-сервера отображается IP-адрес и строка идентификации агента, например, Mozilla/5.0 (compatible; Konqueror/3; Linux).

Galeon

Он был «придворным» браузером среды GNOME до версии 2.6. Начиная с этой версии вместо Galeon устанавливается его облегченная версия Epiphany, а пакета Galeon может даже не оказаться в вашем дистрибутиве. Достать его можно из репозитория ALT Linux Sisyphus (http://alt.linux.kiev.ua/srpm/galeon/get). Основан Galeon на движке Mozilla (можно читать Netscape), поэтому он умеет все, что умеет Netscape (Mozilla). Это означает, что веб-страницы в браузере Galeon будут отображаться точно так же, как в браузере Netscape и наоборот.

Galeon без проблем справился со всеми приготовленными мною тестами. Самое главное, что мне не пришлось вокруг него плясать с бубном и песнями, чтобы запустить апплеты Java.

Что мне еще понравилось в этом браузере, так это работающая консоль Java. В отличие от Konqueror, в котором я не смог добиться появления этой консоли, в Galeon консоль Java еще и нормально функционировала. Для появления консоли выполните команду меню Инструменты→Консоль Java.

Диспетчер постоянных данных Galeon позволяет централизованно управлять Cookie и паролями. Для его вызова выполните команду меню Инструменты→Cookie→Просмотр Cookie. Вы можете удалить выбранные или все Cookie и одновременно запретить их прием.

Что такое Cookie? Некоторые сервера, когда вы их посещаете, записывают в определенный файл на диске какую-то информацию. Обычно это время последнего посещения сайта, ваше имя (если вы его ввели в анкете), параметры сайта и другие сведения. Например, для почтового сервера Mail.ru это дата последней регистрации и применяемая схема дизайна. Хранить эти несколько байтов, умноженных на огромное количество пользователей, на самом сервере невыгодно, поэтому сервер предписывает каждому клиенту хранить свои данные у себя. Это и есть Cookie.

Вы можете указать, каким сайтам вы разрешаете устанавливать Cookie, а каким — нет.

Не разрешайте устанавливать Cookie интернет-магазинам, и вот почему. Один клиент заходил в интернет-магазин, покупал товары, которые потом доставлялись ему домой. Он уже 2-3 месяца пользовался услугами этого магазина и не замечал ничего странного в поведении цен: рынок — дело непредсказуемое, цены могут постоянно меняться, на некоторые товары — в течение дня. Но однажды ему пришлось работать в интернет-кафе. Знаете, что он обнаружил, когда вошел на сайт магазина с другого компьютера? Что цены для новых пользователей на 20% ниже. Магазин привлекал покупателей низкими ценами, постепенно увеличивая цену (или делая формальные скидки) для постоянных клиентов. Старых клиентов магазин узнавал именно по Cookie, после чего предлагал им соответствующий прейскурант.

Epiphany

Прямо-таки браузер для настоящего аскета: минимум функций и жиденький интерфейс пользователя. У текстового браузера lynx, наверное, больше возможностей, чем у Epiphany. Единственная функция, оставшаяся от Galeon — это возможность управления Cookies. Вызвать ее можно из меню браузера Правка→Изменить персональные данные. Хотя, опять-таки, эту функцию «урезали» — если раньше можно было определить, какие сайты могут устанавливать Cookies, а какие — нет, то в Epiphany этого сделать нельзя.

Рис. 6.16. Менеджер персональных данных

Netscape

Что я вам могу сказать относительно Netscape? Вы и так все знаете. Единственное правильное решение, которое вы можете принять при выборе браузера, это Netscape. Большинство страниц будут корректно отображаться в этом браузере, У вас никогда не будет проблем ни с апплетами Java, ни с Flash или JavaScript. То, что некоторые страницы будут выглядеть не так, как в Internet Explorer, так это уже не глюк Навигатора, а непрофессионализм веб-дизайнеров. Некоторые горе-мастера сознательно создают сайты, которые эффектно выглядят в IE, но куда хуже отображаются в Netscape. Это и есть непрофессионализм.

Легкие и быстрые браузеры Konqueror и Epiphany можно использовать для просмотра несложных страниц, например, чтения HTML-документации, а все остальные открывать с помощью Netscape. Ну и что, что время его запуска на несколько секунд больше?

FireFox

Браузер FireFox, основанный на движке Mozilla, появился сравнительно недавно. Его можно найти в последних версиях дистрибутивов (уже в Fedora Core 3 он есть). Большинство веб-страниц просматриваются в браузере без особых нареканий, кроме страниц, содержащих Flash-анимацию.

Для просмотра Flash-анимации вам нужно загрузить Macromedia FlashPlayer. Сделать это можно на сайте http://www.macromedia.com. Распакуйте его в какой-нибудь каталог, перейдите в этот каталог и введите команды:

$ chmod а+x flashplayer-installer

$ ./flashplayer-installer

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

MIME Type Suffixes Enabled

application/x-shockwave-flash Shockwave Flash swf Yes

application/futuresplash FutureSplash Player spl Yes

Если вы увидите эти строки, значит, плагин корректно установлен.

6.4.4. Текстовые браузеры

Текстовые браузеры не показывают рисунков, различных шрифтов — только текст. Зато при этом значительно повышается скорость доступа к WWW.

Популярны такие представители этого семейства, как Lynx и похожий на него Links.

Формат команды lynx таков:

$ lynx [опции] URL

Стрелки управления курсором «вверх» и «вниз» перемешают по ссылкам, стрелка «вправо» открывает ссылку, стрелка «влево» возвращает на предыдущую страницу. Справку можно получить, нажав клавишу <H>.

Некоторые полезные опции перечислены в таблице 6.4.


Опции программы lynx Таблица 6.4

Параметр Описание
-anonymous Использовать анонимную регистрацию
-auth=имя пароль Использовать указанную информацию для аутентификации
-book Загрузить страницу с избранными ссылками
-cache n Установить количество кэшируемых документов
-case Учитывать регистр букв при поиске
-dump Преобразовать страницу в текстовый вид и отправить результат на стандартный вывод
-get_data Использование метода GET для отправления данных
-nolist Не выводить список ссылок при указании параметра -dump
-post_data Отправка данных с помощью метода POST
-realm Запрещает указывать URL при запуске
-reload Сброс каша прокси-сервера
-source Отображает страницы Web в виде исходного текста HTML

6.4.5. Полезный трюк: Что делать, если браузер «подвисает» на какой-то странице

Иногда попадаются веб-страницы, которым требуется целая вечность, чтобы загрузиться. Если с одной и той же страницей это повторяется изо дня в день, то причина, скорее всего, в следующем: код загружаемой страницы содержит ссылки на какой-то объект (картинку или, еще хуже, рекламный баннер), расположенный на другом сервере, причем имя этого сервера невероятно трудно разрешить в IP-адрес. Вы думаете, что браузер «висит», а на самом деле он ждет ответа от модуля распознавания имен (резолвера), который в свою очередь ждет ответа от сервера DNS. Службе DNS посвящена 13 глава этой книги, и для лучшего понимания этого совета просмотрите хотя бы бегло эту главу.

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

Во-вторых, можно явно отказаться от попыток открыть элемент страницы по этой «проблемной» ссылке. В файле /etc/nsswitch.conf (п. 13.2) определен порядок просмотра источников модулем распознавания имен. Убедитесь, что первым опрашивается файл:

hosts: files dns

Этот файл — /etc/hosts. Впишите в него строку, «разрешающую» имя проблемного сервера в ваш собственный (localhost) IP-адрес:

127.0.0.1 www.server.nedostupen.com

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

6.4.6. Набор программ для работы в Интернете

Болталка ICQ

Разве может популярная операционная система не включить в свой состав популярную программу для общения? Нельзя сказать однозначно, что Linux является самой популярной операционной системой, первенство все-таки принадлежит Windows, но то, что ICQ — это самая популярная программа для общения, сомнению не подлежит. Посмотрите на свой UIN: вот столько пользователей было зарегистрировано до вас.

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

Клиент ICQ для Linux так и называется — Linux ICQ (http://licq.org). Запустить программу можно с помощью команды licq. Программа может даже работать в терминале (консоли), для этого введите команду licq -p console.

Менеджер закачки файлов Downloader for X

Штатной утилитой для скачивания файлов в Linux служит wget, поддерживающая протоколы FTP, HTTP и HTTPS. Она работает в консольном режиме и не требует взаимодействия с пользователем, то есть можно запустить процесс скачивания в фоновом режиме и завершить свой сеанс работы с Linux. Разработанная специально для медленных и ненадежных линий связи, она умеет возобновлять процесс закачки с того места, на котором он был прерван.

Рис. 6.17. Сеанс ICQ для Linux

Воспользуемся ею, чтобы скачать последнюю версию программы X-Downloader, разработанной Максимом Кошелевым (www.krasu.ru/soft/chuchelo):

$ wget http://www.krasu.ru/soft/chuchelo/files/d4x-2.5.0final-1.i386.rpm

Как видно из названия X-Downloader, этот менеджер закачек предназначен для работы в графической среде X Window.

Возможности программы таковы:

♦ Загрузка файлов по протоколам FTP и HTTP.

♦ Организация очередей и подочередей закачки.

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

♦ Множественные параллельные закачки.

♦ Рекурсивное копирование по FTP и HTTP.

♦ Поддержка шаблонов при рекурсивном копировании по FTP.

♦ Поддержка прокси (FTP и HTTP).

♦ Принудительное ограничение скорости загрузки.

♦ Организация расписания загрузки.

♦ Приостановка закачки файлов и докачка в случае разрыва соединения.

♦ Поддержка метода drag-and-drop для добавления закачек.

♦ Прекрасная настраиваемость программы.

♦ Дополнительные возможности: шкуры (skins) и т.п.

Программа X-Downloader входит в состав некоторых дистрибутивов. Точно знаю, что она входит в состав дистрибутивов группы ALT.

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

Запустите программу d4x в окне терминала или из меню Команды→Запустить приложение.

В левой части окна X-Downloader (рис. 6.18) отображаются активные очереди закачки. Каждая очередь содержит список файлов, которые нужно закачать. Работа с очередями (создание, удаление) осуществляется с помощью меню Очередь. Если щелкнуть правой кнопкой мыши на названии очереди и выбрать команду Свойства, мы сможем изменить параметры очереди.

Рис. 6.18. Очередь закачек

Сейчас в списке файлов очереди Main находятся три задания. Для каждого задания отображаются:

♦ Его состояние (иконка с изображением бутылки): загружается, загружен, приостановлен, неудачное завершение;

♦ Имя, тип, размер файла;

♦ Сколько загружено, сколько осталось, отношение размера загруженной части к размеру файла в процентах;

♦ Скорость соединения, время загрузки;

♦ Количество попыток загрузки.

♦ Адрес (полный URL файла).

На панели состояния отображается информация о загружаемом файле.

Чтобы добавить новую закачку, нажмите кнопку Добавить закачку на панели инструментов. Если вы предварительно поместили URL загружаемого файла в буфер обмена, то можете нажать кнопку Добавить закачку из буфера. А можно воспользоваться, наверное, самым удобным способом — просто перетащить ссылку из окна Konqueror в окно программы X-Downloader. Появится окно Добавить закачку, на вкладках которого можно дополнительно настроить параметры загрузки. Если ваш сервер требует авторизации, укажите имя пользователя и пароль. Обычно это нужно для неанонимных FTP-серверов.

На вкладке Время вы можете определить время и дату начала закачки. Это очень удобно, если вам нужно закачать какой-нибудь большой файл, например, то же ядро Linux: вы можете поставить закачку на ночь. Только не забудьте об этом и не выключите компьютер!

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

Обратите внимание на горизонтальный «светофор» на панели инструментов. Это ограничитель скорости: красный свет означает, что будет использоваться самая низкая скорость, желтый — средняя, а зеленый — максимальная, то есть без ограничения.

Самые главные параметры находятся в группе Закачка (Настройка→Свойства программы→Закачка→Ограничения). Здесь вы можете определить:

♦ Таймаут чтения из сокета (по умолчанию 300 сек);

♦ Таймаут до повторного соединения (5 сек.):

♦ Количество попыток (0 — не ограничено);

♦ Откат после обрыва (0 байт, то есть закачка будет продолжена с того же самого места). Эта возможность позволяет заново передать указанное число байт, которые, возможно, были искажены перед обрывом соединения;

♦ Ограничение максимальной скорости (0 — без ограничения);

♦ Максимум строк в логах (100).

Еще одна полезная функция программы — Планировщик (Настройки→Планировщик). С его помощью можно создавать расписания закачек и выполнять другие действия, перечисленные в таблице 6.5.


Доступные действия планировщика X-Downloader Таблица 6.5

Действие Описание
Ограничить скорость С помощью этого действия вы можете как снизить, так и повысить скорость, поскольку вам по-прежнему доступны три режима: Минимум. Среднее и неограниченное. Зачем это нужно? Например, вы целый день загружаете файлы параллельно с другой работой в сети. Тогда на время обеденного перерыва можно повысить скорость, а в остальное время снизить, чтобы закачка не загружала канал и тем самым не мешала вашей основной работе
Поднять главное окно Отображает главное окно программы а указанное время
Выйти Завершает работу программы
Удалить завершенные Удаляет завершенные закачки из очереди
Удалить неудачные Удаляет неудачные закачки из списка
Перезапустить закачку Вы мажете указать закачку, которую нужно перезапустить. Тут. наверное, нужно быть волшебником, чтобы угадать точное время перезапуска закачки
Остановить закачку Останавливает закачку
Удалить закачку Удаляет закачку. Закачка будет удалена а любом случае, даже если она еще не завершена
Удалить, если завершена Удаляет закачку только в том случае, если она завершена
Добавить закачку Добавляет закачку в список
Сохранить список Сохраняет список
Выполнить команду Позволяет выполнить внешнюю команду, то есть запустить программу в указанное время
FTP-клиенты

В любой сетевой операционной системе (а ОС Linux — именно такая) есть простейший FTP-клиент — программа ftp. Она предлагает интерфейс командной строки. В ответ на приглашение ftp> введите команду help, чтобы увидеть список встроенных команд ftp.

Эти команды очень похожи на те, с которыми вы уже встречались, изучая программу smbclient. Важнейшие из них для вас — команды get и put.

Удобный FTP-клиент с графическим интерфейсом — программа gFTP. Я рекомендую устанавливать самую новую версию программы, не ниже 2.0. Запустите программу командой gftp (см. рис. 6.19).

Рис. 6.19. Окно программы gFTP

На рисунке видно, что я подключился к серверу ftp.yars.free.net под именем anonymous. Если ваш сервер не разрешает анонимный доступ, придется ввести имя и пароль. Порт в большинстве случаев — 21. После ввода всех необходимых параметров соединения нажмите кнопку Соединить (с изображением компьютеров). В правом углу находится кнопка Отключиться.

С помощью меню FTP можно установить один из режимов работы FTP-сервера: ASCII (текстовые данные) или Binary (двоичные). Режим Binary устанавливается по умолчанию, и лучше эту установку не изменять: текстовый файл в этом режиме поврежден не будет, а вот наоборот... Дело в том, что текстовый режим заменяет символы конца строки на те, что используются на принимающей стороне, так что разбиение текста на строки сохраняется; понятно, что двоичному файлу от такой замены не поздоровится.

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

Мне очень понравился инструмент Сравнить окна, который сравнивает окна Локальное и Удаленное. Эта функция незаменима, если вы обновляете свой веб-сайт по FTP.

Встроенными FTP-клиентами снабжены также браузеры Netscape/Mozilla, Konqueror и файловый менеджер Midnight Commander.

Однако все эти программы обладают одним небольшим недостатком: они не могут докачать файл в случае разрыва соединения (операция REGET). От этого неудобства избавлена программа ncftp.

Она не обладает удобным графическим интерфейсом, а больше похожа на стандартный FTP-клиент ftp и понимает его команды. Это значит, что для соединения с узлом вам нужно ввести команду open, а для закачки файла — команду get и т.д.

Предположим, что когда мы выкачивали все rpm-пакеты, соединение было разорвано (ох уж эти линии!). Для докачки файлов установите соединение заново, откройте нужный вам сервер (например, open ftp.redhat.com) и введите команду:

ncftp> get -С *.rpm

Опция активизирует функцию докачки.

При работе с этой программой меня очень обрадовала возможность создания закладок «на лету». Например, если вы работали с сервером ftp.redhat.com и последним каталогом был каталог /pub, то при вводе команды open redhat программа установит связь с сервером ftp.redhat.com и перейдет в каталог /pub. Просмотреть и отредактировать закладки позволяет команда bookmarks.

Глава 7 Основы администрирования системы

7.1. Что понимается под администрированием системы

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

В обязанности системного администратора обычно входит:

♦ управление пользователями: ведение учетных записей пользователей и групп, квотирование дискового пространства;

♦ управление процессами: перераспределение ресурсов с целью повышения производительности системы;

♦ установка и модернизация программного обеспечения;

♦ подключение и конфигурирование аппаратных устройств;

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

♦ резервное копирование и восстановление данных.

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

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

Несколько советов начинающему администратору:

♦ Входить в систему под именем root только тогда, когда это абсолютно необходимо, и завершать сеанс привилегированной работы сразу же после выполнения административной задачи. Чем реже вы работаете под именем root, тем меньше шансов случайно разрушить систему, спутав права пользователя root с правами других пользователей.

♦ Настроить строку приглашения командной оболочки так, чтобы для пользователя root она отличалась от приглашения для обычных пользователей. Как правило, строка приглашения root оканчивается символом #, а для других пользователей — символом $. Если все-таки есть вероятность забыть, под каким именем вы сейчас работаете, пользуйтесь командой whoami.

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

7.2. Конфигураторы Linux

Настройка всего программного обеспечения в UNIX-подобных системах сводится к редактированию текстовых файлов, которые программа прочитывает при запуске и которыми руководствуется при выборе режима работы. Каждая прикладная программа или демон, включая демон init, поддерживает отдельный набор этих, называемых конфигурационными, файлов (в отличие, скажем, от MS DOS, где в один файл могут быть объединены секции, управляющие различными подсистемами). Общесистемные службы держат их, как правило, в каталоге /etc, а пользовательские приложения — в домашних каталогах пользователей: такое размещение позволяет каждому пользователю настроить приложение в соответствии со своими нуждами.

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

Несмотря на удобство настройки путем редактирования текстовых файлов, все еще находятся администраторы, привыкшие к настройке в стиле Windows: через многоуровневые меню и диалоговые окна. Для таких администраторов предусмотрены графические конфигураторы, в разных дистрибутивах называющиеся по-разному. Запускать их нужно с графической консоли, потому что многие из них нуждаются в графическом режиме. В таблицах 7.1, 7.2 и 7.3 перечислены основные конфигураторы, включенные в дистрибутивы Mandrake, RedHat и Fedora Core.


Основные конфигуратора Linux Mandrake Таблица 7.1

Программа Назначение
drakconf Основной конфигуратор
drakboot Конфигуратор загрузчика LILO/GRUB
drakgw Совместное использование интернет-соединения
draknet Настройке сети
drakfloppy Создание загрузочного диска
draksec Определение уровня безопасности
drakxservices Автозапуск сервисов
diskdrake Программа для работы с разделами диска
drakconsole Доступ к консоли
draktime Настройка даты и времени
diskdrake-fileshare Разрешение совместного использования каталогов
adduserdrake Управление учетными записями
harddrake2 Средство для настройки оборудования (в Linux Mandrake до версии 9 называется harddrake)
keyboarddrake Настройка клавиатуры
localedrake Изменение параметров локализации
mousedrake Настройка мыши
menudrake Настройка системного меню GNOME и KDE
printerdrake Настройка принтера
netconf Настройка сети
Log drake Поиск в файлах протоколов
Modemconf Конфигурирование модема
Tinyfirewall Параметры брандмауэра
XFdrake Настройка сервера X
Xdrakres Установка разрешения монитора
Xconfigurator Настройка графической системы X Window

Основные конфигураторы Linux Red Hat Таблица 7.2

Программа Назначение
Setup Основной конфигуратор
control-panel Вспомогательный конфигуратор
Modemtool Конфигурирование модема
Printertool Настройка принтера
Netconf Настройка сети
Xconfigurator Настройка X Window
Autoconfig Параметры аутентификации
redhat-config-securitylevel Установка уровня безопасности (*)
redhat-соnfig-language Выбор языка (*)
redhat-config-date Установка даты (*)
redhat-config-users Управление пользователями (*)
redhat-config-packages Работа с пакетами (*)
redhat-config-xfree86 Настройка системы X Window (*)
redhat-config-printer Конфигуратор принтера (*)
Sndconfig Настройка звуковой платы

(*) Данные конфигураторы доступны в версии Red Hat 8.0 и выше


Основные конфигураторы Linux Fedora Core Таблица 7.3

Программа Назначение
setup Основной конфигуратор
system-config-packages Установка и удаление пакетов
system-config-authentication Параметры аутентификации
system-config-securitylevel Установка уровня безопасности
system-config-securitylevel-tui Настройка брандмауэра без графического режима
system-config-users Управление пользователями
system-config-network Настройка сети
system-control-network Настройка сетевых интерфейсов
system-config-network-druid Мастер установки сетевого соединения
system-config-services Настройка служб
system-config-display Настройка монитора и видеокарты
system-config-keyboard Выбор раскладки клавиатуры
system-config-mouse Настройка мыши
system-config-printer Настройка принтера
system-config-soundcard Настройка звуковой платы

Основной конфигуратор (setup или drakconf) обычно используют для первоначальной настройки системы сразу после установки.

7.3. Пользователи и квоты

7.3.1. Учетные записи пользователей

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

♦ /etc/passwd — учетная информация о пользователе;

♦ /etc/shadow — скрытая информация о пользователях: пароли в зашифрованном виде;

♦ /etc/group — информация о группах;

♦ /etc/gshadow — скрытая информация о группах;

♦ /etc/default/useradd — свойства, назначаемые по умолчанию новым учетным записям;

♦ /etc/login.defs — настройки безопасности пароля (время истечения, минимальная длина);

♦ /etc/skel — каталог, содержащий личные файлы настроек по умолчанию (когда для нового пользователя создается домашний каталог, в него помещаются эти файлы).

Файл /etc/passwd — информация о пользователях

Учетная информация о пользователях системы хранится в файле /etc/passwd в следующем виде:

username:password:UID:GID:full_name:home_dir:login_shell

Где:

♦ Username — это регистрационное имя пользователя, часто называемое логином. Обычно администраторы присваивают пользователям логины, образованные от их реальных имен. Имя root закреплено за суперпользователем. Кроме реальных пользователей, в системе существуют еще фиктивные (bin, daemon и т.п.), от имени которых запускаются общесистемные службы.

♦ Password — пароль. Обычно используются теневые пароли, и вместо пароля в файле /etc/passwd стоит знак *, а сам пароль в зашифрованном виде хранится в файле /etc/shadow.

♦ UID — уникальный числовой идентификатор пользователя из диапазона от 0 до 65534. Суперпользователю присвоен UID, равный 0.

♦ GID — числовой идентификатор первичной группы пользователя. Помимо первичной группы, пользователь может входить или не входить в состав разных групп, но в первичную группу (native group) он входит всегда. Пользователи, входящие в одну группу, могут работать с общими файлами. Первичная группа суперпользователя называется root. Ей присвоен GID, равный 0.

♦ Full_name — обычно представляет собой реальное имя пользователя, например Ivan Ivanov. Может содержать и другие данные: номер телефона и т.п. Эти сведения системой не используются, но доступны по команде finger <username>.

♦ Home_dir — домашний каталог пользователя. Стандартное место для него — это каталог /home/<username> (например, /home/den), и без особых причин изменять такую организацию домашних каталогов не рекомендуется.

♦ Login_shell — командный интерпретатор, запускаемый по умолчанию при входе пользователя в систему.

Пример фрагмента файла /etc/passwd:

root:x:0:0:root:/root:/bin/bash

bin:x:1:1:bin:/bin:/sbin/nologin

daemon:x:2:2:daemon:/sbin:/sbin/nologin

den:x:500:500:den:/home/den:/bin/bash

evg:x:501:501::/home/evg:/bin/bash

Применение теневых паролей оправдывает себя с точки зрения безопасности. Обычно к файлу /etc/passwd разрешен доступ в режиме «только чтение» всем пользователям. К файлу /etc/shadow обычный пользователь не имеет даже такого доступа.

Системы, использующие TCB (Trusted Computing Base), хранят пароли не в файле /etc/shadow, а в файлах /etс/tcb/<имя_пользователя>/shadow. Считается, что технология TCB более практична с точки зрения безопасности, поскольку доступ к паролям отдельного пользователя не позволит злоумышленнику скомпрометировать сразу всю систему. Для включения поддержки TCB нужно установить пакет tcb. Многие современные дистрибутивы (например, дистрибутивы ALT Linux) поддерживают TCB по умолчанию.

В качестве основного алгоритма шифрования используется MD5, превращающий пароль в 32-значное шестнадцатеричное число. Этот алгоритм является самым надежным. Раньше использовались алгоритмы DES и 3DES, но здесь я не буду подробно останавливаться ни на одном из них. При установке системы обычно спрашивается, хотите ли вы использовать теневые пароли (Shadow Passwords) и MD5. Я очень рекомендую вам использовать обе эти возможности.

Информация о группах пользователей. Файл /etc/group

Информация о группах пользователей хранится в файле /etc/group в следующем формате:

имя_группы:пароль:GID:члены_группы

Пароль используется крайне редко. Пример фрагмента файла /etc/group:

root:*:0:root

bin:*:1:root,bin,daemon

local:*:100:den,operator,ivan

guest:*:200:

dialup:*:250:victor,evg

В этом примере группа root зарезервирована для пользователя root. Группа с идентификатором 100 используется для локальных пользователей. В ее состав входят пользователи den, operator, ivan. Группа guest предназначена для гостевого входа и пользователя guest. В состав группы dialup входят пользователи victor и evg.

Системой определяются группы для фиктивных пользователей: bin, sys, adm и т.п. Реальные пользователи входить в них не могут. Эти группы используются для системных файлов.

Добавить группу вы можете с помощью команды groupadd. Я. как правило, просто добавляю запись в файл /etc/group, а если мне нужно удалить группу, то удаляю соответствующую строку.

7.3.2. Создание и удаление пользователей и групп

Большинство утилит административного назначения хранится в каталогах /sbin и /usr/sbin. Полный набор утилит для управления пользователями и группами, установленных в вашей системе, вы можете увидеть по команде

# ls {/sbin,/usr/sbin}/*{user,group}*

Выполнив подстановки аргументов, командная оболочка bash превратит эту команду в четыре:

ls /sbin/*user*

ls /sbin/*group*

ls /usr/sbin/*user*

ls /usr/sbin/*group*

Чтобы добавить пользователя, выполните команду

# useradd <имя> ; passwd <имя >

Для удаления учетной записи пользователя служит утилита userdel, а для модификации существующей учетной записи — утилита usermod. Все они снабжены man-страницами.

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

Для групп те же функции создания, удаления и модификации выполняют утилиты groupadd, groupdel и groupmod соответственно.

Если вам почему-либо неудобно управлять пользователями из командной строки, можно делать это с помощью графического конфигуратора. На рис. 7.1 показан пример работы system-config-users из дистрибутива Fedora Core 3.

Рис. 7.1. Добавление учетной записи

7.3.3. Квотирование

Что такое квотирование. Особенности квотирования в Linux

Квотирование — мощный механизм ограничения использования дискового пространства, применявшийся еще в самых ранних версиях UNIX, тогда как в состав ОС семейства Windows компания Microsoft включила их только в Windows 2000, естественно, гордо заявив об этом. Этот материал настолько объемен, что ему можно было бы смело посвятить целую главу.

При помощи квот системный администратор принуждает пользователя не расходовать неограниченный объем дискового пространства. Существует два типа ограничений: ограничение на количество файлов (inodes) и ограничение на размер дискового пространства в килобайтах (blocks). Если установлены оба ограничения, то они будут применяться одновременно.

Ограничения на inodes и на blocks могут быть установлены как для пользователя, так и для группы. Если вы входите в группу, которая превысила наложенное на нее ограничение, то вы не сможете использовать дисковое пространство, даже если вы не превысили квоту как пользователь.

Ограничения устанавливаются отдельно для каждого пользователя на каждой файловой системе. Ограничение определяется четырьмя числами:

1. Текущее значение ограничения;

2. «Мягкое» ограничение (softlimit);

3. «Жесткое» ограничение (hardlimit);

4. Период отсрочки: время, по истечении которого «мягкое» ограничение будет интерпретироваться как «жесткое».

«Мягкое» ограничение определяет число блоков, которые пользователь все еще может превысить, «жесткое» ограничение превысить невозможно. При попытке сделать это пользователь получит сообщение об ошибке. По истечении определенного времени (обычно 7 дней) «мягкое» ограничение переходит в «жесткое». За это время пользователь должен удалить ненужные ему файлы.

Ядро и поддержка квотирования

В ядро ОС Linux поддержка квотирования встроена (по некоторым сведениям, она появилась в ядре, начиная с версии 1.3.8), осталось убедиться, что она у вас включена. Если это не так, то ядро придется перекомпилировать.

После установки дистрибутива исходные тексты модулей ядра обычно находятся в каталоге /lib/modules/<версия_ядра>/build.

Примечание

Привыкайте к возможностям подстановки аргументов командной оболочкой bash: перейти в этот каталог можно командой

$ cd /lib/mod*/`uname -r`/build

Там лежит файл .config, хранящий текущие настройки ядра (имя файла начинается с точки, поэтому он считается скрытым: чтобы увидеть его по команде ls, пользуйтесь ключом ). Найдите в нем строку СОNFIG_QUOTA и убедитесь, что значение этого параметра равно «y». Далее обратите внимание на формат квот, строки CONFIG_QFMT_V<x>, где x = 1 или 2. Версия 1 — это старый формат, использовавшийся в ядрах до версии 2.6. Если ваш дистрибутив основан на ядре 2.4, должен быть включен старый формат. Он отличается именами файлов квот.

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

♦ make menuconfig: работает в консоли, предлагает текстовые меню и кнопки;

♦ make config: работает в консоли, задает вопросы;

♦ make xconfig: работает в графическом режиме при запущенной системе X Window;

♦ make gconfig: то же самое, только для оконной среды GNOME.

На рис. 7.2 показано окно конфигуратора ядра для оконной среды GNOME. Обратите внимание, что квоты поддерживаются только для файловых систем ext2, ext3 и ReiserFS.

Проверьте, установлены ли у вас утилиты квотирования, командой

# ls {/sbin,/usr/sbin,/usr/bin}/*quota*

Скачать пакет этих утилит можно из репозитория Сизиф, поддерживаемого командой разработчиков ALT Linux: http://alt.linux.kiev.ua/srpm/quota/get.

Рис. 7.2. Графический конфигуратор ядра, меню Filesystems

Назначение и активация квот

Теперь нужно определить, использование какой файловой системы вы хотите ограничить. Обычно это /home (домашние каталоги пользователей), /usr (пользователи имеют право записывать информацию в этот каталог) и, возможно, /var. Чтобы включить квотирование файловой системы, отредактируйте файл /etc/fstab, добавив ключ usrquota (и/или grpquota для групп) в поле, содержащее слово defaults

/dev/hda1 / ext2 defaults

/dev/hda4 /home ext3 defaults,usrquota=/путь/к/файлу/квот

/dev/hda5 /usr ext3 defaults,usrquota,grpquota

Если путь к файлу квот не указан, то используется файл в корневом каталоге квотируемой файловой системы. В версии 2 (ядро 2.6) он называется aquota.user (aquota.group для групп), в версии 1 — quota.user и quota.group.

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

Если программа quotacheck не находит файлов ограничений, то создает их.

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

# quotacheck -avug

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

Команда quota <имя> | <имя_группы> позволяет просмотреть ограничения дискового пространства, наложенные системным администратором на данного пользователя или группу, а команда repquota — сводку ограничений и фактически занятого дискового пространства для всех пользователей данной файловой системы (с ключом — всех файловых систем).

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

Рис. 7.3. Результат выполнения команды quotacheck -avug

Рис. 7.4. Результат выполнения команды repquota -um

Для задания ограничении предназначена команда edquota. Файлы ограничений при этом должны уже существовать. Создайте их и включите режим подсчета квот командами:

# quotacheck -u <точка_монтирования> # для групп нужно

                                     # выполнить то же

# quotaon -u <точка_монтирования>    # самое с ключом -g

Команда edquota -u <имя> создает временный текстовый файл, представляющий собой выдержку из двоичного файла квот, запускает ASCII- редактор, указанный в переменной окружения $EDITOR (по умолчанию это редактор vi), в котором вы можете отредактировать ограничения для данного пользователя, и записывает сохраненный текстовый файл обратно в файл квот.

Текущие показатели занятого дискового пространства приводятся только для справки, редактировать нужно только число, которое следует за словом hard или soft (рис. 7.5). Значение «0» указывает на отсутствие ограничений.

Рис. 7.5. Результат выполнения команды edquota -u den

Чтобы изменить период отсрочки, пользуйтесь ключом -t:

# edquota -t

Time units may be: days, hours, minutes, or seconds

Grace period before enforcing soft limits for users:

/dev/hda4: block grace period: 50 minutes,

file grace period: 50 minutes

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

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

# edquota -u <пользователь_который_станет_прототипом>

можно определить ограничения прототипа, а затем с помощью команды:

# edqouta -p <прототип> <пользователь>

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

Для активации/деактивации подсчета квот на файловой системе, для которой заказано квотирование, предназначены команды quotaon и quotaoff. Команду quotaon нужно включить в сценарий загрузки системы, как и команду quotacheck:

# Смонтированы все файловые системы из /etc/fstab

# Проверка и активация квот

echo "Checking quotas. This may take some time."

/usr/sbin/quotacheck -avug

echo " Done."

echo "Turning on quota."

/usr/sbin/quotaon -avugfi

7.4. Подключение и конфигурирование аппаратных устройств

7.4.1. Ядро и поддержка устройств

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

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

Раньше, в первых версиях ядра Linux, механизм работы с модулями не был предусмотрен, и ядра тех времен содержали в себе код драйверов для всех поддерживаемых устройств. Такое решение нельзя было назвать рациональным: невозможно предусмотреть, какие устройства будут установлены у конечного пользователя, даже если включить в состав ядра драйверы всех известных устройств. Кроме того, даже если нужное устройство (скажем, звуковая плата Yamaha) ядром распознается, то драйверы остальных устройств того же назначения будут впустую занимать оперативную память. Поэтому, начиная с версии 2.0, ядро Linux поддерживает модульную организацию и из дистрибутива, основанного на ядре 2.x, ставится в модульном виде.

При этом, кроме файла образа ядра /boot/vmlinuz-<версия_ядра>, ставится каталог с модулями /lib/modules/<версия_ядра> и файл образа загрузки /boot/initrd-<версия_ядра>. Образ загрузки содержит все модули, необходимые для того, чтобы ядро загрузило систему. Без этих модулей оно неспособно подключить системный раздел жесткого диска и прочитать файлы. Другие модули подключаются к ядру сценариями загрузки при старте системы.

Перед тем, как устанавливать новое оборудование, нужно убедиться, что ядро поддерживает ваше устройство. Если это не так, нужно пересобрать ядро, включив поддержку нового устройства. Можно со стопроцентной уверенностью сказать, что ваше ядро будет поддерживать вашу сетевую плату RTL8139 или любую другую, совместимую с NE2K PCI. А вот о поддержке USB-модема или принтера заранее ничего сказать нельзя: пользуйтесь диалоговым конфигуратором ядра (п.7.2.3.1) или загляните в базу поддерживаемого оборудования по адресу http://www.mandrakelinux.com/en/hardware.php3. Ничего, если у вас другой дистрибутив, например, основанный на Red Hat: основные устройства те же. Современное ядро версии 2.6 поддерживает очень много устройств, и проблемы могут возникнуть только со следующими их типами:

1. Win-модемы, то есть программные модемы, часть функций которых выполняет сама ОС Windows. Я не говорю, что под Linux они вообще не работают, но, потратив уйму времени, даже если вы и настроите этот модем, удовольствия от его работы вы не получите.

2. Win-принтеры — комментарии те же, что и для Win-модемов. Разработчики дешевых устройств, как правило, стараются сэкономить на драйверах для менее распространенных ОС.

3. Экзотические TV- и FM-тюнеры.

7.4.2. Утилиты для работы с модулями

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

Рис. 7.6. Связь модуля с ядром

Утилиты, обеспечивающие загрузку, выгрузку и просмотр загруженных модулей, собраны в пакет, который для ядер 2.4.x называется modutils, а для ядер 2.6.x — module-init-tools. Не смешивайте эти пакеты: одноименные утилиты из них конфликтуют друг с другом.

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

♦ lsmod — просмотр списка загруженных модулей;

♦ modinfo <имя_модуля> — получение информации о загруженном модуле;

♦ insmod <имя_модуля> — загрузка модуля;

♦ rmmod <имя_модуля> — выгрузка модуля;

♦ depmod — нахождение зависимостей между модулями;

♦ modprobe — загрузка модуля с аргументами и теми модулями, от которых он зависит.

Из сценария инициализации системы вызывается именно modprobe. Эта команда руководствуется конфигурационным файлом /etc/modprobe.conf, в котором могут быть записаны аргументы, передаваемые загружаемым модулям, определены псевдонимы модулей и указаны команды, которые нужно выполнить перед стандартной процедурой загрузки модуля или вместо нее. В дистрибутивах, основанных на ядре 2.4, этот файл называется /etc/modules.conf и имеет несколько более сложный синтаксис. В совсем старых версиях Linux (до дистрибутива Red Hat Linux 7.0) вместо этого файла использовался /etc/conf.modules.

7.4.3. Kudzu — утилита для автоматического определения устройств

В Linux для автоматического определения устройств используется специальная утилита kudzu, названная в честь китайской лианы — злостного сорняка. В дистрибутивы, основанные на Linux Mandrake, вместо нее может входить утилита harddrake. Задача этой утилиты состоит в том, чтобы определить, какие устройства установлены, и добавить в файл /etc/modprobe.conf (как бы он ни назывался в вашем дистрибутиве) команды загрузки модулей ядра с драйверами для этих устройств.

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

Напоминаю, что отключить автоматический запуск служб можно с помощью диалогового конфигуратора (см.п.7.1) system-config-services или drakxservices, в зависимости от дистрибутива.

Если нужно передать драйверу нового устройства дополнительные параметры, отредактируйте вручную файл /etc/modprobe.conf.

7.4.4. Настройка установленных устройств

Настройка устройства обычно выполняется с помощью диалогового конфигуратора устройств соответствующего типа. Например, для настройки принтера можно запустить system-config-printer в дистрибутивах Fedora, redhat-config-printer в дистрибутивах Red Hat, printerdrake в дистрибутиве Mandrake.

Если вы не знаете точного названия нужного конфигуратора, вам поможет функция автозаполнения командной строки (п.2.1.4.7): имена многих конфигураторов начинаются одинаково, с «system-config» («redhat-config») или «drak». Если подходящий конфигуратор таким способом не нашелся, командой which определите каталог, в котором находятся найденные конфигураторы, поройтесь в нем командой ls *conf* и man <утилита_похожая_на_нужную>.

И, наконец, пользуйтесь командой apropos с аргументом «conf», которая в числе прочего сообщит вам об установленных в вашей системе конфигураторах и конфигурационных файлах, для которых предусмотрена справка.

7.5. Установка программного обеспечения

В ОС Windows установка новых программ происходит просто: достаточно запустить setup.exe, ввести серийный номер, каталог для установки и нажать на кнопку «Далее». После этого вы можете поступить так. как рекомендует Microsoft: «откиньтесь на спинку стула и подождите, пока программа установки все сделает за вас».

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

7.5.1. Установка из исходных текстов

Бесплатное распространение исходных текстов программ — именно то, что делает Linux уникальной операционной системой и составляет одно из Величайших Достижений Человечества. Поэтому традиционный способ распространения приложений под Linux — это архивы исходных текстов (в просторечии — тарболлы).

Обычно имя файла, содержащего такой архив, имеет двойное расширение; например, tar.gz или tar.bz2. Это означает, что данный файл получился в результате работы сначала архиватора tar (Таре Archive, по первоначальному назначению — работе с ленточными накопителями), а потом компрессора gzip или bzip2. Чтобы распаковать архив, нужно применить сначала декомпрессор gunzip или bunzip2, после чего разархивировать его командой tar.

Иногда расширение только одно: tgz. В этом случае нужно запускать разархиватор tar с ключом, указывающим ему на необходимость применить фильтр-декомпрессор gunzip.

Формат команды tar:

tar [ключи] [файл_архива] [архивируемые файлы и/или каталоги]

Подробные сведения о ключах команды tar ищите на man-странице, я перечислю только самые употребительные:

♦ с (create) — создать архив;

♦ x (eXtract) — извлечь файлы из архива;

♦ t (lisT) — показать содержимое архива;

♦ v (verbose) — выводить на консоль подробный отчет о своей работе;

♦ f — работать с файлом, а не ленточным накопителем;

♦ z — применить фильтр-компрессор при создании архива или декомпрессор при распаковке.

Архивный файл обычно содержит дерево каталогов, которое после распаковки будет создано в вашем текущем каталоге, или, по случайной небрежности создателя архива, — несколько деревьев и файлов россыпью: в этом случае каталог для распаковки вам нужно создать вручную. Таким образом, первый шаг при установке из исходных текстов пакета program3.14.tar.bz2 — распаковка — выглядит так:

$ bunzip2 program3.14.tar.bz2

$ tar tvf program3.14.tar # проверьте, есть ли объемлющий каталог

$ ^tv^xv # оболочка bash превратит это в команду tar xvf program3.14.tar

Следующий шаг — собственно установка. Перейдите в распакованный каталог (обычно он называется < имя_пакета-версия > ) и прочитайте все README-подобные файлы, которые там найдете. Обычная процедура установки состоит из трех этапов:

1. $ ./configure # помните, что текущего каталога в $РАТН нет?

Сценарий configure, приложенный к архиву, опрашивает компоненты вашей системы с целью определить, сможет ли устанавливаемый пакет собраться и заработать именно у вас и что в нем для этого надо «подкрутить». При успешном завершении он создает файл Makefile — основной документ для сборочной утилиты make, содержащий инструкции и необходимые параметры (пути к заголовочным файлам, библиотекам и т.п.) для компиляции и сборки программ пакета.

2. $ make

Собственно компиляция и сборка.

3. $ make install

Установка собранных программ пакета, конфигурационных файлов и справочных страниц в каталога, указанные в Makefile. Обычно исполняемые файлы помещаются в каталог /usr/bin, а man-страницы — в /usr/man, но после этапа конфигурирования ничто не мешает отредактировать Makefile вручную.

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

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

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

7.5.2. Установка из бинарных пакетов

Как это делается и что для этого нужно

Как ни гибок способ установки приложений из исходных текстов, позволяющий установить программу, созданную для другого дистрибутива, и настроить ее под конкретную системную среду, вчерашние пользователи Windows тоскуют по простоте setup.exe. Хорошим компромиссом считается распространение приложений в виде заранее собранных на определенной платформе бинарных пакетов.

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

В мире Linux известны два формата бинарных пакетов: RPM от компании Red Hat, используемый не только в клонах Red Hat, но и в других популярных дистрибутивах: Mandrake, SuSE, ASPLinux, ALTLinux, Black Cat, и DEB, разработанный для Debian Linux и применяемый в его потомках: Knoppix, Corel Linux, Lindows. Пакеты дистрибутива Slackware — это просто сжатые архивы .tgz, не поддерживающие зависимостей. От архивов исходных текстов они отличаются только тем, что в них находятся заранее скомпилированные программы.

Набор утилит для установки, конфигурирования, удаления и ведения базы пакетов определенного формата называется системой управления пакетами. Наиболее распространены системы:

♦ RPM — менеджер пакетов формата RPM;

♦ DPKG — система управления пакетами DEB;

♦ APT — менеджер пакетов, поддерживающий автоматическое разрешение зависимостей, разработанный для Debian и заимствованный RPM-дистрибутивами.

На сегодняшний день самым распространенным в бывшем СССР средством управления пакетами является RPM, на котором я остановлюсь подробнее.

Менеджер пакетов RPM

Первоначально название программы RPM расшифровывалось как Red Hat Package Manager, но в соответствии с соглашением GNU о рекурсивном именовании (GNU's Not Unix) сейчас оно читается как RPM Package Manager. Это открытая пакетная система, позволяющая создавать пакеты из исходного и двоичного кода, так что двоичные файлы легко установить и сопровождать, а исходный код легко собрать. Система также поддерживает базу данных обо всех установленных пакетах и входящих в них файлах.

Пакеты формата RPM — это файлы с расширением .rpm. В имени файла обычно присутствуют название и версия приложения, выпуск пакета и платформа, для которой он собран. Например, для пакета software-3.0-2.i386.rpm: 3.0 — это версия программы software, 2 — выпуск пакета, i386 — платформа Intel 386. Обратите внимание на разницу между версией программы и выпуском пакета: номер версии назначается автором программы и характеризует ее саму, а номер выпуска — сборщиком пакета и характеризует этот пакет. В некоторых случаях, даже если программное обеспечение не изменилось, бывает необходимо его переупаковать.

Самыми «универсальными» пакетами являются пакеты, рассчитанные на архитектуру Intel 386. Собранная таким образом программа должна работать на любом процессоре Intel, начиная с 80386DX (или совместимого с ним). А вот если у вас процессор 80486, пакет, рассчитанный для работы с архитектурой 80586 (Pentium), скорее всего, не установится в вашей системе. Обычно для процессоров архитектуры CISC (с набором команд x86) используются следующие обозначения:

♦ i386 — Intel 80386DX;

♦ i586 — Intel Pentium (MMX), AMD K5 (K6);

♦ i686 — Intel PPro, Celeron, PII, PIII, PIV.

Узнать о своем процессоре можно по команде uname -а.

В простейшем случае команда установки пакета выглядит так:

$ rpm -i <пакет>.rpm

Установку можно производить не только с локального диска, но и по протоколу FTP:

$ rpm -i ftp://somehost.domain/pub/package.rpm

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

Для удаления пакета используется команда:

$ rpm -е <пакет>

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

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

Для пропуска проверки зависимостей нужно использовать ключ --nodeps. Например, у вас установлен агент отправки почты (MTA — Mail Transfer Agent) postfix, а вы хотите установить программу того же назначения sendmail, которая с ним конфликтует. Просто так удалить пакет postfix вы не сможете, потому что он нужен многим почтовым клиентам. Удаляйте его командой:

$ rpm -е --nodeps postfix

После такого удаления нормальная работа других программ, использующих MTA, невозможна, поэтому вам сразу же нужно установить программу sendmail или другой агент MTA.

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

$ rpm -Uhv <пакет>

Просмотреть все установленные пакеты можно с помощью команды:

$ rpm -qa | less

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

$ rpm -qa | grep <пакет>

Просмотреть общую информацию о пакете можно с помощью команды:

$ rpm -qi <пакет>

а информацию о файлах, которые установит этот пакет:

$ rpm -ql <пакет>

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

$ rpm -qf <файл>

Графические менеджеры пакетов

Менеджер пакетов rpm является мощным средством для произведения операций над пакетами — создание, установка, обновление, удаление. Однако интерфейс командной строки нравится далеко не всякому начинающему администратору.

Существуют и графические (под X Window) реализации менеджера пакетов — например, для оконной среды KDE разработан kpackage, для GNOME — gnorpm, аналогичный по своим функциям. Какую из этих программ использовать — дело вкуса и привычки (я вообще обхожусь одним rpm).

Скажу несколько слов о программе kpackage (рис. 7.7).

Рис. 7.7. Просмотр установленных пакетов

В функции программы kpackage входит:

1. Установка и удаление пакетов;

2. Получение сведений о пакете;

3. Проверка зависимостей пакета;

4. Поиск файлов и пакетов в базе RPM.

Вы можете установить пакет со своего жесткого диска, с инсталляционного компакт-диска или по протоколу FTP. Для установки пакета выберите в меню команду File→Open и введите путь (или URL) к каталогу с пакетами. Открывать подкаталоги можно и в окне выбора пакетов (рис. 7.8). Выбрав пакет, нажмите OK и в появившемся окне установки (рис. 7.9) закажите режим установки. Поставьте флажок Test, если вы хотите только проверить зависимости пакета, не устанавливая его.

Рис. 7.8. Выбор пакета для установки


Рис. 7.9. Проверка зависимостей пакета

Для поиска установленных пакетов и входящих в них файлов служат команды File→Find Package и File→Find File.

Apt: Debian-совместимый менеджер пакетов

Система управления пакетами программного обеспечения APT была разработана для Debian Linux, но впоследствии заимствована многими Red Hat-совместимыми дистрибутивами. В сам Red Hat и его потомки (Fedora Core) эта система не включена, но включена, например, в состав ALT Linux, и ее можно скачать из репозитория Сизиф http://sisyphus.ru/srpm/apt/get.

Для управления пакетами используется программа apt-get. Формат ее вызова:

$ apt-get [ключи] [команды] [пакеты]

Самые полезные команды перечислены в таблице 7.4.


Команды программы apt Таблица 7.4

Команда Назначение
update Используется для синхронизации файлов описаний пакетов с их источником, который указан в файле /еtс/аpt/sources.list
upgrade Используется для обновления установленного пакета до новейшей версии, доступной в источнике. Может также использоваться для обновления всех установленных в системе пакетов. Новые пакеты при этом не устанавливаются. Перед этой командой обязательна должна быть выполнена команда update
dist-upgrade Более «интеллектуальная» версия команды upgrade. Кроме установки новых версий пакетов, она также проверит изменившиеся зависимости между новыми версиями пакетов и попытается разрешить конфликты в пользу более важных пакетов
install Установка пакета. Если источник, из которого вы собираетесь устанавливать этот пакет, перечислен в файле источников, то в качестве имени пакета нужно указывать только имя упакованной программы
remove Удаление пакетов
check Используется для диагностики нарушенных зависимостей между пакетами
clean Очищает локальное хранилище полученных файлов пакетов. Перед установкой пакеты копируются из источника в локальное хранилище, а оттуда потом устанавливаются. Пользуйтесь этой командой время от времени для освобождения места на диске

В отличие от системы rpm, которая только докладывала о неразрешенных зависимостях, предоставляя вам справляться с ними самому, программа apt-get пытается разрешить зависимости самостоятельно. Для этого она пользуется файлом /etc/apt/sources.list, в котором перечислены источники пакетов (каталоги и FTP-архивы), к которым она обращается за необходимыми пакетами. Раскомментируйте в нем нужные строки и добавьте свои.

При установке группы пакетов с помощью apt-get будьте внимательны. Обычно для установки группы пакетов используются символы шаблона «?» и «*». Если нет пакетов, имена которых совпадают с указанным шаблоном, то этот шаблон будет рассматриваться как выражение POSIX. В этом случае, если вы указали шаблон а*, то будут установлены ВСЕ пакеты, имена которых содержат букву «а», а не только те, которые начинаются на эту букву. Это же касается и команды remove.

Из ключей apt-get полезными для вас будут -f и -d. Ключ -f требует попытаться исправить нарушенные зависимости, а при указании ключа -d пакеты только скачиваются из источника, но не устанавливаются. Ключ --no-upgrade, указанный при установке группы пакетов, запрещает обновлять те из них, что уже установлены. Еще одна полезная, но опасная возможность — ключ --force-yes, принуждающий программу не задавать вопросов, выполняя потенциально разрушительные действия. Иногда она действительно необходима.

Для установки пакета не по сети, а с дистрибутивного компакт-диска предназначена команда apt-cdrom.

7.5.3. Установка из пакетов, содержащих исходный код

Иногда в пакетах RPM находятся не откомпилированные версии программ, а их исходный код. Признаком этого является слово «src» вместо названия архитектуры. Для установки такого пакета введите:

$ rpm -iv <пакет>.src.rpm

Менеджер пакетов распакует исходные тексты в каталог Red Hat: по умолчанию это /usr/src/redhat, но вы можете установить другой каталог директивой topdir в конфигурационном файле /etc/rpmrc. В подкаталог SOURCES будут распакованы исходные тексты и заплатки (патчи) к ним, в подкаталог SPECS — spec-файлы, содержащие инструкции по прикладыванию заплаток и последующей сборке. Чтобы собрать программу, выполните команды:

$ cd /usr/src/redhat/SPECS

$ rpm -bp <пакет>.spec

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

Такой список в стандартном виде генерирует утилита diff с ключами -uNr. Чтобы его приложить, нужно перейти в корневой каталог дерева исходного кода пакета и выполнить команду

$ patch -р0 < <файл_заплатка>

# < - это знак перенаправления ввода

Ключ -p указывает, сколько отделенных «/» частей нужно отщипнуть от путей к файлам, подлежащим исправлению (вдруг каталог пакета у автора заплатки назывался иначе?).

Приложив заплатку, выполните обычные команды сборки:

$ ./configure

$ make

$ make install

7.6. Клонирование и восстановление системы

Клонирование — это создание точной (побитной) копии исходного носителя. Носителем в нашем случае будет корневая файловая система Linux. Клонированная копия называется образом.

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

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

/dev/hda1 on / type ext3 (rw,noatime)

none on /proc type proc (rw)

none on /sys type sysfs (rw)

Корневая файловая система расположена на разделе /dev/hda1. Образ именно этого раздела мы будем сохранять на другом носителе. Носителем может быть другой жесткий диск — я буду использовать внешний USB-винчестер. Для его подключения должен быть загружен модуль usb_storage. Создадим каталог /mnt/image и примонтируем к нему USB-винчестер:

# modprobe usb_storage

# mkdir /mnt/image

# mount /dev/sda1 /mnt/image

Все, что осталось сделать, — это перемонтировать корневую файловую систему в режиме «только чтение» и создать образ:

# sync

# mount -о remount.ro /

# dd if=/dev/hda1 of=/mnt/image/image.bin

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

Теперь рассмотрим, как можно восстановить систему. Для восстановления системы вам понадобится загрузочный компакт-диск Linux, Подойдет первый диск любого дистрибутива, даже несовместимого с вашим. Если вы используете не LiveCD, а простой загрузочный диск, для перехода на текстовую консоль нажмите Ctrl+Alt+F2. Подмонтируем наш внешний винчестер:

# mkdir /image

# modprobe usb_storage

# mount /dev/sda1 /image

Теперь на новом винчестере нужно создать разделы. Это можно сделать с помощью утилиты fdisk или с помощью программы установки — как вам удобнее. Если же вы восстанавливаете систему после сбоя, ничего создавать не нужно — все уже создано. Не забудьте только создать раздел подкачки (тип раздела /dev/hda2 должен быть Linux swap):

# mkswap /dev/hda2

Теперь развернем образ (обратите внимание на параметры if и of программы dd — на этот раз их аргументы поменялись местами):

# dd if=/image/image.bin of=/dev/hda1

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

# mkdir /install

# mount /dev/hda1 /install

# chroot /install /bin/bash

Теперь корнем стал каталог /install, к которому примонтирован новый винчестер, а в качестве командной оболочки используется /bin/bash. Все, что нам осталось сделать — это перезаписать загрузчик. Если у вас LILO, введите команду:

# lilо

А если GRUB:

# grub-install /dev/hda

Теперь перезагрузите компьютер (reboot) — ваша система успешно восстановлена после клонирования.

Глава 8 Язык командного интерпретатора

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

#!/абсолютный/путь/к/программе/интерпретатору/сценария

и передает сценарий ей на обработку. Как правило, эта программа — либо одна из установленных в системе оболочек (например, #!/bin/tcsh), либо один из интерпретирующих языков (#!/usr/bin/perl), либо ваш собственный интерпретатор: #!/usr/bin/my_program. Если сценарий предназначен для обработки оболочкой sh, то ее имя указывать необязательно. Между символами # и ! не должно быть пробелов.

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

$ /программа/обработчик -f <имя_файла>

Эта глава посвящена языку программирования, встроенному в оболочку bash.

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

8.1. Параметры

Вместо переменных, как и обычных языках программирования, в bash используется понятие параметра. Именем параметра может быть: слово, состоящее из латинских букв, цифр и знаков подчеркивания, начинающееся с буквы; число; один из специальных символов; *, #, ?, $, !, 0, _.

Тип всех параметров — строковый. Если параметру присвоено значение (хотя бы пустая строка), то говорят, что он задан или установлен. Чтобы сослаться на значение параметра, нужно поставить символ $ перед его именем:

$ echo $0

bash

Параметры делятся на:

♦ переменные оболочки — о них рассказано в п. 3.4.3;

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

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


Специальные переменные Таблица 8.1

Название Подстановка
$0 Имя выполняемого сценария (или, в интерактивном режиме, — самой оболочки)
$# Количество позиционных параметров, переданных сценарию
$_ Последний аргумент предыдущей из выполнявшихся команд
$? Код завершения последней выполненной команды (напоминаю, что значение 0 говорит об успешном завершении, другое — об ошибочном)
$$ Номер текущего процесса (PID)
$! Номер (PID) последнего асинхронного процесса (команды, выполненной в фоновом режиме)
$* Все позиционные параметры, слитые в одну строку: «$*» эквивалентно «$1x$2x…,$n», где x — первый символ значения переменной IFS (internal field separator), по умолчанию — пробел
$@ Все позиционные параметры, подлежащие дальнейшему разбору: «$@» эквивалентно «$1» «$2» ... «$n»

Напоминаю, что специальные символы в значениях параметров нужно экранировать. Экранировать одиночный символ можно символом «\» (обратный слэш), несколько — апострофами или двойными кавычками. Разница в том, что внутри двойных кавычек выполняются подстановки значений: сравните вывод команд echo '$0' и echo "$0".

Организовать диалоговый ввод значения переменной можно с помощью встроенной команды read:

echo -n "Продолжать? (y/n): "

read yesno

echo $yesno

Ключ -n команды echo не выводит символ новой строки в конце сообщения, то есть не переводит строку. Команда read читает значение, введённое пользователем с клавиатуры, и записывает его в переменную yesno. Последняя команда выводит только что введенное значение.

Одной командой read можно прочитать несколько переменных:

read name middle lastname

Пользователь должен ввести значения переменных, разделяя их пробелами, и для окончания ввода нажать <Ввод>. Если введено меньше значений, чем нужно, оставшимся переменным будет присвоена пустая строка. Если больше, то весь остаток строки будет присвоен последней из перечисленных переменных.

8.2. Подстановки

Кроме подстановки обычных переменных (п.3.4.4) и раскрытия шаблонов имен файлов (п.3.4.5), оболочка bash умеет выполнять еще и такие подстановки:

♦ Подстановка тильды:

~ заменяется на имя домашнего каталога пользователя, запустившего сценарий;

~+ заменяется на путь к текущему каталогу;

~- заменяется на путь к предыдущему каталогу.

♦ Раскрытие скобок:

строка1{строка2,строка3...}строкаN заменяется на: строка1строка2строкаN строка1строка3строкаN ...

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

$ cat /home/den/linuxbook/{intro,param,subst} > glava8

♦ Подстановка арифметических выражений:

$((выражение)) или $[выражение] — эквивалентные формы записи. Внутри выражения выполняются подстановки параметров. Приоритет арифметических операций — обычный, подробнее см. man bash, секция ARITHMETIC EVALUATION.

Например, количество часов, прошедшее с момента запуски оболочки, можно подсчитать командой:

$ echo $(( $SECONDS/3600 ))

8.3. Массивы

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

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

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

$ weekday[0]=Понедельник

$ weekday[4]=Пятница

Обратиться к значению элемента массива можно следующим образом:

${имя_массива[индекс]}

Например, вывести значение первого элемента массива можно так:

$ echo ${weekday[0]}

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

${имя_массива[*]} или ${имя_массива[@]}, например:

$echo ${weekday[*]}

Понедельник Пятница

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

Можно инициализировать массив целиком: команда

$ weekday=(Пн Вт Ср Чт Пт Сб Вс)

эквивалентна списку

$ weekday[0]=Пн; weekday[1] =Вт; ... weekday[6] =Вс

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

$ holidays= ([0]=Sunday [6]=Saturday)

8.4. Управляющие структуры

Напоминаю (п.3.4.7), что список команд — это одиночная команда, конвейер или последовательность команд/конвейеров, разделенных одним из операторов: ; && ||, завершенная точкой с запятой. Не забывайте ставить точку с запятой даже после одиночной команды, терять ее — типичная ошибка начинающих программистов.

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

8.4.1. Условные операторы

Оператор варианта case

Синтаксис:

case значение in

 [шаблон1) список1;;

 шаблон2 | шаблон3) список2;; ]

esac

Ищется первый шаблон, совпадающий со значением. Если он найден, то выполняется соответствующий ему список команд, завершенный двумя символами «;». Шаблон и список разделяются символом «)». Одному списку команд может соответствовать несколько шаблонов, тогда они разделяются символом «|».

В шаблонах могут использоваться метасимволы *, ? и [] (о подстановке метасимволов сказано в п.3.4.5). С их помощью можно организовать инструкцию, действующую как default в операторе switch языка С.

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

Листинг 8.1. Пример использования оператора case

echo "Ошибка. Кому переслать протокол?"

echo "Начальнику: b"

echo "Коллегам: с"

echo "Сам разберусь: any key"

read answer

case $answer in

b|B) mail -s "error log" boss < error.log;;

c|C) mail -s 'Help!!! error log' -c ivan den < error.log;;

*) echo "OK. Exiting";

 exit;;

esac

Обратите внимание на апострофы вместо кавычек во втором списке: они экранируют подстроку «!!» от подстановки предыдущей команды.

Условный оператор if

Синтаксис:

if список1 then

 список2

[elif список3 then

 список4]

[else

 список5]

fi

Эта конструкция работает так же, как в других языках программирования. Сначала выполняются команды из списка1. Если этот список выполнен успешно, то есть с кодом завершения 0, то выполняется список2, если нет — то список, стоящий после очередного elif. При невозможности выполнить список команд, стоящий после очередного then, выполняется список, стоящий после else.

Можно использовать сокращенный вариант, только if-then-fi:

$ if [ $? -ne 0 ]; then echo "Ошибка. Смотри протокол"; fi;

Оператор test и условные выражения

В вышеприведенной команде вместо анализа кода завершения списка использована проверка условия. Две формы такой проверки эквивалентны: встроенная команда test и [условие]. Например, для проверки существования файла можно написать

test -e <файл>

или

[ -е <файл> ]

Если вместо слова test используются квадратные скобки, они обязательно должны быть отделены от аргументов пробелом, потому что на самом деле «[» — это название команды, а «]» — обязательный последний аргумент этой команды.

В случае истинности условия команда test возвращает код успешного завершения, то есть 0; в случае ложности — код ошибки 1 (не спутайте с обычными языками программирования, где 1 — другое имя для true!).

Команда test может проверять и строку на пустоту: непустая строка считается выполнением условия и приводит к коду завершения 0. Пример:

$ test $USER; echo $?

0

$ test $VAR_not_set_yet; echo $?

1

Условные выражения можно комбинировать с помощью обычных логических операций:

♦ !(выражение) — отрицание;

♦ выражение1 -а выражение2 — логическое И (and);

♦ выражение1 -о выражение2 — логическое ИЛИ (or).

Элементарные условные выражения перечислены в таблицах 8.2 и 8.3. Полный список их можно получить по команде help test.


Основные условные выражения для файлов Таблица 8.2

Выражение Истинно, если
-d файл файл существует и является каталогом
-е файл файл существует
-f файл файл существует и является обычным файлом
-L файл файл существует и является символической ссылкой
-r файл файл существует и доступен для чтения
-w файл файл существует и доступен для записи
-x файл файл существует и является исполняемым
-s файл файл существует и его размер больше 0
-N файл файл существует и изменился со времени последнего чтения
файл1 -nt файл2 время модификации файла1 позже (newer than), чем файла2
файл1 -ot файл2 время модификации файла1 раньше (older than), чем файла2
файл1 -ef файл2 файл1 — это жесткая ссылка на файл2

Элементарные условные выражение для сравнения строк Таблица 8.3

Выражение Истинно, если
-z строка длина строки равна 0
-n строка длина строки не равна 0
стр1 == стр2 строки совпадают
стр1 !== стр2 строки не совпадают
стр1 < стр2 строка1 предшествует строке2 в лексикографическом порядке. Алфавит соответствует текущей локали
стр1 > стр2 строка1 следует за строкой2 в лексикографическом порядке

Арифметическое условное выражение имеет формат arg1 OP arg2, где arg1 и arg2 — целые числа, a OP — одна из операций:

♦ -eq — равно;

♦ -ne — не равно;

♦ -lt — меньше;

♦ -le — меньше или равно;

♦ -gt — больше;

♦ -ge — больше или равно.

Таким образом, можно переписать предыдущий пример с использованием оператора if:

Листинг 8.2. Пример использования оператора if

echo "Ошибка. Кому переслать протокол?"

echo "Начальнику: b"

echo "Коллегам: c"

echo "Сам разберусь; any key"

read answer

if [ "$answer" == "b" -o "$answer" == "B" ]; then

 mail -s "error log" boss < error.log;

elif [ "$answer" == "с" -о "$answer" == "C" ]; then

 mail -s 'Help!!! error log' -c ivan den < error.log;

else

 echo "OK. Exiting"; exit;

fi

8.4.2. Операторы цикла

Командные интерпретаторы bash и ksh поддерживают циклы типа for, while, until и select, а интерпретатор sh — только циклы for и while.

Оператор цикла с перечислением for

Синтаксис:

for переменная [in шаблон]

do

 список

done

В результате подстановки шаблона получается список слов. Переменная получает значение первого слова из этого списка, и выполняется список команд, стоящий между do и done. Затем переменная получает значение очередного слова из списка слов, и снова выполняется список команд. Повторение прекращается по исчерпании слов в списке. Отсутствие конструкции [in шаблон] эквивалентно записи in $@.

Список слов можно сформировать и вручную:

$ for day in Mon Tue Wed Thu Fri; do echo "План работы на $day:"; cat $day.plan; done

Еще раз напомню, что любой список в bash нужно заканчивать точкой с запятой.

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

$ cd /путь/к/каталогу/include

$ for name in *; do ln -s $name $name.h; done

Оператор цикла с условием while

Синтаксис:

while список1

do

 список2

done

Оператор выполняет список1 и в случае его успешного завершения (нулевого кода возврата) — список2. Процедура повторяется до тех пор, пока результат выполнения списка1 не станет ненулевым. Например:

$ i = 10

$ while [ $i -gt 0 ]; do

> echo $i...

> i=${($i-1))

> done; echo 'BANG!!!'

$

Примечание

Тот же самый обратный отсчет можно реализовать и с помощью цикла for, если у вас установлена утилита seq, печатающая последовательность (sequence) чисел с заданным шагом:

$ for i in `seq 10 -1 0`; do echo $i...; done; echo 'BANG!!!'

Оператор цикла с инверсным условием until

Синтаксис:

until список1

do

 список2

done

Оператор выполняет список1 и, если он выполнен неуспешно (код возврата ненулевой), то выполняет список2. Процедура повторяется до тех пор, пока результат выполнения списка1 не станет нулевым.

Оператор цикла с выбором select

Синтаксис:

select переменная [in шаблон]

do

 список

done

В результате подстановки шаблона получается список слов. К этим словам оператор добавляет порядковые номера и выводит весь набор в стандартный поток ошибок (stderr). Если шаблон опущен, то вместо него используется список позиционных параметров. После этого оболочка выводит приглашение и считывает строку из стандартного потока ввода (stdin). Если строка содержит номер, соответствующий какому-либо слову из списка, то переменная получает это слово в качестве значения. Если в строке подходящего номера нет, то значением переменной становится пустая строка. После этого выполняется список команд, и процедура повторяется до тех пор, пока в строке ввода не встретится символ конца файла (введите Ctrl+D) или пока в списке команд не встретится команда break или return.

Этот оператор полезен для создания нумерованных пунктов меню. Например, у меня в каталоге ~/temp есть три файла: proto.txt, file.txt и README. В листинге 8.3. приведен фрагмент сценария, позволяющего быстро просмотреть любой из них.

Листинг 8.3. Пример использования оператора select

echo "Выберите файл для просмотра:"

select file in ~/temp/* Quit;

do

 if [ -f $file ]; then cat $file;

 else break;

 fi

done

Запустив этот сценарий, я увижу на экране:

Выберите файл для просмотра:

1) /home/den/temp/file.txt

2) /home/den/temp/proto.txt

3) /home/den/temp/README

4) Quit

#?

Последняя строка — это приглашение, устанавливаемое переменной окружения PS3.

8.5. Условная подстановка параметров

Условная подстановка позволяет проверить, установлен ли определенный параметр, или использовать вместо его значения другое. Значение самого параметра при этом не изменяется. Допустимые виды условных подстановок перечислены в таблице 8.4.


Условная подстановка Таблица 8.4

Конструкция Выполняет подстановку
${параметр:-строка} Значение по умолчанию. Если параметр имеет непустое значение, то подставляется оно, иначе — указанная строка
${параметр:=строка} Присваивание значения по умолчанию. Если параметр не имеет непустого значений, то ему присваивается «строка», после чего значение подставляется. Конструкция допустима только для переменных оболочки
${параметр:?сообщение} Ошибка, если пусто. Если параметр не имеет непустого значения, то выводится указанное сообщение. Сообщение можно опустить, тогда будет выведено стандартное сообщение
${параметр:+строка} Дополнительное значение. Если параметр имеет непустое значение, подставляется «строка», иначе — пустая строка
${параметр#шаблон} Подставляется значение параметра, в котором из головной части удален наименьший фрагмент, удовлетворяющий шаблону
${параметр##шаблон} Подставляется значение параметра, в котором из головной части удален наибольший фрагмент, удовлетворяющий шаблону
${параметр%шаблон} Подставляется значение параметра, в котором из хвостовой части удален наименьший фрагмент, удовлетворяющий шаблону
${параметр%%шаблон} Подставляется значение параметра, в котором из хвостовой части удален наибольший фрагмент, удовлетворяющий шаблону
${#параметр} Если параметр есть * или @, подставляется количество позиционных параметров, иначе — длина значения параметра в байтах

Например, команда echo ${0:+"Моя любимая оболочка"} заменит непустое значение параметра $0, равное «bash», на указанное дополнительное значение. Команда ${1:?"Не хватает параметра"} выведет сообщение, если сценарий, в котором она встречается, будет случайно запущен без аргументов. Правильным подходом к написанию сценариев было бы выводить не такое малоинформативное сообщение, а краткую справку об использовании этого сценария, подобную тому, что можно увидеть, запустив почти любую команду с ключом -usage.

Подстановки # и % полезны, например, тогда, когда нужно «выкусить» из полного пути к файлу собственно его имя или, наоборот, родительский каталог:

$ path=`which twm`; echo $path

/usr/X11R6/bin/twm

$ echo ${path##*/}

twm

$ echo ${path%/*}

/usr/X11R6/bin

$

8.6. Функции

Оператор определения функции имеет следующий синтаксис:

[function] имя() {

 список

}

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

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

Ошибка при выполнении функции приводит к немедленному ее завершению с ненулевым кодом возврата. Если вы хотите передать в коде возврата собственное значение, пользуйтесь оператором return <число>. Отсутствие числа или всего оператора return означает возврат нулевого значения. Код возврата функции помещается в переменную $? и доступен до выполнения следующей команды.

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

8.7. Обработка сигналов и протоколирование

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

Перехватить сигнал можно с помощью встроенной команды trap. Формат ее следующий:

trap [-lp] [команда сигнал сигнал...]

Ключ -l выводит список имен и номеров сигналов, известных в ОС Linux. Ключ -p выводит список команд, связанных с каждым сигналом. Сигналы указываются по номерам или именам, приставку SIG можно опускать.

Команда — это та команда, которая будет выполнена оболочкой при получении сигнала (ваш собственный обработчик). Если вместо нее указать пустую строку, то перечисленные сигналы будут проигнорированы. Если вместо сигналов указать EXIT или 0 (фиктивный номер), то команда будет выполнена при завершении сеанса работы с оболочкой.

Чаще всего перехватываются сигналы:

01 SIGHUP hangup, освобождение линии связи;

02 SIGINT interrupt, прерывание;

03 SIGQUIT quit, выход;

15 SIGTERM terminate, программный сигнал завершения.

Чтобы игнорировать все эти сигналы, введите команду:

$ trap "" 1 2 3 15

Протоколировать работу собственного сценария можно двумя способами.

Первый состоит в использовании команды-фильтра tee (п.3.4.6). Название этой команды происходит от английского названия буквы T, и действие ее похоже на эту букву: она копирует данные из своего стандартного потока ввода и раздваивает их на стандартный поток вывода и поток в указанный файл:

$ LOGFILE=my_log

$ if [ "$LOGGING" == "true" ]; then

> my_script | tee $LOGFILE; else

> my_script;

> fi

$

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

exec $0

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

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

$ tty

/dev/pts/2

$ echo "Вывожу строку на терминал"

Вывожу строку на терминал

$ exec > log

$ echo "Вывожу строку в файл"

$ echo "И эту в файл"

$ exec > /dev/pts/2

$ echo "А эту снова на терминал "

А эту снова на терминал

$

Второй способ заключается в использовании команды script, которая копирует в файл весь сеанс работы в текстовой консоли: ввод пользователя и вывод команд. Это должен быть в полном смысле слова сеанс работы в командной строке: полноэкранные команды, такие, как редактор vi и даже man, оставляют в файле протокола мусор. Если вы запускаете команду script вручную, то остановить протоколирование можно командой exit.

$ LOGFILE=my_log

$ if [ "$LOGGING" == "true" ]; then

> script my_script $LOGFILE; else

> my_script;

> fi

$

Вызов сценария изнутри него самого должен выглядеть так:

exec script $0 $LOGFILE

Начать знакомство с чужими сценариями вы можете с инициализационных файлов bash /etc/bashrc и /etc/profile. Команда «.» (точка) в оболочке sh и ее производных (bash, ksh), подобно команде source, означает чтение и выполнение команд из файла-аргумента этой команды в текущем процессе.

Глава 9 Управление процессами

9.1. Как загружается Linux

9.1.1. Начальная загрузка: LILO и GRUB

Общие механизмы

Как известно, первая программа, которая выполняется после включения компьютера, — это BIOS. Она находит загрузочное устройство, считывает в память его первый (нулевой) сектор и передает на него управление. В этом секторе находится MBR (Master Boot Record) — главная загрузочная запись размером в 512 байт, в которой помещаются:

♦ первичный загрузчик;

♦ таблица разделов диска (Partition Table) размером в 64 байта, описывающая четыре первичных раздела: номера их первого и последнего цилиндров, тип файловой системы и признак активности раздела;

♦ «волшебное число» (0xAA55), предназначенное для проверки, служит ли данный сектор загрузочным.

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

В ОС Windows 9x первичный загрузчик передает управление на Boot Record — первый сектор того первичного раздела, который отмечен как активный (bootable — такой может быть только один). В более сложных системах из MBR запускается диспетчер загрузки (NTLoader для Windows NT, LILO и GRUB — для Linux), позволяющий выбрать вариант загрузки и даже загружаемую ОС. Такую гибкость диспетчеру обеспечивает возможность не ограничиваться тем объемом данных, который помещается в MBR, а читать необходимые данные из файлов на диске. Достигается эта гибкость ценой зависимости от файловой системы: существуют файловые системы (например, XFS и ReiserFS с включенным режимом оптимизации дискового пространства), с которыми ОС Linux может работать, но загружаться с них не может. Отдельный раздел /boot, о котором говорилось в п.1.2.2 в связи с «барьером 1024 цилиндра», необходим еще и поэтому: на нем должна быть создана файловая система ext2fs или ext3fs, а для всех остальных разделов файловые системы можно выбирать произвольно.

Загрузчик LILO

Стандартный загрузчик Linux — LILO (LInux LOader) — состоит из двух частей: первичного загрузчика LI и вторичного LO. LI располагается в MBR и только и умеет, что загружать LO, а тот уже передает управление ядру или вызывает другой первичный загрузчик (например, Windows 9x). LO находится в файле на диске (по умолчанию /boot/boot.b). О файловых системах LI не знает, поэтому карта размещения этого файла хранится в нем в виде «цилиндр/головка/сектор». Помещает ее туда утилита /sbin/lilo, которую нужно запускать после любого изменения LO или его конфигурационного файла /etc/lilo.conf.

У вторичного загрузчика LO есть собственная карта размещения файлов (по умолчанию /boot/map). По ней он ищет загружаемое ядро и образ виртуального диска, поэтому после любого изменения ядра или загружаемых модулей тоже обязательно запускать утилиту lilo.

Что такое виртуальный диск? Представьте себе загрузку Linux со SCSI-диска или другого устройства, драйвер которого не вкомпилирован в ядро, а подгружается в виде модуля. LILO сможет найти и прочитать с него файл образа ядра. Теперь ядру предстоит смонтировать корневую файловую систему. Чтобы сделать это, нужно подключить драйвер SCSI, а чтобы найти драйвер в /lib/modules, нужно смонтировать корневую файловую систему.

Похожая проблема возникает при первоначальной установке ОС Linux: для работы инсталлятора нужна файловая система со стандартными утилитами, а на диске ее еще нет. Обе проблемы решаются в Linux с помощью технологии initrd (INITial Ram Disk): вместе с ядром LILO загружает в память образ стартового диска, и ядро монтирует его как обычную файловую систему. В этой файловой системе находятся модули, необходимые для работы с нестандартными внешними устройствами и сетью, и утилиты для их подгрузки. Подключив модули, ядро отсоединяет виртуальный диск и монтирует настоящую корневую файловую систему.

Файл образа виртуального диска обычно называется /boot/initrd-<версия_ядра>. Если нестандартных устройств у вас нет или их драйверы встроены в ядро, то этот файл для загрузки не нужен.

Поведение LILO зависит от настроек в его конфигурационном файле /etc/lilo.conf. Ниже приведен пример такого файла. Символ #, как обычно, служит для комментариев.

Листинг 9.1. Примерный файл /etc/lilo.conf

# LILO version: 21.5

# Общий раздел

#

# использовать MBR первого жесткого диска первого

# контроллера IDE

boot=/dev/hda

#

# Карта LO

map=/boot/map

#

# Файл вторичного загрузчика

install=/boot/boot.b

#

# Режим для загрузочных дискет. У меня закомментирован.

# compact

#

# Режим VGA: normal - 80x25, ext - 80x50

vga=normal

#

# Раскладка клавиатуры

keytable=/boot/ru4.kit

# Диск поддерживает режим LBA (Large Block Access) —

# трансляцию

# физических адресов в логические так,

# чтобы число цилиндров не превышало

# понятных BIOS 1024. Другое значение этого

# параметра - linear. Не меняйте значения, выставленного

# инсталлятором, если вы не знаете точно, что делаете.

lba32

#

# Сообщение, которое выдается при загрузке

message=/boot/message

#

# Задержка 5 секунд (в других версиях LILO этот параметр

# называется delay)

timeout=50

#

# Вывести message и приглашение

# к выбору загружаемого ядра на

# timeout/10 секунд, после которых загружается ядро,

# выбранное по умолчанию.

# Если prompt не установлен, добиться приглашения

# можно, удерживая <Shift> во время загрузки.

prompt

#

#Цветовая схема

menu-scheme=wb:bw:wb:bw

#

# Ядро, загружаемое по умолчанию. Если не указано, то

# загружается первое в списке

default=Fedora

#

# Список вариантов загрузки, не более 16.

# В каждой секции варианта должна быть строка

# label. Это имя, которое вводится в ответ на приглашение

# LILO или является командой меню и служит для выбора

# загружаемого ядра или ОС.

#

image=/boot/vmlinuz-2.4.20 # ядро

 label=linux-initrd        # метка

 initrd=/boot/initrd-2.4.20.img

 root=/dev/hda6 # монтировать этот раздел как корневой

 read-only      # режим монтирования / на время загрузки

#

image=/boot/vmlinuz-2.6.9-1.667

 label=Fedora

 root=/dev/hda2

 read-only

#

image=/boot/vmlinuz

 label=failsafe

 root=/dev/hda6

 append=" mem=64M failsafe" # параметры, передаваемые ядру

 read-only

#

other=/dev/hda1  # ОС - не Linux

 label=WindowsXP # root не указывается

 table=/dev/hda  # где находится таблица разделов

Если вы определили секцию other=/dev/hda1, то в корневом каталоге раздела /dev/hda1 (диска С:) должен находиться вторичный загрузчик. У меня, например, на одном из компьютеров с много вариантной загрузкой там находится NTLoader (поскольку WindowsXP была установлена до Linux), и LILO успешно загружает WindowsXP.

Команда append позволяет передать ядру необходимые параметры. Ее формат:

append=" параметр1[=значение1][, значение2...] [параметр2[=значение3][,значение4...]...]"

Значения разделяются запятой без пробелов, параметры разделяются пробелами. Например, у вас есть устройство CD-RW, которое вы до сих пор использовали как обыкновенный CD-ROM, подключив его как Secondary Slave, то есть /dev/hdd. Чтобы записывать компакт-диски под Linux, CD-RW должен быть устройством SCSI, значит, это устройство нужно эмулировать. Команда выглядит так:

append=" hdd=ide-scsi "

Не забудьте после каждого изменения конфигурационного файла запустить утилиту lilo. Некоторые ее полезные ключи:

♦ -V — показать версию LILO;

♦ -q — показать текущую карту загрузки;

♦ -t — проверить lilo.conf на ошибки;

♦ -u — удалить LILO. После удаления вы сможете загрузить Linux только с внешнего носителя (дискеты).

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

LILO

Чтобы выбрать ядро, нужно нажать клавишу «Shift», после чего появится подсказка:

LILO boot:

и только теперь можно нажать <Tab>. Если вы введете команду help, то получите список всех команд LILO.

Чтобы загрузиться в однопользовательском режиме (например, для восстановления системы после аварии), введите в строке приглашения:

<метка_варианта> single

Если вы переустановили Windows, а она заменила вам содержимое MBR, то восстановить его можно, загрузившись с дискеты или компакт-диска и введя команду lilo. Таким же образом можно установить LILO, если при инсталляции системы вы выбрали другой диспетчер загрузки.

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

♦ L<xx>: первичный загрузчик запустился, но не смог загрузить вторичный. Двузначное число xx — это код ошибки. Обычно причина ошибки — аппаратный сбой.

♦ LI: LI смог загрузить вторичный загрузчик, но не смог передать ему управление. Причина: перемещение /boot/boot.b без запуска утилиты lilo. Чаще всего это значит, что вы удалили или добавили раздел.

♦ LIL: LO запустился, но не смог прочитать карту размещения файлов. Аппаратный сбой.

♦ LIL?: LO загрузился по неправильному адресу. Причина — перемещение /boot/boot.b без запуска утилиты lilo.

♦ LIL-: испорчена карта размещения файлов. Причина — перемещение /boot/map без запуска утилиты lilo.

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

Загрузчик GRUB

Другой известный диспетчер загрузки — это набирающий все большую популярность GNU GRUB (GRand Unified Bootloader). В дистрибутивах Mandrake и Fedora Core этот загрузчик используется по умолчанию, хотя я рекомендую вам сменить его на проверенный временем LILO.

GRUB использует несколько отличную от LILO схему загрузки. Вторичный загрузчик хранится не в каком-то файле, а в не используемом системой пространстве. Обычно это вся первая дорожка диска. Если места для полноценного вторичного загрузчика там недостаточно, туда помещается маленький загрузчик промежуточного этапа, «полуторный», состоящий из драйвера файловой системы и инструкций для вызова настоящего, большого, вторичного загрузчика. Благодаря такой организации GRUB поддерживает большинство файловых систем (FAT и FAT32, ext2fs и ext3fs, ReiserFS, XFS, BSD FFS), понимает большинство форматов исполняемых файлов и — не главное, но самое заметное для начинающего системного администратора, — изменения в конфигурационном файле вступают в силу сразу же, без прописывания их в специальном месте специальной утилитой.

Конфигурационный файл GRUB называется /boot/grub/grub.conf. В мгновенно устаревающих руководствах вы можете встретить другое название — /boot/grub/menu.1st — но это не страшно: этот файл является символической ссылкой на первый. Пример такого файла приведен ниже.

Листинг 9.2. Примерный файл /boot/grub/grub.conf

#boot=/dev/hda

default=0

fallback=1

timeout=5

splashimage=(hd0,1)/grub/splash.xpm.gz

hiddenmenu

title Fedora Core (2.6.9-1.667)

 root (hd0,1)

 kernel /vmlinuz-2.6.9-1.667 ro root=/dev/hda2

 initrd /initrd-2.6.9-1.667.img

title WindowsXP

 rootnoverify (hd0,0)

 chainloader +1

Закомментированная команда boot указывает загрузочный диск. Команда default говорит, какая метка (title) будет загружена по умолчанию, а fallback — какая система будет загружена в случае неудачи. Команда timeout указывает время (в секундах) ожидания ввода команды или выбора другой операционной системы.

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

Труднее всего смириться с тем, как GRUB именует жесткие диски и их разделы. Диски отсчитываются не с буквы «а», а с нуля, а разделы — не с единицы, а тоже с нуля. Таким образом, раздел, который Linux именует /dev/hda1, a Windows — С:, GRUB называет (hd0,0). Круглые скобки обязательны.

Команда rootnoverify нужна для не-Linux систем, a chainloader +1 —для ОС, понимающих только «цепочечную» загрузку (MBR → загрузочная запись активного раздела). Если вы зачем-то разместили Windows на неактивном разделе, откуда она сама загрузиться не сможет, то команде chainloader должна предшествовать команда makeactive.

GRUB имеет графический интерфейс, но попасть в его командную строку все-таки можно: увидев меню вторичного загрузчика, выберите курсором нужную позицию и нажмите <с> (нажав <Ввод>, вы загрузите выбранную систему, нажав <а>, вы сможете передать ядру дополнительные параметры, а нажав <е> — отредактировать последовательность команд, выполняемых при загрузке выбранной системы).

Итак, вы в командной строке. Редактировать вводимые команды можно в стиле bash: поддерживается автодополнение команд и путей к файлам, пролистывание истории команд стрелками «вверх» и «вниз». Список всех доступных команд можно получить по команде help, а получить краткую справку о команде — введя help <имя_команды>.

Установить диспетчер загрузки GRUB (если вы не сделали этого при инсталляции системы) можно командой /sbin/grub-install /dev/hda. Утилита grub-install, как и все остальные компоненты GRUB, содержится в пакете grub, который можно скачать по адресу http://www.sisyphus.ru/srpm/grub.

Как установить графический фон загрузчика GRUB

Много интересных картинок, пригодных для установки в качестве фона загрузчика GRUB, можно найти по адресу http://ruslug.rutgers.edu/~mcgrof/grub-images/images/working-splashimages. Чтобы не загружать все эти картинки, можно просмотреть их уменьшенные изображения по адресу http://ruslug.rutgers.edu/~mcgrof/grub-images/images, а потом уже загрузить понравившуюся картинку.

Выбранную картинку поместите в каталог /boot/grub и укажите ее в директиве splashimage конфигурационного файла:

splashimage=(hd0,0)/boot/grub/image.xpm.gz

Собственную картинку можно использовать как фон для загрузчика, если преобразовать ее в формат, поддерживаемый GRUB. Преобразование выполняется утилитой convert, после чего картинку нужно сжать компрессором gzip:

# convert myimage.png -colors 14 -resize 640x480 myimage.xpm

# gzip myimage.xpm

9.1.2. Продолжение загрузки.

Демон init

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

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

Наконец, процедура автозапуска распаковывает загруженный в память образ ядра (на этом этапе вы видите сообщение: «Uncompressing Linux…») и передает ему управление («OK, booting the kernel»). Теперь ядро инициализирует таблицу страниц виртуальной памяти, устанавливает обработчики прерываний, разбирает параметры, переданные ему диспетчером загрузки, и настраивается в соответствии с ними.

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

В списке текущих процессов, который вы видели по команде ps -e, эти системные процессы взяты в квадратные скобки. Один из них получает идентификатор 1, он-то и станет полноценным пользовательским процессом, в котором будет выполняться код демона init. Этот демон запустит все остальные службы и процессы, управляющие базовыми операциями: например, входом пользователей в систему.

Ядро монтирует корневую файловую систему в режиме «только чтение», находит исполняемый файл демона init (в каталоге /bin, /sbin или там, где вы укажете, передав ядру параметр init=/путь_к_init) и посредством системного вызова exec() загружает его код в процесс номер 1. Все остальные процессы порождает init и его потомки путем деления с помощью системного вызова fork().

Примечание

Ядро покорно запустит в качестве первопроцесса любую программу, которую вы укажете ему как init:

LILO: my_linux init=/bin/sh

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

Процесс init прочитывает свой конфигурационный файл /etc/inittab и запускает другие процессы согласно указанным в нем инструкциям. В этот момент выводится приглашение нажать определенную клавишу (обычно <I>), чтобы войти в интерактивный режим, позволяющий запускать каждый процесс вручную или отказываться от такого запуска.

Уровни выполнения

Уровень выполнения (runlevel) — это такой режим работы системы, в котором разрешается существование только определенной группы процессов. В каждый момент времени система находится на одном из уровней выполнения (на каком именно, можно узнать по команде who -r. Она покажет также значение предыдущего уровня).

Разрешенные на каждом уровне процессы указаны в файле /etc/inittab. Демон init заведует переключением уровней, остановкой запрещенных на новом уровне процессов и запуском предписанных. В ОС Linux определено:

♦ семь уровней выполнения, обозначаемых номерами с 0 до 6;

♦ особый уровень S или s — однопользовательский;

♦ уровни по требованию (ondemand) А, В и С — фиктивные: при переходе на эти уровни запускаются приписанные к ним процессы, но текущий уровень выполнения не меняется.

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

# telinit n

Эта команда посылает соответствующий сигнал процессу init (tell init). Ее исполняемый файл представляет собой символическую ссылку на /sbin/init, так что вместо нее можно отдавать просто команду init. При этом не будет запущена копия процесса init: стартующий процесс первым делом проверяет свой PID и, если тот не равен 1, просто передает сообщение настоящему процессу init.

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

# telinit q

Важно понять, что уровень выполнения — это программная абстракция, аппаратура ни о каких уровнях не знает. Поэтому в разных реализациях Linux (разных дистрибутивах) одному уровню могут соответствовать разные конфигурации системы. Следующие уровни используются в дистрибутивах, основанных на Red Hat:

♦ 0: Останов системы.

♦ 1: Однопользовательский режим. То же, что уровень S.

♦ 2: Многопользовательский режим без поддержки сети.

♦ 3: Полный многопользовательский режим.

♦ 4: Не используется.

♦ 5: Графический режим с X11.

♦ 6: Перезагрузка.

В однопользовательском режиме никакие службы не стартуют: только грузится ядро, монтируется корневая файловая система и запускается командный интерпретатор. На этом уровне не нужен даже файл /etc/inittab, повреждение которого означает невозможность загрузиться на любом другом рабочем уровне. Этот уровень обычно использует администратор для аварийно-восстановительных работ.

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

Конфигурационный файл /etc/inittab

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

id:3:initdefault

Обычно в качестве уровня по умолчанию выбирают 3 (полнофункциональный многопользовательский текстовый режим) или графический 5 (запускается X Window и выдается графическое приглашение для входа в систему). Если оставить поле уровня пустым, то init переспросит значение в процессе загрузки. Если указать в поле уровня несколько значений, то сработает наибольшее. Уровни 0 (останов) и 6 (перезагрузка) указывать нельзя.

Следующие строки имеют формат:

идентификатор:уровни_выполнения:действие:запускаемый_процесс

♦ Идентификатор — это уникальная последовательность из четырех символов (в старых дистрибутивах — двух).

♦ Уровни_выполнения: перечень уровней выполнения (номера без каких-либо разделителей), для которых будет выполнено указанное действие. Например, значение 2345 требует выполнить действие на уровнях 2, 3, 4 и 5. Здесь можно указывать также уровни по требованию (ondemand) А, В и С.

♦ Действие: одно из действий, перечисленных в таблице 9.1.

♦ Запускаемый_процесс: процесс, над которым производится действие. Это может быть исполняемый файл или сценарий.


Действия над процессами, задаваемые а файле /etc/inittab Таблица 9.1

Действие Описание
respawn В случае завершения процесс будет перезапущен
wait Процесс будет запущен при переключении на любой из указанных уровней, и init будет ждать его завершения
once При переключении на любой из указанных уровней процесс будет запущен только однажды
boot Процесс будет запущен во время загрузки системы. Поле «уровни_выполнения» игнорируется
bootwait То же, что и boot, но init ждет завершения процесса
off Не выполняет никаких действий
ondemand Процесс выполняется в режиме по требованию, то есть, он будет запущен при переключении на уровни a, b или с
initdefault Определяет уровень выполнения по умолчанию
sysinit Процесс запускается во время загрузки системы до любых процессов, стартующих через boot или bootwait
powerwait Процесс будет запущен, когда исчезнет напряжение в сети. Естественно, для корректной работы этой записи нужен источник бесперебойного питания, от которого система и получит уведомление об исчезновении напряжения; init будет ждать завершения этого процесса
powerfail То же, что и powerwait, но init не будет ждать завершения процесса
powerokwait Процесс запускается по получении init сигнала о восстановлении питания
powerfailnow Процесс запускается, когда источник бесперебойного питания подает сигнал о том. что его батареи почти разряжены
ctrlaltdel Процесс запускается при получении init сигнала INT. посланного нажатием комбинации клавиш Ctrl+Alt+Del. Обычно это процесс перезагрузки, выключения или перехода в однопользовательский режим.
kbrequest Процесс запускается при получении init сигнала, посланного нажатием «специальной» комбинации клавиш. Назначить клавишам специальное значение можно с помощью утилит из пакета kbd

Сценарий, помеченный действием sysinit, выполняется во время запуска системы, однократно, вне зависимости от запрошенного уровня. Затем запускаются процессы, помеченные действиями boot и bootwait.

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

1. Устанавливается имя машины (hostname).

2. Конфигурируются параметры ядра.

3. Устанавливаются раскладка клавиш и системный шрифт,

4. Активируются разделы подкачки.

5. Корневая система проверяется программой fsck. Если будут найдены ошибки, которые невозможно исправить автоматически, будет запрошен пароль администратора для входа в административный режим, что равноценно переходу на уровень выполнения 1. В этом режиме вы запустите программу fsck с аргументом «/», который означает проверку корневой файловой системы. После исправления всех ошибок введите команду exit для перезагрузки системы. Если программа fsck ошибок не обнаружила, файловая система монтируется в режиме чтение/запись.

6. Проверяются зависимости модулей ядра.

7. Выполняется проверка других файловых систем.

8. Монтируются локальные файловые системы.

9. Включаются квоты.

10. Подключается (не активизируется!) раздел подкачки. С этого момента система начинает использовать раздел подкачки.

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

В процессе развития UNIX-подобных ОС выделились две основных системы инициализации (набора сценариев загрузки). Одна была разработана в рамках ОС BSD (Berkeley Software Distribution) Калифорнийского университета, от которой произошли бесплатная FreeBSD и коммерческая SunOS. Другая применяется в классической System V от AT&T и ее потомках, среди которых UnixWare, IRIX, HP-UX и Solaris. ОС Linux заимствовала удачные решения с обеих эволюционных ветвей, и в результате часть дистрибутивов следует в инициализации стилю BSD (Slackware, CRUX, Gentoo), а часть (Red Hat-подобные) — стилю System V.

Инициализация в стиле BSD

Для этого стиля характерно наличие конфигурационного файла стартовых сценариев /etc/rc.conf. Уровней выполнения как таковых в BSD и ориентированных на нее реализациях Linux нет, вместо них вводится понятие режима — группы процессов, объединенных общей функциональностью. Режимов обычно два: однопользовательский и многопользовательский. Каждый режим запускается своим сценарием. Файлы этих сценариев обычно находятся в /etc и называются rc.* (рис. 9.1).

Рис. 9.1. Порядок инициализации в стиле BSD

В дистрибутиве Slackware этим сценариям присвоены имена:

♦ rc.S — сценарий запуска (действие sysinit);

♦ rc.0 — останов системы;

♦ rc.6 — перезагрузка;

♦ rc.K — однопользовательский режим;

♦ rc.M — многопользовательский текстовый режим;

♦ rc.4 — многопользовательский режим с графическим входом в систему.

В /etc/default/rc.conf хранятся в неизменном хорошо откомментированном виде все системные настройки в количестве нескольких сотен, а редактируемый администратором /etc/rc.conf содержит только отличия желаемой конфигурации системы от /etc/defaults/rc.conf, которых раз в десять меньше. Загрузочные сценарии режимов прочитывают оба эти файла и и зависимости от требуемой конфигурации могут запускать из-под себя дополнительные сценарии инициализации различных служб: rc.inetd*, rc.cdrom и т.п. Последним при загрузке выполняется сценарий rc.local, содержание которого определяется администратором конкретной системы.

Инициализация в стиле System V

В этом стиле каждому уровню выполнения соответствует целый каталог, все сценарии в котором выполняются при переключении на этот уровень. Это подкаталоги /etc с именами rc0.d, rc1.d, …, rc6.d. Сценарии в этих каталогах — файлы с именами вроде S12syslog или K95kudzu — только символические ссылки на настоящие сценарии, находящиеся в /etc/init.d. Каждый из настоящих сценариев, будучи вызван с аргументом start, запускает свою службу, а с аргументом stop — останавливает ее. Какой аргумент будет ему передан, зависит от первой буквы имени символической ссылки: S означает start, K (kill) — stop. Следующее за этой буквой число определяет порядок вызова настоящих сценариев: чем оно больше, тем позже срабатывает данная ссылка при включении текущего уровня. Сначала выполняются все сценарии останова процессов, не разрешенных на данном уровне, потом — все сценарии запуска (рис. 9.2).

Рис. 9.2. Порядок инициализации в стиле System V

Переключением уровней выполнения занимается центральный сценарий /etc/rc. Вызванный с аргументом N, где N — это номер включаемого уровня, он ищет каталог /etc/rc.N и выполняет в нем сначала все стоп-сценарии, потом все старт-сценарии.

Для выбора демонов, которые будут запускаться автоматически при загрузке системы, обычно используют конфигуратор drakconf в операционной системе Linux Mandrake, system-config-services в Fedora Core (рис.9.3) или setup в других Red Hat-подобных дистрибутивах.

Рис. 9.3. Конфигуратор служб system-config-services

Чтобы обеспечить автоматический запуск какого-нибудь сервиса, нужно создать сценарий для его запуска и поместить его в каталоге /etc/init.d. Затем, в зависимости от уровня выполнения, в каталоге /etc/rcN.d нужно создать символические ссылки на этот сценарий для его запуска и останова.

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

Листинг 9.3. Шаблон для запуска демона

#!/bin/bash

#

# Подключаем библиотеку функций

. /etc/init.d/functions

#

# Определяем параметры

case "$!" in

start)

 # Запуск демона

 echo "Starting my_daemon..."

 daemon my_daemon

 touch /var/lock/subsys/my_daemon

 ;;

stop)

 # Останов демона

 killproc my_daemon

 rm -f /var/lock/subsys/my_daemon

 rm -f /var/run/my_daemon.pid

 ;;

status)

 # Выводим статистику работы

 ;;

restart | reload)

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

 ;;

*)

 # Произошел вызов без параметров

 echo "Usage: my_daemon {start|stop|status|restart|reload}"

 exit 1

esac

exit 0

После того, как в процессе инициализации системы будет выполнен загрузочный сценарий уровня но умолчанию, последним выполняется сценарий /etc/rc.local. Выполнив все сценарии, init переходит к другим записям в /etc/inittab, относящимся к текущему уровню. Обычно там остаются только перезапускаемые (respawn) действия: процессы, которые init запускает в фоне, а когда какой-нибудь из них завершается, запускает вновь. Так ведут себя процессы *getty, обслуживающие виртуальные консоли, и менеджер дисплеев системы X Window. Инициализация системы считается законченной, когда запушены все перезапускаемые процессы и init остается только следить за ними.

9.2. Команды управления процессами

9.2.1. Иерархия процессов: ps и pstree

О том, что команда ps позволяет просмотреть сведения обо всех процессах, протекающих в системе в данный момент, вы уже знаете (п.3.2). С ключом -f эта команда выводит как PID самого процесса, так и PPID его родителя, то есть по ее выводу можно восстановить всю структуру дерева процессов до их общего предка — процесса init. «Древовидный» взгляд может понадобиться, например, если вам нужно уничтожить целую группу процессов, происходящих от общего предка: в этом случае вы можете не убивать их по очереди, а просто послать сигнал TERM их родительскому процессу.

Команда pstree представляет дерево процессов сразу в наглядном виде:

$ pstree

init┬acpid

    ├atd

    ├bonobo-activati

   ...

    ├crond

    ├gconfd-2

    ├gdm-binary──gdm-binary┬X

    │                      └gnome-session

    ├gnome-panel

    ├gnome-settings-

    ├gnome-terminal┬bash─pstrее

    │              ├bash─su─bash─man─sh─sh—i┬less

    │              │                        └─nroff—iconv

    │              ├bash─su─bash

    │              └gnome-pty-helpe

   ...

    ├syslogd

    ├udevd

    └xinetd

Ключ -p выводит вместе с именем процесса его PID, а ключ -u — имя пользователя, запустившего процесс. Если в качестве аргумента указать PID, то команда выведет не все дерево, а только ветку потомков процесса с этим PID. Имя пользователя в качестве аргумента требует вывести все ветки процессов, запущенных этим пользователем: у них общего предка может и не быть.

9.2.2. Информация о ресурсах системы: команды free, df, du

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

Ключ -s <число> требует опрашивать систему непрерывно, через каждые <число> секунд, пока вы не прервете выполнение команды, нажав Ctrl+С.

Команды df (disk free) и du (disk usage) показывают, сколько места доступно и занято на жестком диске.

Утилита df выводит сведения о дисковом пространстве на всех смонтированных в данный момент файловых системах — как локальных, так и сетевых:

$ df

Файловая система 1K-блоков    Исп Доступно Исп% смонтирована на

/dev/hda4        22200824 4630864 16442200  22% /

/dev/hda2          101105    8383    87501   9% /boot

/dev/hda6        10221420 1737440  8483980  17% /mnt/win_disk_e

//user5/share     7543680 4623488  2920192  62% /mnt/win_user5

С ключом -i команда df измеряет дисковое пространство не в блоках, а в индексных дескрипторах (п.2.2.1), а с ключом -T показывает тип файловой системы. О других ключах можно узнать, как обычно, на man-странице.

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

9.2.3. Процессы в реальном времени: команда top

Команда top предназначена для наблюдения за процессами в реальном времени и интерактивного управления ими. Терминал, на котором запущена программа top, превращается в окно, разделенное на области (рис. 9.4, сверху вниз):

♦ сведения о системе — продолжительность текущего сеанса, количество задач, использование памяти и процессора, средняя длина очереди задач, ожидающих выполнения (load average) и т.п.;

♦ командная строка;

♦ заголовки столбцов;

♦ область задач. Задачи в терминологии top — это не только пользовательские процессы — потомки init, но и системные процессы — части ядра.

Рис. 9.4. Программа top запущена на виртуальном терминале

Каждые несколько секунд (по умолчанию 3 секунды) окно обновляется.

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

♦ h — вызов справки;

♦ q — завершение работы программы (для выхода можно нажать и комбинацию Ctrl+C);

♦ u — показывать только процессы, запущенные определенным пользователем (следует указывать его регистрационное имя, а не UID);

♦ d — изменить интервал обновления;

♦ f — добавить или удалить столбцы;

♦ F — изменить столбец, по которому сортируются задачи. По умолчанию это %CPU — доля использованного процессорного времени, но можно сортировать, например, по убыванию объема занятой памяти;

♦ i — переключатель отображения: либо все задачи, либо только активные (в состоянии Running);

♦ k — отправить процессу сигнал. Программа спросит у вас PID процесса, а затем номер или название сигнала. По умолчанию посылается сигнал TERM;

♦ r — изменить приоритет процесса.

Количество и порядок отображаемых свойств процесса (столбцов) можно изменять. Всего доступно 26 свойств процесса (нумеруемых буквами английского алфавита), и соответствующие им заголовки столбцов перечислены в секции DESCRIPTIONS of Fields man-страницы команды top. На рис. 9.4 (команда top запущена с настройками по умолчанию) отображены следующие свойства:

♦ PID — PID процесса;

♦ USER — регистрационное имя владельца процесса;

♦ PR — приоритет;

♦ NI — показатель уступчивости (см. п.9.2.4);

♦ VIRT — занятая виртуальная память в килобайтах;

♦ RES — физическая (без подкачки) память, занятая процессом;

♦ SHR — объем разделяемой памяти, используемой процессом;

♦ S — состояние процесса;

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

♦ %MEM — доля занятой процессом физической памяти;