хозяин торговой марки Unix - Unix System Laboratory -
фактически ветвь коммерческая. И проект Исследовательского
института Беркли - ветвь в основном свободных - бесплатных
Unix'ов.

System III
System 6

USL <-- Раскол --> Berkeley

System 7 BSD 4.0

Unix V 3.1
Unix V 3.2 <------- BSD 4.2
/ BSD 4.3
System V Release 4 / Заимствования
/ BSD 4.4 Конец проекта Беркли
SVR4.0 < < ____________________________________
SVR4.1
SVR4.2

Не так давно USL таки окончательно "засудила" BSD за
использование фрагментов кода с копирайтом AT&T, что в немалой
степени способствовало закрытию проекта BSD. Предпоследний из
крупнейших поставщиков коммерческих BSD-подобных систем -
Sun/SunOs перешли на линию SVR4. Торжественно и официально
объявлено, что SVR4 является единственным наследником,
объединившим лучшие решения, пришедшие из Unix V и BSD.
Последним из могикан остается DEC: его OSF/1 для Alpha AXP -
немного искалеченный, но все же достаточно близкий к корням BSD
4.3.

&dDUnix'ы для IBM/PC&d@

&dDНекоммерческие или условно бесплатные&d@

BSD/OS 2.0 BSDi/386 Недорогой коммерческий. Хорошо поддерживается.
Поддерживает бинарную совместимость с SCO Unix
386bsd BSD 4.3 для Интелевской платформы
NetBSD производная от 386bsd
FreeBSD 2.1 Самая качественная сеть. Дабы не связываться с
USL, в нем полностью заново переписаны куски ядра,
на которых стоял копирайт AT&T.
Linux 2.0.30 Самый популярный среди бесплатных Unix'ов. Число
инсталляций оценочно между 100 тыс. и 1 млн.
Непрерывное совершенствование силами сотен
добровольцев довело его до уровня довольно надежной,
быстрой, качественной и удобной системы,
пригодной для работы как в качестве графической
рабочей станции, так и интернет-сервера.
Поддерживает больше всех приложений и hardware.
Поддерживает спецификации iBCS, и потому может
выполнять коммерческие приложения для SCO, в
частности, Oracle и Informix.
В Linux реализованы клиент и сервер Netware и Samba.
Эмулятором MS Windows WABI пользоваться очень даже можно.

&dDКоммерческие Unix'ы&d@

UnixWare 2.1 SVR4.2 от SCO. Совместима с Windows и Netware. До
сих пор не доведена до ума сеть.
Поддерживает мультипроцессорные PC.
После того как ее у Novell перекупило
SCO, будущее этой системы перестало для
меня казаться столь уж заманчивым.

Solaris 2.5 SVR4.0 от SunSoft. Совсем как на Sun'е. В принципе,
это должно говорить само за себя. Начиная с
5-й версии в Solaris наконец пришел Motif.
SCO Unix 4.0 SVR3.2 Пока лидер по количеству установок среди
всех Unix'ов для PC. Старая надежная отлаженная
система. Поддерживает достаточно много hardware.
Поддерживает мультипроцессорные PC.
Непомерно дорог. Морально устарел.
Имеет проблемы с русификацией. Медленный.
ISC Unix 3.2 Надежен и компактен в работе. Морально устарел.

&dDUnix'ы, поставляемые производителями компьютеров&d@

Машина Операционная система "Оригинал"
Sun 1,2,10,... SunOS 4.1.2 BSD 4.3
Sun 10,20,1000 SunOS 5.5 SVR4.0
IBM RS/6000 AIX SV 3.2
HP 9000 HP-UX 10 BSD 4.2 & SV 3.2
Sequent Dynix SV 4.0
Motorola 922 SVR4/88 SVR4.0
Беста-88 Bestix SV 3.1
DEC Ultrix BSD 4.2
DEC Alpha AXP OSF/1 BSD 4.3
SGCS Silicon Graphic IRIX 6.0

Выбирая платформу, мы автоматически получаем с ней "ее
собственный" Unix.
С точки зрения удобства и цельности администраторского
управления самые приятные из них - HP-UX 10.20 и AIX.
А самый распространенный - Solaris 2.5 (естественно).
.
&dDКоманды поиска GREP и FIND&d@.

