Unix операционная. Основные понятия Unix. Что такое Linux

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

UNIX зародился в лаборатории Bell Labs фирмы AT&T более 20 лет назад. В то время Bell Labs занималась разработкой многопользовательской системы разделения времени MULTICS (Multiplexed Information and Computing Service) совместно с MIT и General Electric, но эта система потерпела неудачу, отчасти из-за слишком амбициозных целей, не соответствовавших уровню компьютеров того времени, а отчасти и из-за того, что она разрабатывалась на языке PL/1, а компилятор PL/1 задерживался и вообще плохо работал после своего запоздалого появления. Поэтому Bell Labs вообще отказалась от участия в проекте MULTICS, что дало возможность одному из ее исследователей, Кену Томпсону, заняться поисковой работой в направлении улучшения операционной среды Bell Labs. Томпсон, а также сотрудник Bell Labs Денис Ритчи и некоторые другие разрабатывали новую файловую систему, многие черты которой вели свое происхождение от MULTICS. Для проверки новой файловой системы Томпсон написал ядро ОС и некоторые программы для компьютера GE-645, который работал под управлением мультипрограммной системы разделения времени GECOS. У Кена Томпсона была написанная им еще во времена работы над MULTICS игра "Space Travel" - "Космическое путешествие". Он запускал ее на компьютере GE-645, но она работала на нем не очень хорошо из-за невысокой эффективности разделения времени. Кроме этого, машинное время GE-645 стоило слишком дорого. В результате Томпсон и Ритчи решили перенести игру на стоящую в углу без дела машину PDP-7 фирмы DEC, имеющую 4096 18-битных слов, телетайп и хороший графический дисплей. Но у PDP-7 было неважное программное обеспечение, и, закончив перенос игры, Томпсон решил реализовать на PDP-7 ту файловую систему, над который он работал на GE-645. Из этой работы и возникла первая версия UNIX, хотя она и не имела в то время никакого названия. Но она уже включала характерную для UNIX файловую систему, основанную на индексных дескрипторах inode, имела подсистему управления процессами и памятью, а также позволяла двум пользователям работать в режиме разделения времени. Система была написана на ассемблере. Имя UNIX (Uniplex Information and Computing Services) было дано ей еще одним сотрудником Bell Labs, Брайаном Керниганом, который первоначально назвал ее UNICS, подчеркивая ее отличие от многопользовательской MULTICS. Вскоре UNICS начали называть UNIX.

Первыми пользователями UNIX"а стали сотрудники отдела патентов Bell Labs, которые нашли ее удобной средой для создания текстов.

Большое влияние на судьбу UNIX оказала перепись ее на языке высокого уровня С, разработанного Денисом Ритчи специально для этих целей. Это произошло в 1973 году, UNIX насчитывал к этому времени уже 25 инсталляций, и в Bell Labs была создана специальная группа поддержки UNIX.

Широкое распространение UNIX получил с 1974 года, после описания этой системы Томпсоном и Ритчи в компьютерном журнале CACM. UNIX получил широкое распространение в университетах, так как для них он поставлялся бесплатно вместе с исходными кодами на С. Широкое распространение эффективных C-компиляторов сделало UNIX уникальной для того времени ОС из-за возможности переноса на различные компьютеры. Университеты внесли значительный вклад в улучшение UNIX и дальнейшую его популяризацию. Еще одним шагом на пути получения признания UNIX как стандартизованной среды стала разработка Денисом Ритчи библиотеки ввода-вывода stdio. Благодаря использованию этой библиотеки для компилятора С, программы для UNIX стали легко переносимыми.

Рис. 5.1. История развития UNIX

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

На рисунке 5.1 показана упрощенная картина развития UNIX, которая учитывает преемственность различных версий и влияние на них принимаемых стандартов. Наибольшее распространение получили две весьма несовместимые линии версий UNIX: линия AT&T - UNIX System V, и линия университета Berkeley-BSD. Многие фирмы на основе этих версий разработали и поддерживают свои версии UNIX: SunOS и Solaris фирмы Sun Microsystems, UX фирмы Hewlett-Packard, XENIX фирмы Microsoft, AIX фирмы IBM, UnixWare фирмы Novell (проданный теперь компании SCO), и список этот можно еще долго продолжать.

Наибольшее влияние на унификацию версий UNIX оказали такие стандарты как SVID фирмы AT&T, POSIX, созданный под эгидой IEEE, и XPG4 консорциума X/Open. В этих стандартах сформулированы требования к интерфейсу между приложениями и ОС, что дает возможность приложениям успешно работать под управлением различных версий UNIX.

Независимо от версии, общими для UNIX чертами являются:

  • многопользовательский режим со средствами защиты данных от несанкционированного доступа,
  • реализация мультипрограммной обработки в режиме разделения времени, основанная на использовании алгоритмов вытесняющей многозадачности (preemptive multitasking),
  • использование механизмов виртуальной памяти и свопинга для повышения уровня мультипрограммирования,
  • унификация операций ввода-вывода на основе расширенного использования понятия "файл",
  • иерархическая файловая система, образующая единое дерево каталогов независимо от количества физических устройств, используемых для размещения файлов,
  • переносимость системы за счет написания ее основной части на языке C,
  • разнообразные средства взаимодействия процессов, в том числе и через сеть,
  • кэширование диска для уменьшения среднего времени доступа к файлам.

Версия UNIX System V Release 4 - это незаконченная коммерческая версия операционной системы, т.к. в ее кодах отсутствуют многие системные утилиты, необходимые для успешной эксплуатации ОС, например утилиты администрирования или менеджер графического интерфейса. Версия SVR4 является скорее стандартной реализацией кода ядра, вобравшая в себя наиболее популярные и эффективные решения из различных версий ядра UNIX, такие как виртуальная файловая система VFS, отображаемые в память файлы и т.п. Код SVR4 (частично доработанный) лег в основу многих современных коммерческих версий UNIX, таких как HP-UX, Solaris, AIX и т.д.

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

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

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

Код системы написан на языке высокого уровня СИ, что сделало ее простой для понимания, изменений и переноса на другие аппаратные платформы.

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

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

Унифицированный интерфейс файловой системы UNIX реализует доступ не только к данным, хранящимся на дисках, но и к терминалам, принтерам, магнитным лентам, компакт-дискам, сети и даже к памяти.

Для системы UNIX разработано большое число различных приложений - от простейших текстовых редакторов до мощных систем управления базами данных.

В общем виде операционная система UNIX может быть представлена двухуровневой моделью, как это изображено на рис. 8.1
.

В центре находится ядро системы (kernel) . Ядро непосредственно взаимодействует с аппаратной частью компьютера, изолируя прикладные программы от особенностей ее архитектуры. Ядро включает в себя программы, реализующие набор услуг, предоставляемых прикладным программам. К услугам ядра относятся операции ввода/вывода, создания и управления процессами, синхронизация процессов и т.д. Следующий уровень модели - системные услуги, обеспечивающие пользовательский интерфейс ОС UNIX. Схема взаимодействия с ядром и приложений, и системных задач одинакова.

Функции операционной системы UNIX

Операционная система UNIX взаимодействует с аппаратными и программными ресурсами компьютера, выполняя следующие функции :

    управление оборудованием;

    управление ресурсами;

    мониторинг системы;

Управление оборудованием

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

Управление ресурсами

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

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

Поддержка интерфейсов пользователя

Это средство обеспечения интерактивного (обеспечивающего диалог) взаимодействия пользователей с вычислительной системой.

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

Командная строка обычно удобна для пользователей, знакомых с функциями и командами системы. При работе с таким типом интерфейса пользователь на «приглашение» (по умолчанию для пользователя это знак доллара) вводит каждую команду с клавиатуры. Этот интерфейс не обеспечивает «обзора» системы, однако позволяет выполнить любую команду системы. Программы, обеспечивающие такой интерфейс, называются командными оболочками (shell). Командных оболочек существует очень много: Bourne shell (sh), Bourne Again Shell (bash), Korn shell (ksh), C shell (csh), Debian Almquist shell (dash), Zsh и т.д. Наиболее распространенной является bash.

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

Графический пользовательский интерфейс ориентирован как на новичков, так и на квалифицированных пользователей. Он обеспечивает несколько путей взаимодействия с компьютером: обзор объектов системы, изображаемых пиктограммами, выполнение команд путем выбора графического изображения (пиктограммы) на экране дисплея с помощью «мыши» или устройства tracking ball. ОС UNIX обеспечивает X.desktop как графический пользовательский интерфейс для работы со специальными X-терминалами или систему X Window для работы с обычными графическими терминалами.

Обеспечение удаленного доступа в компьютерной сети

ОС UNIX обеспечивает доступ пользователей к ресурсам других компьютеров, работающих в вычислительной сети. В составе операционной системы имеется набор сетевых приложений, позволяющих устанавливать связь с удаленным компьютером, регистрироваться в удаленной системе, передавать данные между компьютерами сети, пользоваться электронной почтой. UNIX поддерживает сетевую файловую систему NFS (Network File System), позволяющую пользоваться командами операционной системы для доступа к файловой системе удаленного компьютера.

