Дмитро Ю. Карпов
Цей опус не претендує на повноту опису. Більш того, з метою спрощення свідомо опущені деякі подробиці. Спочатку цикл замислювався як FAQ (ЧаВо - часто задаються), але мабуть вийде "Курс молодого бійця" або "сержантського школа".
Я спробував дати порівняльне опис різних операційних систем - саме цього на мій погляд не вистачає більшості підручників і технічних посібників.
Не чекаючи викриття з боку досвідчених Unix'оідов, роблю добровільне визнання - я не можу претендувати на роль великого знавця Unix, а мої знання в основному навколо FreeBSD. Сподіваюся, це не завадить.
Цей файл ще довго буде перебувати в стані "under construction". -)
Unix - повноцінна, спочатку розрахована на багато користувачів, багатозадачна і багатотермінальних операційна система. Точніше, це ціле сімейство систем, майже повністю сумісних один з одним на рівні вихідних текстів програм.
Які бувають Unix'и і на яких машинах вони запускаються?
SCO Unix (Santa Cruz Operation)
Novell UnixWare (куплена SCO)
Interactive Unix (куплений Sun)
i * 86, Motorolla 680 * 0, DEC Alpha, IBM POWER-PC, Sun Sparc.
Сімейство BSD: BSDI, FreeBSD, NetBSD, OpenBSD
i * 86, Acorn ARM, Sun Sparc.
IBM RS / 6000 і AS / 400 на POWER-PC
Digital Unix (раніше Unix OSF / 1)
Цей список не претендує на повноту, бо крім перерахованих є ще безліч менш поширених Unix'ов і Unix-подібних систем, не кажучи вже про древніх UNIX'ах для застарілих машин.
Умовно можна виділити сімейства System V і Berkeley. System V (читається "System Five") має кілька варіантів, останній за моїми відомостями System V Release 4. Університет Berkeley славний не тільки розробкою BSD, а й більшості протоколів Internet. Втім, багато Unix'и поєднують властивості обох систем.
Де взяти безкоштовний Unix?
Які основні відмінності 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'и поступаються 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.Unix функціонує як на PC, так і на потужних робочих станціях з RISC-процесорами, під Unix написані дійсно потужні САПР та геоінформаційні системи. Своєю масштабністю Unix через йогобагатоплатформеність на порядок перевершує будь-яку іншу операційну систему з відомих мені.
Основні поняття Unix
Unix базується на двох основних поняттях: "процес" і "файл". Процеси являють собою динамічну сторону системи, це суб'єкти; а файли - статичну, це об'єкти дії процесів. Майже весь інтерфейс взаємодії процесів з ядром і один з одним виглядає як запис / читання файлів. / * Хоча треба додати такі речі, як сигнали, Колективна пам'ять і семафори. * /
Процеси не можна плутати з програмами - одна програма (як правило з різними даними) може виконуватися в різних процесах. Процеси можна вельми умовно розділити на два типи - завдання і демони. Завдання - це процес, який виконує свою роботу, прагнучи швидше закінчити її і завершитися. Демон чекає подій, які він повинен обробити, обробляє події, що відбулися і знову чекає; завершується він як правило за наказом іншого процесу, найчастіше його вбиває користувач, давши команду "kill номер_процесса". / * У цьому сенсі виходить, що інтерактивна завдання, обробна введення користувача, скоріше схожа на демона, ніж на завдання. -) * /
У старих UNIX'ах відводилося 14 букв на ім'я, в нових це обмеження зняте. В директорії крім імені файлу знаходиться його ідентефікатора inode - ціле число, яке визначає номер блоку, в якому записані атрибути файлу. Серед них: номер користувача - господаря файлу; номер групи; кількість посилань на файл (см.далее) дати і час створення, останньої модифікації і останнього звернення до файлу; атрибути доступу. Атрибути доступу містять тип файлу (см.далее), атрибути зміни прав при запуску (см.далее) і права доступу до нього для господаря, одногрупника і інших на читання, запис і виконання. Право на стирання файлу визначається правом запису в вищерозміщених директорію.
Є ще одна цікава особливість файлової системи: якщо після створення файлу запис в нього йшла не підряд, а з великими інтервалами, то для цих інтервалів місце на диску не виділяється. Таким чином сумарний об'єм файлів в розділі може бути більше обсягу розділу, а при видаленні такого файлу звільняється менше місця, ніж його розмір.
Файли бувають наступних типів:- звичайний файл прямого доступу;
- директорія (файл, який містить імена і ідентефікатора інших файлів);
- символьний лінк (рядок з ім'ям іншого файлу);
- блоковий пристрій (диск або магнітна стрічка);
- послідовне пристрій (термінали, послідовні і паралельні порти; диски та магнітні стрічки теж мають інтерфейс послідовного пристрою)
- пойменований канал.
- tty * - термінали, в т.ч.
- ttyv - віртуальна консоль;
- ttyd - DialIn термінал (зазвичай послідовний порт);
- cuaa - DialOut лінія
- ttyp - мережевий псевдо-термінал;
- tty - термінал, з яким асоціюється завдання;
- wd * - жорсткі диски і їх підрозділи, в т.ч.
- wd - жорсткий диск;
- wd s - розбиття цього диска (іменована тут "slice");
- wd s - розділ партіціі;
- fd [] - floppy-диск;
- rwd *, rfd * - те ж саме, що wd * і fd *, але з послідовним доступом;
На відміну від 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 імя_команди". На екран це буде видаватися через програму "more" - подивіться, як з нею управлятися на вашому Unix'е командою `man more`.