Команда grep/egrep

"фильтрует" строки - оставляя только "подходящие" под шаблон

egrep шаблон [ file ... ]

В шаблон могут входить обыкновенные символы (представляющие
сами себя), а также - спецсимволы, выполняющие служебные
функции шаблона: . * ^ $ [ ]

. - любой произвольный символ
* - "множитель" (предыдущий символ любое число раз)
.* - любая последовательность символов
^шаблон - привязываем шаблон к началу строки
шаблон$ - привязываем шаблон к концу строки
[символы] - любой один символ из тех, что стоят в скобках


Вывести всех привелигированных пользователей:

egrep ':0:0:' /etc/passwd

Вывести всех непривелигированных пользователей:

egrep -v ':0:0:' /etc/passwd

Вывести всех пользователей, имена которых начинаются с букв
a,b,e,d

cat /etc/passwd | grep "^[abed].*"

Команда find.

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

find файл [ ... ] ключи/условия/действия

Ключи-условия команды find:

-name "*.c" - простое имя подходит под шаблон *.c
-type f - брать только обыкновенные файлы
-type d - брать только каталоги
-size +500 - файлы размером БОЛЬШЕ 500*512 байт
-mtime -3 - дата модификации МЕНЬШЕ 3-х дней
-newer filename - дата модификации нашего файла МЕНЬШЕ, чем у
заданного файла filename

ВНИМАНИЕ: Команда find использует стандартные SHELL'овские
шаблоны. Команда grep использует шаблоны другого формата,
называемые регулярными выражениями.

Ключи-действия команды find

-print - просто распечатать маршрутное имя файла
-exec команда над файлом {} \;

Пример.

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

find . -type f -mtime -4 -print

Уничтожить все файлы с окончаниями *.bu, *%, которые не меня-
лись больше месяца.

find / \( -name "*.bu" -o -name "*%" \) -type f \
-atime +30 -exec rm {} \;

запись "rm {} \;" - обозначает команду Unix, которая будет вы-
полняться для всех таких найденных файлов. Вместо значка "{}"
будет подставляться каждый раз имя найденного файла. Естествен-
но, что таким образом мы их все и уничтожим.
.
&dDАрхивирование. Копирование файлов на стриммер&d@

В Unix для этого можно пользоваться двумя утилитами:

tar попроще в использовании, но не все умеет
cpio более гибкая, чем tar, и посложнее.

&dDКоманда tar (Tape Archiver)&d@.

Предназначен для создания архивов на ленте и в файлах.

Ключи: "-c" Create, "-x" eXtract, "-a" Append, "-t" оглавление

tar -cvf arhiw.tar fajl1 fajl2 katalog3 ... - создать архив
tar -tvf /dev/rmt/ctape вывести оглавление ленты
tar -xvf arhiw.tar katalog3/fajl4 извлечь из архива файл
tar -xvf /dev/rmt/ctape архив лежит на магнитной ленте
извлечь с ленты все файлы
tar -avf arhiw.tar fajl5 добавить файл к архиву

Ключи:
"v" Выводить список файлов в длинном формате (Verbose)
"f" Указывает на имя файла

&dDКоманда CPIO. (Copy In/Out)&d@.

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

Сбросить на ленту файлы по списку:

-o - (output) создавать архив.
-H odc - Записывать в "совместимом формате" (чтобы ар-
хив можно было считать на Besta или Sun)
-c - Записывать в "престарелом" совместимом формате

cat spisok | cpio -ovB -H odc > /dev/rmt/ctape1
find katalog -print | cpio -ovc > arhiwnyj-fajl.cpio


Команда cpio -i читает с системного ввода cpio-архив и извлека-
ет из него файлы

# Просмотреть содержание стриммера.
cpio -itB < /dev/rmt/ctape

# Извлечь файлы со стриммера.
cpio -idmvB ["шаблон" ...] < /dev/rmt/ctape