Компоненты операционной системы UNIX

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

В составе ОС UNIX имеется несколько сотен команд, которые выполняют задачи организации и обработки данных и управляют окружением пользователя. Сами команды являются программами, которые выполняют определенные функции, требуя, как правило, минимального ввода данных, и выполняются сравнительно быстро. Большая часть из них доступна всем пользователям, однако есть команды, которые доступны только администратору системы, который является привилегированным пользователем. Некоторые команды, при исполнении которых имеется возможность интерактивного ввода информации, иногда называют утилитами . Примером утилит могут служить редактор текстов vi и команда управления электронной почтой mail .

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

Как было отмечено выше, в составе ОС UNIX обычно используется несколько оболочек.

Оболочки с ограничениями (restricted shell - rsh и ksh - подмножества Bourne shell и Korn shell) разработаны для пользователей, которым необходимо ограничить доступ к системе.

Ядро . Ядро системы представляет собой сердцевину операционной системы, которая обеспечивает базовые функции: создает процессы и управляет ими, распределяет память и обеспечивает доступ к файлам и периферийным устройствам.

Взаимодействие прикладных задач с ядром происходит посредством стандартного интерфейса системных вызовов. Интерфейс системных вызовов определяет формат запросов на базовые услуги. Процесс запрашивает базовую функцию ядра посредством системного вызова определенной процедуры ядра. Ядро выполняет запрос и возвращает процессу необходимые данные.

Ядро состоит из трех основных подсистем :

    1) подсистема управления процессами и памятью;

    2) файловая подсистема;

    3) подсистема ввода/вывода.

Выполняет следующие функции :

    создание и удаление процессов;

    распределение системных ресурсов между процессами;

    синхронизацию процессов;

    взаимодействие процессов.

Специальная функция ядра, выполняемая планировщиком процессов (scheduler ), разрешает конфликты между процессами в конкурентной борьбе за системные ресурсы.

Обеспечивает распределение памяти между процессами. Если для всех процессов недостаточно памяти, ядро перемещает части процесса или несколько процессов (чаще пассивных, ожидающих каких-либо событий в системе) в специальную область диска (область «подкачки»), освобождая ресурсы для выполняющихся (активных) процессов.

Файловая подсистема обеспечивает унифицированный интерфейс доступа к данным, расположенным на дисковых накопителях, и к периферийным устройствам. Она выполняет операции размещения и удаления файлов, выполняет операции записи/чтения данных файла, а также контролирует права доступа к файлу.

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

Доступ к системе UNIX

Чтобы установить контакт с системой UNIX, вам необходимо иметь :

    терминал;

Получение регистрационного имени

Регистрационное имя - это имя, с помощью которого система UNIX проверяет, являетесь ли вы полномочным пользователем системы, во время запроса доступа к ней.

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

Существует несколько правил выбора регистрационного имени. Обычно длина имени составляет от 3 до 8 символов. Оно может состоять из больших или маленьких букв, цифр, символа подчеркивания, но не может начинаться с цифры.

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

Связь с системой UNIX

Если ОС UNIX установлена на персональном компьютере, вы можете зарегистрироваться непосредственно на нем через текстовую виртуальную консоль. Но возможны и другие варианты доступа.

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

Для осуществления связи с системой необходимо включить терминал.

Если он напрямую связан с компьютером, то в верхнем левом углу немедленно появится подсказка :

Если в качестве терминала используется персональный компьютер, настроенный на работу в сети с помощью семейства протоколов TCP/IP, необходимо установить связь с компьютером, на котором установлена ОС UNIX. Это можно осуществлять несколькими способами, например с помощью сетевого приложения telnet, которое имеется в операционных системах Windows или с помощью средств доступа к Internet. Обратите внимание, что - это незащищенный протокол, который в настоящее время уже практически не применяется. Современной альтернативой является Secure Shell (SSH).

Пример.

В качестве терминала используется персональный компьютер с ОС Windows NT, сконфигурированной для работы в сети. Необходимо зарегистрироваться в UNIX-системе.

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

    для установления связи с ОС UNIX необходимо знать сетевое имя удаленного компьютера или его IP-адрес (например, 192.168.2.19);

    найти в персональном компьютере приложение telnet и запустить его на исполнение;

    в открывшемся окне приложения выбрать пункт меню Подключение;

    ввести IP-адрес удаленной UNIX-системы (например, 192.168.2.19);

    установить по желанию характеристики терминала.

Процедура регистрации

Когда появится подсказка login: , введите регистрационное имя и нажмите клавишу . Например, если ваше регистрационное имя all30123 , то строка регистрации будет выглядеть следующим образом:

    login: all30123

Если вы сделаете ошибку при вводе вашего регистрационного имени, то можете исправить ее с помощью символа @ или клавиши .

Помните, что важен регистр вводимых символов. Имена all30123 и ALL30123 принадлежат двум разным пользователям.

Теперь система выдает вам подсказку для ввода пароля. Введите пароль и нажмите клавишу . Если при вводе вы сделаете ошибку, то можете исправить ее с помощью клавиши или символа @. Система UNIX не отображает ваш пароль на экране в целях безопасности.

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

Когда вы войдете в систему, то экран терминала будет выглядеть следующим образом:

    login: all30123

Если вы сделаете ошибку при входе в систему, UNIX выведет сообщение:

    login incorrect

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

    login: all30123

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

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

Процедура входа в систему:

    Вы устанавливаете контакт; система UNIX отображает подсказку login:. Введите ваше регистрационное имя и нажмите клавишу .

    Система UNIX выводит подсказку password:. Введите ваш временный пароль и нажмите клавишу .

    Система сообщит, что ваш временный пароль больше не действителен, и предложит выбрать новый пароль.

    Система предложит ввести ваш старый пароль. Введите временный пароль.

    Система предложит ввести ваш новый пароль. Введите выбранный вами пароль.

Пароль должен соответствовать следующим требованиям :

    каждый пароль должен состоять, по крайней мере, из 6 символов;

    каждый пароль должен содержать, по крайней мере, 2 буквенных символа и одну цифру или специальный символ. Буквенный символ может быть набран в регистре либо больших символов либо малых;

    каждый пароль должен отличаться от вашего регистрационного имени. Большие буквы и соответствующие им маленькие буквы эквивалентны;

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

Примеры допустимых паролей:

Для проверки система просит вас заново ввести пароль. Введите пароль снова.

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

Следующий экран отображает описанную процедуру:

    login: dko30123

    password:

    Your password has expired

    Choose a new one

    Old password:

    New password:

    Re-enter new password:

Идентификация пользователя

Когда системный администратор регистрирует пользователя в системе, с регистрационным именем связываются два компонента идентификации: идентификатор пользователя (user ID - UID) и идентификатор группы , к которой он относится (group ID - GID).

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

В любой ОС UNIX имеется один специальный суперпользователь с идентификатором UID = 0, который обычно связан с именем root. Это означает, что пользователь имеет все системные привилегии.

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

Вся регистрационная информация о пользователях системы хранится в файле /etc/passwd.

В современных версиях ОС UNIX зашифрованные пароли и относящаяся к ним системная информация хранятся в файле /etc/shadow, структура и назначение полей которого представлены на рис. 8.2
.

Записи данных о каждой установленной группе содержатся в файле /etc/group, структура и назначение полей которого представлены на рис. 8.3 .

Структура и назначение полей файла /etc/passwd представлены на рис. 8.4
.

Соглашения по вводу

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

Таблица 8.1.
Соглашения о вводе

Ключ

Функция

Подсказка системной команды (предлагает вам ввести вашу команду)

или <^h>

Стереть символ

Остановить выполнение программы или команды

Удалить текущую командную строку

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

Означает конец строки ввода и помещает курсор на новую строку

Остановить ввод в систему или выйти из системы (завершить работу)

Возвратиться на один символ (для терминалов, у которых нет клавиши )

Временно остановить вывод на экран

Продолжить вывод на экран информации, которая была остановлена при помощи <^s>

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

Подсказка команды

Стандартным приглашением командной строки для пользователя в системе UNIX является знак доллара $. Для пользователя root - #. Когда приглашение появляется на экране вашего терминала, то это означает, что система UNIX ожидает инструкции от вас. Соответствующим ответом на подсказку с вашей стороны является выдача команды с последующим нажатием клавиши .

Исправление ошибок ввода

Существует несколько способов исправления ошибок ввода. Символ @ стирает текущую строку, а клавиши и <^h> стирают последний введенный символ. Эти клавиши и знаки являются значениями по умолчанию. Функции, которые они выполняют, могут быть переназначены другим клавишам.

Остановка выполнения команд

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

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

В общем виде командная строка имеет следующую структуру:

    имя [опции] [аргументы]

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

В дальнейшем изложении функций команд предполагается:

Опции (параметры) :

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

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

    могут быть скомбинированы любым образом, при этом знак «минус» можно использовать только один раз.

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

    имя файла;

    номер процесса;

