- •Место ос в структуре компьютера
- •Операционная система как менеджер ресурсов
- •Ос построенные на принципах unix
- •Свободное по
- •Многообразие операционных систем
- •Функциональные компоненты ос автономного компьютера
- •Архитектура ос. Ядро и вспомогательные модули ос
- •Многослойная структура ос. Структура ядра.
- •Средства аппаратной поддержки ос
- •Переносимость операционной системы. Требования
- •Вытесняющие и невытесняющие алгоритмы планирования
- •Типы доступных командных интерпретаторов в ос unix. Как можно узнать какой командный интерпретатор используется в данный момент?
- •Можно выделить несколько основных типов документации:
- •Знать команды и уметь использовать.
- •Перемещение по файловой системе.
Знать команды и уметь использовать.
Нижче наведено декілька команд для керування файлами та каталогами.
Команди ls, dir, vdir – показують зміст каталогів. У них можливе використання ключів:
-a – показувати всі файли, зокрема таких, що починаються з точки;
-l – повна інформація про файли;
-m – імена файлів через кому;
-p – символ типу файлу;
-x – сортування.
Команда cat друкує вміст файлів у стандартний потік виводу.
Команда cp – копіює файли; має такі ключі:
-d – копіювати символьні зв’язки;
-f – видаляти наявні файли;
-i – запитувати про видалення наявних файлів;
-l - створювати твердий зв’язок.
Команда rm видаляє вказаний файл. За замовчуванням не видаляє каталогів. Якщо файл помічений як такий, що призначений тільки для читання, то запитує підтвердження. Має ключі:
-d – видаляти каталоги (тільки для користувача root);
-i – запитувати щодо кожного файла;
-r – видаляти зміст вкладених каталогів;
-v – друкувати імена файлів, які видаляються.
rmdir – видаляє порожні каталоги.
mkdir – створює каталоги.
Команда df сумує вільний простір диска. Якщо немає імені файлу, то показує загальний простір змонтованої системи. Розмір указується в блоках 512 байт або 1КБ.
Команда cd встановлює поточний шлях.
Команда pwd видає поточний шлях.
Команда du показує простір диска, зайнятий під файли каталогу, включаючи підкаталоги (з ключем -a показує кожний файл).
У командах оболонки можна вказувати множини файлів, використовуючи спеціальні метасимволи:
- „* ” – будь-яка кількість будь-яких символів в імені;
- „?” – один будь-який символ;
- [abc] – один символ з указаної множини („a”, або „b”, або „c”).
Перемещение по файловой системе.
Кожна команда Unix може розглядатися як „чорна скринька”, що має вхід для даних і два виходи – стандартний та помилок. За умовчанням вхід асоційований зі стандартним пристроєм введення (клавіатурою консолі), а обидва виходи – зі стандартним пристроєм виведення (дисплей консолі). Входи та виходи команди можна переключати (перенаправляти) до інших пристроїв або файлів.
Переключення вихідного потоку команди здійснюється за допомогою символу ">". Наприклад, можна перенаправити вихід команди ls у файл filelist:
ls > filelist
При цьому вихідні дані команди будуть виводитися не в стандартний потік консолі, а у файл з указаним іменем.
Використання символів ">>" дозволяє додавати вихід команди до змісту наявного файла.
ps >> filelist
Переключення стандартного вводу здійснюється символом "<", при цьому, ввід здійснюється з указаного файлу, наприклад:
sort < filelist.
Програмні канали дозволяють здійснювати безпосередню взаємодію процесів, не використовуючи допоміжні файли. У командній оболонці можна організовувати конвеєри команд, які будуть виконуватися одночасно, при цьому кожна попередня команда передаватиме результати роботи на вхід наступної. Для визначення конвеєра необхідно записати назви команд через символ " | ", наприклад:
cat file, file2, file3 | sort > file4 (з’єднання трьох файлів з передачею результату у команду сортування рядків з подальшим занесенням у файл file4).
У конвеєрах часто використовуються нижченаведені команди:
wc – підраховує кількість рядків, слів і символів з вхідного потоку;
grep „шаблон” – шукає на вході рядок, що відповідає шаблону;
sort – сортує вхідний потік за алфавітом (-r – у зворотному порядку; -f – без урахування регістру);
cmp – знаходить місце першої різниці у файлах;
diff – знаходить всі різниці у файлах;
ps – видає список активних процесів (-l - повна інформація);
who – видає список користувачів, що працюють у системі;
more – приймає вхідний потік і видає його посторінково.
vi – це традиційний текстовий редактор, який включений до будь-якого дистрибутиву UNIX. Цей редактор викликається командою vi та функціонує у двох режимах – редагування та команд. Для переведення редактору у режим редагування необхідно натиснути клавішу “Esc” та одну з комбінацій клавіш для початку редагування, наприклад “A”. У режимі команд редактор виконує певні команди – відкриття файлу, його зберігання, вихід з редактору та інше. Для переходу у режим команд необхідно натиснути клавішу “Esc”, потім „ : ”. Після цього можна давати команди редактору, наприклад „:w letter” – запис тексту у файл letter.
До базових завдань з адміністрування ОС Unix відносять ведення облікових записів користувачів системи, встановлення прав доступу до файлів, керування файловими системами та процесами.
У системі можуть виконувати дії тільки ті користувачі, які мають обліковий запис та здійснили вхід до неї. Всі облікові записи користувачів системи зберігаються в файлі /etc/passwd у такому форматі:
ім’я_користувача: пароль: ідентифікатор_користувача: ідентифікатор_групи: коментар: каталог_користувача: оболонка_користувача
Користувач може бути включеним до однієї або кількох груп безпеки. Облікові записи груп безпеки та їх склад зберігаються у файлі /etc/group у такому форматі:
ім’я_групи: пароль_групи: ідентифікатор_групи: список_членів_групи
Встановлення прав доступу.
Для кожного файла існують права доступу, що визначені для трьох категорій суб’єктів: володаря файла, членів групи, до якої належить володар, і інших користувачів.
Існує три типи прав: читання (r); запис (w); запуск на виконання (x). Права доступу користувача до файлу зберігаються у дескрипторі файлу у вигляді маски доступу наступного формату:
rwx rwx rwx
| | |
володар група інші.
Користувачеві надається право на здійснення операції, якщо воно дозволено для будь-якої категорії, до якої належить користувач. Група файлу та його володар зберігаються у дескрипторі файлу та можуть бути змінені адміністратором або поточним володарем файлу за допомогою команд chgrp та chown.
Для встановлення прав використовується команда
chmod <режим> <файл>
u – володар; + – додати; g – група; - – прибрати;
o – інші; r – читання;
a – все; w – запис;
= – призначити; x – запуск.
Приклад:
chmod a=r, u+w file1 file2
або
chmod u=rw, go=r file1 file2.
Керування процесами.
Для керування процесами у командній оболонці використовуються команди:
ps – видача списку активних процесів (-l – повна інформація);
nice – запуск процесу з низьким пріоритетом.
Після будь-якої команди можна поставити символ "&", наприклад nice cat * > file.doc &. При цьому оболонка не очікує закінчення команди, а переходить до прийому наступної.
at – дозволяє задати запуск процесу у визначений момент часу, наприклад: at 2300 jun 16 <команда>.
fsck – перевіряє цілісність файлової системи.
write <ім’я адресату> <повідомлення> – посилає повідомлення визначеному користувачу.
За постійним використанням у командній оболонці SHELL певної послідовності команд, можна оформити її у вигляді окремого командного (пакетного) файлу, який можна запускати на виконання, в тому числі з параметрами.
Командний файл є звичайним текстовим файлом, який містить команди SHELL.
Наприклад, створимо файл lists:
cd /etc
echo "User list"
cat passwd
echo "Group list"
cat group
Створений файл можна запускати шляхом переключення вхідного потоку оболонки SHELL на командний файл.
sh < lists чи sh lists.
Можна також запускати командний файл, зробивши його таким, що виконується:
chmode o+x lists.
Змінні SHELL.
Змінні створюються та ініціюються шляхом привласнення ідентифікатора змінній будь-якого рядкового значення: string=something.
Значення, що привласнюється, має називатися одним словом, і його необхідно брати в лапки, якщо воно вміщує метасимволи, які не потрібно обробляти.
Для огляду змінної можна використовувати команду echo, при цьому ім’я змінної починається із символу $, наприклад echo $stroka
Команда set показує значення всіх змінних.
Приклад використання змінної для зберігання шляху:
path1='pwd' {запам’ятаємо поточний шлях}
cd /temp {переходимо в інший каталог}
ls $path1 {проглядаємо зміст попереднього каталогу}
copy $path1/*.bak /temp {копіюємо файли в каталог temp }
До командного файла можна передавати аргументи через нумеровані змінні $1...$9. Нумеровані змінні набувають значеннь, які вказуються при виклику команди в порядку їх розташування.
Наприклад, створимо команду для привласнення прав на запуск заданому файлу (файл cm):
chmode o+x $1.
При виклику передамо в ролі значення параметра ім’я файла:
cm lists
У мові SHELL UNIX існують конструкції циклу та вибору. Ці конструкції мають особливості, зумовлені інтерактивністю оболонки й орієнтовані на роботу з командами мови та файлами.
Конструкція циклу for:
for <змінна> in <список_слів>
do
<тіло циклу>
done
Ця команда послідовно призначає всі значення зі списку слів у змінну, виконуючі кожний раз команди в тілі циклу, наприклад:
for i in *
do
echo -------- file $i --------
cat $i
done
Ця програма друкує зміст усіх файлів поточного каталогу з додаванням заголовка з іменем файла.
Конструкція циклу while:
while <команда>
do
<тіло циклу>
done
Цикл, що задається цією командою, виконується, доки успішно виконується команда біля while.
Конструкція циклу until:
until <команда>
do
<тіло циклу>
done
Цикл, що задається цією командою, виконується доки результат виконання команди буде неправильним.
Конструкція вибору if:
if команда
then <команда1>
else <команда2>
fi
Якщо команду виконано успішно, виконується команда 1, інакше – команда 2.
Конструкція вибору case:
case слово in
шаблон) команда1 ;;
шаблон) команда2 ;;
...
esac
Слово порівнюється з усіма шаблонами та виконує команду, що знаходиться після першого збігу шаблону.
Конструкція обчислень expr.
Команда виконує арифметичні дії та надсилає результат до стандартного виводу, наприклад:
expr 34 + 45 + 67
var = 'expr 34 + $1'
Може містити такі операції:
+ - '*' / %
Породження процесів в UNIX здійснюється за допомогою системного виклику fork(), який створює точну копію процесу, що породив даний. При цьому, fork повертає у батьківський процес значення ідентифікатору PID нового процесу, а в новий процес – 0. Завантажити в адресний простір процесу новий код можна, використовуючи системний виклик exec(). Завершити процес можна за допомогою системного виклику exit(). Прийом параметрів у процес здійснюється через аргументи argc та argv, які вміщують кількість і значення параметрів відповідно.
Текст програми С у ОС можна створити будь-яким текстовим редактором і зберегти в текстовий файл з розширенням .с (наприклад prog.c). Виклик компілятора здійснюється з командного рядка командою сс. (Наприклад cc prog.c). Трансльований код зберігається у файл a.out. Файл a.out можна перейменувати та зробити таким, що виконується.
Сигнали є механізмом асинхронної взаємодії процесів. Кожен процес може приймати від іншого нумеровані сигнали, виконуючі у відповідь певну дію. Посилка сигналів здійснюється системним викликом kill(), який за замовчуванням приводить до завершення процесу – приймачу сигналу. У командній оболонці існує відповідна команда kill, за допомогою якої можна відправити процесу сигнал від процесу shell, наприклад: kill 34586 –s 9 (надіслати сигнал з номером 9 процесу з ідентифікатором 34586)
Процес певного користувача реагує на сигнал тільки якщо він надійшов від процесу адміністратора або процесу того ж користувача.
Реакція певного процесу на сигнал з заданим номером може бути перевизначена шляхом виконання цим процесом системного виклику signal(). Параметрами цього виклику є номер сигналу, реакція на який перевизначається, та посилання (адрес) нової процедури обробки сигналу.
За умовчуванням користувач потрапляє у домашній каталог. Для переміщення по файловій системі використовується команда cd. Команда ls виводить на консоль файли, котрі розміщені у поточному каталозі.
Використовуючи різноманітні ключі користувач може переглянути повну інформацію про файли, уміст каталогу у вигляді списку, розмір кожного файлу тощо. Команда pwd повідомляє користувача про те, у якому каталозі він працює на даний момент.
Для отримання загальної інформації про систему використовують команду df. Команда du відображає використання користувачем місця на диску, а free – вільне місце:
Створимо у домашньому каталозі користувача новий каталог і скопіюємо у нього файли з папки etc. Для виконання таких дій скористаємося командами mkdir та cp:
Переглянемо уміст щойно створеної папки:
Створимо ще один каталог, а потім видалимо перший з усіма його файлами:
У каталозі txtfolder створимо кілька текстових файлів, користуючись консольним текстовим редактором nano. Також, скористаємося командою touch. Тож, створимо файл file1:
Введемо якийсь текст і збережемо файл.
Аналогічно, створюємо другий файл:
Створюємо третій, пустий файл, і проглядаємо уміст нашого каталогу:
Проглядаємо уміст усіх текстових файлів, видаляємо файл із заданою назвою - file2 – а потім і решту, усі файли з каталогу, і з рештою і сам каталог txtfolder:
Виконання
Для виконання завдання треба створити три файли, два з яких будуть дещо різнитися у змісті: для цього скористаємося командою touch та редактором vi (рис.1).
Рисунок 1
Редактор UNIX vi – повноекранний і має два режими роботи: командний та режим вставки, для переключення між якими треба натиснути клавішу <Esc>. Щоб почати редагування відкритого файлу натиснемо клавішу < i > для переходу у режим вставки та наберемо необхідний текст; після повернення у режим команд наберемо ”:wq”: ‘w’ – для збереження внесених змін у зміст файлу і ‘q’ – для виходу з редактору (рис.2).
Рисунок 2
Виконуючи аналогічні дії відредагуємо file3.
Одночасно відкриємо перший та другий файл: так як у file1 було набрано три рядки, то для копіювання його змісту наберемо “3yy”; для переходу у file2 скористаємося командою “:n” і за допомогою ‘p’ вставимо у нього щойно скопійований текст.
Зміст цих двох файлів повинен мати певні відмінності, тому наберемо ще кілька рядків, збережемо зміни та вийдемо з редактору (рис.3).
Рисунок 3
«Об’єднаємо» ці три файли і запишемо результат у четвертий файл, який після сортування запишемо у п’ятий. Для цього «перенаправимо» вихідний потік команди cat у файл з назвою file4: при цьому вихідні дані цієї команди виведуться не у стандартний потік консолі, а у вказаний файл. Потім створимо ще один файл, у який занесемо відсортований зміст четвертого. Щоб уникнути використання допоміжних фалів, організуємо конвеєр команд: «прочитаємо» file4, а результат передамо у команду сортування рядків з подальшим занесенням у файл file5 (рис.4). Команди у конвеєрі розділяються символом “|”.
Рисунок 4
Аналогічно, з використанням конвеєра команд, з’єднаємо перший та третій файли, підрахуємо кількість рядків у об’єднанні командою wc та занесемо результат у файл unitedfile (рис.5).
Рисунок 5
У цей же файл занесемо кількість активних процесів та впорядковані за алфавітом переліки процесів і активних користувачів системи: використаємо команди ps та who відповідно (див. рис.5).
Для знаходження файлу з певною назвою або розширенням, слова у файлі тощо користуються командою grep. Знайдемо, наприклад, слова ‘all’ та ‘table’ у щойно створених нами файлах (рис.6).
Рисунок 6
Щоб знайти в каталозі місцезнаходження заданого файлу використовують команду find, у якій зазначають де шукати і власне що шукати: якщо замість шляху до каталогу вказати ‘.’, то команда find буде виконувати пошук заданого файлу у поточному каталозі; ім’я шуканого файлу вказується після “-name” (рис.7).
Рисунок 7
Знайдемо відмінність між двома файлами, а саме: file1 та file2, адже вони мають кілька однакових рядків. Для цього використаємо команду diff (рис.8).
Рисунок 8
Щоб видати посторінково на консоль всі файли, що починаються із заданої букви, наберемо “more f*”, адже у домашньому каталозі було створено п’ять файлів, назви яких починаються з букви ‘f’. Відкриється перший знайдений файл, а саме ‘file1’: на екран виведеться його назва та зміст; також у консолі буде вказано який файл є наступним. За допомогою ‘:n’ та ‘:p’ можна переміщуватися між файлами (рис.9).
Рисунок 9
Щоб знайти у каталозі "/etc" файли, які містять слово "root", знову застосуємо команду grep (рис.10).
Рисунок 10
Усе ще знаходячись у каталозі “/etc” підрахуємо кількість файлів у ньому та занесемо її спільно з їх упорядкованим списком у деякий файл, наприклад з назвою result. Цей файл створимо у домашньому каталозі користувача, як і файл result01, у який занесемо впорядкований результат роботи команди підрахунку кількості рядків кожного файлу домашнього каталогу (рис.11).
Рисунок 11
Щоб отримати список активних процесів треба скористатися командою ps: з –l – для повної інформації, a – для виведення усіх процесів на термінал, включаючи і інших користувачів та –A – для виведення усіх процесів (рис.1).
Рисунок 1
Щоб запустити одночасно два процеси необхідно ввести дві команди в один рядок та поставити між ними символ ‘&’ для їх паралельного виконання. Наприклад, виконаємо одночасно створення нового файлу file02 та виведення на консоль вмісту файлу file01 (рис.2).
Рисунок 2
Для задання запуску команди на визначений час використовується команда at, для перегляду списку «відкладених» завдань – atq, а для видалення завдання по його номеру – atrm.
Відкладемо виконання команди echo: за дві хвилини від поточного часу поточний на той момент час буде занесено у файл з назвою filedate.txt (рис.3). У вірності виконання цієї команди переконуємося виводячи вміст даного файлу на консоль.
Рисунок 3
Для перевірки файлової системи користуються утилітою fsck, але якщо систему змонтовано то її запускати не можна, інакше буде спричинено псування даних (рис.4).
Рисунок 4
Щоб додати нового користувача скористаємося командою adduser (рис.5): вводимо його ім’я, пароль та інформацію про нього; для nemo було створено відповідну групу та домашній каталог. За допомогою команди grep знайдемо нового користувача у файлі /etc/passwd.
Рисунок 5
Для створення нової групи скористаємося командою groupadd (рис.5): введемо її назву та, знову ж таки, скориставшись командою grep, знайдемо її у файлі /etc/group.
Рисунок 6
Для зміни прав доступу до заданого файлу скористаємося програмою chmod (рис.7): її аргументи можуть бути записані як у символьному вигляді, так і у числовому. Права доступу до файлів чи каталогів записуються для 3 типів користувачів: власника файлу, користувачів з його групи та для решти користувачів. Ввівши значення 744 ми надали усім користувачам право читати файл file01, а власнику файлу – ще і редактувати та запускати його. За допомогою команди chown змінимо власника цього файлу на nemo та спробуємо відкрити цей файл, все ще знаходячись у системі під ім’ям користувача sveta: система контролю доступу працює коректно, адже так як sveta більше не є власником файлу, то цей користувач може лише проглянути вміст даного файлу.
Рисунок 7
Створюємо текстовий файл з розширенням .с, у якому на мові С написано код, що створює новий процес, який завершується після отримання відповідного сигналу від процесу-предка (рис.1).
Рисунок 1
Тестуємо цю програму (рис.2):
Рисунок 2