-B Размер блока 5120 байт - стриммерный формат.
-d Создавать каталоги в случае необходимости.
-v Вывести список имен обработанных файлов.
-m Сохранять прежнее время последней модификации.
-f Брать все файлы, кроме указанного шаблоном.
-u Безусловно заменять существующий файл архивным.
-l Где можно, не копировать, а делать ссылки.

&dDАрхивация со сжатием&d@.

Архиваторы tar и cpio, в отличие от DOS-овских архиваторов, не
занимаются компрессией. Чтобы получить сжатый архив, нужно вос-
пользоваться специализированной командой compress или gzip.

Команда compress читает свой системный ввод, а на свой систем-
ный выход подает "прожатые" данные.

Команда zcat ("сжатый cat":-) читает с системного входа "пожа-
тый" файл, а на выход подает "разжатые" данные.

Создать сжатый tar-архив:

tar -cvf - emacs-19.28 | compress > emacs-19.28.tar.Z

Прочитать оглавление сжатого tar-архива:

zcat < emacs-19.28.tar.Z | tar -tvf -

Обратите внимание на ключ минус "-" на том месте, где в tar
нужно указывать имя файла с архивом. Он означает "брать данные
со стандартного входа" (или выводить архив на стандартный вы-
ход).

GNU Zip - достаточно известный упаковщик, имеет степень сжатия
более высокую, чем у compress, почти как у arj или pkzip. Соз-
дать сжатый cpio архив, используя "компрессор" gzip.

find . -print | cpio -ovcaB | gzip > arhiw.gz

Извлечь файлы из сжатого cpio-архива

gunzip < arhiw.gz | cpio -idmv



&dD mt - управление магнитной лентой &d@

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

Чтобы узнать, что она может делать, наберите:

man mt

В SCO Unix программа управления лентой называется "tape"

&dDДругие утилиты архивации&d@

В зависимости от версии Unix могут существовать и другие программы для
бэкапирования и создания архивов.

backup/restore
dump
fbackup/frestore (HP/UX)
pax
. . .
.
&dDНачальная загрузка операционной системы&d@

&dD * Boot-процедура * &d@

Boot, bootstrapping - слова, обозначающие сейчас
"Загрузить/пнуть, процесс начальной загрузки", на самом деле
произошли из английской фразы "Pull itself up by its own boot
straps" (Поднять себя за шнурки собственных ботинок)

Начинается все с Boot-prom'a - небольшой программы, которая
хранится в нестираемой памяти компьютера и начинает
выполняться сразу после включения.

Естественно, boot-prom умеет делать многое: форматировать
диски, инсталлировать операционную систему, запускать тесты
hardware. Однако главное его предназначение - найти на диске и
запустить на выполнение файл /unix - ядро операционной системы.
И своего собственного разума на это ему обычно не хватает,
поэтому он в первую очередь загружает с жесткого диска
"загрузчика операционной системы", а уж тот делает все
остальное.

&dDSUN&d@

Boot-prom загружает "BOOT BLOKS" - 1-ю ПРОГРАММУ НАЧАЛЬНОЙ
ЗАГРУЗКИ. "boot-bloks" расположены в 1-15 секторах раздела,
содержащего корневую файловую систему "/". Обычно корневая
файловая система располагается на разделе номер 0.
"Boot- blocks" можно записать на корневой раздел
загрузочного диска (обычно это внутренний диск со SCSI-номером
3) командой installboot. Для этого выполняется что-нибудь
такое:

installboot /dev/rdsk/c0t3d0s0

Boot-blocks "умеет читать" формат файловой системы unix -
ufs . Он находит на корневой файловой системе файл "/ufsboot"
- 2-Ю ПРОГРАММУ НАЧАЛЬНОЙ ЗАГРУЗКИ - и загружает ее.

/ufsboot находит ядро /kernel/unix и загружает его.

Ядро Unix загружается в оперативную память. Затем подключает
дополнительные загружаемые модули с драверами устройств. Как только ядро
"набирает" достаточное количество драверов, чтобы самостоятельно
смонтировать корневую файловую систему, оно тут же это и делает, после чего
начинает действовать самостоятельно, не используя кода начальных
загрузчиков.

Перехват в boot-prompt:

STOP+A

Загрузка в single user:

bo: boot -s

