-
Некоторые
вопросы о UNIX
О чем это я?
Этот опус не
претендует на полноту описания.
Более того, в целях упрощения
сознательно опущены некоторые
подробности. Сначала цикл
задумывался как FAQ (ЧаВо - часто
задаваемые вопросы), но видимо
получится "Курс молодого бойца"
или "Сержантская школа".
Я попытался дать
сравнительное описание разных
операционных систем - именно этого на
мой взгляд не хватает большинству
учебников и технических пособий.
Не дожидаясь
разоблачения со стороны опытных Unix'оидов,
делаю добровольное признание - я не
могу претендовать на роль великого
знатока Unix, а мои знания в основном
вокруг FreeBSD. Надеюсь, это не помешает.
Этот файл еще
долго будет находиться в состоянии
"under construction". :-)
Что такое Unix?
- Unix -
полноценная, изначально
многопользовательская,
многозадачная и многотерминальная
операционная система. Точнее, это
целое семейство систем, почти
полностью совместимых друг с
другом на уровне исходных текстов
программ.
Какие бывают
Unix'ы и на каких машинах они
запускаются?
Unix |
платформа |
SCO Unix
(Santa Cruz Operation) |
i*86 |
Novell
UnixWare (куплена SCO) |
i*86 |
Interactive
Unix (куплен Sun) |
i*86 |
Linux |
i*86,
Motorolla 680*0, DEC Alpha, IBM POWER-PC, Sun Sparc, ??? |
Семейство
BSD: BSDI, FreeBSD, NetBSD, OpenBSD |
i*86,
Acorn ARM, Sun Sparc, ??? |
Solaris |
Sun
Sparc, i*86 |
AIX |
IBM
RS/6000 и AS/400 на POWER-PC |
IRIX |
SGI MIPS |
Digital
Unix (ранее Unix OSF/1) |
DEC
Alpha |
HP-UX |
Hewlett-Packard
PA-RISC |
- Этот список не
претендует на полноту, ибо кроме
перечисленных есть еще множество
менее распространенных Unix'ов и Unix-подобных
систем, не говоря уже о древних Unix'ах
для устаревших машин.
- Условно можно
выделить семейства System V и Berkeley. System
V (читается "System Five") имеет
несколько вариантов, последний по
моим сведениям System V Release 4.
Университет Berkeley славен не только
разработкой BSD, но и большинства
протоколов Internet. Впрочем, многие
Unix'ы сочетают свойства обеих
систем.
Где взять
бесплатный Unix?
FreeBSD База - www.freebsd.org;
есть также на ftp.kiae.su/FreeBSD/*-RELEASE/ и
еще во множестве мест
OpenBSD ftp.openbsd.org
Linux ftp.cs.msu.su/pub/Os/Linux/Slachware_3.1/
SCO По моим сведениям, в Internet
недоступен, но можно получить
лицензию на бесплатное
использование. Обратитесь на
www.sco.com
Каковы
основные отличия 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<цифра>
- жесткий диск;
- wd<цифра>s<цифра>
- партиция этого диска (именуемая
здесь "slice");
- wd<цифра>s<цифра><буква>
- раздел партиции;
- 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`.
-
+--------\ * Гвардии * /--------+
| || || | Младший Сержант | || || |
+--------/ Дмитрий Ю. Карпов \--------+
-
This page is located at vt.miem.edu.ru
Updated: Saturday, 16-Sep-2000 15:42:30 MSD
About bugs mail to WebMaster or
WebMaster
|