Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Modulnyy_kontrol_OC_1 (2).doc
Скачиваний:
5
Добавлен:
23.11.2019
Размер:
664.06 Кб
Скачать
    1. Знать команды и уметь использовать.

Нижче наведено декілька команд для керування файлами та каталогами.

Команди 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”).

      1. Перемещение по файловой системе.

Кожна команда 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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]