&dDMotorola 922&d@.

Boot-prom загружает с диска ЗАГРУЗЧИК - файл /stand/boot,
Загрузчик загружает ядро /stand/unix

Поскольку boot-prom не в состоянии вместить кода для
работы со стандартной unix'овской файловой системой, файлы unix
и boot лежат в отдельном разделе жесткого диска - разделе
/stand. На нем создана "ОЧЕНЬ ПРОСТАЯ ФАЙЛОВАЯ СИСТЕМА" bfs
(Boot File System), чтобы boot-prom'у было полегче найти и
считать с диска загрузочные файлы.

Перехват в boot-prompt:

После того как на консоли появится сообщение: "Idle MPU: none"
нажать клавишу ПРОБЕЛ

Загрузка в single user:

Во время начальной загрузки на несколько секунд
появляется приглашение: "Press _что-то_to enter system_maintence.
Нажать требуемую клавишу

&dDLinux&d@.

BIOS загружает блок начальной загрузки активного раздела.

Он грузит загрузчик LILO (LInux LOader). Lilo загружает
файл /vmlinuz

Параметры начальной загрузки записываются в файле
/etc/lilo.conf После любых изменений в этом файле необходимо
выполнить команду

lilo

Перехват в Lilo-prompt:

Left_ALT сразу после появления сообщения "Lilo ..."

Загрузка в single user:

Lilo: linux root=/dev/hda2 single

Загрузка в еще более single user:

Lilo: linux init=/bin/sh
mount -n -o remount /dev/hda2 /
insmod de4x5
ifconfig eth0 195.232.171.30
route add -net 195.232.171.0 gw 195.232.171.30
insmod nfs

&dDHP-UX&d@

В ПЗУ HP 9000 проживает "PDC" - "Processor Dependent Code"
- чтоб поговорить с ним, надо нажать клавишу ESC в первые
секунды загрузки.

На загрузочном диске есть Boot-раздел формата LIF
(линейная файловая система) В LIF-томе 4 "файла"

ISL - "операционная" программа
HPUX - собственно загрузчик ядра
AUTOBOOT - текстовый файл, в котором написано имя ядра по
умолчанию

Итак: PDS вызывает ISL командой

bo scsi.6.0 isl

ISL загружает ядро командой

hpux /stand/vmunix

Перехват в PDC-prompt:

Нажать ESC в первые 10 секунд

Загрузка в single user:

PDC> bo pri isl
ISL> hpux -is /stand/vmunix

&dD * Процесс init * &d@

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

Все дальнейшие действия в системе определяются этим процессом.
Все, что нужно делать init-у, определяет специальная таблица.

Процесс init всегда находится на каком-либо "УРОВНЕ ВЫПОЛНЕНИЯ".
Уровень выполнения определяет состояние и поведение всей систе-
мы. Уровень обозначается цифрой (или буквой) 0,1,2,3,4,5,6,s,S

0 - prom монитор - Полный останов системы;
1, s, S - single user mode. Однопользовательский режим;
2 - многопользовательский режим без NFS-сервера;
3 - многопользовательский режим с NFS-сервером;
6 - перезагрузка;


&dD * Примерный фрагмент управляющей таблицы /etc/inittab * &d@

bchk::sysinit:/etc/bcheckrc/dev/console 2>&1
brc::sysinit:/etc/brc > /dev/console 2>&1
is:3:initdefault:
rc:12345:wait:/etc/rc > /dev/console 2>&1
r0:0:wait:/etc/rc0 > /dev/console 2>&1
r2:23:wait:/etc/rc2 > /dev/console 2>&1
r3:3:wait:/etc/rc3 > /dev/console 2>&1
pf:12345:powerfail:/etc/powerfail > /dev/console 2>&1
co:12345:respawn:/etc/sysmonitor console console
t1:23:respawn:/etc/sysmonitor tty01 9600
t2:23:off:/etc/sysmonitor tty02 9600

Формат таблицы:

ИМЯ:Уровни_выполнения:вид_действия:запускаемая команда

ИМЯ: - просто имя строчки - они все должны быть разными
вид_действия:

sysinit запустить один раз после начальной загрузки;

