ВВЕДЕНИЕ В
OC LINUX
Linux, возможно, является наиболее
значительным достижением в области свободно распространяемых программ со времен
Space War, или более позднего Emacs. Он превратился в операционную систему для
бизнеса, образования и индивидуального программирования. Linux перестал быть
системой для фанатиков-программистов, которые часами сидят перед мерцающими
экранами.
Linux принадлежит семейству
UNIX-подобных операционных систем, которая может работать на компьютерах Intel
80386 и 80486. Он поддерживает широкий спектр программных пакетов от TeX до X
Windows, компиляторов GNU C/C++, протоколов TCP/IP. Это гибкая реализация ОС
UNIX, свободно распространяемая под генеральной лицензией GNU.
Linux может любой 386 или 486
персональный компьютер превратить в рабочую станцию. Он преподнесет всю мощь
UNIX к кончикам ваших пальцев. Бизнесмены инсталлируют Linux в сетях машин,
используют операционную систему для обработки данных в сфере финансов, медицины,
распределенной обработки, в телекоммуникациях и т.д.
Университеты по всему миру
применяют Linux в учебных курсах по программированию и проектированию
операционных систем. Разумеется, повсеместно программисты-энтузиасты используют
Linux дома для программирования, решения своих прикладных задач и всевозможного
хакерства.
Что делает Linux столь отличным от
других ОС - это его создание версии UNIX "на общественных началах"(free
implementation). Он был создан и продолжает совершенствоваться и развиваться
группой добровольцев, первоначально в кругу пользователей сети Internet, которые
обменивались кодами, информацией об обнаруженных ошибках, выявлением проблем,
возникавших при расширении сферы применения. Все желающие приглашаются
подключиться к этой работе.
Краткая
история Linux
UNIX - одна из самых популярных в
мире операционных систем благодаря тому, что ее сопровождает и распространяет
большое число компаний. Первоначально она была создана как многозадачная система
для миникомпьютеров и мэйнфреймов в середине 70-ых годов, но с тех пор она
выросла в одну из наиболее распространенных операционных систем, несмотря
отсутствие централизованной стандартизации.
В чем реальная причина
популярности UNIX? Многие хакеры нутром чувствуют, что UNIX - это "настоящая
вещь", Единственная Настоящая Операционная Система. Отсюда и появление Linux,
как системы, разрабатываемой все более расширяющейся группой энтузиастов UNIX,
которые хотят собственноручно в ней поковыряться.
Существуют версии UNIX для многих
систем, начиная от персонального компьютера, до суперкомпьютеров, таких как
CrayY-MP. Большинство версий UNIX для персональных компьютеров достаточно дороги
и сложны.
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 newsgroupcomp.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.
Сегодня Linux - это полноценная ОС
семейства UNIX, способная работать с X Windows, TCP/IP, Emacs, UUCP, mail и
USENET. Практически все важнейшие программные пакеты были поставлены и на Linux,
т.е. для Linux теперь доступны и коммерческие пакеты. Все большее разнообразие
оборудования поддерживается по сравнению с первоначальным ядром.
Системные
характеристики
Linux поддерживает большинство
свойств, присущих другим реализациям UNIX, плюс ряд тех, которых больше нигде
нет. Этот раздел - поверхностный обзор характеристик ядра Linux .
Linux - это полная многозадачная
многопользовательская операционная система (точно также как и другие версии UNIX).
Это означает, что одновременно много пользователей могут работать на одной
машине, одновременно выполнять много программ.
Linux достаточно хорошо совместим
с рядом стандартов для UNIX (насколько можно говорить о стандартизации UNIX) на
уровне исходных текстов, включая IEEE POSIX.1, System V и BSD. Он создавался
имея в виду такую совместимость. Поэтому, скорее всего, вы найдете в Linux
черты, присущие многим UNIX - системам. Большинство свободно распространяемых по
сети Internet программ для UNIX может быть откомпилировано для LINUX практически
без особых изменений. Кроме того, все исходные тексты для Linux, включая ядро,
драйверы устройств, библиотеки, пользовательские программы и инструментальные
средства распространяются свободно.
Другие специфические внутренние
черты Linux включают контроль работ по стандарту POSIX (используемый оболочками,
такими как csh и bash), псевдо терминалы, поддержку национальных и стандартных
клавиатур динамически загружаемыми драйверами клавиатур.
Linux также поддерживает
виртуальные консоли (virtual consoles), которые позволяют "переключать экраны"
на консоли в текстовом режиме. Те, кто пользовался программой "screen", найдут
подобное в реализации виртуальной клавиатуры Linux.
Ядро может само эмулировать
команды 387-FPU, так что системы без сопроцессора могут выполнять программы, на
него рассчитывающие (т.е. с плавающей точкой).
Linux поддерживает различные типы
файловых систем для хранения данных. Некоторые файловые системы, такие как
файловая система ext2fs, были созданы специально для Linux. Поддерживаются также
другие типы файловых систем, такие как Minix-1 и Xenix. Реализована также
файловая система MS-DOS, позволяющая прямо обращаться к файлам MS-DOS на жестком
диске. Поддерживается также файловая система ISO 9660 CD-ROM для работы с
дисками CD-ROM.
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.
Ядро Linux сразу создано с учетом
специального защищенного режима для процессоров Intel 80386 и 80486. В
частности, Linux использует парадигму описания памяти в защищенном режиме и
другие новые свойства процессоров. Любой знакомый с защищенным режимом
процессора 80386 знает, что этот чип проектировался для многозадачных систем
вроде UNIX (или Mulics). Linux использует эти свойства.
Ядро Linux поддерживает загрузку
только нужных страниц. То есть с диска в память загружаются те сегменты
программы, которые действительно используются. Возможно использование одной
страницы, физически один раз загруженной в память, несколькими выполняемыми
программами.
Для увеличения объема доступной
памяти Linux осуществляет также разбиение диска на страницы: то есть на диске
может быть выделено до 256 Мбайт "пространства для свопинга" (swap space). (Swap
space не совсем подходящее имя, в Linux в область своппинга выгружается не весь
процесс, а только отдельные его части, в которых нет необходимости). Когда
системе нужно больше физической памяти, то она с помощью свопинга выводит
неактивные страницы на диск. Это позволяет выполнять более объемные программы и
обслуживать одновременно больше пользователей. Однако свопинг не исключает
наращивания физической памяти, поскольку он снижает быстродействие, увеличивает
время доступа.
Ядро также поддерживает
универсальный пул памяти для пользовательских программ и дискового кэша. При
этом для кэша может использоваться вся память, и наоборот, кэш уменьшается при
работе больших программ.
Выполняемые программы используют
динамически связываемые библиотеки, т.е. выполняемые программы могут совместно
использовать библиотечную программу, представленную одним физическим файлом на
диске (иначе, чем это реализовано в механизме разделяемых библиотек SunOS). Это
позволяет выполняемым файлам занимать меньше места на диске, особенно тем,
которые многократно используют библиотечные функции. Есть также статические
связываемые библиотеки для тех, кто желает пользоваться отладкой на уровне
объектных кодов или иметь"полные" выполняемые программы, которые не нуждаются в
разделяемых библиотеках. В Linux разделяемые библиотеки динамически связываются
во время выполнения, позволяя программисту заменять библиотечные модули своими
собственными.
Для обеспечения отладки ядро Linux
выдает дампы памяти для "посмертного" анализа. Использование дампа и
динамических отладчиков позволяет определить причины краха программы.
Программные
характеристики
В этом разделе мы представим вам
многие приложения, доступные в Linux, и поговорим об общих задачах вычисления. В
конечном счете - наиболее важным в системе является то, насколько широк спектр
доступных в ней программ. А тот факт, что большая часть этих программ
распространяется свободно – усиливает впечатление.
Базовые команды и утилиты
Практически любая утилита, которую
вы ожидаете найти в стандартных реализациях UNIX, имеется и в Linux. Сюда
включены и базовые команды, такие как ls, awk, tr, sed, bc, more и т.д. Назовите
любую - она есть в Linux. Поэтому вы в праве ожидать знакомой рабочей
UNIX-среды. В Linux есть все стандартные команды и утилиты.
В Linux имеются многие текстовые
редакторы, включая vi, ex,pico, jove, также как GNU Emacs и его вариации, вроде
Lucid Emacs (который содержит расширение для использования под X Windows).
Скорее всего, любой текстовый редактор, к которому вы привыкли, перенесен в
Linux.
Интересное замечание - большинство
утилит Linux имеют статус GNU. Эти утилиты часто поддерживают наиболее
современные черты, не содержащиеся в стандартных версиях BSD или AT&T. Например,
версия GNU редактора vi - elvis, содержит структурный макроязык, который
отличается от исходной реализации AT&T. Но тем не менее, утилиты GNU сохраняют
совместимость с их тезками из BSD и SystemV. Многие считают, что GNU версии
лучше исходных программ.
Многие пользователи самой важной
утилитой считают shell. shell - это программа, которая читает и выполняет
команды пользователя. Кроме того, многие оболочки (shells) имеют такие
возможности, как контроль выполнения (job control)(позволяя пользователю
управлять несколькими параллельными процессами), перенаправление входа-выхода и
командный язык для написания командных файлов(shell scripts). Командный файл -
это программа на языке оболочки, аналогичная "batch file" в MS-DOS.
В Linux много типов оболочек.
Наиболее важное различие между ними - используемый командный язык. Например, C
Shell (csh)использует командный язык, чем-то напоминающий язык программирования
Си. Классический Баурновский shell (Bourne Shell) использует иной командный
язык. Обычно выбор оболочки обусловлен выбором соответствующего командного
языка. Выбранная оболочка в какой-то мере определяет вашу рабочую среду.
Не важно, к какой оболочке вы
привыкли, та или иная ее версия есть в Linux. Наиболее популярная оболочка - это
GNUBourne Again Shell (bash), т.е. вариант Bourne shell, включающий много
современных свойств и возможностей, таких как управление работами, командную
историю, дописывание имен команд и имен файлов, Emacs-подобный интерфейс
редактирования командной строки и мощное расширение стандартной оболочки (Bourne
shell).
Почти все пользователи нуждаются в
какой-либо системе подготовки документов. В мире персональных компьютеров
обработка слов (word processing) - норма: она включает редактирование и
манипуляции с текстом (часто в стилеWYSIWYG - "What-You-See-Is-What-You-Get" - "Что-Вы-Видите-Есть-То-Что-Вы-Имеете"
- ЧВВЕТЧВИ) и получение печатных копий, содержащих рисунки, таблицы и другой
гарнир.
В Linux много текстовых
процессоров. Один из них groff – GNU версия классического форматера текстов
nroff, первоначально созданного в Bell Labs и до сих пор используемого во многих
UNIX. Другой современный текстовый процессор - TeX, создан знаменитым в
компьютерном мире Дональдом Кнутом (Donald Knuth). Доступны диалекты TeX, такие
как LaTeX .
Языки программирования и
утилиты
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-подобный командный
язык, включающий поддержку разработки простейших приложений в XWindow).
В Linux был перенесен продвинутый
отладчик gdb, позволяюший пошагово выполнять программы в поисках ошибок или
анализировать крах программ с помощью дампов памяти. gprof – утилита
профилирования, показывающая, где ваша программа при выполнении тратит больше
времени. Текстовый редактор Emacs позволяет осуществлять интерактивное
редактирование. Другие инструменты, включая GNU make и imake используются для
управления компиляцией больших программ; RCS - система для защиты и
сопровождения исходных текстов.
Linux содержит динамические
библиотеки (DLL), которые позволяют экономить место, поскольку они вызываются
только вовремя выполнения. Эти библиотеки позволяют также прикладному
программисту переопределять функции, включая свои коды. Например, если
программист желает написать свою собственную версию библиотечной программы
malloc, компоновщик подключит новую программу вместо библиотечной.
Linux идеален для создания
UNIX-приложений. Он обеспечивает современное программное окружение со всеми
дополнительными погремушками. Поддерживаются различные стандарты вроде POSIX.1,
позволяющие легко переносить программы, написанные для Linux, на другие системы.
Профессиональные UNIX-программисты и системные администраторы могут использовать
Linux для домашних компьютеров, а с них переносить написанные программы на
компьютеры своей фирмы. Это может не только сэкономить много времени и денег, но
и обеспечить комфортабельную работу на домашнем компьютере.
Через Linux вы не только имеете
доступ к полному набору библиотек и утилит, но также к исходным текстам ядра и
библиотек.
Система X Window
Система X Window (или кратко
просто Х) – стандартный графический интерфейс для UNIX-машин. Это мощная среда,
поддерживающая много приложений. Используя X Window, пользователь может
одновременно иметь на экране несколько окон, при этом каждое имеет независимый
login. Часто используется мышь, хотя она не обязательна.
Было написано много специфических
Х-приложений, таких как игры, графические утилиты, инструментарий для
программирования и документирования и т.д. С Linux и X ваш компьютер –
замечательная рабочая станция. Используя протоколы TCP/IP, вы можете смотреть у
себя X-приложения, выполняемые на других машинах.
Система X Window была
первоначально создана в MIT и свободно распространялась. Существует много и
коммерческих приложений, расширяющих возможности X Window. Для Linux есть
система XWindow, известная как 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.
Работа в сети
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 через модем.
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.
UUCP (UNIX-to-UNIX Copy) -
старейший механизм передачи файлов, электронной почты и электронных новостей
между UNIX-машинами. Классически, UUCP-машины связываются друг с другом по
телефонным линиям через модем, но UUCP может использовать в качестве
транспортного средства и связь по TCP/IP.
Телекоммуникации и BBS
Если у вас есть модем, вы можете
связываться с другимимашинами, используя телекоммуникационные пакеты, имеющиеся
в Linux. Многие используют программы телекоммуникации для связи с BBS (Bulletin
Board Systems), а также и с коммерческими он-лайновыми системами, вроде Prodigy,
CompuServe и AmericaOn-Line. Другие через модемы связываются с UNIX-системой в
школе или на работе. Вы можете использовать модем и Linux для посылки и приема
факсов. Телекоммуникационные пакеты Linux очень похожи на имеющиеся в MS-DOS или
других операционных системах.
Относительно Copyright для Linux
Общедоступная Лицензия GNU (the
GNU General Public License) или кратко GPL. GPL была разработана для проекта GNU
ассоциацией FreeSoftware Foundataion. Она устанавливает некоторые положения
относительно распространения и модификации"свободно распространяемых программ".
В данном случае "свобода" относится именно к Свободе, а не к стоимости. GPL
всегда был источником недопонимания и мы надеемся, что этот обзор поможет вам
понять цели и задачи GPL и его влияние на Linux.
Первоначально Линус Торвальдс
выпустил Linux под лицензией более ограничивающей, чем GPL, которая разрешала
свободное распространение и модификацию, но запрещала любые денежные расчеты при
передаче и использовании. С другой стороны GPL позволяет людям продавать и иметь
прибыль со свободно распространяемых программ, но не разрешает ограничивать
права других в распространении этих программ любым образом.
Прежде всего, следует объяснить,
что "свободно распространяемые программы", под лицензией GPL - это не public
domain. Программы public domain - это программы незащищенные с помощью copyright
и, фигурально выражаясь, принадлежат "почтенной публике" - обществу. Программы,
защищаемые GPL, наоборот, защищают авторские права автора или авторов. Это
значит, что программы защищены стандартными международными законами copyright, и
что автор программ официально обозначен. Так что из факта свободного
распространения программ не следует, что они - public domain.
Программы под лицензией GPL не
являются также shareware.
GPL позволяет распространять и
использовать программы бесплатно. Однако, она позволяет человеку или компании
распространять программы GPL за деньги и даже получать прибыль от продажи и
распространения. Однако, при продаже программ под GPL дистрибутор не может
лишить таких прав (свободного распространения) покупателя.
|