-->
Для начинающих Для знатоков Для души О нас |
Данный курс расчитан на слушателей, знакомых с персональным компьютером хотя бы на начальном уровне и желающих освоить новую Юникс-подобную систему. Во время занятий мы постараемся передать философию и основные приёмы работы, отобранные в процессе эволюции вычислительной техники и программирования. Различные версии Юникс в частности и технологии интернет вообще развиваются чрезвычайно динамично, поэтому наша цель -- дать ориентиры и подготовить слушателей для дальнейшей самостоятельной работы.
1. Юникс -- многопользовательская системаКомпьютер под управлением ОС Юникс позволяет работать в системе одновременно многим пользователям, и каждому из них запускать много задач. Для входа в систему в ответ на приглашениеимя_хоста login: Password: нужно ввести имя пользователя, и подтвердить его паролем. Пользователь, точнее бюджет пользователя (account), должны быть созданы заранее администратором. Это имя видимо всем и к нему привязаны почтовый адрес, домашний каталог и прочая персональная информация. Пароль, напротив, не должен знать никто, кроме самого пользователя. Он является ключом к вашему бюджету в этой системе, иногда и во всей сети. Пароль меняется с помощью команды приглашение $ passwd Пароль нужно продумать заранее. Он должен быть как минимум из 6 символов, из смеси строчных, заглавных букв, цифр и прочих закавычек и значков. Правильно настроенная система не позволит установить ни слабый пароль, ни похожий на имя пользователя. Помните, что ваш пароль не должен знать никто, даже сисадмин, а украденный пароль является самым первым шагом к компьютерным преступлениям. Если вы успешно вошли в систему и получили приглашение командного процессора, или shell'а, то теперь можете задавать команды и выполнять программы. После выполнения любой программы вы снова возвратитесь в тот же самый shell, и так много-много раз, пока не пожелаете закончить сеанс работы и выйти из системы. Для выхода нужно набрать команду logout или exit, а проще всего Ctrl-D SHELL выполняет команды, вводимые пользователем, и выдаёт результат. Если происходит ошибка при вызове или выполнении программы, вместо результата выдаётся сообщение об ошибке. Эти 3 потока называются соответственно Std IN, Std OUT, Std ERR, или потоки с номерами 0, 1, 2. Обычно стандартный ввод принимается с клавиатуры, а стандартный вывод и ошибки направляются на экран. Указанные потоки можно или по отдельности, или вместе легко перенаправить либо в файл, либо на вход следующей программы (конвейер, pipe), либо и в файл и в конвейер. По умолчанию же ввод, вывод и ошибки привязаны соответственно к клаве, экрану и экрану. Исторически все это называется tty, или консоль, терминал. Вообще говоря, терминалом может быть всё, что угодно, начиная с телетайпа (tty=tELEtyPE), или любая программа, эмулирующая терминал. KOI8-R, кодировка, используемая в Юникс, создана именно с учетом многообразия терминалов, и позволяет читать русский текст на любом терминале, передавая при необходимости русский текст методом транслитерации. На типичном компьютере IBM PC с обычной клавиатурой вы можете переключаться между виртуальными консолями с помощью комбинации клавиш Alt-F1...Alt-F12. В каждой из этих консолей, при настроеной программе getty, вы можете войти в систему и получить shell. Команды, позволяющие посмотреть персональную информацию и пообщаться с другими пользователями, следующие:
Последние 2 программы работают только если пользователь не заблокировал вывод на свой терминал. Запретить или разрешить вывод на экран можно командой mesg. Если вы получили сообщение наподобие "write: user_name has messages disabled", всегда можно отправить письмо и договориться о сеансе разговора. Программы w, who, write работают только в пределах одного хоста (Юникс системы). Программы finger, mail, talk могут обращаться к любому хосту в интернет, но только если в этой системе настроены соответствующие сервисы. Кроме средств общения и совместной работы пользователей, многопользовательская система предусматривает и защиту юзеров и их информации друг от друга. Защита пользователей и всей системы осуществляется с помощью объединения пользователей в группы и предоставления определенных прав этим группам или отдельным пользователям. Каждый файл и каждый каталог в системе принадлежит одному пользователю и одной группе. Если пользователь, обращающийся к данному объекту, не является владельцем и не входит в группу-владельца объекта, то права доступа определяются как "все остальные". Для каждой из этих трех групп - сам пользователь, группа-владелец и все остальные, в свою очередь, определены 3 типа доступа. Объект (файл, каталог, устройство) может быть доступен для чтения, для записи и/или для исполнения. Посмотрите, как выглядят права доступа и владельцы файлов (каталогов) на примере /home/ : ... $ ls -l /home -rw-r--r-- 1 root root 0 Мар 23 12:43 README drwxr-xr-x 3 root root 4096 Окт 9 21:15 ftp drwxr-xr-x 36 ophil staff 4096 Мар 23 09:50 ophil drwxr-sr-x 9 proba users 4096 Мар 21 13:36 proba lrwxrwxrwx 1 root root 11 Окт 9 21:14 www -> ftp/pub/doc Для изменения прав доступа к своим файлам и каталогам используются следующие программы:
В Юниксе есть особый пользователь, root, или пользователь с id=0, для которого не действуют никакие вышеупомянутые ограничения. Если вы постоянно работаете под root'ом, ваша система постепенно превратится в однопользовательскую персональную. Вы не будете чувствовать ограничений, мешающим работе обычных юзеров. С другой стороны, если к какому-то файлу доступ предоставлен по ошибке и нарушает защищенность системы, вы этого тоже не заметите. Первая заповедь сисадмина -- не работай из-под root'а. Если файл является исполняемым, т.е. установлен бит исполнения, x в правах доступа, и у вас есть право его выполнить, то вы можете использовать этот файл как имя программы. Все команды, задаваемые в командной строке или вызываемые из других программ, являются такими исполняемыми файлами либо непосредственно встроены в shell. Запущенный таким образом на выполнение файл образует в памяти компьютера исполняемый процесс. Этот процесс наследует от запустившего его пользователя права и среду выполнения (environment). Кроме работы в нескольких консолях, можно также в каждой из них запускать несколько задач (процессов). Для запуска задач и управления ими используются следующие команды:
Подробнее о возможностях этих и других программ можно узнать из интерактивной помощи, доступной при работе в системе Юникс. В первую очередь обратитесь к команде apropos с каким либо словом, относящимся к вашей проблеме, например: ... $ apropos unix Эта команда выдаёт список всех разделов руководства, содержащих в заголовке указанное слово. Чтобы получить краткое описание всех имеющихся программ и руководств, попробуйте вот это: ... $ apropos .|less Первым словом в выводе apropos является название страницы руководства (manual), подробно описывающим команду и все ее параметры. Т.н. страница руководства может быть размером с хорошую книжку, но название раздел принадлежит цифре в скобках, следующей за именем страницы. Чтобы посмотреть список и назначение разделов руководства, воспользуйтесь командой ... $ man man Еще одним обширным источником документации по установленным программам является команда info. Эта программа предоставляет некоторые возможности гипертекста: см. info info. Просто help выдаёт краткую справку по shell. Help имя_команды даст пояснение по встроеным в shell командам и управляющим конструкциям. Полезные сведения можно отыскать в документах серии HOWTO. В бесчисленных мегабайтах документации, доступной он-лайн или в Сети, легко заблудиться. Для самого общего представления знайте, что всю документацию можно условно разбить на 3 уровня подробности и надежности. Первый уровень предлагают статьи в стиле HOWTO и отдельные главы из технических книг. Они описывают конкретную программу или проблему и предлагают рецепты для ее решения. В качестве первого шага для ознакомления с какой-то темой такие документы могут быть весьма полезны, часть из них переведена на русский язык. С другой стороны, книги и популярные статьи неизбежно носят общий характер и отстают по времени от самых последних версий. Второй уровень представляет собой техническая документация, содержащаяся в страницах руководства, info-учебниках, в разных документах, включенных в состав пакета и находящихся обычно в каталоге /usr/doc/имя_пакета За качеством этих документов следят авторы и сопроводители пакета, как правило, в них точно описаны все возможности программ. Наконец, для доступных в исходных кодах программ, безусловно полную и актуальную информацию можно извлечь из исходников программ, комментариев, сопутствующих документов и примеров. Наличие исходного кода дает возможность не только изучать программу, но при желании развивать ее дальше. Не бойтесь экспериментировать и учитесь задавать вопросы компьютеру. Только сама система знает ответы на все связанные с ней вопросы. Для пытливого пользователя самым лучшим, живым учебником является его компьютер . 2. Компьютер в сетиИзвестное утверждение "сеть -- это компьютер" как нельзя лучше подходит к системе Юникс. Если для персональной системы разграничение прав пользователей, существующее в многопользовательских ОС, может показаться излишним, то при подключении компьютера к сети подобная защита оказывается жизненно необходимой. Сетевая технология с коммутацией пакетов под общим названием TCP/IP реализована во многих современных операционных системах и является основой глобальной сети Internet. Исторически и идейно эта технология возникла и развивалась именно в системах Юникс. Первые версии Юникс распространялись в исходниках, систему развивали и дорабатывали сотни исследователей. Точно также создавались и развивались сервисы будущей глобальной Сети. Если ваш компьютер совершенно отрезан от сети -- нет ни модема, ни сетевой карты, то и тогда есть специальный интерфейс lo (local loopback), позволяющий работать всем сетевым программам. Чтобы действительно соединить компьютеры между собой и пересылать между ними информацию, необходимо физически связать компьютеры с помощью модема или сетевой карты, а также включить поддержку устройства связи в ядро. Для подключения сетевого интерфейса используется программа ifconfig. При запуске без параметров эта команда покажет текущее состояние сетевых устройств: Реальному интерфейсу будет соответствовать устройство ppp0 или sl0 для модема, eth0, eth1 и т.д. для сетевых карт.lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 UP LOOPBACK RUNNING MTU:3856 Metric:1 RX packets:578 errors:0 dropped:0 overruns:0 frame:0 TX packets:578 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 Базовым понятием технологии TCP/IP является IP-адресация. Каждый IP-пакет, путешествующий в и-нете, обязательно имеет в заголовке адрес отправителя и адрес получателя. IP-адрес представляет собой 32-разрядное двоичное число, обычно обозначаемое четырьмя десятичными числами от 1 до 255, разделенными точками, в примере выше -- 127.0.0.1 IP-адреса являются весьма ограниченным ресурсом и не могут назначаться произвольно. Для правильной маршрутизации пакетов диапазоны IP-адресов разбиваются на сети и подсети с помощью маски -- также 32-разрядного числа, содержащего в левой части двоичные единички, а в правой части некоторое количество двоичных нулей. Свое название -- маска сети - это число получило потому, что при наложении на IP-адрес единички покажут номер сети, а остальная часть адреса будет номером хоста (компьютера) в этой сети. Прохождение пакета по лабиринту хостов к месту назначения определяется таблицей маршрутов, ведущейся на каждом хосте. Эта таблица может быть простейшей, состоящей из одного единственного адреса, задающего маршрут по умолчанию. На узловых хостах глобальной сети, соединяющих между собой много сетей, эта таблица может быть очень большой, динамически изменяющейся с помощью специальных протоколов маршрутизации. Посмотреть и изменить таблицу маршрутов можно с помощью команды route. А изучать маршрут между двумя хостами или топологию сети удобно при помощи утилит tracepath или traceroute. Для локальных сетей выделены 4 специальных диапазона адресов, которые можно свободно назначать хостам внутри своей сети, но пакеты от них не должны выходить за пределы локальной сети. Пакеты с такими локальными адресами правильно настроеный маршрутизатор должен сразу уничтожать. Двоичные и десятичные IP-адреса удобны для компьютеров, но человеку привычнее слова и имена. Для преобразования адресов в имена и наоборот существует сервис DNS. В простейшем случае можно вести список хостов в таблице /etc/hosts. Но уже для небольшой сети необходимо настроить настоящий DNS-сервер. Одной из старейших и самых распространенных программ для этого сервиса является bind. Порядок поиска по разным доменам (сетям) и адрес DNS-сервера задается в файле /etc/resolv.conf Имена доменов, в связи со стремительным ростом популярности Интернет, стали выгодным товаром. Часто имя домена регистрируют впрок, на всякий случай, или чтобы выгодно перепродать. Процедуру регистрации домена можно пройти на специальных уполномоченных на это серверах, а посмотреть принадлежность домена можно с помощью программы whois. IP-адресация и еще несколько протоколов нижнего уровня являются базой для следующего уровня -- TCP (Transmission Control Protocol). Вместе они образуют т.н. стек протоколов TCP/IP. На этом уровне появляется новое понятие -- порт TCP. В файле /etc/services номерам портов приписываются названия сервисов, обслуживающих эти порты. И сами номера, и названия сервисов, и их назначение и применение регламентированы особыми документами -- RFC (Request For Comments). Работа этих сервисов, точнее, реализующих их программ, как раз и создает то богатство возможностей, сделавших Интернет такой модной темой для далеких от компьютеров людей. Но нас интересует именно техническая сторона, так что первым делом мы познакомимся с программой nmap. Эта программа, наряду с прочим, позволяет просканировать порты хоста и обнаружить работающие сервисы. Обнаружив открытый (ожидающий запросы) порт, можно попытаться открыть сессию (соединение) через этот порт. Самым простым инструментом для работы с портом является программа telnet. Она позволяет работать в shell, если он у вас есть, либо вести диалог с работающим сервисом. Для защиты передаваемой информации можно использовать программу ssh, обеспечивающую шифрование данных. Конечно, для работы с тем или иным сервисом удобнее использовать специально созданные для этого клиенты. Например, для передачи файлов по протоколу FTP, существуют несколько клиентов: ftp, lftp, ncftp. Упомянутая в первой части программа mail отравки и чтения почты пример использования почтового сервиса -- SMTP. Клиентские программы для работы с почтой составляют класс программ MUA (Mail User Agent): mutt, pine. К ним же можно отнести и особую программу procmail, предоставляющую возможность запрограммировать обработку приходящей почты. Еще один сервис и соответствующий класс клиентов предоставляют возможность отправлять сообщения не персонально получателям, а публиковать их для всех желающих в т.н. группах новостей, или news'ах, а соответствующий протокол называется NNTP. Этот сервис подразумевает включение хоста во всемирную сеть подобных серверов и рассылку между ними каждого нового сообщения. Типичными клиентами для чтения news'ов являются nn, slrn, emacs с соответствующими надстройками. Важным моментом при обмене сообщениями является защита содержимого ваших писем и подтверждение подлинности отправителя. Эту сложную задачу позволяет решить система несимметричного шифрования с открытым ключом. Первой программой этого класса стала скандально известная программа PGP, опубликованная в Интернет Филиппом Циммерманом. Сейчас становится новым открытым стандартом OpenPGP (RFC2440) и реализующий незапатентованные его части проект GnuPG (GNU Privacy Guard). При настройке клиентских программ почты и новостей для совместной работы с gpg можно создать надежно защищенную систему коммуникаций, доступную ранее только при использовании закрытых хорошо охраняемых каналов . 3. Файловая система,стандарты,дистрибутивыВ системе Юникс есть еще одно весьма важное отличие от персональных систем. Структура каталогов в файловой системе довольно строго регламентирована, большинство файлов общего пользования обычно имеют вполне определенное место в дереве каталогов. Это дерево растет корнем кверху и имеет приблизительно такую структуру:
Это только основные каталоги. Обычно каталоги lib, include, а также подражающая им иерархия X11R6, разбиваются на дополнительные каталоги, отражающие названия программ или сервисов. Приблизительно так выглядит смонтированная файловая система. Чтобы ее создать, необходимо вспомнить опыт разбиения диска на разделы, а также узнать новое понятие монтирования устройств. Программа fdisk по своему назначению и возможностям похожа на одноименные программы из других ОС. Более того, fdisk от Линукс, например, понимает разбиение диска на разделы, сделанные в других ОС. Если ваш диск уже разбит на разделы, следующая задача создать на нём файловую систему. В этом месте уже возникают отличия между разными вариантами Юникс, мы будем рассматривать далее версию Linux 2.4. Последняя версия этой ОС поддерживает почти все известные файловые системы, а на нескольких самых новых (reiserfs, ext3, jfs, xfs) имеется возможность журналирования всех записей на диск. Для начала, однако, потренируемся на традиционной старомодной ext2. В простейшем случае, чтобы создать файловую систему на вновь созданном разделе, например на /dev/hda3, нужно выполнить команду: ... # mke2fs /dev/hda3 Более точные настройки можно сделать с помощью многочисленных параметров, передаваемых программе, либо впоследствии с помощью программы tune2fs. Эта программа принимает почти все параметры, имеющиеся в mke2fs, и позволяет настраивать ext2 без разрушения имеющихся данных. Для доступа к дисковому устройству и имеющемся на нём файловой системе ее необходимо примонтировать к существующей ФС, как правило, в специально предназначенный для этого каталог /mnt. Чтобы смонтировать устройство, ядро должно включать драйвер этого устройства, в самом ядре или в виде загружаемого модуля. Также должна поддерживаться файловая система, установленная на этом устройстве. Если это выполнено, процесс монтирования сводится к выполнению команды ... # mount [-t тип_фс] [-o опции] /dev/устройство точка_монтирования Автоматизировать процесс монтирования дополнительных устройств можно несколькими способами. Первый способ -- включить устройств в файл /etc/fstab. Этот файл, как минимум, должен содержать строки для псевдо-фс proc, устройство откачки (свопа) памяти, и устройство с корневой файловой системой. proc /proc proc defaults /dev/hda2 none swap sw /dev/hda3 / ext2 defaults,nocheck 0 1 /dev/hda4 /mnt/hda4 ext2 defaults,nocheck,auto 0 1 /dev/hda1 /mnt/vfat vfat defaults,noauto,user,codepage=866 ,iocharset=koi8-r 0 0 /dev/cdrom /mnt/cdrom iso9660 defaults,noauto,user 0 0 Второй способ -- включить в ядро или использовать дополнительные пользовательские программы для автоматического монтирования устройства при обращении к нему. Для работы с дискетами, отформатированных в их родной файловой системе fat, включая и более современную vfat, хорошо подходит набор программ под названием mtools. В этот набор входят многие знакомые нам со времен ДОС команды: copy, del, dir, format, label, deltree, type и другие. Не забывайте только подставлять перед каждой из этих команд букву m. С помощью mtools можно, как в ДОС, обращаться к дискетам под именем буквы и двоеточия: ... $ mdir a: ... $ mcopy b: . ... $ mformat a: Быстро отыскать нужный файл в системе помогает специальная программа locate, ведущую базу данных всех доступных файлов в системе и регулярно обновляющую этот список файлов. Для первоначального знакомства с изобилием файлов в новой системе, а также для простых операций с файлами, можно воспользоваться программой mc (Midnight Commander), программой в стиле старого знакомого по ДОС -- Norton Commander'а. Два особых каталога в корневой файловой системе: /dev/ и /proc/. Их особенность в том, что они содержат не обычные каталоги, а псевдо-файлы, обеспечивающие интерфейс к устройствам и структурам данных в ядре, интерфейс, напоминающий работу с обычными файлами. Например: ... $ dd < /boot/vmlinuz-2.4.5 > /dev/fd0 копирует поблочно, в обход файловой системы, файл на дискету. Так, кстати, создается загружаемая дискета Линукс. ... $ cat /proc/meminfo Эта команда покажет всю информацию о памяти, используемой ядром памяти в данный момент. Используя этот простой способ -- структура данных ядра как псевдо-файл, можно также изменять настройки ядра в процессе работы. Например, для включения форварда на компьютере-шлюзе нужно сделать: ... # echo "1" > /proc/sys/net/ipv4/ip_forward Мы уже упоминали некоторые атрибуты файлов и способы их просмотра с помощью программ ls или stat. Одной из характеристик файла является количество ссылок к содержимому файла, т.е. к множеству хранимых на диске блоков, к которому мы обращаемся под именем этого файла. У обычного (regular) файла может быть несколько совершенно равноправных имен, адресующих одно и то же множество блоков. Эти имена называются жесткими (hard) ссылками, а дополнительные имена создаются с помощью команды ln. Эта же команда позволяет создавать другой тип ссылок - символические (symbolic) ссылки. Символические ссылки обладают большей гибкостью, могут указывать на любой тип файла, на любом устройстве, в любой файловой системе. Раз уж мы упомянули о разных типах файлов, то нужно сказать и о программке под именем file, знающей обо всех известных типах файлов и умеющей также определять тип его содержимого. Семейство операционных систем под зарегестрированным торговым знаком Unix(TM), объединяет гораздо больше, чем следование правилам при размещении системных файлов и утилит. Вскоре после отпочкования коммерческих версий Юникс от первоначального варианта фирмы ATT, стали делаться попытки обеспечить переносимость программ их одной ОС в другие. Наиболее важным стандартом, соблюдаемым всеми вариантами Юникс и другими ОС, стал набор стандартов POSIX. В последние годы, используя новые возможности, предоставляемые глобальной сетью, огромную популярность получили свободно распространяемые варианты Юникс, в первую очередь Linux и FreeBSD. Эти ОС представляют собой полностью переписаные наново, доступные вместе со своим исходным кодом системы. Кроме разных реализаций системных вызовов (API), эти системы отличаются также лицензией, по которой происходит распространение и развитие этих ОС. Для FreeBSD это лицензия BSD, налагающая очень мало обязательств на пользователя и разработчика. Линукс же является частью грандиозного проекта ГНЮ (ГНЮ Не Юникс), поставившего своей целью создание всех необходимых программ и юридической гарантии, что эти программы останутся открытыми и доступными навсегда. Проект ГНЮ и метод открытой разработки привлек удивительно много программистов и исследователей, так что свободные программы оказывают заметное влияние на сложившийся рынок коммерческого ПО. Доступные в исходных кодах программы можно настроить для работы в очень многих системах. В Юникс стандартизованы не только внутренние системные вызовы, но и многие инструментальные средства, компиляторы, языки программирования, доступные в том числе и в персональных системах. Но всё же большим шагом в облегчении работы с системой стало появление дистрибутивов. Дистрибутив использует понятие пакета, специально подготовленного набора файлов и скриптов для его установки и настройки. Широко известен формат пакетов rpm, используемый в дистрибутиве Линукс от Red Hat, Mandrake, русскоязычном AltLinux и многих других. Еще один формат пакета и соответствующую программу-установщик создали в проекте Дебьян. Среди многочисленных дистрибутивов также стали возникать отличия при размещении файлов в иерархии каталогов. Выработкой стандарта в этой области занимается Free Standards Group. Уже выработаны рекомендации FHS (Filesystem Hierarchy Standard), а конечной целью является создание исчерпывающего набора спецификаций LSB (Linux Standard Base). Познакомимся немного подробнее с дистрибутивом Дебьян. Он предоставляет ряд уникальных возможностей, выделяющий его из огромного числа доступных. Дебьян является официальным дистрибутивом фонда FSF и проводит политику на популяризацию свободного ПО. Развитие дистрибутива Дебьян происходит распределенно, через и-нет, в нём участвуют свыше 700 разработчиков со всего мира. С 1993 года этот дистрибутив вырос до 7000+ пакетов, создана разветвленная сеть ftp-архивов и уникальная система дебианизации и сопровождения программ. Дебьян по праву считается одним из самых надёжных и отлаженных, а появившаяся недавно тестовая версия, промежуточная между стабильной и экспериментальной, дает возможность иметь самые свежие версии программ без риска нарушить стабильность системы. Для работы с пакетами программ используется программа dpkg и специально созданный формат пакета .deb. Установщик dpkg отслеживает зависимости пакетов друг от друга, выполняет все предписанные процедуры при установке и удалении программ. Над dpkg существуют несколько программ, облегчающих выбор и установку множества пакетов. Это в первую очередь dselect и apt. Можно также использовать пакеты с префиксом task-, являющимися псевдо-пакетами, содержащими список необходимых пакетов для выполнения компьютером определенного вида работ. Например, чтобы превратить вашу систему, наряду с прочим, в инструмент программиста-разработчика, нужно выполнить нечто наподобие: ... # apt-get install task-с-dev task-debian-devel Если вы установили набор программ для разработчика, включая компилятор, заголовки различных библиотек, необходимые инструменты и скрипты, то вы сможете по достоинству оценить имеющиеся средства разработки. Исходные коды, составляющие дистрибутив, хранятся в виде 3 файлов - оригинальный архивный файл от авторов программы, файл изменений, сделанный сопроводителем при встраивании этой программы в Дебьян, а третий маленький файлик с расширением .dsc -- служебная информация, контрольные суммы вышеназванных файлов и подпись сопроводителя. Для программ, созданных специально для Дебьян, файла изменений нет. Исходники распаковываются, проверяется целостность пакета и налагаются необходимые правки (патчи) с помощью одной команды: ... $ dpkg-source -x название-пакета_версия.dsc Можно теперь смотреть и править исходники пакета. Основным, т.н. make-файлом для сборки пакета, является файл debian/rules . Чтобы собрать пакет из исходников, достаточно одной команды, например: ... $ debuild -b -uc 2>&1|tee build-log ... $ fakeroot debian/rules clean Вторая команда необязательна -- она очищает каталоги от временных и производных файлов. Мы познакомились со средствами разработчика уже на начальном этапе знакомства с системой по нескольким причинам. Во-первых, наличие исходников является уникальной особенностью изучаемого нами предмета, а также гарантией отсутствия замаскированных дыр в программе. Во-вторых, как мы увидели, сборка пакетов из исходников выполняется простыми командами, а исполняемые файлы и сам пакет создаются на мощном компьютере легко и быстро. Наконец, само получение и сопровождение отдельных пакетов становится проще, если настроить средства разработки и работать с исходниками . 4. Возможности shellКомандный процессор shell незримо сопровождает нас с первой секунды, как только мы прошли процедуру регистрации в системе. Shell обладает возможностями настоящего языка программирования, а также является гибко настраиваемой удобной оболочкой для интерактивной работы, для связывания воедино многочисленных программ и утилит. Рассмотрим вначале, как можно настроить свой shell по собственному вкусу. По умолчанию вашим shell, скорее всего, будет командный процессор bash. При инициализации bash вызываются и последовательно выполняются несколько файлов:
Чтобы не запутаться, помещайте все свои настройки в последний файл, а затем вызывайте его из ~/.bash_profile . При необходимости, просто добавьте или переопределите команды, выполняемые исключительно при входе в систему. При выходе из login-shell исполняется файл ~/.bash_logout . Большую часть команд в типичном стартовом скрипте (profile) занимает определение переменных окружения, т.н. environment . Эти переменные затем передаются в каждый вызываемый процесс и сопровождают пользователя до его выхода из системы. Использовать эти переменные очень просто: ... $ HELLO="привет всем от $USER'а";export HELLO ... $ echo $HELLO|mail proba -s "$HELLO" Список переменных, однако, может быть большим, имена многих из них стандартизованы. Список всех переменных shell можно посмотреть с помощью команды set без параметров. Команда env, или printenv, выдаст список поменьше, доступных только в вызываемых процессах. Воспользуемся глобальными переменными, чтобы настроить т.н. locale, определяющие язык и другие локальные для страны обозначения: время, дата, денежная единица, форматный вывод чисел. Например, в общесистемном файле /etc/profile могут быть определены такие переменные: LANG=ru_RU.KOI8-R LANGUAGE=ru_RU.KOI8-R LC_ALL=ru_RU.KOI8-R export LANG LANGUAGE LC_ALL Допустим, вы захотели показывать даты и десятичные числа в международном стандарте POSIX. Поэтому для собственного окружения, например в файле ~/.bashrc , переопределим глобальную переменную LC_ALL и зададим новые: LC_ALL="" LC_NUMERIC=POSIX LC_TIME=POSIX export LC_NUMERIC LC_TIME Все переменные, задающие локальную для страны информацию, имеют префикс LC_. Для просмотра текущих или всех доступных настроек используется команда locale. Вся связанная с locale информация хранится в каталоге /usr/share/locale/. Для комфортной работы из командной строки обязательно нужно знать о следующих возможностях shell: история командш (history), завершение ввода имени команды или файла, создание псевдонимов (alias). Перемещение по списку выполненных команд выполняется стрелками вверх/вниз, а завершение ввода (completion) клавишей Tab. Если вы обнаружили, что часто набираете какую-то команду, можно создать для этой команды короткий alias, например: ... $ alias ll='/bin/ls -lF --color' Можно также вставить определение alias'ов в файл ~/.bashrc Посмотреть список встроенных в bash команд и версию вашего shell можно просто набрав help. Таких команд довольно много, включая и конструкции для написания сложных программ. Все они детально описаны в имеющейся странице руководства man, общим размером около 90 обычных страниц. Кратко прокомментирую главы из man bash.
Как мы видим, руководство по bash предоставляет исчерпывающую информацию по всем командам. Первым шагом к освоению shell должно стать умение читать программы на этом языке, коих в системе довольно много. Для полноценного использования необходимо также знакомство с обязательными в каждой Юникс системе наборами программ под названием textutils и findutils, а также с утилитами: сканером grep, потоковым редактором sed, языком запросов awk и некоторыми другими жемчужинами из классического наследия. Для этих многочисленных инструментов shell выполняет роль связующего звена, соединяющего воедино отдельные программы . 5. Основы администрированияИтак, вы уже знаете о разграничении прав в многопользовательской системе Юникс, о соединении компьютеров в сеть и семействе протоколов TCP/IP, об основном инструменте пользователя -- командном процессоре, о многочисленных программах и утилитах. Следующая наша тема -- администрирование пользователей и сервисов, установка и сопровождение новых программ. Для задач администратора придется время от времени пользоваться правами суперпользователя под uid=0, или root'а. Чтобы получить эти права, нужно, прежде всего, знать пароль. В некоторых организациях применяют следующую практику в отношении рутового пароля. Минимум персонала, только люди, отвечающие за работу сервера, создают и запоминают сложный непредсказуемый пароль. Кроме этого, пароль запечатывают в конверт и закрывают в сейфе у самого большого босса, как поступили бы с ключом от всей компьютерной сети. Программа su позволяет, зная пароль, войти в систему под любым пользователем, в том числе и под root'ом. Более удобна, однако, программа sudo. Эту программу можно настроить так, чтобы отдельные пользователи могли запускать определенные административные приложения. При этом им не нужно знать пароль рута, а все их действия записываются в системных журналах. Например, можно разрешить пользователю operator создавать, удалять и изменять информацию пользователей в системе. Это значит указать в файле /etc/sudoers для юзера operator разрешение на выполнение следующих программ: useradd, userdel, usermod. Более точно синтаксис этого файла и примеры использования приведены на странице руководства man sudoers. Доступ к файлам и устройствам регулируется назначением этим объектам группы-владельца и объединения пользователей в группы. Список групп пользователей ведется в файле /etc/group, а в файле /etc/passwd указывается gid -- номер основной группы данного пользователя, или группы по умолчанию. К сожалению, мы живем в далеком от идеала мире, и в нашу простую и стройную систему разграничения прав пользователей придется ввести некоторые сложности, добавленные в систему Юникс позднее, как способ борьбы с преступными наклонностями некоторых пользователей. Когда-то давно зашифрованые пароли пользователей хранили в том же файле /etc/passwd и разрешали смотреть этот файл всем желающим. Затем, однако, пришлось создать дополнительную систему защиты, т.н. "shadow suit", чтобы стало сложнее украсть файл паролей. Кроме этого, в файле /etc/shadow хранится дополнительная информация, например, о сроке действия пароля. Еще одна обязательная сегодня мера защиты системы -- установка лимитов на ресурсы системы. В первую очередь это лимит на дисковое пространство, которое может занять пользователь. Для этого используется набор программ под общим именем quota. Кроме этого, необходима поддержка квот в ядре Линукс. Попробуем собрать ядро Линукс с поддержкой упомянутой квоты, и, возможно, других особенностей вашего конкретного компьютера. Прежде всего, раздобудем свежую стабильную версию ядра. Хотя ядро, входящее в состав дистрибутива, может быть вполне работоспособным, нужно обязательно уметь собирать ядро самостоятельно. Только в этом случае вы по-настоящему используете и возможности вашего компьютера, и уникальную систему разработки и отладки Линукс, созданную всемирным сетевым сообществом. Основным архивом проекта Linux является сайт ftp://ftp.kernel.org или http://www.kernel.org. Можно воспользоваться и обширной сетью зеркал этих серверов. Затем нужно разархивировать полученый файл linux-2.4.0.tar.bz2, и, при необходимости, наложить патчи. Патч (patch) представляет собой один файл, содержащий необходимые изменения, чтобы получить из одной версии программы другую. Для наложения патчей используется одноименная программа patch. Процедура компиляции ядра подробно рассказана в документации, содержащейся в исходниках. Вкратце, последовательность действий такова: ... # cd /usr/src/linux ... # make menuconfig ... # make dep ... # make bzImage ... # make modules ... # make modules_install Таким образом мы создали исполняемый образ ядра, включающий код для распаковки сжатого ядра и загрузки его в память компьютера, а также подготовили необходмые подгружаемые модули. Теперь нужно попробовать загрузить новое ядро с дискеты, и если всё в порядке, прописать новую версию ядра в системный загрузчик, например, в lilo (liNUX loADER). ... # dd </usr/src/linux/arch/i386/bzImage >/dev/fd0 ... # cp /usr/src/linux/arch/i386/bzImage /boot/vmlinuz-2.4.3 ... # cd /etc;cat >> lilo.conf image=/boot/vmlinuz-2.4.3 label=new root=/dev/hda3 read-only ^D ... # lilo Процесс загрузки Юникс и многочисленных сервисов значительно сложнее, чем это происходит в персональной системе. Процессом загрузки управляет особая программа init, имеющая в системе всегда pid=1. В процессе загрузки init переключается между несколькими уровня исполнения, выполняя на каждом уровне набор сценариев. Сами сценарии для запуска и останова каждого из сервисов хранятся обычно в каталоге /etc/init.d. Во многих современных версиях Юникс используются идеи, первоначально реализованные в системе Unix System V. Файл конфигурации /etc/inittab содержит описание уровней исполнения и вызов необходимых скриптов. Затем, при переходе с уровня на уровень, особый скрипт /etc/init.d/rc, определяет список и очередность запускаемых скриптов из каталога /etc/init.d/. Более старая версия /etc/init.d/rc использует для этого специальные каталоги /etc/rc.d/rc{0,1,2,3,4,5,6}.d/, содержащие символические линки на сами скрипты, с префиксом типа SNNимя_скрипта для старта, или префиксом типа KNNимя_скрипта для останова сервиса. Двузначное число NN задает очередность запуска сервисов. Немного усложнив скрипт /etc/init.d/rc, можно избавиться от необходимости следить за десятками линков в семи каталогах. Это сделано в пакете file-rc, входящем в дистрибутив Debian. Ту же задачу, которую ранее выполняли многочисленные ссылки в нескольких каталогах, теперь выполняет единственный файл /etc/runlevel.conf Одним из важных сервисов, обязательных в каждой Юникс-системе, является запускаемый в числе первых демон (daemon) syslogd. Демоном называется программа, которая сразу после запуска отключает себя от управляющего терминала и работает далее как фоновый процесс. В частности, демон syslogd следит за ведением системных журналов. Этот сервис предоставляет другим демонам возможность пользоваться стандартными функциями для записи сообщений от различных системных программ. Как обычно, настройки этого сервиса содержатся в файле /etc/syslog.conf, а сами журналы ведутся в каталоге /var/log/. Теперь, представляя в общих чертах свою цель -- базовую Линукс-систему, плюс обязательные, плюс дополнительные сервисы по мере необходимости - можно приступать к установке и настройке сервера с нуля, из дистрибутива. Для любого дистрибутива сначала нужно загрузить сам Линукс, хотя бы в самой минимальной конфигурации. Это можно сделать либо с CD-ROM'а, либо с дискеты. Существует также программа loadlin, позволяющая загрузить ядро Линукс из многих версий ДОС. Кроме самого ядра, обычно создается ramdisk -- образ файловой системы в оперативной памяти. Далее процедура установки выполняется под управлением специальной программы. Некоторые программы предельно упрощают этот процесс, требуют минимального вмешательства оператора. Мы, однако, пройдем процесс инсталяции системы на примере дистрибутива Дебьян. Программа установки Дебьян не использует графику на ранних этапах, менее требовательна к ресурсам, и позволяет провести инсталяцию базовой системы только с дискет. |