на соответствующем уровне выполнения:
wait - запустить один раз и дожидаться, пока не окончится;
respawn - запустить параллельно, а если окончится, перезапус-
кать снова;
off - ничего не делать (просто игнорировать эту строку).


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


Сперва init запускает процессы, которые "sysinit"

Отработав все строки "sysinit" уровня, init идет все
дальше по /etc/inittab и обнаруживает строку initdefault 3 -
она заставляет его "перейти" на уровень 3.

&dD * Run Command - стандартные RC-каталоги запуска * &d@

Перейдя на уровень выполнения 3, init и отрабатывает
первую встретившуюся строчку с уровнем "3" - запускается
командный файл /etc/rc2 - загляните в него. Там все просто:
/etc/rc2 берет и выполняет командные файлы /etc/rc2.d/S*,
лежащие в каталоге /etc/rc2.d. Каждый файл выполняется с
параметром "start"

Отработав /etc/rc2, init точно таким же образом запускает
файл /etc/rc3. Вслед за этим он запускает несколько процессов
sysmonitor - по одному на каждый имеющийся терминал. Это те
самые процессы, которые говорят на терминал: "Login: "
Пользователь, войдя на терминал, некоторое время работает, но
как только он "уходит" из системы, на указанном терминале
ничего не остается. init тут же выполняет действие "respawn" -
перезапускает на терминал sysmonitor - и опять жизнерадостное
"Login: " появляется на терминале.

&dDLinux Slackware&d@

По умолчанию init устанавливает уровень выполнения 5.
При начальной загрузке отрабатывается файл
/etc/rc.d/rc.S

Затем для перехода в многопользовательский режим
/etc/rc.d/rc.M
из которого запускаются файлы
/etc/rc.d/rc.inet1 устанавливающий сетевые интерфейсы
/etc/rc.d/rc.inet2 запускающий сетевые сервисы
/etc/rc.d/rc.local запускающий несколько полезных программ и
демонов - например, поддержка мыши, httpd,
русификация консоля и т.п.

&dDLinux RedHat&d@

Используется стандартная технология rc-файлов System V

RC-каталоги:
/etc/rc.d/rc[0123456].d/
/etc/rc.d/init.d/

Конфигурационные параметры для RC-команд:
/etc/sysconfig/

&dDHP-UX 10.20&d@

Не смотря на BSD-евое происхождение, используется стандартная
технология rc-файлов System V

RC-каталоги:
/sbin/rc[0123].d/
/sbin/init.d/

Конфигурационные параметры для RC-команд:
/etc/rc.defaults.d/

&dDSVR4: SUN, Motorola&d@

Используется стандартная технология rc-файлов System V

RC-каталоги:
/etc/rc[0123456].d/
/etc/init.d/
.
&dDUnix, базовые принципы и особенности&d@.

Все системные действия выполняет ядро операционной системы
Unix. Ядро - обычный выполняемый файл, расположен в файле /unix
или /stand/unix или /vmunix или /vmlinuz (в зависимости от кон-
кретной реализации). Можете посмотреть размер этого файла - не
маленький. При начальной загрузке системы ядро целиком загружа-
ется в оперативнную память и в дальнейшем резидентно находится
в ней, выполняя все необходимые работы.

Что входит в ядро.

ДРАЙВЕРЫ УСТРОЙСТВ. И тех, которые есть, и тех, которых нет, но
могут быть, а также и такие, которые никогда вам не
понадобятся.

УПРАВЛЯЮЩИЕ ПОДПРОГРАММЫ: части кода, ответственные за
обеспечение работы пользовательских программ - разделение
времени и прочих ресурсов системы.

СЛУЖЕБНЫЕ ТАБЛИЦЫ И ДАННЫЕ ЯДРА: таблицы текущих процессов, от-
крытых файлов, управляющие структуры...