Если вы знаете, что должна сделать вызываемая программа, но не уверены в правильном использовании синтаксиса, можно в командной строке после имени команды указать опцию --help :

    $ cal --help

Для того чтобы иметь возможность получения подробной информации, в ОС UNIX имеется встроенное руководство (on-line), доступ к которому обеспечивают команды man и apropos .

В простейшем случае для получения информации о любой команде необходимо указать ее имя в качестве аргумента команды man :

    man имя_команды

apropos выводит список команд в соответствии с ключевым словом (шаблоном), указанным в качестве аргумента команды:

    apropos шаблон

Примеры.

Если запустить команду date и нажать клавишу , система UNIX обращается к программе, называемой date , выполнит ее и выведет результат на экране:

    $ date

    Tues Sep 18 14:49:07 2000

Команда date выводит дату и время.

Если запустить команду who и нажать клавишу , то экран будет выглядеть следующим образом:

    $ who

    dko30024

    Oct18 8:30

    dko30001

    Oct18 8:34

    dko30020

    Oct18 8:32

    Oct18 8:00

who выводит список регистрационных имен пользователей, работающих в настоящее время в вашей системе. Обозначение tty (вторая колонка) делает ссылку на специальные файлы, которые соответствуют каждому пользовательскому терминалу. В третьей и четвертой колонках указываются дата и время регистрации каждого пользователя. .

Это означает, что вы успешно завершили работу с системой и она готова зарегистрировать нового пользователя.

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

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

Основные выводы

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

    В общем виде операционная система UNIX может быть представлена двухуровневой моделью. В центре находится ядро системы (kernel). Ядро непосредственно взаимодействует с аппаратной частью компьютера, изолируя прикладные программы от особенностей ее архитектуры. Ядро включает в себя программы, реализующие набор услуг, предоставляемых прикладным программам. К услугам ядра относятся операции ввода/вывода, создания и управления процессами, синхронизация процессов и т.д. Следующий уровень модели - системные услуги, обеспечивающие пользовательский интерфейс ОС UNIX. Схема взаимодействия с ядром и приложений, и системных задач одинакова.

    Операционная система UNIX взаимодействует с аппаратными и программными ресурсами компьютера, выполняя следующие функции:

    • управление оборудованием;

      управление ресурсами;

      поддержка интерфейсов пользователя;

      выполнение ввода и вывода информации;

      мониторинг системы;

      обеспечение удаленного доступа в компьютерной сети.

    UNIX-система содержит три главных компонента: систему команд, оболочки и ядро.

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

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

    Ядро системы представляет собой сердцевину операционной системы, которая обеспечивает базовые функции: создает процессы и управляет ими, распределяет память и обеспечивает доступ к файлам и периферийным устройствам.

    Ядро состоит из трех основных подсистем:

    • подсистема управления процессами и памятью;

      файловая подсистема;

      подсистема ввода/вывода.

    Чтобы установить контакт с системой UNIX, вам необходимо иметь:

    • терминал;

      регистрационное имя, которое идентифицирует вас как полномочного пользователя;

      пароль, который проверяет вас на идентичность;

      инструкции для диалога и доступа к системе UNIX, если ваш терминал напрямую не связан с компьютером.

Контрольные вопросы

    Для решения каких задач предназначен класс операционных систем UNIX?

    Какие возможности должна предоставлять операционная система класса UNIX?

    Каковы задачи ядра ОС UNIX?

    Каковы функции ядра ОС UNIX?

    Каково назначение компонента операционной системы «Система команд»?

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

    Каким образом выполняется идентификация пользователя в ОС UNIX?

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

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

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

Файлы и каталоги идентифицируются не по именам, а по индексным узлам (i-node) – индексам в общем массиве файлов для данной файловой системе. В этом массиве хранится информация об используемых блоках данных на носителе, а также – длина файла, владелец файла, права доступа и другая служебная информация под общим названием «метаданные о файле ». Логические же связки типа «имя–i-node » – есть ни что иное как содержимое каталогов.

Таким образом, каждый файл характеризуется одним i-node, но может быть связан с несколькими именами – в UNIX это называют жёсткими ссылками (см. Рисунок 1.22, «Пример жесткой ссылки»). При этом, удаление файла происходит тогда, когда удаляется последняя жёсткая ссылка на этот файл.

Важной особенностью таких файловых систем является то, что имена файлов зависят от регистра, другими словами файлы test.txt и TEST.txt отличаются (т.е. являются разными строками в файле директории).

