ИНСТАЛЛЯЦИЯ LINUX И ПЕРВЫЕ ШАГИ М. Уэлш --------------------------------------------------------------------------- Linux Installation and Getting Started Copyright (c) 1992--1994 Matt Welsh 205 Gray Street NE, Wilson NC, 27893 USA mdw@sunsite.unc.edu Copyright (c), 1996, ТОО "Терем". Перевод на русский язык (с разрешения Matt Welsh) Александра Соловьева --------------------------------------------------------------------------- Alexander, Thanks for the note about the translation! This is very good work, and I appreciate your work. Hopefully you will be able to explore publishing the translation on paper. Regards! M. Welsh 24 April 1996 ПРЕДИСЛОВИЕ ПЕРЕВОДЧИКА Госкомитет СССР по науке и технике в справедливой борьбе за чистоту русского технического языка, настоятельно рекомендовал (а может и требовал) в одном из своих циркуляров использовать "многопрограммирование" вместо "мультипрограммирование" "сопряжение" вместо "интерфейс" и т.п. А сколько боролись со словом "компьютер", вместо которого был достаточный выбор "русских слов": хочешь - ЭВМ, хочешь - ЦВМ, хочешь - ЭЦВМ. Граница между своими и чужими словами в вычислительной технике живая и подвижная. Никто сегодня не требует русского названия для "драйвера", как и английского для "ядра". Переводчик в большей степени руководствовался находящимся в обращении "техническим жаргоном", стараясь при этом не потакать экстремистам, говорящим "рутина", "хадвер", "сорс" и "фейсом об тейбл". При переводе сделаны очень небольшие сокращения, в основном в начале первой главы, носящей обзорный характер и наиболее подверженной разрушительному действию времени. Книга будет полезна начинающим пользователям Linux, при этом даже изложение основ UNIX ощутимо отличается от типового для такого рода литературы по операционным системам этого семейства. Автор, чтобы подсластить сухую техническую информацию и не отпугнуть возникающими трудностями новичка, временами допускает некоторую игривость слога, в чем переводчик охотно следовал за ним. Перевод выполнен с любезного разрешения автора. А в благодарностях нельзя обойти Алексея Костарева , выполнившего большой об'ем научного и технического редактирования. Без разнообразных вдохновляющих воздействий соседей из Екатеринбурга ( Павла Шабашова , Евгения Шахтарина , Сергея Червинского , И.А. Бокова ) этот перевод был бы выполнен (если выполнен) существенно позже. Заявляя авторские права на перевод ИНСТАЛЛЯЦИЯ LINUX И ПЕРВЫЕ ШАГИ следует очертить их границы: 1. Перевод может свободно распространяться на основе лицензии GPL (см. Приложение E). При полном или частичном воспроизведении перевода обязательно указание авторских прав на перевод. 2. Переводчику хотелось бы знать о любых планах публикации или распространения данного перевода на коммерческой основе. При этом не должны нарушаться лицензионные ограничения, наложенные на оригинал книги и включенные в перевод книги: Matt Welsh "Linux Installation and Getting Started". Перевод книги в форматах HTML, SGML, TXT можно найти, например, на узле НЕВОД . А. Соловьев 10.04.1996 Версия 2.2.2, 11 февраля 1995. Эта книга одновременно и руководство по инсталляции (установке), и руководство для новичка в Linux. Это означает, что книга может быть интересна и тому, для кого за словом UNIX стоит что-то новое, и тем, кто уже имеет определенный опыт. Здесь есть информация о том, как достать Linux, как его инсталлировать, учебные материалы для новичков в UNIX и введение в администрирование системой. Это подразумевает, что книга рассматривает все с достаточно общих позиций, позволяющих ее использовать при работе с различными дистрибутивами Linux. Эта книга свободно распространяется; вы можете ее копировать и сами распространять при выполнении определенных условий. Пожалуйста, ознакомтесь с авторскими правами и условиями распространения, приведенными далее. ПРЕДИСЛОВИЕ ``Вы в лабиринте узких извивающихся ходов, да еще и похожих друг на друга". Перед вами маячит одна из наиболее сложных и до жути страшных систем, из когда-либо написанных живыми существами. Linux - это операционная система, свободнораспространяемая или короче - free, относящаяся к семейству "клону" UNIX для персональных компьютеров, созданная сумбурной командой UNIX-экспертов, хакеров и случайно прибившихся к этой честной компании еще более подозрительных личностей. Хотя система невольно отражает эту тяжелую наследственность, и хотя процесс создания Linux выглядел как дезорганизованные усилия добровольцев, система получилась на удивление мощной, быстрой и бесплатной. Это блестящее решение в классе 32-разрядных операционных систем. Лично мое знакомство с Linux началось несколько лет назад, когда я задумался, как инсталлировать единственный "дистрибутив" Linux, существовавший в то время - пара дискет, подготовленных H.J. Lu. Я сбросил кучу файлов и стал читать, страница за страницей, неряшливо подготовленную инструкцию по инсталляции. Каким-то образом мне удалось инсталлировать эту базовую систему и заставить все вместе работать. Это было задолго до того, как стало возможно приобрести Linux у дистрибуторов всего мира на CD-ROM. Еще до того, когда сам Linux научился обращаться к CD-ROM. Это было до XFree86, до Emacs, до организации коммерческого сопровождения, до того, как Linux стал действительным соперником MS-DOS, Microsoft Windows и OS/2 на рынке операционных систем персональных компьютеров. Вы держите в своих собственных руках карту и путеводитель в мире Linux. Я надеюсь, что эта книга поможет вам в приятном путешествии по тому, что я считаю быстрейшей и самой мощной операционной системой для персональных компьютеров. Установить свой собственный Linux - это может быть само по себе большим удовольствием, так что берите чашку кофе, садитесь и начинайте читать. И для меня тоже чашечку, раз уж вы этим занялись. Я ведь уже давно тут, в Linux, живу. АУДИТОРИЯ Эта книга для всех пользователей персональных компьютеров, которые хотят установить и использовать Linux. Мы предполагаем, что вы имеете базовые представления о персональных компьютерах и операционных системах, вроде MS-DOS. Предварительных знаний по Linux или UNIX не предполагается. Несмотря на это, мы настоятельно рекомендуем потратиться на одну из многочисленных хороших книг по UNIX. Некоторые из них перечислены в Приложении А. СТРУКТУРА КНИГИ Эта книга состоит из следующих глав. Глава 1. Введение в LINUX. Дает общее представление о том, что представляет из себя Linux, что он может для вас сделать, что требуется для его эксплуатации на вашей системе. В главе также содержатся полезные советы и подсказки, как помочь самому себе и избежать стрессов. Глава 2. Приобретение и инсталляция Linux. Об'ясняет, как достать Linux software и как его инсталлировать, начиная с переразбиения диска, создания файловых систем и загрузки программ. Глава содержит достаточно общие инструкции, применимые ко всевозможным дистрибутивам Linux, что в сочетании с документацией, поставляемой с конкретной версией, позволит найти ответы на все вопросы. Глава 3. Знакомство с Linux. Это исчерпывающее введение в использование Linux для новичков в UNIX. Если вы имеете предварительный опыт работы с UNIX, большая часть этого материала вам знакома. Глава 4. Администрирование. Обсуждает много важных концепций, связанных с администрированием Linux. Материал может быть также интересен администраторам UNIX-систем, которые хотели бы узнать об особенностиях эксплуатации Linux. Глава 5. Дополнительные возможности. Представляет читателю ряд дополнительных возможностей, поддерживаемых системой Linux, таких как X Window System и TCP/IP. Включено полное руководство по настройке XFree86-3.1. ПРИЛОЖЕНИЕ A. Источники информации по Linux. Содержит перечень других источников информации по Linux, включая группы телеконференций, списки рассылки, документы, доступные по он-лайн, и книги. ПРИЛОЖЕНИЕ B. Список поставщиков Linux. Содержит небольшой список поставщиков, предлагающих Ос Linux и и различный сервис. ПРИЛОЖЕНИЕ C. Учебные материалы по FTP и список серверов. Содержит учебные материалы по скачиванию файлов из Internet по FTP. Это приложение также включает список архивных серверов FTP, содержащих программное обеспечение Linux. ПРИЛОЖЕНИЕ D. Список BBS для Linux . Содержит список BBS, содержащих программное обеспечение Linux. Поскольку большинство пользователей Linux не имеют выхода в Internet, важно то, что информация с BBS стала доступной. ПРИЛОЖЕНИЕ E. Генеральная Общедоступная Лицензия GNU. Содержит копию GNU GPL, лицензионные соглашения, по которым распространяется Linux. Очень важно, чтобы пользователи Linux понимали GPL; много недоразумений в связи с требованиями GPL возникало в последние месяцы. ПРИЛОЖЕНИЕ F. The GNU General Public License. Оригинальный текст лицензии на английском языке. БЛАГОДАРНОСТИ Эта книга создавалась долго и многие люди причастны к ее выходу в свет. Особенно я хотел бы поблагодарить Larry Greenfield и Karl Fogel за их работу над первой версией третьей главы, и Lars Wirzenius, за его работу над четвертой главой. Я благодарен Michael K. Johnson за его помощь с проектом LDP и использованием LaTeX при оформлении книги, а также Ed Chi, который прислал мне подготовленный для издания вариант книги. Спасибо Melinda A. McBride из SSC, Inc., которая отлично подготовила индекс для глав 3, 4 и 5. Мне также приятно поблагодарить Andy Oram, Lar Kaufman и Bill Hahn из фирмы O'Reilly and Associates за их помощь в Проекте Документирования Linux (Linux Documentation Project или LDP). Я благодарен Linux Systems Labs, Morse Telecommunications, Yggdrasil Computing и другим компаниям за их поддержку LDP путем продажи книг и других работ. Большое спасибо многим активистам, включая (не обращайте внимания на порядок перечисления) Linus Torvalds, Donald Becker, Alan Cox, Remy Card, Ted T'so, H.J. Lu, Ross Biro, Drew Eckhardt, Ed Carp, Eric Youngdale, Fred van Kempen, Steven Tweedie и многих других, за то, что они потратили много времени и энергии на этот проект, и без кого не было бы того, о чем написано в этой книжке. Особая благодарность мириадам читателей, которые присылали свои полезные советы и замечания. Здесь еще очень многих следовало бы упомянуть. Зачем нужна программа проверки правописания, если у вас такая большая аудитория? Matt Welsh 13 января 1994 ДОВЕРИЕ И ЗАКОННОСТЬ The Linux Documentation Project - это не жестко определенная команда писателей, корректоров и редакторов, которые работают над определенными руководствами по Linux. Главный координатор проекта Matt Welsh, которому помогают Lars Wirzenius и Michael K. Johnson. Это руководство - одно из множества распространяемых в рамках Linux Documentation Project, включая Linux User's Guide, System Administrator's Guide и Kernel Hacker's Guide. Эти руководства доступны в форматах LaTeX и Postscript через anonymous FTP-сервер sunsite.unc.edu из каталога /pub/Linux/docs/LDP. Мы призываем всех, кто любит писать или редактировать, присоединиться к нам с целью улучшения документации по Linux. Если у вас есть выход на электронную почту Internet, вы можете присоединиться к каналу DOC - списку рассылки Linux-Activists, послав письмо по адресу: linux-activists-request@niksula.hut.fi с первой строкой послания, имеющей вид X-Mn-Admin: join DOC Не стесняйтесь выходить на контакт с автором и координатором этого руководства, если у вас есть, вопросы, почтовые открытки или деньги. С Matt Welsh можно связаться по электронной почте Internet по адресу mdw@sunsite.unc.edu, а в реальной жизни по адресу 205 Gray Street Wilson, N.C. 27896 U.S.A. UNIXTM - торговая марка X/Open. Linux - не торговая марка и не имеет отношения к UNIXTM или X/Open. The X Window System TM - торговая марка Massachusetts Institute of Technology. MS-DOS TM и Microsoft WindowsTM - торговые марки Microsoft, Inc. Copyright (c) 1992--1994 Matt Welsh 205 Gray Street NE, Wilson NC, 27893 USA mdw@sunsite.unc.edu ИНСТАЛЛЯЦИЯ LINUX И ПЕРВЫЕ ШАГИ может тиражироваться и распространяться целиком или по частям при выполнении следующих условий: 1. Приведенный выше copyright и эти условия должны приводиться целиком во всех частичных и полных копиях. 2. Любой перевод или вторичная работа, базирующаяся на ИНСТАЛЛЯЦИЯ LINUX И ПЕРВЫЕ ШАГИ, должна быть одобрена автором в письменной форме до начала распространения. 3. Если вы распространяете ИНСТАЛЛЯЦИЯ LINUX И ПЕРВЫЕ ШАГИ по частям, то должны включаться инструкции, как можно получить полную версию этого руководства и предоставлены средства получения такой копии. 4. Небольшие части могут воспроизводиться в других работах как иллюстрации в обзорах или цитаты без этих разрешительных указаний, при условии корректного цитирования. 5. Генеральная лицензия GNU (The General Public License) которая приводится ниже может быть приведена при условиях, указанных в ней. 6. Некоторые разделы этого документа находятся под отдельным copyright. Когда эти разделы попадают под различные copyright, то указываются все copyright. Если вы распространяете ИНСТАЛЛЯЦИЯ LINUX И ПЕРВЫЕ ШАГИ по частям и данная часть попадает под несколько более общих copyright, то указываются условия copyright этой части. Исключения из этих правил могут быть предоставлены для академических целей: напишите Matt Welsh по ранее указанному адресу или по электронной почте на mdw@sunsite.unc.edu и спросите разрешения. Эти ограничения вводятся для того, чтобы защитить авторские права, но не ограничить вас как учителей и обучаемых. Автор всячески поощряет дистрибуторов Linux использовать книгу как руководство по инсталляции и первому знакомству с Linux. В соответствии с приведенным выше copyright вы можете свободно печатать и распространять эту книгу бесплатно или получать прибыль. При этом вы можете захотеть включить небольшое ``дополнение по инсталляции'' для вашей версии. Автор хотел бы знать о любых планах коммерческого издания и распространения книги. Тогда мы можем информировать вас о всех последних изменениях. И окажись новая версия книги букально за ближайшим поворотом, может вы решите отложить свое издание до появления новой версии книги. Если вы распространяете книгу на коммерческой основе, то вознаграждения, проценты и/или экземпляры изданной книги также принимаются автором с благодарностью. Ваши взносы такого рода свидетельствуют о вашей поддержке бесплатных программных продуктов и проекта LDP. Весь исходный текст книги Linux Installation and Getting Started помещен под Генеральной лицензией GNU. Смотрите в ПРИЛОЖЕНИИ E GNU ``GPL.'' УСЛОВНЫЕ ОБОЗНАЧЕНИЯ В книге использованы следующие обозначения: Жирным фонтом выделяются слова, обозначающие новые концепции, ПРЕДУПРЕЖДЕНИЯ или ключевые слова языка. Курсивом выделяются ударения в тексте, названия документов и пр. Фиксированным фонтом представлены экранные формы. Также этот фонт используется для выделения имен файлов, команд и информации, вводимой пользователем. 1. Введение в LINUX 1.1 Об этой книге 1.2 Краткая история Linux 1.3 Системные характеристики 1.4 Программные характеристики 1.5 Относительно Copyright для Linux 1.6 Проектирование и философия Linux 1.7 Различия между Linux и другими операционными системами 1.8 Требования к оборудованию 1.9 Источники информации по Linux 1.10 Получение помощи 2. Приобретение и инсталляция Linux 2.1 Дистрибуции Linux 2.2 Подготовка к инсталляции Linux 2.3 Инсталляция Linux 2.4 Постинсталляционные процедуры 2.5 Борьба с глюками 3. Знакомство с Linux 3.1 Введение 3.2 Базовые концепции UNIX 3.3 Первые шаги в UNIX 3.4 Краткая информация о базовых командах 3.5 Исследование файловой системы 3.6 Типы оболочек 3.7 "Уайлдкард" - "дикая карта" 3.8 Трубопроводы UNIX 3.9 Права доступа к файлам 3.10 Управление связями файлов 3.11 Управление работами 3.12 Использование редактора vi 3.13 Установка среды 3.14 Не хотите ли отправиться в самостоятельное плавание 4. Администрирование 4.1 О корнях власти, волшебной шапке и приятных ощущениях. 4.2 Загрузка системы 4.3 Выключение системы 4.4 Работа с пользователями 4.5 Архивация и компрессирование файлов 4.6 Модернизация и инсталляция программ 4.7 Управление файловыми системами 4.8 Использование файла своппинга 4.9 Разношерстные задачи 4.10 Что делать при ЧП 5. Дополнительные возможности 5.1 X Window 5.2 Доступ к файлам MS-DOS 5.3 Сетевая работа по протоколу TCP/IP 5.4 Сетевая работа с UUCP 5.5 Электронная почта 5.6 Новости и USENET Appendix 6. Источники информации по Linux 6.1 Документы, доступные по он-лайн 6.2 Руководства проекта LDP (Linux Documentation Project) 6.3 Книги и другие публикации 7. Список поставщиков Linux 8. Учебные материалы по FTP и список серверов 8.1 Начала ftp 8.2 Вход на сервер 8.3 Озираясь вокруг 8.4 Скачивание файлов 8.5 Прекращение FTP-связи 8.6 Использование ftpmail 8.7 Список Linux FTP-серверов 9. Список BBS для Linux 9.1 США 9.2 Вне США 10. Генеральная Общедоступная Лицензия GNU 10.1 Преамбула 10.2 Условия копирования, распространения и модификации 10.3 Как Применять Эти Требования к Вашим Новым Программам 11. The GNU General Public License 11.1 Preamble 11.2 Terms and Conditions for Copying, Distribution, and Modification 11.3 How to Apply These Terms to Your New Programs 1 Введение в LINUX Содержимое этого раздела Linux, возможно, является наиболее значительным достижением в области свободно распространяемых программ со времен Space War, или более позднего Emacs. Он превратился в операционную систему для бизнеса, образования и индивидуального программирования. Linux перестал быть системой для фанатиков-программистов, которые часами сидят перед мерцающими экранами (хотя таких и немало). Эта книга поможет вам извлечь из Linux максимальную пользу. Linux (произносится "лИнукс") принадлежит семейству UNIX-подобных операционных систем, которая может работать на компьютерах Intel 80386 и 80486. Он поддерживает широкий спектр программных пакетов от TeX до X Windows, компиляторов GNU C/C++, протоколов TCP/IP. Это гибкая реализация ОС UNIX, свободно распространяемая под генеральной лицензией GNU (см. приложение E). Linux может любой 386 или 486 персональный компьютер превратить в рабочую станцию. Он преподнесет всю мощь UNIX к кончикам ваших пальцев. Бизнесмены инсталлируют Linux в сетях машин, используют операционную систему для обработки данных в сфере финансов, медицины, распределенной обработки, в телекоммуникациях и т.д. Университеты по всему миру применяют Linux в учебных курсах по программированию и проектированию операционных систем. Разумеется, повсеместно программисты-энтузиасты используют Linux дома для программирования, решения своих прикладных задач и всевозможного хакерства. Что делает Linux столь отличным от других ОС - это его создание версии UNIX "на общественных началах" (free implementation).. Он был создан и продолжает совершенствоваться и развиваться группой добровольцев, первоначально в кругу пользователей сети Internet, которые обменивались кодами, информацией об обнаруженных ошибках, выявлением проблем, возникавших при расширении сферы применения. Все желающие приглашаются подключиться к этой работе. Единственное, что требуется - это интерес к семейству UNIX и желание совершенствовать свои навыки в этой сфере. Данная книга - ваш путеводитель. 1.1 Об этой книге Эта книга является руководством по инсталляции и пособием по начальному знакомству с системой Linux. Цель - приобщить новых пользователей к этой системе и собрать возможно больше существенного материала по ее использованию в одной книге. Вместо того, чтобы перегружать книгу техническими деталями, которые быстро устаревают, мы даем основы, которые помогут вам самостоятельно находить и осваивать дополнительную информацию. Linux прост в инсталляции и использовании. Но, как и во всякой реализации UNIX, в нем присутствуют элементы "черной магии", которые необходимы при обеспечении его корректной работы. Мы надеемся, что эта книга будет вам хорошим путеводителем по Linux и покажет, насколько простой может выглядеть эта операционная система. В этой книге мы рассматриваем следующие вопросы: * Что такое Linux? Особенности структуры и философии этой уникальной операционной системы, и что она может вам дать. * Все детали, необходимые для практического использования Linux, включая рекомендации по желательной конфигурации аппаратуры. * Как получить и инсталлировать Linux. Существует много способов распространия программного обеспечения под Linux. Мы описываем общую ситуацию, связанную с его распространением, рассказываем, как его приобрести и инсталлировать. Это издание содержит также специфические инструкции по дистрибуции Linux как Slackware. * Краткое учебное пособие по UNIX для тех пользователей, которые до этого не встречались с ОС UNIX. Надеемся, что это пособие дает достаточно материала для новичков, чтобы получить базовые знания и начать ориентироваться в этой ОС. * Введение в системное администрирование Linux. Это покрывает наиболее важные задачи, с которыми следует познакомиться новым администраторам Linux, с такими задачами как регистрация новых пользователей, управление файловой системой и тому подобное. * Информация о конфигурировании более продвинутых аспектов Linux, таких как X Window System, сетевая работа с TCP/IP и SLIP, и установке электронной почты. Эта книга для пользователей персональных компьютеров, желающих начать работать с Linux. Мы не предполагаем предварительного опыта работы с UNIX, но надеемся, что новички будут обращаться по ходу дела к дополнительной литературе. Для незнакомых с UNIX в Приложении А приведен список полезных источников. В общем случае предполагается чтение этой книги совместно с какой-либо книгой по общим концепциям ОС UNIX. 1.2 Краткая история Linux UNIX - одна из самых популярных в мире операционных систем благодаря тому, что ее сопровождает и распространяет большое число компаний. Первоначально она была создана как многозадачная система для миникомпьютеров и мэйнфреймов в середине 70-ых годов, но с тех пор она выросла в одну из наиболее распространенных операционных систем, несмотря на свой временами обескураживающий интерфейс и отсутствие централизованной стандартизации. В чем реальная причина популярности UNIX? Многие хакеры нутром чувствуют, что UNIX - это "настоящая вещь", Единственная Настоящая Операционная Система. Отсюда и появление Linux, как системы, разрабатываемой все более расширяющейся группой энтузиастов UNIX, которые хотят собственноручно в ней поковыряться. Существуют версии UNIX для многих систем, начиная от персонального компьютера, до суперкомпьютеров, таких как Cray Y-MP. Большинство версий UNIX для персональных компьютеров достаточно дороги и сложны. К моменту написания этой книги одномашинная версия AT&T's System V для 386 стоила US$1500. Linux - свободно распространяемая версия UNIX, первоначально была разработана Линусом Торвальдсом (Linus Torvalds) (torvalds@kruuna.helsinki.fi) в Университете Хельсинки (Финляндия). Linux был создан с помощью многих UNIX-программистов и энтузиастов из Internet, тех, кто имеет достаточно навыков и способностей развивать систему. Ядро Linux не использует коды AT&T или какого-либо другого частного источника, и большинство программ Linux разработаны в рамках проекта GNU из Free Software Foundation в Cambridge, Massachusetts. Но в него внесли лепту также программисты всего мира. Первоначально Linux создавался Линусом Торвальдсом как хобби. Его вдохновила операционная система Minix - маленькая UNIX-система, созданная Andy Tanenbaum, и впервые Linux обсуждался по компьютерной сети в рамках USENET newsgroup comp.os.minix. В этих обсуждениях прежде всего принимали участие пользователи Minix из учебных и научных заведений, которым хотелось чего-то большего, чем Minix. Раннее развитие Linux прежде всего было связано с проблемой переключения задач в защищенном режиме для 80386. Все писалось на ассемблере. Линус вспоминает: "После этого началось спокойное плавание: по-прежнему беспросветное кодирование, но у меня были различные подсобные программы и отладка была облегчена. На этом этапе я стал использовать Си и это существенно ускорило дело. В это же время я стал серьезно обдумывать маниакальную идею, как сделать Minix лучше себя самого. Я надеялся в один прекрасный день перекомпилировать gcc под Linux..." "Два месяца ушло на написание самых базовых программ, а затем чуть больше времени на драйвер винчестера (с большим количеством ошибок, но все-таки работавшим на моей машине) и простую файловую систему. В результате я подготовил версию 0.01 (примерно конец августа 1991 г.). Она была не слишком изящной, в ней не было драйвера гибких дисков и она многое не могла делать. Но я уже не смог остановиться, пока не создал свой Minix." Относительно появления Linux версии 0.01 никогда не делалось никаких официальных заявлений. Исходные тексты 0.01 не давали даже нормального выполняемого кода: они фактически состояли лишь из набора заготовок для ядра и молчаливо предполагали, что вы имеете доступ к Minix-машине, чтобы иметь возможность компилировать их и совершенствовать. 5-го октября 1991 года Линус об'явил первую "официальную" версию Linux, версия 0.02. В это время Linux уже мог выполнять bash (the GNU Bourne Again Shell) и gcc (the GNU C compiler), но мало еще что работало. Вновь это рассматривалось как создание некой хакерской системы. Основное внимание - создание ядра. Никакие вопросы поддержки работы с пользователем, документирования, тиражирования и т. п. даже не обсуждались. Кажется, что и сегодня сообщество Linux-истов считает эти вопросы вторичными по сравнению с "настоящим программированием" - развитием ядра. Линус писал в comp.os.minix: "Грустите ли вы по тем прекрасным временам Minix-1.1, когда мужчины были настоящими мужчинами и писали свои собственные драйверы на все устройства? У вас сейчас нет под рукой настоящего проекта и вы вымираете от невозможности вонзить свои зубы в какую-то ОС, которую бы можно было модифицировать под свои желания? Не находите ли вы деморализующей ситуацию, когда все в Minix работает? Нет больше бессонных ночей, которые позволяли заставить хитрые программы работать правильно? Тогда это место для вас." "Как я уже говорил месяц назад, сейчас я работаю над некоммерческой Minix-подобной ОС для 386-го компьютера. Она уже доведена до такого состояния, когда ею даже можно пользоваться (хотя может быть там не то, что бы вы хотели), и я хочу выложить исходные тексты для широкого распространения. Это версия 0.02, но в ней уже успешно работают bash, gcc, gnu-make, gnu-sed, compress и т.д." После версии 0.03 Линус скачком перешел в нумерации к версии 0.10, так как над проектом стало работать много народу. После нескольких последовавших пересмотров версий, Линус присвоил очередной версии номер 0.95, чтобы тем самым отразить свое впечатление о том, что скоро возможна уже "официальная" версия. (Обычно программам не дают номер версии 1.0 до того, как она теоретически завершена и отлажена). Это было в марте 1992 г. Примерно через полтора года - в декабре 1993 версия ядра все еще была Linux 0.99.pl14 - асимптотически приближаясь к 1.0. Во время написания книги текущая версия ядра 1.1 patchlevel 52, и на подходе версия 1.2. Сегодня Linux - это полноценная ОС семейства UNIX, способная работать с X Windows, TCP/IP, Emacs, UUCP, mail и USENET. Практически все важнейшие программные пакеты были поставлены и на Linux, т.е. для Linux теперь доступны и коммерческие пакеты. Все большее разнообразие оборудования поддерживается по сравнению с первоначальным ядром. Многие тестировали Linux на 486-ом и установили, что он вполне сравним с рабочими станциями Sun Microsystems и Digital Equipment Corporation. Кто мог предположить, что этот "маленький UNIX" вырастет настолько, что сможет делать все в мире компьютеров. 1.3 Системные характеристики Linux поддерживает большинство свойств, присущих другим реализациям UNIX, плюс ряд тех, которых больше нигде нет. Этот раздел - поверхностный обзор характеристик ядра Linux . Linux - это полная многозадачная многопользовательская операционная система (точно также как и другие версии UNIX). Это означает, что одновременно много пользователей могут работать на одной машине, одновременно выполнять много программ. Linux достаточно хорошо совместим с рядом стандартов для UNIX (насколько можно говорить о стандартизации UNIX) на уровне исходных текстов, включая IEEE POSIX.1, System V и BSD. Он создавался имея в виду такую совместимость. Поэтому, скорее всего, вы найдете в Linux черты, присущие многим UNIX-системам. Большинство свободно распространяемых по сети Internet программ для UNIX может быть откомпилировано для LINUX практически без особых изменений. Кроме того, все исходные тексты для Linux, включая ядро, драйверы устройств, библиотеки, пользовательские программы и инструментальные средства распространяются свободно. Другие специфические внутренние черты Linux включают контроль работ по стандарту POSIX (используемый оболочками, такими как csh и bash), псевдотерминалы (pty), поддержку национальных и стандартных клавиатур динамически загружаемыми драйверами клавиатур. Linux также поддерживает виртуальные консоли (virtual consoles), которые позволяют "переключать экраны" на консоли в текстовом режиме. Те, кто пользовался программой "screen", найдут подобное в реализации виртуальной клавиатуры Linux. Ядро может само эмулировать команды 387-FPU, так что системы без сопроцессора могут выполнять программы, на него расчитывающие (т.е. с плавающей точкой). Linux поддерживает различные типы файловых систем для хранения данных. Некоторые файловые системы, такие как файловая система ext2fs, были созданы специально для Linux. Поддерживаются также другие типы файловых систем, такие как Minix-1 и Xenix. Реализована также файловая система MS-DOS, позволяющая прямо обращаться к файлам MS-DOS на жестком диске. Поддерживается также файловая система ISO 9660 CD-ROM для работы с дисками CD-ROM. Подробнее о файловых системах говорится в Главах 2 и 4. Linux обеспечивает полный набор протоколов TCP/IP для сетевой работы. Это включает драйверы устройств для многих популярных карт Ethernet, SLIP (Serial Line Internet Protocol, обеспечивающие вам доступ по TCP/IP при последовательном соединении), PLIP (Parallel Line Internet Protocol), PPP (Point-to-Point Protocol), NFS (Network File System), и так далее. Поддерживается весь спектр клиентов и услуг TCP/IP, таких как FTP, telnet, NNTP и SMTP. О сетевых проблемах мы будем говорить в Главе 5. Ядро Linux сразу создано с учетом специального защищенного режима для процессоров Intel 80386 и 80486. В частности, Linux использует парадигму описания памяти в защищенном режиме и другие новые свойства процессоров. Любой знакомый с защищенным режимом процессора 80386 знает, что этот чип проектировался для многозадачных систем вроде UNIX (или Mulics). Linux использует эти свойства. Ядро Linux поддерживает загрузку только нужных страниц. То есть с диска в память загружаются те сегменты программы, которые действительно используются. Возможно использование одной страницы, физически один раз загруженной в память, несколькими выполняемыми программами. Для увеличения об'ема доступной памяти Linux осуществляет также разбиение диска на страницы: то есть на диске может быть выделено до 256 Мбайт "пространства для свопинга" (swap space). (Swap space не совсем подходящее имя, в Linux в область своппинга выгружается не весь процесс, а только отдельные его части, в которых нет необходимости). Когда системе нужно больше физической памяти, то она с помощью свопинга выводит неактивные страницы на диск. Это позволяет выполнять более об'емные программы и обслуживать одновременно больше пользователей. Однако свопинг не исключает наращивания физической памяти, поскольку он снижает быстродействие, увеличивает время доступа. Ядро также поддерживает универсальный пул памяти для пользовательских программ и дискового кэша. При этом для кэша может использоваться вся память, и наоборот, кэш уменьшается при работе больших программ. Выполняемые программы используют динамически связываемые библиотеки, т.е. выполняемые программы могут совместно использовать библиотечную программу, представленную одним физическим файлом на диске (иначе, чем это реализовано в механизме разделяемых библиотек SunOS). Это позволяет выполняемым файлам занимать меньше места на диске, особенно тем, которые многократно используют библиотечные функции. Есть также статические связываемые библиотеки для тех, кто желает пользоваться отладкой на уровне об'ектных кодов или иметь "полные" выполняемые программы, которые не нуждаются в разделяемых библиотеках. В Linux разделяемые библиотеки динамически связываются во время выполнения, позволяя программисту заменять библиотечные модули своими собственными. Для обеспечения отладки ядро Linux выдает дампы памяти для "посмертного" анализа. Использование дампа и динамических отладчиков позволяет определить причины краха программы. 1.4 Программные характеристики В этом разделе мы представим вам многие приложения, доступные в Linux, и поговорим об общих задачах вычисления. В конечном счете - наиболее важным в системе является то, насколько широк спектр доступных в ней программ. А тот факт, что большая часть этих программ распространяется свободно - усиливает впечатление. Базовые команды и утилиты Практически любая утилита, которую вы ожидаете найти в стандартных реализациях UNIX, имеется и в Linux. Сюда включены и базовые команды, такие как ls, awk, tr, sed, bc, more и т.д. Назовите любую - она есть в Linux. Поэтому вы в праве ожидать знакомой рабочей UNIX-среды. В Linux есть все стандартные команды и утилиты. (Новички могут посмотреть Главу 3 для начального знакомства с базовыми командами UNIX). В Linux имеются многие текстовые редакторы, включая vi, ex, pico, jove, также как GNU Emacs и его вариации, вроде Lucid Emacs (который содержит расширение для использования под X Windows) и joe. Скорее всего, любой текстовый редактор, к которому вы привыкли, перенесен в Linux. Выбор редактора - явление любопытное. Многие пользователи UNIX до сих пор используют "простые" редакторы вроде vi (кстати, автор писал эту книгу в Linux, используя редактор vi) (кстати, переводчик переводил эту книгу в Linux, используя редактор red). Но vi имеет много ограничений по причине своего преклонного возраста, сейчас завоевывают популярность более современные и сложные редакторы вроде Emacs. Emacs поддерживает базирующийся на LISP макроязык и интерпретатор, мощный командный синтаксис и другие расширения. Существуют макропакеты Emacs, позволяющие читать электронную почту и новости, редактировать содержимое каталогов и даже проводить сеансы психотерапии с использованием искусственного интеллекта (неоценимая возможность для измотанных Linux-ом хакеров). Интересное замечание - большинство утилит Linux имеют статус GNU. Эти утилиты часто поддерживают наиболее современные черты, не содержащиеся в стандартных версиях BSD или AT&T. Например, версия GNU редактора vi - elvis, содержит структурный макроязык, который отличается от исходной реализации AT&T. Но тем не менее, утилиты GNU сохраняют совместимость с их тезками из BSD и System V. Многие считают, что GNU версии лучше исходных программ. Многие пользователи самой важной утилитой считают shell. shell - это программа, которая читает и выполняет команды пользователя. Кроме того, многие оболочки (shells) имеют такие возможности, как контроль выполнения> (job control) (позволяя пользователю управлять несколькими параллельными процессами), перенаправление входа-выхода и командный язык для написания командных файлов (shell scripts). Командный файл - это программа на языке оболочки, аналогичная "batch file" в MS-DOS. В Linux много типов оболочек. Наиболее важное различие между ними - используемый командный язык. Например, C Shell (csh) использует командный язык, чем-то напоминающий язык программирования Си. Классический <Баурновский shell (Bourne Shell) использует иной командный язык. Обычно выбор оболочки обусловлен выбором соответствующего командного языка. Выбранная оболочка в какой-то мере определяет вашу рабочую среду. Не важно, к какой оболочке вы привыкли, та или иная ее версия есть в Linux. Наиболее популярная оболочка - это GNU Bourne Again Shell (bash), т.е. вариант Bourne shell, включающий много современных свойств и возможностей, таких как управление работами, командную историю, дописывание имен команд и имен файлов, Emacs-подобный интерфейс редактирования командной строки и мощное расширение стандартной оболочки (Bourne shell). Другая популярная оболочка - tcsh, версия C Shell с более современными функциями по сравнению с bash. Другие оболочки: zsh - небольшая баурно-подобная оболочка; ksh - оболочка Корна; ash - оболочка BSD и rc -оболочка проекта Plan 9. Что особенно важно сказать относительно этих оболочек? Linux дает вам уникальную возможность кроить систему под ваши личные нужды. Например, если вы единственный пользуетесь этой системой и вы предпочитаете редактор vi и bash в качестве оболочки, то нет необходимости иметь прочие редакторы и оболочки. "Сделай сам, как тебе нравится" - это позиция хакеров и пользователей Linux. Обработка текстов и слов Почти все пользователи нуждаются в какой-либо системе подготовки документов. (Много ли вы знаете энтузиастов компьютерной обработки, которые все еще пользуются ручкой и бумагой? Мы догадываемся, что очень немного). В мире персональных компьютеров обработка слов (word processing) - норма: она включает редактирование и манипуляции с текстом (часто в стиле WYSIWYG - "What-You-See-Is-What-You-Get" - "Что-Вы-Видите-ЕстьТо- Что-Вы-Имеете" - ЧВВЕТЧВИ) и получение печатных копий, содержащих рисунки, таблицы и другой гарнир. В мире UNIX обработка текстов (text processing)- вещь более естественная, чем классическая концепция обработки слов. Вместо того, чтобы вызывать специальные средства обработки слов, исходный текст можно модифицировать любым текстовым редактором, таким как vi или Emacs. После подготовки текста пользователь форматирует текст специальными программами, преобразующими его к нужному для печати виду. Это в чем-то аналогично программированию на языке вроде Си, и "компилированию" текста в пригодную для печати форму. В Linux много текстовых процессоров. Один из них groff - GNU версия классического форматера текстов nroff, первоначально созданного в Bell Labs и до сих пор используемого во многих UNIX. Другой современный текстовый процессор - TeX, создан знаменитым в компьютерном мире Дональдом Кнутом (Donald Knuth). Доступны диалекты TeX, такие как LaTeX. Текстовые процессоры, такие как TeX и groff значительно различаются по синтаксису языков форматирования. Предпочтение той или иной системы форматирования в значительной мере базируется на том, какие имеются вспомогательные утилиты и насколько система вам по вкусу. Например, некоторые люди считают groff несколько заумным, поэтому они используют TeX, который более понятен для хомо сапиенс. Между тем, groff может давать ясный ASCII выход, легко читаемый на терминале, в то время как TeX прежде всего предназначен для вывода на печать. Но существуют многочисленные программы, позволяющие получить читаемый текст из отформатированных с помощью TeX документов или конвертирующих TeX, например, в groff. Другой текстовый процессор texinfo - расширение TeX, используемое для подготовки программной документации в Free Software Foundation. texinfo может формировать печатный документ или гипертекст "Info" для просмотра на экране на основе одного исходного файла. Файлы Info - это основной формат для документирования, используемый в GNU, в частности в Emacs. Текстовые процессоры широко используются в компьютерном мире для подготовки статей, диссертаций, статей для журналов и книг (типографский вариант этой книги был подготовлен с использованием LaTeX). Возможность обрабатывать исходный язык как текстовый файл открывает двери. Как выглядит язык форматирования? В общем случае он содержит сам текст с "управляющими кодами" для производства заказанных действий, таких как изменение фонтов, установление полей, формирование страниц и т.д. В качестве примера возьмем следующий текст: Mr. Torvalds: We are very upset with your current plans to implement post-hypnotic suggestion in the Linux terminal driver code. We feel this way for three reasons: 1. Planting subliminal messages in the terminal driver is not only immoral, it is a waste of time; 2. It has been proven that ``post-hypnotic suggestions'' are ineffective when used upon unsuspecting UNIX hackers; 3. We have already implemented high-voltage electric shocks, as a security measure, in the code for login. We hope you will reconsider. Этот текст на языке форматирования LaTeX будет выглядеть следующим образом: \begin{quote} Mr. Torvalds: We are very upset with your current plans to implement {\em post- hypnotic suggestion\/} in the {\bf Linux} termi- nal driver code. We feel this way for three reasons: \begin{enumerate} \item Planting subliminal messages in the ker- nel driver is not only immoral, it is a waste of time; \item It has been proven that ``post-hypnotic sugges- tions'' are ineffective when used upon unsuspecting UNIX hackers; \item We have already implemented high-voltage elec- tric shocks, as a security measure, in the code for {\tt login}. \end{enumerate} We hope you will reconsider. \end{quote} Автор входит в "исходный" текст, приведенный выше, используя любой текстовый редактор, и генерирует форматированный выход, обрабатывая текст с помощью LaTeX. На первый взгляд такой язык может показаться достаточно заумным, но в действительности он очень прост в освоении. Использование текстового процессора обеспечивает поддержку типографских стандартов. Например, все перечисленные в рамках документа страницы будут выглядеть одинаково. Пишущий может сосредоточиться на тексте, а не на том, как это следует оформлять с точки зрения типографских требований. Процессоры слов типа WYSIWYG привлекательны по многим причинам: они обеспечивают мощный (а иногда и сложный) визуальный интерфейс для редактирования документов. Но этот интерфейс традиционно ограничен желательными и приемлемыми для пользователя формами выдачи. Так, многие процессоры имеют средства подготовки к печати математических формул. Преимущество текстовых процессоров состоит в том, что они позволяют описывать именно то, что вы хотите. Они позволяют также редактировать исходный текст любым текстовым редактором и затем конвертировать в различные форматы. Платой за такую гибкость является отсутствие тех качеств интерфейса, которые есть у WYSIWYG. Многие пользователи процессоров слов привыкли видеть отредактированный текст сразу в процессе редактирования. С другой стороны, при использовании текстового процессора пишущий не заботится о том, как будет выглядеть уже отформатированный текст. Пишущий лишь должен иметь представление о том, какие действия произведут вставляемые им команды форматирования. Есть программы, которые позволяют посмотреть на графическом дисплее вид отформатированного документа перед его печатью. Например, программа xdvi отображает "независимый от устройства" файл, сгенерированный TeX под X Window. Другое приложение - xfig, обеспечивает графический интерфейс WYSIWYG для рисунков и диаграмм, который в последующем конвертируется в команды текстового процессора, включаемые в документ. Следует напомнить, что текстовые процессоры, вроде nroff, появились задолго до процессоров слов. Многие предпочитают использовать текстовые процессоры из-за их гибкости и независимости от графической среды. В любом случае, в Linux имеется процессор слов idoc, а также скоро ожидается появление коммерческих процессоров слов. Но если вы не хотите расставаться с процессором слов, к которому вы привыкли в MS-DOS, вы всегда можете использовать MS-DOS или другую операционную систему в дополнение к Linux. Существует и много других утилит текстовых процессоров. Мощная система METAFONT используется для проектирования фонтов в TeX. Другие программы включают ispell - интерактивный контролер правописания, makeindex - используется для генерации индексов в документах, подготовленных в LaTeX. Существует много макропакетов для groff и TeX для форматирования документов различных типов и математических текстов, а также тьма конверторов, транслирующих TeX или groff во многие другие форматы. Языки программирования и утилиты Linux обеспечивает полную UNIX-среду программирования, включая все стандартные библиотеки, программный инструментарий, компиляторы, отладчики, которые вы встречаете и в других UNIX-системах. В мире UNIX большинство приложений и системных программ делаются на Си или Си++. Стандартным компилятором для Си и Си++ в Linux служит GNU gcc, который является современным компилятором, поддерживающим много опций. Он способен компилировать Си++ (включая особенности AT&T 3.0 features) также, как Objective-C, другие об'ектно-ориентированные диалекты Си. Кроме Си и Си++ многие другие компиляторы и интерпретаторы были перенесены в Linux, такие как Smalltalk, FORTRAN, Pascal, LISP, Scheme и Ada (если вы настолько мазохист, чтобы программировать на Аде - мы не будем вам препятствовать). В дополнение, существуют различные ассемблеры для написания кодов для защищенного режима 80386, а также любимые хакерами языки, вроде Perl (язык сценариев, как окончательный тупик или вершина для всех языков такого типа) и Tcl/Tk (shell-подобный командный язык, включающий поддержку разработки простейших приложений в X Window). В Linux был перенесен продвинутый отладчик gdb, позволяюший пошагово выполнять программы в поисках ошибок или анализировать крах программ с помощью дампов памяти. gprof - утилита профилирования, показывающая, где ваша программа при выполнении тратит больше времени. Текстовый редактор Emacs позволяет осуществлять интерактивное редактирование. Другие инструменты, включая GNU make и imake используются для управления компиляцией больших программ; RCS - система для защиты и сопровождения исходных текстов. Linux содержит динамические библиотеки (DLL), которые позволяют экономить место, поскольку они вызываются только во время выполнения. Эти библиотеки позволяют также прикладному программисту переопределять функции, включая свои коды. Например, если программист желает написать свою собственную версию библиотечной программы malloc(), компоновщик подключит новую программу вместо библиотечной. Linux идеален для создания UNIX-приложений. Он обеспечивает современное программное окружение со всеми дополнительными погремушками. Поддерживаются различные стандарты вроде POSIX.1, позволяющие легко переносить программы, написанные для Linux, на другие системы. Профессиональные UNIX-программисты и системные администраторы могут использовать Linux для домашних компьютеров, а с них переносить написанные программы на компьютеры своей фирмы. Это может не только сэкономить много времени и денег, но и обеспечить комфортабельную работу на домашнем компьютере. (Автор использует дома Linux для разработки и тестирования X Window приложений, которые могут прямо транслироваться на любых рабочих станциях). Студенты, изучающие компьютерные науки, могут использовать Linux для обучения программированию в UNIX и изучения таких аспектов, как архитектура ядра. Через Linux вы не только имеете доступ к полному набору библиотек и утилит, но также к исходным текстам ядра и библиотек. Система X Window Система X Window (или кратко просто Х) - стандартный графический интерфейс для UNIX-машин. Это мощная среда, поддерживающая много приложений. Используя X Window, пользователь может одновременно иметь на экране несколько окон, при этом каждое имеет независимый login. Часто используется мышь, хотя она необязательна. Было написано много специфических Х-приложений, таких как игры, графические утилиты, инструментарий для программирования и документирования и т.д. С Linux и X ваш компьютер - замечательная рабочая станция. Используя протоколы TCP/IP, вы можете смотреть у себя X-приложения, выполняемые на других машинах. Система X Window была первоначально создана в MIT и свободно распространялась. Существует много и коммерческих приложений, расширяющих возможности X Window. Для Linux есть система X Window, известная как XFree86; версия X11R5 свободно распространяется для UNIX-систем типа Linux. XFree86 поддерживает широкий спектр видео устройств, включая VGA, Super VGA, различные видео адаптеры с ускорителями. Это полный комплект X Window, содержащий сам сервер, много прикладных программ и утилит, программные библиотеки и документацию. Стандартные Х-приложения включают xterm (эмулятор терминала, используемый в большинстве текстовых приложений в X Window); xdm (X-менеджер, обслуживающий login); xclock (представление простых часов); xman (X-ориентированное руководство по Linux) и т.д. Трудно перечислить все приложения X, доступные в Linux, но базовый комплект XFree86 включает "стандартные" приложения, содержащиеся в исходной версии MIT. Но доступно и многое другое, теоретически, все написанное для X Window должно прямо компилироваться и для Linux. Интерфейс X Window в большой степени контролируется менеджером окон (window manager). Эта программа отвечает за размещение окон, изменение их размеров, размещение иконок, перемещение окон, вид оконных рамок и т.д. Стандартный дистрибутив XFree86 включает twm, классический оконный менеджер MIT, но также имеются и более современные менеджеры, такие как Open Look Virtual Window Manager (olvwm). Среди пользователей Linux популярен fvwm. Это небольшой менеджер окон, требующий в два с лишним раза меньше памяти, чем twm. Он обеспечивает трехмерное представление обрамления окон и виртуальный рабочий стол (desktop) - если пользователь подвигает мышь к краю экрана, все изображение смещается, будто дисплей имеет большие размеры, чем на самом деле. fvwm более традиционен и позволяет реализовать все функции доступа как с клавиатуры, так и от мыши. Многие дистрибутивы Linux содержат fvwm, как стандартный менеджер окон. Дистрибутив XFree86 содержит программные библиотеки и включает файлы для тех программистов, кто желает создавать приложения в X. Поддерживаются различные множества widget (графических представлений), такие как Athena, Open Look и Xaw3D. Включены все стандартные фонты, битмэпы и документация. Поддерживается также PEX (программный интерфейс для трехмерной графики). Многие пользующиеся Х-ом используют и имеющиеся в Motif наборы widget. Несколько компаний продают одно- и многопользовательские лицензии бинарников Motif в Linux. Поскольку Motif сам по себе сравнительно дорог, немногие владельцы Linux имеют Motif. Тем не менее, бинарники, статически связанные с библиотечными программами Motif, могут свободно распространяться. Если вы написали программы с использованием Motif и хотите их передавать, вы должны позаботиться о самодостаточности кодов. Главные ограничения использования X Window происходят от требований к аппаратуре. Минимально необходим 386 процессор с 4 Мбайт RAM. Но для более комфортного режима желательно не менее 8 Мбайт. Желательно и процессор побыстрее, но прежде всего необходима память. Для действительно хорошего результата лучше иметь карту с акселератором (как например S3-chipset). На Linux с XFree86 был достигнут рейтинг выполнения, превосходящий 140000 xstones. На приличном компьютере вы можете убедиться, что X под Linux работает не хуже, или даже быстрее, чем на других UNIX. В Главе 5 мы обсудим вопросы инсталляции и использования X. Работа в сети Интересует ли вас связь с миром? Да? Нет? Может быть? Linux поддерживает два базовых сетевых протокола UNIX: TCP/IP и UUCP. TCP/IP (Transmission Control Protocol/Internet Protocol) есть множество сетевых парадигм, позволяющих системам по всему миру связываться по единой сети, известной как Internet. С помощью Linux, TCP/IP и подключения к сети вы можете общаться с пользователями и машинами всего Internet через электронную почту, новости USENET, передачу файлов FTP и т.п. В Internet много машин под Linux. Большинство сетей TCP/IP используют Ethernet, как физическое транспортное средство. Linux поддерживает многие популярные карты Ethernet и интерфейсы. Однако, поскольку не у всех есть дома плата Ethernet, Linux также поддерживает SLIP (Serial Line Internet Protocol), позволяющий связываться с Internet через модем. Для использования SLIP вы должны иметь доступ к SLIP-серверу, машине связанной с сетью и обеспечивающей вам вход в Internet. Многие фирмы и университеты предоставляют SLIP-сервис. Если ваш Linux имеет Ethernet и модем, вы можете сконфигурировать систему как SLIP-сервер для других хостов. NFS (Network File System) позволяет вам использовать файлы совместно с другими машинами сети. FTP (File Transfer Protocol) позволяет передавать файлы между машинами. Другие приложения включают sendmail - систему передачи и получения электронной почты с использованием протокола SMTP; базирующуюся на протоколе NNTP, системе электронных новостей типа C-News и INN; telnet, rlogin и rsh - позволяют войти и выполнить команды на других машинах сети; finger - позволяет получать информацию о других пользователях Internet. Фигурально выражаясь - существуют тонны различных приложений для протокола TCP/IP. Полный спектр различных программ для чтения почты и новостей существует в Linux, это, например, elm, pine, rn, nn и tin. Если у вас есть опыт работы с приложениями TCP/IP на других UNIX-системах, Linux не будет для вас чем-то новым. Система обеспечивает стандартный программный интерфейс, поэтому любая программа, использующая TCP/IP, может быть легко перенесена на Linux. X-сервер Linux также поддерживает TCP/IP, позволяя отображать выполняемые на других машинах прикладные программы на вашем дисплее. В Главе 5 мы обсудим конфигурацию и установку для Linux TCP/IP, включая SLIP. UUCP (UNIX-to-UNIX Copy) - старейший механизм передачи файлов, электронной почты и электронных новостей между UNIX-машинами. Классически, UUCP-машины связываются друг с другом по телефонным линиям через модем, но UUCP может использовать в качестве транспортного средства и связь по TCP/IP. Если у вас нет доступа по TCP/IP или SLIP-сервера, вы можете сконфигурировать свою систему так, чтобы посылать и получать файлы и электронную почту с использованием UUCP. Подробнее смотрите в Главе 5. Телекоммуникации и BBS Если у вас есть модем, вы можете связываться с другими машинами, используя телекоммуникационные пакеты, имеющиеся в Linux. Многие используют программы телекоммуникации для связи с BBS (Bulletin Board Systems), а также и с коммерческими он-лайновыми системами, вроде Prodigy, CompuServe и America On-Line. Другие через модемы связываются с UNIX-системой в школе или на работе. Вы можете использовать модем и Linux для посылки и приема факсов. Телекоммуникационные пакеты Linux очень похожи на имеющиеся в MS-DOS или других операционных системах. Один из наиболее популярных телекоммуникационных пакетов в Linux - Seyon - X-приложение, предоставляющее традиционный эргономичный интерфейс со встроенной поддержкой различных протоколов передачи файлов, таких как Kermit, ZModem и т.п. Есть также телекоммуникационные программы C-Kermit, pcomm и minicom. Это напоминает наборы телекоммуникационных программ в других системах. Если у вас нет доступа к SLIP-серверу, вы можете использовать term для мультиплексирования вашей последовательной линии. term обеспечит вам множественный доступ через модем на удаленную машину. term также позволит перенаправлять X-клиента на локальный X-сервер через последовательную линию, давая возможность отобразить удаленное X-приложение на вашей Linux-системе. Другой пакет - KA9Q - обеспечивает интерфейс, похожий на SLIP. BBS - это сегодня хобби многих программистов. Linux поддерживает большое разнообразие программ для BBS, большинство из которых более мощные, чем в других операционных системах. С телефонной линией, модемом и Linux вы можете превратить ваш компьютер в BBS, обеспечив dial-in доступ к своей системе для пользователей с Земного шара. Программное обеспечение BBS для Linux включает XBBS и пакеты UniBoard BBS. Большинство программ BBS ограничивают пользователя меню-системой, где имеется некоторый фиксированный набор функций. Альтернативой доступу в BBS служит полный спектр возможностей доступа UNIX, который позволяет вам работать с удаленной машиной на правах обычного пользователя. Если у вас нет возможностей использовать TCP/IP или UUCP, Linux позволяет также связываться с рядом BBS, таких как FidoNet по телефонным линиям и обмениваться новостями и почтой. Дополнительную информацию можно найти в Главе 5. Интерфейс с MS-DOS Существуют различные утилиты для связи с миром MS-DOS. Наиболее известен Linux MS-DOS Emulator, позволяющий выполнять многие MS-DOS программы прямо на Linux. Несмотря на то, что Linux и MS-DOS абсолютно различные операционные системы, среда защищенного режима для 80386 позволяет некоторым задачам вести себя так, как это делают прикладные программы MS-DOS. Эмулятор MS-DOS все еще в стадии совершенствования, но многие популярные пакеты в нем уже выполняются. Понятно, что некоторые приложения MS-DOS, использующие специфические или скрытые свойства системы, никогда не будут выполняться, поскольку эмулятор не знает, как их эмулировать. Например, вы не сможете без шероховатостей выполнять программы, использующие свойства защищенного режима 80386, такие как Microsoft Windows (в расширенном режиме 386-го). Приложения, которые успешно работают под Linux MS-DOS Emulator включают: 4DOS (интерпретатор команд), Foxpro 2.0, Harvard Graphics, MathCad, Stacker 3.1, Turbo Assembler, Turbo C/C++, Turbo Pascal, Microsoft Windows 3.0 (в реальном режиме) и WordPerfect 5.1. Стандартные команды и утилиты MS-DOS (такие как PKZIP и т.п.) также работают с эмулятором. Эмулятор MS-DOS прежде всего предназначается для тех, кому MS-DOS нужен только для выполнения нескольких приложений, но в основном используется Linux. Эмулятор, это не полное повторение MS-DOS. Разумеется, если эмулятор не удовлетворяет вашим потребностям, вы можете использовать MS-DOS непосредственно, как и Linux, на одной и той же машине. При использовании загрузчика LILO можно во время загрузки указать, какую загрузить операционную систему. Linux может сосуществовать с другими операционными системами, с той же OS/2. Linux обеспечивает "гладкий" интерфейс для обмена файлами между Linux и MS-DOS. Вы можете примонтировать раздел MS-DOS или гибкий диск под Linux и иметь прямой доступ к файлам MS-DOS, как и к "родным". В настоящее время находится в работе проект, известный как WINE - эмулятор Microsoft Windows для X Window System под Linux. По завершению WINE, пользователи будут иметь возможность выполнять MS-Windows приложения прямо из Linux. Это похоже на эмулятор Windows от Sun Microsystems. В момент написания этих строк WINE все-еще на ранней стадии создания, но имеет хорошие перспективы. В Главе 5 мы поговорим об инструментарии MS-DOS, доступном из Linux. Другие приложения В Linux огромное количество всевозможных приложений, что и следует ожидать от такой "разносторонней" операционной системы. Основная ориентация Linux была на персональные UNIX-вычисления, но она быстро меняется. Все больше его используют в бизнесе и обучении, все больше появляется на рынке всевозможных коммерческих приложений. В Linux доступно несколько реляционных баз, включая Postgres, Ingres, и Mbase. Это полномасштабные профессиональные системы управления базами данных типа клиент-сервер, похожие на имеющиеся на других платформах UNIX. Имеется также коммерческая база /rdb. Прикладные научные пакеты включают FELT (Finite Element Analysis Tool); gnuplot (анализ данных и черчение); Octave (пакет символических вычислений, похожий на MATLAB); xspread ( калькулятор типа spreadsheet); xfractint (X-вариант популярного рекурсивного генератора Fractint); xlispstat (пакет статистики) и многое другое. Другие приложения содержат Spice (проектирование и анализ цепей) и Khoros (аналого/цифровая обработка сигналов и визуализация). Разумеется, есть еще много приложений, которые были или будут перенесены на Linux. Linux обеспечивает полный программный UNIX-интерфейс, удобный в качестве исходной базы для любых приложений в любой научной области. Как и другие операционные системы, Linux не стоит в стороне от компьютерных игр. Это и классические текстовые "подземельные" игры, вроде Nethack и Moria; игры типа MUDs (Multi-User Dungeons, которые позволяют взаимодействовать многим пользователям), вроде DikuMUD и TinyMUD; а также тьма игр в X, таких как xtetris, netrek и Xboard (X11-версия gnuchess). Популярная игра типа перестреляй-их-всех-в-лабиринтах - Doom также перенесена в Linux. Для меломанов Linux поддерживает различные саунд-карты, вроде CDplayer (программа, которая может управлять драйвером CD-ROM, как традиционным CD-плейером), MIDI последовательности и редакторы (позволяющие создавать музыку на синтезаторе или другом, управляемом MIDI инструменте) и саунд-редакторы цифровой записи. Вы не можете найти нужную прикладную программу? Карта программ Linux, приведенная в приложении А имеет большой список пакетов, которые были написаны для Linux или перенесены в него. Список далеко не полный, хотя и перечисляет большое количество пакетов. Другой способ поиска приложений в Linux, это просматривать файлы INDEX на FTP серверах под Linux, если вы имеете доступ в Internet. Оглянитесь вокруг и вы найдете много того, с чем интересно повозиться. Но если вы совершенно не можете найти того, что вам надо, вы всегда можете попытаться перенести нужные приложения в Linux. Большая часть свободно распространяемых программ для UNIX могут быть откомпилированы для Linux, как правило, без больших проблем. Или, если компиляция не проходит, вы сами можете написать соответствующую программу. Если вам нужна коммерческая программа, возможно, что существует ее свободно распространяемый вариант. А может, вы убедите компанию сделать выполняемые версии для Linux. История знает случаи, когда удавалось уговорить компании. 1.5 Относительно Copyright для Linux Общедоступная Лицензия GNU (the GNU General Public License) или кратко GPL. GPL была разработана для проекта GNU ассоциацией Free Software Foundataion. Она устанавливает некоторые положения относительно распространения и модификации "свободнораспространяемых программ". В данном случае "свобода" относится именно к Свободе, а не к стоимости. GPL всегда был источником недопонимания и мы надеемся, что этот обзор поможет вам понять цели и задачи GPL и его влияние на Linux. Полная копия GPL включена в Приложение E. Первоначально Линус Торвальдс выпустил Linux под лицензией более ограничивающей, чем GPL, которая разрешала свободное распространение и модификацию, но запрещала любые денежные расчеты при передаче и использовании. С другой стороны GPL позволяет людям продавать и иметь прибыль со свободно распространяемых пограмм, но но не разрешает ограничивать права других в распространении этих программ любым образом. Прежде всего следует об'яснить, что "свободнораспространяемые программы", под лицензией GPL - это не public domain. Программы public domain - это программы не защищенные с помощью copyright и, фигурально выражаясь, принадлежат "почтенной публике" - обществу. Программы, защищаемые GPL, наоборот, защищают авторские права автора или авторов. Это значит, что программы защищены стандартными международными законами copyright, и что автор программ официально обозначен. Так что из факта свободного распространения программ не следует, что они - public domain. Программы под лицензией GPL не являются также shareware. В общем случае программы shareware принадлежат и копируются автором, а автор требует присылать деньги за использование программы после ее передачи. А программы под GPL могут распространяться бесплатно. GPL также позволяет людям брать и модифицировать программы, а также распространять свои собственные версии программ. Однако всякая производная работа, основанная на программах, защищенных должна быть под защитой GPL. Другими словами, компания не может, взяв и модифицировав Linux, продавать его под ограничительной лицензией. Любые программы, производные от, должны быть также защищены GPL. GPL позволяет распространять и использовать программы бесплатно. Однако, она позволяет человеку или компании распространять программы GPL за деньги и даже получать прибыль от продажи и распространения. Однако, при продаже программ под GPL дистрибутор не может лишить таких прав (свободного распространения) покупателя. То есть, если вы купили где-то программы под GPL, вы можете их свободно распространять, или сами заняться торговлей ими. Сначала это может звучать как противоречие. Как это так, продавать с выгодой для себя программы, когда GPL позволяет любому иметь их бесплатно? Например, предположим, что какая-то компания решила собрать большое число свободнораспространяемых программ на CD-ROM и занятся их распространением. Эта компания должна вернуть деньги для покрытия расходов на производство и дистрибуцию CD-ROM, компания может также решить сделать на этих продажах прибыль. Это разрешается в соответсвии с GPL. Организация, продающая свободнораспространяемые программы, должна следовать определенным ограничениям, выдвигаемым GPL. Первое, они не имеют права ограничить права пользователей, купивших программу. Это значит, что если вы купили CD-ROM с программами под GPL, вы можете бесплатно их копировать и свободно распространять этот CD-ROM, или тоже продавать. Второе, дистрибуторы должны доступным образом доводить до пользователей информацию о том, что эти программы находятся под защитой GPL. Третье, дистрибуторы должны поставить бесплатно полный исходный код распространяемых программ. Это позволит любому, кто купит программы под GPL, модифицировать их. Позволить компаниям распространять и продавать свободнораспространяемые программы - вещь очень хорошая. Не всякий имеет доступ к Internet, чтобы скачать программы, вроде Linux, бесплатно. (прим. переводчика: Правда, сама IP-связь для многих в нашей стране очень и очень даже не бесплатно - во много раз дороже, чем это обходится "среднему американцу". О качестве связи и говорить не хочется). GPL позволяет компаниям продавать и распространять программы среди тех, кто не имеет свободного доступа к программам. Например, многие организации продают Linux на дискетах, лентах или CD-ROM по почтовым заказам и делают на этом свою прибыль. Разработчики Linux могут никогда не увидеть какую-либо прибыль для себя от этих продаж. Вот каким образом регулируются отношения между разработчиками и дистрибуторами, когда программы находятся под лицензией GPL. Другими словами, Линус не спутайте автора с названием ОС Linux знал, что компании могут захотеть продавать Linux, и что он может не увидеть и пенни от этих продаж. В мире свободнораспространяемых программ важным элементом являются деньги. Цель свободнораспространяемых программ - это всегда создание и распространение фантастических программ; чтобы любой мог их свободно достать и использовать. В следующем разделе мы обсудим, как это соотносится с разработкой Linux. 1.6 Проектирование и философия Linux Когда новый пользователь сталкивается с Linux, часто возникают ложные ожидания. Linux - уникальная операционная система, и важно понимать его философию и особенности проектирования, чтобы эффективно его использовать. Даже если вы умудренный годами UNIX-гуру, вы найдете в последующем интересное для себя. В фирмах, разрабатывающих коммерческие UNIX, вся система создается под жестким контролем качества, существует система управления написанием программ, внесением изменений, документированием, информированием о выявленных ошибках и их устранением. Разработчикам запрещено по собственному желанию добавлять какие-то свойства или менять критически важные коды по своему желанию. Они могут вносить изменения только, как реакцию на выявленные ошибки, документировать вносимые изменения так, чтобы можно было систему при необходимости "вернуть назад". Каждый разработчик закреплен за одной или несколькими частями системного кода, и только этот разработчик имеет право исправлять замеченные ошибки. Внутри фирм департаменты контроля качества осуществляют жесткое тестирование всякой новой версии операционной системы. Разработчики обязаны под контролем устранять выявленные ошибки. Существует сложная система статистического анализа, определяющая, сколько ошибок должно быть устранено, чтобы об'явить переход к новой версии. Подход, используемый создателями коммерческого UNIX при написании и сопровождении кодов, весьма сложен и это вполне обоснованно. Фирма должна иметь постоянные и хорошо детализированные подтверждения тому, что следующая версия операционной системы созревает для выпуска на рынок. Отсюда сбор и анализ статистики о работе этой системы. Это очень большая и трудоемкая работа - создавать коммерческий UNIX. Часто настолько большая, что требуются сотни, если не тысячи программистов, специалистов по тестированию, писателей документации, административного персонала. Разумеется, никакие два производителя коммерческого UNIX не похожи друг на друга, но общие принципы именно таковы, как описаны выше. Применительно к Linux вы можете выкинуть из головы вышеописанную концепцию организации разработки большой программной системы, отладки, контроля качества, статистического анализа и т.п. Судя по всему, Linux был и останется хакерской системой. (Что я понимаю под словом "хакер" - это фанатически преданный программированию человек, которому нравится работать на компьютере и делать на нем интересные вещи. Это не соответствует пониманию некоторыми слова "хакер", как обозначения для компьютерного хулигана). Linux первоначально создавался группой энтузиастов в Internet со всего мира. Любой, в Internet и за его пределами, имеющий достаточные знания и навыки, имеет возможность принять участие в совершенствовании и отладке ядра, переносе в Linux новых программ, написании документации, помощи новичкам. Нет определенной организации, отвечающей за развитие системы. Большей частью Linux-сообщество общается через группы по интересам USENET. Существует ряд соглашений для принимающих участие в разработках: например, любой, желающий, чтобы его код был включен в "официальное" ядро, должен написать Линусу Торвальдсy, который проведет тестирование и включит код в ядро (если предлагаемый код вписывается в систему и не противоречит ее принципам - скорее всего он будет включен). Сама по себе система проектируется по открытому принципу. Хотя число вносимых радикальных изменений в систему уменьшается, общая тенденция выдачи новой версии ядра через несколько месяцев (а иногда и чаще) сохраняется. Разумеется, это приблизительная характеристика, она зависит от многих факторов, включая число обнаруженных ошибок, число замечаний пользователей, и то, сколько часов Линус спал в этом месяце. Естественно, не все ошибки выявляются и не все проблемы решаются между выпусками версий. Но когда создается впечатление, что существенные и часто проявляющиеся ошибки устранены и система ведет себя достаточно "стабильно", выпускается новая версия. Это не попытка выпустить безошибочную версию, а желание выпустить версию UNIX, с которой можно работать. Linux прежде всего ориентирован на разработчиков. Все, у кого есть новые программы, которые они хотели бы добавить в систему, обычно делают их доступными для других на "альфа" стадии, т.е. на стадии тестирования теми отважными или еще не уставшими пользователями, которые хотят сокрушать возникающие проблемы первоначального кода. Поскольку Linux-сообщество в большой степени кучкуется вокруг Internet, альфа-программы выкладываются на один или более Linux FTP-сервера (смотрите Приложение C) и посылается письмо в одну из Linux-групп USENET, о том как можно получить и тестировать представленный код. Пользователи, которые скачивают и тестируют эти альфа-программы, могут по почте сообщать результаты, указывать ошибки, задавать вопросы автору. После решения начальных проблем с альфа-кодом, код приобретает статус "бета", при котором он обычно уже достаточно стабилен, хотя и небезгрешен (он работает, но не все еще его ветви полностью работоспособны). Иначе код попадает в разряд "готового", когда он считается полным и правильным. Относительно новых кодов ядра необходимо просить Линуса включить их в стандартное ядро или добавить как факультативную опцию ядра. Следует иметь в виду, что это лишь соглашения, а не правила. Некоторые люди так уверены в своих программах, что не считают нужным публиковать альфа-версию. Так что от разработчика зависит в известной мере и процедура. Вас может несколько удивить столь неупорядоченная система привлечения добровольцев, программирования и отладки UNIX. Может ли она дать вообще положительный результат? Как оказывается, это один из самых эффективных и успешных проектов, когда-либо существовавших. Полностью все ядро было написано без привлечения каких либо частей ранее существовавшего кода. Большая работа была проделана добровольцами по переносу свободно распространяемых программ в Linux. Были написаны библиотеки, создана файловая система, драйверы для многих популярных устройств. Обычно программная система Linux распространяется в виде дистрибутива (distribution), содержащего средства инсталляции и раскрутки системы. Большинству пользователей трудно самим собрать систему из разрозненных частей. Но не существует некоего стандартного дистрибутива - их много, каждый со своими преимуществами и недостатками. О различных дистрибутивах Linux речь пойдет в Разделе 2.1. Несмотря на полноту Linux, вам все равно потребуется немножко ноу-хау по инсталляции и использованию UNIX как такового. Ни один из дистрибутивов Linux не свободен полностью от ошибок, так что вам может потребоваться что-то доделать "вручную" после инсталляции. Пользование UNIX - непростая задача, даже для коммерческих версий UNIX. Если у вас серьезные намерения относительно Linux, имейте в виду, что потребуются значительные усилия и внимание с вашей стороны, чтобы обеспечить нормальную его эксплуатацию. Это справедливо относительно любого UNIX, и Linux не является исключением. Из-за большой разношерстности Linux-сообщества и большого разнообразия в желаниях относительно возможностей системы не все и не для всех может быть быстро реализовано. Замечания для новичков в UNIX Инсталляция и использование вашего личного Linux не требует большой подготовки в UNIX как таковом. Действительно, многие новички в UNIX успешно инсталлируют Linux на своих компьютерах. Разумеется, желательны знания и опыт, но некоторых предварительные требования могут деморализовать. Если вам повезет, вы сможете инсталлировать и начать использовать Linux без каких-либо предварительных знаний по UNIX. Но как только вы столкнетесь с более сложными задачами эксплуатации Linux - инсталляцией новых программ, перекомпиляцией ядра и т.п., базовые знания по UNIX станут необходимыми. К счастью, эксплуатируя свой Linux, вы имеете возможность освоить все существенные особенности UNIX, необходимые для выполнения этих задач. Эта книга содержит достаточно информации для начала работы - Глава 3 является учебным материалом по основам UNIX, а Глава 4 - по работе системного администратора Linux. Вы можете захотеть прочитать эти главы до попытки инсталляции Linux. Информация, содержащаяся там, может быть очень полезной, если вы столкнетесь с проблемами. Никто не сможет превратиться из новичка в ОС UNIX за одну ночь в системного администратора UNIX. Вы должны быть готовы к длительному путешествию, которое вам предстоит. Замечания для UNIX-гуру Даже люди, имеющие длительный опыт работы с UNIX, могут нуждаться в дополнительных знаниях для инсталляции и использования Linux. Существуют аспекты системы, с которыми даже экспертам в UNIX нелишне познакомиться перед началом работы, хотя бы потому, что Linux - это не коммерческий UNIX. Он следовал, скорее всего, другим стандартам и принципам, чем те, к которым вы привыкли ранее. И хотя стабильность системы - важный фактор развития Linux, это не единственный фактор. Возможно, более важной является функциональность. Во многих случаях новый код добавляется в ядро, даже если содержит ошибки и функционально не полон. Существует предположение, что важнее выпустить код, который пользователи могут тестировать и использовать, чем делать его недоступным. Например, WINE (Microsoft Windows Emulator for Linux) имел "официальную" альфа версию до того, как был полностью оттестирован. Linux-сообщество имеет большой шанс поработать с кодом, протестировать его и помочь в его совершенствовании, пока те, кто считают альфа-версию достаточно хорошей для своих нужд, могут ее использовать. Поставщики коммерческих UNIX редко распространяют их таким образом. Если вы уже более десятилетия системный администратор UNIX и работали с коммерческими версиями UNIX, Linux может потребовать времени на привыкание. Эта система современная и динамичная. Новые версии ядра появляются примерно раз в несколько недель. Постоянно появляются новые программы. Еще сегодня ваша система может быть совершенно современной, а уже завтра - каменным веком. Учитывая такую динамику, как удержаться на плаву в мире Linux? Для большинства лучше всего делать частичные усовершенствования, то есть менять только те части, которые, на ваш взгляд действительно нуждаются в обновлении. Например, если вы не используете Emacs, нет смысла регулярно менять его версии на вашем компьютере. Более того, даже если вы приверженец Emacs, не нужно менять версию, если только в новой версии не появились те возможности, которые вам действительно необходимы. Совсем не обязательно всегда иметь самую последнюю версию всего. Мы надеемся, что Linux оправдает или даже превзойдет ваши ожидания, связанные с "доморощенной" UNIX-системой. В самой основе Linux дух свободного программирования, постоянного развития и совершенствования. Linux-сообщество предпочитает экспансию стабильности, и эту концепцию трудно проглотить многим, особенно тем, кто стоит высоко в мире коммерческого UNIX. Нельзя считать Linux совершенством, как и ничто в мире свободно распространяемых программ. Но мы верим, что Linux полон и работоспособен, как и любая другая реализация UNIX. 1.7 Различия между Linux и другими операционными системами Важно понимать различия между Linux и другими операционными системами, такими как MS-DOS, OS/2, а также другими реализациями UNIX для персональных компьютеров. Прежде всего, должно быть ясно, что Linux может счастливо сосуществовать с другими операционными системами на той же машине. Как мы увидим, существуют даже способы взаимодействия операционных систем. Почему Linux? Почему стоит использовать Linux вместо хорошо известных, хорошо оттестированных, хорошо документированных коммерческих операционных систем? Мы можем привести тысячи причин. Одна из наиболее важных - то что Linux - отличный выбор для персональных вычислений в среде UNIX. Если вы разработчик программ в UNIX, зачем дома использовать MS-DOS? Linux позволит вам создавать и тестировать программы для UNIX на вашем персональном компьютере, включая базы данных и приложения для X Window. Если вы студент, то высока вероятность, что университетская компьютерная система работает под UNIX. Linux позволяет вам иметь свой собственный UNIX и перекраивать его по своему вкусу. Инсталляция и использование Linux - также прекрасный путь изучения UNIX, если у вас нет доступа к другим UNIX-машинам. Но не будем зарываться. Linux не для отдельных скромных любителей UNIX на персоналках. Это большая и достаточно сложная система для решения сложных задач и организации распределенных вычислений. Многие фирмы, особенно небольшие, двигаются в сторону Linux, предпочитая его другим UNIX. Университеты считают Linux отлично подходящим для обучения операционным системам. Крупные поставщики программ начинают понимать, какие выгоды сулит свободное распространение операционных систем. Следующий раздел покажет наиболее важные различия между Linux и другими операционными системами. Мы надеемся, что Linux может удовлетворить все ваши вычислительные потребности или (в крайнем случае) значительно расширит возможности вашей вычислительной среды. Имейте в виду, что лучший способ узнать вкус Linux - это на нем поработать. Вам не обязательно даже инсталлировать полную систему, чтобы почувствовать его. Это мы покажем в Главе 2. Linux против MS-DOS Не является чем-то экзотическим одновременно держать на компьютере Linux и MS-DOS. Многие пользователи Linux работают с прикладными пакетами MS-DOS, вроде различных редакторов. Хотя Linux имеет собственные аналоги для таких приложений (например, TeX), существуют разнообразные причины, по которым конкретный человек будет использовать MS-DOS наряду с Linux. Если вся ваша диссертация написана с использованием WordPerfect в MS-DOS, возможно вы не сможете конвертировать его в TeX или какой-то другой формат. Существует много коммерческих приложений для MS-DOS, которых нет в Linux, поэтому, если есть смысл, почему не использовать обе операционные системы. Как вы, очевидно, знаете, MS-DOS не использует полностью функциональные возможности 80386 и 80486 процессоров. С другой стороны, Linux полностью работает в защищенном режиме процессора и реализует все возможности процессора. Вы можете иметь прямой доступ ко всей имеющейся в распоряжении памяти (и сверх того - используя виртуальную RAM). Linux обеспечивает полный UNIX-интерфейс, отсутствующий в MS-DOS. На Linux вы можете просто писать и отлаживать прикладные программы для UNIX, в то время, как это несложно делать под MS-DOS. Мы можем обсуждать плюсы и минусы MS-DOS и Linux бесконечно. Между тем, давайте заметим, что Linux и MS-DOS абсолютно разные системы. MS-DOS - это дешевая ОС (в сравнении с другими операционными системами), и имеет широкую поддержку в мире персональных компьютеров. Ни одна другая ОС для персональных компьютеров не может сравниться с ней по популярности, прежде всего из-за стоимости. Мало кто из владельцев персональных компьютеров может даже представить, что однажды он потратит $1000 или более только на одну операционную систему. Linux же, кстати, вообще бесплатен, так что у вас есть повод подумать. Вы можете сами составить свое впечатление от сравнения Linux и MS-DOS, основываясь на том, насколько они отвечают вашим ожиданиям. Linux - это не для всякого. Если вам всегда хотелось иметь полномасштабный UNIX дома, не совершая больших затрат, Linux может быть как раз то, что вам надо. Существует инструментарий, позволяющий взаимодействовать Linux и MS-DOS. Например, просто получить доступ к файлам MS-DOS из Linux. Есть также эмулятор MS-DOS, позволяющий выполнять многие популярные прикладные пакеты MS-DOS. Эмулятор Microsoft Windows находится на этапе создания. Linux против прочих Ряд других продвинутых операционных систем всходит на горизонте мира персональных компьютеров. В частности, OS/2 фирмы IBM и Windows NT фирмы Microsoft становятся все более популярны по мере ухода пользователей из MS-DOS. Обе OS/2 и Windows NT являются полными многозадачными операционными системами, как и Linux. Чисто технически, OS/2, Windows NT и Linux очень похожи: они имеют похожие интерфейсы с пользователем, систему защиты и т.п. Но главное действительное отличие состоит в том, что Linux есть разновидность UNIX, а отсюда все преимущества принадлежности к UNIX-сообществу. Что делает UNIX столь важным? Это не только самая популярная операционная система для многопользовательских машин, это также база для большей части свободно распространяемых в мире программ. Если у вас есть доступ к Internet, почти все программы, свободно доступные там, написаны именно для UNIX. (Сам Internet в большой степени стоит на UNIX). Существует много различных фирм, производящих UNIX и ни одной, ответственной за его распространение. Существует большая тяга к стандартизации в UNIX-сообществе, которая выражается в концепции открытых систем. Но ни одна фирма не контролирует этот процесс. Поэтому любой производитель (или как показала практика - хакер) может следовать стандартам UNIX (коль скоро на них нет авторских прав). OS/2 и Windows NT принадлежат частным компаниям. Поэтому интерфейс и проектные решения контролируются конкретными фирмами и только эти фирмы могут совершенствовать свои продукты. (Не надейтесь увидеть когда-нибудь в обозримом будущем бесплатную версию OS/2). В некотором смысле такая организация дела имеет преимущества: она обеспечивает жесткую стандартизацию программного и пользовательского интерфейсов. OS/2 есть OS/2, где бы вы ее не обнаружили, то же самое с Windows NT. А интерфейс UNIX постоянно совершенствуется и меняется. Несколько организаций пытаются выработать стандарт программной модели, но эта задача очень сложная. Linux наилучшим образом соответствует стандарту POSIX.1 для программного интерфейса UNIX. Предполагалось, что Linux примкнет еще к ряду движений по стандартизации, но это не стало пока в число главных задач Linux-сообщества. Другие реализации UNIX Существует ряд других реализаций UNIX для 80386 и 80486. Архитектура 80386 сама подталкивает к проектированию UNIX, поэтому многие разработчики воспользовались этим преимуществом. Другие реализации UNIX, учитывавшие особенности архитектуры процессора весьма похожи на Linux. Вы можете убедиться, что почти все коммерческие версии UNIX поддерживают практически одинаковую программную среду и сетевые характеристики. Однако имеются и значительные отличия между Linux и коммерческими UNIX. Прежде всего Linux поддерживает иной спектр аппаратных средств. Linux поддерживает большинство хорошо известных устройств, но поддержка ограничена той аппаратурой, к которой пользователи действительно имеют доступ. Разработчики коммерческих UNIX обычно имеют больший список устройств, хотя Linux и отстает незначительно. Про особенности аппаратуры поговорим в Разделе 1.8. Во-вторых, коммерческие реализации UNIX обычно идут в связке с полным набором документации, а также с обязательствами разработчика по сопровождению. Документация на Linux ограничивается той, которую можно найти в Internet, да еще книжки вроде этой. В Разделе 1.9 мы перечислим документацию и другие источники информации. Коль скоро речь идет о стабильности и надежности, многие пользователи отмечают, что Linux по крайней мере не менее надежен, чем коммерческие UNIX. Linux все еще находится в стадии развития, и некоторые вещи (вроде TCP/IP) недостаточно стабильны, но постоянно совершенствуются. Наиболее важным фактором для многих является цена. Linux распространяется свободно, если вы имеете доступ в Internet (или другую компьютерную сеть) и можете его скачать. Если у вас нет выхода в такую сеть, то вы можете купить его на дискетах или CD-ROM (смотрите Приложение B). Разумеется, вы можете скопировать Linux у друга или разделить с кем-то стоимость его покупки. Если вы планируете инсталлировать Linux на большом количестве машин, вам достаточно купить всего одну копию. На тиражирование нет лицензионных ограничений. Не следует преуменьшать реальную стоимость коммерческих UNIX, поскольку наряду со стоимостью собственно программ, сюда входят также стоимость документации, сопровождение, гарантия качества. Это очень важные составляющие для больших организаций, но, может быть, не столь существенные для индивидуальных пользователей. В любом случае, во многих фирмах и в университетах считают, что использование Linux в лабораториях на недорогих персональных компьютерах предпочтительнее коммерческого UNIX в лаборатории, укомплектованной рабочими станциями. Как пример из "реального мира", можно сказать о том, что Linux путешествовал по северу Тихого океана, выполняя работу по телекоммуникации и анализу данных на океанографическом исследовательском судне. Linux используется на исследовательской станции в Антарктике. Несколько госпиталей используют Linux для ведения историй болезни. Он доказал, что он надежен и удобен, как и другие реализации UNIX. Существуют и другие бесплатные или недорогие реализации UNIX для 386 и 486. Одна из наиболее известных реализаций 386BSD. 386BSD совместима с Linux во многих аспектах, но какая из них "лучше" зависит от ваших личных желаний и ожиданий. Мы можем указать одно существенное отличие: Linux создавался открыто (когда каждый доброволец мог внести свой вклад в процесс создания), а 386BSD создан замкнутой группой программистов, которые и поддерживают систему. Поэтому существует заметное различие в философии и разработке между этими двумя проектами. Цели двух проектов существенно различны: цель Linux - создать полную UNIX-систему от начала (и получить большое удовольствие от этого процесса); а цель 386BSD частично состоит в модификации существующего кода BSD, применительно к 386. NetBSD - это другая версия BSD NET/2 для нескольких машин, включая 386. NetBSD имеет слегка более открытую концепцию разработки и сравнима с 386BSD по многим аспектам. Другой проект HURD - попытка Free Software Foundation создать и распространять свободную версию UNIX для многих платформ. За дополнительной информацией об этом проекте обращайтесь в Free Software Foundation (адрес дан в Приложении А). В момент написания книги проект HURD все еще на начальной стадии. Существуют также другие недорогие версии UNIX, например Coherent (приблизительно $99) и Minix (академический, но полезный UNIX, на котором первоначально базировался Linux). Некоторые из этих реализаций представляют преимущественно академический интерес, в то время, как другие - нормальные полномасштабные системы. Нет смысла говорить о том, как много индивидуальных пользователей UNIX двигаются в сторону Linux. 1.8 Требования к оборудованию Вы должны быть убеждены, что Linux прекрасен и что вы пополните его грандиозными вещами. Но это потом, а до того, как броситесь его инсталлировать, вы должны сориентироваться в требованиях к аппаратуре, которые диктует Linux. Имейте в виду, что Linux был создан самими пользователями. Это означает, что большая часть поддерживаемого Linux оборудования - это то, что пользователи реально у себя имеют. Как в результате оказалось - большая часть популярной периферии для 80386/80486 поддерживается (действительно, Linux поддерживает оборудование, которое в ряде случаев не поддерживают некоторые коммерческие UNIX). Хотя некоторые достаточно экзотические устройства пока не поддерживаются. Если какое-то из облюбованных вами устройств пока не поддерживается в Linux, есть смысл надеяться, что оно скоро будет поддерживаться. Многие компании лицензируют интерфейс устройств, поэтому добровольные разработчики Linux просто не могут написать эти драйверы. Иначе это будет нарушением авторских прав соответствующей компании. Мало что можно изменить в этой ситуации. Иногда хакеры пишут драйверы, основываясь на своих представлениях о конкретном интерфейсе. В других случаях разработчики с разной степенью успеха пытаются работать с соответствующими компаниями, пытаясь получить информацию об интерфейсе. В следующем разделе мы попытаемся дать резюме технических требований Linux. Linux Hardware HOWTO (смотрите Раздел 1.9) содержит более полный перечень оборудования, поддерживаемого Linux. Большая часть драйверов Linux в настоящее время находится в стадии разработки. Различные дистрибутивы могут содержать разные наборы драйверов. Здесь прежде всего перечисляются те драйверы, которые уже поддерживаются определенное время и зарекомендовали себя как достаточно стабильные. (Дополнительную информацию по дистрибутивам смотрите в Разделе 2.1). Требования к материнской плате и процессору В настоящее время Linux поддерживает системы на Intel 80386, 80486 или Pentium CPU. Это включает все вариации этих процессоров, такие как 386SX, 486SX, 486DX и 486DX2. С Linux могут работать также "неинтеловские" клоны процессоров, вроде AMD и Cyrix. Если у вас 80386 или 80486SX, вы можете также иметь сопроцессор, хотя это и не обязательно, (ядро Linux может эмулировать FPU). Поддерживаются все стандартные сочетания FPU, такие сопроцессоры как IIT, Cyrix FasMath и Intel. Материнская плата должна использовать шину ISA или EISA. Это определяет, как система взаимодействует с периферией и другими компонентами главной шины. Большинство продаваемых сегодня систем имеют ISA или EISA. Шина MicroChannel (MCA) фирмы IBM, используемая на машинах типа IBM PS/2, пока не поддерживается. Поддерживаются системы с локальными шинами, ускоряющими доступ к видео и дискам. Предполагается, что у вас стандартная локальная шина, вроде VESA Local Bus (VLB). Требования к памяти Linux требует совсем немного памяти в сравнении с другими развитыми операционными системами. Вы должны иметь как минимум 2Мбайт RAM; хотя настоятельно рекомендуется иметь не менее 4 Мбайт. Чем больше памяти - тем быстрее работает система. Linux может поддерживать все 32-битовое адресное пространство процессоров 386/486; другими словами, он автоматически использует всю память. Linux может успешно работать на 4 Мбайтах RAM, включая всяческие свистульки и погремушки, вроде X Window, Emacs и т.п. Хотя, иметь побольше памяти не менее важно, чем иметь помощнее процессор. 8 Мбайт более подходит для индивидуального использования; 16 Мбайт или более - если вы предполагаете более серьезную загрузку системы. Большинство пользователей Linux выделяют часть жесткого диска для области своппинга, которая используется как виртуальная RAM. Если даже вы имеете много реальной физической памяти, RAM, вы можете пожелать иметь область своппинга. Хотя область своппинга не заменяет действительной физической памяти, она может позволить выполнять на вашей системе более об'емные приложения, удаляя неактивную часть программы на диск. Размер области своппинга, которую вы должны выделить, зависит от нескольких факторов; мы вернемся к этому в Разделе 2.2.3. Требования к драйверам жесткого диска Вам не обязательно иметь драйвер жесткого диска для работы в Linux. Вы можете работать с минимальной системой с гибкого диска. Но это медленно и имеет много ограничений, да и большинство пользователей имеет доступ к памяти на жестких дисках. У вас должен быть 16-ти битный контроллер в стандарте AT. В ядре есть поддержка 8-ми битного XT-стандарта; хотя разумеется, большинство контроллеров использует сегодня AT-стандарт. Linux может поддерживать все MFM, RLL и IDE контроллеры. Поддерживается большинство (но не все) ESDI контроллеры - только те, которые обеспечивают эмуляцию ST506. Общее правило для не-SCSI драйверов жестких дисков состоит в том, что если вы можете иметь доступ к этим устройствам из MS-DOS или другой ОС, значит вы можете работать с ними и в Linux. Linux может также поддерживать многие популярные SCSI контроллеры, хотя поддержка SCSI ограничена из-за большого разнообразия существующих стандартов таких интерфейсов. Поддержка SCSI контроллеров включает Adaptec AHA1542B, AHA1542C, AHA1742A (BIOS version 1.34), AHA1522, AHA1740, AHA1740 (SCSI-2 controller, BIOS 1.34 in Enhanced mode); Future Domain 1680, TMC-850, TMC-950; Seagate ST-02; UltraStor SCSI; Western Digital WD7000FASST. Также должны работать клоны, базирующиеся на этих картах. Требования к дисковому пространству Разумеется, для инсталляции Linux вам необходимо иметь некоторое свободное пространство на жестком диске. Linux поддерживает различные драйверы жестких дисков на одной машине; вы можете выделить место для нескольких устройств, если это необходимо. Размер необходимого пространства зависит в большой степени от ваших потребностей и программ, которые вы инсталлируете. Linux сравнительно компактный UNIX; вы можете для всей системы занять 10 - 20 Мбайт. Между тем, если вы хотите иметь место для расширения и для больших пакетов, вроде X Window, вам потребуется больше места. Если вы планируете множественный доступ, вам потребуется иметь место и для файлов других пользователей. Кроме того, даже если вы имеете большое количество физической RAM (16 Мбайт или более), скорее всего вы захотите иметь область своппинга, используемую виртуальной памятью. Детали мы обсудим в Разделе 2.2.3. Каждый дистрибутив Linux обычно сопровождается какой-то литературой, которая может помочь вам определиться с об'емом необходимой памяти в зависимости от того, какое программное обеспечение вы планируете поставить. Минимальную систему вы можете эксплуатировать менее, чем на 20 Мбайтах. Полная система со всеми свистульками и погремушками потребует до 80 Мбайт. Очень большие системы для многих пользователей, где зарезервировано место для последующих расширений, потребует 100 - 150 Мбайт. Но это лишь грубые прикидки, которые вы уточните исходя из своих потребностей. Требования к монитору и видеоадаптеру Linux поддерживает все стандарты Hercules, CGA, EGA, VGA, IBM monochrome, and Super VGA видео карт и текстовые мониторы. В общем случае, если видеокарта и монитор работают под другими ОС вроде MS-DOS, они будут работать и под Linux. Оригинальные карты IBM CGA дают в Linux "снег", так что их неприятно использовать. Графическое окружение вроде X Window имеет свои требования к видеооборудованию. Вместо перечисления этих требований мы перенесем обсуждение в Раздел 5.1.1. А кратко, для работы с X Window System на вашем Linux, вам требуется одна из видеокарт, перечисленных в этом разделе. Прочее оборудование У большинства пользователей есть "специфическое" оборудование, вроде стриммера, памяти на CD-ROM, саунд карты и т.д., поэтому они интересуются, поддерживается ли оно в Linux. Читайте дальше. Мышь и другие устройства, подключаемые к портам Большей частью мышь вы будете использовать в графическом окружении, таком как X Window System. Но некоторые приложения Linux, не ассоциируемые с графической средой, также используют мышь. Linux поддерживает все стандарты последовательно подключенной мыши, включая Logitech, серию MM, Mouseman, Microsoft (2-кнопки) и Mouse Systems (3-кнопки). Linux также поддерживает мышь, подключенную на шину: Microsoft, Logitech и ATIXL. Поддерживается также интерфейс мыши PS/2. Все прочие подключаемые таким же образом устройства, которые эмулируют вышеперечисленных мышей, тоже должны работать. Память на CD-ROM Почти все драйверы CD-ROM используют интерфейс SCSI. Если у вас есть SCSI-адаптер, поддерживаемый Linux, то ваш CD-ROM должен работать. Проверена работоспособность ряда драйверов для СD-ROM под Linux, включая NEC CDR-74, Sony CDU-541 и Texel DM-3024. Linux поддерживает также драйверы Sony internal CDU-31a и Mistsumi CD-ROM. Linux поддерживает также стандарт ISO-9660 файловой системы для CD-ROM. Драйверы стриммеров Сейчас на рынке имеется ряд стриммеров. Большинство из них используют SCSI-интерфейс и практически все поддерживаются Linux. Среди проверенных устройств Sankyo CP150SE; Tandberg 3600; Wangtek 5525ES, 5150ES и 5099EN с адаптером PC36. Другие QIC-02 устройства также должны поддерживаться. Идет постоянная разработка драйверов для различных новых устройств, таких как Colorado, который вешается на контроллер гибкого диска. Принтеры Linux поддерживает весь спектр параллельных принтеров. Если вы можете подключить ваш принтер на параллельный порт в MS-DOS или в другой операционной системе, то он может работать и в Linux. Программная поддержка принтера в Linux состоит из стандартных для UNIX программ lp и lpr. Эти программы позволяют также организовать удаленную печать через сеть. Модемы Как и с поддержкой принтеров, Linux поддерживает полный спектр последовательных модемов, как внешних, так и внутренних. В Linux много программ телекоммуникации, включая Kermit, pcomm, minicom и Seyon. Если ваш модем может работать с другой операционной системой, вы сможете с ним работать и в Linux без каких-либо проблем. Карты Ethernet Многие популярные карты Ethernet и LAN-адаптеры поддерживаются в Linux. Они включают: * 3com 3c503, 3c503/16 * Novell NE1000, NE2000 * Western Digital WD8003, WD8013 * Hewlett Packard HP27245, HP27247, HP27250 * D-Link DE-600 Есть сведения о работе следующих клонов: * LANNET LEC-45 * Alta Combo * Artisoft LANtastic AE-2 * Asante Etherpak 2001/2003, * D-Link Ethernet II * LTC E-NET/16 P/N 8300-200-002 * Network Solutions HE-203, * SVEC 4 Dimension Ethernet * 4-Dimension FD0490 EtherBoard 16 Должны также работать и любые другие клоны, совместимые с перечисленными выше. 1.9 Источники информации по Linux Как вы, возможно, догадались, существует много источников информации по Linux помимо этой книги. В частности, есть ряд книг, не конкретно по Linux, а скорее по UNIX вообще, которые могут очень помочь, особенно тем, кто не имеет предварительного опыта в UNIX. Если вы не знакомы с миром UNIX, мы настоятельно советуем вам уделить время одной из таких книг, прежде чем храбро ринуться в джунгли Linux. В качестве хорошего начала может быть использована книга Grace Todino и John Learning the UNIX Operating System. Многие из нижеупомянутых источников доступны он-лайн в электронном виде. То есть для того, чтобы ими воспользоваться, вы должны иметь доступ к Internet, USENET или Fidonet. Если у вас нет он-лайн доступа к этим материалам, то следует найти добряка, который сделает вам твердую копию. Документация, доступная по он-лайн Если у вас есть доступ к Internet, вы можете найти много документации по Linux через anonymous FTP из архивов, расположенных по всему миру. Если же вы не имеете прямого доступа к Internet, эту документацию все-таки можно достать: много дистрибутивов Linux, содержащих документы, упомянутые здесь, продается на CD-ROM. Они также распространяются по многим другим сетям, вроде Fidonet и CompuServe. Если вы в состоянии послать почту в Internet, значит вы можете достать и эти файлы, используя один из ftpmail-серверов, которые пошлют вам документы или файлы электронной почтой из FTP-архивов. Смотри в Приложении C дополнительную информацию по использованию ftpmail. Существует большое число FTP-архивов, содержащих тексты программ Linux и соответствующую документацию. Список известных архивов Linux дан в Приложении C. Для того, чтобы минимизировать сетевой трафик, всегда следует использовать FTP-сервер, находящийся в географической близости. Приложение A содержит список документации на Linux, доступной через anonymous FTP. Имена файлов будут различаться на разных серверах. Большинство серверов хранит документацию на Linux в подкаталоге docs Linux-овского архивного подпространства. Например, на FTP сервере sunsite.unc.edu файлы Linux помещены в каталог /pub/Linux , а документация по Linux - в /pub/Linux/docs. Примеры доступной документации - это Linux FAQ (Frequently Asked Questions), собрания часто задаваемых вопросов (в данном случае) по Linux; документация Linux HOWTO, описывающая специфические аспекты системы, включая Installation HOWTO, Printing HOWTO, Ethernet HOWTO и Linux META-FAQ - перечень других источников информации по Linux в Internet. Большинство этих документов регулярно посылается в несколько относящихся к Linux групп USENET; смотрите Раздел 1.9.4. Linux И WWW (World Wide Web) Начальная страница (Home Page) Документации на Linux доступна на WWW по адресу http://sunsite.unc.edu/mdw/linux.html Эта страница содержит много HOWTO и других документов в формате HTML, а также ссылки на другие сервера, интересные для пользователей Linux. Книги и другие публикации В настоящее время существует всего несколько публикаций специально посвященных Linux. Большей частью это книги из Linux Documentation Project (LDP) - проекта, реализуемого в Internet по написанию и распространению "руководств" по Linux. Эти руководства аналогичны документации, поставляемой с коммерческими версиями UNIX: они покрывают все - от инсталляции Linux до его использования, программирования, работы в сети, разработки ядра и т.д. Руководства LDP доступны через FTP-серверы Internet, а также по обычной электронной почте из нескольких источников (см. Приложение А). И хотя собственно по Linux книг немного, тем не менее есть большое число книг по UNIX вообще, которые, без сомнения, могут использоваться применительно к Linux, поскольку Linux не имеет значительных отличий от других реализаций UNIX. Короче, все, что вы хотите узнать о программировании на Linux, может быть найдено в этих книгах, предназначенных для широкой аудитории пользователей UNIX. А здесь мы представляем наиболее важные специфические детали Linux и надеемся, что вы также будете обращаться за деталями и к другим источникам. Вооружившись некоторым количеством хороших книжек по UNIX, а также данной книгой, вы будете способны разобраться во всем. Приложение А включает список настоятельно рекомендуемых книг по UNIX, как для новичков в UNIX , так и для асов. Есть также ежемесячный журнал по Linux, под названием Linux Journal. Он распространяется по всему миру и представляет хорошую возможность быть в курсе происходящего в Linux- сообществе, особенно, если вы не имеете доступа к новостям USENET (см. ниже). Относительно подписки на Linux Journal см. Приложение А. Новости USENET USENET - это мировые электронные новости и одновременно клубы по интересам - так называемые ``newsgroups''( у нас принято говорить - "телеконференции"). Многое по развитию Linux делается через Internet и USENET, так что не удивляет существование ряда телеконференций USENET, посвященных Linux. Первоначально была создана телеконференция alt.os.linux, чтобы вынести дискуссии по Linux из comp.os.minix. Но скоро трафик alt.os.linux вырос настолько, что в феврале 1992 года было проведено голосование о включении конференции в иерархию "comp" и создана телеконференция comp.os.linux. comp.os.linux быстро стала одной из наиболее популярных (и шумных) телеконференций USENET, более популярной, чем другие группы иерархии comp.os. В декабре 1992, в результате голосования группа была разбита, чтобы уменьшить об'емы трафика, но только comp.os.linux.announce прошла тогда по голосованию. В июле 1993 , наконец-то группа была разбита на иерархию групп. За это проголосовало около 2000 человек - одно из самых больших голосований в истории USENET. Если у вас нет прямого доступа к USENET, но имеется возможность посылать и получать письма по e-mail, то в Internet существуют шлюзы, через которые можно получать телеконференции: comp.os.linux.announce это модерируемая (контролируемая) телеконференция, содержащая об'явления и важные сообщения относительно Linux (например, сообщения об ошибках, существенные исправления и т.п.). Если вы вообще собираетесь читать телеконференции Linux - эту читайте обязательно. Часто важные сообщения этой конференции не дублируются в другие. Также в этой же телеконференции бывают важные оперативные сообщения. Любое сообщение в этой группе должно быть одобрено модераторами Matt Welsh и Lars Wirzenius. Если вы хотите выставить свое сообщение в этой группе, вы обычным порядком посылаете его в телеконференцию. Оно автоматически будет направлено для одобрения модератору. Но если ваша система новостей не настроена, можно направить статью электронной почтой по адресу linux-announce@tc.cornell.edu. Все остальные телеконференции этой иерархии linux, перечисленные ниже - немодерируемые. comp.os.linux.help Это наиболее популярная телеконференция Linux. Она предназначена для вопросов и ответов по использованию, установке и другим вопросам эксплуатации Linux. Если у вас проблемы с Linux - пишите в эту группу и с большой вероятностью получите ответ от кого-нибудь, способного вам помочь. Но очень желательно ознакомиться со всеми доступными вам материалами, прежде, чем задавать вопрос. comp.os.linux.admin Здесь обсуждаются вопросы эксплуатации Linux (обычно в многопользовательском режиме) Обсуждается работа администратора системы Linux (например, сохранение системы, работа с пользователями и т.п.). comp.os.linux.development Эта телеконференция для обсуждения проблем развития Linux. Вопросы, касающиеся ядра, системных библиотек и системных программ. Например, если вы пишете драйвер и нуждаетесь в помощи по некоторым деталям программирования - как раз в эту телеконференцию следует посылать такие вопросы. Эта конференция предназначена также для обсуждения целей и направления развития Linux, как это описывалось в Разделе 1.6. Следует заметить, что эта телеконференция для обсуждения проблем разработки собственно Linux. Прикладное программирование в Linux обсуждается в других телеконференциях. comp.os.linux.misc Эта телеконференция для обсуждения проблем, не подходящих для других групп. Особенно для "защитников" Linux (для статей типа "Linux против Windows NT"). Всякие нетехнические окололинуксовские споры могут происходить здесь. Следует заметить, что телеконференция comp.os.linux была заменена иерархией телеконференций. Если у вас есть доступ к comp.os.linux и нет доступа к другим телеконференциям этой иерархии, вдохновите администратора их завести. Списки рассылки Internet Если у вас есть доступ к электронной почте Internet, вы можете включиться в списки рассылки, даже если вы не имеете доступа к USENET. Даже если вы не можете работать непосредственно в Internet, но можете обмениваться с ней почтой (например, UUCP, FidoNET, CompuServe и другие сети имеют почтовую связь с Internet), вы можете подключиться к какому-то списку рассылки. Список рассылки ``Linux Activists'' предназначен для разработчиков Linux и людей, заинтересованных в содействии процессу разработки. Это "многоканальная" рассылка; можно подключиться к разным ее ветвям: NORMAL - общие вопросы Linux; KERNEL - разработка ядра; GCC - разработка gcc-компилятора и библиотек; NET - протоколы TCP/IP; DOC - документация по Linux; и другие. За дополнительной информацией о списках рассылки, связанных с Linux, пишите: linux-activists@niksula.hut.fi Вы сможете получить действующий перечень тем рассылки, включая информацию о том, как включиться в список рассылки и как отписаться. Существует несколько списков рассылки для Linux. Лучше всего для ориентации посмотреть об'явления в телеконференциях Linux USENET, а также просмотреть списки тем рассылки, периодически публикуемые в USENET group news.answers. 1.10 Получение помощи Без сомнения, вам понадобится какая-то помощь во время ваших приключений в мире Linux. Даже самые крутые из крутых юниксистов временами спотыкаются о какие-то закорючки Linux, поэтому важно знать, где и как искать помощи, когда потребуется. Первоочередной источник помощи - списки рассылки и телеконференции USENET обсуждались в Разделе 1.9. Если у вас нет к ним онлайнового доступа, вы можете поискать доступ к такой информации на локальных BBS, в CompuServe и т.д. Ряд фирм предлагают коммерческую поддержку Linux. Вы можете платить за "подписку", что позволит вам созваниваться с консультантами по поводу возникающих проблем с Linux. Но при наличии доступа к USENET и почте Internet вы можете найти и бесплатное сопровождение. Но сначала ищите ответы во всей доступной вам документации! Прежде всего в источниках, перечисленных в Разделе 1.9 и Приложении A. Эти документы тщательно написаны для людей вроде вас, которые нуждаются в помощи при работе с Linux. Даже книги, написанные про UNIX вообще, применимы к Linux и вы должны извлекать из них пользу для себя, и как правило, найдете ответы на интересующие вас вопросы. Приучайтесь к самостоятельности. В большинстве случаев предпочтительно самостоятельно исследовать проблему насколько возможно, прежде чем обращаться за помошью. Прежде всего обращайтесь за помошью к самому Linux. Помните, что Linux некоммерческая ОС и никогда не пыталась таковой выглядеть. Вы не умрете, если сами займетсь хакерством. Это приучит вас самостоятельно решать проблемы, может через некоторое время вы сами почувствуете себя в Linux гуру. Сохраняйте спокойствие. Ни в коем случае не приходите в отчаяние в результате общения с системой. Вы ничего не доб'етесь от системы с помощью топора или, того лучше, с помощью мощного электромагнита. Linux взрослеет и мужает, становится надежнее, так что мы надеемся, что число проблем будет уменьшаться. Кстати, всяких фокусов можно ожидать и от коммерческих UNIX-ов. Воздерживайтесь от скоропалительных решений. Многие люди бросаются рассылать письма по конференциям до того, как спокойно подумают. Часто решение находят через пять минут после того, как закончили взывать о помощи к мировому сообществу. Если вы решили послать просьбу о помощи, постарайтесь это сделать наилучшим образом. Постарайтесь оформить просьбу максимально вежливо и предельно информативно. Не забывайте, что помощь в сети оказывается добровольно. 2 Приобретение и инсталляция Linux Содержимое этого раздела В этой главе мы опишем, как приобрести Linux в виде подготовленных дистрибутивов и как их инсталлировать. Мы уже говорили, что не существует "официального" дистрибутива Linux. Существует много дистрибутивов, каждый из которых хорош для определенных целей. Эти дистрибутивы можно взять с ftp-серверов Internet, с BBS, на дискетах и CD-ROM. Здесь мы дадим общую картину процесса инсталляции. Каждый дистрибутив имеет свои конкретные инструкции по инсталляции, но вооруженные представленной здесь общей концепцией, вы сможете хорошо ориентироваться в существе этого процесса. Приложение А дает список источников информации, к которым можно обратиться, если вы окончательно запутаетесь. Эта книга имеет дополнительные разделы, связанные с деталями Slackware-дистрибуции Linux. 2.1 Дистрибуции Linux Поскольку Linux относится к свободно распространяемым программам, не существует организации или личности, отвечающей за его сопровождение. Поэтому каждый волен формировать и распространять дистрибутивы Linux, находясь в рамках GPL (General Public License). В результате, множество вариантов дистрибутивов Linux можно взять на FTP-серверах или по электронной почте. Поэтому вы сталкиваетесь с проблемой, какой дистрибутив Linux вам нужен. Дистрибутивы бывают разные. Есть "всеоб'емлющие" дистрибутивы, содержащие все, что может использоваться в системе. Другие дистрибутивы Linux "маленькие", предназначены для пользователей, не обладающих неисчерпаемыми запасами дискового пространства. Многие дистрибутивы содержат только базовые программы Linux и предполагают в дальнейшем самостоятельную инсталляцию больших пакетов, вроде X Window System. (В Главе 4 мы опишем, как это делается). В Приложении А содержится список дистрибутивов Linux, доступных по Internet и электронной почте. Как выбрать из возможных дистрибутивов? Если у вас есть доступ к новостям USENET или другой системе компьютерных телеконференций, вы можете спросить мнение тех людей в сети, кто уже имеет опыт инсталляции Linux. Еще лучше - попросить помощи у знающего Linux, кого, в свою очередь, знаете вы. Надо учитывать много факторов при выборе дистрибутива, но мнения различных людей на этот счет различны. Но на самом деле большинство популярных дистрибутивов Linux содержат примерно один и тот же набор программ, так что можно выбирать, не очень мучаясь. В этой книге обсуждаются инсталляции популярных дистрибутивов Linux Slackware и Slackware Pro. Получение Linux из Internet Если у вас есть доступ к Internet, простейший способ получить Linux - это по FTP. Если вы не имеете прямого доступа к Internet, вы можете получить Linux через сервис ftpmail по электронной почте. См. приложение C. В приложении C дан список некоторых FTP-серверов с архивами, содержащими Linux. Один из них - sunsite.unc.edu, где различные дистрибутивы могут быть найдены в каталоге /pub/Linux/distributions Многие дистрибутивы хранятся в виде образов дискет. То есть дистрибутив состоит из множества файлов, каждый из которых содержит двоичный образ дискеты. Для того, чтобы скопировать содержимое на дискету, вы должны использовать программу RAWRITE.EXE под MS-DOS. Эта программа копирует поблочно содержимое файла на дискету, не анализируя формат диска. Если у вас есть доступ к UNIX-станции с дисководом, вы можете также использовать команду dd для копирования образа файла прямо на дискету. Команда, вроде dd of=/dev/rfd0 if=foo bs=18k'' осуществит прямое копирование содержимого файла foo на дискету на Sun-станции. Проконсультируйтесь у местных спецов по UNIX относительно использования команды dd. Программу RAWRITE.EXE можно взять на многих Linux FTP-серверах, включая sunsite.unc.edu, в каталоге /pub/Linux/system/Install/rawrite Во многих случаях вы просто считываете множество образов дискет и используете RAWRITE.EXE для каждого образа, чтобы создать дискету. Вы загружаетесь с так называемой "boot"-дискеты и можете далее скидывать систему. Как правило, программы инсталлируются прямо с дискет, хотя некоторые дистрибутивы позволяют инсталлировать из разделов MS-DOS винчестера. Некоторые дистрибутивы позволяют инсталлировать по сети, посредством TCP/IP. Документация на каждый дистрибутив должна описывать допустимые методы инсталляции. Другие дистрибутивы Linux инсталлируются с дискет в формате MS-DOS. Например, дистрибутив Linux Slackware требует создания с помощью RAWRITE.EXE только дискет boot и root. Остальные дискеты копируются на дискеты в формате MS-DOS командой MS-DOS COPY. Система инсталлируется прямо с дискет MS-DOS. Это избавляет вас от необходимости долго пользоваться RAWRITE.EXE, но предполагает доступность MS-DOS для создания дискет. Каждый дистрибутив, доступный по FTP, должен содержать файл README, описывающий, как скидывать на дискеты и как их готовить для инсталляции. Обязательно прочитайте всю доступную документацию относительно вашей версии. При перекачке Linux необходимо использовать режим перекачки двоичных файлов (для большинства FTP-клиентов это команда "binary"). В Разделе 2.1.4 описывается получение дистрибутива Slackware по Internet. Получение Linux из других он-лайн источников Если вы имеете доступ к другим сетям, вроде CompuServe или Prodigy, то в них могут быть свои средства перекачки файлов. Кроме того, существует множество BBS, на которых есть Linux. Список Linux BBS дан в Приложении D. Не все дистрибутивы Linux доступны через эти сети, многие дистрибутивы на CD-ROM распространяются только почтой. Получение Linux по почте Если у вас нет доступа к Internet или BBS, множество дистрибутивов Linux можно получить по почте на дискетах, лентах, лазерных дисках. В Приложении B дан список таких дистрибуторов. Многие из них принимают оплату по кредитным карточкам и платежным поручениям, так что если вы живете даже не в США или Канаде, вы все равно сможете таким образом приобрести дистрибутив Linux. Linux относится к свободно распространяемым программам, хотя его распространение и происходит под лицензией GPL. Поэтому пересылка Linux по почте может стоить вам US$30 - US$150, в зависимости от варианта дистрибутива. Однако, если вы знаете кого-либо, кто уже приобрел и скинул себе Linux, вы можете взять взаймы или скопировать его. Дистрибуторам Linux запрещено накладывать ограничения на его распространение в любой форме. Даже если вы намереваетесь инсталлировать Linux на все компьютеры вашей лаборатории, вам достаточно купить один экземпляр дистрибутива у любого из дистрибуторов. Получение Slackware Slackware - популярная дистрибуция Linux, сопровождаемая Patrick Volkerding. С Patrick Volkerding можно связаться по Internet: volkerdi@mhd1.moorhead.msus.edu. Эта версия легко инсталлируется и достаточно полна. Она может быть получена по Internet, а также на CD-ROM от ряда поставщиков (см. Приложение B). Дистрибуция Slackware состоит из "наборов дисков" (``disk sets''), каждый из которых содержит конкретный тип программ (например, набор "d" содержит средства разработки development tools, такие как gcc-компилятор, и набор "x", содержащий X Window System). Вы можете выбирать, какие наборы инсталлировать; другие наборы вы можете инсталлировать позже. Версия Slackware, описанная здесь - это версия 2.0.0, от 25 июня 1994. Инсталляция более поздних версий должна быть во многом аналогична. Наборы дисков Slackware К сожалению, Slackware не имеет полного списка потребностей памяти для каждого набора. Вам потребуется не менее 7 Мбайт для инсталляции лишь серии "A"; очень грубая оценка необходимого дискового пространства - от 2 до 2.5 Мбайт на дискету. Имеются следующие наборы дисков: A Базовая система. Достаточная для начала работы и делает доступными команды elvis и comm (elvis - текстовый редактор, comm - сравнение файлов). Базируется на ядре 1.0.9 и новом стандарте файловой системы (FSSTND). Известно, что эти диски хорошо размещать на дискетах 1.2M (что не характерно для остальных частей Slackware). Если у вас в распоряжении только дисковод на 1.2M, вы все равно можете инсталлировать базовую систему, сбросив другие диски и инсталлировать их с жесткого диска. AP Различные приложения и дополнения, вроде руководства, groff, ispell (GNU and international versions), term, joe, jove, ghostscript, sc, bc, и quota patches. D Разработка программ. GCC/G++/Objective C 2.5.8, make (GNU и BSD), byacc и GNU bison, flex, the 4.5.26 C libraries, gdb, kernel source for 1.0.9, SVGAlib, ncurses, clisp, f2c, p2c, m4, perl, rcs. E GNU Emacs 19.25. F Набор Часто Задаваемых Вопросов (FAQs) и другая документация. I Info-страницы для GNU-программ. Документация для различных программ, читаемая с помощью info или Emacs. N Сетевые программы. TCP/IP, UUCP, mailx, dip, deliver, elm, pine, smail, cnews, nn, tin, trn. OOP Об'ектно-Ориентированное Программирование. GNU Smalltalk 1.1.1 и Smalltalk Interface to X (STIX). Q Исходники Alpha-ядра (во время написания книги - Linux 1.1.18). TCL Tcl, Tk, TclX, blt, itcl. Y Игры. Набор игр BSD и Tetris для терминалов. X Базовая система XFree86 2.1.1 с libXpm, fvwm 1.20 и xlock. XAP X-приложения: X11 ghostscript, libgr13, seyon, workman, xfilemanager, xv 3.01, GNU chess и xboard, xfm 1.2, ghostview, и различные X-игры. XD Программы работы в X11. X11 библиотеки, сервер linkkit, поддержка PEX. XV Xview 3.2 release 5. XView библиотеки, виртуальный и невиртуальный Open Look window-менеджеры. IV Interviews библиотеки, include-файлы, doc и idraw приложения. OI ParcPlace's Object Builder 2.0 и Object Interface Library 4.0. Обратите внимание, что она работает только с libc-4.4.4, но будет новая версия, как только станет доступным gcc 2.5.9. T Системы форматирования TeX и LaTeX. Вы обязательно должны взять набор "A", остальные по желанию. Мы советуем инсталлировать наборы A, AP и D, а также X, если вы планируете использовать X Window System. Получение Slackware из Internet Версии Slackware Linux на многих FTP-серверах мира. В Приложении C дан список некоторых из них. Мы предлагаем вам найти ближайший к вам FTP-сервер, чтобы минимизировать трафик. Тем не менее есть два главных Linux FTP-архива: sunsite.unc.edu и tsx-11.mit.edu. Версию Slackware можно найти по крайней мере на следующих серверах: * sunsite.unc.edu:/pub/Linux/distributions/slackware * tsx-11.mit.edu:/pub/linux/packages/slackware * ftp.cdrom.com:/pub/linux/slackware ftp.cdrom.com - это родной сервер Slackware. Перекачка файлов При перекачке файлов вам следует перекачать, используя FTP, следующие файлы. Не забывайте использовать режим перекачки двоичных файлов. Приложение С содержит достаточно материалов для того, чтобы научиться использовать FTP. * Различные файлы README, а также SLACKWARE_FAQ. Прочитайте обязательно эти файлы до инсталляции. * Образ bootdisk. Это файл, который вы запишите на дискету для создания загрузочного диска Slackware. Если у вас дисковод на 1.44М (3.5"), найдите в каталоге bootdsks.144. Если у вас дисковод 1.2М (5.25"), найдите в каталоге bootdsks.12. Вам необходим один из следующих файлов bootdisk. o bare.gz. Это загрузчик с дискет, имеющий только драйвер жесткого диска IDE. (Нет SCSI, CD-ROM или сетевой поддержки). Используйте, если у вас только есть контроллер IDE жесткого диска, а инсталляция по сети или с CD-ROM невозможна. o cdu31a.gz. Содержит драйверы IDE, SCSI и Sony CDU31A/33A. o mitsumi.gz. Содержит драйверы IDE, SCSI и Mitsumi CD-ROM o modern.gz. Экспериментальный загрузочный диск с новым ядром и всеми CD-ROM драйверами, кроме сетевых и Sony 535. o net.gz. Содержит CD-ROM драйвер IDE и сетевые. o sbpcd.gz. Содержит CD-ROM драйверы IDE, SCSI и SoundBlaster Pro/Panasonic. o scsi.gz. Содержит CD-ROM драйверы IDE, SCSI и SCSI o scsinet.gz. Содержит CD-ROM и сетевые драйверы IDE, SCSI, SCSI. o sony535.gz. Содержит CD-ROM драйверы IDE, SCSI и Sony 535/531 o xt.gz. Содержит CD-ROM драйверы IDE и жесткого диска XT. Вам нужен только один образ диска из вышеперечисленных в зависимости от вашей аппаратуры. Некоторые драйверы конфликтуют друг с другом самым странным образом. И вместо того, чтобы выискивать ошибки в своей аппаратуре, проще использовать загрузочную дискету с конкретными драйверами. Большинству пользователей следует начинать попытки с scsi.gz или bare.gz. * Образ root-диска. Это файл, который вы запишите на дискету для создания инсталляционного диска Slackware. В связи с этим образом посмотрите rootdsks.144 или rootdsks.12 в зависимости от типа дисковода, с которого производите загрузку. Вам необходим один из следующих файлов: o color144.gz. Инсталляционный диск для дисковода 1.44, использующий меню. Большинству пользователей следует использовать именно его. o umsds144.gz. Версия диска color144 для инсталляции с помощью файловой системы UMSDOS, которая позволяет инсталлировать Linux поверх каталога файловой системы MS-DOS. Этот метод инсталляции обсуждается здесь детально, но он не позволяет переразбивать диск на новые разделы. Позже мы к этому вернемся. o tty144.gz. Инсталляционный диск, ориентированный на терминал, для дисковода 1.44M. Если color144.gz у вас не идет, попробуйте вместо него tty144.gz. o colrlite.gz. Инсталляционный диск, ориентированный на терминал, для дисковода 1.2M. o umsds12.gz. Версия диска colrlite для инсталляции с помощью файловой системы UMSDOS. Смотрите вышеприведенное описание umsds144.gz. o tty12.gz Инсталляционный диск, ориентированный на терминал, для дисковода 1.2M. Используйте этот диск, если у вас есть дисковод на 1.2M и colrlite.gz у вас не идет. И снова вам необходим лишь один образ диска root, зависящий от типа драйвера загрузочного дисковода. * GZIP.EXE. Это MS-DOS программа, выполняющая компрессию gzip, используемая для сжатия файлов boot и root (расширение имен файлов ".gz" говорит об этом). Она может быть найдена в каталоге install. * RAWRITE.EXE. Это MS-DOS программа, которая записывает содержимое файла (например, образов boot и root) прямо на дискету, не проверяя формат. Вам следует использовать RAWRITE.EXE для создания дискет boot и root. Это можно также найти в инсталляционном каталоге. Если вы планируете создать дискеты boot и root из MS-DOS, вам понадобятся только RAWRITE.EXE и GZIP.EXE. Если же вам доступна UNIX-станция с дисководом, вы можете создать дискеты в ней, используя команду dd. Посмотрите руководство по команде dd или посоветуйтесь со специалистами по UNIX. * Файлы из каталогов slakwarea1/,slakwarea2/ и slakwarea3/. Эти файлы создают набор диска ``A'' дистрибутива Slackware. Они необходимы. Позже вы скопируете эти файлы на дискеты в MS-DOS для инсталляции (или вы можете инсталлировать с жесткого диска). Поэтому, когда вы скачаете эти файлы, сохраните их в отдельном каталоге; не перепутайте файлы a1 с файлами a2 и т.п. Убедитесь также, что вы получили файлы без точек в именах. В FTP используйте команду ``mget *'' вместо ``mget *.*''. * Файлы в каталогах ap1, ap2 и т.д. зависят от инсталлируемых наборов. Например, если вы инсталлируете диск с набором ``X'', берите файлы из каталогов от x1 до x5. Как и для наборов диска ``A'', убедитесь, что файлы при переписывании размещаются в разных каталогах. Slackware на CD-ROM Slackware можно также получить на CD-ROM. Большинство CD-ROM со Slackware просто содержат копии файлов, которые появляются в архивах FTP-серверов. Поэтому, если у вас есть CD-ROM со Slackware, значит у вас есть все необходимые файлы. Вы должны будете создать boot и root дискеты из файлов, взятых с CD-ROM. Смотрите Раздел 2.1.4.2.1. Прежде всего следует решить, какие образы дисков boot и root будут использованы. Они должны быть на CD-ROM. Ниже мы опишем, как создавать эти дискеты. Методы инсталляции Slackware поддерживает несколько вариантов инсталляции. Наиболее популярный - инсталляция из раздела MS-DOS вашего жесткого диска; другой способ инсталлировать с дискет в формате MS-DOS, созданных с дискового набора, который вы переписали. Если у вас есть Slackware на CD-ROM, вы можете инсталлировать файлы прямо с него. Дистрибутив Slackware Pro от Morse Telecommunications позволяет инсталлировать Slackware так, что многие файлы доступны прямо с CD-ROM. Это может сэкономить много пространства на диске, но некоторые приложения будут работать медленнее. Создание boot и root дискет Создавая дискеты boot и root, вы должны их создавать с образов boot-диска и root-диска, которые вы скачали (или имеете на CD-ROM), вне зависимости от вида инсталляции. В MS-DOS вы должны раскомпрессировать образы boot-диска и root-диска, используя GZIP.EXE. Например, если вы используете образ диска boot - bare.gz, наберите команду MS-DOS: C:\> GZIP -D BARE.GZ которая раскомпрессирует bare.gz и создаст вам файл bare. Если вы инсталлируете с CD-ROM, вы можете скопировать образ диска bootdisk (например, bare.gz) на жесткий диск и выполнить GZIP.EXE с CD-ROM для раскомпрессирования. Вы должны также раскомпрессировать образ диска root. Например, если вы используете root-диск color144.gz, наберите команду: C:\> GZIP -D COLOR144.GZ которая раскомпрессирует этот файл и создаст файл color144. Далее, вы должны иметь две high-density дискеты, отформатированные в MS-DOS. (Они должны быть одного типа; если ваша boot-дискета 3.5", обе дискеты должны быть high-density 3.5"). Для записи образов дисков boot и root на дискеты надо использовать RAWRITE.EXE . Наберите команду: C:\> RAWRITE Ответьте на вопросы о имени переписываемого файла (например, bare или color144) и дисковода (например A:). RAWRITE скопирует файл блок за блоком прямо на дискету. Используйте RAWRITE также для образа root-диска. Когда вы это сделаете, у вас будут две дискеты: одна содержит boot-диск, другая root-диск. Имейте в виду, что эти две дискеты уже нечитаемы в MS-DOS (они уже, в известном смысле, в ``Linux-формате''). Убедитесь, что вы используете хорошие несбойные дискеты. На дискетах не должно быть bad-блоков. Обратите внимание на то, что вам не обязательно использовать MS-DOS для инсталляции Slackware. Но использование MS-DOS облегчает создание boot и root дискет, облегчает инсталляцию программ (поскольку вы можете инсталлировать прямо из MS-DOS раздела вашей системы). Если у вас на компьютере нет MS-DOS, вы можете использовать чужой компьютер для создания дискет, и уже инсталлировать с них. Нет также необходимости использовать GZIP.EXE и RAWRITE.EXE под MS-DOS для создания дискет boot и root. Вы можете использовать команды gzip и dd в UNIX для выполнения той же работы. (Для этого, разумеется, вам нужна UNIX-станция с дисководом). Например, на станции Sun с дисководом /dev/rfd0 вы можете использовать команды: $ gunzip bare.gz $ dd if=bare of=/dev/rfd0 obs=18k Вы должны указать соответствующий размер блока (obs), иначе на некоторых станциях (на тех же Sun) эта команда не будет выполнена. Если у вас возникнут проблемы - читайте руководство по команде dd. Подготовка к инсталляции с жесткого диска. Если вы планируете инсталляцию Slackware прямо с жесткого диска (которая обычно и быстрее, и надежнее, чем с дискет), вам потребуется раздел MS-DOS. Обратите внимание: Если вы планируете инсталляцию Slackware из раздела MS-DOS, этот раздел НЕ должен быть скомпрессирован с помощью DoubleSpace, Stacker или какой-то другой утилиты MS-DOS. В настоящее время Linux не может прямо читать MS-DOS-раздел DoubleSpace/Stacker. (Вы можете обратиться к ней через MS-DOS Emulator, но это не подходит при инсталляции Linux). При подготовке инсталляции с жесткого диска создайте просто на жестком диске каталог для размещения файлов Slackware. Например, C:\> MKDIR SLACKWAR создаст каталог C:\SLACKWAR для хранения файлов Slackware. Под этим каталогом, используя команду MKDIR, вы можете создать подкаталоги A1, A2 и т.д. для каждого переписанного дискового набора. Все файлы с диска А1 должны быть помещены в каталог SLACKWAR\A1 и т.д. Подготовка к инсталляции с дискет. Если вы хотите инсталлировать Slackware с дискет, вместо жесткого диска, вам нужно по одной чистой дискете, отформатированной в MS-DOS, для каждого диска Slackware, который вы желаете переписать. Дискеты должны быть формата high-density. Набор диска A (диски A1 - A3) могут быть дискетами как 3.5", так и 5.25". Но остальные наборы дисков должны быть на дискетах 3.5". Поэтому, если у вас есть только дисковод 5.25", необходимо взять у кого-нибудь на прокат дисковод 3.5", чтобы инсталлировать прочие (кроме A) диски. Или вы можете инсталлировать их с жесткого диска, как это описывалось выше. Для того, чтобы создать диски, просто скопируйте файлы из каждого Slackware каталога на отформатированные в MS-DOS дискеты, используя команду MS-DOS - COPY: C:\> COPY A1\*.* A: Которая скопирует содержимое диска A1 на дискету в дисководе A:. Это следует повторить для всех считываемых дисков. Нет необходимости каким-либо образом модифицировать или раскомпрессировать файлы диска; вы просто должны скопировать их на дискеты в MS-DOS. Процедура инсталляции Slackware сама заботится о раскомпрессировании файлов. Подготовка к инсталляции с CD-ROM. Если у вас Slackware на CD-ROM, вы можете инсталлировать систему, как только вы создали дискеты boot и root. Программы будут инсталлироваться прямо с CD. 2.2 Подготовка к инсталляции Linux После того, как вы получили дистрибутив Linux, вы можете готовить свою систему к инсталляции. Требуется спланировать работу, особенно если вы уже работали на других операционнных системах. В последующих разделах мы расскажем, как планировать инсталляцию Linux. Общие принципы инсталляции Хотя версии Linux отличаются, общие методы инсталляции состоят в следующем: 1. (Пере)разбейте на разделы жесткий диск(и). Если у вас уже инсталлирована другая операционная система, вы должны сделать переразбиение, чтобы выделить место под Linux. Это обсуждается в Разделе 2.2.4. 2. Загрузите средства инсталляции Linux. Каждый дистрибутив имеет в каком-либо виде средства инсталляции - обычно загрузочную (boot) дискету, которая используется для инсталляции программ. Загрузка этих средств либо представит вам некую пошаговую программу инсталляции, либо позволит инсталлировать вручную. 3. Создайте разделы для Linux. После переразбиения и выделения места под Linux, вы создаете на этом месте раздел Linux. Это выполняется программой Linux fdisk. (см. Раздел 2.3.3). 4. Создайте файловые системы и область своппинга. Вы создадите одну или несколько файловых систем для хранения файлов на вновь созданном разделе. Кроме того, если вы желаете получить область своппинга, то также создадите и его на одном из разделов Linux. (См. Разделы 2.3.4 и 2.3.5). 5. Инсталлируйте программы Linux в новую(вые) файловую(вые) систему(мы). Далее вас ждет спокойное плавание, если все прошло нормально. (См. Раздел 2.3.6). Позже, в Разделе 2.5, мы опишем, что делать, когда что-то не получается. Многие дистрибутивы Linux снабжаются инсталляционной программой, которая будет руководить вами в процессе инсталляции и автоматизирует некоторые из описанных шагов. Имейте в виду, что в различных дистрибутивах некоторые шаги могут быть автоматизированы. Дистрибутивы Slackware для Linux, описываемые в этой книге, потребуют от вас лишь разбиения диска на разделы с использованием fdisk, а также использования setup для выполнения других шагов. Важное замечание. При подготовке к инсталляции Linux, лучший совет, который мы можем дать - это делать записи в ходе инсталляции. Записывайте все, что вы вводите с клавиатуры и все, что видите неординарное. Смысл здесь простой: если (или когда!) вы попадете в тупик, вам будет важно проследить в обратном порядке ваши шаги, чтобы обнаружить ошибку. Инсталляция Linux несложна, но надо помнить множество деталей. Вам хорошо бы зафиксировать все эти детали, чтобы вы могли экспериментировать с другими методами, если что-то не будет получаться. Эти записи будут также полезны, если вы обратитесь к другим людям за помощью. Например, напишите в Linux-конференцию USENET. Эти заметки вам однажды захочется показать своим внукам. Автор со смущением признает, что он хранит тетрадку с записью всех своих кувырканий с Linux в первые месяцы работы с системой. Сейчас эта тетрадка притягивает пыль на книжной полке. Концепция разбиения на разделы В общем случае жесткие диски разбиваются на разделы, где отдельные разделы выделяются отдельным операционным системам. Например, вы можете сделать на диске несколько независимых разделов: один, скажем, для MS-DOS, другой для OS/2 и третий для Linux. Если у вас уже есть инсталлированные программы, вам может потребоваться переразбиение диска, чтобы выделить место для Linux. Затем вы создадите на освободившемся месте один или несколько разделов для Linux и области своппинга. Многие системы MS-DOS используют один раздел, заполняя все дисковое пространство. В MS-DOS этот раздел известен, как C:. Если у вас более одного раздела, MS-DOS дает им имена D:, E: и т.д. Каждый раздел выступает как независимый диск. На первом секторе диска находится master boot record с таблицей разделов. boot record (загрузочная запись) используется для загрузки системы. Таблица разделов содержит информацию о местоположении и размере разделов. Существует три типа разделов: первичные, расширенные и логические (primary, extended и logical). Наиболее часто используются первичные разделы. Однако, из-за ограничений на размер таблицы разделов, можно иметь не более четырех разделов на любом диске. Чтобы обойти ограничение четырех разделов, используются расширенный раздел. Расширенные разделы сами по себе не содержат данных. Они выступают как хранилища логических разделов. Поэтому вы можете создать один расширенный раздел, покрывающий весь диск, и внутри создать много логических разделов. Требования Linux к разделам Прежде, чем мы расскажем, как переразбивать ваш диск, вы должны представлять, сколько места надо выделить под Linux. Как создавать эти разделы, мы обсудим позже в Разделе 2.3.3. В системах UNIX файлы хранятся в файловой системе, которая прежде всего расположена на диске (или на другом устройстве, вроде CD-ROM или дискеты), отформатированном для хранения файлов. Каждая файловая система ассоциируется с конкретной частью дерева каталогов; например, во многих случаях существует файловая система для всех файлов каталога /usr, другая для /tmp и т.д. Корневая файловая система - первичная файловая система, которой соответствует самый верхний каталог /. Под Linux каждая файловая система "живет" в отдельном разделе диска. Например, если у вас есть файловая система для / и другая для /usr, вам потребуется два раздела. Прежде, чем инсталлировать Linux, вам необходимо подготовить файловые системы для размещения программ Linux. Вы должны иметь по крайней мере одну файловую систему (корневую файловую систему), а поэтому один раздел, назначенный для Linux. Многие пользователи Linux умудряются поместить все свои файлы в корневую файловую систему, с которой (одной) управляться легче, чем с множеством файловых систем. Но вы можете создать много файловых систем для Linux, если пожелаете. Например, если вы хотите использовать раздельные файловые системы для /usr и /home. Читатели, имеющие опыт работы в качестве администраторов UNIX, знают, как извлекать пользу из раздельных файловых систем. В Главе 4 мы обсуждим, как разумно использовать множество файловых систем и разделов. Зачем использовать больше, чем одну файловую систему? Наиболее очевидная причина - безопасность. Если по какой-то причине одна из ваших файловых систем будет повреждена, то другие, как правило, не пострадают. С другой стороны, если вы поместите все свои файлы в корневую файловую систему, и по какой-то причине она будет испорчена - все разом пропадет. Но это редкие случаи. Если вы регулярно делаете системный backup, то можете чувствовать себя достаточно безопасно. Автор использует одну (200М) файловую систему для всех своих файлов и не имеет проблем (пока). Другая причина использования множества файловых систем - это использование памяти нескольких дисков. Если у вас есть, скажем, 40M свободного места на одном диске и 50M на другом, вы можете создать корневую файловую систему на одном диске и /usr на 50-ти мегабайтном. В настоящее время невозможно одной файловой системе располагаться сразу на нескольких дисках, поэтому необходимо создавать несколько файловых систем. Таким образом, можно сказать, что Linux требует не менее однoго раздела для корневой файловой системы. Если вы желаете создать несколько файловых систем, вы должны для каждой выделить свой раздел. Некоторые дистрибутивы автоматически создают вам разделы и файловые системы, так что вы можете вообще об этом не беспокоиться. Следует также иметь в виду проблемы своппинга. Если вы хотите использовать область своппинга в Linux, у вас две возможности. Во-первых, использовать файл своппинга, который существует в одной из файловых систем. Вы создадите файл своппинга для использования как виртуальной RAM после инсталляции. Во-вторых, создать раздел своппинга, который будет использоваться только для этого. Большинство использует второй способ. Отдельный файл своппинга или раздел могут быть не более 16M. Если вы желаете использовать для своппинга более 16M, вы можете создать несколько разделов или файлов своппинга (до восьми). Например, если вам нужна область своппинга в 32M, вы можете создать два раздела по 16M. Создание раздела своппинга обсуждается в Разделе 2.3.4, а создание файла своппинга - в Главе 4. В общем случае вы создадите для Linux два раздела: один для корневой файловой системы и другой для области своппинга. Разумеется, возможно много вариаций на эту тему, но это минимальная конфигурация. Вы не обязаны иметь область своппинга для Linux, но если у вас менее 16M RAM, то это очень настоятельно рекомендуется. Разумеется, вы должны представлять, сколько места потребуется выделить под этот раздел. Размер вашей файловой системы в большой степени зависит от используемого дистрибутива и об'емов инсталляции. Надеемся, что сопутствующая дистрибутиву документация даст вам приблизительные оценки потребности в памяти. Маленькие Linux-системы могут занимать 20M и даже меньше. Большие системы - от 80M до 100M, и даже больше. Но не забывайте, что необходимо место также под каталоги пользователей и под будущие расширения. Размер вашей области своппинга (если вам доведется выбирать) зависит от того, какая вам требуется виртуальная память. Хорошее прикидочное правило: область своппинга равняется удвоенной RAM. Например, у вас 4M RAM (физической памяти), для нее хорошо иметь раздел в 8M для области своппинга. Но это несколько абстрактные рассуждения, поскольку область своппинга зависит в значительной степени от эксплуатируемых программ. Если у вас много физической памяти (скажем, 16M и даже более), может быть вам вообще не захочется использовать область своппинга. Важное замечание. Из-за ограничений BIOS часто невозможно загрузиться из разделов, использующих номера цилиндров выше 1023. Поэтому, выделяя место для Linux, имейте в виду, что вы можете не захотеть использовать разделы с номерами цилиндров больше 1023 для корневой файловой системы. Но Linux может эти разделы использовать (но не для загрузки). Может быть этот совет и преждевременный, но это важно для планирования диска. Если вы вынуждены использовать разделы с номерами цилиндров больше 1023 для корневой файловой системы, вы всегда можете загружать Linux с дискеты. Это не так плохо, действительно, это дольше всего на несколько секунд по сравнению с загрузкой с жесткого диска. В любом случае это всегда запасной вариант. Разбиение вашего жесткого диска В этом разделе мы опишем, как изменить размеры ваших уже существующих разделов, чтобы выделить место для Linux. Если вы инсталлируете Linux на "чистый" диск, вы можете пропустить этот раздел и продолжить чтение с Раздела 2.3. Обычный способ изменить размеры существующего раздела - это удалить его (уничтожив все данные, которые он содержал) и вновь его создать. Перед переразбиением диска сделайте backup системы. А затем восстановите информацию. В MS-DOS существует несколько программ, которые могут переразбить диск без уничтожения информации. Одна из них известна как FIPS, ее можно найти на FTP-серверах Linux. Имейте также в виду, что, поскольку вы будете уменьшать существовавшие разделы, у вас может потом не хватить места, чтобы все восстановить. В этом случае вы предварительно должны стереть все маловажное, чтобы после уменьшения разделов хватило места. Программа, используемая для разбиения на разделы известна, как fdisk. Каждая операционная система имеет собственный аналог этой программы; например, под MS-DOS она вызывается командой FDISK. Вам следует посмотреть документацию на вашу операционную систему относительно перераспределения разделов. Здесь мы обсудим, как переразбивать на разделы в MS-DOS с использованием FDISK, но эта информация может быть легко распространена на другие операционные системы. Посмотрите документацию на свою операционную систему, прежде чем переразбивать свой диск. Этот раздел затрагивает лишь основные черты переразбиения; существует много тонкостей, которые здесь не рассматриваются. Вы можете потерять все программы, если неправильно переразобьете свой диск. Предупреждение. Не модифицируйте и не создавайте вновь раздел для любой другой операционной системы (включая Linux), используя FDISK под MS-DOS. Вы можете производить модификацию только для конкретной операционной системы; например, вы должны создавать разделы для Linux, используя версию fdisk для Linux. Позже, в Разделе 2.3.3 мы опишем, как создавать разделы для Linux. Но сейчас мы обсуждаем изменение размера существующих. Предположим, что вы имеете один диск, полностью отданный под MS-DOS. Таким образом, ваш диск состоит целиком из одного раздела, обычно известного как ``C:''. Поскольку этот метод портит данные этого раздела, вам необходимо создать загрузочную таблицу MS-DOS ``system disk'', которая хранит все необходимое для выполнения FDISK и последующего backup. Во многих случаях вы можете использовать для этой цели инсталляционные диски под MS-DOS. Если вы хотите создать свой системный диск, отформатируйте дискету командой FORMAT /s A: Скопируйте на эту дискету все необходимые утилиты MS-DOS (обычно большинство программ каталога \DOS на вашем диске), а также программы FORMAT.COM и FDISK.EXE. Теперь вы можете загрузиться с этой дискеты и выполнить команду FDISK C: Работа FDISK должна сопровождаться об'яснениями, но детали следует посмотреть в документации на MS-DOS. Когда вы запустите FDISK, используйте опцию menu для отображения таблицы разделов и спишите приведенную там информацию. Важно сохранить запись о ваших первоначальных установках setup в случае, если вы захотите отказаться от инсталляции Linux. Для удаления существующего раздела выберите в меню FDISK опцию ``Delete an MS-DOS Partition or Logical DOS Drive''. Опишите тип раздела, который вы желаете удалить (первичный, расширенный или логический) и число разделов. Внимательно отнеситесь ко всем предупреждениям. Ух! Для создания нового (меньшего) раздела для MS-DOS, выберите опцию FDISK ``Create an MS-DOS Partition or Logical DOS Drive''. Опишите тип раздела (первичный, расширенный или логический) и размер создаваемого раздела (в мегабайтах). FDISK создаст раздел. После того, как вы закончите работу с FDISK, следует выйти из программы и переформатировать новый раздел. Например, если вы изменяете размер первого DOS раздела на диске (C:), следует выполнить команду FORMAT /s C: Теперь можно выполнить backup. 2.3 Инсталляция Linux После того, как вы переразбили диск, чтобы выделить место под Linux, вы можете начать инсталляцию. Здесь дано краткое описание процедур: * Загрузите средства инсталляции Linux; * Выполните fdisk под Linux для создания разделов; * Выполните mke2fs и mkswap для создания файловой системы Linux и области своппинга; * Инсталлируйте программы Linux; * Наконец, инсталлируйте либо загрузчик boot-файла LILO на диске, или создайте загрузочную дискету для загрузки новой Linux-системы. Как мы уже сказали, некоторые шаги могут быть автоматизированы, в зависимости от используемого дистрибутива Linux. Пожалуйста, посмотрите более подробные инструкции в документации. Загрузка Linux Первый шаг - загрузить средства инсталляции Linux. В большинстве случаев это загрузочная дискета, которая содержит маленькую Linux-систему. При загрузке с дискеты вам будет пред'явлено в каком-то виде меню, которое поможет вам в процессе инсталляции. В других дистрибутивах при загрузке дискеты выдается подсказка login. В этом случае вы обычно входите как root и начинаете процесс инсталляции. В документации, сопровождающей дистрибутив говорится, что необходимо делать для загрузки Linux. Если вы инсталлируете дистрибутив Slackware, то все, что требуется, это загрузить загрузочную дискету, которую вы создали, следуя предыдущему разделу. Большинство дистрибутивов Linux используют загрузочную дискету, которая позволяет ввести параметры компьютера при загрузке, для определения особенностей устройств. Например, если ваш SCSI-контроллер не распознается при загрузке дискеты, вы должны перезагрузиться и описать параметры аппаратуры (например, I/O-адрес и IRQ). Похоже, что компьютеры IBM PS/1, ThinkPad и ValuePoint не сохраняют геометрию диска в CMOS и вы должны ее описывать во время загрузки. Подсказка boot часто выдается автоматически, когда загружается загрузочная дискета. Так, например, происходит при загрузке в дистрибутиве Slackware. Некоторые дистрибутивы потребуют от вас удерживать во время загрузки с дискеты shift или ctrl. В случае успеха вы должны увидеть подсказку: boot: и, возможно, другие сообщения. Можно попробовать загрузиться без каких-либо специальных параметров, просто нажать enter в ответ на подсказку boot. Следите за сообщениями во время загрузки. Если у вас SCSI контроллер, вы увидите список распознаваемых устройств (hosts). Если вы увидите сообщение SCSI: 0 hosts это значит, что ваш SCSI контроллер не был опознан, и вам следует использовать другую процедуру. Система также представит информацию о разделах диска и распознанных устройствах. Если какая-либо информация неверна или отсутствует, вы должны инициировать распознавание оборудования. С другой стороны, если все идет хорошо и оборудование, вроде бы, распознается, вы можете перейти к следующему разделу, к Разделу 2.3.2. Для инициации распознавания оборудования вы должны ввести соответсвующие параметры после подсказки загрузчика, используя следующий синтаксис: ramdisk Существует ряд доступных параметров: вот некоторые наиболее характерные. hd=,, Описывает геометрию для таких систем, как IBM PS/1, ValuePoint и ThinkPad. Например, если у вашего диска 683 цилиндров, 16 головок и 32 сектора на трек, введите per track, enter ramdisk hd=683,16,32 tmc8xx=, Описывает адрес и IRQ для без-BIOS-ных Future Domain TMC-8xx SCSI контроллеров. Например, ramdisk tmc8xx=0xca000,5 Обратите внимание, что префикс "0x" должен использоваться для всех значений, данных в шестнадцатиричной системе. Это справедливо для всех последующих опций. st0x=, Описывает адрес и IRQ для без-BIOS-ных Seagate ST02 контроллеров. t128=, Описывает адрес и IRQ для без-BIOS-ных Trantor T128B контроллеров. ncr5380=,, Описывает порт, IRQ и DMA канал для generic NCR5380 контроллера. aha152x=,,,1 Описывает порт, IRQ и SCSI ID для без-BIOS-ных AIC-6260 контроллеров. Включает Adaptec 1510, 152x и Soundblaster-SCSI контроллеры. Для каждого из них вы должны ввести ramdisk с параметрами, которые вы хотите установить. Если у вас есть вопросы относительно опций периода загрузки, посмотрите Linux SCSI HOWTO, который можно найти на любом Linux FTP-сервере (или там, где вы раздобыли эту книгу), а также Linux CD-ROM HOWTO. Эти документы описывают возможности аппаратуры более детально. Дисководы и разделы под Linux Многие дистрибутивы предполагают ручное создание разделов Linux с использованием программы fdisk. Другие могут автоматически создавать разделы. В любом случае вы должны знать о существовании разделов и имен дисководов. Дисководы и разделы под Linux имеют другие имена, по сравнению с другими операционными системами. Под MS-DOS дисководы гибких дисков именуются A: и B:, в то время, как разделы жесткого диска именуются C:, D:, и т.д. В Linux соглашение о именах совсем другое. Драйверы устройств,находящиеся в каталоге /dev, используются для общения с устройствами системы (такими, как жесткий диск, мышь и т.п.) Например, если у вас есть мышь, вы имеете к ней доступ через драйвер /dev/mouse. Дисководы гибких дисков, жестких дисков и отдельные разделы имеют индивидуальные драйверы. Пока можете не беспокоиться относительно интерфейса; пока важно только понять, как именуются различные устройства при их использовании. Таблица 2.1 содержит имена различных драйверов. Несколько замечаний по поводу этой таблицы. Обратите внимание, что /dev/fd0 соответствует первому дисководу (A: для MS-DOS) и /dev/fd1 соответствует второму дисководу (B:). SCSI-драйверы жестких дисков названы иначе, чем другие драйверы. Драйверы IDE, MFM и RLL доступны через устройства /dev/hda, /dev/hdb и т.д. Индивидуальные разделы на дисководе /dev/hda будут /dev/hda1, /dev/hda2 и т.д. А SCSI-драйверы именуются /dev/sda, /dev/sdb, и т.д., с разделами, именуемыми /dev/sda1 и /dev/sda2. Вот например. Предположим, что у вас один IDE-дисковод с тремя первичными разделами. Два первых выделены под MS-DOS, а третий раздел - расширенный, содержащий два логических раздела под Linux. Устройства, соответствующие этим разделам, будут: Первый раздел MS-DOS (C:) /dev/hda1 Второй раздел MS-DOS (D:) /dev/hda2 Расширенный раздел /dev/hda3 Первый логический раздел Linux /dev/hda5 Второй логический раздел Linux /dev/hda6 Обратите внимание, что пропущен /dev/hda4, он соответствует четвертому первичному разделу, которого нет в этом примере. Логические разделы именуются, начиная с /dev/hda5. Устройство Имя Первый дисковод (A:) /dev/fd0 Второй дисковод (B:) /dev/fd1 Первый жесткий диск (весь) /dev/hda Первый жесткий диск, первичный раздел 1 /dev/hda1 Первый жесткий диск, первичный раздел 2 /dev/hda2 Первый жесткий диск, первичный раздел 3 /dev/hda3 Первый жесткий диск, первичный раздел 4 /dev/hda4 Первый жесткий диск, логический раздел 1 /dev/hda5 Первый жесткий диск, логический раздел 2 /dev/hda6 .. Второй жесткий диск (весь) /dev/hdb Второй жесткий диск, первичный раздел 1 /dev/hdb1 .. Первый SCSI драйвер диска (весь) /dev/sda Первый SCSI драйвер диска, первичный раздел 1 /dev/sda1 .. Второй SCSI драйвер диска (весь) /dev/sdb Второй SCSI драйвер диска, первичный раздел 1 /dev/sdb1 .. Табл. 2.1: Имена разделов Linux Создание разделов Linux Теперь вы готовы создать разделы Linux с помощью команды fdisk. Как описывалось в Разделе 2.2.3, в общем случае вам необходимо создать как минимум один раздел для самого Linux и другой для области своппинга. После загрузки средств инсталляции выполните команду fdisk, напечатав fdisk где имя устройства в Linux, которому вы хотите выделить раздел (см. Табл. 2.1). Например, если вы хотите выполнить fdisk для первого SCSI-диска, используйте команду fdisk /dev/sda. /dev/hda (первый IDE-диск) берется по умолчанию, если вы не описали другого. Если вы создаете разделы для Linux более, чем на одном диске, выполните fdisk отдельно для каждого диска. # fdisk /dev/hda Command (m for help): В этот момент fdisk ждет команды; вы можете ввести "m", чтобы получить перечень опций. Command (m for help): m Command action a toggle a bootable flag d delete a partition l list known partition types m print this menu n add a new partition p print the partition table q quit without saving changes t change a partition's system id u change display/entry units v verify the partition table w write table to disk and exit x extra functionality (experts only) Command (m for help): Для создания нового раздела используется команда n. О большинстве других опций вы можете не вспоминать. Выйти из программы fdisk, без сохранения произведенных изменений, можно командой q. Выйти из программы fdisk с записью изменений в таблице разделов можно командой w. Первое, что вы должны сделать, это получить и записать текущее состояние таблицы разделов. Используйте команду p. Command (m for help): p Disk /dev/hda: 16 heads, 38 sectors, 683 cylinders Units = cylinders of 608 * 512 bytes Device Boot Begin Start End Blocks Id System /dev/hda1 * 1 1 203 61693 6 DOS 16-bit >=32M Command (m for help): Это пример, когда у нас один MS-DOS-раздел на /dev/hda1, который имеет 61693 блоков (около 60M - блок в Linux - 1024bytes). Этот раздел начинается на цилиндре N 1 и заканчивается на цилиндре N 203. Всего у нас на диске 683 цилиндров. Так что остается 480 цилиндров для создания раздела Linux. Для создания нового раздела используйте команду "n". В этом примере мы создадим два новых первичных раздела (/dev/hda2 and /dev/hda3) для Linux. Command (m for help): n Command action e extended p primary partition (1-4) p Здесь fdisk спрашивает тип создаваемого раздела: extended (расширенный) или primary (первичный). В нашем примере мы создаем только первичный раздел, так что выбираем p. Partition number (1-4): Затем fdisk спросит число создаваемых разделов; поскольку раздел 1 уже использован, наш первый раздел Linux получит номер 2. Partition number (1-4): 2 First cylinder (204-683): Теперь введите номер первого цилиндра раздела. Поскольку цилиндры с 204 по 683 не используются, мы используем первый свободный (номер 204). Нет смысла оставлять пустые места между разделами. First cylinder (204-683): 204 Last cylinder or +size or +sizeM or +sizeK (204-683): Программа fdisk запрашивает размер создаваемого раздела. Мы можем указать последний номер свободных цилиндров или размер в байтах, килобайтах или мегабайтах. Поскольку мы хотим, чтобы наш раздел был размером в 80M, мы укажем +80M. При указании размера раздела таким способом fdisk округлит действительный размер раздела до ближайшего числа цилиндров. Last cylinder or +size or +sizeM or +sizeK (204-683): +80M Warning: Linux cannot currently use 33090 sectors of this partition Если вы увидите предупреждение, вроде этого, его можно проигнорировать. Программа fdisk выдает сообщение, поскольку это старая программа, написанная еще до того, когда в Linux были разрешены разделы более, чем 64M. Теперь мы готовы создать второй раздел для Linux. С целью демонстрации мы создадим его размером в 10M. Command (m for help): n Command action e extended p primary partition (1-4) p Partition number (1-4): 3 First cylinder (474-683): 474 Last cylinder or +size or +sizeM or +sizeK (474-683): +10M Наконец, мы выдадим таблицу разделов. Вновь запишите всю информацию, особенно размеры в блоках ваших новых разделов. Вам потребуется знать размер разделов позже при создании файловой системы. Попутно проверьте, что разделы не накладываются друг на друга. Command (m for help): p Disk /dev/hda: 16 heads, 38 sectors, 683 cylinders Units = cylinders of 608 * 512 bytes Device Boot Begin Start End Blocks Id System /dev/hda1 * 1 1 203 61693 6 DOS 16-bit >=32M /dev/hda2 204 204 473 82080 81 Linux/MINIX /dev/hda3 474 474 507 10336 81 Linux/MINIX Как вы видите, теперь есть /dev/hda2 - раздел размером в 82080 блоков (что соответствует приблизительно 80M), и /dev/hda3 - 10336 блоков (около 10M). прим. переводчика: видимо, у автора здесь слова "сектор" и "блок" - синонимы Имейте в виду, что много дистрибутивов (вроде того же Slackware) требуют использования команды t в программе fdisk для изменения области своппинга ``Linux swap'', которая обычно имеет номер 82. Вы можете воспользоваться командой L для печати кодов типов известных разделов, а затем использовать t, чтобы установить тип области своппинга, соответствующий ``Linux swap''. При этом программы инсталляции смогут автоматически найти ваши разделы своппинга, основываясь на типе. Если ваши программы инсталляции не распознают области своппинга, вы можете снова запустить программу fdisk и использвать команду "t" в режиме вопросов. В вышеприведенном примере оставшиеся цилиндры диска (номера с 508 по 683) не использованы. Вы можете позже создать дополнительные разделы. Наконец, мы используем команду w, чтобы записать изменения и выйти из fdisk Command (m for help): w # Имейте в виду, что ни одно из сделанных изменений не даст эффекта то тех пор, пока вы не дадите команду w. Так что вы можете играть с различными конфигурациями и сохранить их, когда закончите. Кроме того, если вы захотите выйти из fdisk в любое время без сохранения изменений, используйте команду q. Помните, что программой fdisk для Linux вы можете выделять разделы для Linux и только для Linux. Не забывайте также, что вы не сможете загружать Linux с разделов, использующих номера цилиндров, превышающие 1023. Поэтому, вы должны попытаться создать корневой раздел Linux на цилиндрах до 1023-го. Но если это невозможно - загружайтесь с дискеты. Некоторые дистрибутивы Linux требуют перезагрузки системы после окончания работы fdisk. Это позволяет изменениям в таблице разделов оказать свое влияние на последующую инсталляцию. Новые версии fdisk автоматически изменяют сответствующую информацию в ядре, так что перезагрузка не требуется. Чтобы обезопасить себя, после выполнения fdisk вам следует снова загрузить средства инсталляции как и раньше - перед продолжением инсталляции. Создание области своппинга Если вы планируете использовать раздел своппинга для виртуальной памяти, вы должны быть готовы к его использованию. (Некоторые дистрибутивы подготавливают область своппинга автоматически или через соответствующую опцию меню инсталляции). В Главе 4 мы обсудим подготовку файла своппинга в случае, если вы не захотите использовать отдельный раздел. Многие дистрибутивы потребуют от вас создать и активизировать область своппинга до инсталляции программ. Если у вас небольшой об'ем физической RAM, процесс инсталляции может не завершиться успешно, пока вы не выделите какой-то об'ем под область своппинга. Дистрибутив Slackware требует создания области своппинга до инсталляции, если вы имеете 4M RAM или меньше. Если у вас нет таких ограничений, инсталляционная процедура Slackware выделит область своппинга автоматически. Если у вас возникают сомнения, то следуйте процедуре, описанной здесь; она не сможет вам навредить. Команда создания раздела для своппинга называется mkswap и имеет вид mkswap -c где - имя раздела своппинга, а - размер этого раздела в блоках. size of the partition, in blocks. Еще раз напомним, что в некоторых дистрибутивах область своппинга создается автоматически и блок в Linux занимает 1024 байта. Например, если ваш раздел своппинга /dev/hda3 и имеет размер в 10336 блоков, используйте команду # mkswap -c /dev/hda3 10336 Опция -c команды mkswap обеспечивает проверку плохих блоков в разделе при создании области своппинга. Если вы используете несколько разделов для своппинга, вам необходимо выполнить соответствующие команды mkswap для каждого раздела. После форматирования области своппинга необходимо сделать ее пригодной для использования системой. Обычно система автоматически готовит место во время загрузки. Но, поскольку вы еще не инсталлировали Linux, вы должны подготовить его вручную. Команда подготовки области своппинга - swapon имеет вид swapon Для вышеприведенного примера, чтобы подготовить область своппинга на /dev/hda3, необходимо выполнить команду # swapon /dev/hda3 Создание файловых систем Перед тем, как вы сможете использовать разделы Linux для хранения файлов, вы должны создать на них файловые системы. Создание файловой системы аналогично форматированию раздела под MS-DOS. Мы кратко обсуждали файловые системы в Разделе 2.2.3. В Linux возможно несколько типов файловых систем. Каждый тип файловой системы имеет свой формат и характеристики (такие как имя файла, длина, максимальный размер файла и т.д.). Linux также поддерживает "третьи" типы файловых систем, например файловую систему MS-DOS. Наиболее популярный тип файловой системы - это Second Extended Filesystem или ext2fs. ext2fs - одна из наиболее эффективных и гибких файловых систем. Она допускает использование имен файлов до 256 символов и размер файловой системы до 4 терабайтов (прим. переводчика: знать-то очень много). В Главе 4 мы обсудим различные типы файловых систем, возможных в Linux. А первоначально мы предполагаем, что вы используете файловую систему ext2fs. При инсталляции дистрибутива Slackware файловые системы создаются автоматически инсталляционной процедурой, описываемой в следующем разделе. Если вы хотите создать файловую систему вручную, следуйте процедуре, описанной здесь. Для создания файловой системы используйте команду mke2fs -c где - имя раздела, а - его размер в блоках. Например, для создания файловой системы из 82080 блоков на /dev/hda2, используйте команду # mke2fs --c /dev/hda2 82080 Если вы используете различные файловые системы для Linux, вам надо использовать соответствующую команду mke2fs для каждой файловой системы. Если вы столкнулись с проблемами, смотрите Раздел 2.5. Инсталляция программ Наконец вы готовы инсталлировать программы. Каждая дистрибуция имеет для этого свой механизм. Многие дистрибутивы имеют самодокументированные программы, которые помогают пользователю пройти весь путь инсталляции. В других дистрибутивах вы должны примонтировать файловую систему к конкретному каталогу (например, /mnt) и вручную скопировать туда программы. В дистрибутивах на CD-ROM вам может быть дана опция инсталлирования части программ на жестком диске, оставив большую часть на CD-ROM. Некоторые дистрибутивы предлагают несколько различных путей инсталляции. Например, вам может быть предоставлена возможность инсталлировать прямо из раздела MS-DOS вашего жесткого диска вместо дискет. Или вы будете иметь возможность инсталлировать по TCP/IP через FTP или NFS. Детали смотрите в документации на ваш дистрибутив. Например, дистрибутив Slackware требует от вас только создания разделов с помощью fdisk, возможно, создания области своппинга с помощью mkswap и swapon (если у вас RAM 4M и меньше), а затем запуска программы setup. setup представит вам меню с об'яснениями. Использование setup в деталях описано ниже. Конкретный метод инсталляции может существенно отличаться в различных дистрибутивах. Мы надеемся, что инсталляция Linux будет происходить с достаточными комментариями системы (что имеет место в большинстве дистрибутивов). Инсталляция Slackware с setup Если вы инсталлируете Slackware, после создания разделов (возможно, и области своппинга) используйте команду # setup Она предоставит вам меню, с помощью которого будет направлять вас в процессе инсталляции. Процедура, описанная здесь, соответствует находящейся на корневых дисках color144 и colrlite; другие корневые диски могут иметь несколько отличающиеся процедуры. Меню setup состоит из следующих пунктов. Используйте стрелки для перемещения по пунктам и нажимайте enter или spacebar при выборе пункта. Help Выводит help-файл программы setup. Keymap Эта опция позволяет описывать отображение клавиатуры в вашей системе, если у вас не US-клавиатура. Список keymaps (образов клавиатур) будет представлен; выберите соответствующий пункт из списка. Quick Позволяет выбирать между режимами ``quick'' (быстро) и ``verbose''(с подробными комментариями). ``Verbose'' - режим, устанавливаемый по умолчанию, рекомендуется, если только вы не занимались уже этим десятки раз. Make tags Позволяет экспертам по инсталляции Slackware создавать настроенные tag-файлы. Это необходимо только для настройки инсталляционной процедуры; но это все не ваша забота. Addswap Это будет первый пункт, который выберет большинство пользователей при инсталляции Slackware. Будет пред'явлен список доступных разделов для своппинга (эти разделы будут типа ``Linux swap'' как наборы в fdisk). Вы сможете описать, какие разделы вы хотите использовать для области своппинга. Затем вам будет задан вопрос, хотите ли использовать mkswap для этих разделов. Если вы уже выполнили mkswap и swapon (как описано в Разделе 2.3.4) над своими разделами своппинга, то нельзя в setup выполнять над этими разделами mkswap. Даже если вы уже выполнили mkswap и swapon, необходимо использовать пункт Addswap меню: это гарантирует, что разделы своппинга будут доступны по завершении инсталляции. ! Предупреждение! Создание области своппинга в разделе разрушает данные, находившиеся на этом месте. Убедитесь, что вы не уничтожаете данные, которые следует сохранить. Если вы выбрали этот пункт меню, вам автоматически будут выдаваться подсказки. В общем случае это целесообразно. Target Этот пункт позволяет описывать разделы, на которые будет инсталлироваться Linux. Список доступных разделов (с типом ``Linux native'' ("исходный Linux" - описывается командой fdisk) будет отображен и вас попросят ввести имя корневого раздела Linux, например /dev/hda2. Далее вы получите подсказку относительно типа создаваемой файловой системы. Мы предлагаем использовать файловую систему типа ext2fs, как описано в Разделе 2.3.5. Это создаст файловую систему в названном разделе, нечто аналогичное форматированию раздела под MS-DOS. Вы также получите подсказки относительно любых других разделов, которые вы можете захотеть использовать в Linux. Например, если вы создали раздел для /usr (смотрите Раздел 2.2.3), вы сможете описать имя и куда примонтировать раздел (скажем, на /usr или /usr/bin). ! Предупреждение! Создание файловой системы в разделе разрушает данные, находившиеся на этом месте. Убедитесь, что вы не уничтожаете данные, которые следует сохранить. Даже если вы уже создали файловую систему, используя mke2fs (смотрите Раздел 2.3.5), вы должны использовать пункт меню Target (цель) для описания разделов, в которые будет инсталлирован Linux. Source Этот пункт меню позволяет описать, с чего будет инсталлироваться Slackware: с дискеты, жесткого диска или CD-ROM. Если вы инсталлируете с жесткого диска, вам будет задан вопрос, какой раздел выделяется файлам Slackware и какого он типа. Например, Если у вас Slackware-файлы в разделе MS-DOS, введите имя раздела (скажем, /dev/hda1) и выберите MS-DOS FAT в качестве типа. Далее вам будет задан вопрос, в каком каталоге данного раздела можно найти эти файлы. Например, у вас Slackware-файлы, размещенные в каталоге C:\SLACK в вашем разделе MS-DOS, введите /slack как местоположение. Обратите внимание, что здесь обычный слэш "/". Если вы инсталлируете с CD-ROM, вас спросят тип используемого устройства CD-ROM, а также, где на CD-ROM находятся файлы. Многие CD-ROM содержат файлы в каталоге /slakware, но это зависит от версии. Если вы инсталлируете Slackware Professional (Slackware Professional - версия Slackware, поставляемая Morse Telecommunications), то используются два каталога CD-ROM. slakware используется для стандартной системы, которая инсталлирует файлы прямо на ваш жесткий диск. slackpro используется на базирующейся на CD-ROM системе, где многие файлы доступны прямо с CD-ROM. Это позволяет сэкономить дисковое пространство, но доступ ко многим файлам заметно медленнее. Некоторые другие поставщики Slackware предоставляют возможности работы прямо с CD-ROM. Но, если у вас есть свободное место на диске, мы не рекомендуем работать со Slackware прямо с CD-ROM. Это медленно. При инсталляции может быть сообщение Slackware об ошибке монтирования. Это часто говорит о проблеме доступа к жесткому диску или CD-ROM. Если вы увидите такие сообщения об ошибках, посмотрите дополнительную информацию в Разделе 2.5.3. Disk sets Эта опция меню позволяет выбрать дисковые наборы, которые вы будете инсталлировать. Как минимум, вы должны инсталлировать дисковый набор A. Для выбора дисковых наборов просто используйте стрелки и клавишу пробела. Обратим внимание, что выбор конкретного дискового набора не означает, что все пакеты диска будут инсталлированы; перед инсталляцией пакетов вам будут выдаваться комментарии ``optional'' или ``recommended.'' Install Наконец, этот пункт меню непосредственно инсталлирует программы в вашу систему. Можно при этом следовать подсказкам. Большинство пользователей выбирает режим ``normal.'' Для каждого выбранного дискового набора выбираются "нужные" пакеты для инсталляции, что сопровождается подсказками. Если вы инсталлируете с дискеты, то будут выдаваться также сообщения о необходимости вставить следующую дискету. После инсталляции каждого пакета выдается краткое сообщение. Но если у вас нет предварительного опыта работы с Linux или UNIX, многие из этих сообщений будут для вас маловразумительными. Важно, что соответствующий пакет инсталлирован, так что можете не ломать голову над всем, что при этом система решила вам сообщить. Наиболее типичная ошибка, с которой здесь можно столкнуться - на дискете не обнаруживается нужный файл или ошибка возникает при чтении с дискеты. Последнее сообщение может свидетельствовать о том, что файлы на дискете попорчены или неполны. Любые дискеты, порождающие эти сообщения, должны быть заменены, и вам следует заново инсталлировать дисковые наборы, содержащиеся на этих дискетах. Смотрите также Раздел 2.5.3. Вы можете также столкнуться с сообщениями об ошибках, при попытке обращения к CD-ROM; убедитесь, что CD-ROM чистый, нет следов от пальцев и т.п. Configure Этот пункт меню выполняет пост-инсталляционное конфигурирование системы. Это описывается в следующем разделе. Создание загрузочной дискеты или инсталляция LILO Каждый дистрибутив представляет какие-то средства для загрузки вашего нового Linux после инсталляции. Во многих случаях инсталляционная процедура создаст загрузочную дискету, содержащую ядро Linux, конфигурированное для использования вновь созданной файловой системы. Для того, чтобы загрузить Linux, вы должны загрузиться с этой дискеты, и управление после этого будет передано жесткому диску. В других дистрибутивах эта загрузочная дискета одновременно является и инсталляционной дискетой. Многие дистрибутивы дают возможность инсталлировать LILO на ваш жесткий диск. LILO - это программа, которая размещается в главной загрузочной записи (master boot record) диска. Она может загружать ряд операционных систем, включая MS-DOS и Linux, и позволяет в момент загрузки выбирать, что именно загружать. В дистрибутиве Slackware пункт меню Configure в setup позволяет создавать загрузочную дискету, как и инсталлировать LILO. Эти опции должны комментировать свои действия. Пункт меню Configure позволяет также описывать ваши модем, мышь и информацию о временной зоне. Чтобы LILO успешно инсталлировалась, необходимо многое знать о конфигурации системы, например, какой раздел какую операционную систему содержит, как загружать каждую из систем и т.д. Многие дистрибутивы при инсталляции LILO пытаются "угадать" соответствующие параметры конфигурации вашей системы. Но в некоторых дистрибутивах автоматическая инсталляция LILO может потерпеть неудачу и оставить вашу главную загрузочную запись в "подвешенном" состоянии (хотя маловероятно, что при этом будет причинен ущерб данным на диске). Особенно, если вы применяете Boot Manager операционной системы OS/2, вы не должны пользоваться автоматической процедурой инсталляции LILO. Существуют специальные инструкции по использованию LILO совместно с Boot Manager, которые будут рассмотрены позже. Во многих случаях лучше использовать загрузочную дискету, пока у вас не появится возможность самому конфигурировать LILO вручную. Если вы обладаете повышенной доверчивостью, вы можете пользоваться автоматической инсталляцией LILO, если она есть в вашем дистрибутиве. В Главе 4 мы обсудим в деталях, как конфигурировать и инсталлировать LILO конкретно для вашего setup. Если все идет хорошо, примите наши поздравления! Вы аккуратно инсталлировали Linux на вашей системе. Выпейте диетической Коки или чего-нибудь другого - вы заслужили. В случае, если вы напоролись на неприятности, следующий раздел опишет наиболее характерные глюки при инсталляции Linux, и как с ними бороться. Дополнительные процедуры инсталляции Некоторые дистрибутивы Linux снабжены рядом дополнительных инсталляционных процедур, позволяющих конфигурировать различные пакеты, такие как TCP/IP, X Window System и т.д. Если у вас есть эти конфигурационные опции периода инсталляции, вам может быть будет интересно предварительно прочитать в этой книге об особенностях конфигурации этих программ. Иначе вам следует отложить эти процедуры до тех пор, когда вы не придете к полному пониманию, как конфигурировать программы. Как хотите, если все идет наперекосяк - плывите по течению и смотрите, что из всего этого получится. Весьма сомнительно, что все, что вы натворите сейчас, нельзя будет переделать потом (впрочем, постучите по дереву). 2.4 Постинсталляционные процедуры После того, как вы закончите инсталляцию Linux, мало что остается сделать перед тем, как начать использовать систему. В большинстве случаев вы можете перезагрузить систему, войти под root и начать эксплуатировать систему. (Все дистрибутивы имеют слегка различающиеся приемы, реализующие то же самое). Сейчас самое подходящее время рассказать, как перезагружаться и выключать систему в процессе эксплуатации. Ни в коем случае не перезагружайте и не выключайте систему путем нажатия "reset" или доброго старого способа "заткнуть вулкан" - нажать сразу ctrl-alt-del. Правда на большинстве Linux систем комбинация ctrl-alt-del приведет к нормальному выключению через команду shutdown. Не следует также "бесхитростно" вырубать питание. Как и в большинстве систем UNIX, Linux хранит записываемую информацию в кэше оперативной памяти. Поэтому, если вы внезапно перезагрузитесь без "чистого" закрытия системы, вы можете попортить данные на диске, что может привести к невосполнимым потерям. Самый простой способ выключить систему - использовать команду shutdown. Например, для немедленного выключения и перезагрузки используйте следующую команду (в root): # shutdown -r now Эта команда чисто перезагрузит вашу систему. Руководство на команду shutdown описывает и другие возможные аргументы командной строки. Можно посмотреть возможности команды, обратившись к машинному руководству man shutdown. Обратите внимание, что многие дистрибутивы Linux не предлагают команду shutdown на средствах инсталляции. Это означает, что при первой загрузке после инсталляции, вам может потребоваться для останова ctrl-alt-del. А после этого вы всегда должны использовать команду shutdown. прим. переводчика: До настоящего момента я закрывал Linux-систему командой halt, но shutdown тоже работает :-). После того, как вы получили возможность использовать систему, осталось еще несколько акций связанных с конфигурированием, которые следовало бы предпринять. Первое, это создать себе пользовательский account (и, возможно, для других пользователей, которые будут иметь доступ к (в) этой системе) прим. переводчика: завести account - значит зарегистрироваться в системе. Создание пользовательских accounts описано в Разделе 4.4. Обычно все, что вы должны сделать, это войти под именем root и выполнить команду adduser (иногда useradd). При регистрации будет несколько подсказок, которые помогут вам зарегистрировать новых пользователей. Если вы создали более одной файловой системы для Linux или, если вы используете область своппинга, вам может понадобиться отредактировать файл /etc/fstab, чтобы ваши файловые системы были автоматически доступны после загрузки. (Например, если вы используете отдельную файловую систему для /usr и не можете обнаружить ни одного из файлов этой файловой системы, может оказаться, что вам просто надо эту систему примонтировать). В Разделе 4.8. описывается эта процедура. Заметим, что дистрибутивы Slackware Linux автоматически конфигурируют ваши файловые системы и области своппинга, так что в описаном выше обычно нет необходимости. 2.5 Борьба с глюками Практический каждый влипнет в какую-нибудь историю при первой попытке инсталлировать Linux. В большей части случаев это связано с простым неправильным пониманием. прим. переводчика: То есть связано с привычкой быстро, но неправильно схватывать мысли. Но иногда может быть кое-что и посерьезнее, как зевок проектировщиков или просто ошибка. Этот раздел описывает некоторые наиболее часто встречающиеся проблемы инсталляции и как их решать. Если инсталляция прошла успешно, но вы получили неожиданные сообщения об ошибках, они здесь также описываются. Проблемы загрузки средств инсталляции Пытаясь первый раз загрузить средства инсталляции, вы можете столкнуться с множеством проблем. Они перечислены ниже. Заметим, что следующие проблемы не относятся к загрузке вашего вновь инсталлированного Linux. Относительно таких проблем см. Раздел 2.5.4. * Ошибка дискеты или средства инсталляции. Наиболее часто встречающийся случай при такого рода проблемах - это запорченная загрузочная дискета. Либо дискета физически повреждена - тогда вы должны восстановить диск, используя исправную дискету, либо испорчены данные на дискете, в этом случае следует проверить правильность перенесения данных на дискету. Во многих случаях вам может помочь простая перезапись дискеты. Если вы получили загрузочную дискету по почте или от какого-то другого дистрибутора, вместо самостоятельных попыток восстановить испорченную дискету свяжитесь с дистрибутором и попросите новую загрузочную дискету - но только окончательно убедившись, что именно в дискете причина. * Система "зависает" во время или сразу после загрузки. После инсталляции средств загрузки вы увидите номер сообщения ядра, указывающий, какие устройства были распознаны и конфигурированы. После этого обычно выдается "login", позволяющий продолжать инсталляцию (некоторые дистрибутивы вместо этого помещают вас в некоторого рода инсталляционную программу). Система может зависнуть во время этих шагов. Во многих случаях система не зависает, а просто требует много времени на выполнение. Так что, прежде чем решить, что система зависла, убедитесь, что по крайней мере несколько минут дисковод и процессор бездействуют. 1. После загрузки с помощью LILO, система должна загрузить образ ядра с дискеты. Это может занять несколько секунд; если горит при этом лампочка обращения к дисководу, то это значит, что все идет нормально. 2. При загрузке ядра SCSI устройства должны быть проверены. Если у вас еще не было инсталлировано какого-нибудь SCSI устройства, система "зависнет" секунд на 15, пока происходит проверка SCSI устройства; обычно это происходит после строки lp_init: lp1 exists (0), using polling driver появившейся на вашем экране. 3. После окончания загрузки ядра управление передается системе, загружающей файлы с дискеты. Затем вам будет выдана подсказка login или система выйдет в инсталляционную программу. Если вы дошли до подсказки, например, имеющей вид Linux login: далее вы должны войти (обычно как root или install - в разных версиях дистрибутивов по-разному). После введения имени пользователя система может задуматься секунд на 20 или более, пока программа инсталляции или shell загружается с дискеты. Опять же лампочка дисковода должна гореть. Так что не думайте, что система опять зависла. Любой из перечисленных выше пунктов может быть источником проблем. Разумеется, система может и взаправду зависнуть при загрузке, чему может быть несколько причин. Прежде всего, у вас может быть недостаточно памяти (RAM) для загрузки средств инсталляции. Причина многих системных зависаний - аппаратная несовместимость. Раздел 1.8 последней главы представляет обзор поддерживаемого ОС Linux оборудования. Даже если ваша аппаратура поддерживается, у вас могут быть проблемы, связанные с несовместимостью конфигурации оборудования, которые тоже могут быть причиной зависания. Смотрите Раздел 2.5.2, где обсуждаются вопросы аппаратной несовместимости. * Системные сообщения об ошибках памяти в процессе инсталляции. Этот пункт относится к количеству памяти, которая имеется в вашем распоряжении. На системе с 4M RAM или менее у вас могут быть проблемы с самой загрузкой средств инсталляции. Это потому, что многие дистрибутивы используют ``ramdisk'', которая является файловой системой, загружаемой прямо в RAM во время операций, использующих средства инсталляции. Полный образ инсталляционной дискеты, например, может быть загружен на ramdisk, что может потребовать более мегабайта памяти. Решение этой проблемы - подготовить опцию ramdisk при загрузке средств инсталляции. Каждая версия имеет процедуры реализации этого; в версии SLS, например, вы печатаете ``floppy'', когда появится подсказка LILO при загрузке диска "a1". Детали посмотрите в документации на дистрибутив. Вы можете не увидеть сообщение ``out of memory'' при попытке загрузиться или инсталлировать программы; вместо этого система может неожиданно зависнуть или сорвать загрузку. Если система зависла и никакие предыдущие об'яснения не помогают, попытайтесь отключить (disable) ramdisk. Имейте в виду, что Linux сам по себе требует не менее 2 M RAM для минимального функционирования; некоторые версии требуют наличия 4M и даже более. * Система сообщает об ошибках, таких как ``permission denied'' (обращение запрещено) или ``file not found''(файл не найден) в процессе загрузки. Это говорит о том, что средства инсталляции неисправны. Если вы попытаетесь загрузиться со средств инсталляции (и вы уверены, что все делаете правильно), то у вас не должно появляться сообщений, вроде вышеупомянутых. Свяжитесь с дистрибутором вашего Linux и обсудите с ним проблему. Может быть нужна новая копия. Если вы переписали загрузочный диск сами, попробуйте пересоздать этот загрузочный диск, может это решит проблему. * Система при загрузке выдает сообщение ``VFS: Unable to mount root''. Это сообщение об ошибке означает, что корневая файловая система (сама находящаяся на средстве загрузки) не может быть найдена. То ли ваши средства загрузки каким-то образом испорчены, то ли вы неправильно пытаетесь загружать систему. Например, многие дистрибутивы на CD-ROM требуют, чтобы при загрузке лазерный диск находился в дисководе. Убедитесь также, что дисковод CD-ROM включен и что-то делает. Подробнее смотрите в Разделе 2.5.2. Если вы уверены, что вы правильно загружаете систему, то возможно неправильно работают ваши средства загрузки. Но это нетипичная ситуация, попробуйте другие варианты, прежде чем пытаться использовать другую загрузочную дискету или ленту. Аппаратные проблемы Наиболее общий случай, когда инсталляция или использование Linux приходят в противоречие с аппаратурой. Даже если вся ваша аппаратура поддерживается Linux, неправильное конфигурирование или конфликты между отдельными устройствами могут иногда приводить к странным результатам: устройства могут не распознаваться на этапе загрузки или система может зависать. Важно локализовать эти аппаратные проблемы, если вы подозреваете, что именно они являются источником ваших неприятностей. В последующих разделах мы опишем некоторые общие проблемы, связанные с аппаратурой, и как решать их. Локализация аппаратных проблем Если вы столкнулись с проблемой, которая по вашему мнению носит аппаратный характер, первое, что вы должны сделать, это попытаться локализовать проблему. Это означает, что исключая все возможные составляющие и (обычно) саму операционную систему, вы постепенно шаг за шагом выделяете неисправную часть аппаратуры. Это не так тяжело, как иногда может казаться. Первоначально вы должны отключить от системы все несущественное оборудование, а затем определить, какое устройство в действительности является источником неприятностей, подключая шаг за шагом устройства. Это означает, что вы должны отключить все устройства кроме контроллеров гибкого диска и видео, а также, разумеется, клавиатуры. Даже такие невинные на первый взгляд устройства, как мышь, могут внести большую сумятицу в ваши мозги. Например, предположим, что система зависла во время загрузки при распознавании платы Ethernet. Вы можете предположить, что имеет место конфликт или это проблема данной платы Ethernet. Простой и быстрый способ определиться - это вытащить плату Ethernet и попытаться вновь загрузиться. Если все пойдет нормально, то (a) плата Ethernet не поддерживается Linux (смотри Раздел 1.8 относительно совместимых плат), или (b) существует адрес или IRQ, конфликтующие с платой. ``Конфликт адреса или IRQ ?'' А это-то, скажите на милость, что еще может значить? Все устройства в вашей машине используют IRQ прим. переводчика: IRQ - Interrupt ReQuest или линию запросов прерывания, чтобы сообщить системе, что система должна для них что-то сделать. Вы можете представить себе IRQ как веревочку, за которую устройство дергает, когда ему надо, чтобы система позаботилась о выполнении какого-то поступившего запроса. Если более, чем одно устройство дергает за эту веревочку, ядро не способно определить, какое устройство нуждается в обслуживании. Вот вам и глюк. Поэтому убедитесь, что все инсталлированные вами устройства используют уникальные линии IRQ. В общем случае IRQ для устройства может быть установлен с помощью переключения джамперов (jumpers) на плате; детали смотрите в документации на конкретное устройство. Некоторые устройства вообще не используют IRQ, но предполагается, что вы конфигурировали их, так, что они смогут им воспользоваться. (Хорошие примеры тому контроллеры Seagate ST01 и ST02 SCSI). В некоторых случаях ядро, находящееся на ваших средствах инсталляции, конфигурируется для использования конкретного IRQ для конкретного устройства. Например, в некоторых дистрибутивах Linux ядро предварительно сконфигурировано так, чтобы использовать IRQ 5 для контроллера TMC-950 SCSI, контроллера CD-ROM Mitsumi и драйвер мыши busmouse. Если вы хотите использовать два или более из этих устройств, вам необходимо будет вначале инсталлировать Linux только с одним из этих устройств, подключенным к системе, а затем перекомпилировать ядро, чтобы сменить IRQ, выделенное для другого из них по умолчанию. (Смотри Главу 4 по поводу перекомпиляции ядра). Другая область, где могут возникнуть конфликты аппаратуры - это каналы DMA (Direct Memory Access) (каналы прямого доступа к памяти), адреса ввода-вывода (I/O) и адреса разделяемой памяти (shared memory addresses). Все вышеперечисленное есть механизмы, через которые система взаимодействует с различными устройствами. Некоторые платы Ethernet, например, используют разделяемую память также как и IRQ в качестве интерфейса с системой. И если они конфликтуют с другими драйверами - система ведет себя непредсказуемо. Вы должны быть готовы к изменению канала DMA, адресов ввода-вывода или разделяемой памяти для различных устройств с помощью переустановки джамперов. (К сожалению, некоторые устройства не позволяют сделать такие переустановки). Документация на различные устройства должна указывать IRQ, канал DMA, адрес ввода-вывода или адрес разделяемой памяти, которые используют устройства, и как их конфигурировать. И опять, простейший способ справиться с этой проблемой, это просто временно отключить конфликтующие устройства до того, как вы определите причину конфликта. Таблица 2.2 представляет перечень IRQ и каналов DMA, используемых различными "стандартными" устройствами, стоящими во многих системах. Практически все системы имеют эти устройства, так что вам следует избегать установок IRQ и DMA других устройств на эти значения. Device I/O-адрес IRQ DMA ttyS0 (COM1) 3f8 4 n/a ttyS1 (COM2) 2f8 3 n/a ttyS2 (COM3) 3e8 4 n/a ttyS3 (COM4) 2e8 3 n/a lp0 (LPT1) 378 - 37f 7 n/a lp1 (LPT2) 278 - 27f 5 n/a fd0, fd1 (floppies 1 and 2) 3f0 - 3f7 6 2 fd2, fd3 (floppies 3 and 4) 370 - 377 10 3 Таблица 2.2: Обычные установки для устройств Проблемы распознавания жесткого диска или контроллера При загрузке Linux вы увидите серии посланий, выдаваемых на экран, вроде: Console: colour EGA+ 80x25, 8 virtual consoles Serial driver version 3.96 with no serial options enabled tty00 at 0x03f8 (irq = 4) is a 16450 tty03 at 0x02e8 (irq = 3) is a 16550A lp_init: lp1 exists (0), using polling driver ... Здесь ядро распознает различные устройства, имеющиеся в системе. В некоторый момент вы увидите строчку Partition check: (Проверка раздела), за которой следует список распознанных разделов, например: Partition check: hda: hda1 hda2 hdb: hdb1 hdb2 hdb3 Если по какой-то причине ваши дисководы или разделы нераспознаны, вы никаким образом не сможете к ним добраться. Это может произойти по нескольким причинам: * Жесткий диск или контроллер не поддерживается. Если вы используете контроллер жесткого диска (IDE, SCSI и тому подобные), из тех, которые не поддерживаются в Linux, ядро не распознает ваш раздел на этапе загрузки. * Жесткий диск или контроллер неправильно конфигурированы. Даже если ваш контроллер поддерживается в Linux, он может быть неправильно конфигурирован. (Особенно эта проблема характерна для контроллеров SCSI; большинство не-SCSI контроллеров будет хорошо работать без дополнительной конфигурации). Для решения такого рода проблем обращайтесь к соответствующей документации на жесткие диски и/или контроллеры. В частности, многие жесткие диски потребуют переустановки джамперов, если они будут использоваться в режиме "подчиненного" (``slave'') драйвера (например, в качестве второго жесткого диска). Самый железный способ проверить наличие такой ситуации - это загрузить MS-DOS или еще какую-нибудь другую операционную систему, которая заведомо должна работать с этим жестким диском и контроллером. Если вы получите доступ к диску и контроллеру из другой операционной системы, то значит ваши проблемы не в конфигурировании аппаратуры. Смотрите Раздел 2.5.2.1 (ранее) по поводу разрешения возможных конфликтов устройств и Раздел 2.5.2.3 (далее) по поводу конфигурирования SCSI-устройств. * Контроллер конфигурирован правильно, но не распознается. Некоторые без-BIOS-ные SCSI-контроллеры требуют от пользователя описания контроллера на этапе загрузки. В Разделе 2.5.2.3 (далее) описывается, как осуществить определение этих контроллеров. * Не распознается геометрия жесткого диска. Некоторые системы, такие, как IBM PS/ValuePoint, не помещают информацию о геометрии жесткого диска в память CMOS, где Linux ожидает ее найти. Также, некоторым SCSI-контроллерам надо сообщать, где найти геометрию диска, чтобы Linux мог распознать формат вашего диска. Многие дистрибутивы имеют загрузочную опцию для описания геометрии диска. В общем случае, при загрузке средств инсталляции, вы можете описать геометрию драйвера в ответ на подсказку загрузчика LILO с помощью команды, например: boot: linux hd=,, где , и соответсвуют числу цилиндров, головок и секторов на трек у вашего диска. После инсталляции Linux вы будете иметь возможность инсталлировать LILO, который позволит вам загружаться с жесткого диска. В это время вы можете описать геометрию для инсталляционной процедуры LILO, что позволит не вводить геометрию при каждой загрузке. Более подробно о LILO смотрите в Главе 4. Проблемы со SCSI-контроллерами и устройствами Здесь описываются некоторые из наиболее типичных проблем, возникающих со SCSI-контроллерами и устройствами, такими, например, как CD-ROM, жесткие диски и ленты. Если у вас проблемы заставить Linux распознавать диск или контроллер, читайте дальше. Linux SCSI HOWTO (см. Приложение A) содержит много полезной информации о таких SCSI-устройствах, в дополнение к перечисленным здесь. Иногда требуется почти акробатическая ловкость при конфигурировании SCSI. * SCSI-скази устройство распознается всеми возможными идентификаторами (ID). Это связано с привязкой устройств к одному и тому же адресу с контроллером. Вам следует изменить установку переключателей так, чтобы драйвер и контроллер использовали различные адреса. * Linux сообщает об обнаруживаемых ошибках, хотя известно, что устройство работает безошибочно. Это может происходить из-за плохого кабеля или плохого раз'ема. Если ваша SCSI-шина не имеет надежных контактов с обеих сторон - может возникать ошибка доступа к SCSI-устройствам. Если у вас возникают сомнения, всегда проверяйте кабель. * SCSI-устройства сообщают об ошибках истечения времени. Это обычно происходит из-за конфликтов IRQ, адресов DMA или устройств. Следует проверить также, что прерывания вашим контроллером обрабатываются корректно. * SCSI-контроллеры, использующие BIOS не идентифицируются. Распознавание контроллеров, использующих BIOS, потерпит неудачу, если BIOS отключен или "подпись" вашего контроллера не распознается ядром. Дополнительную информацию можно найти в Linux SCSI HOWTO. * Контроллеры, использующие отображаемый в память ввод-вывод, не работают. Это происходит, когда порты отображаемого в памяти ввода-вывода буферизируются некорректно. Или определите в установках XCMOS адресное пространство контроллера, как некэшируемое, или отключите также и кэш. * При разбиении на разделы будет выдано сообщение, что ``cylinders > 1024'' или что вы не сможете загрузиться из раздела, имеющего номера цилиндров более 1023. BIOS ограничивает число цилиндров числом 1024 и любой раздел, использующий большие номера цилиндров, будет неприемлем с точки зрения BIOS. Применительно к Linux это касается только загрузки; после того, как система загружена, вы сможете обращаться к разделу. Вы можете выбирать, загружать ли Linux с дискеты или из раздела, использующего цилиндры с номерами меньше 1024. Относительно создания загрузочной дискеты или инсталляции LILO смотрите Раздел 2.3.7. * CD-ROM или другие устройства, которые могут дополнительно вставляться (удаляться) в компьютер, не распознаются на этапе загрузки. Постарайтесь загрузиться с подключенным CD-ROM (или диском). Для некоторых устройств это необходимо. Если ваш SCSI-контроллер нераспознан, возможно вам следует инициировать (force) распознавание аппаратуры на этапе загрузки. Это особенно важно для без-BIOS-ных SCSI-контроллеров. Большинство дистрибутивов позволяет описывать IRQ контроллеров и адресов разделяемой памяти во время загрузки средств инсталляции. Например, если вы используете контроллер TMC-8xx, вы можете ввести boot: linux tmx8xx=, в ответ на подсказку загрузчика LILO, где - IRQ контроллера и - адрес разделяемой памяти. Сможете ли вы это сделать, зависит от используемого вами дистрибутива Linux, так что относительно деталей посмотрите документацию. Проблемы инсталляции программ Предполагается, что инсталляция программ Linux должна проходить без особых хлопот, если вы счастливый человек. Единственные проблемы, с которыми вы можете столкнуться, это испорченные средства инсталляции или отсутствие достаточного места на файловой системе Linux. Вот перечень наиболее характерных проблем: * Системные сообщения ``Read error''(ошибка чтения), ``file not found''(не найден файл) или другие ошибки во время попытки инсталлировать программы. Это говорит о проблемах с вашими средствами инсталляции. Если вы инсталлируете с дискеты, имейте в виду, что дискеты очень склонны к такого рода недостаткам. Убедитесь, что вы используете новые исправные и свежеотформатированные дискеты. Если у вас есть на диске разделы MS-DOS, многие дистрибутивы Linux позволят вам инсталлировать с жесткого диска. Это может быть быстрее и более надежно, чем использование дискет. Если вы используете CD-ROM, убедитесь в отсутствии на нем царапин, пыли или других гадостей, которые могут приводить к ошибкам. Причиной может быть и то, что соответствующее средство инсталляции имеет неподходящий формат. Например, при использовании дискет многие дистрибутивы Linux требуют, чтобы дискета была отформатирована в формате high-density MS-DOS. (Загрузочная дискета - исключение; в большинстве случаев она вообще не в формате MS-DOS). Если все прочее потерпело неудачу, либо достаньте новый набор дискет с дистрибутивом или перепишите его на новые дискеты, если вы скачали дистрибутив откуда-то. * Системные сообщения вроде ``tar: read error'' (tar: ошибка чтения) или ``gzip: not in gzip format''(gzip: не в формате gzip). Часто это связано с испорченными файлами на средствах инсталляции. Другими словами, ваши дискеты могут быть нормальными, но вот данные на них каким-то образом испорчены. Например, вы каким-то образом скачали программы Linux, используя текстовый (а не бинарный) режим, тогда ваши файлы уж точно будут негодными для инсталляции. * Системные сообщения об ошибках, такие как ``device full'' (устройство заполнено) в процессе инсталляции. Это верный признак того, что вы вышли за пределы отведенного пространства при инсталляции. Не все дистрибутивы способны с этим разобраться; вы не сможете прервать инсталляцию и вынуждены дождаться, когда система сама остановится. Обычное решение в этой ситуации - пересоздание файловой системы (с помощью команды mke2fs), которая удаляет частично инсталлированные программы. Вы далее можете попытаться переинсталлировать программы, выбирая на этот раз меньшее количество программ, подлежащих инсталляции. В других случаях вам может понадобиться начать с полного удаления и перераспределения разделов и размеров файловой системы. * Системные сообщения об ошибках, такие как ``read_intr: 0x10'' при обращении к жесткому диску. Это обычно говорит о наличии плохих блоков на диске. Однако, если вы получили это сообщение во время выполнения mkswap или mke2fs, причиной этого могло быть то, что система имела проблемы с доступом к вашему диску. Это может быть как проблема аппаратуры (см. Раздел 2.5.2), так и результат неправильного описания геометрии. Если вы применяли hd=,, опцию периода загрузки, чтобы инициировать определение геометрии своего жесткого диска и описали геометрию некорректно, то вы должны будете познакомиться с этой проблемой. Это также может случиться, если геометрия вашего драйвера описана некорректно в CMOS. * Системные сообщения об ошибках , вроде ``file not found'' или ``permission denied''. Это может случиться, если не все необходимые файлы представлены на средствах инсталляции (смотрите следующий раздел) или существует проблема разрешения доступа. Например, про некоторые дистрибутивы Linux известно, что они сами по себе содержат ошибки. Это обычно обнаруживается очень быстро, да и случается не часто. Если вы подозреваете, что программы дистрибутива содержат ошибки и уверены, что вы ничего не сделали неправильно, свяжитесь с сопровождающими дистрибутив и сообщите об ошибке. Если у вас появляются другие странные ошибки во время инсталляции Linux (особенно если вы сами переписали где-то эти программы), убедитесь, что вы действительно списали все необходимое. Например, некоторые используют команду FTP mget *.* для скачивания программ Linux через FTP. Она скачает только те файлы, которые содержат ``.'' в именах файлов; если есть файлы без ``.'', вы их не получите. В этом случае уместной была бы команда mget * Самый лучший совет - заново пересмотреть все шаги, которые вы совершили, если у вас застопорилось дело. Вы можете наивно думать, что вы все делали правильно, когда на самом деле вы забыли сделать какой-то маленький, но важный шаг, где-то посреди нелегкого пути инсталляции. Во многих случаях даже сама попытка заново переписать или заново инсталлировать Linux может натолкнуть на решение действительной проблемы. Не надо биться головой об стену дольше, чем надо! Кроме прочего, если Linux завис при инсталляции, причины могут быть в аппаратуре. Смотрите по этому поводу Раздел 2.5.2. Проблемы после инсталляции Linux Вы потратили целых полдня, инсталлируя Linux. Чтобы выделить под него место, вы стерли свои разделы с MS-DOS и OS/2 и не без утирания слез стерли свои копии "SimCity" и "Wing Commander"... Вы перезагрузили систему, а ничего не произошло. Или еще хуже того, что-то произошло, но не то, что должно было произойти. Ну и что делать? В Разделе 2.5.1 мы обсуждали некоторые из наиболее типичных проблем, возникающих при загрузке Linux со средств инсталляции. Многие из этих проблем могут быть и здесь. В довершение ко всему вы можете стать жертвой одной из следующих напастей. Проблемы загрузки Linux с дискеты Если вы используете дискеты для загрузки Linux, вам может потребоваться описать местоположение вашего корневого раздела linux во время загрузки. Это обычно случается, когда вы используете исходную инсталляционную дискету, а не специальную загрузочную дискету, созданную в процессе инсталляции. При загрузке дискеты, надо держать shift или ctrl. Это приведет вас к загрузочному меню; нажмите tab, чтобы получить спиок доступных опций. Например, многие дистрибутивы позволяют ввести boot: linux hd= где - имя корневого раздела Linux, например, /dev/hda2. Более детально с вопросом можно познакомиться по документации на дистрибутив. Проблемы загрузки Linux с жесткого диска Если вам удалось инсталлировать LILO, вместо создания загрузочной дискеты вам следует загружать Linux с жесткого диска. Однако, автоматизированная процедура инсталляции LILO, используемая во многих дистрибутивах, не всегда безупречна. Она может сделать неправильные предположения относительно формата вашего раздела, в этом случае вы должны будете переинсталлировать LILO, чтобы все стало хорошо. Инсталляция LILO обсуждается в Главе 4. * Системные сообщения ``Drive not bootable---Please insert system disk.'' ("Устройство незагружаемо---Пожалуйста, вставьте системный диск"). Вы получите такое сообщение об ошибке, если главная загрузочная запись жесткого диска каким-то образом попорчена. Во многих случаях это безопасно и все остальное у вас на диске по-прежнему в порядке. Тут дальше есть несколько путей. 1. При разбиении диска на разделы с использованием fdisk вы могли удалить раздел, который был отмечен как ``active''. MS-DOS и другие операционные системы пытаются загрузить такой раздел на этапе загрузки (Linux не обращает внимания на то, является раздел ``active'' или нет). Вы можете загрузить MS-DOS с дискеты и запустить FDISK для установки флага ``active'' для раздела MS-DOS и все будет хорошо. Другая команда, которую можно попробовать (с MS-DOS 5.0 и выше) это FDISK /MBR Эта команда будет пытаться заново сформировать главную загрузочную запись диска для загрузки MS-DOS, переписывая LILO. Если у вас больше нет на жестком диске MS-DOS, вам потребуется загрузить Linux с дискеты и в последующем попытаться инсталлировать LILO. 2. Если вы создали раздел MS-DOS, используя версию команды fdisk из Linux или наоборот, это может быть причиной ошибки. Вам следует создавать разделы для MS-DOS, используя только версии FDISK для MS-DOS. (Это относится и к другим операционным системам, которые существуют наряду с MS-DOS). Здесь лучшее решение - либо начать с того, что все стереть и переразбить диск правильно, либо удалить и пересоздать плохие разделы, используя исправные версии fdisk. 3. Инсталляционная процедура LILO может потерпеть неудачу. В этом случае вам следует либо загрузиться с загрузочной дискеты для Linux (если она у вас есть) или с исходного средства инсталляции. В любом случае вы будете иметь возможность для описании корневого раздела Linux, который будет использован при загрузке. Нажмите shift или ctrl во время загрузки и нажмите tab из меню загрузки, чтобы получить список опций. * При загрузке системы с жесткого диска MS-DOS (или другая из существующих операционных систем) стартует вместо Linux. Прежде всего убедитесь, что вы действительно инсталлировали LILO при инсталляции программ Linux. Если это оказалось не так, система будет загружать MS-DOS (или какую-нибудь другую операционную систему из собранных вами), когда вы пытаетесь загрузиться с жесткого диска. Для того, чтобы загрузить Linux с жесткого диска, вам необходимо инсталлировать на жеский диск LILO (см. Главу 4). С другой стороны, если вы все-таки инсталлировали LILO, но другая операционная система загружается вместо Linux, то необходимо конфигурировать LILO так, чтобы она загружала другие операционные системы по умолчанию. Во время загрузки системы держите нажатой клавишу shift или ctrl, а затем нажмите tab в ответ на подсказку загрузчика. В результате вы получите список операционных систем, которые можно загрузить. Выберите соответствующую опцию (часто просто ``linux''), чтобы загрузить Linux. Если вы хотите сделать Linux системой, загружаемой по умолчанию, вам необходимо реинсталлировать LILO. Смотрите Главу 4. Возможно также, что вы пытались инсталлировать LILO, но инсталляция потерпела неудачу. Смотрите предыдущий пункт. Проблемы входа в систему После загрузки Linux вам (на экран) должна быть выдана подсказка вроде этой: linux login: В этот момент либо документация на дистрибутив, либо сама система скажут вам, что делать дальше. В большинстве дистрибутивов вы просто войдете в систему под именем root (суперпользователь, администратор) без пароля. Другие возможные имена для входа guest или test. Большинство новоиспеченных систем Linux не требуют пароля для первоначального входа. Но если система потребует с вас пароль, могут возникнуть проблемы. Прежде всего попробуйте пароль, совпадающий с именем входа; например, если вы вошли как root, попробуйте ``root'' в качестве пароля. Если вы все-таки не можете войти, то это уже проблема. Прежде всего проконсультируйтесь с документацией на дистрибутив. Может быть там где-то закопано правильное имя входа и пароль. Имя входа и пароль могут быть вам сообщены системой во время инсталляции или выведены на экран в виде подсказки. Причиной этих неприятностей также могут быть проблемы с самой инсталляцией файлов, отвечающих за вход и инициализацию. Если в этом причина, вам может потребоваться переинсталлизация (как минимум части) программ Linux или нужно загрузить ваши средства инсталляции и попытаться решить проблемы "вручную". Смотрите соображения на этот счет в Главе 4. Проблемы использования системы Если вход в систему прошел успешно, на экран будет выдана подсказка "shell" - командной оболочки (например ``#'' или ``$'') и вы можете немножко поплясать вокруг системы. Но существует ряд проблем, которые могут возникнуть в начале использования системы. Одна из наиболее типичных начальных проблем, связанных с конфигурированием - установка неверных прав доступа (защиты) файлов и каталогов. Это может выразиться в сообщении Shell-init: permission denied которое будет напечатано после входа в систему (на самом деле, всегда, когда вы столкнетесь с сообщением ``permission denied''("обращение запрещено") вы можете быть с высокой вероятностью уверены, что это проблема защиты файлов). Во многих случаях это простое дело для команды "chmod", которая может менять права доступа к соответствующим файлам и каталогам. Например, некоторые дистрибутивы Linux использовали (ошибочный) код защиты файлов " 0644 " для корневого каталога (/). А следует использовать команду # chmod 755 / Но, чтобы ввести эту команду, вы должны загрузиться со средства инсталляции и примонтировать вашу корневую файловую систему Linux вручную - заковыристая задача для большинства новичков. Во время эксплуатации системы вы можете попадать в места, где неверно установлена защита файлов и каталогов или программы работают не так, как конфигурировались. Добро пожаловть в мир Linux! Хотя многие дистрибутивы и не доставляют особых хлопот, лишь немногие из них безупречны. Мы не хотим обсуждать здесь все возможные проблемы. Вместо этого по ходу всей книги мы помогаем вам решать многие проблемы конфигурирования, обучая вас обнаруживать и решать проблемы самостоятельно. В Главе 1 мы детально обсуждали эту философию. В Главе 4 мы даем советы относительно решения многих из типовых проблем конфигурирования. 3 Знакомство с Linux Содержимое этого раздела 3.1 Введение Новые пользователи UNIX и Linux могут быть ошеломлены размерами и очевидной сложностью системы, которая предстала перед ними. Существует много хороших книг по использованию UNIX для всех уровней подготовки: от новичка до эксперта. Но ни одна из этих книг не обсуждает особенности Linux. Хотя 95% всего связанного с использованием Linux абсолютно аналогично другим UNIX-системам, наиболее прямой путь освоения этой системы - это по учебнику, написанному применительно к Linux. Вот эта книга и есть такой учебник. Эта глава не заводит в дебри деталей и не обсуждает наиболее сложные прим. переводчика: они (и уже у нас тоже) говорят - продвинутые аспекты Linux. Вместо этого делается попытка поставить новичка крепко на ноги, чтобы он мог в дальнейшем читать и более общие книги по UNIX, понимая базовые различия других UNIX-систем и Linux. Здесь не предполагается каких-то предварительных знаний, за исключением первоначального знакомства с персональным компьютером и MS-DOS. Но даже если вы не успели побывать пользователем MS-DOS, вы все равно все здесь поймете. На первый взгляд UNIX очень похож на MS-DOS (в конце-концов фрагменты MS-DOS были спроектированы с оглядкой на операционную систему CP/M, которая, в свою очередь, проектировалась с оглядкой на UNIX). Но только при очень уж поверхностном взгляде можно говорить о похожести UNIX и MS-DOS. Если вы абсолютный новичок в мире персональных компьютеров, этот учебник вам поможет. И прежде, чем начать, призываем: не бойтесь экспериментировать. Система вас не укусит. Работая на ней вы ничего не сможете сломать. UNIX имеет встроенные средства защиты, чтобы не дать "нормальным" пользователям (это теперь и вы) возможность испортить важные для системы файлы. Самое плохое, что вы можете натворить - это уничтожить все свои файлы, а тогда, может быть придется и переинсталлировать заново систему прим. переводчика: как правило, чтобы довести систему до переинсталляции, надо иметь прав больше, чем у "нормального" пользователя. 3.2 Базовые концепции UNIX UNIX это многозадачная, многопользовательская операционная система. Это означает, что много людей может одновременно использовать один компьютер, выполняя много различных задач. (Это существенное отличие от MS-DOS, где только один человек может использовать в данный момент операционную систему). В UNIX пользователи должны себя идентифицировать при входе, что состоит из двух шагов: ввода имени (имя, по которому вас идентифицирует система) и входной пароль, который является вашим секретным словом для открытия вашего счета (регистрации в системе). Поскольку только вы знаете пароль, никто не может войти в систему под вашим именем. В традиционных UNIX-системах системный администратор присвоит вам имя и начальный пароль при вашей регистрации в системе (при заведении в системе нового пользователя). Но поскольку на своем персональном компьютере вы и системный администратор, вы должны себя (как пользователя) зарегистрировать в системе, прежде чем в нее войдете (смотрите Раздел 3.2.1 ниже). Для дальнейших разговоров возьмем условное имя ``larry''. Кроме прочего, каждая система UNIX имеет приписанное ей hostname (хозяйское имя). Это хозяйское имя добавляет машине характера и очарования. Hostname используется для идентификации отдельных машин в сети, но даже если ваша машина не в сети, она все равно должна иметь hostname. В Разделе 4.10.2 мы подробно расскажем об установке hostname на вашей машине. Например, имя машины, обсуждаемой ниже - ``mousehouse'' (мышинная норка). Регистрация в системе (открытие счета) Прежде, чем вы сможете использовать систему, вы должны зарегистрировать себя в системе. Это необходимо потому, что неразумно использовать имя суперпользователя (root) для обычных нужд. Пользователь root нужен для выполнения привилегированных команд и сопровождения системы, как это описывается в Разделе 4.1. Для того, чтобы зарегистрировать себя, вам необходимо зайти в систему под именем root и использовать команду useradd или adduser. Об этой процедуре смотрите подробней в Разделе 4.4. Вход в систему При входе вы увидите на экране подсказку, например, такого вида: mousehouse login: Введите свое имя и нажмите клавишу Return. Наш герой larry напечатает следующее: mousehouse login: larry Password: Теперь введите ваш пароль (password). При вводе пароль не будет отображаться на экране, так что набирайте внимательнее. Если вы неправильно набрали пароль, то увидите на экране сообщение Login incorrect и вам следует попытаться еще раз. Когда вы наконец правильно введете имя пользователя и пароль, вы официально будете допущены в систему и можете в ней свободно путешествовать. Виртуальные консоли Системная консоль - это монитор и клавиатура, связанные непосредственно с системой. (Поскольку UNIX многопользовательская система, вы можете иметь дополнительные терминалы, связанные через последовательные порты с вашей системой, но они не будут консолями). Linux, как и некоторые другие версии UNIX, обеспечивает доступ к виртуальным консолям (или VC), которые позволяют войти в систему под несколькими именами в одно время. Для демонстрации этого войдите в систему (как было показано ранее). Теперь нажмите alt-F2. Вы должны снова увидеть подсказку login: , то есть перед вами вторая виртуальная консоль, а вы вошли через первую. Чтобы переключиться обратно на первую VC, нажмите alt-F1. Оп-ля! Вы снова на первой консоли. Свежеинсталлированный Linux возможно позволит вам работать с четырьмя первыми VC, используя от alt-F1 до alt-F4. Но возможно обеспечить работу с 12-ю VC - по одной на каждую функциональную клавишу. Как видите, использование VC может быть очень эффективным - вы можете работать на нескольких VC одновременно. В то время, как использование виртуальных консолей ограничено (кроме прочего, в каждый момент времени вы можете видеть только одну виртуальную консоль) оно дает вам представление о многопользовательских возможностях UNIX. Пока вы работаете на VC #1, вы можете переключиться на VC #2 и начать работу над чем-то другим. Shells и команды В большинстве ваших исследований мира UNIX вы будете общаться с ним через оболочку shell. Shell - это просто программа, которая воспринимает введенное пользователем, (т.е. команды, которые вы напечатаете) и транслирует это в команды системе. Это можно сравнить с программой COMMAND.COM под MS-DOS, которая делает нечто похожее. Shell - это лишь один из интерфейсов UNIX. Существует много различных интерфейсов, таких как X Window System, которая позволяет выполнять команды используя мышь и клавиатуру в сочетании. Как только вы вошли, система запускает shell и вы можете вводить для него команды. Вот короткий пример. Как раз Larry вошел в систему и система вновь выдала подсказку: mousehouse login: larry Password: larry's password Welcome to Mousehouse! /home/larry# ``/home/larry#'' это подсказка shell, показывающая, что он готов принимать команды. (Подробнее про подсказкy позже). Давайте попросим систему сделать что-нибудь интересненькое: /home/larry# make love make: *** No way to make target `love'. Stop. /home/larry# Хм, как оказалось, "make" - это имя существующей в системе программы и shell пытался выполнить эту команду. (Жаль, но система отнеслась к просьбе недружественно). Это подводит нас к жгучему вопросу: Что такое команды? Что происходит, когда вы вводите ``make love''? Первое слово командной строки ``make'' это имя команды, которую предполагается выполнить. Все остальное в командной строке воспринимается как аргументы команды. Примеры: /home/larry# cp foo bar Здесь имя команды ``cp'', а аргументы ``foo'' и ``bar''. Когда вы вводите команду, shell делает несколько вещей. Во-первых, смотрит на то, что может (должно) быть именем команды и является ли это внутренней для shell командой. (Внутренняя, это команда, которую shell знает как выполнять. Существует ряд таких команд, мы о них поговорим позже). Shell также проверяет, не является ли команда синонимом другой или требуется подстановка имени. Если этого не надо делать, shell ищет соответствующую этому имени программу на диске. Если shell находит такую программу, он ее выполняет, передавая ей аргументы из командной строки. В нашем примере shell ищет программу по имени make и пытается выполнить ее с аргументом love. make - это программа, которая часто используется при компиляции больших программ, она берет в качестве аргумента имя "целевого" файла компиляции. В случае ``make love'' мы приказали команде make откомпилировать love. Поскольку make не смог найти файла с таким именем, он сообщил (несколько забавным образом) о невозможности выполнить команду и вернулся в подсказку. Что случится, если мы введем команду, а shell не сможет найти программу с этой командой? Давайте попробуем: /home/larry# eat dirt eat: command not found /home/larry# Все очень просто, если shell не может найти программу с именем данным в командной строке (здесь ``eat''), он выдает сообщение об ошибке, которое об'ясняет причину невыполнения команды. Вы часто будете видеть это сообщение, если будете вводить имена команд с ошибками. (например, напечатаете ``mkae love'' вместо ``make love''). Выход из системы Прежде, чем идти дальше, мы расскажем, как выйти из системы. При наличии подсказки shell используйте команду /home/larry# exit для выхода. Есть другие способы выхода, но этот самый безопасный. Смена пароля Вы также должны представлять, как можно менять пароль. Команда "passwd" прим. переводчика: именно с пропущенными буквами она и пишется спросит вас про старый пароль и про новый. Она попросит дважды ввести новый пороль для надежности. Внимание! Не забывайте свой пароль, иначе вам придется просить системного администратора уничтожить его и установить новый (Если вы и есть системный администратор, смотрите Раздел 4.4). Файлы и каталоги Во многих операционных системах (включая UNIX) существует концепция файла, по которой его можно рассматривать просто, как набор информации, которому дано имя. Примерами файлов будут: программа, которая может выполняться, письмо, полученное по электронной почте, написанная вами статья. Существенно то, что все, что хранится на диске, хранится в отдельных файлах. Файлы идентифицируются по именам. Например, файл, содержащий вашу статью может быть сохранен под именем my-paper. Эти имена обычно каким-то образом отражают содержание. Не существует стандартного формата имен файлов, как в MS-DOS и других операционных системах; в общем случае имена файлов могут содержать любые символы (кроме / - смотрите ниже обсуждение формирования "путей") и ограничены 256 символами по длине. Одновременно с концепцией файла рассмотрим и концепцию каталога. Каталог - это совокупность файлов. Его можно рассматривать как "папку", содержащую множество различных файлов. Каталоги сами по себе также получают имена, по которым вы их различаете. Каталоги организованы в древовидную структуру, т.е. каталоги могут содержать другие каталоги. К файлу можно обращаться по пути (pathname), формируемой из имени файла, которому предшествует имя каталога, содержащего файл Например, скажем, Larry имеет каталог, названный papers, который содержит три файла: history-final, english-lit, и masters-thesis. (Каждый из этих трех файлов содержит информацию о проводимых Larry работах). Для того, чтобы обратиться к файлу english-lit, Larry может указать маршрут: papers/english-lit Как вы видите, имена каталогов и файлов разделяются единичным слэшем (/). Поэтому имена файлов сами по себе не могут содержать этот символ. Пользователи MS-DOS увидят в этом что-то знакомое, поскольку в MS-DOS для этого используется бэкслэш (\). Как уже говорилось, каталоги могут быть вставлены друг в друга. Например, пусть Larry в каталоге papers имеет другой каталог с названием notes. Этот каталог содержит файлы с именами math-notes и cheat-sheet. Путь файла cheat-sheet будет papers/notes/cheat-sheet Поэтому путь - это маршрут, который надо проделать, чтобы добраться до конкретного файла. Каталог выше данного (под)каталога называется родительским каталогом. Здесь каталог papers является родительским для каталога notes. Дерево каталогов Большинство систем UNIX имеет стандартную структуру каталогов, что облегчает конкретную установку системы. Структура представляет из себя дерево каталогов, начинающееся с каталога ``/'', известного под названием "корневой каталог". Каталоги ниже / относятся к числу важнейших подкаталогов: среди них /bin, /etc, /dev, и /usr. Эти каталоги в свою очередь содержат другие каталоги, которые содержат системные конфигурационные файлы, программы и т.д. В частности, каждый пользователь имеет домашний каталог, который выделяется пользователю для хранения его файлов. В вышеприведенном примере все файлы Larry (такие как cheat-sheet и history-final) содержались в домашнем каталоге Larry. Обычно пользовательский домашний каталог находится под каталогом /home и называется именем пользователя. Так домашний каталог Larry будет /home/larry. На Рис. 3.2.8 представлено простое дерево каталогов. Оно даст вам некоторое представление о том, как организуется дерево каталогов в вашей системе. Текущий рабочий каталог Команды, которые вы даете shell, выдаются из вашего текущего каталога. Вы можете думать о вашем рабочем каталоге, как о каталоге в котором вы находитесь. При начальном входе в систему вашим рабочим каталогом автоматически становится домашний каталог (в нашем случае /home/larry). При обращении к файлу вы можете обращаться к нему с учетом вашего местоположения, вместо того, чтобы указывать полный путь. /_____bin |_dev |_etc |_home_____larry | |_sam |_lib |_proc |_tmp |_usr__X386 |_bin |_emacs |_etc |_g++-include |_include |_lib |_local_____bin | |_emacs | |_etc | |_lib |_man |_spool |_src_____linux |_tmp Рис 3.1: Типичное (урезанное) дерево каталогов Unix Вот например, у Larry есть каталог papers, а papers содержит файл history-final. Если Larry хочет посмотреть этот файл, он может использовать команду /home/larry# more /home/larry/papers/history-final Команда more просто показывает файл на экране порциями. Поскольку текущий рабочий каталог Larry /home/larry, он вместо этого может обратиться к файлу с учетом своего текущего местоположения. Команда будет /home/larry# more papers/history-final Так что вы можете начинать имя файла (такого как papers/final) с символа, отличного от ``/'', система предполагает, что вы обращаетесь к файлу с учетом вашего текущего рабочего каталога. Это называют относительным именем (а полный маршрут - полное (абсолютное) имя - т.е. путь от корня до данного имени). Обращение к домашнему каталогу Оболочки (shell), т.е. программы, которые читают и выполняют команды пользователя, могут использоваться (одновременно в одной системе) разные. В большинстве систем Linux используются tcsh или bash при начальной регистрации в системе. В tcsh и bash вы можете обратиться к своему домашнему каталогу, используя тильду (``~''). Например, команда /home/larry# more ~/papers/history-final эквивалентна /home/larry# more /home/larry/papers/history-final Символ ``~'' просто заменяет имя вашего домашнего каталога. Вы также можете обратиться к домашнему каталогу другого пользователя с помощью тильды. Имя ``~karl/letters'' будет интерпретировано shell, как ``/home/karl/letters'' (если /home/karl - домашний каталог для пользователя karl). Использование тильды упрощает обращение; не существует каталога с именем ``~'' - так что это просто "синтаксический сахар", который имеется в распоряжении shell. 3.3 Первые шаги в UNIX Перед тем, как начать, важно заметить, что все имена файлов и команд чувствительны к большим и малым буквам (чего нет в системах типа MS-DOS). Например, команда make очень отличается от Make или MAKE. То же относится и к именам каталогов. Первая прогулка Теперь мы можем войти в систему и узнать, как обращаться к файлам и менять местоположение в файловой системе, чтобы упрощать свою жизнь в ней. Команда для перемещения по дереву каталогов - cd, (``change directory''). Вы скоро обратите внимание, что многие часто используемые команды Unix состоят из двух-трех букв. Формат команды cd: cd где - имя каталога, в который вы желаете перейти. Как мы уже говорили, когда вы входите в систему, вы автоматически оказываетесь в своем домашнем каталоге. Если Larry желает двинуться ниже по дереву, он должен использовать команду /home/larry# cd papers /home/larry/papers# Как видите, изменилась подсказка, отразив изменение местоположения (новый рабочий каталог). Теперь он в каталоге papers и может посмотреть на свой файл history-final с помощью команды /home/larry/papers# more history-final Чтобы вернуться назад из подкаталога papers, надо использовать команду /home/larry/papers# cd .. /home/larry# (Обратите внимание на пробел между ``cd'' и ``..''). Каждый каталог содержит имя ``..'' , которое отсылает к родительскому (для данного каталога) каталогу. Также каждый каталог имеет имя ``.'', которое ссылается на него самого. Поэтому команда /home/larry/papers# cd . никуда не переведет. В команде cd вы можете использовать маршруты. Чтобы перейти в домашний каталог Карла, вы можете воспользоваться командой /home/larry/papers# cd /home/karl /home/karl# Используя команду cd без аргументов вы из любого места дерева вернетесь в свой домашний каталог. /home/karl# cd /home/larry# Разглядывание содержимого каталогов Теперь вы знаете, как ходить-бродить по каталогам, но вероятно возникает вопрос:"Ну и что с того?" Само по себе хождение по каталогам бесполезно, давайте познакомимся с новой командой ls. ls (LiSt) выдает на экран перечень файлов и каталогов (по умолчанию из текущего каталога). Например, /home/larry# ls Mail letters papers /home/larry# Здесь мы видим, что у Larry три "единицы хранения" в его текущем каталоге: Mail, letters и papers. Но это мало, что говорит: каталоги это или файлы? Можно использовать опцию (прим. переводчика: часто в документации по UNIX используют в этом контексте слово "флаг") -F в команде ls, чтобы получить больше информации. /home/larry# ls -F Mail/ letters/ papers/ /home/larry# Приписанные справа к именам файлов / говорят о том, что это (под)каталоги. Использование ls -F (обратите внимание "-F" пишется без пробела) может дать также ``*'' в конце некоторых имен файлов. Это будет говорить о том, что это выполняемые файлы или программы. Если, при вызове ls -F, ничего справа не приписано к имени, то это "нормальный" файл, т.е. не каталог и не выполняемый файл. В общем, каждая команда UNIX может иметь несколько опций в дополнение к другим аргументам. Эти опции обычно записываются со знаком ``-'', как это было показано на примере ls -F. Опция -F сообщает команде ls, что необходимо выдать дополнительную информацию о типе файлов. Если вы напишете в команде ls имя каталога, то она выдаст содержимое указанного каталога. /home/larry# ls -F papers english-lit history-final masters-thesis notes/ /home/larry# Или, чтобы было интереснее, давайте посмотрим, что имеется в системном каталоге /etc/. /home/larry# ls /etc Images ftpusers lpc rc.new shells adm getty magic rc0.d startcons bcheckrc gettydefs motd rc1.d swapoff brc group mount rc2.d swapon brc~ inet mtab rc3.d syslog.conf csh.cshrc init mtools rc4.d syslog.pid csh.login init.d pac rc5.d syslogd.reload default initrunlvl passwd rmt termcap disktab inittab printcap rpc umount fdprm inittab.old profile rpcinfo update fstab issue psdatabase securetty utmp ftpaccess lilo rc services wtmp /home/larry# (Для вышедших из MS-DOS пользователей полезно обратить внимание, что имена файлов могут быть длиннее 8 символов и содержать точку на любой позиции. Можно даже использовать несколько точек в одном имени). Давайте поднимемся вверх по дереву (прим. переводчика: так уж сложилось, что в UNIX начальной вершиной дерева является "корень (root)") , используя команду ``cd ..'', а затем спустимся в другой каталог (/usr/bin ). /home/larry# cd .. /home# cd .. /# cd usr /usr# cd bin /usr/bin# Вы, разумеется, можете передвигаться по каталогам большими шагами, например, сразу выполнить cd /usr/bin. Постарайтесь погулять по каталогам, используя команды ls и cd. В некоторых случаях вы можете напороться на раздражающее сообщение ``Permission denied''(обращение запрещено). Это всего лишь сработала система защиты UNIX, чтобы выполнять команды в тех или иных каталогах вы должны иметь на это разрешение. Подробнее об этом поговорим в Разделе 3.9. Создание новых каталогов Пора познакомиться с тем, как создавать каталоги. Это связано с использованием команды mkdir. Попробуйте следующее: /home/larry# mkdir foo /home/larry# ls -F Mail/ foo/ letters/ papers/ /home/larry# cd foo /home/larry/foo# ls /home/larry/foo# Наши вам поздравления! Вы только что создали новый каталог и зашли в него. Поскольку пока нет файлов в этом новом каталоге, давайте познакомимся с тем, как копировать файлы. Копирование файлов Копирование файлов осуществляется командой cp (CoPy): /home/larry/foo# cp /etc/termcap . /home/larry/foo# cp /etc/shells . /home/larry/foo# ls -F shells termcap /home/larry/foo# cp shells bells /home/larry/foo# ls -F bells shells termcap /home/larry/foo# Команда cp копирует файлы, перечисленные в командной строке, в файл или каталог, указанный последним аргументом. (прим. переводчика: несколько файлов одной командой cp можно скопировать только в каталог; в файл можно скопировать только один файл). Обратите внимание на то, как мы используем каталог ``.''для ссылки на текущий каталог. Перемещение файлов Новая команда с именем mv (MoVe) перемещает файлы вместо их копирования. Синтаксис команды очевиден. /home/larry/foo# mv termcap sells /home/larry/foo# ls -F bells sells shells /home/larry/foo# Обратите внимание, что теперь termcap уже не существует, а на его месте файл sells. Это можно использовать для переименования файлов, что мы сейчас и сделали. Но можно и переносить файлы в совсем другие каталоги. Внимание! Команды mv и cp уничтожат содержимое файла в который они пишут (если он существовал), не спрашивая вашего разрешения. Будьте внимательны, когда вы переносите файл в другой каталог: там уже может существовать файл с таким именем и вы его затрете. Удаление файлов и каталогов Мы тут с вами "нарифмовали" ненужных файлов, изучая работу команды ls. Для удаления файлов используется команда rm (ReMove). /home/larry/foo# rm bells sells /home/larry/foo# ls -F shells /home/larry/foo# У нас ничего не осталось, кроме shells, но не будем переживать. Обратите внимание, что команда rm не будет вас переспрашивать перед удалением, так что будьте осторожны. Родственная rm команда rmdir. Эта команда удаляет каталоги, но только пустые каталоги. Если в каталоге есть хоть какие-нибудь файлы или подкаталоги, она распишется в бессилии. Рассматривание файлов Команды more и cat используются для просмотра содержимого файлов. more выдает файл на дисплей "поэкранно", в то время, как cat выдает весь файл разом. (прим. переводчика: если файл многострочный, то, при использовании команды cat файл промелькнет и на экране останутся последние строки). Чтобы посмотреть файл shells, используем команду /home/larry/foo# more shells При использовании команды more нажимайте клавишу пробел для перехода к следующей странице и b для возврата к предыдущей. Нажав q, вы выйдете из more. А теперь попробуйте команду cat etc/termcap/. Текст промелькнет слишком быстро, чтобы успеть его прочитать. На самом деле команда ``cat'' (conCATenate) в основном используется для других целей, для той же конкатенации нескольких файлов. Это в дальнейшем будет обсуждаться. Получение оперативной помощи Практически каждый UNIX имеет то, что называется "Руководство" - man ( ``manual pages''). Эта команда man содержит документацию на различные команды системы, ресурсы, конфигурационные файлы. Например, если вы хотите найти информацию о других опциях команды ls, введите /home/larry# man ls и вам на экран будут выведены страницы Руководства. К сожалению, большинство страниц руководства написаны с ориентацией на пользователей, имеющих некоторые представления о работе соответствующих команд. Поэтому страницы Руководства обычно содержат справочные данные по командам, а не учебный материал. Но Руководство неоценимо для освежения памяти, если вы забыли синтаксис команды. Руководство может также много рассказать вам о командах, которые мы даже не упомянем в этой книге. Я предлагаю вам посмотреть в Руководстве те команды, которые мы уже обсуждали и все, с которыми мы будем встречаться. Вы обнаружите, что не на все команды есть Руководство. Тому несколько причин. Одна - некоторые страницы Руководства еще просто не написаны (the Linux Documentation Project - программа подготовки документации для Linux как бы отвечает за решение этой проблемы. Мы уже собрали большую часть документации). Во-вторых, команда может быть внутренней командой shell или синонимом (alias), что обсуждалось в Разделе 3.2.4, в каждом из этих случаев для них нет собственных страниц. Возьмем для примера cd, которая является внутренней командой shell. Shell выполняет эту команду, но она не имеет своей отдельной программы. 3.4 Краткая информация о базовых командах Этот раздел представляет некоторые наиболее полезные базовые команды UNIX, включая те, о которых говорили в предыдущем разделе. Обратите внимание, что опции обычно начинаются с ``-'' и во многих случаях несколько однобуквенных опций могут следовать за одним минусом, записанные слитно. Например, вместо использования ls -l -F, можно использовать ls -lF. Вместо перечисления всех возможных опций каждой команды, мы будем говорить только о тех, которые полезны или важны в данное время. Действительно, большинство из этих команд имеет большое число опций (большинство из которых никогда не используется). Вы можете для каждой команды с помощью man посмотреть все возможные опции. Обратите также внимание на то, что многие из команд берут список файлов или каталогов, как аргументы, обозначенные как `` ... ''. Например, команда cp берет в качестве аргументов список файлов, которые надо копировать, за которыми следует имя целевого файла или каталога. При копировании нескольких файлов в качестве целевого может выступать только каталог. cd Изменяет текущий рабочий каталог. Синтаксис: cd ; - каталог, в который перейти (``.'' ссылается на текуший каталог, ``..'' - на родительский каталог). Пример: cd ../foo переводит из текущего каталога в ../foo. ls Выдает информацию о файлах в каталоге. Синтаксис: ls ... Где ... имена файлов или каталогов, информацию про которые надо выдать. Опции: Здесь больше опций, чем вы думаете. Наиболее часто используемые: -F (для представления информации о типах файлов), и -l (выдает в длинном (``long'') формате информацию о размерах файлов, владельцах, правах доступа и т.д. В деталях это будет обсуждаться далее). Пример: ls -lF /home/larry выдаст содержимое каталога /home/larry. cp Копирует файл(ы) в файл или каталог. Синтаксис: cp ... Где ... имена копируемых файлов, а файл или каталог, в который копируют. Пример: cp ../frog joe копирует файл ../frog в файл или каталог joe. mv Перемещает файл(ы) в другой файл или каталог. Эта команда не эквивалентна копированию с последующим уничтожением оригинала. Она может быть использована для переименования файлов, как команда RENAME из MS-DOS. Синтаксис: mv ... Где ... имена перемещаемых файлов, а имя файла или каталога, в который перемещают. Пример: mv ../frog joe перемещает файл ../frog в файл или каталог joe. rm Удаляет файлы. Имейте в виду, когда в UNIX удаляются файлы, они невосстановимы (не как в MS-DOS, где вы можете "разудалить" файл). Синтаксис: rm ... Где ... имена удаляемых файлов. Опции: -i потребует вашего подтверждения перед удалением файла. Пример: rm -i /home/larry/joe /home/larry/frog удаляет файлы joe и frog в каталоге /home/larry. mkdir Создает новые каталоги. Синтаксис: mkdir ... Где ... создаваемые каталоги. Пример: mkdir /home/larry/test создает каталог test в каталоге /home/larry. rmdir Эта команда удаляет пустые каталоги. При использовании rmdir ваш текущий рабочий каталог должен находиться вне удаляемого каталога. Синтаксис: rmdir ... Где ... удаляемые каталоги. Пример: rmdir /home/larry/papers удаляет каталог /home/larry/papers, если он пустой. man Выдает страницу Руководства по данной команде или ресурсу. (здесь "ресурс" - это любая системная утилита, которая не является командой, например библиотечная функция). Синтаксис: man Где имя команды или ресурса, о котором запрашивается информация. Пример: man ls - дает помощь по команде ls. more Выдает содержимое названных файлов поэкранно. Синтаксис: more ... Где ... отображаемые файлы. Пример: more papers/history-final представляет файл papers/history-final. cat Используется для конкатенации файлов. cat используется также для выдачи полного содержания файла разом Синтаксис: cat ... Где ... выдаваемые файлы. Пример: cat letters/from-mdw выдает на дисплей файл letters/from-mdw. echo Просто повторяет аргументы. Синтаксис: echo ... Где ... "повторяемые" аргументы. Пример: echo "Hello world" выдает на экран ``Hello world''. grep выдает все строки в названном файле(лах), которые содержат заданный образец. Синтаксис: grep ... Где - образец (представленный регулярным выражением) и ... - файлы, в которых производится поиск. Пример: grep loomer /etc/hosts выдаст все строки, в которых файл /etc/hosts, содержит образец ``loomer''. 3.5 Исследование файловой системы Файловая система есть собрание файлов и иерархия каталогов. Я обещал поводить вас по файловой системе - и время настало. У вас достаточно интеллекта и знаний извлечь пользу из того, что я говорю и у вас есть карта дорог. (Смотрите Рис. 3.2.8). Перво-наперво вернемся в корневой каталог (cd /) и сделаем ls -F. Вы, очевидно, увидите каталоги: bin, dev, etc, home, install, lib, mnt, proc, root, tmp, user, usr и var. (Можете увидеть и несколько отличный вариант - не волнуйтесь, различные версии Linux могут иметь отличия). Присмотримся к каждому каталогу. /bin bin - это сокращенно от ``binaries'' (т.е. двоичные или выполняемые файлы). Здесь находится много важных системных программ. Используйте команду ``ls -F/bin'' чтобы посмотреть имеющийся здесь список файлов. Вы можете обнаружить здесь уже знакомые вам команды, вроде cp, ls и mv. Это и есть программы соответствующих команд. Когда, например, вы используете команду cp, вы выполняете программу /bin/cp. Используя ls -F, вы увидите, что большинство (если не все) файлов в /bin имеют справа от имени звездочку (``*''). Это говорит о том, что файлы выполняемые, как описано в Разделе 3.3.2. /dev Следующая остановка на нашем пути - dev. Вновь посмотрите на содержимое с помощью ls -F. "Файлы" в /dev известны как драйверы устройств - они используются для доступа к устройствам и ресурсам системы, таким как диски, модемы, память и т.д. Например, как вы можете читать данные из файла, точно также вы можете читать входные сигналы от мыши, имея доступ к /dev/mouse. Имена файлов, начинающиеся на fd - это дисководы гибких дисков. fd0 - первый дисковод, fd1 - второй. Теперь самые шустрые из вас заметят, что здесь имеется больше дисководов, чем те два, которые мною упоминались: они представляют специфические типы дисководов. Например, fd1H1440 представляет доступ к high-density, 3.5" дискетам на дисководе 1. Вот перечень некоторых из наиболее используемых файлов устройств. o /dev/console/ относится к системной консоли, т.е. к монитору, напрямую связанному с системой. o Различные /dev/ttyS и /dev/cua устройства используются для доступа к последовательным портам. Например, /dev/ttyS0 относится к ``COM1'' под MS-DOS. Устройства /dev/cua относятся к "звонящим" (``callout'') устройствам, которые используются совместно с модемами. o Устройства, имена которых начинаются с hd, имеют доступ к жестким дискам. /dev/hda относится ко всему первому жесткому диску, а hda1 только к первому разделу /dev/hda. o Устройства с именами, начинающимися на sd - SCSI-драйверы. Если у вас SCSI жесткий диск, вместо доступа к нему через /dev/hda, вы будете обращаться к /dev/sda. SCSI ленты доступны через устройства st, а SCSI CD-ROM через sr. o Устройства lp обеспечивают доступ к параллельным портам. /dev/lp0 относится к ``LPT1'' в MS-DOS. o /dev/null используется как "черная дыра" - любые данные, посланные сюда, канут в Лету. Если вы хотите подавить вывод команды на экран, вы можете перенаправить этот вывод в /dev/null. Мы об этом позже еще поговорим. o Устройства с именами /dev/tty относятся к "виртуальным консолям" вашей системы (доступ путем нажатия alt-F1, alt-F2 и т.д.). /dev/tty1 соответствует первой VC, /dev/tty2 соответствует второй и т.д. o Устройства, чьи имена начинаются на /dev/pty, это "псевдотерминалы". Они используются для входа с удаленных "терминалов". Например, если ваша машина в сети, вход к вам по telnet будет использовать одно из устройств /dev/pty. /etc /etc содержит множество всевозможных системных файлов конфигурации. Они включают /etc/passwd (файл паролей), /etc/rc (командный файл инициализации) и т.д. /sbin /sbin используется для хранения важных системных двоичных файлов, используемых системным администратором. /home home содержит домашние каталоги пользователей. Например, /home/larry - домашний каталог пользователя ``larry''. На вновь инсталлированной системе этот каталог может быть пуст в связи с временным отсутствием зарегистрированных пользователей. /lib /lib содержит образы разделяемых библиотек (shared library images). Эти файлы содержат код, который могут использовать многие программы. Вместо того, чтобы каждая программа имела свою собственную копию этих выполняемых файлов, они хранятся в одном общедоступном месте - в /lib. Это позволяет сделать выполняемые файлы меньше и сэкономит место в системе. /proc /proc - это "виртуальная файловая система", в которой файлы хранятся в памяти, а не на диске. Они связаны с различными процессами, происходящими в системе, и позволяют получить информацию о том, что делают программы и процессы в указанное время. Более детально мы рассмотрим это в Разделе 3.11.1. /tmp Многие программы нуждаются в создании рабочих файлов, которые нужны короткое время. Каноническое место для этих файлов в /tmp (там обычно чаще проводится уборка мусора). /usr /usr - это очень важный каталог. Он состоит из ряда подкаталогов, которые в свою очередь содержат наиболее важные и полезные программы и файлы конфигурации, используемые системой. Различные каталоги, описанные выше, необходимы для нормального функционирования системы, но большинство вещей, содержащихся в /usr необязательны для системы. Но это такие необязательные вещи, которые делают систему полезной и интересной. Без /usr вы бы имели достаточно занудную систему, содержащую только программы, вроде cp и ls. /usr содержит много больших программных пакетов и конфигурационных файлов, которые их сопровождают. /usr/X386 /usr/X386 содержит The X Window System, если вы ее инсталлировали. The X Window System - это мощная графическая среда, которая содержит большое количество графических утилит и программ, отображающих "окна" на вашем экране. Если вы знакомы с Microsoft Windows или Macintosh environments, то X Windows будет выглядеть весьма похоже. Каталог /usr/X386 содержит все выполняемые и конфигурационные файлы X Window, а также файлы поддержки. Более детально это будет обсуждаться в Разделе 5.1. /usr/bin /usr/bin настоящее хранилище для различных программ UNIX. Он содержит большинство выполняемых программ, которых нет ни в каких других местах, например, в том же /bin их нет. /usr/etc Точно также, как и /etc, содержит всевозможные системные программы и конфигурационные файлы. /usr/etc содержит даже больше утилит и файлов. В общем, файлы, находящиеся в /usr/etc несущественны для системы, в отличие от тех, которые находятся в /etc, и очень существенны. /usr/include /usr/include содержит include-файлы для компилятора Си. Эти файлы (большинство имен которых заканчивается на .h (от слова ``header'') об'являют имена структур данных, подпрограмм и констант, используемых при написании программ на Си. Те файлы, которые находятся в /usr/include/sys в общем случае используются при программировании на системном уровне UNIX. Если вы знакомы с языком программирования Си, здесь вы найдете такие хэдеры (фрагменты программ, вставляемые обычно в начало программы), stdio.h, которые описывают такие функции, как printf(). /usr/g++-include /usr/g++-include содержит include-файлы для компилятора Cи++ (очень похожие на /usr/include). /usr/lib /usr/lib содержит библиотеки-"заглушки" и "статические" библиотеки, эквивалентные файлам из /lib. При компиляции программа "связывается" с библиотеками, находящимися в /usr/lib, которые в свою очередь направляют программы обращаться в /lib, если им нужет актуальный код. Кроме того, многие другие программы хранят в /usr/lib свои конфигурационные файлы. /usr/local /usr/local в большой степени похож на /usr - он содержит различные программы и файлы, несущественные для системы, но превращающие ее в удовольствие и восторг. В общем, эти программы, находящиеся в /usr/local специализируются на специфике вашей системы, т.е. /usr/local сильно отличается в различных UNIX. Здесь вы найдете такие большие программные пакеты, как TeX (система форматирования документов) и Emacs (большой и мощный редактор), если вы их установите. /usr/man Этот каталог содержит страницы Руководства. Здесь два подкаталога для каждого "раздела" Руководства. (С помощью команды "man man" вы можете получить более подробную информацию). Например, /usr/man/man1 содержит исходные тексты (неотформатированный оригинал) страниц Руководства в разделе 1 и /usr/man/cat1 содержит отформатированные страницы для раздела 1. /usr/src /usr/src содержит исходные коды (неоткомпилированные программы) для различных программ вашей системы. Наиболее важная вещь здесь, это /usr/src/linux, содержащий исходные коды ядра Linux. /var /var содержит каталоги, которые часто меняются в размере или имеют тенденцию быстро расти. Многие из этих каталогов "квартировались" в /usr, но поскольку мы стремимся сделать его достаточно стабильным, каталоги, которые часто меняются были перенесены в /var. К числу таких каталогов относятся: /var/adm /var/adm содержит различные файлы, интересные системному администратору, специфические системные файлы, фиксирующие ошибки и проблемы, возникающие в системе. Другие файлы фиксируют входы в систему, как и неудачные попытки войти. Это будет обсуждаться в Главе 4. /var/spool /var/spool содержит файлы, которые предварительно формируются для других программ. Например, если ваша машина подключена к сети, входная почта будет помещаться в /var/spool/mail до тех пор, пока вы не прочитаете ее или не удалите. Входящие и исходящие новости помещаются в /var/spool/news и т.д. 3.6 Типы оболочек Как я уже много раз говорил, UNIX - это многозадачная, многопользовательская операционная система. Многозадачность очень полезна - однажды привыкнув к ней, вы будете всегда ее использовать. Прежде всего, вы сможете выполнять задачи в фоновом режиме, переключать задачи и об'единять их в конвейер, достигая сложных результатов простыми средствами. Многие из возможностей, которые мы будем обсуждать в этом разделе, обеспечиваются самой оболочкой (shell). Будьте внимательны, не путайте UNIX (фактическую операционную систему) с оболочкой - оболочка, это лишь интерфейс с находящейся за ней системой. Оболочка обеспечивает выполнение громадного числа функций помимо собственно UNIX. Оболочка - это не только интерпретатор интерактивных команд, которые вы можете ввести, получив от оболочки подсказку (готовности принимать команды). Это также мощный командный язык, который позволяет писать программы (shell-scripts), об'единяющие несколько команд в командный файл. Пользователи MS-DOS почувствуют здесь нечто схожее с ``batch-файлами''. Использование программ на языке оболочки (shell) - это очень мощное средство, которое позволяет автоматизировать и и существенно повысить эффективность использования UNIX. Смотрите дополнительно в Разделе 3.13.1. Существует несколько типов оболочек в мире UNIX. Две главные - это ``Bourne shell''(shell Баурна) и ``C shell'. Shell Баурна (или просто shell) использует командный синтаксис, похожий на первоначально для UNIX придуманный (вроде UNIX System III). В большинстве UNIX-систем shell Баурна имеет имя /bin/sh (где sh сокращение от ``shell''). C shell использует иной синтаксис, чем-то напоминающий синтаксис языка программирования Си. В большинстве UNIX-систем он имеет имя /bin/csh. В Linux есть несколько вариаций этих оболочек. Две наиболее часто используемые, это Новый Shell Баурна (Bourne Again Shell) или ``Bash'' (/bin/bash) и Tcsh (/bin/tcsh). Bash - это развитие прежнего shell с добавлением многих полезных возможностей, частично содержащихся в C shell. Поскольку Bash можно рассматривать как надмножество синтаксиса прежнего shell, любая программа, написанная на добром старом shell Баурна должна работать и в Bash. Для тех, кто предпочитает использовать синтаксис C shell, Linux поддерживает Tcsh, который является расширенной версией C shell. Тип оболочки, которую вы решили использовать - это почти как выбор религии. Некоторые предпочитают синтаксис shell Баурна с дополнительными возможностями, предоставляемыми Bash, а некоторые - более структурированный синтаксис C shell. Для "нормальных" команд, таких как cp и ls, тип используемого вами shell никакой роли не играет. Только когда вы начнете писать командные файлы или использовть некоторые новые свойства оболочек, различия между ними становятся существенными. При обсуждении далее некоторых свойств оболочек мы будем обращать внимание на различие между Баурновским shell и C shell. (Если вам это действительно очень интересно, почитайте Руководство по поводу bash и tcsh). 3.7 "Уайлдкард" - "дикая карта" Ключевое свойство большинства оболочек Unix - это способность ссылаться сразу более, чем на один файл, используя для этого специальные символы. Эти, так называемые "дикие карты" (wildcards), позволяют ссылаться, скажем, на все файлы, содержащие символ "n". (прим. переводчика: Мне не известен хороший перевод этой идиомы (wildcards), наиболее часто у нас встречается "генераторы" и "расширители" символов - но это тяжеловато. Чтобы далее не испытывать мучений - буду использовать слово "уайлдкард". Кстати, и оболочку удобнее далее именовать как shell, так легче воспринимается то, что это язык программирования). Уайлдкард ``*'' относится к любому символу или строке символов в имени файла. Например, когда вы используете символ ``*'' в имени файла shell заменяет ее всеми возможными именами файлов из каталога, на который вы ссылаетесь. Вот простенький пример. Предположим, что Larry имеет файлы frog, joe и stuff в своем текущем каталоге: /home/larry# ls frog joe stuff /home/larry# Для обращения сразу ко всем файлам с буквой ``o'' в имени, мы можем использовать команду /home/larry# ls *o* frog joe /home/larry# Как видите, ``*'' уайлдкард была заменена всеми возможными именами файлов из имевшихся в текущем каталоге. Использование просто ``*''даст совпадение со всеми именами, поскольку все символы совпадают с уайлдкард. /home/larry# ls * frog joe stuff /home/larry# Вот еще несколько примеров. /home/larry# ls f* frog /home/larry# ls *ff stuff /home/larry# ls *f* frog stuff /home/larry# ls s*f stuff /home/larry# Процесс замены ``*'' на имена файлов называется расширением уайлдкард и выполняется shell. Это важно: конкретные команды, вроде ls, никогда не видят ``*'' в своем списке параметров. Shell, расширяя уайлдкард, включает в список параметров все имена, прошедшие сравнение с шаблоном. Так что команда /home/larry# ls *o* расширяется shell до фактической /home/larry# ls frog joe Одно важное замечание относительно ``*'' уайлдкард. Использование этой уайлдкард не даст совпадения с именами файлов, которые начинаются с точки (``.''). Эти файлы воспринимаются как "спрятанные", хотя на самом деле их никуда не прятали. Они не показываются в списке, выдаваемом нормальной командой ls и не выбираются при использовании ``*'' уайлдкард. Вот пример. Мы уже упоминали, что каждый каталог имеет два специальных файла: ``.'' - указание на текущий каталог и ``..'' - указание на родительский каталог. Однако, если вы используете команду ls, эти два файла не будут отображены. /home/larry# ls frog joe stuff /home/larry# Если вы используете опцию -a в команде ls, то вы сможете отобразить имена, начинающиеся на ``.'': /home/larry# ls -a . .. .bash_profile .bashrc frog joe stuff /home/larry# Как видим, два специальных файла ``.'' и ``..'', также, как два других "спрятанных" файла - .bash_profile и .bashrc. Эти два файла используются при входе larry в систему. Более подробно о них в Разделе 3.13.3. Обратите внимание, что когда мы используем ``*'' уайлдкард, ни один из файлов, с именами, начинающимися на ``.'' не отображается. /home/larry# ls * frog joe stuff /home/larry# Это мера предосторожности: если ``*'' уайлдкард выбирала бы имена файлов, начинающиеся на ``.'', она бы также выбрала имена ``.'' и ``..''. Но это может быть опасно при выполнении ряда команд. Другой уайлдкард является ``?''. ``?'' уайлдкард позволяет подставить строго один символ. Так ``ls ?'' выдаст на только имена файлов, состоящие из одного символа, а ``ls termca?'' выдаст ``termcap'', но не выдаст на экран ``termcap.backup''. Вот еще один пример: /home/larry# ls j?e joe /home/larry# ls f??g frog /home/larry# ls ????f stuff /home/larry# Как видите, уайлдкард позволяет описывать много файлов за один раз. При обзоре простейших команд в Разделе 3.4 мы говорили, что команды cp и mv могут копировать или перемещать множества файлов за один раз. Например, /home/larry# cp /etc/s* /home/larry скопирует все файлы в /etc , начиная с ``s''в каталог /home/larry. Формат команды cp на самом деле cp ... где ... - список копируемых файлов, а это файл или каталог, в который производится копирование. mv имеет аналогичный синтаксис. Обратите внимание, что если производится копирование или перемещение более, чем одного файла, должен быть каталогом. В файл скопировать или переместить можно только один файл. 3.8 Трубопроводы UNIX Стандартный вход и стандартный выход Многие команды UNIX получают информацию с так называемого стандартного входа и посылают информацию на (опять же) так называемый стандартный выход. (Для них часто используются сокращения ``stdin'' и ``stdout'' соответственно). Ваш shell организует дело так, что стандартным входом служит клавиатура, а стандартным выходом - экран. Вот пример использования команды cat. Нормально cat читает данные из файлов, чьи имена даны в командной строке и посылает эти данные прямехонько на stdout. Поэтому при выполнении команды /home/larry/papers# cat history-final masters-thesis на экран пойдет файл history-final, а за ним следом masters-thesis. Но если команде cat не даны имена файлов в качестве параметров, она читает данные с stdin и опять же посылает на stdout. Вот пример. /home/larry/papers# cat Hello there. Hello there. Bye. Bye. [ctrl-D] /home/larry/papers# Как видите, каждая строка, которую напечатал пользователь, немедленно выдается командой cat на экран. При вводе со стандартного входа команда знает, что ввод закончен тогда, когда она получит в каком-то виде сигнал EOT (End-Of-Text). Обычно он обеспечивается нажатием ctrl-D. Вот другой пример. Команда сортировки sort читает построчно текст (здесь опять с stdin, поскольку имена файлов в параметрах не указаны, и посылает отсортированный результат на stdout. Попробуйте так. /home/larry/papers# sort bananas carrots apples [ctrl-D] apples bananas carrots /home/larry/papers# Теперь мы можем упорядочить наш список продуктов, подлежащих закупке, в лексикографическом порядке... ну разве UNIX не полезная вещь? Перенаправление входа и выхода Теперь, предположим, что мы хотим послать результат сортировки в файл, чтобы где-то сохранить список планируемых покупок. Shell дает нам возможность перенаправлять стандартный выход в файл, используя символ ``>''. Вот как это работает. /home/larry/papers# sort > shopping-list bananas carrots apples [ctrl-D] /home/larry/papers# Как вы можете видеть, результат работы команды sort не отображается на экране, вместо этого он сохраняется в файле shopping-list (список покупок). Давайте посмотрим на этот файл. /home/larry/papers# cat shopping-list apples bananas carrots /home/larry/papers# Теперь мы можем не только сортировать (упорядочивать) список планируемых покупок, но и сохранять его! Но предположим, что мы хранили наш неотсортированный исходный закупочный список в файле под именем items. Один из способов сортировки и сохранения его, это отсортировать файл с данным именем, вместо получения файла со стандартного входа, и перенаправить стандартный выход в файл. Например так /home/larry/papers# sort items > shopping-list /home/larry/papers# cat shopping-list apples bananas carrots /home/larry/papers# Но это можно сделать и по-другому. Перенаправлен может быть не только стандартный выход, но также и стандартный вход, используя символ ``<''. /home/larry/papers# sort < items apples bananas carrots /home/larry/papers# Технически, sort < items эквивалентно sort items, но последний вариант позволяет нам продемонстрировать сказанное: sort < items ведет себя так, словно данные файла items были напечатаны на клавиатуре. shell обслуживает перенаправление. sort не было дано имя файла (items) и команда читала со стандартного входа, как будто шел ввод с клавиатуры. Это иллюстрирует концепцию фильтра. Фильтр, это программа, которая получает данные со стандартного входа, обрабатывает их каким-то образом и посылает результат обработки на стандартный выход. С помощью перенаправления стандартные вход и выход могут быть переведены на файлы. sort - простейший фильтр: она сортирует входные данные и посылает результат на стандартный выход. cat - даже еще проще: она ничего не делает со входными данными, а только выдает все, что не поступит, на выход. Использование конвейера Мы уже показали, как использовать команду sort в качестве фильтра. Но эти примеры предполагали, что вы откуда-то получили данные в файл, или ввели данные с клавиатуры своими собственными руками. А что, если данные, которые вы хотите отсортировать, являются выходными данными другой программы, например, такой как ls? Если вы используете при сортировке опцию -r, данные будут расположены в порядке, обратном лексикографическому. Если вы хотите получить перечень файлов вашего каталога в обратном порядке, один из способов сделать это будет: /home/larry/papers# ls english-list history-final masters-thesis notes /home/larry/papers# ls > file-list /home/larry/papers# sort -r file-list notes masters-thesis history-final english-list /home/larry/papers# Здесь мы сохранили результат работы команды ls в файле, а затем выполнили sort -r над этим файлом. Но это очень коряво выглядит и требует создания временного файла для хранения результата работы ls. Выход из положения дает трубопровод (pipeline) (прим. переводчика: в нашей литературе принят термин "конвейер", так далее и будем переводить "pipeline"). Конвейер - это еще одно замечательное свойство shell, которое позволяет связывать последовательность команд в конвейер, где stdout первой команды посылается прямо на stdin второй команды и так далее. Здесь мы хотим послать stdout команды ls на stdin команды sort. Символ ``|'' олицетворяет конвейер: /home/larry/papers# ls | sort -r notes masters-thesis history-final english-list /home/larry/papers# Эта команда намного короче и, очевидно, проще набирается. Другой полезный пример. Команда /home/larry/papers# ls /usr/bin выдает на дисплей длинный список имен файлов, большинство из которых слишком быстро промелькнет на экране, чтобы вы успели прочитать их. Давайте подключим к просмотру перечня имен файлов каталога /usr/bin команду more. /home/larry/papers# ls /usr/bin | more Теперь вы можете постранично листать файл в свое удовольствие. Но чудеса на этом не кончаются! Мы можем связать в конвейер более, чем две команды. Команда head представляет из себя фильтр, который отображает первые строки входного потока (здесь, пришедшего по конвейеру). Если мы хотим отобразить последнее имя текущего каталога, упорядоченного по алфавиту, мы можем написать: /home/larry/papers# ls | sort -r | head -1 notes /home/larry/papers# где head -1 просто выдает первую строку получаемого входного потока (в данном случае это отсортированный в обратном порядке перечень имен файлов текущего каталога, выданных командой ls). Перенаправление с добавлением Использование ``>'' для перенаправления выхода смертельно для файла, в который происходит перенаправление (если было, что уничтожать), другими словами /home/larry/papers# ls > file-list уничтожает прежнее содержимое файла file-list. Если вместо этого использовать символ перенаправления ``>>'', выход будет добавлен к содержимому названного файла (вместо того, чтобы быть записаным на место старого). /home/larry/papers# ls >> file-list добавит выходную информацию команды ls в файл file-list. Имейте в виду, что перенаправления и конвейер, это средства, предоставляемые оболочкой shell, это синтаксис shell и символы ``>'', ``>>'' и ``|'' не имеют никакого отношения к командам, как таковым. 3.9 Права доступа к файлам Концепция прав доступа Поскольку UNIX - многопользовательская система, чтобы защитить файлы каждого пользователя от дурного влияния других пользователей, UNIX поддерживает механизм, известный, как система прав доступа к файлам. Этот механизм позволяет каждому файлу приписать конкретного владельца. Как пример, поскольку Larry создал файлы в своем домашнем каталоге, именно Larry владелец этих файлов и имеет к ним доступ. UNIX позволяет также совместно использовать файлы нескольким пользователям и группам пользователей. Если Larry так пожелает, он может закрыть доступ к своим файлам так, что никто другой не сможет к ним подступиться. Однако в большинстве систем по умолчанию другим пользователям разрешается читать ваши файлы, но запрещается изменять или удалять. Как об'яснялось выше, каждый файл имеет конкретного владельца. Но, кроме того файлами, также владеют конкретные группы пользователей, которые определяются при регистрации пользователей в системе. Каждый пользователь становится членом как минимум одной группы пользователей. Системный администратор может даровать пользователю доступ более, чем к одной группе. Группы обычно определяются типами пользователей данной машины. Например, в университетском UNIX пользователи могут быть разбиты на группы студент, преподаватель, руководство, гость. (прим. переводчика: осмелюсь предположить, что в отечественной книге перечисление примеров групп было бы начато с группы "руководство"...). Есть также несколько системно-зависимых групп (вроде bin и admin), которые используются самой системой для управления доступом к ресурсам. Очень редко обычный пользователь принадлежит к этим группам. Права доступа подразделяются на три типа: чтение (read), запись (write) и выполнение (execute). Эти типы прав доступа могут быть предоставлены трем классам пользователей: владельцу файла, группе, в которую входит владелец, и всем (прочим) пользователям. Разрешение на чтение позволяет пользователю читать содержимое файлов, а в случае каталогов - просматривать перечень имен файлов в каталоге (используя, например, ls). Разрешение на запись позволяет пользователю писать в файл и изменять его. Для каталогов это дает право создавать в каталоге новые файлы и каталоги, или удалять файлы в этом каталоге. Наконец, разрешение на выполнение позволяет пользователю выполнять файлы (как бинарные программы, так и командные файлы). Разрешение на выполнение применительно к каталогам означает возможность выполнять команды вроде cd. Интерпретация прав доступа Давайте рассмотрим пример, демонстрирующий работу с правами доступа. Используя команду ls с опцией -l можно получить на экране перечень файлов данного каталога в "длинном" формате, включающем информацию о правах доступа. /home/larry/foo# ls -l stuff -rw-r--r-- 1 larry users 505 Mar 13 19:05 stuff /home/larry/foo# Первое поле в выведенной строке представляет права доступа. Третье поле - владельца файла (larry) и четвертое - группу (users). Очевидно, что последнее поле есть имя файла (stuff), а остальные поля мы обсудим позже. Этим файлом владеет larry, и он принадлежит группе users. Давайте посмотрим на права доступа. В строке -rw-r--r-- по порядку указаны права владельца, группы и всех прочих. Первыый символ этой строки прав доступа (``-'') представляет тип файла. Символ ``-'' означает, что это обычный файл (в противоположность каталогу или специальному файлу какого-то устройства). Следующие три позиции (``rw-'') представляют права доступа, которые имеет владелец файла larry. Символ ``r''означает ``read''(читать), ``w'' - ``write''(писать). Таким образом larry может читать файл stuff и писать в него. Как мы уже упоминали, кроме разрешений на чтение и запись существует разрешение на выполнение ``execute'' - представляемое символом ``x''. Но в данном случае на этой позиции ``-'', так что у Larry нет прав на выполнение этого файла. И это чудесно, файл stuff совсем даже не является программой. Разумеется, поскольку Larry владеет файлом, он может дать сам себе разрешение на выполнение этого файла, если захочет. Мы эту процедуру скоро обсудим. Следующие три символа r-- представляют права доступа группы для этого файла. Эта группа имеет имя users. Поскольку тут есть только ``r'', любой пользователь этой группы может только читать файл. Последние три символа представляют ту же комбинацию r--, то есть для всех прочих доступно чтение этого файла и запрещены запись и выполнение. Вот еще несколько примеров на права доступа. -rwxr-xr-x Владелец файла может читать, писать и выполнять файл. Члены группы и все прочие пользователи могут читать и выполнять файл. -rw------- Владелец файла может читать и писать в файл. Всем остальным доступ к файлу закрыт. -rwxrwxrwx Все могут читать писать и выполнять файл. Зависимости Важно заметить, что права доступа, которые имеет файл зависят также от прав доступа к каталогу, в котором этот файл находится. Например, даже если файл имеет -rwxrwxrwx, другие пользователи не смогут до него добраться, если у них не будет прав на чтение и выполнение каталога, в котором находится файл. Например, если Larry захочет ограничить доступ ко всем своим файлам, он может может просто изменить права доступа своего домашнего каталога /home/larry на drwx------. Таким образом, никто другой не будет иметь доступ в его каталог, а следовательно посторонним будут недоступны и все файлы. Так что Larry может не заботиться об индивидуальной защите своих файлов. Другими словами, чтобы иметь доступ к файлу, вы должны иметь доступ ко всем каталогам, лежащим на пути от корня к этому файлу, а также разрешение на доступ собственно к этому файлу. Обычно пользователи UNIX весьма открыты всеми своими файлами. Обычно файлам устанавливается защита -rw-r--r--, которая позволяет другим пользователям читать файлы, но ни коим образом их не менять. Каталогамм обычно устанавливаются права доступа drwxr-xr-x, что позволяет другим пользователям ходить с правами экскурсантов по вашим каталогам. Но ничего в них не трогать и не записывать. Но многие пользователи хотят держать других пользователей подальше от своих файлов. Установив права доступа файла, -rw------- вы никому не покажете этот файл и не дадите записать в него. Также хорошо закрывает от всех файлы защита соответствующего каталога drwx------ . Изменение прав доступа Команда chmod используется для установки (изменения) прав доступа файла. Только владелец файла может менять права доступа к нему. Синтаксис команды имеет вид: chmod {a,u,g,o}{+,-}{r,w,x} Кратко, вы выбираете из all (все), user (пользователь), group (группа) или other (другие). Далее указываете, либо вы добавляете права (+), либо лишаете прав (-). И наконец, вы указываете один или несколько режимов: read, write или execute. Несколько примеров допустимых команд: chmod a+r stuff Дает всем пользователям право читать файл stuff. chmod +r stuff То же самое, что и ранее (a - по умолчанию). chmod og-x stuff Лишает права на выполнение всех, кроме владельца. chmod u+rwx stuff Разрешает владельцу все (read, write и execute). chmod o-rwx stuff Запрещает все (read, write и execute) пользователям категории другие (other). 3.10 Управление связями файлов Связи позволяют давать одному физическому файлу много имен. Системой файлы распознаются по индексам файлов, которые являются уникальными идентификаторами в рамках системы. Команда ls -i выдаст вам индексы файлов. На самом деле каталог - это перечень индексов файлов с соответствующими этим индексам номерами. Каждое имя файла в каталоге привязано к конкретному индексу. Жесткие связи Команда ln используется для создания множества связей для одного файла. Например, скажем, что у вас есть файл foo. Используя ls -i можно посмотреть индекс этого файла. # ls -i foo 22192 foo # Здесь файл foo имеет в файловой системе индекс 22192. Мы можем создать новую связь для этого файла под именем bar: # ln foo bar С помощью ls -i можно убедиться, что оба файла имеют один и тот же индекс. # ls -i foo bar 22192 bar 22192 foo # Теперь, обращаясь к foo или bar мы фактически обратимся к одном у тому же файлу. Поэтому, если мы меняем что-то в файле foo, эти же самые изменения произойдут в файле bar. Эти связи известны, как жесткие связи (hard links), поскольку они реализуются прямой ссылкой на индекс файла. Обратите внимание, что в рамках одной файловой системы вы можете организовать только жесткие связи; символические связи (смотрите ниже) не имеют этого ограничения. Когда вы удаляете файл командой rm, на самом деле вы удаляете только одну ссылку на файл. Если вы введете команду # rm foo Удалаяется только связь, имеющая имя foo; bar будет как и прежде существовать. Файл только тогда действительно удаляется, когда на него больше нет связей. Обычно файлы имеют только одну связь, так что команда rm действительно приведет к удалению файла. Однако, если файл имеет много ссылок, применение rm приведет только к удалению одной связи; для того, чтобы удалить файл, вы должны удалить все связи на этот файл. Команда ls -l покажет число ссылок на файл (кроме прочей информации) # ls -l foo bar -rw-r--r-- 2 root root 12 Aug 5 16:51 bar -rw-r--r-- 2 root root 12 Aug 5 16:50 foo # Вторая колонка с цифрой ``2'' показывает число связей файла. Самом деле оказывается, что каталоги представляют из себя справочник типа "имена-индексы". Кроме прочего, каждый каталог имеет минимум две жесткие ссылки: ``.'' (ссылка, указывающая на самого себя) и ``..'' (ссылка, указывающая на родительский каталог). В корневом каталоге (/) ссылка ``..'' указывает на сам же каталог /. Символические связи Символические связи, это другой тип связей, отличающийся от жестких связей. Символические связи позволяют давать новые имена файлам, но при этом не ссылаются на индекс файла. Команда ln -s создаст символическую ссылку на указанный файл. Например, если мы воспользуемся командой # ln -s foo bar мы создадим символьную ссылку bar, указывающую на файл foo. Если теперь используем команду ls -i, то увидим, что два файла имеют различные индексы. # ls -i foo bar 22195 bar 22192 foo # Однако, используя ls -l, мы видим, что файл bar имеет символический указатель на foo. # ls -l foo bar lrwxrwxrwx 1 root root 3 Aug 5 16:51 bar -> foo -rw-r--r-- 1 root root 12 Aug 5 16:50 foo # При символической ссылке не используются биты прав доступа (они всегда отображаются, как rwxrwxrwx). Вместо этого, права доступа к файлу, полученному символической ссылкой, определяются правами доступа к файлу, на который он ссылается (в нашем примере определяется правами файла foo). Функционально, жесткие ссылки и символические ссылки похожи, но есть некоторые различия. Например, вы можете создать символическую ссылку на файл, который не существует; так нельзя сделать применительно к жесткой ссылке. Символические ссылки обрабатываются ядром иным образом, чем жесткие. Это скорее техническое отличие, но иногда важное. Символические ссылки полезны, поскольку они позволяют идентифицировать файл, на который они указывают; для жестких ссылок нет простого способа определить, какие файлы привязаны к одному и тому же индексу. Ссылки используются во многих местах системы Linux. Символические ссылки особенно важны для образов разделяемых библиотек в /lib. Смотри дополнительную информацию в Разделе 4.7.2. 3.11 Управление работами Работы и процессы Управление работами (job control) это возможность, которую предоставляют многие оболочки, включая (Bash и Tcsh). Управление работами (прим. переводчика: job - работа в добрые старые времена страшноватых IBM/360 переводилось как "задание", но лучше это не тащить в сегодня) позволяет управлять множеством команд или работ одновременно. Прежде, чем вы закопаетесь значительно глубже, следует поговорить о процессах. Каждый раз, когда вы выполняете программу, вы начинаете то, что известно, как процесс. Процесс - это название для выполняемой программы. Команда ps выдает перечень имеющих место в данный момент процессов. Вот пример: /home/larry# ps PID TT STAT TIME COMMAND 24 3 S 0:03 (bash) 161 3 R 0:00 ps /home/larry# PID (Process IDentificator), перечисленные в первой колонке, это неповторяющиеся числа приписанные всем идущим процессам. Последний столбец (COMMAND) дает имя выполняемой команды. Здесь мы видим только процессы, которые инициировал Larry. (В системе выполняется и много других процессов. Команда ``ps -aux'' может выдать перечень всех происходящих в данный момент процессов). В выведенном перечне указаны bash (это оболочка, используемая Larry) и сама команда ps. Как вы видите, bash выполняется параллельно с командой ps. bash выполнит ps, когда Larry введет команду. После окончания ps (после того, как выдана таблица процессов), управление возвращается к процессу bash, который выдает на экран подсказк готовности к приему новых команд. Выполняемый процесс известен shell как работа. Термины процесс и работа взаимозаменяемы. Однако процесс обычно воспринимается, как "работа", когда речь идет об управлении работами (job control)- свойстве shell, позволяющем уделять внимание нескольким независимым работам. В большинстве случаев пользователи выполняют в каждый момент времени одну работу, ту которая соответствует последней переданной shell команде. Однако, используя управление работами, вы можете одновременно выполнять несколько работ, по необходимости переключаясь с одной на другую. Какая от этого польза? Давайте предположим, что вы редактируете текстовый файл и неожиданно хотите прерваться и сделать что-то другое. С помощью управления работами вы можете отложить редактирование и, вернувшись к подсказке shell, начать какую-то другую работу. После этого вы можете вернуться к редактированию, именно к тому месту, где вы прервали редактирование. Это всего один пример. Управление работами очень полезно на практике. Выполнение работ на переднем плане и в фоне Работы могут выполняться как на переднем плане, так и в фоне. На переднем плане в каждый момент может быть только одна работа. Работа переднего плана, это работа, с которой вы взаимодействуете, она получает информацию с клавиатуры и посылает результаты на ваш экран. (Кроме, разумеется, случаев, когда вы сами перенаправляете вход или выход, как описывалось в Разделе 3.8). С другой стороны, фоновые работы не получают информации с терминала, в общем случае они тихо (в смысле - мирно) выполняются, не испытывая потребности в общении с пользователем. Некоторые работы требуют очень большого времени для своего завершения и не свершают ничего внешне интересного в процессе этой работы. Компиляция программ - одна из таких работ, как и компрессия больших файлов. Нет вразумительных причин, почему вы должны при этом сидеть рядом и мучительно ждать, когда эти работы закончатся. Вы можете просто запустить их в фоне. Пока они там выполняются, вы можете заняться другими программами. Работы могут быть также отложены. Отложенная работа - это работа, которая в данный момент не выполняется и временно остановлена. После того, как вы остановили работу, в дальнейшем вы можете ее продолжить как на переднем плане, так и в фоне. Возобновление приостановленной работы не изменит ее состояния - при возобновлении она начнется с того места, на котором была приостановлена. Имейте в виду, что приостановка работы, это не прерывание работы. Когда вы прерываете идущий процесс (нажимая клавиши прерывания, обычно это ctrl-C), то убиваете процесс насовсем. (Клавиши прерывания можно переустанавливать командой stty. По умолчанию прерывание находится под ctrl-C, но мы не можем это гарантировать для всех систем). Если работа убита, то уж убита, и нет другого способа возобновить ее, как вновь запустить сначала, используя прежнюю команду. Заметим также, что некоторые программы могут перехватывать прерывания, тогда нажатие ctrl-C не приведет к немедленному прекращению работы. Это позволит программе выполнить необходимые операции аккуратного завершения. Некоторые программы вообще не позволят вам их прервать. Работа в фоне и ликвидация работ Давайте начнем с простого примера. Команда yes - вроде бы бесполезная команда, посылающая бесконечный поток "y" на стандартный выход. (Но это очень полезно. Если вы направите через конвейер эти "y" на вход другой команды, которая требует ответов yes и "no" на вопросы, поток "y" даст подтверждение на все вопросы). Попробуйте. /home/larry# yes y y y y y Это закончится в бесконечности. Вы можете убить процесс, нажав клавиши прерывания; обычно это ctrl-C. Чтобы нас больше не раздражал поток нескончаемых "y", перенаправим его в /dev/null. Как вы помните, /dev/null выступает в качестве "черной дыры" для данных. В ней исчезают бесследно любые данные. /home/larry# yes > /dev/null Ох, теперь намного лучше. Ничего не печатается, но и подсказка shell не появляется. Это потому, что программа продолжает работать, посылать "y" в /dev/null. Снова нажмите клавиши прерывания, чтобы прекратить это. Давайте предположим, что мы хотим, чтобы команда yes продолжала работать, но также хотим получить обратно подсказку shell, чтобы выполнять другие работы. Мы можем перевести команду yes в фоновый режим, что позволит ей выполняться, но без выхода на взаимодействие с пользователем. Чтобы переместить процесс в фоновый режим, необходимо после команды символ ``&''. /home/larry# yes > /dev/null &; [1] 164 /home/larry# Вы видите, что мы вновь получили подсказку. Но что значит ``1 164''? И выполняется ли команда yes на самом деле? ``1'' представляет номер работы для программы yes. Shell приписывает номер каждой выполняемой работе. Поскольку "yes" - одна единственная работа, которая в данный момент выполняется, ей присвоен номер 1. ``164'' - идентификатор процесса (PID); это номер, присвоенный системой работе. Любой из этих номеров можно использовать при обращении к работе, как это будет показано в дальнейшем. Теперь мы имеем выполняемый процесс yes в фоновом режиме, непрерывно посылающий поток "y"-ков в /dev/null. Чтобы проверить состояние этого процесса, используйте внутреннюю команду shell - jobs. /home/larry# jobs [1]+ Running yes >/dev/null & /home/larry# Ясно, что она выполняется. Вы можете также воспользоваться командой ps, показанной ранее, для проверки статуса работ. Для завершения работы используйте команду kill. Эта команда может брать в качестве аргумента как номер работы, так и идентификатор процесса. Это была работа номер 1, так что используя команду /home/larry# kill %1 мы ликвидируем работу. При идентификации работы по номеру необходимо впереди ставить символ процента (``%''). Теперь, после ликвидации, мы можем снова использовать jobs для проверки: /home/larry# jobs [1]+ Terminated yes >/dev/null /home/larry# Работа действительно мертва, и если мы снова воспользуемся командой jobs, ничего не будет выведено на экран. Вы можете также убить работу, используя номер идентификатора процесса (PID), который выводится наряду с работой, когда вы начинаете работу (в фоновом режиме). В нашем пример PID равен 164, так что команда /home/larry# kill 164 эквивалентна /home/larry# kill %1 Вам не надо использовать ``%'', когда вы обращаетесь к работе по номеру идентификатора процесса. Остановка и возобновление работы Есть другой способ перевести работу в фоновый режим. Вы можете начать работу нормально (в режиме переднего плана), остановить работу и продолжить в фоновом режиме. Сначала начнем работу "нормально": /home/larry# yes > /dev/null Поскольку опять работа выполняется на переднем плане, вы не получите обратно на экран подсказку shell. Теперь, вместо того, чтобы прерывать работу с помощью ctrl-C, мы остановим работу. Приостановка работы не убивает ее. Чтобы осуществить приостановку работы, надо нажать соответствующие клавиши, обычно это ctrl-Z. /home/larry# yes > /dev/null [ctrl-Z] [1]+ Stopped yes >/dev/null /home/larry# Пока работа остановлена, она просто не выполняется. На нее не тратится время процессора. Но вы всегда можете возобновить работу, и она продолжится как ни в чем не бывало. Для возобновления работы в режиме переднего плана используйте команду fg (``foreground'' - передний план). /home/larry# fg yes >/dev/null Shell снова выдаст на экран имя команды, чтобы вы могли проконтролировать, какую работу вы активизировали в режиме переднего плана. Вновь остановите работу с помощью ctrl-Z. В этот раз используйте команду bg (``background'' - задний план, фоновый режим), чтобы перевести работу в фоновый режим. Эффект будет аналогичен тому, как если бы вы набрали после команды ``&''. /home/larry# bg [1]+ yes >/dev/null & /home/larry# И мы получили назад подсказку. Команда jobs сообщит, что команда yes действительно выполняется, и мы можем снова ее убить с помощью команды kill, как мы это уже делали. Как теперь остановить работу? Использование ctrl-Z не поможет, поскольку работа находится в фоновом режиме. Ответ - переместить работу на передний план, а затем остановить. Вы можете использовать fg как для остановленных работ, так и для работ, находящихся в фоне. Существует большая разница между фоновой работой и остановленной. Остановленная работа не выполняется и не использует время процессора, да и никакой работы, честно говоря, в этот момент не делает (но занимает память, хотя по воле своппинга может оказаться на диске). Работа в фоновом режиме и выполняется, и занимает память. Она может даже выводить что-то на экран, хотя это может раздражать вас, когда вы работаете над чем-то другим. Например, если вы использовали команду: /home/larry# yes & без перенаправления stdout в /dev/null, поток "y" будет выводиться на экран без возможности прервать это (вы не сможете использовать ctrl-C для прерывания работ фонового режима). Чтобы остановить эту бесконечную выдачу, вам следует использовать команду fg для перевода работы в режим переднего плана, а затем использовать ctrl-C, чтобы ее убить. Еще одно замечание. Команды fg и bg обычно переводят на передний план или в фоновый режим работы, которые были остановлены последними (что определяется символом ``+'' после номера работы, это когда вы используете команду jobs). Если вы выполняете много работ одновременно, вы можете перевести на передний план или, наоборот, в фоновый режим конкретную работу заданием идентификатора работы в качестве аргумента команд fg или bg, как в /home/larry# fg %2 (перевод на передний план работы номер 2) или /home/larry# bg %3 (перевод в фон работы номер 3). Для этих команд нельзя использовать идентификаторы процессов. Кроме того, использование только номеров работ, как в /home/larry# %2 эквивалентно /home/larry# fg %2 Помните, что управление работами, это свойство shell. Команды fg, bg и jobs - внутренние команды shell. Если по какой-то причине вы используете shell, который не поддерживает управление работами, там вы не найдете этих команд. В дополнение к этому, есть некоторые аспекты управления работами, которые различаются в Bash и Tcsh. Некоторые оболочки не имеют управления работами, хотя большинство оболочек Linux имеют такую возможность. 3.12 Использование редактора vi Текстовый редактор, это программа, используемая для редактирования файлов, которые содержат текст, например письма, С-программы или системные конфигурационные файлы. Хотя в Linux много всяких разных редакторов, единственный редактор, который вы с гарантией найдете в любом UNIX - это vi (``visual editor''). vi - это не самый простой в использовании редактор. Но поскольку он так распространен в мире UNIX и в любой момент может вам потребоваться, он заслуживает хоть какого-то описания здесь. Выбор редактора, это дело персонального вкуса и стиля. Многие пользователи предпочитают витиеватый и мощный Emacs - редактор с самым большим набором возможностей, по сравнению со всеми другими редакторами в мире UNIX. Например, Emacs имеет свой собственный встроенный диалект языка программирования LISP и множество расширений (одно из которых ``Eliza''- в некотором роде программа искусственного интеллекта). Однако, поскольку Emacs со всеми поддерживающими его файлами сравнительно велик, его нет на многих системах. vi, наоборот, маленький и удаленький, но, увы, более сложный в использовании. Но когда вы с ним освоитесь, вы поймете, что он очень простой. Правда осваивать его сложно. Этот раздел - вразумительное введение в vi. Мы не будем обсуждать все его свойства, а только те, которые вы должны знать, чтобы начать работать. Если вы пожелаете знать больше деталей, обратитесь к страницам Руководства. Концепции При использовании vi в любое время вы можете находиться в одном из трех режимов работы. Эти режимы известны как командный режим, режим вставки и режим последней строки. Когда вы начинаете работать с vi - вы в командном режиме. Этот режим позволяет использовать определенные команды для редактирования файлов или перехода в другие режимы. Например, напечатав ``x'' при нахождении в командном режиме, удаляете символ, находящийся перед курсором. Стрелки передвигают курсор по редактируемому файлу. Большинство команд, используемых в командном режиме, состоит из одного или двух символов. Вставку или редактирование текста вы осуществляете в режиме вставки. При использовании vi вы, возможно, большую часть времени находитесь именно в этом режиме. Вы переходите в режим вставки с помощью команды ``i'' (``insert'' - вставка) из командного режима. В режиме вставки вы вставляете текст в документ на место, указываемое курсором. Для завершения режима вставки и возврата в командный режим следует нажать esc. Режим последней строки - это специальный режим, используемый для расширения возможностей командного режима. При вводе таких команд они появляются в последней строке экрана. Например, если вы напечатаете ``:'' в командном режиме, вы перейдете в режим последней строки и сможете использовать такие команды, как ``wq'' (записать (write) файл и выйти (quit) из vi), или ``q!'' (выйти из vi без сохранения изменений). Режим последней строки в общем случае используется для команд vi, которые длиннее одного символа. В режиме последней строки вы вводите однострочные команды и нажимаете enter для их выполнения. Начала vi Лучший способ освоить эту концепцию, это вызвать vi и отредактировать файл. В примере ``screens'', приводимом ниже, мы собираемся только показать несколько строк текста, будто бы экран состоит всего из шести строк (вместо двадцати четырех). Вызов vi vi где - имя редактируемого файла. Ну так вызовите vi, напечатав /home/larry# vi test для редактирования файла test. Вы увидите нечто вроде ____________________________________________________________________ |~_ | |~ | |~ | |~ | |~ | |"test"_[New_file]__________________________________________________| Столбец символов ``~'' говорит о том, что вы стоите на конце файла. Вставка текста Вы находитесь в командном режиме; для того, чтобы вставлять текст в файл, нажмите i (что переведет вас в режим вставки) и начинайте печатать. ____________________________________________________________________ |Now is the time for all good men to come to the aid of the party._ | |~ | |~ | |~ | |~ | |~__________________________________________________________________| При вставке текста вы можете напечатать столько строк, сколько пожелаете (нажимая return после каждой строки), и можете корректировать ошибки используя клавишу возврата (backspace). Для завершения режима вставки и возврата в командный режим нажмите esc. В командном режиме вы можете использовать клавиши со стрелками для перемещения по файлу. Здесь, поскольку мы имеем только одну строку текста, попытки использовать стрелки "вверх" и "вниз" приведут лишь к тому, что vi на вас загудит. Есть несколько способов вставки текста, отличных от использования команды i. Например, команда a вставляет в текст, начиная после текущего положения курсора, вместо текущей позиции курсора. Используйте левую стрелку для перемещения курсора между словами ``good'' и ``men''. ____________________________________________________________________ |Now is the time for all good_men to come to the aid of the party. | |~ | |~ | |~ | |~ | |~__________________________________________________________________| Нажмите a, для начала режима вставки, напечатайте ``wo'', а затем нажмите esc для возврата в командный режим. ____________________________________________________________________ |Now is the time for all good women to come to the aid of the party.| |~ | |~ | |~ | |~ | |~__________________________________________________________________| Для того, чтобы начать вставку текста в строку ниже текущей, используйте команду ``о''. Например, нажмите o и напечатайте строчку или две ____________________________________________________________________ |Now is the time for all good women to come to the aid of the party.| |Afterwards, we'll go out for pizza and beer._ | |~ | |~ | |~ | |~__________________________________________________________________| Но помните, что в любое время вы находитесь либо в командном режиме (где команды, такие как i, a или o могут применяться) или в режиме вставки (где вы вставляете текст, а затем с помощью esc возвращаетесь в командный режим) или в режим последней строки (в котором вы расширяете расширяемые команды, как это обсуждается ниже). Удаление текста В командном режиме команда "x" удаляет символ перед курсором. Если вы нажмете x пять раз, вы закончите в ситуации: ____________________________________________________________________ |Now is the time for all good women to come to the aid of the party.| |Afterwards, we'll go out for pizza and _ | |~ | |~ | |~ | |~__________________________________________________________________| Теперь нажмите a, вставьте некоторый текст, а затем нажмите esc: ____________________________________________________________________ |Now is the time for all good women to come to the aid of the party.| |Afterwards, we'll go out for pizza and Diet Coke._ | |~ | |~ | |~ | |~__________________________________________________________________| Вы можете удалять целые строки, набирая команду dd (т.е. нажимая d дважды). Если ваш курсор на второй строке, и вы напечатали dd, ____________________________________________________________________ |Now is the time for all good women to come to the aid of the party.| |~ | |~ | |~ | |~ | |~__________________________________________________________________| Чтобы удалить слово, на котором находится курсор, используйте команду dw. Поместите курсор на слово ``good'' и напечатайте dw. ____________________________________________________________________ |Now is the time for all women to come to the aid of the party. | |~ | |~ | |~ | |~ | |~__________________________________________________________________| Изменение текста Вы можете заменить фрагменты текста, используя команду R. Поместите курсор на первую букву слова ``party'', нажмите R и напечатайте слово ``hungry''. ____________________________________________________________________ |Now is the time for all women to come to the aid of the hungry._ | |~ | |~ | |~ | |~ | |~__________________________________________________________________| Использование R для редактирования текста очень походит на на команды i и a, но R заменяет прежний текст вместо вставки в него. Команда r заменяет один символ, отмеченный курсором. Например, переместите курсор на начало слова ``Now'' и напечатайте r, а следом C, то вы получите: ____________________________________________________________________ |Cow is the time for all women to come to the aid of the hungry._ | |~ | |~ | |~ | |~ | |~__________________________________________________________________| Команда ``˜'' изменяет размер буквы, отмеченной курсором: большую делает маленькой и наоборот. Например, если вы поместите курсор на ``o'' в ``Cow'' и затем последовательно будете нажимать ~, вы в конечном итоге получите: ____________________________________________________________________ |COW IS THE TIME FOR ALL WOMEN TO COME TO THE AID OF THE HUNGRY. | |~ | |~ | |~ | |~ | |~__________________________________________________________________| Команды перемещения Вы уже знаете, как использовать стрелки для перемещений по документу. Вы также можете использовать команды h, j, k, и l для перемещения курсора влево, вниз, вверх и вправо соответственно. Это удобно, если (по каким-то причинам) ваши клавиши со стрелками не работают как надо. Команда w перемещает курсор на начало следующего слова; b - перемещает на начало предыдущего слова. Команда 0 (это ноль) передвигает курсор на начало текущей строки, а команда $ перемещает на конец строки. При редактировании больших файлов вы хотите перемещаться вперед и назад сразу на размер экрана. Нажатием ctrl-F курсор перемещается на экран вперед, с помощью ctrl-B - на экран назад. Для того, чтобы переместить курсор в конец файла, напечатайте G. Можно переместиться также на любую строку, напечатав команду 10G вы переместите курсор на десятую строку файла. Для того, чтобы встать на начало (на первую строку), используйте 1G. Вы можете сочетать команды перемещения с другими командами, такими как удаление. Например, команда d$ удалить от местоположения курсора до конца строки; dG удалит все от курсора до конца файла и т.д. Сохранение файлов и выход из vi Для выхода из vi без внесения изменений в ранее существовавший файл используйте команду :q!. Когда вы напечатаете ``:'', курсор переместится на последнюю строку экрана, поскольку вы перейдете в режим последней строки. ____________________________________________________________________ |COW IS THE TIME FOR ALL WOMEN TO COME TO THE AID OF THE HUNGRY. | |~ | |~ | |~ | |~ | |~ | |:__________________________________________________________________| В режиме последней строки могут выполняться некоторые расширенные команды. Одна из них - q!, которая позволяет выйти из vi без записи. Команда :wq сохраняет (записывает) файл, а затем выходит из vi. Команда ZZ (в режиме команд, без `:'') эквивалентна :wq. Помните, что вы должны нажать enter после набора команды в режиме последней строки. Если хотите записать файл без выхода из /vi, используйте просто :w. Редактирование еще одного файла Для того, чтобы отредактировать другой файл, используйте команду :e. Например, чтобы прекратить редактирование файла test и перейти к редактированию файла foo, используйте команду ____________________________________________________________________ |COW IS THE TIME FOR ALL WOMEN TO COME TO THE AID OF THE HUNGRY. | |~ | |~ | |~ | |~ | |~ | |:e foo_____________________________________________________________| Если вы используете :e без предварительного сохранения файла, то сначала вы получите сообщение об ошибке. ____________________________________________________________________ |No_write_since_last_change_(":edit!"_overrides)____________________| которое просто означает, что vi не желает редактировать другой файл, пока не будет сохранен первый. В этот момент вы можете использовать :w, чтобы сохранить исходный файл, а затем использовать :e или использовать команду ____________________________________________________________________ |COW IS THE TIME FOR ALL WOMEN TO COME TO THE AID OF THE HUNGRY. | |~ | |~ | |~ | |~ | |~ | |:e! foo_____________________________________________________________| ``!'' говорит vi, что вы на самом деле имеете в виду - редактировать новый файл без сохранения изменений, которые делались в первом. Включение других файлов Если вы используете команду :r, вы можете включить содержимое другого файла в текущий файл. Например, команда :r foo.txt вставит содержимое файла foo.txt в данное место текста. Выполнение команд Shell Вы можете также выполнять команды прямо из vi. Команда :r! работает как :r, но вместо чтения файла она вставляет выход данной команды в буфер, в место, где находится курсор. Например, если вы используете команду :r! ls -F вы получите в результате ____________________________________________________________________ |COW IS THE TIME FOR ALL WOMEN TO COME TO THE AID OF THE HUNGRY. | |letters/ | |misc/ | |papers/_ | |~ | |~__________________________________________________________________| Вы можете выполнить команду a, находясь в редакторе vi и вернуться в редактор после ее завершения Напрмиер, если вы используете команду :! ls -F будет выполнена команда ls -F, а результат выдан на экран, а не вставлен в редактируемый файл. Если вы используете команду :shell vi запустит shell, который позволит временно "отложить" vi и выполнить команды. После выхода из shell (используя команду exit) вы вернетесь в vi. Получение помощи vi не слишком силен в интерактивной помощи (да и большинство UNIX-ов также), но вы всегда можете посмотреть страницы Руководства для vi. vi - это "визуальная составляющая" редактора ex; это ex делает многое для поддержания режима последней строки и командного режима в vi. Так что в дополнение к чтению Руководства по vi посмотрите также Руководство по ex. 3.13 Установка среды Shell обеспечивает различные механизмы настройки вашей рабочей среды. Мы уже упоминали ранее, что shell больше, чем команда интерпретации - это также мощный язык программирования. Но обсуждение программирования на shell увело бы нас далеко в сторону, а мы бы хотели познакомить вас с некоторыми способами упрощения вашей работы в UNIX за счет использования некоторых дополнительных полезных свойств shell. Как мы упоминали ранее, различные оболочки используют различный синтаксис для написания своих программ. Например, Tcsh использует синтаксис, похожий на язык Си, в то время как shell Баурна имеет другой синтаксис. В этом разделе мы не будем заниматься их различиями, а рассмотрим примеры, используя синтаксис shell Баурна (прим. переводчикf: как все обычно и делают). Сценарии shell прим. переводчика: применительно к программам этого типа в англоязычной литературе последнее время преимущественно используют слово script - "сценарий", хотя то, что под этим имеется в виду во многих книгах на русском называется "традиционно" как "программа на shell" или "командный файл" Предположим, что вы часто используете серию команд и хотели бы сократить об'ем постоянной печати за счет группировки их в одну команду. Например, команды /home/larry# cat chapter1 chapter2 chapter3 > book /home/larry# wc -l book /home/larry# lp book об'единяют файлы, содержащие главы книги: chapter1, chapter2, chapter3 и помещают результат в файл book. Затем подсчитывается число строк в книге (в файле book) и отображается на дисплее и, наконец, печатается командой lp. Вместо введения каждый раз этих команд, вы можете собрать их в один сценарий (командный файл). Сценарии shell мы кратко опишем в Разделе 3.13.1. А сценарий, который выполнит вышеприведенные команды, будет выглядеть следующим образом #!/bin/sh # A shell script to create and print the book cat chapter1 chapter2 chapter3 > book wc -l book lp book Если этот сценарий будет помещен в файл makebook, то вы можете просто использовать далее команду /home/larry# makebook которая выполнит все команды сценария. Сценарии shell - это обычные текстовые файлы, которые вы можете создавать с помощью редактора вроде emacs или vi. (vi обсуждался в Разделе 3.12) Давайте посмотрим на этот сценарий. Первая строка ``#!bin/sh/'' говорит о том, что этот файл есть сценарий и сообщает shell, как выполнить сценарий. В данном случае необходимо передать сценарий для выполнения команде bin/sh/, где bin/sh/ - сама программа shell. Почему это важно? В большинстве систем UNIX bin/sh/ - это shell Баурновского типа, например bash. Инициируя работу сценария shell выполняется, используя bin/sh/, при этом мы гарантируем, что сценарий будет выполняться именно под shell Баурновского типа (а не, скажем, под C shell). Этот сценарий будет выполняться под shell Баурна, даже если вы используете Tcsh (или какой-то другой C shell) как свою рабочую оболочку. Вторая строка представляет из себя комментарий. Комментарии начинаются символом ``#'' и могут продолжаться до конца строки - они игнорируются shell и могут использоваться программистом для пояснений. Остальные строки сценария - обычные команды в том виде, в каком бы вы их вводили прямо на выполнение. Shell читает каждую строку сценария и выполняет эту строку, как будто вы ввели эту строку в ответ на подсказку shell. Права доступа важны для сценариев. Если вы создали сценарий, вы должны убедиться, что вы имеете права на его выполнение. Если вы создавали сценарий в редакторе, то он (обычно) не получает автоматически прав на выполнение. Можно использовать команду /home/larry# chmod u+x makebook чтобы дать самому себе разрешение на выполнение shell-сценария makebook. Перемещение shell и среда Shell позволяет определять переменные, как и большинство языков программирования. Переменная - это порция данных, которой дано имя. (прим. переводчика: В языке shell переменные не определяются (в традиционном смысле), так как все они одного типа - "строкового", речь может идти только об их инициировании: присваивании начальных значений). ВНИМАНИЕ! Имейте в виду, что Tcsh, также, как и C shell, используют различные механизмы определения переменных, отличающиеся от используемых здесь. Здесь обсуждается shell Баурна. Когда вы присвоите значение переменной (используя оператор ``='' ), вы сможете получить это значение, добавив перед именем переменной символ ``$'', как это показано ниже /home/larry# foo=``hello there'' Переменной foo присвоено значение ``hello there''. Теперь вы можете обратиться к этой переменной, добавив перед именем символ ``$''. Команда /home/larry# echo $foo hello there /home/larry# дает тот же самый результат, что и /home/larry# echo ``hello there'' hello there /home/larry# Эти переменные являются внутренними для shell. Это означает, что только shell имеет доступ к этим переменным. Это может быть полезно для сценариев; если вам надо сохранить информацию о имени файла, вы, например, можете поместить его в переменную. Команда set может показать вам перечень всех определенных переменных shell. Shell позволяет экспортировать переменные в среду. Среда - это множество переменных, к которым могут иметь доступ все выполняемые команды. Определив однажды переменную внутри shell (прим. переводчика: определить - здесь означает "присвоить значение"), командой export вы можете передать ее среде. ВНИМАНИЕ! Здесь вновь есть отличие между Bash и Tcsh. При использовании Tcsh используется другой сиснтаксис для помещения переменных в среду (используется команда setenv). Дополнительную информацию можно найти в Руководстве по Tcsh. Среда очень важна в системах UNIX. Она позволяет конфигурировать некоторые команды за счет установки переменных, о которых знают команды. Вот небольшой пример. Переменная среды PAGER используется командой man. Она указывает команду, которая используется в свою очередь командой man для просмотра Руководства на экране. Если вы установите в качестве значения PAGER имя другой команды, то эта команда вместо будет обеспечивать просмотр вместо more (которая применялась по умолчанию). Присвойте PAGER значение ``cat''. Выдача на экран руководства будет вся разом, а не поэкранно, как это делала команда more. /home/larry# PAGER=cat Теперь экспортируйте PAGER в среду. /home/larry# export PAGER Попробуйте команду man ls. Руководство промелькнет по вашему экрану без (желательных) задержек. Теперь, если присвоить PAGER значение ``more'', то для выдачи на экран будет использоваться команда more. /home/larry# PAGER=more Обратим внимание на то, что нам не надо заново использовать команду export после изменения значения PAGER. Необходимо только раз экспортировать переменную; любые изменения, которые будут происходить после этого, будут отражаться в среде. Страницы Руководства для конкретных команд содержат информацию о том, использует ли команда какие-то переменные среды. Например, Руководство по команде man говорит о том, что для определения режима выдачи страницы руководства на экран используется переменная PAGER. Некоторые команды совместно используют переменные среды, например, многие команды используют переменную среды EDITOR для указания используемого редактора. Переменные среды используются также для сохранения важной информации о процедуре входа. Например переменная HOME содержит имя вашего домашнего каталога. /home/larry/papers# echo $HOME /home/larry Другая интересная переменная среды - PS1, которая определяет главную подсказкн shell. Например, /home/larry# PS1=``Your command, please: '' Your command, please: Для переустановки подсказки обратно в нормальное состояние (когда она показывает текущий рабочий каталог, после которого следует значек ``#''), выполните следующее: Your command, please: PS1=``\w# '' /home/larry# В Руководстве bash есть подробное описание синтаксиса, используемого при установке подсказки. Переменная среды PATH Когда вы используете команду ls, как shell находит соответствующий выполняемый файл (программу) для ls? На самом деле в большинстве систем ls находится в /bin/ls. shell использует переменную среды PATH ("ТРОПА") для указания возможного местоположения выполняемых файлов соответствующих команд. Например, ваша переменнаяPATH может иметь значение /bin:/usr/bin:/usr/local/bin:. Это список каталогов (в которых shell будет искать команду), отделяемых друг от друга двоеточием ``:''. Когда вы используете команду ls, shell прежде всего проверяет наличие /bin/ls, затем /usr/bin/ls и т.д. Обратите внимание на то, что переменная PATH не помогает находить обычные файлы. Например, если вы используете команду /home/larry# cp foo bar shell не использует PATH для нахождения местопребывания файлов foo и bar - предполагается, что эти имена однозначно определяют место. shell использует PATH только для нахождения команды cp. Это экономит вам массу времени; это означает, что вы не обязаны помнить, где находятся выполняемые файлы команд. Во многих системах выполняемые файлы разбросаны во многих местах, таких как /usr/bin, /bin или /usr/local/bin. Вместо того, чтобы писать полное имя команды (вроде /usr/bin/cp), вы просто указываете в PATH перечень каталогов, которые бы вы хотели, чтобы shell автоматически просматривал. Обратите внимание, что PATH содержит ``.'', что означает "текущий рабочий каталог". Это позволяет вам создавать shell-сценарии или программы и выполнять их как команды из текущего каталога, без необходимости указывать это прямо (как в случае ./makebook). Если каталог не указан в PATH, то shell не будет его просматривать в поиске команд, это касается и текущего каталога. Shell-Сценарии инициализации В дополнение к shell-сценариям, которые создаете вы, существует множество сценариев, которые использует сам shell для своих целей. Наиболее важными среди них являются сценарии инициализации, которые автоматически выполняются shell при вашем входе в систему. Сценарии инициализации сами по себе - это обычные сценарии, как это описывалось выше. Но они очень полезны при установке вышей среды путем автоматического выполнения набора команд при вашем входе в систему. Например, если вы всегда используете команду mail для проверки своей почты в момент входа в систему, вы можете поместить эту команду в свой сценарий инициализации и она будет выполнена автоматически. Как Bash, так и Tcsh делают различие между начальным shell (вызываемым при входе в систему) и прочими вызовами shell. Начальный shell вызывается в момент входа пользователя в систему; часто это единственный экземпляр shell, который вы используете. Но если вы вызываете shell из другой программы, такой какvi, вы тем самым запускаете новый (экземпляр) shell. Кроме того, когда вы запускаете на выполнение shell-сценарии, вы автоматически инициируете новый экземпляр shell. Файлы инициализации, используемые в Bash: /etc/profile (устанавливается системным администратором, выполняется всеми экземплярами начальных пользовательских bash, вызванными при входе пользователей в систему), $HOME/.bash_profile (выполняется при входе пользователя) и $HOME/.bashrc (выполняемый всеми прочими не начальными экземплярами bash). Если .bash_profile отсутствует, вместо него используется .profile. Tcsh использует следующие сценарии инициализции: /etc/csh.login (выполняется всеми пользовательскими tcsh в момент входа в систему), $HOME/.tcshrc (выполняется во время входа в систему и всеми новыми экземплярами tcsh) и $HOME/.login (выполняется во время входа после .tcshrc). Если .tcshrc отсутствует, вместо него используется .cshrc. Для того, чтобы лучше понять функции этих файлов, вам следует больше узнать о shell. Программирование на shell сложный вопрос, далеко выходящий за рамки этой книги. Дополнительную информацию можно получить из Руководства на bash и tcsh. 3.14 Не хотите ли отправиться в самостоятельное плавание Надеемся, что мы дали достаточно информации относительно того, как использовать систему. Имейте в виду, что большая часть интересных и важных аспектов Linux здесь не обсуждалась - здесь рассматривались только самые базовые. Но этот фундамент поможет вам быстро освоить и использовать более сложные приложения. Если все рассмотренное здесь вам не показалось волнующе интересным, не унывайте - в Linux есть еще много того, с чем следовало бы познакомиться. Один из незаменимых способов изучения системы - это чтение Руководства. Хотя многие страницы Руководства могут выглядеть и достаточно сложными, если вы будете достаточно глубоко копать, вы откопаете несметные россыпи полезной информации. Мы также советуем прочитать какую-то полную книгу по системе UNIX. В UNIX значительно больше разнообразных возможностей, чем можно увидеть с певого взгляда - к сожалению, они выходят за рамки этой книги. Некоторые хорошие книги по UNIX указаны в Приложении A. 4 Администрирование Содержимое этого раздела Эта глава представляет обзор функций администрирования системы Linux, включая ряд особых функций, предназначенных исключительно для администратора системы. Как в каждой бочке меда присутствует ложка дегтя, так и каждая система имеет своего администратора. А администрирование системы - это очень важная и иногда пожирающая уйму времени работа, даже если вы единственный пользователь системы. Мы постараемся обсудить здесь наиболее важные вещи, связанные с администрированием, о котором вы должны знать при использовании Linux, чтобы не испытывали неудобств при работе с ОС. Чтобы быть не слишком болтливыми и приятными собеседниками, мы и раньше рассматривали только основные черты, пропуская многие важные детали. Вам следует прочитать книгу " Linux System Administrator's Guide", если у вас относительно Linux серьезные намерения. Это поможет вам лучше понять как там все происходит, и как там все взаимодействует. В крайнем случае, стоит все это просмотреть, чтобы знать что в книге содержится и какой помощи вам следует от нее ожидать. 4.1 О корнях власти, волшебной шапке и приятных ощущениях. Как вы знаете, UNIX различает различных пользователей, так что то, что они могут сделать друг другу и системе, регулируется (например, не хочется, чтобы кто-то читал чужие любовные письма). Каждый пользователь получает account (регистрируется в системе), что включает имя пользователя, домашний каталог и т.д. В дополнение к регистрации реальных людей, регистрируются (для них также открывается счет :-) несколько специальных пользователей, имеющих привилегии. Наиболее "важный" даже среди них пользователь - root (корень). Регистрация root Обычные пользователи в общем случае ограничены так, что они не могут причинить вред кому-либо другому в системе (включая саму систему), кроме самих себя. Права доступа к файлам в системе организованы таким образом, что простой пользователь не может удалить или изменить файл, файл в каталогах, которые пользователи используют совместно (такие как /bin и /usr/bin). Большинство пользователей также защищают свои собственные файлы так, что не могут их изменить, а иногда и вообще добраться до них. Но все эти ограничения не распространяются на пользователя root. Пользователь root может читать, модифицировать или удалять любой файл системы, изменять его права доступа или менять его владельца. Он (root) может также выполнять специальные (привилегированные) программы, такие как разбитие диска на разделы или создание файловой системы. Основная идея состоит в том, что некто (их может быть несколько), кто выполняет регистрацию пользователей (и носит имя root), должен, когда это необходимо, иметь возможность выполнять работы, которые не могут быть выполнены обычным рядовым пользователем. Поскольку root может делать все, что угодно, ему легко совершить какую-то ошибку, приводящую к катастрофическим последствиям. Например, если вы как обычный пользователь случайно попытаетесь удалить файл в /etc, система не разрешит вам это сделать. Но, если вы вошли как root, система даже не пикнет, выполняя все, что прикажете. Легко уничтожить систему, пребывая в системе в качестве root. Лучший способ избежать неприятностей, это: * Посидеть на собственных ладошках, прежде чем нажать return для выполнения команды, которая может быть причиной катастрофы. Например, если вы собираетесь очистить каталог, перед нажатием return перечитайте всю команду и убедитесь, что она написана правильно. * Не привыкайте использовать root. Чем более комфортно вам будет в роли root, тем больше вы будете путать ваши привилегии с привилегиями нормального пользователя. Например, вы можете подумать, что вы сейчас находитесь в системе как larry, хотя на самом деле будете неудержимым root. * Используйте отличающуюся подсказку для root. Для этого следует внести изменения в root-овский .bashrc или .login файл для того, чтобы сделать подсказку для root отличной от других. Например, многие используют символ ``$'' в подсказках обычных пользователей и оставляют символ ``#'' для подсказки root. * Входите под именем root только тогда, когда это абсолютно необходимо. И, как только вы закончите работу root-а, выйдите (выведите root-а из системы). Чем меньше используете root, тем меньше навредите системе. Разумеется, есть племя хакеров, которые используют root практически всегда и везде. Но каждый из них когда-то по глупости уничтожил хотя бы (в лучшем случае) одну систему. Есть общее правило: пока вы не познакомились с неограниченными возможностями root, и не привыкли к отсутствию ограничений, входите под root в крайнем случае. Разумеется, все совершают ошибки. Однажды сам Linus Torvalds (создатель linux) случайно удалил все поддерево каталогов, содержавшее программы ядра. Многие часы работы пропали (бы) в один миг навсегда. К счастью, однако, благодаря своему знанию кодов файловой системы, он смог перезагрузить систему и реконструировать дерево каталогов вручную. Давайте по-другому, если вы представите использование root как ношение специальной волшебной шапки, которая дает вам могущество, так что вы можете мановением руки разрушить целые города, то уместная мысль, что надо очень следить за своими руками. А поскольку такая мощь опасна (да и рукам неудобно), лучше без большой нужды не надевать волшебную шапку, даже если в шапке у вас повышается самоуважение. Злоупотребление системой С приходом ощущения власти приходит желание вредить. Это темная сторона администрирования в UNIX, но всякий через это когда-то должен пройти. Большинство пользователей UNIX никогда не получат возможность испытать это на университетских и производственных системах UNIX. Только высокооплачиваемые и высокообразованные системные администраторы могут входит в систему под именем root. Действительно, во многих таких заведениях пароль root - это строго охраняемый секрет. Это священная корова фирмы. Много делается попыток пролезть под именем root в систему; она представляется мудрой и устрашающей силой, покоряющейся только тем, кто знает заклинания. Такая позиция по отношению к root очень легко приводит к опасностям и соблазнам. Поскольку root столь одурманивающая штука, то когда пользователь дорывается до возможности войти под root, прослеживается начало использования свалившихся привилегий в плане вредительства. Я знавал таких "системных администраторов", которые читали без разрешения почту других пользователей и вообще вели себя как дети, которым дали столь мощную клевую "игрушку". Поскольку root имеет в системе такие привилегии, требуется определенный уровень зрелости и самоконтроля, чтобы использовать этот account (этот привилегированный "счет"), как это было задумано - для эксплуатации системы. Существует негласный закон чести в отношениях администратора с пользователями. Как вы будете себя чувствовать, если системный администратор читает ваши письма и просматривает ваши файлы? До сих пор нет достаточно серьезной юридической основы для неприкосновенности личной информации в многопользовательских компьютерных системах. В системах семейства UNIX пользователь root имеет возможность преодолевать все штатные механизмы защиты системы. Важно, чтобы у администратора были доверительные отношения с пользователями системы. Невозможно переоценить важность этого. Взаимодействие с пользователями Безопасность UNIX довольно рыхлая от рождения. Вопросы безопасности были додуманы "в догонку" - исходно система создавалась в неформальной атмосфере, когда все вмешивались в работу друг друга. Благодаря этому, даже несмотря на меры безопасности, у нормального пользователя существуют возможности причинить системе вред. Системный администратор может выбрать две тактики взаимодействия с злоупотребляющими (прим. переводчика: в исходном, а не в узко русском смысле этого слова) пользователями. Это может быть параноидная тактика и тактика доверия. Системный администратор с паранойей обычно своими действиями наносит больше вреда, чем предотвращает. Одна из моих любимых присказок: "Никогда не списывай на зловредность то, что можно списать на тупость". Взгляните с другой стороны, большинство пользователей не имеют возможностей и знаний, чтобы причинить реальный вред системе. 90% процентов того, что делает пользователь, причиняя вред системе (например, забивая пользовательский раздел огромными файлами или выполняя сразу несколько экземпляров громадной программы), он делает просто не подозревая, что он кому-то создает проблемы. Мне приходилось сталкиваться с пользователями, которые были источниками огромных неприятностей, но они они действовали по простоте душевной, а не со зла. Когда вы имеете дело с пользователями, которые опасны потенциально, не накидывайтесь на них с обвинениями. Старое правило "презумпции невиновности" все еще не отменили. Лучше всего поговорить с пользователем, поспрашивать о его проблемах, вместо того, чтобы идти на конфронтацию. Самое плохое, это пытаться отвечать ему "встречными" неприятностями. Это создаст вокруг вас - системного администратора - много подозрений, поставит под сомнение вашу способность корректно сопровождать систему. Если пользователь решит, что вы не верите ему или даже не любите, он может обвинить вас в том, что вы удаляете его файлы и вообще подсматриваете. Вряд ли вы хотите оказаться в такой ситуации. Если вы убедились, что пользователь действительно пытается ``взломать'' систему или умышленно ей вредит, старайтесь не отвечать угрозами на угрозы. Вместо этого просто предупредите его, но сохраняйте гибкость. Во многих случаях вы можете"схватить его за руку" в процессе свершения вредительства - вот тут и предупредите. Скажите, чтобы он так больше не делал. Но если вы снова его поймаете на вредительстве, то убедитесь, что это действительно намеренно. Я просто не смогу перечислить все случаи, когда оказывалось, что неприятность была либо случайной, либо я сам был виноват. Установление правил Лучший способ управления системой - это управление без применения железного кулака. Может так вы хорошо управляли в армии, но это не для UNIX. Имеет смысл сделать простой и гибкий свод руководств для пользователей, но чем меньше у вас будет правил, тем меньше шансов их нарушить. Даже если ваши правила использования системы очень ясны и разумны, пользователи все равно время от времени будут их без злого умысла нарушать. Это, в особенности, относится к новичкам в UNIX, которые еще только изучают основы системы. Да и вы сами можете время от времени рассылать гигабайтные файлы всем пользователям системы... Пользователям надо помочь понять правила и об'яснить, зачем они нужны. Если вы создали руководство для пользователей системы, убедитесь, что причины введения тех или иных правил им понятны. Если вы этого не сделаете, пользователи творчески подойдут к тому, как обходить эти правила. может быть и не сознавая, что они их действительно обходят. Что все это значит Мы не можем до последней детали расписать вам, как эксплуатировать систему. Большая часть философии зависит от того, как вы используете систему. Если у вас много пользователей, то это сильно отличается от того, когда их мало, или вообще вы один. Но при любом раскладе очень полезно задуматься, что в данной конкретной системе дествительно означают слова "системный администратор" (или "администратор системы"). Должность администратора системы не делает вас крутым юниксистом. На свете много системных администраторов, которые мало что знают о UNIX. Похоже, что существует много "нормальных" пользователей, которые, знают о UNIX больше любого системного администратора. Пребывание в должности администратора не дает вам права использовать угрозы в адрес пользователей. Именно потому, что система дает вам привилегию устроить из файлов пользователя все, что угодно, вы не имеете никакого права это делать. Наконец, быть системным администратором, это невесть что. При этом не имеет значения, опекаете вы маленький 386-ой или суперкомпьютер Cray. Знание заветного пароля root не принесет вам денег и славы; оно поможет сопровождать систему и поддерживать ее работоспособность. Вот так. 4.2 Загрузка системы Существует несколько способов загрузки системы: либо с дискеты, либо с жесткого диска. Использование загрузочной дискеты Многие загружают Linux используя ``загрузочную дискету'', которая содержит копию ядра Linux. В ядре есть информация о корневом разделе Linux, так что ядро знает, где искать на жестком диске корневую файловую систему. (Команда rdev может использоваться для установки корневого раздела в образе ядра; см. ниже). Это тип дискеты, созданной, например, Slackware в процессе инсталляции. Для создания своей собственной загрузочной дискеты, сначала разместите образ ядра на своем жестком диске. Оно должно быть в файле /Image или /etc/Image. Некоторые инсталляции используют для формирования ядра файл /vmlinux. Вместо этого у вас может быть скомпрессированное ядро. Скомпрессированное ядро само раскомпрессируется при загрузке в память и занимает значительно меньше места на диске. Если у вас есть скомпрессированное ядро, оно находится в файле /zImage или /etc/zImage. Зная, где у вас находится ядро, установите корневое устройство в образе ядра на имя вашего корневого раздела командой rdev. Формат команды: rdev где ; это имя образа ядра, a - имя корневого раздела Linux. Например, для установки корневого устройства в ядре /etc/Image на /dev/hda2 используется команда # rdev /etc/Image /dev/hda2 rdev может устанавливать другие опции в ядре, такие как взятый по умолчанию режим SVGA, для использования во время загрузки. Используйте ``rdev -h'' для получения помощи. После установки корневого устройства вы можете просто скопировать образ ядра на дискету. При копировании данных на дискету, хорошо бы сначала отформатировать дискету в MS-DOS. При форматировании выдается информация о секторах и треках дискеты, так что можно определить какую плотность записи имеет эта дискета. Например, для копирование файла ядра /etc/Image на дискету в /etc/fd0 используйте команду # cp /etc/Image /dev/fd0 Теперь эта дискета должна загружать Linux. Использование LILO Другой метод загрузки - это использование LILO, программы, которая располагается в загрузочном секторе вашего жесткого диска. Эта программа выполняется, когда система загружается с жесткого диска и может автоматически загрузить Linux из образа ядра, хранящегося на жестком диске. LILO может быть также использована, как начальный загрузчик для нескольких операционных систем, позволяя вам выбирать во время загрузки, какую операционную систему (например, Linux или MS-DOS) загружать. Когда вы загружаетесь с использованием LILO, то загружается операционная система, установленная по умолчанию, если вы не нажмете ctrl, alt или shift во время выполнения загрузочной последовательности. Если вы нажмете любой из этих ключей, то вам будет выдана подсказка загрузчика, в ответ на которую вы напечатаете имя операционной системы, которую надо загрузить (например, ``linux'' или ``msdos''). Если вы нажмете tab в ответ на подсказку загрузчика, вам будет выдан перечень доступных операционных систем. Простой способ инсталлировать LILO - отредактировать файл конфигурации /etc/lilo.conf и выполнить команду # /sbin/lilo Файл конфигурации LILO содержит ``stanza''("стансы" - не пугайтесь, это действительно про поэзию). для каждой операционной системы, которую вы желаете загрузить. Лучший способ продемонстрировать это на примере конфигурационного файла LILO config. Нижеприведенные установки для системы, которая имеет корневой раздел Linux на /dev/hda1 и раздел MS-DOS на /dev/hda2. # Tell LILO to modify the boot record on /dev/hda (the first # non-SCSI hard drive). If you boot from a drive other than /dev/hda, # change the following line. boot = /dev/hda # Name of the boot loader. No reason to modify this # un less you're doing some serious hacking on LILO. install = /boot/boot.b # Have LILO perform some optimization. compact # Stanza for Linux root partition on /dev/hda1. image = /etc/Image # Location of kernel label = linux # Name of OS (for the LILO boot menu) root = /dev/hda1 # Location of root partition vga = ask # Tell kernel to ask for SVGA modes at boot time # Stanza for MSDOS partition on /dev/hda2. other = /dev/hda2 # Location of partition table = /dev/hda # Location of partition table for /dev/hda2 label = msdos # Name of OS (for boot menu) Стансы первой операционной системы в файле config - это та ОС, которую LILO загружает по умолчанию. Вы можете выбрать другую ОС во время загрузки в ответ на подсказку LILO, как это уже обсуждалось ранее. Помните, что каждый раз, когда вы изменяете образ ядра на диске, вы должны заново выполнить /sbin/lilo, чтобы изменения отразились в загрузочном секторе вашего диска. Имейте также в виду, что если вы используете здесь строку ``root ='', нет смысла использовать rdev для установки корневого раздела в образе ядра. LILO установит ее во время загрузки. Linux FAQ (смотри Приложение A) дает дополнительную информацию по тому, как использовать LILO при загрузке Boot Manager OS/2. (прим. переводчика: The Linux FAQ - Часто Задаваемые Вопросы по Linux. 4.3 Выключение системы Выключение Linux - это немножко акробатика. Не забывайте, что никогда нельзя просто выключить питание или нажать кнопку "reset" во время работы системы. Ядро отслеживает диск при вводе- выводе с помощью буферов. Если вы перезагружаете систему, не дав шанса ядру переписать буфера на диск, вы можете попортить файловые системы. Необходимы и другие меры предосторожности при выключении. Всем процессам посылается сигнал, который позволяет им красиво умереть (записав, что надо и закрыв все файлы и т.д.). Файловые системы для безопасности размонтируются. Если вы желаете, система может также предупредить пользователей, что предстоит выключение, чтобы дать им шанс тоже (красиво) выйти из системы. Простейший способ выключения, это использование команды shutdown. Формат команды shutdown