СИСТЕМНЫЕ ВЫЗОВЫ. (То, что MS-DOS называется "21 прерывание",
можно считать некоторой аналогией/пародией на системные
вызовы.) С точки зрения программиста это обычная си-шная
функция, только выполняет она системно-зависимые действия,
например: прочитать данные из файла, установить сетевое
соединение, создать каталог, и т.д. и т.п. Все системные вызовы
( а всего их более 1500 штук ) вкомпилированы в тело ядра Unix.
Пользовательские программы, вызывающие функции, являющиеся
системными вызовами, на самом деле содержат только jump'ы на
соответствующие адреса памяти в ядре. В пользовательскую
программу системные вызовы не влинковываются.

Что находится в оперативной памяти.

ЯДРО ОПЕРАЦИОННОЙ СИСТЕМЫ.

БУФЕРНЫЙ КЭШ. Часть оперативной памяти резервируется под кэши-
рование чтения и записи на диск. Любая операция чтения с диска
приводит к тому, что прочитанные блоки помещаются в буферный
кэш, а из него уже передаются запросившим данные программам.
Если блок попал в кэш, то все последующие обращения к нему бу-
дут получать образ блока из кэша, причем независимо от того -
та же самая программа обращается к блоку или какая-либо дру-
гая. Кэшируется также и запись на диск, опять же, разделяемая
между всеми выполняемыми программами.

ПРОЦЕССЫ. Процессом в Unix называется выполняющаяся программа.

Средства экономии памяти. Виртуальная память.

РЕЕНТЕРАБЕЛЬНОСТЬ КОДА. Когда одна и та же программа(выполня-
емый файл) запущена в нескольких экземплярах, то в оперативную
память загружается только одна копия выполняемого ассемблерного
кода на всех. Каждый выполнямый процесс использует один и тот
же текст программы, просто у каждого процесса имеется свой соб-
ственный указатель на текущий оператор.

РАЗДЕЛЯЕМЫЕ БИБЛИОТЕКИ. (В Windows есть похожее понятие DLL -
динамически подгружаемая библиотека). Некоторое количество час-
то выполняемых функций (например, printf, да и много других)
оформляется в виде специальным образом подготовленной библиоте-
ки (SHARED LIBRARY). При компиляции программы, использующей
разделяемые библиотеки, эти функции не линкуются внутрь кода
программы. Они "выдергиваются" из библиотеки на стадии
выполнения программы. Этим мы экономим место на диске и в
оперативной памяти: в программах отсутствует код разделяемых
функций, а в оперативной памяти эта функция присутствует в
одном экземпляре на всех.

SWAPING. Каждый Unix-процесс функционирует в своем собственном
32-х битном виртуальном адресном пространстве, не пересекающем-
ся с другими. Адресное пространство процесса может быть боль-
шим, чем физическая оперативная память. Виртуальная память под-
держивается с помощью PAGING'а - разрешения виртуальных адресов
в физические "на лету", с подкачкой отсутствующих страниц
памяти со swap-области на жестком диске.

На самом деле SWAPING'а как такового в Unix'е нет, вместо него
применяется гораздо более гибкий PAGING. (swaping - по опреде-
лению, это ПОЛНАЯ выгрузка программы на swap-область с целью
освобождения места в оперативной памяти).

Область памяти, занятая программой, разделена на три части: TEXT
(выполняемые коды программы), DATA (статические данные програм-
мы), STACK (динамические данные). Когда операционка освобождает
место в памяти за счет TEXT'а, то она не занимается сбросом
его на диск. Она сразу помечает его как свободный. Действи-
тельно, когда потребуется загрузить TEXT обратно в память, его
можно будет взять из самого выполняемого файла с программой.
Такая экономия имеет один побочный эффект. Файл программы, ко-
торая в данный момент выполняется, невозможно уничтожить. Опе-
рационная система сообщит в этом случае: "text file busy", и
откажется выполнять удаление.

БИТ НАВЯЗЧИВОСТИ. (sticky bit). Выполняемая программа может
иметь дополнительный атрибут. Так называемый "бит навязчивос-
ти". Когда такая программа заканчивает выполнение, операционка
(по возможности) старается не занимать память, в которой нахо-
дился текст программы. Соответственно, повторный ее запуск про-
изойдет очень быстро - ведь программа все еще загружена в па-
мять, ее не требуется зачитывать с диска. Нужно просто передать
на нее управление.

&dDФайловая система Unix&d@.