В определенных (фиксированных для данной файловой системы) блоках физического носителя данных находится т.н. суперблок . Суперблок – это наиболее ответственная область файловой системы, содержащая информацию для работы файловой системы в целом, а также – для ёе идентификации. В суперблоке находится «магическое число » – идентификатор файловой системы, отличающий её от других файловых систем, список свободных блоков, список свободных i-node"ов и некоторая другая служебная информация.

  • Помимо каталогов и обычных файлов для хранения информации, ФС может содержать следующие виды файлов:

    Специальный файл устройства

    Обеспечивает доступ к физическому устройству. При создании такого устройства указывается тип устройства (блочное или символьное), старший номер – индекс драйвера в таблице драйверов операционной системы и младший номер – параметр, передаваемый драйверу, поддерживающему несколько устройств, для уточнения о каком «подустройстве » идет речь (например, о каком из нескольких IDE-устройств или COM-портов).

    Именованный канал Символическая ссылка

    Особый тип файла, содержимое которого – не данные, а имя какого-либо другого файла (см. Рисунок 1.23, «Пример символической ссылки» . Для пользователя такой файл неотличим от того, на который он ссылается.

    Символическая ссылка имеет ряд преимуществ по сравнению с жёсткой ссылкой: она может использоваться для связи файлов в разных файловых системах (ведь номера индексных узлов уникальны только в рамках одной файловой системы), а также более прозрачно удаление файлов – ссылка может удаляться совершенно независимо от отсновного файла.

    Сокет
  • Такие файловые системы наследуют особенности оригинального UNIX. К ним можно отнести, например: s5 (используемая в версиях UNIX System V), ufs (BSD UNIX), ext2, ext3, reiserfs (Linux), qnxfs (QNX). Все эти файловые системы различаются форматами внутренних структур, но совместимы с точки зрения основных концепций.

    Дерево каталогов

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

    Файловая подсистема операционной системы UNIX имеет имеет уникальную систему обработки запросов к файлам – переключатель файловых систем или виртуальная файловая система (VFS ). VFS предоставляет пользователю стандартный набор функций (интерфейс) для работы с файлами, вне зависимости от места их расположения и принадлежности к разным файловым системам.

    В мире стандартов UNIX определено, что корневой каталог единого дерева файловой системы должен иметь имя / , как и символ-разделитель при формировании полного имени файла. Тогда полное имя файла может быть, например, /usr/share/doc/bzip2/README . Задача VFS – по полному имени файла найти его местоположение в дереве файловой системы, определить её тип в этом месте дерева и «переключить », т.е. передать файл на дальнейшую обработку драйверу конктретной файловой системы. Такой подход позволяет использовать практически неограниченое количество различных файловых систем на одном компьютере под управлением одной операционной системы, а пользователь даже не будет знать, что файлы физически находятся на разных носителях информации.

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

    Рисунок 1.24. Стандартные каталоги в файловой системе UNIX

    Приведем краткое описание основных каталогов системы, формально описываемых специальным стандартом на иерархию файловой системы (Filesystem Hierarchy Standart). Все каталоги можно разделить на две группы: для статической (редко меняющейся) информации – /bin , /usr и динамической (часто меняющейся) информации – /var , /tmp . Исходя из этого администраторы могут разместить каждый из этих каталогов на собственном носителе, обладающем соответствующими характеристиками.

    Корневой каталог

    Корневой каталог / является основой любой ФС UNIX. Все остальные каталоги и файлы располагаются в рамках струтуры (дерева), порождённой корневым каталогом, независимо от их физического местонахождения.

    /bin

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

    /boot

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

    /dev

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

    /etc

    В этом каталоге находятся системные конфигурационные файлы. В качестве примеров можно привести файлы /etc/fstab , содержащий список монтируемых файловых систем, и /etc/resolv.conf , который задаёт правила составления локальных DNS-запросов. Среди наиболее важных файлов – скрипты инифиализации и деинициализации системы. В системах, наследующих особенности UNIX System V, для них отведены каталоги с /etc/rc0.d по /etc/rc6.d и общий для всех файл описания – /etc/inittab .

    /home (необязательно)

    Директория содержит домашние директории пользователей. Её существование в корневом каталоге не обязательно и её содержимое зависит от особенностей конкретной UNIX-подобной операционной системы.

    /lib

    Каталог для статических и динамических библиотек, необходимых для запуска программ, находящихся в директориях /bin и /sbin .

    /mnt

    Стандартный каталог для временного монтирования файловых систем – например, гибких и флэш-дисков, компакт-дисков и т.п..

    /root (необязательно)

    Директория содержит домашюю директорию суперпользователя. Её существование в корневом каталоге не обязательно.

    /sbin

    В этом каталоге находятся команды и утилиты для системного администратора. Примерами таких команд являются: route , halt , init и т.п.. Для аналогичных целей применяются директории /usr/sbin и /usr/local/sbin .

    /usr

    Эта директория повторяет структуру корневой директории – содержит каталоги /usr/bin , /usr/lib , /usr/sbin , служащие для аналогичных целей.

    Каталог /usr/include содержит заголовочные файлы языка C для всевозможные библиотек, расположенных в системе.

    Каталог /usr/local является следующим уровнем повторения корневого каталога и служит для хранения программ, установленных администратором в дополнение к стандартной поставке операционной системы.

    Каталог /usr/share хранит неизменяющиеся данные для установленных программ. Особый интерес представляет каталог /usr/share/doc , в который добавляется документация ко всем установленным программам.

    /var , /tmp

    Используются для хранения временных данных процессов – системных и пользовательских соответственно.

    Что такое Unix (для начинающих)


    Дмитрий Ю. Карпов


    О чем это я?


    Этот опус не претендует на полноту описания. Более того, в целях упрощения сознательно опущены некоторые подробности. Сначала цикл задумывался как FAQ (ЧаВо - часто задаваемые вопросы), но видимо получится "Курс молодого бойца" или "Сержантская школа".

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

    Не дожидаясь разоблачения со стороны опытных Unix"оидов, делаю добровольное признание - я не могу претендовать на роль великого знатока Unix, а мои знания в основном вокруг FreeBSD. Надеюсь, это не помешает.

    Этот файл еще долго будет находиться в состоянии "under construction". :-)

    Что такое Unix?


    Unix - полноценная, изначально многопользовательская, многозадачная и многотерминальная операционная система. Точнее, это целое семейство систем, почти полностью совместимых друг с другом на уровне исходных текстов программ.

    Какие бывают Unix"ы и на каких машинах они запускаются?


    Этот список не претендует на полноту, ибо кроме перечисленных есть еще множество менее распространенных Unix"ов и Unix-подобных систем, не говоря уже о древних Unix"ах для устаревших машин.

    Условно можно выделить семейства System V и Berkeley. System V (читается "System Five") имеет несколько вариантов, последний по моим сведениям System V Release 4. Университет Berkeley славен не только разработкой BSD, но и большинства протоколов Internet. Впрочем, многие Unix"ы сочетают свойства обеих систем.

    Где взять бесплатный Unix?


  • Семейство BSD: FreeBSD , NetBSD , OpenBSD .
  • Семейство Linux : RedHat , SlackWare , Debian , Caldera ,
  • SCO и Solaris доступны бесплатно для некоммерческого использования (в основном - для учебных заведений).

    Каковы основные отличия Unix от других OS?


    Unix состоит из ядра с включенными в него драйверами и из утилит (внешних по отношению к ядру программ). Если надо изменить конфигурацию (добавить устройство, изменить порт или прерывание), то ядро пересобирают (перелинковывают) из обьектных модулей или (напр., во FreeBSD) из исходников. /* Это не совсем верно. Некоторые параметры можно поправить без пересборки. Существуют также loadable kernel modules. */

    В противоположность Unix"у Windows (если не уточняется, какая, то имеются в виду 3.11, 95 и NT) и OS/2 при загрузке фактически на ходу прилинковывают драйверы. При этом компактность собранного ядра и повторное использование общего кода на порядок ниже, чем у Unix. Кроме того, при неизменной конфигурации системы ядро Unix без переделки (потребуется изменить только стартовую часть BIOS) может быть записан в ПЗУ и выполняться _не_загружаясь_ в ОЗУ. Компактность кода особенно важна, т.к. ядро и драйверы никогда не покидают физическую оперативную память, не свопятся на диск.

    Unix - самая многоплатформенная OS. WindowsNT пытается подражать ему, но пока это плохо удается - после отказа от MIPS и POWER-PC, W"NT остались всего на двух платформы - традиционная i*86 и DEC Alpha. Разумеется, переносимость программ с одной версии Unix на другую ограничена. Неаккуратно написанная программа, не учитывающая различий в реализациях Unix, делающая необоснованные предположения типа "переменная integer должна занимать четыре байта", может потребовать серьезной переделки. Но все равно это на много порядков легче, чем например пернести с OS/2 на NT.

    Почему Unix?


    Unix используется как в качестве как сервера, так и рабочей станции. В номинации серверов с ним конкурируют MS WindowsNT, Novell Netware, IBM OS/2 Warp Connect, DEC VMS и операционные системы мэйнфреймов. Каждая система имеет свою область применения, в которой она лучше других.

  • WindowsNT - для администраторов, которые предпочитают привычный интерфейс экономному расходованию ресурсов и высокой производительности.
  • Netware - для сетей, где нужна высокая производительность файлового и принтерного сервиса и не столь важны остальные сервисы. Главный недостаток - на сервере Netware трудно запускать приложения.
  • OS/2 хороша там, где нужен "легкий" сервер приложений. Ресурсов требует меньше чем NT, в управлении гибче (хотя в настройке может и сложнее), а многозадачность очень хорошая. Авторизация и разграничение прав доступа не реализованы на уровне ОС, что с лихвой окупается реализацией на уровне приложений-серверов. (Впрочем, зачастую остальные OS делают то же самое). Многие станции FIDOnet и BBS сделаны на базе OS/2.
  • VMS - мощный, ничем не уступающий Unix"ам (а во многом и превосходящий его) сервер приложений, но только для платформ VAX и Alpha фирмы DEC.
  • Мэйнфреймы - для обслуживания очень большого количества пользователей (порядка нескольких тысяч). Но работа этих пользователей как правило организована в виде не клиент-серверного взаимодействия, а в виде хост-терминального. Терминал же в этой паре скорее не клиент, а сервер (Мир Internet, N3 за 1996-й год). К преимуществам мэйнфреймов надо отнести более высокую защищенность и устойчивость к сбоям, а к недостаткам - соответствующую этим качествам цену.

    Unix хорош для квалифицированного (или желающего стать таковым) администратора, т.к. требует знания принципов функционирования происходящих в нем процессов. Реальная многозадачность и жесткое разделение памяти обеспечивают высокую надежность функционирования системы, хотя в производительности файл- и принт-сервисов Unix"ы уступают Netware.

    Недостаточная гибкость предоставления прав доступа пользователей к файлам по сравнению с WindowsNT затрудняет организацию _на_уровне_файловой_системы_ группового доступа к данным (точнее, к файлам), что на мой взгляд компенсируется простотой реализации, а значит меньшими требованиями к аппаратуре. Впрочем, такие приложения, как SQL-сервер решают проблему группового доступа к данным своими силами, так что отсутствующая в Unix возможность запретить доступ к _файлу_ конкретному пользователю на мой взгляд является явно избыточной.

    Практически все протоколы, на которых основан Internet, были разработаны под Unix, в частности стек протоколов TCP/IP придуман в университете Berkeley.

    Защищенность Unix при правильном администрировании (а когда это не так?) ни в чем не уступает ни Novell, ни WindowsNT.

    Важным свойством Unix, которое приближает его к мэйнфреймам, является его многотерминальность, много пользователей могут одновременно запускать программы на одной Unix-машине. Если не требуется использовать графику, можно обойтись дешевыми текстовыми терминалами (специализированными или на базе дешевых PC), подключенными по медленным линиям. В этом с ним конкурирует только VMS. Можно использовать и графические X-терминалы, когда на одном экране присутствуют окна процессов, выполняющихся на разных машинах.

    В номинации рабочих станций с Unix конкурируют MS Windows*, IBM OS/2, Macintosh и Acorn RISC-OS.

  • Windows - для тех, кто ценит совместимость больше эффективности; для тех, кто готов купить большое количество памяти, дискового пространства и мегагерц; для тех, кто любит не вникая в суть, щелкать мышкой по кнопочкам в окошке. Правда, рано или поздно все равно придется изучить принципы работы системы и протоколов, но тогда уже будет поздно - выбор сделан. Немаловажным преимуществом Windows надо признать также возможность украсть кучу программного обеспечения.
  • OS/2 - для любителей OS/2. :-) Хотя по некоторым сведениям OS/2 лучше других взаимодействует с мэйнфреймами и сетями IBM.
  • Macintosh - для графических, издательских и музыкальных работ, а также для тех, кто любит понятный, красивый интерфейс и не хочет (не может) разбираться в подробностях функционирования системы.
  • RISC-OS, прошитая в ПЗУ, позволяет не тратить время на инсталляцию операционной системы и восстановление ее после сбоев. Кроме того, практически все программы под ней очень экономно расходуют ресурсы, благодаря чему не нуждаются в свопинге и работают очень быстро.

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

    Основные понятия Unix


    Unix базируется на двух основных понятиях: "процесс" и "файл". Процессы являют собой динамическую сторону системы, это субьекты; а файлы - статическую, это обьекты действия процессов. Почти весь интерфейс взаимодействия процессов с ядром и друг с другом выглядит как запись/чтение файлов. /* Хотя надо добавить такие вещи, как сигналы, разделяемая память и семафоры. */

    Процессы нельзя путать с программами - одна программа (как правило с различными данными) может выполняться в разных процессах. Процессы можно весьма условно разделить на два типа - задачи и демоны. Задача - это процесс, который выполняет свою работу, стремясь побыстрее закончить ее и завершиться. Демон ждет событий, которые он должен обработать, обрабатывает произошедшие события и снова ждет; завершается он как правило по приказу другого процесса, чаще всего его убивает пользователь, дав команду "kill номер_процесса". /* В этом смысле получается, что интерактивная задача, обрабатывающая ввод пользователя, скорее похожа на демона, чем на задачу. :-) */

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


    В старых Unix"ах отводилось 14 букв на имя, в новых это ограничение снято. В директории кроме имени файла находится его идентефикатор inode - целое число, определяющее номер блока, в котором записаны атрибуты файла. Среди них: номер пользователя - хозяина файла; номер группы; количество ссылок на файл (см.далее) даты и время создания, последней модификации и последнего обращения к файлу; атрибуты доступа. Атрибуты доступа содержат тип файла (см.далее), атрибуты смены прав при запуске (см.далее) и права доступа к нему для хозяина, одногрупника и остальных на чтение, запись и выполнение. Право на стирание файла определяется правом записи в вышележащую директорию.

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

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

    Файлы бывают следующих типов:

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

    Специальные файлы, предназначенные для работы с устройствами, как правило, сосредоточены в директории " /dev ". Вот некоторые из них (в номинации FreeBSD):

    • tty* - терминалы, в т.ч.:
      • ttyv - виртуальная консоль;
      • ttyd - DialIn терминал (обычно последовательный порт);
      • cuaa - DialOut линия
      • ttyp - сетевой псевдо-терминал;
      • tty - терминал, с которым ассоциирована задача;
    • wd* - жесткие диски и их подразделы, в т.ч.:
      • wd - жесткий диск;
      • wds - партиция этого диска (именуемая здесь "slice");
      • wds - раздел партиции;
    • fd - floppy-диск;
    • rwd*, rfd* - то же самое, что wd* и fd*, но с последовательным доступом;

    Иногда требуется, чтобы программа, запущенная пользователем, имела не права запустившего ее пользователя, а какие-то другие. В этом случае устанавливается атрибут смены прав на права пользователя - хозяина программы. (В качестве примера приведу программу, которая читает файл с вопросами и ответами и на основании прочитанного тестирует запустившего эту программу студента. Программа должна иметь право читать файл с ответами, а запустивший ее студент - нет.) Так, например, работает программа passwd, с помощью которой юзер может изсменить свой пароль. Юзер может запустить программу passwd, она может произвести изменения в системной базе данных - а пользователь не может.

    В отличие от DOS, в котором полное имя файла выглядит как "диск:\путь\имя", и RISC-OS, в которой оно выглядит "-файловая_система-диск:$.путь.имя" (что вообще говоря имеет свои преимущества), Unix использует прозрачную нотацию в виде "/путь/имя". Корень отсчитывается от раздела, с которого было загружено ядро Unix. Если мы собираемся использовать другой раздел (а на загрузочном разделе как правило находится только самое необходимое для загрузки), используется команда `mount /dev/файл_раздела директория`. При этом файлы и поддиректории, ранее находившиеся в этой директории, становятся недоступными, пока не раздел не будет размонтирован (естественно, все нормальные люди используют для монтирования разделов пустые директории). Производить монтирование и размонтирование имеет право только супервизор.

    При запуске каждый процесс может расчитывать, что для него уже открыты три файла, которые ему известны как стандартный ввод stdin по дескриптору 0; стандартный вывод stdout по дескриптору 1; и стандартный вывод stderr по дескриптору 2. При регистрации в системе, когда пользователь вводит имя и пароль, а ему запускается shell, все трое направлены на /dev/tty; позже любой из них может быть перенаправлен в любой файл.

    Комадный интерпретатор


    В Unix практически всегда входят два командных интерпретатора - sh (shell) и csh (C-подобный shell). Кроме них еще бывают bash (Bourne), ksh (Korn), и другие. Не вдаваясь в подробности, приведу общие принципы:

    Все команды, кроме изменения текущей директории, установки переменных окружения (environment) и операторов структурного программирования - внешние программы. Программы эти как правило располагаются в каталогах /bin и /usr/bin. Программы системного администрирования - в каталогах /sbin и /usr/sbin.

    Команда состоит из имени запускаемой программы и аргументов. Аргументы отделяются от имени команды и друг от друга пробелаим и табуляциями. Некоторые спецсимволы интерпретируются самим shell"ом. Спецсимволами являются " " ` \ ! $ ^ * ? | & ; (еще какие?).

    В одной командной строке можно дать несколько команд. Команды могут быть разделены; (последовательное выполнение команд), & (асинхронное одновременное выполнение команд), | (синхронное выполнение, стандартный вывод stdout первой команды будет подан на стандартный ввод stdin второй).

    Кроме того, можно брать стандартный ввод из файла, включив в качестве одного из аргументов "<файл" (без кавычек); можно направить стандартный вывод в файл, используя ">файл" (файл будет обнулен) или ">>файл" (запись будет произведена в конец файла). Сама программа не получит этого аргумента; чтобы узнать, что ввод или вывод переназначены, программа должна сама предпринять некоторые весьма нетривиальные телодвижения.

    Руководства - man


    Если надо получить информацию по какой-либо команде, дайте команду "man имя_команды". На экран это будет выдаваться через программу "more" - посмотрите, как с ней управляться на вашем Unix"е командой `man more`.

    Дополнительная документация

  • Операционная система UNIX — прародитель многих современных операционных систем, таких как Linux, Android, Mac OS X и многих других была создана в стенах исследовательского центра Bell Labs — подразделении компании AT&T. Вообще говоря, Bell Labs — настоящий рассадник питомник ученых, которые совершили открытия, буквально изменившие технику. Например, именно в Bell Labs работали такие ученые, как Уильям Шокли, Джон Бардин и Уолтер Браттейн, впервые создавшие биполярный транзистор в 1947 году. Можно сказать, что именно в Bell Labs был изобретен лазер, хотя к тому времени уже были созданы мазеры. Клод Шеннон, основатель теории информации также работал в Bell Labs. Там же работали создатели языка C Кен Томпсон и Денис Ритчи (о них мы еще вспомним), а также работает автор C++ — Бьярн Страуструп.

    На пути к UNIX

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

    Разработка UNIX была не первая работа в области операционных систем, проводимых в Bell Labs. В 1957 году в лаборатории начали разрабатывать операционную систему, которая получила название BESYS (сокращение от Bell Operating System). Руководителем проекта был Виктор Высотский — сын русского астронома, эмигрировавшего в Америку. BESYS был внутренний проект, который не выпускался как законченный коммерческий продукт, хотя всем желающим BESYS рассылалась на магнитных лентах. Эта система была предназначена для выполнения на компьютерах серии IBM 704 — 709x (IBM 7090, 7094). Хочется называть эти штуковины допотопным словом ЭВМ, но, чтобы не резало слух, будем их называть дальше все-таки компьютерами.

    IBM 704

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

    В 1964 году в Bell Labs произошел апгрейд компьютеров, в результате которого на новых компьютерах от IBM BESYS уже не могла быть запущена, о кроссплатформенности тогда не было и речи. Компьютеры в то время IBM поставляла без операционных систем. Разработчики из Bell Labs могли бы начать писать новую операционку, но они поступили по-другому — присоединились к разработке операционной системы Multics.

    Проект Multics (сокращение от слов Multiplexed Information and Computing Service) был предложен профессором Массачуссетского Технологического Института (MIT) Джеком Дэннисом. Он вместе со своими студентами в 1963 году разработал спецификацию на новую операционную систему и сумел заинтересовать проектом представителей компании General Electric. В итоге Bell Labs присоединился к MIT и General Electric в разработке новой операционки.

    А задумки у проекта были очень амбициозными. Во-первых, это должна была быть операционная система с полноценным разделением времени. Во-вторых, Multics писался не на ассемблере, а на одном из первых языков высокого уровня — PL/1, который был разработан в 1964 году. В-третьих, Multics могла работать на многопроцессорных компьютерах. В этой же операционной системе была иерархическая файловая система, имена файлов могли содержать любые символы и быть довольно длинными, также в файловой системе были предусмотрены символьные ссылки на директории.

    К сожалению, работа над Multics затянулась надолго, программисты Bell Labs так и не дождались релиза этого продукта и в апреле 1969 году вышли из проекта. А релиз состоялся уже в октябре того же года, но, говорят, первая версия была жутко глючная, и еще год оставшиеся разработчики исправляли баги, о которых им сообщали пользователи, хотя через год Multics был уже более надежной системой.

    Разработка Multics велась еще довольно долгое время, последний релиз состоялся в 1992 году, и это была версия 12.5, хотя это уже совсем другая история, но Multics оказал огромное влияние на будущий UNIX.

    Рождение UNIX

    UNIX появился почти случайно, и виновата в этом была компьютерная игра «Space Travel» — космическая леталка, которую написал Кен Томпсон. Шел далекий 1969 год, игра «Space Travel» была рассчитана сначала на ту самую операционную систему Multics, а после того, как для Bell Labs был отрезан доступ к новым версиям Multics, то Кен переписал игру на Fortran и портировал ее на операционную систему GECOS, которая прилагалась к компьютеру GE-635. Но тут закрались две проблемы. Во-первых, у этого компьютера была не ахти какая хорошая система для вывода на дисплей, а, во-вторых, играть на этом компьютере было дороговато — что-то около $50-75 в час.

    Но однажды Кен Томпсон наткнулся на комьютер DEC PDP-7, который редко использовался, и вполне мог подойти для запуска Space Travel, к тому же у него был более хороший видеопроцессор.

    Портировать игру на PDP-7 было не так просто, по сути, требовалось написать новую операционную систему для ее запуска. За этим дело не стало, на что только не пойдут программисты ради любимой игрушки. Так зародился UNIX, точнее Unics. Название, которое предложил Брайан Керниган, является сокращением от слов Uniplexed Information and Computing System. Напомню, что название Multics произошло от слов Multiplexed Information and Computing Service, таким образом, Unics в некотором роде противопоставлялся Multics в плане простоты. И действительно, на Multics уже тогда были нападки по поводу ее сложности. Для сравнения, первые версии ядра Unics занимали всего 12 кБ оперативки против 135 кБ у Multics.

    Кен Томпсон

    На этот раз разработчики не стали (пока) экспериментировать с языками высокого уровня, и первая версия Unics была написана на ассемблере. В разработке Unics приняли участие сам Томпсон, Денис Ритчи, позже к ним присоединились Дуглас Макилрой, Джои Оссанна и Рад Кеннедей. На первых порах Керниган, предложивший название ОС, оказывал только моральную поддержку.

    Чуть позже, в 1970 году, когда была реализована многозадачность, операционку переименовали в UNIX и перестали считать сокращением. Именно этот год считается официальным годом рождения UNIX, и именно от первого января 1970 года отсчитывается системное время (количество секунд, начиная с этой даты). Эту же дату называют более пафосно — начало эры UNIX (по-английски — UNIX Epoch). Помните, нас все пугали проблемой 2000-го года? Так вот подобная проблема нас ждет еще в 2038 году, когда для представления времени не будет хватать 32-битных целых чисел, которые часто используются для определения даты, и время с датой станут отрицательными. Хочется верить, что к этому времени весь жизненно важный софт будет использовать для этой цели 64-битные переменные, чтобы отодвинуть эту страшную дату еще на 292 миллиона лет, а там уж что-нибудь придумаем. 🙂

    К 1971 году UNIX была уже полноценной операционной системой и Bell Labs даже застолбила за собой торговую марку UNIX. В этом же году UNIX была переписана для работы на более мощном компьютере PDP-11, и именно в этом году вышла первая официальная версия UNIX (ее еще называют First Edition).

    Параллельно с разработкой Unics/UNIX Кен Томпсон и Денис Ритчи, начиная с 1969 года, разрабатывали новый язык B (Би), который был основан на языке BCPL, а тот, в свою очередь, можно считать потомком языка Algol-60. Ритчи предложил переписать UNIX на B, который был переносимый, хотя и интерпретируемый, после чего он продолжил модифицировать этот язык под новые нужды. В 1972 году вышла вторая версия UNIX — Second Edition, которая была написана практически полностью на B, на ассемблере оставался довольно небольшой модуль примерно в 1000 строк, так что перенос UNIX на другие компьютеры теперь давался сравнительно легко. Так UNIX стал портируемым.

    Кен Томпсон и Деннис Ритчи

    Затем язык B развивался вместе с UNIX, пока из него не родился язык C, один из наиболее известных языков программирования, который теперь принято поливать грязью или возносить, как идеал. В 1973 году вышла третья редакция UNIX со встроенным компилятором языка C, а начиная с 5-й версии, появившейся на свет в 1974 году, считается, что UNIX был переписан полностью на C. Кстати, именно в UNIX 1973 года появилось такое понятие, как трубы (pipe).

    Начиная с 1974-1975 годов UNIX начал распространяться за пределы Bell Labs. Томпсон и Ритчи публикуют описание ОС UNIX в «Communications of the ACM», а компания AT&T предоставляет UNIX образовательным учреждениям как средство для обучения. В 1976 году можно сказать, что произошло первое портирование UNIX на другую систему — на компьютер Interdata 8/32. Кроме того, в 1975 году вышла 6-я версия UNIX, начиная с которой появились различные реализации этой операционки.

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

    Появление BSD

    Размножению этой операционной системы во многом поспособствовали американские чиновники, еще до рождения UNIX, в 1956 году, наложившие ограничения на компанию AT&T, которой принадлежала лаборатория Bell Labs. Дело в том, что тогда министерство юстиции вынудило AT&T подписать соглашение, запрещавшее компании заниматься деятельностью, не связанной с телефонными и телеграфными сетями и оборудованием, но к 70-ым годам AT&T уже поняли, какой удачный проект получился из UNIX и захотели сделать его коммерческим. Для того, чтобы чиновники разрешили им это сделать, AT&T передала исходники UNIX некоторым американским вузам.

    Одним из таких вузов, имевших доступ к телу исходникам был Калифорнийский университет в Беркли, а если есть чужие исходники, то невольно возникает желание подправить в программе что-нибудь под себя, тем более, что лицензия это не запрещала. Таким образом, через несколько лет (в 1978 году) появилась первая UNIX-совместимая система, созданная не в стенах AT&T. Это был BSD UNIX.

    Калифорнийский университет в Беркли

    BSD — это сокращение от слов Berkeley Software Distribution, специальная система распространения программ в исходных кодах с очень мягкой лицензией. Лицензия BSD была создана как раз для распространения новой UNIX-совместимой системы. Эта лицензия разрешает повторное использование исходного кода, распространяющегося под ней, и, кроме того, в отличие от GPL (которого тогда еще не было), не накладывает каких-либо ограничений на производные программы. Кроме того, она очень короткая и не оперирует большим количеством нудных юридических терминов.

    Первая версия BSD (1BSD) была скорее дополнением к оригинальной UNIX версии 6, чем самостоятельная система. В 1BSD был добавлен компилятор Паскаля и текстовый редактор ex. Вторая версия BSD, вышедшая в 1979 году включала в себя такие известные программы, как vi и C Shell.

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

    Пожалуй, наиболее известными непосредственными потомками BSD UNIX являются операционные системы FreeBSD, OpenBSD и, чуть в меньшей степени, NetBSD. Все они произошли от так называемой 386BSD, вышедшей в 1992 году. 386BSD, как можно догадаться из названия, являлась портом BSD UNIX на процессор Intel 80386. Эта система была создана также выпускниками Университета в Беркли. Авторы посчитали, что исходный код UNIX, полученный от AT&T был достаточно сильно изменен, чтобы забить на лицензию AT&T, однако, сама компания AT&T так не считала, поэтому вокруг этой операционной системы шли судебные разбирательства. Судя по тому, что сама 386BSD стала родителем многих других операционных систем, для нее все закончилось благополучно.

    Проект FreeBSD (в начале у него не было своего имени) появился, как набор патчей к 386BSD, однако, эти патчи почему-то не были приняты, а затем, когда стало ясно, что 386BSD больше развиваться не будет, в 1993 году проект был развернут в сторону создания полноценной операционной системы, получившей название FreeBSD.

    Beastie. Талисман FreeBSD

    Одновременно с этим сами разработчики 386BSD создали новый проект NetBSD, от которой, в свою очередь, ответвилась OpenBSD. Как видите, получается довольно развесистое дерево операционных систем. Целью проекта NetBSD было создание такой UNIX-системы, которая могла бы работать на как можно большем количестве архитектур, то есть добиться максимальной переносимости. Даже драйвера для NetBSD должны быть кроссплатформенными.

    Логотип NetBSD

    Solaris

    Однако первой от BSD отпочковалась операционная система SunOS, детище, как вы понимаете из названия, компании Sun Microsystems, к сожалению, ныне покойной. Это произошло в 1983 году. SunOS — это операционка, которая прилагалась к компьютерам, собранным самой фирмой Sun. Вообще говоря, у Sun за год до этого, в 1982 году, появилась операционка Sun UNIX, которая в своей основе имела кодовую базу Unisoft Unix v7 (Unisoft — это компания, основанная в 1981 году, и занимавшаяся портированием Unix на различное железо), но именно SunOS 1.0 основана на коде 4.1 BSD. SunOS регулярно обновлялась вплоть до 1994 года, когда вышла версия 4.1.4, а затем была переименована в Solaris 2. Откуда взялась двойка? Тут немного получилась запутанная история, потому что Solaris’ом сначала стали называть SunOS версии 4.1.1 — 4.1.4, разрабатывавшиеся с 1990 по 1994 годы. Считайте, что это был своеобразный ребрендинг, который прижился только, начиная с версии Solaris 2. Затем, вплоть до 1997 года выходили Solaris 2.1, 2.2 и т.д. до 2.6, а вместо Solaris 2.7 в 1998 году вышел просто Solaris 7, затем стала наращиваться только эта цифра. На данный момент последняя версия Solaris — 11, вышедшая 9 ноября 2011 года.

    Логотип OpenSolaris

    История Solaris тоже довольно сложная, вплоть до 2005 года Solaris была полностью коммерческой операционкой, но в 2005 году Sun решили открыть часть исходного кода Solaris 10 и создать проект OpenSolaris. Кроме того, раньше, пока была жива Sun, Solaris 10 можно было использовать либо бесплатно, либо можно было покупать официальную техподдержку. Потом, в начале 2010 года, когда Oracle поглотил Sun, он сделал Solaris 10 платной системой. К счастью, OpenSolaris Oracle угробить пока не смогла.

    Linux. Куда ж без него?

    А теперь настала очередь рассказать про наиболее известную из реализаций UNIX — Linux. История Linux замечательна тем, что в ней сошлись сразу три интересных проекта. Но прежде чем говорить о создателе Linux — Линусе Торвальдсе, нужно упомянуть еще двух программистов, один из которых — Эндрю Таненбаум, сам того не ведая, подтолкнул Линуса на создание Linux, а второй — Ричард Столлман, чьими инструментами пользовался Линус при создании своей операционной системы.

    Эндрю Таненбаум является профессором Амстердамского свободного университета и занимается в первую очередь разработкой операционных систем. Его перу совместно с Альбертом Вудхаллом принадлежит такая известная книга, как «Операционные системы: разработка и реализация», именно она вдохновила Торвальдса заняться написанием Linux. В этой книге рассматривается такая UNIX-подобная система, как Minix. К сожалению, Таненбаум долгое время рассматривал Minix только как проект для обучения навыкам создания операционных систем, но не как полноценную рабочую ОС. У исходников Minix была довольно ограниченная лицензия, когда можно изучать ее код, но нельзя распространять свои измененные версии Minix, да и сам автор долгое время не хотел применять патчи, которые ему слали.

    Эндрю Таненбаум

    Первая версия Minix вышла вместе с первым изданием книги в 1987 году, последующие вторая и третья версии Minix выходили вместе с соответствующими редакциями книги про операционные системы. Третью версия Minix, вышедшею в 2005 году, уже вполне можно использовать как самостоятельную операционную систему для компьютера (есть LiveCD-версии Minix, которые не требуют ее установку на жесткий диск), так и в качестве встраиваемой операционной системы для микроконтроллеров. Последняя на данный момент версия Minix 3.2.0 появилась на свет в июле 2011 года.

    А теперь вспомним про Ричарда Столлмана. В последнее время его стали воспринимать только как пропагандиста свободного софта, хотя много известных ныне программ появилось благодаря нему, да и Торвальдсу в свое время его проект значительно облегчил жизнь. Самое интересное, что и Линус, и Ричард подошли к созданию операционной системы с разных сторон, а в результате проекты слились в GNU/Linux. Здесь надо дать некоторые пояснения по поводу того, что это за GNU, и откуда он взялся.

    Ричард Столлман

    Про Столлмана можно рассказывать довольно долго, например, то, что он получил диплом с отличием по физике в Гарвардском университете. Кроме того, Столлман работал в Массачуссетском Технологическом Институте, где и начал писать свой знаменитый редактор EMACS в 1970-ых годах. При этом исходники редактора были доступны всем желающим, что не являлось какой-то особенностью в MIT, где долгое время держалась в некотором смысле дружеская анархия, или, как это называл Стивен Леви, автор замечательной книги «Хакеры. Герои компьютерной революции», «хакерская этика». Но чуть позже, в MIT начали заботиться о безопасности компьютеров, пользователям раздали пароли, неавторизованные пользователи не могли получить доступ к компьютеру. Столлман был резко против такой практики, он сделал программу, которая могла бы позволить узнать любой пароль любого пользователя, пропагандировал оставлять пароль пустым. Например, он рассылал пользователям вот такие сообщения: «Я вижу, что вы выбрали пароль [такой-то]. Я предполагаю, что вы можете переключиться на пароль «возврат каретки». Его гораздо легче набирать, и это соответствует принципу, по которому здесь не должно быть паролей». Но его усилия ни к чему не привели. Более того, новые люди, которые приходили в MIT уже начали заботиться о правах на свою программу, о копирайте и тому подобной мерзости.

    Позже Столлман говорил (цитата из той же книги Леви): «Я не могу поверить в то, что у программного обеспечения должны быть владельцы. То, что происходило, саботировало в целом все человечество. Оно не давало людям извлечь максимум возможностей из существования программ». Или вот еще одна его цитата: «Машины начали ломаться, а чинить их было некому. Никто не делал нужные изменения в программном обеспечении. Нехакеры реагировали на это просто – они начинали пользоваться покупными коммерческими системами, принося вместе с ними фашизм и лицензионные соглашения».

    В результате Ричард Столлман ушел из MIT и решил создать свою свободную реализацию UNIX-совместимой операционной системы. Так 27 сентября 1983 года появился проект GNU, что переводится как «Gnu is Not UNIX». Первой программой, относящейся к GNU стал EMACS. В рамках же проекта GNU в 1988 году была разработана собственная лицензия GNU GPL — GNU General Public License, которая обязывает авторов программ на основе исходников, распространяющихся под этой лицензией, также открывать исходники под лицензией GPL.

    До 1990-го года в рамках GNU (уже не только Столлманом) писался разнообразный софт для будущей операционной системы, но у этой ОС не было своего ядра. За ядро взялись только в 1990-м году, это был проект под называнием GNU Hurd, но он «не выстрелил», последняя его версия вышла в 2009 году. Зато «выстрелил» Linux, к которому мы, наконец-то, подошли.

    И тут в действие вступает финский паренек Линус Торвальдс. Во время учебы в Хельсинском Университете Линусу предстояли курсы по языку C и системе UNIX, в преддверии этого предмета он купил ту самую книгу Таненбаума, в которой описывался Minix. Причем именно описывался, сам Minix надо было покупать отдельно на 16-ти дискетах, а стоила она тогда $169 (эх, не было тогда в Финляндии нашей Горбушки, но, что поделаешь, дикари-с 🙂). Кроме того, Торвальдсу пришлось еще купить в кредит за $3500 сам компьютер с процессором 80386, потому что до этого у него был только старенький компьютер на процессоре 68008, на котором Minix не могла работать (к счастью, когда он уже сделал первую версию Linux, благодарные пользователи скинулись и оплатили его кредит за компьютер).

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

    Несмотря на то, что Торвальдсу Minix в целом нравилась, но постепенно он стал понимать, какие у нее ограничения и недостатки. Особенно его раздражала программа эмуляции терминала, прилагавшаяся к операционной системе. В результате он решил написать свой эмулятор терминала, а заодно и разобраться в работе 386-го процессора. Торвальдс писал эмулятор на низком уровне, то есть начинал с загрузчика BIOS, постепенно эмулятор обрастал новыми возможностями, затем, чтобы скачивать файлы, Линусу пришлось написать драйвер дисковода и файловой системы и пошло, и поехало. Так появилась операционная система Linux (на тот момент у нее еще не было какого-либо названия).

    Когда операционная система стала более-менее вырисовываться, первой программой, которую Линус запустил на ней, была bash. Правильнее было бы сказать даже, что он подправлял свою операционную систему таким образом, чтобы bash, наконец, смог работать. После этого он стал постепенно запускать под своей операционной системой другие программы. А операционная система должна была называться совсем не Linux. Вот цитата из автобиографии Торвальдса, которая вышла под названием «Just for Fun»: «Про себя я называл ее Linux. Честное слово, я никогда не собирался выпускать ее под именем Linux, потому что это казалось мне слишком нескромным. Какое имя я приготовил для окончательной версии? Freax. (Поняли? Freaks — фанаты — и на конце х от Unix)».

    25 августа 1991 года в конференции comp.os.minix появилось следующее историческое сообщение: «Привет всем пользователям minix! Я тут пишу (бесплатную) операционную систему (любительскую версию — она не будет такой большой и профессиональной, как gnu) для 386-х и 486-х AT. Я вожусь с этим с апреля, и она, похоже, скоро будет готова. Напишите мне, кому что нравится/не нравится в minix, поскольку моя ОС на нее похожа (кроме всего прочего, у нее — по практическим соображениям — то же физическое размещение файловой системы). Пока что я перенес в нее bash (1.08) и gсс (1.40), и все вроде работает. Значит, в ближайшие месяцы у меня получится уже что-то работающее, и мне бы хотелось знать, какие функции нужны большинству. Все заявки принимаются, но выполнение не гарантируется:-)»

    Обратите внимание, здесь уже упоминается GNU и программа gcc (на тот момент эта аббревиатура расшифровывалась как GNU C Compiler). И вспомните про Столлмана и его GNU, которые начали разрабатывать операционную систему с другого конца. Наконец, произошло слияние. Поэтому Столлман обижается, когда операционную систему называют просто Linux, а не GNU/Linux, все-таки Linux — это именно ядро, а многие обвески были взяты из проекта GNU.

    17 сентября 1991 года Линус Торвальдс впервые выложил на публичный FTP-сервер свою операционную систему, которая на тот момент имела версию 0.01. С тех пор все прогрессивное человечество отмечает этот день, как день рождения Linux. Особо нетерпеливые начинают отмечать его еще 25 августа, когда Линус признался в конференции, что пишет операционку. Дальше пошло развитие Linux, и само название Linux укрепилось, потому что адрес, куда была выложена операционная система выглядела как ftp.funet.fi/pub/OS/Linux . Дело в том, что Ари Лемке — преподаватель, который выделил Линусу место на сервере, показалось, что Freax выглядит не очень презентабельно, и он назвал директорию «Linux» — как смесь имени автора и «x» на конце от UNIX.

    Tux. Логотип Linux

    Есть еще такой момент, что хотя Торвальдс и написал Linux под влиянием Minix, между Linux и Minix есть принципиальное с точки зрения программирования различие. Дело в том, что Таненбаум — сторонник микроядерных операционных систем, то есть таких, когда у операционной системы есть небольшое ядро с некоторым небольшим количеством функций, а все драйвера и сервисы операционной системы выступают в виде отдельных независимых модулей, а у Linux ядро монолитное, туда включены многие возможности операционной системы, поэтому под Linux, если нужна какая-то особая возможность, может понадобиться перекомпилировать ядро, внося туда какие-то изменения. С одной стороны у микроядерной архитектуры плюсы — это надежность и простота, в то же время, при небрежном проектировании микроядра, монолитное ядро будет работать быстрее, так как ему не надо обмениваться большими объемами данных со сторонними модулями. После появления Linux, в 1992 году, между Торвальдсом и Таненбаумом, а также их сторонниками в конференции comp.os.minix разгорелся виртуальный спор на тему, какая архитектура лучше — микроядерная или монолитная. Таненбаум утверждал, что за микроядерной архитектурой будущее, и Linux, не успев выйти, уже устарел. С того дня прошло уже почти 20 лет… Кстати, GNU Hurd, который должен был стать ядром операционной системы GNU, разрабатывался тоже как микроядро.

    Мобильный Linux

    Итак, с 1991 года Linux постепенно развивается, и хотя на компьютерах простых пользователей доля Linux пока не велика, на серверах и суперкомпьютерах он уже давно пользуется популярностью, и Windows пытается оттяпать свою долю в этой области. Кроме того, сейчас Linux занял хорошие позиции на телефонах и планшетах, ведь Android — это тоже Linux.

    Логотип Andriod

    История Android началась с компании Android Inc, появившейся в 2003 году, и вроде бы занимавшейся разработкой мобильных приложений (конкретные разработки этой компании в первые годы своего существования до сих пор не особо афишируются). Но уже менее чем через два года компанию Android Inc поглощает Google. Никаких официальных подробностей по поводу того, чем именно занимались разработчики Android Inc до поглощения найти не удалось, хотя уже в 2005 году, после ее покупки Google, поговаривали, что они уже тогда занимались разработкой новой операционной системы для телефонов. Однако, первый релиз Android состоялся 22 октября 2008 года, после чего у него регулярно стали выходить новые версии. Из особенностей развития Android можно было бы назвать то, что на эту систему начались нападки по поводу якобы нарушенных патентов, да и с Java-реализацией там непонятно обстоят дела с юридической точки зрения, но давайте не будем вдаваться в эти не технические передрязги.

    Но Android — не единственный мобильный представитель Linux, кроме него есть еще операционная система MeeGo. Если за спиной Android стоит такая мощная корпорация, как Google, то у MeeGo одного сильного попечителя нет, она разрабатывается сообществом под эгидой The Linux Foundation, которому помогают такие компании как Intel, Nokia, AMD, Novell, ASUS, Acer, MSI и другие. В данный момент основная помощь идет от компании Intel, что не удивительно, так как сам проект MeeGo вырос из проекта Moblin, который был инициирован Intel. Moblin — это такой дистрибутив Linux, который должен был работать на портативных устройствах, управляемыми процессором Intel Atom. Упомянем еще один мобильный Linux — Openmoko. Linux довольно резво пытается укрепиться на телефонах и планшетах, Google c Android за дело взялся серьезно, перспективы же остальных мобильных версий Linux пока туманные.

    Как видите, на данный момент Linux может запускаться на многих системах, управляемыми разными процессорами, однако, в начале 1990-ых годов Торвальдс не верил, что Linux удастся портировать куда-то еще кроме 386-го процессора.

    Mac OS X

    Теперь переключимся на другую операционную систему, также являющейся UNIX-совместимой — Mac OS X. Первые версии Mac OS, вплоть до 9-й, не были основаны на UNIX, поэтому не будем на них останавливаться. Самое интересное для нас началось после изгнания Стива Джобса из Apple в 1985 году, после чего он основал компанию NeXT, которая занималась разработкой компьютеров и софта к ним. В компанию NeXT попал программист Аветис Теванян, который до этого занимался разработкой микроядра Mach для UNIX-совместимой операционной системы, разрабатываемой в Carnegie Mellon University. Ядро Mach должно было заменить собой ядро BSD UNIX.

    Логотип компании NeXT

    Аветис Теванян был лидером команды, разрабатывающей новую UNIX-совместимую операционную систему, которая получила название NeXTSTEP. Чтобы не изобретать велосипед, NeXTSTEP была основана на том же ядре Mach. С точки зрения программирования, NeXTSTEP, в отличие от многих других операционных систем, являлась объектно-ориентированной, огромную роль в ней играл язык программирования Objective-C, который сейчас широко используется в Mac OS X. Первая версия NeXTSTEP была выпущена в 1989 году. Несмотря на то, что NeXTSTEP изначально рассчитывалась на процессоры Motorola 68000, но в начале 1990-ых годов, операционная система была портирована на 80386 и 80486 процессоры. Дела у компании NeXT шли не самым лучшим образом, и в 1996 году компания Apple предложила Джобсу купить компанию NeXT с тем, чтобы использовать NeXTSTEP вместо Mac OS. Здесь еще можно было бы рассказать про соперничество между операционными системами NeXTSTEP и BeOS, закончившееся победой NeXTSTEP, но не будем удлинять и без того длинный рассказ, к тому же BeOS никак не относится к UNIX, поэтому на данный момент она нас не интересует, хотя сама по себе эта операционная система была очень интересной, и жалко, что ее развитие прервалось.

    Через год, когда Джобс вернулся в Apple, при нем продолжилась политика приспособления NeXTSTEP для компьютеров Apple, а еще через несколько лет эта операционная система была портирована на процессоры PowerPC и Intel. Таким образом, серверная версия Mac OS X (Mac OS X Server 1.0) вышла в 1999 году, а в 2001 вышла операционная система для конечных пользователей — Mac OS X (10.0).

    Позже, на основе Mac OS X была разработана операционная система для телефонов iPhone, которая получила название Apple iOS. Первая версия iOS вышла в 2007 году. На этой же операционной системе работает и iPad.

    Заключение

    После всего вышесказанного, у вас может возникнуть вопрос, какую же операционную систему можно считать UNIX? На этот счет нет однозначного ответа. С формальной точки зрения существует Единая Спецификация UNIX — стандарт, которому должна удовлетворять операционная система, чтобы ее можно было называть UNIX. Не путайте со стандартом POSIX, которому может удовлетворять и не UNIX-подобная операционная система. Кстати, название POSIX было предложено все тем же Ричардом Столлманом, а формально стандарт POSIX имеет номер ISO/IEC 9945. Получение единой спецификации — дело дорогое и долгое, поэтому не многие операционные системы с этим связываются. Из операционных систем, получивших такой сертификат можно назвать Mac OS X, Solaris, SCO и еще несколько менее известных операционных систем. Сюда не входят, ни Linux, ни *BSD, но ведь никто не сомневается в их «ЮниксОвости». Поэтому, например, программист и писатель Эрик Реймонд, предложил еще два признака для определения, является ли та или иная операционная система UNIX-подобной. Первый из таких признаков — это «неследственность» исходного кода от первородного UNIX, разрабатываемого в AT&T и Bell Labs. Сюда попадают BSD-системы. Второй признак — «UNIX по функциональности». Сюда попадают операционные системы, которые ведут себя близко к тому, как описано в спецификации UNIX, но не получили формальный сертификат, и, кроме того, никак не связаны с исходниками исходного UNIX. Сюда относится Linux, Minix, QNX.

    На этом мы, пожалуй, остановимся, а то получилось и так слишком много букв. В этот обзор попали в основном истории появления наиболее известных операционных систем — вариаций BSD, Linux, Mac OS X, Solaris, за бортом остались еще некоторые UNIX-ы, такие как QNX, Plan 9, Plan B и некоторые другие. Как знать, может быть в будущем и про них еще вспомним.