Professional Documents
Culture Documents
ОС ЛР №4 2018
ОС ЛР №4 2018
МЕТОДИЧНІ ВКАЗІВКИ
до лабораторної роботи № 2
з дисципліни «Операційні системи»
для студентів спеціальності 125 «Кібербезпека»
спеціалізації «Безпека інформаційних і комунікаційних систем»
Затверджено
на засіданні кафедри
безпеки інформаційних технологій
протокол № __ від ____________ р.
Львів – 2018
Знайомство з Unix-подібною операційною системою GNU/Linux.
Основні команди ОС: Методичні вказівки до лабораторної роботи №2 з
дисципліни «Операційні системи» для студентів спеціальності 125
«Кібербезпека», спеціалізації «Безпека інформаційних і комунікаційних систем» /
Укл. В. А. Мельник, Я. В. Решетар, Т. Р. Борецький. - Львів: НУ «Львівська
політехніка», 2018. – 18 с.
Відповідальний за випуск:
Зав. кафедри безпеки інформаційних технологій,
д.т.н., професор Максимович В.М.
Рецензенти:
Професор кафедри безпеки інформаційних технологій,
д.т.н., доцент Мороз Л.В.
Доцент кафедри безпеки інформаційних технологій
к.ф-м.н., доцент Войтусік С.С.
2
МЕТА РОБОТИ – оволодіти практичними навичками роботи в системі
GNU/Linux. Ознайомитись із структурою файлової системи, основними
інформаційними командами, командами для роботи з файлами та каталогами.
3
Open Group стала займатися сертифікацією, публікацією наукових статей і
тестуванням відповідності. На початку 1990-х років, коли «юніксові війни» були в
самому розпалі, The Open Group випустила Єдину специфікацію UNIX (SUS).
Популярність SUS швидко росла, багато в чому завдяки тому, що вона була
безкоштовною, а стандарт POSIX залишався дорогим. В даний час SUS включає в
себе новітній стандарт POSIX.
Перша версія SUS була опублікована в 1994 році. Потім з’явились
переглянуті версії, випущені в 1997-му (SUSv2) і 2002 році (SUSv3). Останній
варіант SUS, SUSv4, був опублікований в 2008 році. У SUSv4 переглянутий
стандарт IEEE Std 1003.1-2008, що об'єднується в рамках цієї специфікації з
кількома іншими стандартами.
Як було сказано вище, Linux прагне відповідати стандартам POSIX і SUS.
ОС Linux надає інтерфейси, документовані в SUSv4 і POSIX 2008, а також
підтримує роботу в реальному часі (POSIX.1b) і роботу з потоками (POSIX.1c).
Проте, набагато важливішим є те, що Linux прагне працювати відповідно з
вимогами POSIX і SUS. В принципі, будь-яка невідповідність стандартам є
помилкою. Вважається, що Linux також відповідає POSIX.1 і SUSv3, але, оскільки
ніякої офіційної сертифікації POSIX або SUS не проводилося (зокрема, у всіх
існуючих версіях Linux), не можна сказати, що Linux офіційно відповідає POSIX
або SUS.
У різних дистрибутивах Linux багато компонентів операційної системи
визначаються в LSB (Linux Standard Base). LSB - це спільний проект кількох
виробників Linux, який проводиться під егідою Linux Foundation (раніше ця
організація називалася Free Standards Group). LSB доповнює POSIX і SUS, а також
додає власні стандарти. Організація прагне надати двійковий стандарт, що
дозволяє в незмінному вигляді виконувати об'єктний код в системах, що
відповідають цьому стандарту. Більшість виробників Linux в тій чи іншій мірі
дотримуються LSB.
4
структуру даних файлів. До їх вмісту можливий як послідовний, так і прямий
доступ.
1.2.2. Каталоги
Файли даного типу зберігають іменовані посилання на інші файли. Ім’я
файлу, що знаходяться в каталозі, насправді зберігається в батьківському каталозі,
а не в самому файлі.
Структура каталогів в Linux
Дерево каталогів в Linux починається з кореневого каталогу /. Задавати
диск, наприклад, C: в Linux неможливо. Таким чином, якщо представити дерево
каталогів наглядно, то кореневий каталог розміщений на його вершині. При
роботі з текстовими консолями(терміналами) після входу в систему ви зразу ж
автоматично опинитесь в так званому особистому, або домашньому, каталозі. У
вашому розпорядженні всі розміщені в ньому файли і підкаталоги. Інші
користувачі (крім адміністратора) не можуть змінювати/видаляти файли вашого
особистого каталогу (а при деяких налаштуваннях навіть не можуть їх читати).
Особистий каталог зазвичай знаходиться в дереві каталогів Linux за адресою
/home/loginname/ (тільки особистий каталог адміністратора називається /root).
Оскільки було б незручно кожного разу писати /home/loginname/, назва
особистого домашнього каталогу скорочується до символу тильди (~). Крім того,
доступ до особистих каталогів інших користувачів можливий через запис
~loginname.
В кожному каталозі є два особливих підкаталогів, необхідних для
формального управління ієрархією каталогів. Каталог з ім’ям, що починається з . ,
представляє собою посилання на актуальний каталог, а каталог з іменем, що
починається з .., — на каталог, розміщений на рівень вище.
5
програм знаходяться в /usr/bin. В сучасних дистрибутивах /bin — це просто
посилання на /usr/bin, тобто різниця між /bin и /usr/bin практично відсутня.
/boot — містить файли, призначені для завантаження системи. В більшості
дистрибутивів тут також розміщується ядро.
/dev — містить всі файли пристроїв. Доступ практично до будь-якого
компоненту апаратного забезпечення, чи це серійний інтерфейс чи сегмент
жорсткого диску, здійснюється через спеціальні файли-пристрої. Файли-пристрої
динамічно створюються системою udev. В більшості дистрибутивів каталог
розміщений в оперативній пам’яті. Тому вміст даного каталогу втрачається при
перезавантаженні системи.
/etc — включає в себе конфігураційні файли для всієї системи. В /etc є
множина підкаталогів, в яких конфігураційні файли розподіляються по групах,
наприклад /etc/X11 для всіх X-специфічних файлів.
/home — містить домашні каталоги всіх звичайних користувачів Linux.
Домашнім називається той каталог, в якому користувач автоматично опиняється
після входу в систему і по відношенню до файлів якого цей користувач має
необмежені права (домашній каталог адміністратора має власну назву - /root).
/lib[64] — містить множину загальних бібліотек (shared libraries) або
символьні посилання на них. Ці файли забезпечують роботу програм. Каталог
/lib/modules включає модулі ядра, які динамічно активуються або деактивуються
без зупинки роботи системи. Решта бібліотек знаходяться в каталозі /usr/lib[64]. В
каталозі /lib/firmware знаходяться вбудовані програми(так звана прошивка)
різноманітних компонентів апаратного забезпечення (наприклад, контролер
WLAN). У сучасних дистрибутивах / lib є посиланням на /usr/lib. Таким чином, всі
бібліотеки централізовано зберігаються в каталозі usr.
/lost+found - зазвичай цей каталог порожній. Якщо в ньому є файли, то вони
являються фрагментами, які не вдалося впорядкувати після відновлення файлової
системи (fsck). Іншими словами: були знайдені сектори, але невідомо, до якого
файлу відноситься який сектор. Замість того щоб просто видаляти такі фрагменти,
команда fsck копіює їх у каталог /lost+found. Ця команда автоматично
виконується при запуску системи кожного разу, коли робота Linux була
завершена з помилками (перебої з електрикою, апаратний збій і т. п.) або файлова
система не перевірялася протягом тривалого часу. Мета fsck полягає в тому, щоб
привести файлову систему в стан, який можна однозначно описати.
/media - містить такі підкаталоги, як cdrom або floppy, на місці яких можна
прив'язати зовнішню файлову систему. Раніше цей каталог називався /mnt, але з
часом закріпився варіант /media. У нових дистрибутивах з’явилось і нове подібне
місце: зовнішні носії даних інтегруються в каталог файлової системи
/run/media/username/storagename.
/proc - зберігає підкаталоги для всіх процесів, які виконуються в даний
момент. У даному випадку мова не йде про справжні файли. Каталог /proc просто
відображає внутрішнє управління процесами в системі Linux.
/root - містить файли root-користувача (тобто системного адміністратора).
/sbin - включає команди, призначені для управління системою. Загальна
ознака всіх програм, що містяться в цьому каталозі, полягає в тому, що всі вони
можуть виконуватися тільки адміністратором. У сучасних дистрибутивах /sbin є
6
посиланням на /usr/sbin; всі команди для управління системою тепер знаходяться
в /usr/sbin.
/run - у багатьох сучасних дистрибутивах містить файли з ідентифікаторами
процесів, а також додаткову інформацію за деякими системними службам. Раніше
такі файли зберігалися в каталозі /var/run.
Підкаталог /run/lock/ містить блокуючі файли. У більш ранніх
дистрибутивах такі файли знаходилися в каталозі /var/lock.
У багатьох дистрибутивах у вміст оперативної пам'яті був переміщений або
весь каталог /run, або як мінімум деякі його підкаталоги.
/sys - у версіях ядра від 2.6 і вище даний каталог містить файлову систему
sysfs. Ця система (як і proc) повідомляє інформацію про стан комп’ютера.
/tmp - містить тимчасові файли. Однак часто тимчасові файли зберігаються
і у /var/tmp.
/usr - включає всі програми користувачів, повноцінну X-систему, вихідні
коди Linux і т. д. Як правило, вміст цього каталогу змінюється тільки при
установці пакетів і виконанні оновлень.
/var - містить змінні файли. Найважливішими підкаталогами тут є adm
(адміністративні файли, відрізняються залежно від дистрибутива), lock (блокуючі
файли, що запобігають доступ до пристроїв для користувачів, що не мають на це
права), log (файли реєстрації), mail (файли електронних повідомлень, також
знаходяться в каталозі spool / mail) і spool (збережені в буфері файли для виводу
на друк, новинні файли і т. д.).
Особливі типи файлів
Крім звичайних, в Linux є специфічні види файлів, наприклад, посилання,
файли пристроїв для доступу до компонентів апаратного забезпечення. У команді
ls –F (відображеня переліку файлів) такі специфічні файли позначаються
додатковим символом.
8
Таблиця 4. Команди навігації по файловій системі
Назва команди Функції, які виконує команда
pwd Відображення поточної директорії
passwd Дозволяє змінити пароль користувача
cd <директорія> Змінює поточну директорію
Відображає вміст директорії, опція розширена
ls [-парам] інформація
mkdir <директорія> Створює директорію
Відновлює час доступу та модифікації кожного
touch <файл> файлу до поточного часу, якщо файлу немає
створює пустий файл
cp <джерело><призначення> Копіювання файлів
mv <джерело><призначення> Переміщення файлів
cat <файл1> .. <файлN> Об'єднує файли та виводить на стандартний вивід
Програмні канали
Програмний канал (pipe) створюється за допомогою символу |. При цьому
вивід першої команди використовується як ввід для другої команди. На практиці
програмні канали часто об'єднуються командою less, якщо потрібно переглядати
довгий вивід у вигляді посторінкової розбивки.
user$ ls -l | less
Наведена команда дозволяє отримати «зміст» поточного каталогу і записати
його в програмний канал. Звідти команда less, що виконується паралельно, зчитує
ввід попередньої команди і відображає його на екрані.
11
Програмні канали як правило підходять для комбінування різних команд.
Так, наприклад, наступна команда повертає відсортований список всіх
встановлених пакетів RPM:
user$ rpm -qa | sort
Замість програмних каналів для переадресації введення і виведення можуть
використовуватися так звані FIFO-файли. FIFO означає «перший прийшов
перший вийшов» (first in first out) і реалізує ідею програмного каналу в формі
файлу. Працювати з FIFO-файлами при введенні значно складніше, ніж з
програмними каналами, однак вони дозволяють зрозуміти, на що ж саме впливає
символ |. На практиці такі файли застосовуються для того, щоб дві програми, що
працюють незалежно одна від одної, могли обмінюватися інформацією.
user$ mkfifo fifo
user$ ls –l > fifo &
user$ less < fifo
За допомогою трьох вищевказаних команд спочатку створюється FIFO-
файл. Крім того, у вигляді фонового процесу запускається ls. Вона записує свій
результат роботи в файл. Звідти less знову зчитує дані і відображає їх на екрані.
Розмноження виводу командою tee
Іноді програмний вивід потрібно зберегти у файлі, однак одночасно з цим
виконання програми необхідно відстежувати на екрані. У такому випадку
потрібне подвоєння введення, причому одна копія відображається на екрані, а
друга зберігається у файлі. Це завдання виконує команда tee:
user$ ls | tee content
Вміст поточного каталогу відображається на екрані і при цьому зберігається
в файлі content. При цьому спочатку відбувається переадресація стандартного
виводу до команди tee. За замовчуванням стандартний вивід відображається на
екрані, а копія цієї інформації зберігається в зазначеному файлі. Оскільки в
даному випадку мова насправді йде про розмноження виводу, зверніть увагу, як
переадресувати стандартний вивід tee в файл:
user$ ls | tee content1 > content2
В результаті отримуємо два однакових файли: content1 і content2. Попередня
команда приведена для прикладу. Наступний приклад зрозуміти складніше,
але він ближчий до практики:
user $ ls -l | tee content1 | sort +4 > content2
У content1 розташований звичайний зміст, який автоматично відсортований
командою ls за іменем. Копія цього виводу передається sort, а потім відбувається
сортування за розміром файлу (п'ятий стовпець, тобто параметр +4) і збереження
інформації в файлі content2.
12
Виконання декількох команд
Після символу & допустимо вказати наступну команду. У такому випадку
перша команда буде виконуватися у фоновому режимі, а друга в явному. У
наступному прикладі команда find запускається у фоновому режимі. Однак ls
одночасно виводить зміст поточного каталогу:
user$ find / -name '* sh'> result & ls
Якщо замість символу & поставити крапку з комою, то інтерпретатор по
черзі виконає команди у фоновому режимі:
user$ ls; date
Ця команда спочатку відображає зміст поточного каталогу, а потім
виводить поточну дату. Якщо необхідно перенаправити цю інформацію у файл за
допомогою >, то обидві команди поміщаються в круглих дужках. У такому
випадку вони виконуються однією і тією ж оболонкою.
user$ (ls; date) > content
У файлі content тепер знаходиться список файлів, створений ls, а також
поточна дата, з'ясована date. Завдяки круглим дужкам обидві команди
виконуються однією і тією ж оболонкою і видають загальний результат (як
правило, при запуску кожної нової команди активується нова оболонка).
Використовуючи поєднання символів && і ||, можна виконувати команди
відносно, тобто залежно від результату іншої команди. Наприклад:
user$ команда1 && команда2
виконує команду2 тільки у випадку, якщо команда1 була виконана успішно
(без помилки, тобто без видачі коду повернення 0)
15
У своїй домашній директорії створити дворівневу структуру каталогів. В директорії
2-ого рівня створити файл з ім'ям var_11. Графічно відобразити структуру створених
каталогів. Запустити у фоновому режимі пошук усіх .conf файлів у файловій системі.
11 Паралельно записати у файл розширений перелік каталогів кореневого диску. Вивести на
екран вміст файлу за допомогою команд сat та less. Знайти у файлі рядки які містять
“var”.
У своїй домашній директорії створити трирівневу структуру каталогів. У директорії 3-го
рівня створити файл з ім'ям var_12, потім перемістити його у директорію 2-го рівня.
12 Продемонструвати вміст домашньої директорії та записати результат у файл, потім
дописати у файл к-ть символів файлу etc/passwd, та системний час. Вивести вміст файлу
на екран.
У своїй домашній директорії створити трирівневу структуру каталогів. У директорії 1-го
рівня створити файл з ім'ям var_13 та скопіювати його у директорію 3-ого рівня з новим
ім'ям new_var_13. Здійснити пошук по всьому дереву каталогів та перевірити чи є в
13 системі файли скриптів мовою Perl (.perl), результати пошуку (а також повідомлення про
помилки) переадресувати у файл new_var_13. Дописати у файл графічне відображення
структури створених каталогів та ім'я комп'ютера.
У своїй домашній директорії створити дворівневу структуру каталогів. В директорії
2-ого рівня створити файл з ім'ям var_14 та занести в нього довільний текст через
14 термінал. Обчислити кількість рядків і символів у файлі з одночасним виводом
результату на екран та в новий файл new_var_14 в директорії 1-го рівня. Знайти у файлі
рядки які містять довільну введену символьну послідовність.
У своїй домашній директорії створити дворівневу структуру каталогів. У директорії
2-ого рівня створити файл з ім'ям var_15 та скопіювати його у директорію першого
15 рівня. Перейменувати файл у директорії 2-го рівня на old_var_15, занести в нього
довільний текст через термінал. Вивести вміст кожної директорії з записом результату у
файл var_15. Дописати у файл var_15 кількість слів у файлі old_var_15.
У своїй домашній директорії створити трирівневу структуру каталогів. У директорії
2-ого рівня створити файл з ім'ям var_16 та скопіювати його у директорії першого та
16 3-го рівнів, давши окремі імена. Продемонструвати вміст кожної директорії. Записати у
файл var_16 графічне відображення структури створених каталогів. Вивести вміст файлу
на екран почергово за допомогою різних команд (сat, less, more).
У своїй домашній директорії створити трирівневу структуру каталогів. У директорії
2-ого рівня створити файли var_17_1, var_17_2, var_17_3 та перемістити їх по одному у
відповідні директорії (1-го та 3-го рівнів). У фоновому режимі здійснити пошук у
17 каталозі /usr/bin усіх файлів, що містять “sh” у назві . Записати у файл var_17_1 перелік
файлів каталогу /usr/bin з розширенням .sh, а у файл var_17_3 кількість рядків файлу
var_17_1. За допомогою команди cat вивести на екран вміст var_17_3.
У своїй домашній директорії створити каталог і файл у ньому var_18.log. Перейти у
директорію, що включає в себе програмні файли для всієї системи (/usr/bin) та записати
18 у var_18.log перелік усіх файлів, що містять “log” у назві, забезпечивши одночасний
вивід результату на екран.
У своїй домашній директорії створити 3-рівневу структуру каталогів. В каталозі 3-ого
рівня створити файл var_19, додавши в нього ім'я комп’ютера та шлях до поточного
19 каталогу. Скопіювати файл у кожний з каталогів вашої структури надавши копіям
відмінне ім'я. Вивести графічне відображення структури створених каталогів. У кожен з
файлів дописати підрахунок кількості рядків, слів та символів у інших 2-ох файлах.
16
У своїй домашній директорії створити 2-рівневу структуру каталогів. У директорії 2-го
рівня створити файл var_20 та перемістити його у директорію першого рівня надавши
20 нове ім'я new_var_20. Продемонструвати вміст домашньої директорії та одночасно
записати результат у файл. Дописати у файл new_var_20 результати пошуку усіх файлів з
розширенням .tmp. які є у системі та системну дату в кінці. Вивести вміст файлу на екран.
У своїй домашній директорії створити трирівневу структуру каталогів. В директорії 2-ого
рівня створити файл з ім'ям var_21. Графічно відобразити структуру створених каталогів.
21 Запустити у фоновому режимі пошук усіх .sh файлів у файловій системі. Паралельно
записати у файл розширений перелік вмісту домашнього каталогу. Вивести на екран вміст
файлу за допомогою команд сat та less.
У своїй домашній директорії створити трирівневу структуру каталогів. У директорії 3-го
рівня створити файл з ім'ям var_22, потім перемістити його у директорію 2-го рівня
22 надавши ім’я new_var_22. Продемонструвати вміст кореневого каталогу та записати
результат у файл, потім дописати у файл к-ть рядків файлу etc/lpr та системний час.
Вивести вміст файлу на екран.
У своїй домашній директорії створити дворівневу структуру каталогів. У директорії 1-го
рівня створити файл з ім'ям var_23 та скопіювати його у директорію 2-ого рівня з новим
ім'ям new_var_23. Здійснити пошук у каталозі /bin та перевірити чи є в ньому файли з
23 розширенням .sh, результати пошуку (а також повідомлення про помилки) переадресувати
у файл new_var_23. Дописати у файл графічне відображення структури створених
каталогів та поточну дату в кінці.
У своїй домашній директорії створити трирівневу структуру каталогів. В директорії 2-ого
рівня створити файл з ім'ям var_24 та занести в нього довільний текст через термінал.
24 Скопіювати файл у директорії 1 та 3-го рівнів, надавши їм окремі імена Обчислити
кількість рядків і символів у файлі var_24 з одночасним виводом результату на екран та в
новий файл new_var_24 в директорії 1-го рівня.
У своїй домашній директорії створити дворівневу структуру каталогів. У директорії 2-ого
рівня створити файл з ім'ям var_25 та скопіювати його у директорію першого рівня.
25 Перейменувати файл у директорії 2-го рівня на old_var_25, занести в нього результати
пошуку у домашньому каталозі усіх .png файлів. Відобразити графічну структуру
створених каталогів з одночасним записом у файл var_25.
У своїй домашній директорії створити трирівневу структуру каталогів. У директорії 1-ого
рівня створити файл з ім'ям var_26 та скопіювати його у директорії другого та 3-го рівнів,
давши окремі імена. Продемонструвати вміст домашнього каталогу разом з прихованими
26 файлами і одночасним записом у файл var_26. В кінці файлу додати графічне
відображення структури створених каталогів. Вивести вміст файлу на екран почергово за
допомогою різних команд (сat, less, more).
У своїй домашній директорії створити дворівневу структуру каталогів. У директорії 2-ого
рівня створити файли var_27_1 та var_27_2 та перемістити їх у директорію 1-го рівня. У
27 фоновому режимі здійснити пошук у кореновму каталозі / усіх файлів коду мовою С (.с).
Записати у файл var_27_1 вміст файлу /etc/group, а у файл var_27_2 кількість байт файлу
var_27_1. За допомогою команди cat вивести на екран вміст var_27_2.
У своїй домашній директорії створити каталог і два файли у ньому var_28_1 та var_28_2.
Графічно відобразити структуру домашнього каталогу з одночасним записом у файл
28 var_28_1. Перейти у директорію, що включає в себе конфігураційні файли для всієї
системи (/etc) та записати у файл var_28_2 перелік усіх файлів з розширенням .log
забезпечивши одночасний вивід результатів на екран
3. ЗМІСТ ЗВІТУ
Звіт повинен містити:
мету роботи, завдання (варіант студента);
порядок виконання роботи;
результати виконання індивідуального завдання (п. 19);
висновки.
4. СПИСОК ЛІТЕРАТУРИ
1. Шеховцов, В. А. Операційні системи [Текст] : підруч. для студ. вищ. навч.
закл. / В. А. Шеховцов. - К. : BHV, 2005. - 575 с.
2. A. Silberschatz, P. B. Galvin, and G. Gagne. Operating System Concepts. John
Wiley & Sons, Hoboken, NJ, 9th edition, 2013.
3. W. Stallings. Operating Systems: Internals and Design Principles. Pearson
Education, Upper Saddle River, NJ, 9th edition, 2018.
4. A. S. Tanenbaum. Modern Operating Systems. Pearson Education, Upper
Saddle River, NJ, 4th edition, 2014.
5. Maurice Bach. “Design of the Unix Operating Systems”. Pearson Education,
Upper Saddle River, NJ, 2015.
6. Ken Rosen and James Farber. “Unix – The Complete Reference”. McGraw-
Hill Publishing Co. 1999.
7. D.A. Solomon: Inside Windows NT, Microsoft Press, 1998.
8. Daniel P. Bovet, Marco Cesati , Understanding the Linux Kernel, 3rd Edition.
O'Reilly Media (November 2005): 944 Pages.
9. Jonathan Levin, Mac OS X and iOS Internals: To the Apple's Core. Wiley
(2012), 864 pages.
18
НАВЧАЛЬНЕ ВИДАННЯ
МЕТОДИЧНІ ВКАЗІВКИ
до лабораторної роботи №2
з дисципліни «Операційні системи»
для студентів спеціальності 125 «Кібербезпека»,
спеціалізації «Безпека інформаційних і комунікаційних систем»
19