Файловая система в Unix - "деревянная", состоит из файлов и
каталогов. На каждом разделе диска создается собственная неза-
висимая файловая система. Отдельные файловые системы "сцепляют-
ся" вместе, в единое общее дерево директорий. Такая операция
называется "монтированием". Выглядит это примерно так:

mount -F ufs /dev/dsk/m197_c0d0s5 /home1
mount -F ufs /dev/dsk/m197_c0d0s4 /usr
df

Получить доступ к файлам "несмонтированной" файловой системы
невозможно. Порочная пракика MS-DOSа - сколько разделов, столь-
ко и "дисков" ( a: b: c: d: e: ... k: l: m: n:) в Unix не при-
меняется. В Unix всегда есть ровно одно общее дерево каталогов,
и, по большому счету, пользователям совершенно все равно, на
каком именно диске или разделе диска расположены его файлы
/usr/spool/moshkow или /home1/moshkow/bin/mcopy ...

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

При каждой начальной загрузке Unix проверяет - корректно ли бы-
ла выключена машина в прошлый раз, и если нет - автоматически
запускает утилиту fsck (File System Check) - проверку и ремонт
файловых систем..

&dDВнутренняя структура файловой системы Unix&d@.

Раздел диска, в котором создана файловая система, разбит на три
части.

СУПЕРБЛОК. Занимает 1 Kb.
Содержит служебную информацию:
Тип файловой системы,
Размер
Начало списка свободных блоков.
. . . что-то еще

ОБЛАСТЬ INOD-ов. Занимает примерно 8% общего размера раздела.
inode - Index-node - описатель файла. Он содержит всю информа-
цию о файле, за исключением имени файла, и собственно данных
файла. В inod'е хранится:

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

ОБЛАСТЬ ДАННЫХ. В этой области расположенвИРТУАЛЬНАЯЯы блоки с данными фай-
лов. Незанятые блоки провязаны в СПИСОК СВОБОД-
НЫХ БЛОКОВ

Файлы бывают двух основных типов. ФАЙЛ, КАТАЛОГ.

ФАЙЛ - он и есть файл.

КАТАЛОГ - файл фиксированного формата: состоит из строчек с
именами файлов, входящих в каталог

имя_файла1 Номер_Инода1
имя_файла2 Номер_Инода2
. . .

Чтобы получить доступ к файлу по имени, операционная система
1. находит это имя в каталоге, содержащем файл,
2. берет Номер_Инода файла,
3. по номеру находит inod в области inod'ов,
4. из inod'а берет адреса блоков, в которых расположены данн-
ые файла,
5. по адресам блоков считывает блоки из области данных.
Все.

Формат индексного описателя файла.

Область инодов разбита на 64-х байтные структуры - inod'ы.
В inod'е хранится:

Тип файла (файл/каталог/специальный файл/fifo/socket)
Атрибуты (права доступа)
Владелец файла
Группа-владелец файла
Времена создания, модификации, последнего доступа к файлу
Длина файла
Адрес 1-го блока файла
Адрес 2-го блока файла
...
Адрес 10-го блока файла
Адрес блока косвенной адресации (блока с 256 адресами блоков)
Адрес блока 2-й косвенной адресации
(блока с 256 адресами блоков с адресами)
Адрес блока 3-й косвенной адресации
(блока с адресами блоков с адресами блоков с адресами)

Точный формат структуры файловой системы см.
man fs
.
&dDСпециальные файлы&d@

В Unix помимо обычных файлов и каталогов существуют еще и спе-
циальные файлы. Они используются для обозначения физических ус-
тройств компьютера. (Железок). В сущности, что такое файл? Это
"нечто", куда можно записывать данные как последовательность
байтов и считывать их оттуда. И, значит, вполне естественным
выглядит, например, файл /dev/console - соответствующий кон-
сольному терминалу. Все, что выводится в файл /dev/console,
будет просто появляться на экране терминала. При попытке чтения
из файла /dev/console вы будете получать (внимание!) не то,
что нарисовано в данный момент на экране, а то, что вводится с
клавиатуры. Попробуйте выполнить команды

su
echo Привет > /dev/console
cat /dev/console

Ctrl-C

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